sinatra-tag-helpers 0.0.10 → 0.0.11

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 CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- NWZmNGE0MWU1ZDc2MjBlNTVhZGVmMzI3MjI2MDkwYTQxNWIyNzdkYQ==
4
+ NzI1YTcwY2ExN2RmMTRlN2E5NTlkOWZkNDkwYzA4M2FkMmEyMTRhZA==
5
5
  data.tar.gz: !binary |-
6
- MzE0OTY3Mzc3ZDUyMTlmMDg2ZTVjN2QzODQ5YzgzNzA3MDkzMjI0OQ==
6
+ NmNlMzQwYjY1MzMxNWI1NDcxMGM4MDg3Yjc3NGE0YThiNmNhNTVlZg==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- ZWJhYThlNTZiODQ3NGNhOTlmM2JhMGZkMGEwZWJmMzhmMzRlNDhkN2EzNzc5
10
- YjlhYjlmZWE5NzY4ZjU0ZTJhNjM3ZDkwNGUyZjc2MTk2ZDY3YTA2MjVlNWI3
11
- ZjM2OGUzNTI2NGM2MGNiYjYwYTNjZjhmYjE2ZDc4OTcxMTQyYzQ=
9
+ NmU4NzUxNzhkY2M1ZTIxNzM3NWU1MjgyOGQwMjRjNWYzYmUwYjRhYzExMWFi
10
+ OTgyNjIyZTYxYmQ2NDkyNWY1NTYxY2I3ODc2ZTczNTZjNTA0YjIyY2UzMWY5
11
+ ZmE3MDQ3MGIwYTBmOWFjNzhhOWM0YzZlMTU5NzhlNGFhOGQ2YTQ=
12
12
  data.tar.gz: !binary |-
13
- ZDhiNTJlMDU5OTFmZmNjYzA4NDVhNWY4MDViMzllZTE2YjZlNTI2ZTlmYmU0
14
- NTg0ZmFhZGIyOWI3YzJiYmY2YzUzYmRjNjRmMzcyNDU4NmMwODg1NDUxMjdm
15
- ZWI2ZjQzNWUyNDEwZGY5MWRkMzU2MmM5YmNkMTY0MTNhMTk4YWY=
13
+ ZjFmZjZmOWMwYTAyMWMwYmFjNGY1ZWQ3NDYwZDlkYmI4ZjVjNTJlOTRkMzYz
14
+ ZGZkMzFjYTVjZTIzNzYxZjU2MGVhNGRjZjFmY2Y4ZDZmMWFhOGY1YjdjY2Yw
15
+ OWM5ZmM1MjNiZjg2ODM0NjJmNWMxMzZiMWZlZTgzNjM2ODI2Mjg=
data/README.md CHANGED
@@ -20,7 +20,7 @@ Or install it yourself as:
20
20
 
21
21
  Classic style apps should be good to go and modular apps can do the old:
22
22
 
23
- helpers Sinatra::TagHelpers
23
+ register Sinatra::TagHelpers
24
24
 
25
25
  ## Contributing
26
26
 
@@ -1,217 +1,243 @@
1
1
  require 'sinatra/base'
2
2
  require 'sinatra/tag-helpers/version'
3
+ require 'escape_utils'
3
4
 
4
5
  module Sinatra
5
6
  module TagHelpers
6
- # don't even try it
7
- def html_escape(text = '')
8
- EscapeUtils.escape_html(text || '')
9
- end
10
- alias_method :h, :html_escape
11
-
12
- # converts a hash into HTML style attributes
13
- def to_attributes(hash)
14
- hash.collect do |key, value|
15
- # for things like data: { stuff: 'hey' }
16
- if value.is_a? Hash
17
- value.collect do |k, v|
18
- "#{key}-#{k}=\"#{v}\""
7
+ module HelperMethods
8
+ # don't even try it
9
+ def html_escape(text = '')
10
+ EscapeUtils.escape_html(text || '')
11
+ end
12
+ alias_method :h, :html_escape
13
+
14
+ # converts a hash into HTML style attributes
15
+ def to_attributes(hash)
16
+ hash.collect do |key, value|
17
+ # for things like data: { stuff: 'hey' }
18
+ if value.is_a? Hash
19
+ value.collect do |k, v|
20
+ "#{key}-#{k}=\"#{v}\""
21
+ end
22
+ else
23
+ value.is_a?(TrueClass) ? key.to_s : "#{key}=\"#{value}\""
19
24
  end
