class Janko::ColumnList

Public Class Methods

build(source) click to toggle source
# File lib/janko/column_list.rb, line 11
def ColumnList.build(source)
    source.is_a?(ColumnList) ? source : ColumnList.new.add(*source)
end

Public Instance Methods

add(*names) click to toggle source
# File lib/janko/column_list.rb, line 23
def add(*names)
    each_column(names) { |name| add_column(name) }
end
alter(*names) { |column| ... } click to toggle source
# File lib/janko/column_list.rb, line 54
def alter(*names)
    each_column(names) do |name, column|
        raise("Unknown column: #{name}") unless column
        yield(column)
    end
end
builder() click to toggle source
# File lib/janko/column_list.rb, line 19
def builder
    self
end
columns() click to toggle source
# File lib/janko/column_list.rb, line 114
def columns
    @state[:columns].keys
end
connection() click to toggle source
# File lib/janko/column_list.rb, line 118
def connection
    @state[:parent].connection
end
default_state() click to toggle source
# File lib/janko/column_list.rb, line 15
def default_state
    { columns: {} }
end
each(&block) click to toggle source
# File lib/janko/column_list.rb, line 93
def each(&block)
    @state[:columns].each(&block)
end
empty?() click to toggle source
# File lib/janko/column_list.rb, line 110
def empty?
    @state[:columns].empty?
end
inspect() click to toggle source
# File lib/janko/column_list.rb, line 126
def inspect
    children = @state[:columns].map { |name, column|
        "#{name}(#{column.inspect})" }
    "#<#{self.class}:0x#{self.__id__.to_s(16)} #{children.join(" ")}>"
end
length() click to toggle source
# File lib/janko/column_list.rb, line 132
def length
    @length ||= @state[:columns].length
end
map(&block) click to toggle source
# File lib/janko/column_list.rb, line 97
def map(&block)
    @state[:columns].map(&block)
end
map_and_join(separator = ",", &block) click to toggle source
# File lib/janko/column_list.rb, line 101
def map_and_join(separator = ",", &block)
    map(&block).join(separator)
end
map_and_join_with_index(separator = ",") { |*pair, index| ... } click to toggle source
# File lib/janko/column_list.rb, line 105
def map_and_join_with_index(separator = ",")
    output = each_with_index.map { |pair, index| yield(*pair, index) }
    output.join(separator)
end
none_tagged?(tag) click to toggle source
# File lib/janko/column_list.rb, line 50
def none_tagged?(tag)
    @state[:columns].none? { |_, column| column.has_tag?(tag) }
end
not_tagged(tag) click to toggle source
# File lib/janko/column_list.rb, line 46
def not_tagged(tag)
    filter_columns { |name, column| not column.has_tag?(tag) }
end
pack(values) click to toggle source
# File lib/janko/column_list.rb, line 65
def pack(values)
    pack_hash(stringify_keys(values))
end
pack_hash(values) click to toggle source
# File lib/janko/column_list.rb, line 136
def pack_hash(values)
    result = columns.map { |column| values.delete(column) }
    return(result) if values.empty?
    raise(ArgumentError, "Unknown columns: #{values.keys.join(" ")}")
end
remove(*names) click to toggle source
# File lib/janko/column_list.rb, line 27
def remove(*names)
    each_column(names) { |name| remove_column(name) }
end
set(state) click to toggle source
# File lib/janko/column_list.rb, line 61
def set(state)
    chain(state)
end
table() click to toggle source
# File lib/janko/column_list.rb, line 122
def table
    @state[:parent].table
end
tag(tag, *names) click to toggle source
# File lib/janko/column_list.rb, line 31
def tag(tag, *names)
    each { |_, column| column.untag(tag) }
    each_column(names) { |name| add_column(name).tag(tag) }
end
tagged(tag = nil) click to toggle source
# File lib/janko/column_list.rb, line 40
def tagged(tag = nil)
    filter_columns do |name, column|
        (tag.nil? and column.tagged?) or column.has_tag?(tag)
    end
end
to_binds() click to toggle source
# File lib/janko/column_list.rb, line 85
def to_binds
    map_and_join_with_index { |_, c, i| c.to_bind(i + 1) }
end
to_conditions(left = nil, right = nil) click to toggle source
# File lib/janko/column_list.rb, line 73
def to_conditions(left = nil, right = nil)
    map_and_join(" AND ") { |_, c| c.to_condition(left, right) }
end
to_list() click to toggle source
# File lib/janko/column_list.rb, line 69
def to_list
    map_and_join { |_, column| column.quoted }
end
to_list_with_defaults() click to toggle source
# File lib/janko/column_list.rb, line 81
def to_list_with_defaults
    map_and_join { |_, c| c.to_value }
end
to_setters(left = nil, right = nil) click to toggle source
# File lib/janko/column_list.rb, line 77
def to_setters(left = nil, right = nil)
    map_and_join { |_, c| c.to_setter(left, right) }
end
to_typecast_binds() click to toggle source
# File lib/janko/column_list.rb, line 89
def to_typecast_binds
    map_and_join_with_index { |_, c, i| c.to_typecast_bind(i + 1) }
end
untag(tag, *names) click to toggle source
# File lib/janko/column_list.rb, line 36
def untag(tag, *names)
    each_column(names) { |_, column| column and column.untag(tag) }
end

Private Instance Methods

add_column(name) click to toggle source
# File lib/janko/column_list.rb, line 144
def add_column(name)
    @state[:columns][name.to_s] ||= TaggedColumn.new(name: name,
        parent: self)
end
each_column(names) { |name, state[name]| ... } click to toggle source
# File lib/janko/column_list.rb, line 186
def each_column(names)
    matching_names(names).each do |name|
        yield(name, @state[:columns][name.to_s])
    end
    self
end
filter_columns() { |n, c| ... } click to toggle source
# File lib/janko/column_list.rb, line 154
def filter_columns
    result = {}
    each { |n, c| result[n] = c if yield(n, c) }
    self.class.new(@state.merge(columns: result))
end
matching_names(names) click to toggle source
# File lib/janko/column_list.rb, line 166
def matching_names(names)
    result = []
    names.flatten.each do |name|
        if(name == Janko::ALL)
            result.concat(connection.column_list(table))
        elsif(name == Janko::DEFAULT)
            result.concat(connection.column_list(table) - [ "id" ])
        elsif(name.is_a?(Hash) and name.has_key?(:except))
            all_columns = connection.column_list(table)
            exceptions = [ name[:except] ].flatten.map(&:to_s)
            result.concat(all_columns - exceptions)
        elsif(name.nil? or name == "")
            raise("Blank or nil column names are not allowed.")
        else
            result.push(name.to_s)
        end
    end
    result
end
remove_column(name) click to toggle source
# File lib/janko/column_list.rb, line 149
def remove_column(name)
    @state[:columns].delete(name.to_s)
    self
end
stringify_keys(hash) click to toggle source
# File lib/janko/column_list.rb, line 160
def stringify_keys(hash)
    output = {}
    hash.each { |k, v| output[k.to_s] = v }
    output
end