Class: Janko::ColumnList

Inherits:
Object
  • Object
show all
Includes:
Agrippa::MutableHash, Enumerable
Defined in:
lib/janko/column_list.rb

Class Method Summary collapse

Instance Method Summary collapse

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

#builderObject



19
20
21
# File 'lib/janko/column_list.rb', line 19

def builder
    self
end

#columnsObject



114
115
116
# File 'lib/janko/column_list.rb', line 114

def columns
    @state[:columns].keys
end

#connectionObject



118
119
120
# File 'lib/janko/column_list.rb', line 118

def connection
    @state[:parent].connection
end

#default_stateObject



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

Returns:

  • (Boolean)


110
111
112
# File 'lib/janko/column_list.rb', line 110

def empty?
    @state[:columns].empty?
end

#inspectObject



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

#lengthObject



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

Returns:

  • (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

Raises:

  • (ArgumentError)


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

#tableObject



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_bindsObject



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_listObject



69
70
71
# File 'lib/janko/column_list.rb', line 69

def to_list
    map_and_join { |_, column| column.quoted }
end

#to_list_with_defaultsObject



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_bindsObject



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