20
- else
21
- value.is_a?(TrueClass) ? key.to_s : "#{key}=\"#{value}\""
22
- end
23
- end.join(' ').chomp
24
- end
25
-
26
- # mostly so we can override this if we need to look anywhere besides the params
27
- # * cough * session * cough *
28
- def param_value(param_name)
29
- html_escape(params[param_name.to_sym] || '')
30
- end
31
-
32
- # link helper
33
- # examples:
34
- #
35
- # link_to 'Overview', '/account/overview' # => <a href='/account/overview'>Overview</a>
36
- #
37
- # when on /account/overview
38
- #
39
- # <a href='/account/overview' class='current'>Overview</a>
40
- #
41
- def link_to(text, link, attributes = {})
42
- if URI.parse(link).path == request.path_info
43
- attributes[:class] = "#{ attributes[:class] } current"
25
+ end.join(' ').chomp
44
26
  end
45
27
 
46
- attributes.merge!({ :href => to(link) })
28
+ # mostly so we can override this if we need to look anywhere besides the params
29
+ # * cough * session * cough *
30
+ def param_value(param_name)
31
+ html_escape(params[param_name.to_sym] || '')
32
+ end
47
33
 
48
- "<a #{ to_attributes(attributes) }>#{ text }</a>"
49
- end
34
+ # link helper
35
+ # examples:
36
+ #
37
+ # link_to 'Overview', '/account/overview' # => <a href='/account/overview'>Overview</a>
38
+ #
39
+ # when on /account/overview
40
+ #
41
+ # <a href='/account/overview' class='current'>Overview</a>
42
+ #
43
+ def link_to(text, link, attributes = {})
44
+ if URI.parse(link).path == request.path_info
45
+ attributes[:class] = [attributes[:class], settings.link_to_current_class].join(' ')
46
+ end
50
47
 
51
- # input_for creates an <input> tag with a number of configurable options
52
- # if `param` is set in the `params` hash, the values from the `params` hash will be populated in the tag.
53
- #
54
- # <%= input_for 'something_hidden', type: 'hidden', value: 'Shhhhhh' %>
55
- #
56
- # Yields:
57
- #
58
- # <input type='hidden' name='something_hidden' id='something_hidden' value='Shhhhhh'>
59
- #
60
- def input_for(param, attributes = {})
61
- attributes = {
62
- :type => 'text',
63
- :value => param_value(param),
64
- :name => param,
65
- :id => param
66
- }.merge(attributes)
67
-
68
- "<input #{ to_attributes(attributes) }>"
69
- end
48
+ attributes.merge!({ :href => to(link) })
70
49
 
71
- # radio_for creates an input tag of type radio and marks it `checked` if the param argument is set to the same value in the `params` hash
72
- def radio_for(param, attributes = {})
73
- attributes = {
74
- :type => 'radio'
75
- }.merge(attributes)
50
+ "<a #{ to_attributes(attributes) }>#{ text }</a>"
51
+ end
76
52
 
77
- if param_value(param) == attributes[:value].to_s
78
- attributes.merge!({ :checked => true })
53
+ # input_for creates an <input> tag with a number of configurable options
54
+ # if `param` is set in the `params` hash, the values from the `params` hash will be populated in the tag.
55
+ #
56
+ # <%= input_for 'something_hidden', type: 'hidden', value: 'Shhhhhh' %>
57
+ #
58
+ # Yields:
59
+ #
60
+ # <input type='hidden' name='something_hidden' id='something_hidden' value='Shhhhhh'>
61
+ #
62
+ def input_for(param, attributes = {})
63
+ attributes = {
64
+ :type => 'text',
65
+ :value => param_value(param),
66
+ :name => param,
67
+ :id => param
68
+ }.merge(attributes)
69
+
70
+ "<input #{ to_attributes(attributes) }>"
79
71
  end
