Class: Ezframe::ColumnSet

Inherits:
Object show all
Defined in:
lib/ezframe/column_set.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(parent:, name: nil, columns: nil) ⇒ ColumnSet

Returns a new instance of ColumnSet.



50
51
52
53
54
55
# File 'lib/ezframe/column_set.rb', line 50

def initialize(parent:, name: nil, columns: nil)
  @parent = parent
  @name = name 
  @columns ||= {}
  set(columns) if columns
end

Instance Attribute Details

#edit_keysObject

Returns the value of attribute edit_keys.



48
49
50
# File 'lib/ezframe/column_set.rb', line 48

def edit_keys
  @edit_keys
end

#nameObject

Returns the value of attribute name.



48
49
50
# File 'lib/ezframe/column_set.rb', line 48

def name
  @name
end

#parentObject

Returns the value of attribute parent.



48
49
50
# File 'lib/ezframe/column_set.rb', line 48

def parent
  @parent
end

#view_keysObject

Returns the value of attribute view_keys.



48
49
50
# File 'lib/ezframe/column_set.rb', line 48

def view_keys
  @view_keys
end

Instance Method Details

#[](col_key) ⇒ Object



195
196
197
# File 'lib/ezframe/column_set.rb', line 195

def [](col_key)
  return @columns[col_key.to_sym]
end

#clearObject



57
58
59
60
61
# File 'lib/ezframe/column_set.rb', line 57

def clear
  @columns.each do |key, col|
    col.value = nil
  end
end

#clear_errorObject



165
166
167
# File 'lib/ezframe/column_set.rb', line 165

def clear_error
  @columns.values.each {|col| col.error = nil }
end

#createObject

新規に値を登録する



101
102
103
104
105
106
107
108
109
110
111
112
113
# File 'lib/ezframe/column_set.rb', line 101

def create
  col_h = get_hash(:value)
  col_h.delete(:id)
  col_h.delete(:created_at)
  col_h[:updated_at] = Time.now
  mylog "create: #{col_h.inspect}"
  id = @columns[:id]
  if id.value.to_i > 0
    dataset.where(id: id.value).update(col_h)
  else
    return dataset.insert(col_h)
  end
end

#datasetObject



88
89
90
91
# File 'lib/ezframe/column_set.rb', line 88

def dataset
  # puts "dataset: #{@model.inspect}"
  return @parent.model.db.dataset(@name)
end

#eachObject



173
174
175
# File 'lib/ezframe/column_set.rb', line 173

def each
  @columns.values.each {|column| yield(column) }
end

#formObject



199
200
201
202
203
204
205
206
207
208
209
210
211
212
# File 'lib/ezframe/column_set.rb', line 199

def form
  if @edit_keys
    return @edit_keys.map do |key| 
      col = @columns[key.to_sym]
      unless col
        mylog "[ERROR] @edit_keys has unknown column:name=#{@name}:key=#{key}"
        next
      end
      col.form
    end
  else
    return  @columns.values.map {|coltype| coltype.form }
  end        
end

#get_hash(method) ⇒ Object



187
188
189
190
191
192
193
# File 'lib/ezframe/column_set.rb', line 187

def get_hash(method)
  res_h = {}  
  @columns.map do |key, col|
    res_h[key.to_sym] = col.send(method)
  end
  return res_h
end

#get_matrix(method_a) ⇒ Object



181
182
183
184
185
# File 'lib/ezframe/column_set.rb', line 181

def get_matrix(method_a)
  return @columns.map do |_key, col|
    method_a.map { |method| col.send(method) }
  end
end

#hidden_formObject



229
230
231
232
233
# File 'lib/ezframe/column_set.rb', line 229

def hidden_form
  return @columns.map do |colkey, coltype|
    { tag: 'input', id: colkey, name: colkey, type: 'hidden', value: coltype.value }
  end
end

#keysObject



63
64
65
# File 'lib/ezframe/column_set.rb', line 63

def keys
  @columns.keys
end

#mapObject



177
178
179
# File 'lib/ezframe/column_set.rb', line 177

def map
  @columns.values.map {|column| yield(column) }
end

#set(attr_a) ⇒ Object

配列を初期化する



68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
# File 'lib/ezframe/column_set.rb', line 68

def set(attr_a)
  @columns[:id] = IdType.new(key: "id", label: "ID", no_edit: true)
  attr_a.each do |attributes|
    attr = attributes.clone
    col_key = attr[:key]
    raise "no column key: #{attr.inspect}" unless col_key
    klass = TypeBase.get_class(attr[:type])
    unless klass
      raise "no such column type: #{attr[:type]}"
    else
      @columns[col_key.to_sym] = klass.new(attr)
    end
  end
  @columns[:created_at] = DatetimeType.new(type: "datetime", key: "created_at", label: "生成日時", no_edit: true)
  @columns[:updated_at] = DatetimeType.new(type: "datetime", key: "updated_at", label: "更新日時", no_edit: true)
  # mylog "set: #{@columns.inspect}"
  @columns.values.each {|col| col.parent = self }
  return @columns
end

#set_from_db(id) ⇒ Object



93
94
95
96
97
98
# File 'lib/ezframe/column_set.rb', line 93

def set_from_db(id)
  data = dataset.where(id: id).first
  return nil unless data
  self.values = data
  return data
end

#set_values(value_h) ⇒ Object



145
146
147
148
149
150
151
152
153
# File 'lib/ezframe/column_set.rb', line 145

def set_values(value_h)
  return unless value_h
  value_h.each do |k, v|
    next if k.nil? || k.to_s.empty?
    col = @columns[k.to_sym]
    next unless col
    col.value = v
  end
end

#update(id, value_h) ⇒ Object

データベース上の値の更新



116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
# File 'lib/ezframe/column_set.rb', line 116

def update(id, value_h)
  self.set_from_db(id)
  updated_values = {}
  @columns.each do |colkey, column|
    next if column.no_edit?
    if column.multi_inputs?
      new_value = column.form_to_value(value_h)
    else
      new_value = value_h[colkey]
    end
    prev_value = column.value
    column.value = new_value
    if prev_value != column.value
      updated_values[colkey] = column.value
    end
  end
  mylog "column_set.updated_values = #{updated_values.inspect}"
  if updated_values.length > 0
    updated_values[:updated_at] = Time.now
    puts dataset.where(id: id).update_sql(updated_values) 
    dataset.where(id: id).update(updated_values) 
  end
end

#validateObject



155
156
157
158
159
160
161
162
163
# File 'lib/ezframe/column_set.rb', line 155

def validate
  clear_error
  errors = []
  @columns.values.each do |col| 
    err = col.validate
    errors.push([ col.key, err ]) if err
  end
  return errors
end

#valuesObject



169
170
171
# File 'lib/ezframe/column_set.rb', line 169

def values
  @columns.map {|key, col| col.value}
end

#values=(value_h) ⇒ Object



140
141
142
143
# File 'lib/ezframe/column_set.rb', line 140

def values=(value_h)
  clear
  set_values(value_h)
end

#viewObject



214
215
216
217
218
219
220
221
222
223
224
225
226
227
# File 'lib/ezframe/column_set.rb', line 214

def view
  if @view_keys
    return @view_keys.map do |key| 
      col = @columns[key.to_sym]
      unless col
        mylog "[ERROR] @view_keys has unknown column:name=#{@name}:key=#{key}"
        next
      end
      col.view
    end
  else
    return  @columns.values.map {|coltype| coltype.view }
  end
end