Class: Effective::TableBuilder
- Inherits:
-
Object
- Object
- Effective::TableBuilder
show all
- Defined in:
- app/models/effective/table_builder.rb
Constant Summary
collapse
- FILTER_PARAMETERS =
[:password, :password_confirmation, :status_steps, :wizard_steps, :token, :created_at, :updated_at]
Instance Attribute Summary collapse
Instance Method Summary
collapse
-
#belongs_to(name, options = {}) ⇒ Object
-
#boolean_row(name, options = {}) ⇒ Object
(also: #check_box)
-
#build_resource_rows ⇒ Object
-
#capture(&block) ⇒ Object
-
#collection_row(name, collection, options = {}, &block) ⇒ Object
(also: #select, #checks, #radios)
-
#content_for(name, options = {}, &block) ⇒ Object
-
#default_row(name, options = {}, &block) ⇒ Object
Assign the
| ... |
to the @rows Hash.
-
#effective_address(name, options = {}) ⇒ Object
-
#email_field(name, options = {}) ⇒ Object
(also: #email_cc_field)
-
#fields_for(name, object, options = {}, &block) ⇒ Object
(also: #effective_fields_for)
-
#file_field(name, options = {}) ⇒ Object
-
#filter_parameters ⇒ Object
-
#form_group(name = nil, options = {}, &block) ⇒ Object
-
#has_many(name, collection = nil, options = {}, &block) ⇒ Object
-
#hidden_field(name = nil, options = {}) ⇒ Object
-
#hide_if(name, selected, &block) ⇒ Object
-
#human_attribute_name(name) ⇒ Object
-
#initialize(object, template, options = {}, &block) ⇒ TableBuilder
constructor
A new instance of TableBuilder.
-
#method_missing(method, *args, **kwargs, &block) ⇒ Object
Call default_row for any form field.
-
#password_field(name, options = {}) ⇒ Object
-
#percent_field(name, options = {}) ⇒ Object
-
#price_field(name, options = {}) ⇒ Object
-
#render(&block) ⇒ Object
-
#save(name, options = {}) ⇒ Object
-
#search_field(name, options = {}) ⇒ Object
-
#show_if(name, selected, &block) ⇒ Object
-
#show_if_any(name, options, &block) ⇒ Object
-
#submit(name, options = {}, &block) ⇒ Object
-
#text_area(name, options = {}) ⇒ Object
-
#url_field(name, options = {}) ⇒ Object
-
#value(name) ⇒ Object
Constructor Details
#initialize(object, template, options = {}, &block) ⇒ TableBuilder
Returns a new instance of TableBuilder.
15
16
17
18
19
20
21
22
23
24
|
# File 'app/models/effective/table_builder.rb', line 15
def initialize(object, template, options = {}, &block)
raise('resource must be an ActiveRecord::Base') unless object.is_a?(ActiveRecord::Base)
@object = object
@template = template
@options = options
@rows = {}
@content_fors = {}
end
|
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(method, *args, **kwargs, &block) ⇒ Object
Call default_row for any form field
93
94
95
|
# File 'app/models/effective/table_builder.rb', line 93
def method_missing(method, *args, **kwargs, &block)
default_row(args[0], **kwargs, &block)
end
|
Instance Attribute Details
#content_fors ⇒ Object
Returns the value of attribute content_fors.
11
12
13
|
# File 'app/models/effective/table_builder.rb', line 11
def content_fors
@content_fors
end
|
#object ⇒ Object
Returns the value of attribute object.
7
8
9
|
# File 'app/models/effective/table_builder.rb', line 7
def object
@object
end
|
#options ⇒ Object
Returns the value of attribute options.
7
8
9
|
# File 'app/models/effective/table_builder.rb', line 7
def options
@options
end
|
#rows ⇒ Object
A Hash of :first_name => "
| First Name | Bob |
"
10
11
12
|
# File 'app/models/effective/table_builder.rb', line 10
def rows
@rows
end
|
#template ⇒ Object
Returns the value of attribute template.
7
8
9
|
# File 'app/models/effective/table_builder.rb', line 7
def template
@template
end
|
Instance Method Details
#belongs_to(name, options = {}) ⇒ Object
118
119
120
|
# File 'app/models/effective/table_builder.rb', line 118
def belongs_to(name, options = {})
rows[name] = TableRows::BelongsTo.new(name, options, builder: self).to_html
end
|
#boolean_row(name, options = {}) ⇒ Object
Also known as:
check_box
102
103
104
|
# File 'app/models/effective/table_builder.rb', line 102
def boolean_row(name, options = {})
rows[name] = TableRows::Boolean.new(name, options, builder: self).to_html
end
|
#build_resource_rows ⇒ Object
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
# File 'app/models/effective/table_builder.rb', line 56
def build_resource_rows
Effective::Resource.new(object).resource_attributes.each do |name, options|
case options.first
when :belongs_to
belongs_to(name)
when :effective_address
effective_address(name)
when :boolean
boolean_row(name)
when :integer
name.to_s.end_with?('price') ? price_field(name) : text_field(name)
when :string
name.to_s.include?('email') ? email_field(name) : text_field(name)
when :text
text_area(name)
else default_row(name)
end
end
end
|
#capture(&block) ⇒ Object
47
48
49
50
51
52
53
54
|
# File 'app/models/effective/table_builder.rb', line 47
def capture(&block)
begin
template.instance_variable_set(:@_effective_table_builder, self)
template.capture(self, &block)
ensure
template.instance_variable_set(:@_effective_table_builder, nil)
end
end
|
#collection_row(name, collection, options = {}, &block) ⇒ Object
Also known as:
select, checks, radios
107
108
109
110
111
112
113
|
# File 'app/models/effective/table_builder.rb', line 107
def collection_row(name, collection, options = {}, &block)
rows[name] = if [true, false].include?(value(name))
TableRows::Boolean.new(name, options, builder: self).to_html
else
TableRows::Collection.new(name, collection, options, builder: self).to_html
end
end
|
#content_for(name, options = {}, &block) ⇒ Object
175
176
177
|
# File 'app/models/effective/table_builder.rb', line 175
def content_for(name, options = {}, &block)
content_fors[name] = TableRows::ContentFor.new(name, options, builder: self).to_html(&block)
end
|
#default_row(name, options = {}, &block) ⇒ Object
Assign the
| ... |
to the @rows Hash
98
99
100
|
# File 'app/models/effective/table_builder.rb', line 98
def default_row(name, options = {}, &block)
rows[name] = TableRow.new(name, options, builder: self).to_html
end
|
#effective_address(name, options = {}) ⇒ Object
147
148
149
|
# File 'app/models/effective/table_builder.rb', line 147
def effective_address(name, options = {})
rows[name] = TableRows::EffectiveAddress.new(name, options, builder: self).to_html
end
|
#email_field(name, options = {}) ⇒ Object
Also known as:
email_cc_field
122
123
124
|
# File 'app/models/effective/table_builder.rb', line 122
def email_field(name, options = {})
rows[name] = TableRows::EmailField.new(name, options, builder: self).to_html
end
|
#fields_for(name, object, options = {}, &block) ⇒ Object
Also known as:
effective_fields_for
197
198
199
200
201
|
# File 'app/models/effective/table_builder.rb', line 197
def fields_for(name, object, options = {}, &block)
builder = TableBuilder.new(object, template, options.merge(prefix: human_attribute_name(name)))
builder.render(&block)
builder.rows.each { |child, content| rows["#{name}_#{child}".to_sym] = content }
end
|
#file_field(name, options = {}) ⇒ Object
127
128
129
|
# File 'app/models/effective/table_builder.rb', line 127
def file_field(name, options = {})
rows[name] = TableRows::FileField.new(name, options, builder: self).to_html
end
|
#filter_parameters ⇒ Object
76
77
78
|
# File 'app/models/effective/table_builder.rb', line 76
def filter_parameters
FILTER_PARAMETERS + Array(object.class.try(:filter_parameters)) + Array(Rails.application.config.filter_parameters)
end
|
131
132
133
|
# File 'app/models/effective/table_builder.rb', line 131
def form_group(name = nil, options = {}, &block)
end
|
#has_many(name, collection = nil, options = {}, &block) ⇒ Object
193
194
195
|
# File 'app/models/effective/table_builder.rb', line 193
def has_many(name, collection = nil, options = {}, &block)
raise('unsupported')
end
|
#hidden_field(name = nil, options = {}) ⇒ Object
135
136
137
|
# File 'app/models/effective/table_builder.rb', line 135
def hidden_field(name = nil, options = {})
end
|
#hide_if(name, selected, &block) ⇒ Object
180
181
182
|
# File 'app/models/effective/table_builder.rb', line 180
def hide_if(name, selected, &block)
template.capture(self, &block) unless value(name) == selected
end
|
#human_attribute_name(name) ⇒ Object
80
81
82
83
84
85
86
|
# File 'app/models/effective/table_builder.rb', line 80
def human_attribute_name(name)
if object.respond_to?(:human_attribute_name)
object.human_attribute_name(name)
else
(name.to_s.split('.').last.to_s.titleize || '')
end
end
|
#password_field(name, options = {}) ⇒ Object
143
144
145
|
# File 'app/models/effective/table_builder.rb', line 143
def password_field(name, options = {})
end
|
#percent_field(name, options = {}) ⇒ Object
151
152
153
|
# File 'app/models/effective/table_builder.rb', line 151
def percent_field(name, options = {})
rows[name] = TableRows::PercentField.new(name, options, builder: self).to_html
end
|
#price_field(name, options = {}) ⇒ Object
155
156
157
|
# File 'app/models/effective/table_builder.rb', line 155
def price_field(name, options = {})
rows[name] = TableRows::PriceField.new(name, options, builder: self).to_html
end
|
#render(&block) ⇒ Object
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
# File 'app/models/effective/table_builder.rb', line 26
def render(&block)
capture(&block) if block_given?
build_resource_rows if rows.blank?
only = Array(options[:only])
except = Array(options[:except])
filtered = filter_parameters
content = rows.merge(content_fors)
content = content.slice(*only) if only.present?
content = content.except(*except) if except.present?
content = content.except(*filtered) if filtered.present?
content_tag(:table, class: options.fetch(:class, 'table table-striped table-hover')) do
content_tag(:tbody, content.values.join.html_safe)
end
end
|
#save(name, options = {}) ⇒ Object
159
160
161
|
# File 'app/models/effective/table_builder.rb', line 159
def save(name, options = {})
end
|
#search_field(name, options = {}) ⇒ Object
139
140
141
|
# File 'app/models/effective/table_builder.rb', line 139
def search_field(name, options = {})
end
|
#show_if(name, selected, &block) ⇒ Object
184
185
186
|
# File 'app/models/effective/table_builder.rb', line 184
def show_if(name, selected, &block)
template.capture(self, &block) if value(name) == selected
end
|
#show_if_any(name, options, &block) ⇒ Object
188
189
190
|
# File 'app/models/effective/table_builder.rb', line 188
def show_if_any(name, options, &block)
template.capture(self, &block) if Array(options).include?(value(name))
end
|
#submit(name, options = {}, &block) ⇒ Object
163
164
165
|
# File 'app/models/effective/table_builder.rb', line 163
def submit(name, options = {}, &block)
end
|
#text_area(name, options = {}) ⇒ Object
167
168
169
|
# File 'app/models/effective/table_builder.rb', line 167
def text_area(name, options = {})
rows[name] = TableRows::TextArea.new(name, options, builder: self).to_html
end
|
#url_field(name, options = {}) ⇒ Object
171
172
173
|
# File 'app/models/effective/table_builder.rb', line 171
def url_field(name, options = {})
rows[name] = TableRows::UrlField.new(name, options, builder: self).to_html
end
|
#value(name) ⇒ Object
88
89
90
|
# File 'app/models/effective/table_builder.rb', line 88
def value(name)
object.send(name)
end
|