Module: Subroutine::Fields::ClassMethods
- Defined in:
- lib/subroutine/fields.rb
Instance Method Summary
collapse
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(method_name, *args, &block) ⇒ Object
91
92
93
94
95
96
97
98
99
100
101
|
# File 'lib/subroutine/fields.rb', line 91
def method_missing(method_name, *args, &block)
caster = ::Subroutine::TypeCaster.casters[method_name.to_sym]
if caster
field_name, options = args
options ||= {}
options[:type] = method_name.to_sym
field(field_name, options)
else
super
end
end
|
Instance Method Details
#field(field_name, options = {}) ⇒ Object
Also known as:
input
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
# File 'lib/subroutine/fields.rb', line 39
def field(field_name, options = {})
config = ::Subroutine::Fields::Configuration.from(field_name, options)
config.validate!
self.field_configurations = field_configurations.merge(field_name.to_sym => config)
ensure_field_accessors(config)
config.groups.each do |group_name|
ensure_group_accessors(group_name)
end
config
end
|
#fields_from(*things) ⇒ Object
Also known as:
inputs_from
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
# File 'lib/subroutine/fields.rb', line 55
def fields_from(*things)
options = things.
excepts = options.key?(:except) ? Array(options.delete(:except)) : nil
onlys = options.key?(:only) ? Array(options.delete(:only)) : nil
things.each do |thing|
thing.field_configurations.each_pair do |field_name, config|
next if excepts&.include?(field_name)
next if onlys && !onlys.include?(field_name)
config.required_modules.each do |mod|
include mod unless included_modules.include?(mod)
end
field(field_name, config.merge(options))
end
end
end
|
#fields_in_group(group_name) ⇒ Object
75
76
77
78
79
80
81
|
# File 'lib/subroutine/fields.rb', line 75
def fields_in_group(group_name)
field_configurations.each_with_object({}) do |(field_name, config), h|
next unless config.in_group?(group_name)
h[field_name] = config
end
end
|
#get_field_config(field_name) ⇒ Object
83
84
85
|
# File 'lib/subroutine/fields.rb', line 83
def get_field_config(field_name)
field_configurations[field_name.to_sym]
end
|
#respond_to_missing?(method_name, *args, &block) ⇒ Boolean
87
88
89
|
# File 'lib/subroutine/fields.rb', line 87
def respond_to_missing?(method_name, *args, &block)
::Subroutine::TypeCaster.casters.key?(method_name.to_sym) || super
end
|