Class: DynamicScaffold::Form::Item::Base
- Inherits:
-
Object
- Object
- DynamicScaffold::Form::Item::Base
show all
- Defined in:
- lib/dynamic_scaffold/form/item/base.rb
Overview
rubocop:disable Metrics/ClassLength
Constant Summary
collapse
- ITEM_TYPES =
{
check_box: Form::Item::SingleOption,
radio_button: Form::Item::SingleOption,
text_area: Form::Item::SingleOption,
text_field: Form::Item::SingleOption,
date_field: Form::Item::SingleOption,
password_field: Form::Item::SingleOption,
hidden_field: Form::Item::SingleOption,
file_field: Form::Item::SingleOption,
color_field: Form::Item::SingleOption,
number_field: Form::Item::SingleOption,
telephone_field: Form::Item::SingleOption,
time_select: Form::Item::TwoOptions,
date_select: Form::Item::TwoOptions,
datetime_select: Form::Item::TwoOptions,
collection_select: Form::Item::TwoOptions,
grouped_collection_select: Form::Item::TwoOptions,
collection_check_boxes: Form::Item::TwoOptionsWithBlock,
collection_radio_buttons: Form::Item::TwoOptionsWithBlock,
block: Form::Item::Block,
carrierwave_image: Form::Item::CarrierWaveImage,
globalize_fields: Form::Item::GlobalizeFields,
cocoon: Form::Item::Cocoon
}.freeze
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
Constructor Details
#initialize(config, type, name, html_attributes = {}) ⇒ Base
Returns a new instance of Base.
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
# File 'lib/dynamic_scaffold/form/item/base.rb', line 50
def initialize(config, type, name, html_attributes = {})
@config = config
@name = name
@type = type
@html_attributes = html_attributes
classnames = @html_attributes.delete(:class)
@classnames_list = []
@classnames_list.push(classnames) if classnames
@notes = []
@multiple = type == :collection_check_boxes || html_attributes[:multiple]
@inserts = { before: [], after: [] }
@label_attributes = {}
@label_block = nil
end
|
Instance Attribute Details
#name ⇒ Object
Returns the value of attribute name.
49
50
51
|
# File 'lib/dynamic_scaffold/form/item/base.rb', line 49
def name
@name
end
|
Class Method Details
.create(config, type, *args, &block) ⇒ Object
37
38
39
40
41
42
43
44
45
46
|
# File 'lib/dynamic_scaffold/form/item/base.rb', line 37
def create(config, type, *args, &block)
if ITEM_TYPES[type].nil?
raise(
DynamicScaffold::Error::InvalidParameter,
"Unknown form item type #{type}. supported: #{ITEM_TYPES.keys.join(', ')}"
)
end
ITEM_TYPES[type].new(config, type, *args, &block)
end
|
Instance Method Details
#default(value = nil, &block) ⇒ Object
161
162
163
164
165
166
167
|
# File 'lib/dynamic_scaffold/form/item/base.rb', line 161
def default(value = nil, &block)
if block_given?
@default = block
else
@default = value
end
end
|
#default_value(view) ⇒ Object
169
170
171
172
173
|
# File 'lib/dynamic_scaffold/form/item/base.rb', line 169
def default_value(view)
return view.instance_exec(&@default) if @default.is_a? Proc
@default
end
|
#errors(form) ⇒ Object
184
185
186
187
188
189
|
# File 'lib/dynamic_scaffold/form/item/base.rb', line 184
def errors(form)
msg = form.object.errors.full_messages_for(proxy_field.name)
rel = @config.model.reflect_on_all_associations.find {|r| r.foreign_key.to_s == name.to_s }
msg.concat(form.object.errors.full_messages_for(rel.name)) if rel.present?
msg
end
|
123
124
125
126
127
128
129
|
# File 'lib/dynamic_scaffold/form/item/base.rb', line 123
def (permitting)
if @multiple
permitting << { @name => [] }
else
permitting << @name
end
end
|
#if(&block) ⇒ Object
131
132
133
134
|
# File 'lib/dynamic_scaffold/form/item/base.rb', line 131
def if(&block)
@if_block = block
self
end
|
#insert(position, &block) ⇒ Object
175
176
177
178
179
180
181
182
|
# File 'lib/dynamic_scaffold/form/item/base.rb', line 175
def insert(position, &block)
if block_given?
@inserts[position] << block
self
else
@inserts[position]
end
end
|
#label(*args, &block) ⇒ Object
89
90
91
92
93
94
95
96
97
|
# File 'lib/dynamic_scaffold/form/item/base.rb', line 89
def label(*args, &block)
return @label || @config.model.human_attribute_name(@name) if args.empty? && block.nil?
@label_attributes = args.
@label = args.first unless args.empty?
@label_block = block if block_given?
self
end
|
#label? ⇒ Boolean
85
86
87
|
# File 'lib/dynamic_scaffold/form/item/base.rb', line 85
def label?
!@label.nil?
end
|
#needs_rendering?(view) ⇒ Boolean
141
142
143
144
145
|
# File 'lib/dynamic_scaffold/form/item/base.rb', line 141
def needs_rendering?(view)
return true unless @if_block || @unless_block
return view.instance_exec(view.controller.params, &@if_block) if @if_block
return !view.instance_exec(view.controller.params, &@unless_block) if @unless_block
end
|
#note(&block) ⇒ Object
69
70
71
72
|
# File 'lib/dynamic_scaffold/form/item/base.rb', line 69
def note(&block)
@notes << block if block_given?
self
end
|
#notes? ⇒ Boolean
65
66
67
|
# File 'lib/dynamic_scaffold/form/item/base.rb', line 65
def notes?
!@notes.empty?
end
|
#proxy(attribute_name) ⇒ Object
147
148
149
150
|
# File 'lib/dynamic_scaffold/form/item/base.rb', line 147
def proxy(attribute_name)
@proxy = attribute_name
self
end
|
#proxy_field ⇒ Object
152
153
154
155
156
157
158
159
|
# File 'lib/dynamic_scaffold/form/item/base.rb', line 152
def proxy_field
return self unless @proxy
proxy_target = @config.form.items.select {|f| f.name == @proxy }
raise DynamicScaffold::Error::InvalidParameter, "Missing proxy target element: #{@proxy}" if proxy_target.empty?
proxy_target.first
end
|
#render_label(view, depth) ⇒ Object
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
|
# File 'lib/dynamic_scaffold/form/item/base.rb', line 99
def render_label(view, depth)
if @label_block.present?
label = view.instance_exec(
proxy_field.label,
depth,
@label_attributes,
&@label_block
)
return label unless label.nil?
end
view.tag.label(proxy_field.label, @label_attributes)
end
|
#render_notes(record, view) ⇒ Object
74
75
76
77
78
79
|
# File 'lib/dynamic_scaffold/form/item/base.rb', line 74
def render_notes(record, view)
htmls = @notes.map do |note|
view.instance_exec(record, ¬e)
end
view.safe_join(htmls)
end
|
#type?(*args) ⇒ Boolean
81
82
83
|
# File 'lib/dynamic_scaffold/form/item/base.rb', line 81
def type?(*args)
args.include?(@type)
end
|
#unless(&block) ⇒ Object
136
137
138
139
|
# File 'lib/dynamic_scaffold/form/item/base.rb', line 136
def unless(&block)
@unless_block = block
self
end
|