| Class | ItemProper |
| In: |
app/models/item_proper.rb
|
| Parent: | Item |
テーブルのカラムに対応する項目のモデル。
| PRIVATE_COLUMN | = | %w[id] |
| HIDDEN_COLUMN | = | %w[domain_id created_at updated_at created_by updated_by created_in updated_in] |
| FOREIGN_KEYS | = | %w|company organization person post group| |
カレンダー参照を行うかどうかを判定する。
# File app/models/item_proper.rb, line 183
183: def calendar?
184: input_type == "picker" && input_parameter == "calendar"
185: end
checkbox 形式を利用するかどうか判定する。
# File app/models/item_proper.rb, line 188
188: def checkbox?
189: input_type == "checkbox"
190: end
ユーザーの言語での名前を返す。
# File app/models/item_proper.rb, line 122
122: def human_name
123: column = model_class.columns_hash[column_name]
124: unless column
125: logger.warn "WARN:Item\#human_name: column not found: #{model_class}\##{column_name}"
126: return name
127: end
128: if name.blank?
129: logger.warn("WARN:Item\#human_name: name is blank: #{model_class}\##{column_name}")
130: return column.human_name
131: elsif name == column.name.humanize
132: logger.warn("WARN:Item\#human_name: name is not translated: #{model_class}\##{column_name}")
133: return column.human_name
134: end
135: return name
136: end
InputOption 参照を行う場合はその種類を文字列で返す。 さもなくば false を返す。
# File app/models/item_proper.rb, line 177
177: def option_category
178: return input_parameter if %w|select radio|.include?(input_type) && !input_parameter.blank?
179: return false
180: end
並び替えを指定する文字列または false を返す。
# File app/models/item_proper.rb, line 155
155: def order
156: return false if direction.blank? || direction =~ /none/i
157: "#{column_name} #{direction}"
158: end
# File app/models/item_proper.rb, line 117
117: def picker_field(it, name)
118: detail? ? "#{picked_atom}#{id}_#{name}" : "#{picked_atom}#{id}"
119: end
外部参照を行うカラムに対応している場合はそのクラスを返す。 さもなくば false を返す。
# File app/models/item_proper.rb, line 162
162: def reference
163: if input_type == "picker" && !input_parameter.blank? && input_parameter != "calendar"
164: return picked_atom.classify.constantize
165: end
166: if /(?!:[a-z])([a-z0-9]+)_id\z/ =~ column_name
167: name = $1
168: if FOREIGN_KEYS.include?(name)
169: return name.classify.constantize
170: end
171: end
172: return false
173: end
入力が必須かどうかを判定する。
# File app/models/item_proper.rb, line 139
139: def required?
140: return true if validates_presence?
141: column = model_class.columns_hash[column_name]
142: unless column
143: logger.error("ERROR:Item\#required?: column not found: #{model_class}\##{column_name}")
144: return false
145: end
146: return column.required?
147: end
(権限が許せば)インスタンスに属性を設定する。
# File app/models/item_proper.rb, line 150
150: def set_attributes(x, attr)
151: x.__send__("#{column_name}=", attr[column_name.to_sym]) if writable?
152: end
対象 it の表示に適したデータを返す。 直接値を表示する以外に次のパターンが用意されている:
# File app/models/item_proper.rb, line 198
198: def to_data(it)
199: value = it.__send__(column_name)
200: case input_type
201: when "checkbox"
202: on, off = input_parameter.split(",")
203: on ||= "ON"
204: off ||= ""
205: return value ? on : off
206: end
207: if c = option_category
208: if name = InputOption.option_name(c, value)
209: return name
210: end
211: logger.warn("WARNING: option not found: #{input_parameter}/#{value}")
212: elsif r = reference
213: return refer(value, r)
214: elsif calendar?
215: if /(\d{4})[\/\-]?(\d{2})[\/\-]?(\d{2})/ =~ value
216: return "#{$1}/#{$2}/#{$3}"
217: end
218: logger.warn("WARNING: invalid date: #{value}")
219: end
220: return value
221: end