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



190
191
192
# File 'lib/ezframe/column_set.rb', line 190

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



160
161
162
# File 'lib/ezframe/column_set.rb', line 160

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

#createObject

新規に値を登録する



97
98
99
100
101
102
103
104
105
106
107
108
109
# File 'lib/ezframe/column_set.rb', line 97

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



84
85
86
87
# File 'lib/ezframe/column_set.rb', line 84

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

#eachObject



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

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

#formObject



194
195
196
197
198
199
200
201
202
203
204
205
206
207
# File 'lib/ezframe/column_set.rb', line 194

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



182
183
184
185
186
187
188
# File 'lib/ezframe/column_set.rb', line 182

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



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

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

#hidden_formObject



224
225
226
227
228
# File 'lib/ezframe/column_set.rb', line 224

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

#mapObject



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

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

#set(attr_a) ⇒ Object

配列を初期化する



64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
# File 'lib/ezframe/column_set.rb', line 64

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



89
90
91
92
93
94
# File 'lib/ezframe/column_set.rb', line 89

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



140
141
142
143
144
145
146
147
148
# File 'lib/ezframe/column_set.rb', line 140

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

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



112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
# File 'lib/ezframe/column_set.rb', line 112

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
    dataset.where(id: id).update(updated_values) 
  end
end

#validateObject



150
151
152
153
154
155
156
157
158
# File 'lib/ezframe/column_set.rb', line 150

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



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

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

#values=(value_h) ⇒ Object



135
136
137
138
# File 'lib/ezframe/column_set.rb', line 135

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

#viewObject



209
210
211
212
213
214
215
216
217
218
219
220
221
222
# File 'lib/ezframe/column_set.rb', line 209

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