Class: Selectize::Ajax::Core::Control

Inherits:
Object
  • Object
show all
Defined in:
lib/selectize/ajax/core/control.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(resource, field, options = {}) ⇒ Control

Returns a new instance of Control.



5
6
7
8
9
# File 'lib/selectize/ajax/core/control.rb', line 5

def initialize(resource, field, options = {})
  @options = Selectize::Ajax::Core::Settings.new(options).call
  @resource = resource
  @field = field
end

Instance Attribute Details

#fieldObject

Returns the value of attribute field.



3
4
5
# File 'lib/selectize/ajax/core/control.rb', line 3

def field
  @field
end

#optionsObject

Returns the value of attribute options.



3
4
5
# File 'lib/selectize/ajax/core/control.rb', line 3

def options
  @options
end

#resourceObject

Returns the value of attribute resource.



3
4
5
# File 'lib/selectize/ajax/core/control.rb', line 3

def resource
  @resource
end

Instance Method Details

#can_add?Boolean

Returns:

  • (Boolean)


77
78
79
# File 'lib/selectize/ajax/core/control.rb', line 77

def can_add?
  options.add_path.present? && options.add_modal.present?
end

#can_edit?Boolean

Returns:

  • (Boolean)


81
82
83
# File 'lib/selectize/ajax/core/control.rb', line 81

def can_edit?
  options.edit_path.present? && options.edit_modal.present?
end

#edit_resource_templateObject



32
33
34
35
36
37
38
39
40
41
# File 'lib/selectize/ajax/core/control.rb', line 32

def edit_resource_template
  return unless can_edit?

  @edit_resource ||= options.edit_path if options.edit_path.index('{{id}}').blank?
  @edit_resource ||= options.edit_path.split('/').reverse.map do |part|
    break '{{id}}' unless part.to_i.zero?
    part
  end.reverse.join('/')
  URI.unescape(@edit_resource)
end

#field_required?Boolean

Returns:

  • (Boolean)


51
52
53
54
55
56
57
58
59
60
61
# File 'lib/selectize/ajax/core/control.rb', line 51

def field_required?
  return false unless options.required
  return false if resource_object.blank? || !resource_object.respond_to?(:_validators)
  validators = resource_object._validators[field].map(&:class) rescue []
  [
    validators.include?(ActiveModel::Validations::PresenceValidator),
    validators.include?(ActiveRecord::Validations::PresenceValidator)
  ].any?
rescue
  false
end

#has_error?Boolean

Returns:

  • (Boolean)


73
74
75
# File 'lib/selectize/ajax/core/control.rb', line 73

def has_error?
  @has_error ||= resource_object? ? resource_object&.errors&.include?(field) : false
end

#labelObject



28
29
30
# File 'lib/selectize/ajax/core/control.rb', line 28

def label
  (options.label || field.to_s.titleize) if options.label != false
end

#resource_idObject



19
20
21
# File 'lib/selectize/ajax/core/control.rb', line 19

def resource_id
  [resource_name, field].join('_')
end

#resource_nameObject



11
12
13
14
15
16
17
# File 'lib/selectize/ajax/core/control.rb', line 11

def resource_name
  return resource.to_s.underscore.to_sym unless resource_object?

  class_name = resource.class.name.split('::').last
  return :form if class_name == 'Form'
  class_name.chomp('Form').underscore.to_sym
end

#resource_objectObject



43
44
45
46
47
48
49
# File 'lib/selectize/ajax/core/control.rb', line 43

def resource_object
  @model_object ||= if resource_object?
    resource
  else
    resource.to_s.classify.constantize rescue nil
  end
end

#valueObject



23
24
25
26
# File 'lib/selectize/ajax/core/control.rb', line 23

def value
  return options.value if options.value.present?
  return resource.send(field) if resource_object? && resource.respond_to?(field)
end

#wrap_classesObject



63
64
65
66
67
68
69
70
71
# File 'lib/selectize/ajax/core/control.rb', line 63

def wrap_classes
  return if options.wrap_class == false
  return options.wrap_class if options.wrap_class_only

  classes = [options.wrap_class]
  classes << 'selectize-input-group' if can_add?
  classes << (options.horizontal ? 'col-sm-9' : 'col-sm-12')
  classes.compact.reject(&:blank?).join(' ')
end