Class: Janko::ColumnList
- Inherits:
-
Object
- Object
- Janko::ColumnList
- Includes:
- Agrippa::MutableHash, Enumerable
- Defined in:
- lib/janko/column_list.rb
Class Method Summary collapse
Instance Method Summary collapse
- #add(*names) ⇒ Object
- #alter(*names) ⇒ Object
- #builder ⇒ Object
- #columns ⇒ Object
- #connection ⇒ Object
- #default_state ⇒ Object
- #each(&block) ⇒ Object
- #empty? ⇒ Boolean
- #inspect ⇒ Object
- #length ⇒ Object
- #map(&block) ⇒ Object
- #map_and_join(separator = ",", &block) ⇒ Object
- #map_and_join_with_index(separator = ",") ⇒ Object
- #none_tagged?(tag) ⇒ Boolean
- #not_tagged(tag) ⇒ Object
- #pack(values) ⇒ Object
- #pack_hash(values) ⇒ Object
- #remove(*names) ⇒ Object
- #set(state) ⇒ Object
- #table ⇒ Object
- #tag(tag, *names) ⇒ Object
- #tagged(tag = nil) ⇒ Object
- #to_binds ⇒ Object
- #to_conditions(left = nil, right = nil) ⇒ Object
- #to_list ⇒ Object
- #to_list_with_defaults ⇒ Object
- #to_setters(left = nil, right = nil) ⇒ Object
- #to_typecast_binds ⇒ Object
- #untag(tag, *names) ⇒ Object
Class Method Details
.build(source) ⇒ Object
11 12 13 |
# File 'lib/janko/column_list.rb', line 11 def ColumnList.build(source) source.is_a?(ColumnList) ? source : ColumnList.new.add(*source) end |
Instance Method Details
#add(*names) ⇒ Object
23 24 25 |
# File 'lib/janko/column_list.rb', line 23 def add(*names) each_column(names) { |name| add_column(name) } end |
#alter(*names) ⇒ Object
54 55 56 57 58 59 |
# 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 ⇒ Object
19 20 21 |
# File 'lib/janko/column_list.rb', line 19 def builder self end |
#columns ⇒ Object
114 115 116 |
# File 'lib/janko/column_list.rb', line 114 def columns @state[:columns].keys end |
#connection ⇒ Object
118 119 120 |
# File 'lib/janko/column_list.rb', line 118 def connection @state[:parent].connection end |
#default_state ⇒ Object
15 16 17 |
# File 'lib/janko/column_list.rb', line 15 def default_state { columns: {} } end |
#each(&block) ⇒ Object
93 94 95 |
# File 'lib/janko/column_list.rb', line 93 def each(&block) @state[:columns].each(&block) end |
#empty? ⇒ Boolean
110 111 112 |
# File 'lib/janko/column_list.rb', line 110 def empty? @state[:columns].empty? end |
#inspect ⇒ Object
126 127 128 129 130 |
# 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 ⇒ Object
132 133 134 |
# File 'lib/janko/column_list.rb', line 132 def length @length ||= @state[:columns].length end |
#map(&block) ⇒ Object
97 98 99 |
# File 'lib/janko/column_list.rb', line 97 def map(&block) @state[:columns].map(&block) end |
#map_and_join(separator = ",", &block) ⇒ Object
101 102 103 |
# 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 = ",") ⇒ Object
105 106 107 108 |
# 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) ⇒ Boolean
50 51 52 |
# File 'lib/janko/column_list.rb', line 50 def none_tagged?(tag) @state[:columns].none? { |_, column| column.has_tag?(tag) } end |
#not_tagged(tag) ⇒ Object
46 47 48 |
# File 'lib/janko/column_list.rb', line 46 def not_tagged(tag) filter_columns { |name, column| not column.has_tag?(tag) } end |
#pack(values) ⇒ Object
65 66 67 |
# File 'lib/janko/column_list.rb', line 65 def pack(values) pack_hash(stringify_keys(values)) end |
#pack_hash(values) ⇒ Object
136 137 138 139 140 |
# 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) ⇒ Object
27 28 29 |
# File 'lib/janko/column_list.rb', line 27 def remove(*names) each_column(names) { |name| remove_column(name) } end |
#set(state) ⇒ Object
61 62 63 |
# File 'lib/janko/column_list.rb', line 61 def set(state) chain(state) end |
#table ⇒ Object
122 123 124 |
# File 'lib/janko/column_list.rb', line 122 def table @state[:parent].table end |
#tag(tag, *names) ⇒ Object
31 32 33 34 |
# 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) ⇒ Object
40 41 42 43 44 |
# 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 ⇒ Object
85 86 87 |
# 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) ⇒ Object
73 74 75 |
# 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 ⇒ Object
69 70 71 |
# File 'lib/janko/column_list.rb', line 69 def to_list map_and_join { |_, column| column.quoted } end |
#to_list_with_defaults ⇒ Object
81 82 83 |
# 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) ⇒ Object
77 78 79 |
# 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 ⇒ Object
89 90 91 |
# 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) ⇒ Object
36 37 38 |
# File 'lib/janko/column_list.rb', line 36 def untag(tag, *names) each_column(names) { |_, column| column and column.untag(tag) } end |