class Ezframe::ColumnSet
Attributes
name[RW]
parent[RW]
Public Class Methods
new(parent: nil, name: nil, columns: nil)
click to toggle source
# File lib/ezframe/column_set.rb, line 188 def initialize(parent: nil, name: nil, columns: nil) @parent = parent @name = name @columns ||= {} set(columns) if columns end
Public Instance Methods
[](col_key)
click to toggle source
# File lib/ezframe/column_set.rb, line 374 def [](col_key) return @columns[col_key.to_sym] end
clear()
click to toggle source
# File lib/ezframe/column_set.rb, line 195 def clear @columns.each do |key, col| col.value = nil end end
clear_error()
click to toggle source
# File lib/ezframe/column_set.rb, line 344 def clear_error @columns.values.each { |col| col.error = nil } end
create(value_h, from_db: nil, key_suffix: nil)
click to toggle source
データベースに新規に値を登録する
# File lib/ezframe/column_set.rb, line 250 def create(value_h, from_db: nil, key_suffix: nil) if from_db self.set_values(value_h, from_db: true, key_suffix: key_suffix) else self.set_values(value_h, key_suffix: key_suffix) end db_value_h = self.get_hash(:db_value) EzLog.debug("column_set.create: #{db_value_h}") db_value_h.delete(:id) db_value_h[:updated_at] = Time.now db_value_h[:created_at] = Time.now EzLog.debug("create: sql=#{dataset.insert_sql(db_value_h)}") return dataset.insert(db_value_h) end
dataset()
click to toggle source
# File lib/ezframe/column_set.rb, line 234 def dataset return DB.dataset(@name) end
each() { |column| ... }
click to toggle source
# File lib/ezframe/column_set.rb, line 352 def each @columns.values.each { |column| yield(column) } end
edit_keys()
click to toggle source
# File lib/ezframe/column_set.rb, line 205 def edit_keys @columns.keys.select {|k| !@columns[k].no_edit? } end
form()
click to toggle source
# File lib/ezframe/column_set.rb, line 378 def form if @edit_keys return @edit_keys.map do |key| col = @columns[key.to_sym] unless col EzLog.info "[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_full_join(opts = {})
click to toggle source
# File lib/ezframe/column_set.rb, line 408 def get_full_join(opts = {}) struct = ColumnSets.full_join_structure(self.name) return DB.get_join_table(struct, opts) end
get_hash(method)
click to toggle source
# File lib/ezframe/column_set.rb, line 366 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)
click to toggle source
# File lib/ezframe/column_set.rb, line 360 def get_matrix(method_a) return @columns.map do |_key, col| method_a.map { |method| col.send(method) } end end
inpsect()
click to toggle source
# File lib/ezframe/column_set.rb, line 419 def inpsect @columns.map do |colkey, coltype| "#{colkey}=#{coltype.value}" end.join(" ") end
keys()
click to toggle source
# File lib/ezframe/column_set.rb, line 201 def keys @columns.keys end
map() { |column| ... }
click to toggle source
# File lib/ezframe/column_set.rb, line 356 def map @columns.values.map { |column| yield(column) } end
merge_values(value_h, from_db: nil, key_suffix: nil)
click to toggle source
# File lib/ezframe/column_set.rb, line 301 def merge_values(value_h, from_db: nil, key_suffix: nil) return self unless value_h @columns.keys.each do |key| next if key.to_s.empty? target_key = key target_key = "#{key}#{key_suffix}" if key_suffix column = @columns[key.to_sym] if !from_db && column.respond_to?(:form_to_value) # && !value_h.has_key?(key) val = column.form_to_value(value_h, target_key: target_key) else val = value_h[target_key.to_sym] || value_h[key] end column.value = val end return self end
set(attr_a)
click to toggle source
配列を初期化する
# File lib/ezframe/column_set.rb, line 214 def set(attr_a) @columns[:id] = IdType.new(key: "id", label: "ID", hidden: true) attr_a.each do |attribute| attr = attribute.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: "生成日時", hidden: true) @columns[:updated_at] = DatetimeType.new(type: "datetime", key: "updated_at", label: "更新日時", hidden: true) @columns[:deleted_at] = DatetimeType.new(type: "datetime", key: "deleted_at", label: "削除日時", hidden: true) @columns.values.each { |col| col.parent = self } return @columns end
set_from_db(id)
click to toggle source
# File lib/ezframe/column_set.rb, line 238 def set_from_db(id) data = dataset.where(id: id).first return nil unless data self.set_values(data, from_db: true) return data end
set_from_form(form, key_suffix: nil)
click to toggle source
# File lib/ezframe/column_set.rb, line 245 def set_from_form(form, key_suffix: nil) self.set_values(form) end
set_values(value_h, from_db: nil, key_suffix: nil)
click to toggle source
各カラムに値を格納する
# File lib/ezframe/column_set.rb, line 296 def set_values(value_h, from_db: nil, key_suffix: nil) self.clear merge_values(value_h, from_db: from_db, key_suffix: key_suffix) end
update(id, value_h)
click to toggle source
データベース上の値の更新
# File lib/ezframe/column_set.rb, line 266 def update(id, value_h) self.set_from_db(id) updated_values = {} @columns.each do |colkey, column| next if column.no_edit? if column.respond_to?(:form_to_value) new_value = column.form_to_value(value_h) else new_value = value_h[colkey] end prev_value = column.db_value column.value = new_value # EzLog.debug("key=#{colkey}, pre_value=#{prev_value}, new_value=#{column.db_value}") if column.respond_to?("value_equal?") unless column.value_equal?(prev_value, column.db_value) updated_values[colkey] = column.db_value end elsif prev_value != column.db_value updated_values[colkey] = column.db_value end end if updated_values.length > 0 updated_values[:updated_at] = Time.now sql = dataset.where(id: id).update_sql(updated_values) EzLog.debug("update: sql=#{sql}") dataset.where(id: id).update(updated_values) end end
validate(value_h)
click to toggle source
各カラムのバリデーション 戻り値は[ 正規化した値, エラーシンボル(Messageのキーと紐づく) ]を値として、 カラムキーをキーとするハッシュ
# File lib/ezframe/column_set.rb, line 325 def validate(value_h) return {} unless value_h clear_error result_h = {} @columns.values.each do |col| res = [] if col.respond_to?(:form_to_value) && !value_h.has_key?(col.key) orig_val = col.form_to_value(value_h) else orig_val = value_h[col.key] end new_val = col.normalize(orig_val) res[0] = new_val if orig_val != new_val res[1] = col.validate(new_val) result_h[col.key] = res if res[0] || res[1] end return result_h end
values()
click to toggle source
# File lib/ezframe/column_set.rb, line 348 def values @columns.map { |key, col| col.value } end
values=(value_h)
click to toggle source
# File lib/ezframe/column_set.rb, line 318 def values=(value_h) set_values(value_h) end
view()
click to toggle source
# File lib/ezframe/column_set.rb, line 393 def view if @view_keys return @view_keys.map do |key| col = @columns[key.to_sym] unless col EzLog.info "[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
view_keys()
click to toggle source
# File lib/ezframe/column_set.rb, line 209 def view_keys @columns.keys.select {|k| !@columns[k].no_view? } end