class TableStructure::Schema::Columns::Attributes

Attributes

keys[R]
size[R]

Public Class Methods

new(name:, key:, value:, size:) click to toggle source
# File lib/table_structure/schema/columns/attributes.rb, line 9
def initialize(name:, key:, value:, size:)
  @name_callable = Utils.callable?(name)
  @name = @name_callable ? name : proc { name }
  @keys = optimize_size([key].flatten, size)
  @value_callable = Utils.callable?(value)
  @value = @value_callable ? value : proc { value }
  @size = size
end

Public Instance Methods

name_callable?() click to toggle source
# File lib/table_structure/schema/columns/attributes.rb, line 28
def name_callable?
  @name_callable
end
names(context, table_context) click to toggle source
# File lib/table_structure/schema/columns/attributes.rb, line 18
def names(context, table_context)
  names = @name.call(context, table_context)
  optimize_size(names, @size)
end
value_callable?() click to toggle source
# File lib/table_structure/schema/columns/attributes.rb, line 32
def value_callable?
  @value_callable
end
values(context, table_context) click to toggle source
# File lib/table_structure/schema/columns/attributes.rb, line 23
def values(context, table_context)
  values = @value.call(context, table_context)
  optimize_size(values, @size)
end

Private Instance Methods

optimize_size(value, expected_size) click to toggle source
# File lib/table_structure/schema/columns/attributes.rb, line 38
def optimize_size(value, expected_size)
  return value if expected_size == 1 && !value.is_a?(Array)

  values = [value].flatten
  actual_size = values.size
  if actual_size > expected_size
    values[0, expected_size]
  elsif actual_size < expected_size
    [].concat(values).fill(nil, actual_size, (expected_size - actual_size))
  else
    values
  end
end