sequent-sinatra 0.1.4 → 0.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/sequent-sinatra/fieldset.rb +12 -6
- data/lib/sequent-sinatra/form.rb +0 -4
- data/lib/sequent-sinatra/tag_helper.rb +52 -53
- data/lib/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 97c87c781855a940c9c66574a9f68342d159ea66
|
4
|
+
data.tar.gz: 287e0f1e73c596ef6a814df83831bf8f6ce13e8d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 00a7d067aeb7a22595443ffd3303f6ca8f57cb3d7d1941d2ff5289f064c3c8b44a09da57372274b9310c862291c04e86cda0d9d9a2bad5c7a10ce35f44da846c
|
7
|
+
data.tar.gz: 59a215973ffc08a03604ad3981ba4b430e4f416c662c7d1900e4ece04b58a0227ddf1b590fcae4c48ad13469e000d1d611d24c3d5144f2e82f93c5e3726e9aa3
|
@@ -13,6 +13,10 @@ module Sequent
|
|
13
13
|
nil
|
14
14
|
end
|
15
15
|
|
16
|
+
def postfix_for_id
|
17
|
+
nil
|
18
|
+
end
|
19
|
+
|
16
20
|
def initialize(parent, path, params, errors, options = {})
|
17
21
|
raise "params are empty while creating new fieldset path #{path}" unless params
|
18
22
|
@values = params[path] || {}
|
@@ -22,9 +26,10 @@ module Sequent
|
|
22
26
|
@options = options
|
23
27
|
end
|
24
28
|
|
25
|
-
def nested_array(name)
|
26
|
-
|
27
|
-
|
29
|
+
def nested_array(name, default_if_empty = {})
|
30
|
+
values = @values[name].present? ? @values[name] : [default_if_empty].compact
|
31
|
+
values.each_with_index do |value, index|
|
32
|
+
yield FieldsetInArray.new(self, name, { name => value }, @errors, @options.merge(index_in_array: index))
|
28
33
|
end
|
29
34
|
end
|
30
35
|
|
@@ -36,15 +41,16 @@ module Sequent
|
|
36
41
|
@parent.send(method, *args)
|
37
42
|
end
|
38
43
|
|
39
|
-
def path_for(field_name)
|
40
|
-
css_id @path, field_name
|
41
|
-
end
|
42
44
|
end
|
43
45
|
|
44
46
|
class FieldsetInArray < Fieldset
|
45
47
|
def postfix
|
46
48
|
"[]"
|
47
49
|
end
|
50
|
+
|
51
|
+
def postfix_for_id
|
52
|
+
@options[:index_in_array].to_s
|
53
|
+
end
|
48
54
|
end
|
49
55
|
end
|
50
56
|
end
|
data/lib/sequent-sinatra/form.rb
CHANGED
@@ -14,11 +14,12 @@ module Sequent
|
|
14
14
|
# :value - the default checked value if the current object has none
|
15
15
|
# :class - the css class
|
16
16
|
def raw_checkbox(field, options={})
|
17
|
-
id =
|
17
|
+
id = calculate_id(field)
|
18
18
|
value = param_or_default(field, options[:value]) || id
|
19
19
|
values = [value].compact
|
20
20
|
single_tag :input, options.merge(
|
21
|
-
:type => "checkbox",
|
21
|
+
:type => "checkbox",
|
22
|
+
:id => id,
|
22
23
|
:name => calculate_name(field),
|
23
24
|
:value => value, checked: (values.include?(@values[field.to_s])) ? "checked" : nil
|
24
25
|
)
|
@@ -56,12 +57,12 @@ module Sequent
|
|
56
57
|
# +options+ Hash with optional attributes.
|
57
58
|
# :value - the default value if the current object has none
|
58
59
|
# :class - the css class
|
59
|
-
# :rows - the number of rows of the textarea
|
60
|
+
# :rows - the number of rows of the textarea, default 3
|
60
61
|
def raw_textarea(field, options={})
|
61
62
|
value = param_or_default(field, options[:value])
|
62
63
|
|
63
64
|
with_closing_tag :textarea, value, {rows: "3"}.merge(options.merge(
|
64
|
-
:id =>
|
65
|
+
:id => calculate_id(field),
|
65
66
|
:name => calculate_name(field)
|
66
67
|
))
|
67
68
|
end
|
@@ -97,39 +98,44 @@ module Sequent
|
|
97
98
|
option_values.merge!(disabled: "disabled") if options[:disable].try(:include?, id)
|
98
99
|
content << tag(:option, text, option_values)
|
99
100
|
end
|
100
|
-
tag :select, content, options.merge(:
|
101
|
+
tag :select, content, options.merge(id: calculate_id(field), name: calculate_name(field))
|
101
102
|
end
|
102
103
|
|
104
|
+
def full_path(field)
|
105
|
+
tree_in_names(field, :postfix_for_id).join('_')
|
106
|
+
end
|
107
|
+
|
108
|
+
alias_method :calculate_id, :full_path
|
109
|
+
|
103
110
|
def calculate_name(field)
|
104
|
-
reverse_names = tree_in_names(field)
|
111
|
+
reverse_names = tree_in_names(field, :postfix)
|
105
112
|
"#{reverse_names.first}#{reverse_names[1..-1].map { |n| n == '[]' ? n : "[#{n}]" }.join}"
|
106
113
|
end
|
107
114
|
|
108
|
-
def
|
109
|
-
|
115
|
+
def param_or_default(field, default)
|
116
|
+
@values.nil? ? default : @values.has_key?(field.to_s) ? @values[field.to_s] || default : default
|
110
117
|
end
|
111
118
|
|
112
|
-
|
119
|
+
def merge_and_append_class_attributes(to_append, options = {})
|
120
|
+
to_append.merge(options) do |key, oldval, newval|
|
121
|
+
key == :class ? "#{oldval} #{newval}" : newval
|
122
|
+
end
|
123
|
+
end
|
113
124
|
|
114
|
-
def
|
115
|
-
if
|
116
|
-
|
117
|
-
parent = @parent
|
118
|
-
while parent.is_a? Fieldset
|
119
|
-
names << parent.postfix if parent.postfix
|
120
|
-
names << parent.path
|
121
|
-
parent = parent.parent
|
122
|
-
end
|
123
|
-
names.reverse
|
125
|
+
def i18n_name(field)
|
126
|
+
if @path
|
127
|
+
"#{@path}.#{field}"
|
124
128
|
else
|
125
|
-
|
129
|
+
field.to_s
|
126
130
|
end
|
127
131
|
end
|
128
132
|
|
129
|
-
def
|
130
|
-
@
|
133
|
+
def has_form_error?(name)
|
134
|
+
@errors.try(:has_key?, name.to_sym)
|
131
135
|
end
|
132
136
|
|
137
|
+
private
|
138
|
+
|
133
139
|
def id_and_text_from_value(val)
|
134
140
|
if val.is_a? Array
|
135
141
|
[val[0], val[1]]
|
@@ -138,24 +144,12 @@ module Sequent
|
|
138
144
|
end
|
139
145
|
end
|
140
146
|
|
141
|
-
def css_id(*things)
|
142
|
-
things.compact.map { |t| t.to_s }.join('_').downcase.gsub(/\W/, '_')
|
143
|
-
end
|
144
|
-
|
145
147
|
def tag(name, content, options={})
|
146
148
|
"<#{name.to_s}" +
|
147
149
|
(options.length > 0 ? " #{hash_to_html_attrs(options)}" : '') +
|
148
150
|
(content.nil? ? '>' : ">#{content}</#{name}>")
|
149
151
|
end
|
150
152
|
|
151
|
-
def single_tag(name, options={})
|
152
|
-
"<#{name.to_s} #{hash_to_html_attrs(options)} />"
|
153
|
-
end
|
154
|
-
|
155
|
-
def with_closing_tag(name, value, options={})
|
156
|
-
%Q{<#{name.to_s} #{hash_to_html_attrs(options)} >#{h value}</#{name.to_s}>}
|
157
|
-
end
|
158
|
-
|
159
153
|
def hash_to_html_attrs(options={})
|
160
154
|
raise %Q{Keys used in options must be a Symbol. Don't use {"class" => "col-md-4"} but use {class: "col-md-4"}} if options.keys.find { |k| not k.kind_of? Symbol }
|
161
155
|
html_attrs = ""
|
@@ -166,32 +160,15 @@ module Sequent
|
|
166
160
|
html_attrs.chop
|
167
161
|
end
|
168
162
|
|
169
|
-
def merge_and_append_class_attributes(to_append, options = {})
|
170
|
-
to_append.merge(options) do |key, oldval, newval|
|
171
|
-
key == :class ? "#{oldval} #{newval}" : newval
|
172
|
-
end
|
173
|
-
end
|
174
|
-
|
175
|
-
def i18n_name(field)
|
176
|
-
if @path
|
177
|
-
"#{@path}.#{field}"
|
178
|
-
else
|
179
|
-
field.to_s
|
180
|
-
end
|
181
|
-
end
|
182
|
-
|
183
|
-
def has_form_error?(name)
|
184
|
-
@errors.try(:has_key?, name.to_sym)
|
185
|
-
end
|
186
163
|
|
187
|
-
private
|
188
164
|
def raw_field(field, field_type, options)
|
189
165
|
value = param_or_default(field, options[:value])
|
190
166
|
if options[:formatter]
|
191
167
|
value = self.send(options[:formatter], value)
|
192
168
|
options.delete(:formatter)
|
193
169
|
end
|
194
|
-
|
170
|
+
#TODO use calculate_id
|
171
|
+
id = options[:id] || calculate_id(field)
|
195
172
|
single_tag :input, options.merge(
|
196
173
|
:type => field_type,
|
197
174
|
:id => id,
|
@@ -200,6 +177,28 @@ module Sequent
|
|
200
177
|
)
|
201
178
|
end
|
202
179
|
|
180
|
+
def tree_in_names(field, postfix_method_name)
|
181
|
+
if respond_to? :path
|
182
|
+
names = [field, send(postfix_method_name), path].compact
|
183
|
+
parent = @parent
|
184
|
+
while parent.is_a? Fieldset
|
185
|
+
names << parent.postfix if parent.send(postfix_method_name)
|
186
|
+
names << parent.path
|
187
|
+
parent = parent.parent
|
188
|
+
end
|
189
|
+
names.reverse
|
190
|
+
else
|
191
|
+
[field]
|
192
|
+
end
|
193
|
+
end
|
194
|
+
|
195
|
+
def single_tag(name, options={})
|
196
|
+
"<#{name.to_s} #{hash_to_html_attrs(options)} />"
|
197
|
+
end
|
198
|
+
|
199
|
+
def with_closing_tag(name, value, options={})
|
200
|
+
%Q{<#{name.to_s} #{hash_to_html_attrs(options)} >#{h value}</#{name.to_s}>}
|
201
|
+
end
|
203
202
|
|
204
203
|
end
|
205
204
|
end
|
data/lib/version.rb
CHANGED