80
72
 
81
- input_for param, attributes
82
- end
73
+ # radio_for creates an input tag of type radio and marks it `checked` if the param argument is set to the same value in the `params` hash
74
+ def radio_for(param, attributes = {})
75
+ attributes = {
76
+ :type => 'radio'
77
+ }.merge(attributes)
78
+
79
+ if param_value(param) == attributes[:value].to_s
80
+ attributes.merge!({ :checked => true })
81
+ end
83
82
 
84
- # checkbox_for creates an input of type checkbox with a `checked_if` argument to determine if it should be checked
85
- #
86
- # <%= checkbox_for 'is_cool', User.is_cool? %>
87
- #
88
- # Yields:
89
- #
90
- # <input type='checkbox' name='is_cool' id='is_cool' value='true'>
91
- #
92
- # Which will be marked with `checked` if `User.is_cool?` evaluates to true
93
- #
94
- def checkbox_for(param, checked_if = false, attributes = {})
95
- attributes = {
96
- :type => 'checkbox',
97
- :value => 'true'
98
- }.merge(attributes)
99
-
100
- if checked_if || param_value(param) == attributes[:value].to_s
101
- attributes.merge!({ checked: true })
83
+ input_for param, attributes
102
84
  end
103
85
 
104
- input_for param, attributes
105
- end
86
+ # checkbox_for creates an input of type checkbox with a `checked_if` argument to determine if it should be checked
87
+ #
88
+ # <%= checkbox_for 'is_cool', User.is_cool? %>
89
+ #
90
+ # Yields:
91
+ #
92
+ # <input type='checkbox' name='is_cool' id='is_cool' value='true'>
93
+ #
94
+ # Which will be marked with `checked` if `User.is_cool?` evaluates to true
95
+ #
96
+ def checkbox_for(param, checked_if = false, attributes = {})
97
+ attributes = {
98
+ :type => 'checkbox',
99
+ :value => 'true'
100
+ }.merge(attributes)
101
+
102
+ if checked_if || param_value(param) == attributes[:value].to_s
103
+ attributes.merge!({ checked: true })
104
+ end
106
105
 
107
- # creates a simple <textarea> tag
108
- def textarea_for(param, attributes = {})
109
- attributes = {
110
- :name => param,
111
- :id => param
112
- }.merge(attributes)
106
+ input_for param, attributes
107
+ end
113
108
 
114
- "<textarea #{ to_attributes(attributes) }>#{ param_value(param) }</textarea>"
115
- end
109
+ # creates a simple <textarea> tag
110
+ def textarea_for(param, attributes = {})
111
+ attributes = {
112
+ :name => param,
113
+ :id => param
114
+ }.merge(attributes)
116
115
 
117
- # option_for creates an <option> element with the specified attributes
118
- # if the param specified is set to the value of this option tag then it is marked as 'selected'
119
- # designed to be used within a <select> element
120
- #
121
- # <%= option_for 'turtles', key: 'I love them', value: 'love' %>
122
- #
123
- # Yields:
124
- #
125
- # <option value='love'>I love them</option>
126
- #
127
- # If params[:turtle] is set to 'love' this yields:
128
- #
129
- # <option value='love' selected>I love them</option>
130
- #
131
- def option_for(param, attributes = {})
132
- default = attributes.delete(:default).to_s
133
-
134
- if !params[param.to_sym].nil? && !params[param.to_sym].empty?
135
- default = param_value(param)
116
+ "<textarea #{ to_attributes(attributes) }>#{ param_value(param) }</textarea>"
136
117
  end
137
118
 
138
- attributes.merge!({ :selected => true }) if default == attributes[:value].to_s
139
- key = attributes.delete(:key)
119
+ # option_for creates an <option> element with the specified attributes
120
+ # if the param specified is set to the value of this option tag then it is marked as 'selected'
121
+ # designed to be used within a <select> element
122
+ #
123
+ # <%= option_for 'turtles', key: 'I love them', value: 'love' %>
124
+ #
125
+ # Yields:
126
+ #
127
+ # <option value='love'>I love them</option>
128
+ #
129
+ # If params[:turtle] is set to 'love' this yields:
130
+ #
131
+ # <option value='love' selected>I love them</option>
132
+ #
133
+ def option_for(param, attributes = {})
134
+ default = attributes.delete(:default).to_s
135
+
136
+ if !params[param.to_sym].nil? && !params[param.to_sym].empty?
137
+ default = param_value(param)
138
+ end
140
139
 
