Class: Subroutine::Fields::Configuration
- Inherits:
-
SimpleDelegator
- Object
- SimpleDelegator
- Subroutine::Fields::Configuration
show all
- Defined in:
- lib/subroutine/fields/configuration.rb
Constant Summary
collapse
- PROTECTED_GROUP_IDENTIFIERS =
i[all original default].freeze
- INHERITABLE_OPTIONS =
i[mass_assignable field_reader field_writer groups aka].freeze
- NO_GROUPS =
[].freeze
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
Constructor Details
#initialize(field_name, options) ⇒ Configuration
22
23
24
25
26
27
|
# File 'lib/subroutine/fields/configuration.rb', line 22
def initialize(field_name, options)
@field_name = field_name.to_sym
config = sanitize_options(options)
super(config)
validate!
end
|
Instance Attribute Details
#field_name ⇒ Object
Returns the value of attribute field_name.
20
21
22
|
# File 'lib/subroutine/fields/configuration.rb', line 20
def field_name
@field_name
end
|
Class Method Details
.from(field_name, options) ⇒ Object
11
12
13
14
15
16
17
18
|
# File 'lib/subroutine/fields/configuration.rb', line 11
def self.from(field_name, options)
case options
when Subroutine::Fields::Configuration
options.class.new(field_name, options)
else
new(field_name, options)
end
end
|
Instance Method Details
#behavior ⇒ Object
43
44
45
|
# File 'lib/subroutine/fields/configuration.rb', line 43
def behavior
nil
end
|
#bypass_indifferent_assignment? ⇒ Boolean
79
80
81
|
# File 'lib/subroutine/fields/configuration.rb', line 79
def bypass_indifferent_assignment?
config[:bypass_indifferent_assignment] == true
end
|
#field_reader? ⇒ Boolean
75
76
77
|
# File 'lib/subroutine/fields/configuration.rb', line 75
def field_reader?
config[:field_reader] != false
end
|
#field_writer? ⇒ Boolean
71
72
73
|
# File 'lib/subroutine/fields/configuration.rb', line 71
def field_writer?
config[:field_writer] != false
end
|
#get_default ⇒ Object
51
52
53
54
55
56
57
58
59
60
61
|
# File 'lib/subroutine/fields/configuration.rb', line 51
def get_default
value = config[:default]
if value.respond_to?(:call)
value = value.call
elsif value.try(:duplicable?)
value = value.deep_dup
end
value
end
|
#groups ⇒ Object
83
84
85
|
# File 'lib/subroutine/fields/configuration.rb', line 83
def groups
config[:groups] || NO_GROUPS
end
|
#has_default? ⇒ Boolean
47
48
49
|
# File 'lib/subroutine/fields/configuration.rb', line 47
def has_default?
config.key?(:default)
end
|
#in_group?(group_name) ⇒ Boolean
87
88
89
|
# File 'lib/subroutine/fields/configuration.rb', line 87
def in_group?(group_name)
groups.include?(group_name.to_sym)
end
|
#inheritable_options ⇒ Object
63
64
65
|
# File 'lib/subroutine/fields/configuration.rb', line 63
def inheritable_options
config.slice(*INHERITABLE_OPTIONS)
end
|
#inspect ⇒ Object
110
111
112
|
# File 'lib/subroutine/fields/configuration.rb', line 110
def inspect
"#<#{self.class}:#{object_id} name=#{field_name} config=#{config.inspect}>"
end
|
#mass_assignable? ⇒ Boolean
67
68
69
|
# File 'lib/subroutine/fields/configuration.rb', line 67
def mass_assignable?
config[:mass_assignable] != false
end
|
#merge(options = {}) ⇒ Object
31
32
33
|
# File 'lib/subroutine/fields/configuration.rb', line 31
def merge(options = {})
self.class.new(field_name, config.merge(options))
end
|
39
40
41
|
# File 'lib/subroutine/fields/configuration.rb', line 39
def related_field_names
[field_name]
end
|
#required_modules ⇒ Object
35
36
37
|
# File 'lib/subroutine/fields/configuration.rb', line 35
def required_modules
[]
end
|
#sanitize_options(options) ⇒ Object
99
100
101
102
103
104
105
106
107
108
|
# File 'lib/subroutine/fields/configuration.rb', line 99
def sanitize_options(options)
opts = (options || {}).to_h.dup
groups = opts[:group] || opts[:groups]
groups = nil if groups == false
opts[:groups] = Array(groups).map(&:to_sym).presence
opts.delete(:group)
opts[:aka] = opts[:aka].to_sym if opts[:aka]
opts[:name] = field_name
opts
end
|
#validate! ⇒ Object
91
92
93
94
95
96
97
|
# File 'lib/subroutine/fields/configuration.rb', line 91
def validate!
PROTECTED_GROUP_IDENTIFIERS.each do |group_name|
next unless in_group?(group_name)
raise ArgumentError, "Cannot assign a field to protected group `#{group}`. Protected groups are: #{PROTECTED_GROUP_IDENTIFIERS.join(", ")}"
end
end
|