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
Returns a new instance of Configuration.
24
25
26
27
28
29
|
# File 'lib/subroutine/fields/configuration.rb', line 24
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.
22
23
24
|
# File 'lib/subroutine/fields/configuration.rb', line 22
def field_name
@field_name
end
|
Class Method Details
.from(field_name, options) ⇒ Object
13
14
15
16
17
18
19
20
|
# File 'lib/subroutine/fields/configuration.rb', line 13
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
45
46
47
|
# File 'lib/subroutine/fields/configuration.rb', line 45
def behavior
nil
end
|
#field_reader? ⇒ Boolean
77
78
79
|
# File 'lib/subroutine/fields/configuration.rb', line 77
def field_reader?
config[:field_reader] != false
end
|
#field_writer? ⇒ Boolean
73
74
75
|
# File 'lib/subroutine/fields/configuration.rb', line 73
def field_writer?
config[:field_writer] != false
end
|
#get_default ⇒ Object
53
54
55
56
57
58
59
60
61
62
63
|
# File 'lib/subroutine/fields/configuration.rb', line 53
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
81
82
83
|
# File 'lib/subroutine/fields/configuration.rb', line 81
def groups
config[:groups] || NO_GROUPS
end
|
#has_default? ⇒ Boolean
49
50
51
|
# File 'lib/subroutine/fields/configuration.rb', line 49
def has_default?
config.key?(:default)
end
|
#in_group?(group_name) ⇒ Boolean
85
86
87
|
# File 'lib/subroutine/fields/configuration.rb', line 85
def in_group?(group_name)
groups.include?(group_name.to_sym)
end
|
#inheritable_options ⇒ Object
65
66
67
|
# File 'lib/subroutine/fields/configuration.rb', line 65
def inheritable_options
config.slice(*INHERITABLE_OPTIONS)
end
|
#inspect ⇒ Object
108
109
110
|
# File 'lib/subroutine/fields/configuration.rb', line 108
def inspect
"#<#{self.class}:#{object_id} name=#{field_name} config=#{config.inspect}>"
end
|
#mass_assignable? ⇒ Boolean
69
70
71
|
# File 'lib/subroutine/fields/configuration.rb', line 69
def mass_assignable?
config[:mass_assignable] != false
end
|
#merge(options = {}) ⇒ Object
33
34
35
|
# File 'lib/subroutine/fields/configuration.rb', line 33
def merge(options = {})
self.class.new(field_name, config.merge(options))
end
|
41
42
43
|
# File 'lib/subroutine/fields/configuration.rb', line 41
def related_field_names
[field_name]
end
|
#required_modules ⇒ Object
37
38
39
|
# File 'lib/subroutine/fields/configuration.rb', line 37
def required_modules
[]
end
|
#sanitize_options(options) ⇒ Object
97
98
99
100
101
102
103
104
105
106
|
# File 'lib/subroutine/fields/configuration.rb', line 97
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
89
90
91
92
93
94
95
|
# File 'lib/subroutine/fields/configuration.rb', line 89
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
|