141
- "<option #{ to_attributes(attributes) }>#{ key }</option>"
142
- end
140
+ attributes.merge!({ :selected => true }) if default == attributes[:value].to_s
141
+ key = attributes.delete(:key)
143
142
 
144
- # select_for creates a <select> element with the specified attributes
145
- # options are the available <option> tags within the <select> box
146
- #
147
- # <%= select_for 'days', { monday: 'Monday', myday: 'MY DAY!' } %>
148
- #
149
- # Yields:
150
- #
151
- # <select name='days' id='days' size='1'>
152
- # <option value='monday'>Monday</option>
153
- # <option value='myday'>MY DAY!</option>
154
- # </select>
155
- #
156
- def select_for(param, options, attributes = {})
157
- attributes = {
158
- :name => param,
159
- :id => param
160
- }.merge(attributes)
161
-
162
- select = ["<select #{ to_attributes(attributes) }>"]
163
-
164
- options.collect do |key, val|
165
- # groups...
166
- if val.is_a?(Hash)
167
- select.push "<optgroup label='#{ key }'>"
168
-
169
- val.each do |group_key, group_val|
170
- select.push option_for(param, :key => group_key, :value => group_val, :default => attributes[:default] || param_value(param))
171
- end
143
+ "<option #{ to_attributes(attributes) }>#{ key }</option>"
144
+ end
172
145
 
173
- select.push "</optgroup>"
174
- else
175
- select.push option_for(param, :key => key, :value => val, :default => attributes[:default] || param_value(param))
146
+ # select_for creates a <select> element with the specified attributes
147
+ # options are the available <option> tags within the <select> box
148
+ #
149
+ # <%= select_for 'days', { monday: 'Monday', myday: 'MY DAY!' } %>
150
+ #
151
+ # Yields:
152
+ #
153
+ # <select name='days' id='days' size='1'>
154
+ # <option value='monday'>Monday</option>
155
+ # <option value='myday'>MY DAY!</option>
156
+ # </select>
157
+ #
158
+ def select_for(param, options, attributes = {})
159
+ attributes = {
160
+ :name => param,
161
+ :id => param
162
+ }.merge(attributes)
163
+
164
+ select = ["<select #{ to_attributes(attributes) }>"]
165
+
166
+ options.collect do |key, val|
167
+ # groups...
168
+ if val.is_a?(Hash)
169
+ select.push "<optgroup label='#{ key }'>"
170
+
171
+ val.each do |group_key, group_val|
172
+ select.push option_for(param, :key => group_key, :value => group_val, :default => attributes[:default] || param_value(param))
173
+ end
174
+
175
+ select.push "</optgroup>"
176
+ else
177
+ select.push option_for(param, :key => key, :value => val, :default => attributes[:default] || param_value(param))
178
+ end
176
179
  end
177
- end
178
180
 
179
- select.push('</select>').join(' ').chomp
180
- end
181
+ select.push('</select>').join(' ').chomp
182
+ end
181
183
 
182
- # shortcut to generate a month list
183
- def months_for(param, attributes = {})
184
- select_for(param, { 'Month' => '', '1 - January' => '01', '2 - February' => '02', '3 - March' => '03', '4 - April' => '04', '5 - May' => '05', '6 - June' => '06', '7 - July' => '07', '8 - August' => '08', '9 - September' => '09', '10 - October' => '10', '11 - November' => '11', '12 - December' => '12' }, attributes)
185
- end
184
+ # shortcut to generate a month list
185
+ def months_for(param, attributes = {})
186
+ select_for(param, settings.months_hash, attributes)
187
+ end
186
188
 
