Module: Effective::Resources::Forms

Included in:
Effective::Resource
Defined in:
app/models/effective/resources/forms.rb

Instance Method Summary collapse

Instance Method Details

#search_form_field(name, type = nil) ⇒ Object

Used by datatables



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'app/models/effective/resources/forms.rb', line 8

def search_form_field(name, type = nil)
  case (type || sql_type(name))
  when :belongs_to
    { as: :select }.merge(search_form_field_collection(belongs_to(name)))

  when :belongs_to_polymorphic
    constant_pluralized = name.to_s.upcase
    constant = name.to_s.pluralize.upcase

    collection = nil

    if klass.respond_to?(:name)
      collection ||= (klass.const_get(constant) rescue nil) if defined?("#{klass.name}::#{constant}")
      collection ||= (klass.const_get(constant_pluralized) rescue nil) if defined?("#{klass.name}::#{constant_pluralized}")
    end

    { as: :select, polymorphic: true, collection: (collection || []) }.compact
  when :has_and_belongs_to_many
    { as: :select }.merge(search_form_field_collection(has_and_belongs_to_many(name)))
  when :has_many
    { as: :select, multiple: true }.merge(search_form_field_collection(has_many(name)))
  when :has_one
    { as: :select, multiple: true }.merge(search_form_field_collection(has_one(name)))
  when :effective_addresses
    { as: :string }
  when :effective_roles
    { as: :select, collection: EffectiveRoles.roles }
  when :effective_obfuscation
    { as: :effective_obfuscation }
  when :boolean
    { as: :boolean, collection: [['Yes', true], ['No', false]] }
  when :datetime
    { as: :datetime }
  when :date
    { as: :date }
  when :integer
    { as: :number }
  when :text
    { as: :text }
  when :time
    { as: :time }
  when ActiveRecord::Base
    { as: :select }.merge(Effective::Resource.new(type).search_form_field_collection)
  else
    name = name.to_s

    # If the method is named :status, and there is a Class::STATUSES
    if ((klass || NilClass).const_defined?(name.pluralize.upcase) rescue false)
      { as: :select, collection: klass.const_get(name.pluralize.upcase) }
    elsif ((klass || NilClass).const_defined?(name.singularize.upcase) rescue false)
      { as: :select, collection: klass.const_get(name.singularize.upcase) }
    else
      { as: :string }
    end
  end
end

#search_form_field_collection(association = nil, max_id = 1000) ⇒ Object



65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
# File 'app/models/effective/resources/forms.rb', line 65

def search_form_field_collection(association = nil, max_id = 1000)
  res = (association.nil? ? self : Effective::Resource.new(association))

  if res.max_id > max_id
    { as: :string }
  else
    if res.klass.unscoped.respond_to?(:datatables_scope)
      { collection: res.klass.datatables_scope.map { |obj| [obj.to_s, obj.to_param] } }
    elsif res.klass.unscoped.respond_to?(:datatables_filter)
      { collection: res.klass.datatables_filter.map { |obj| [obj.to_s, obj.to_param] } }
    elsif res.klass.unscoped.respond_to?(:sorted)
      { collection: res.klass.sorted.map { |obj| [obj.to_s, obj.to_param] } }
    else
      { collection: res.klass.all.map { |obj| [obj.to_s, obj.to_param] }.sort { |x, y| x[0] <=> y[0] } }
    end
  end
end