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