187
- def years_for(param, range = 1940..Date.today.year, attributes = {})
188
- options = { 'Year' => '' }
189
+ def years_for(param, range = settings.years_range, attributes = {})
190
+ options = { 'Year' => '' }
189
191
 
190
- if range.last > range.first
191
- # top down
192
- range.last.downto(range.first) do |element|
193
- options[element] = element
194
- end
195
- else
196
- # bottom up
197
- range.last.upto(range.first) do |element|
198
- options[element] = element
192
+ if range.last > range.first
193
+ # top down
194
+ range.last.downto(range.first) do |element|
195
+ options[element] = element
196
+ end
197
+ else
198
+ # bottom up
199
+ range.last.upto(range.first) do |element|
200
+ options[element] = element
201
+ end
199
202
  end
203
+
204
+ select_for(param, options, attributes)
200
205
  end
201
206
 
202
- select_for(param, options, attributes)
203
- end
207
+ def days_for(param, attributes = {})
208
+ options = { 'Day' => '' }
204
209
 
205
- def days_for(param, attributes = {})
206
- options = { 'Day' => '' }
210
+ (1..31).each do |day|
211
+ options[day] = day
212
+ end
207
213
 
208
- (1..31).each do |day|
209
- options[day] = day
214
+ select_for(param, options, attributes)
210
215
  end
216
+ end
211
217
 
212
- select_for(param, options, attributes)
218
+ # settings and such
219
+ def self.registered(app)
220
+ app.helpers TagHelpers::HelperMethods
221
+
222
+ app.set :link_to_current_class, 'current'
223
+ app.set :years_range, 1940..Date.today.year
224
+ app.set :months_hash, {
225
+ 'Month' => '',
226
+ '1 - January' => '01',
227
+ '2 - February' => '02',
228
+ '3 - March' => '03',
229
+ '4 - April' => '04',
230
+ '5 - May' => '05',
231
+ '6 - June' => '06',
232
+ '7 - July' => '07',
233
+ '8 - August' => '08',
234
+ '9 - September' => '09',
235
+ '10 - October' => '10',
236
+ '11 - November' => '11',
237
+ '12 - December' => '12'
238
+ }
213
239
  end
214
240
  end
215
241
 
216
- helpers TagHelpers
242
+ register TagHelpers
217
243
  end
@@ -1,5 +1,5 @@
1
1
  module Sinatra
2
2
  module TagHelpers
3
- VERSION = "0.0.10"
3
+ VERSION = "0.0.11"
4
4
  end
5
5
  end
@@ -16,9 +16,9 @@ Gem::Specification.new do |spec|
16
16
  spec.require_paths = ['lib']
17
17
  spec.license = 'MIT'
18
18
 
19
- spec.add_dependency 'sinatra', '~> 1.4.0'
19
+ spec.add_dependency 'sinatra', '>= 1.4.0'
20
20
  spec.add_dependency 'escape_utils', '>= 0.3.0'
21
21
 
22
- spec.add_development_dependency 'bundler', '~> 1.3'
22
+ spec.add_development_dependency 'bundler'
23
23
  spec.add_development_dependency 'rake'
24
24
  end
metadata CHANGED
@@ -1,27 +1,27 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sinatra-tag-helpers
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.10
4
+ version: 0.0.11
5
5
  platform: ruby
6
6
  authors:
7
7
  - Evan Lecklider
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-02-10 00:00:00.000000000 Z
11
+ date: 2014-02-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sinatra
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - ! '>='
18
18
  - !ruby/object:Gem::Version
19
19
  version: 1.4.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ~>
24
+ - - ! '>='
25
25
  - !ruby/object:Gem::Version
26
26
  version: 1.4.0
27
27
  - !ruby/object:Gem::Dependency
@@ -42,16 +42,16 @@ dependencies:
42
42
  name: bundler
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ~>
45
+ - - ! '>='
46
46
  - !ruby/object:Gem::Version
47
- version: '1.3'
47
+ version: '0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ~>
52
+ - - ! '>='
53
53
  - !ruby/object:Gem::Version
54
- version: '1.3'
54
+ version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rake
57
57
  requirement: !ruby/object:Gem::Requirement