carmen-rails 1.0.0.beta3 → 1.0.0
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.
- data/README.md +10 -0
- data/lib/carmen/rails/action_view/form_helper.rb +27 -13
- data/lib/carmen/rails/version.rb +1 -1
- data/spec/carmen/action_view/helpers/form_helper_spec.rb +89 -4
- metadata +12 -12
data/README.md
CHANGED
@@ -50,3 +50,13 @@ carmen-rails [have been thoroughly TomDoc'ed](https://github.com/jim/carmen-rail
|
|
50
50
|
|
51
51
|
There is a [live demo app](http://carmen-rails-demo.herokuapp.com) that shows
|
52
52
|
carmen-rails in action, and includes a [step-by-step setup guide](https://github.com/jim/carmen-demo-app#readme).
|
53
|
+
|
54
|
+
## Configuration
|
55
|
+
|
56
|
+
Using this library will automatically set Carmen to use [Rails' built-in I18n functionality](http://guides.rubyonrails.org/i18n.html). This means that changing
|
57
|
+
some configuration should be done through Rails and not Carmen. For example, adding paths for additional locale files
|
58
|
+
should be done inside `config/application.rb`:
|
59
|
+
|
60
|
+
``` ruby
|
61
|
+
config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]
|
62
|
+
```
|
@@ -45,9 +45,24 @@ module ActionView
|
|
45
45
|
#
|
46
46
|
# country_select(@object, :region, {priority: ['US', 'CA']}, class: 'region')
|
47
47
|
#
|
48
|
+
# Note that in order to preserve compatibility with various existing
|
49
|
+
# libraries, an alternative API is supported but not recommended:
|
50
|
+
#
|
51
|
+
# country_select(@object, :region, ['US', 'CA'], class: region)
|
52
|
+
#
|
48
53
|
# Returns an `html_safe` string containing the HTML for a select element.
|
49
|
-
def country_select(object, method,
|
50
|
-
|
54
|
+
def country_select(object, method, *args)
|
55
|
+
|
56
|
+
# These contortions are to provide API-compatibility
|
57
|
+
priority_countries = args.shift if args.first.is_a?(Array)
|
58
|
+
options, html_options = args
|
59
|
+
|
60
|
+
options ||= {}
|
61
|
+
options[:priority] = priority_countries if priority_countries
|
62
|
+
|
63
|
+
html_options ||= {}
|
64
|
+
|
65
|
+
tag = InstanceTag.new(object, method, self)
|
51
66
|
tag.to_region_select_tag(Carmen::World.instance, options, html_options)
|
52
67
|
end
|
53
68
|
|
@@ -85,7 +100,9 @@ module ActionView
|
|
85
100
|
end
|
86
101
|
|
87
102
|
main_options = regions.map { |r| [r.name, r.code] }
|
88
|
-
main_options.sort!{|a, b| a.first.
|
103
|
+
main_options.sort!{|a, b| a.first.to_s <=> b.first.to_s}
|
104
|
+
main_options.unshift [options['prompt'], ''] if options['prompt']
|
105
|
+
|
89
106
|
region_options += options_for_select(main_options, selected)
|
90
107
|
region_options.html_safe
|
91
108
|
end
|
@@ -133,10 +150,9 @@ module ActionView
|
|
133
150
|
def subregion_select_tag(name, value, parent_region_or_code, options = {}, html_options = {})
|
134
151
|
options.stringify_keys!
|
135
152
|
parent_region = determine_parent(parent_region_or_code)
|
136
|
-
|
137
|
-
opts = region_options_for_select(parent_region.subregions, value, :priority => priority_regions)
|
153
|
+
opts = region_options_for_select(parent_region.subregions, value, options)
|
138
154
|
html_options = {"name" => name,
|
139
|
-
"id" => sanitize_to_id(name)}.update(
|
155
|
+
"id" => sanitize_to_id(name)}.update(html_options.stringify_keys)
|
140
156
|
content_tag(:select, opts, html_options)
|
141
157
|
end
|
142
158
|
|
@@ -157,7 +173,7 @@ module ActionView
|
|
157
173
|
end
|
158
174
|
|
159
175
|
class InstanceTag
|
160
|
-
def to_region_select_tag(parent_region, options, html_options)
|
176
|
+
def to_region_select_tag(parent_region, options = {}, html_options = {})
|
161
177
|
html_options = html_options.stringify_keys
|
162
178
|
add_default_name_and_id(html_options)
|
163
179
|
priority_regions = options[:priority] || []
|
@@ -173,9 +189,8 @@ module ActionView
|
|
173
189
|
# web form.
|
174
190
|
#
|
175
191
|
# See `FormOptionsHelper::country_select` for more information.
|
176
|
-
def country_select(method,
|
177
|
-
@template.country_select(@object_name, method,
|
178
|
-
options.merge(:object => @object), html_options)
|
192
|
+
def country_select(method, *args)
|
193
|
+
@template.country_select(@object_name, method, *args)
|
179
194
|
end
|
180
195
|
|
181
196
|
# Generate select and subregion option tags with the provided name. A
|
@@ -183,9 +198,8 @@ module ActionView
|
|
183
198
|
# a given country.
|
184
199
|
#
|
185
200
|
# See `FormOptionsHelper::subregion_select` for more information.
|
186
|
-
def subregion_select(method, parent_region_or_code,
|
187
|
-
@template.subregion_select(@object_name, method, parent_region_or_code,
|
188
|
-
options.merge(:object => @object), html_options)
|
201
|
+
def subregion_select(method, parent_region_or_code, *args)
|
202
|
+
@template.subregion_select(@object_name, method, parent_region_or_code, *args)
|
189
203
|
end
|
190
204
|
end
|
191
205
|
|
data/lib/carmen/rails/version.rb
CHANGED
@@ -46,13 +46,41 @@ class CarmenViewHelperTest < MiniTest::Unit::TestCase
|
|
46
46
|
assert_equal_markup(expected, html)
|
47
47
|
end
|
48
48
|
|
49
|
+
def test_country_select_tag_with_prompt
|
50
|
+
html = country_select_tag('attribute_name', nil, :prompt => 'Please Select')
|
51
|
+
expected = <<-HTML
|
52
|
+
<select id="attribute_name" name="attribute_name">
|
53
|
+
<option value="">Please Select</option>
|
54
|
+
<option value="ES">Eastasia</option>
|
55
|
+
<option value="EU">Eurasia</option>
|
56
|
+
<option value="OC">Oceania</option>
|
57
|
+
</select>
|
58
|
+
HTML
|
59
|
+
|
60
|
+
assert_equal_markup(expected, html)
|
61
|
+
end
|
49
62
|
def test_country_tag_selected_value
|
50
63
|
@html = country_select_tag(:country_code, 'OC')
|
51
64
|
assert_select('option[selected="selected"][value="OC"]')
|
52
65
|
end
|
53
66
|
|
54
67
|
def test_priority_country_select
|
55
|
-
html = country_select(@object, :country_code,
|
68
|
+
html = country_select(@object, :country_code, :priority => ['ES'])
|
69
|
+
expected = <<-HTML
|
70
|
+
<select id="object_country_code" name="object[country_code]">
|
71
|
+
<option value="ES">Eastasia</option>
|
72
|
+
<option disabled>-------------</option>
|
73
|
+
<option value="ES">Eastasia</option>
|
74
|
+
<option value="EU">Eurasia</option>
|
75
|
+
<option value="OC">Oceania</option>
|
76
|
+
</select>
|
77
|
+
HTML
|
78
|
+
|
79
|
+
assert_equal_markup(expected, html)
|
80
|
+
end
|
81
|
+
|
82
|
+
def test_priority_country_select_deprecated_api
|
83
|
+
html = country_select(@object, :country_code, ['ES'], {})
|
56
84
|
expected = <<-HTML
|
57
85
|
<select id="object_country_code" name="object[country_code]">
|
58
86
|
<option value="ES">Eastasia</option>
|
@@ -112,7 +140,7 @@ class CarmenViewHelperTest < MiniTest::Unit::TestCase
|
|
112
140
|
assert_select('option[selected="selected"][value="AO"]')
|
113
141
|
end
|
114
142
|
|
115
|
-
def
|
143
|
+
def test_basic_subregion_select_tag
|
116
144
|
oceania = Carmen::Country.coded('OC')
|
117
145
|
expected = <<-HTML
|
118
146
|
<select id="subregion_code" name="subregion_code">
|
@@ -125,6 +153,35 @@ class CarmenViewHelperTest < MiniTest::Unit::TestCase
|
|
125
153
|
assert_equal_markup(expected, html)
|
126
154
|
end
|
127
155
|
|
156
|
+
def test_subregion_select_tag_with_priority
|
157
|
+
oceania = Carmen::Country.coded('OC')
|
158
|
+
expected = <<-HTML
|
159
|
+
<select id="subregion_code" name="subregion_code">
|
160
|
+
<option value="AO">Airstrip One</option>
|
161
|
+
<option disabled>-------------</option>
|
162
|
+
<option value="AO">Airstrip One</option>
|
163
|
+
</select>
|
164
|
+
HTML
|
165
|
+
|
166
|
+
html = subregion_select_tag(:subregion_code, nil, oceania, :priority => ['AO'])
|
167
|
+
|
168
|
+
assert_equal_markup(expected, html)
|
169
|
+
end
|
170
|
+
|
171
|
+
def test_subregion_select_tag_with_prompt
|
172
|
+
oceania = Carmen::Country.coded('OC')
|
173
|
+
expected = <<-HTML
|
174
|
+
<select id="subregion_code" name="subregion_code">
|
175
|
+
<option value="">Please select</option>
|
176
|
+
<option value="AO">Airstrip One</option>
|
177
|
+
</select>
|
178
|
+
HTML
|
179
|
+
|
180
|
+
html = subregion_select_tag(:subregion_code, nil, oceania, :prompt => 'Please select')
|
181
|
+
|
182
|
+
assert_equal_markup(expected, html)
|
183
|
+
end
|
184
|
+
|
128
185
|
def test_region_options_for_select
|
129
186
|
regions = Carmen::Country.all
|
130
187
|
expected = <<-HTML
|
@@ -150,7 +207,35 @@ class CarmenViewHelperTest < MiniTest::Unit::TestCase
|
|
150
207
|
assert_equal_markup(expected, html)
|
151
208
|
end
|
152
209
|
|
153
|
-
def
|
154
|
-
|
210
|
+
def test_form_builder_country_select
|
211
|
+
form = ActionView::Helpers::FormBuilder.new(:object, @object, self, {}, lambda{})
|
212
|
+
|
213
|
+
html = form.country_select('attribute_name')
|
214
|
+
expected = <<-HTML
|
215
|
+
<select id="object_attribute_name" name="object[attribute_name]">
|
216
|
+
<option value="ES">Eastasia</option>
|
217
|
+
<option value="EU">Eurasia</option>
|
218
|
+
<option value="OC">Oceania</option>
|
219
|
+
</select>
|
220
|
+
HTML
|
221
|
+
|
222
|
+
assert_equal_markup(expected, html)
|
223
|
+
end
|
224
|
+
|
225
|
+
def test_form_builder_country_select_deprecated_api
|
226
|
+
form = ActionView::Helpers::FormBuilder.new(:object, @object, self, {}, lambda{})
|
227
|
+
|
228
|
+
html = form.country_select('attribute_name', ['ES'])
|
229
|
+
expected = <<-HTML
|
230
|
+
<select id="object_attribute_name" name="object[attribute_name]">
|
231
|
+
<option value="ES">Eastasia</option>
|
232
|
+
<option disabled>-------------</option>
|
233
|
+
<option value="ES">Eastasia</option>
|
234
|
+
<option value="EU">Eurasia</option>
|
235
|
+
<option value="OC">Oceania</option>
|
236
|
+
</select>
|
237
|
+
HTML
|
238
|
+
|
239
|
+
assert_equal_markup(expected, html)
|
155
240
|
end
|
156
241
|
end
|
metadata
CHANGED
@@ -1,19 +1,19 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: carmen-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.0
|
5
|
-
prerelease:
|
4
|
+
version: 1.0.0
|
5
|
+
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Jim Benton
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2013-04-20 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rails
|
16
|
-
requirement: &
|
16
|
+
requirement: &2160706040 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *2160706040
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: carmen
|
27
|
-
requirement: &
|
27
|
+
requirement: &2160704840 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ~>
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: 1.0.0.beta2
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *2160704840
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: minitest
|
38
|
-
requirement: &
|
38
|
+
requirement: &2160677320 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,7 +43,7 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *2160677320
|
47
47
|
description: Provides country_select and subregion_select form helpers.
|
48
48
|
email:
|
49
49
|
- jim@autonomousmachine.com
|
@@ -75,12 +75,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
75
75
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
76
76
|
none: false
|
77
77
|
requirements:
|
78
|
-
- - ! '
|
78
|
+
- - ! '>='
|
79
79
|
- !ruby/object:Gem::Version
|
80
|
-
version:
|
80
|
+
version: '0'
|
81
81
|
requirements: []
|
82
82
|
rubyforge_project:
|
83
|
-
rubygems_version: 1.8.
|
83
|
+
rubygems_version: 1.8.15
|
84
84
|
signing_key:
|
85
85
|
specification_version: 3
|
86
86
|
summary: Rails adapter for Carmen
|