assoc_and_assoc_method_for_column(c)
click to toggle source
Returns association and association method for a column
68: def assoc_and_assoc_method_for_column(c)
69: assoc_name, assoc_method = c[:name].split('__')
70: assoc = data_class.reflect_on_association(assoc_name.to_sym) if assoc_method
71: [assoc, assoc_method]
72: end
association_attr?(name)
click to toggle source
74: def association_attr?(name)
75: !!name.to_s.index("__")
76: end
combobox_options_for_column(column, method_options = {})
click to toggle source
Returns options for comboboxes in grids/forms
8: def combobox_options_for_column(column, method_options = {})
9: query = method_options[:query]
10:
11:
12: options = column[:combobox_options] && column[:combobox_options].split("\n")
13: if options
14: query ? options.select{ |o| o.index(/^#{query}/) }.map{ |el| [el] } : options
15: else
16: assoc, assoc_method = assoc_and_assoc_method_for_column(column)
17:
18: if assoc
19:
20:
21: relation = assoc.klass.where({})
22:
23: relation = relation.extend_with(method_options[:scope]) if method_options[:scope]
24:
25: if assoc.klass.column_names.include?(assoc_method)
26:
27: relation = relation.where(:"#{assoc_method}".like => "#{query}%") if query.present?
28: relation.all.map{ |r| [r.send(assoc_method)] }
29: else
30: relation.all.map{ |r| r.send(assoc_method) }.select{ |value| value =~ /^#{query}/ }.map{ |v| [v] }
31: end
32:
33: else
34:
35: res=data_class.netzke_combo_options_for(column[:name], method_options)
36:
37:
38: raise RuntimeError, "netzke_combo_options_for should return an Array" unless res.kind_of? Array
39: return [[]] if res.empty?
40:
41: unless res.first.kind_of? Array
42: res=res.map do |v|
43: [v]
44: end
45: end
46: return res
47:
48:
49: end
50: end
51: end
data_class()
click to toggle source
Model class (We can’t memoize this method because at some point we
extend it, e.g. in Netzke::DataAccessor)
80: def data_class
81: @data_class ||= begin
82: klass = "Netzke::ModelExtensions::#{config[:model]}For#{short_component_class_name}".constantize rescue nil
83: klass || original_data_class
84: end
85: end
normalize_attr(a)
click to toggle source
Normalize an attribute, e.g.: :first_name =>
{:name => "first_name"}
63: def normalize_attr(a)
64: a.is_a?(Symbol) || a.is_a?(String) ? {:name => a.to_s} : a.merge(:name => a[:name].to_s)
65: end
normalize_attrs(attrs)
click to toggle source
Normalize array of attributes
- :col1, “col2”, {:name => :col3}
>
[{:name => "col1"}, {:name => "col2"}, {:name => "col3"}]
56: def normalize_attrs(attrs)
57: attrs.map{ |a| normalize_attr(a) }
58: end
original_data_class()
click to toggle source
Model class before model extensions are taken into account
88: def original_data_class
89: @original_data_class ||= begin
90: ::ActiveSupport::Deprecation.warn("data_class_name option is deprecated. Use model instead", caller) if config[:data_class_name]
91: model_name = config[:model] || config[:data_class_name]
92: model_name && model_name.constantize
93: end
94: end
primary_key_attr?(a)
click to toggle source
whether a column is bound to the primary_key
97: def primary_key_attr?(a)
98: data_class && a[:name].to_s == data_class.primary_key
99: end