acts_as_select 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.
- data/README.md +19 -10
- data/acts_as_select.gemspec +1 -1
- data/lib/active_record/acts/select.rb +1 -1
- data/test/select_test.rb +48 -28
- metadata +2 -2
data/README.md
CHANGED
@@ -35,7 +35,7 @@ This makes all columns database accessible. You can return selectable options by
|
|
35
35
|
obtain a list of the contents of a column by calling <column_name>_list
|
36
36
|
|
37
37
|
### Options
|
38
|
-
acts_as_select takes two options to allow for finer grained control over which methods are created
|
38
|
+
acts_as_select takes two options to allow for finer grained control over which methods are created and allows for scoping to restrict or change order.
|
39
39
|
|
40
40
|
:include => [column_list]
|
41
41
|
|
@@ -55,32 +55,41 @@ names in both lists, these columns are excluded, regardless of the order of the
|
|
55
55
|
|
56
56
|
With this database table
|
57
57
|
|
58
|
-
| id | name |
|
59
|
-
|
60
|
-
| 1 | Bob | bob@example.com
|
61
|
-
| 2 | Jen | jen@example.com
|
58
|
+
| id | name | email |
|
59
|
+
|----|------|------------------|
|
60
|
+
| 1 | Bob | bob@example.com |
|
61
|
+
| 2 | Jen | jen@example.com |
|
62
|
+
| 3 | april | sheri@example.com|
|
62
63
|
|
63
64
|
And this model
|
64
65
|
|
65
66
|
class Person < ActiveRecord::Base
|
66
|
-
acts_as_select :include=>['name', 'email'], :exclude=>
|
67
|
+
acts_as_select :include=>['name', 'email'], :exclude=>'id'
|
67
68
|
end
|
68
69
|
|
69
70
|
This would create two select methods, `name_select` and `email_select`,
|
70
71
|
and three list methods `name_list` and `email_list`
|
71
72
|
|
72
73
|
Person.name_select
|
73
|
-
#=> [["Bob", 1], ["Jen", 2]]
|
74
|
+
#=> [["Bob", 1], ["Jen", 2], ["april", 3]]
|
74
75
|
Person.email_select
|
75
|
-
#=> [["bob@example.com", 1], ["jen@example.com", 2]]
|
76
|
+
#=> [["bob@example.com", 1], ["jen@example.com", 2], ["april@example.com",3]]
|
76
77
|
|
77
78
|
This is the right format for use in a select tag and friends
|
78
79
|
|
79
80
|
select :order, :customer, Person.name_select
|
80
81
|
|
81
|
-
|
82
|
+
If you want to change the sorting of the table, based on a non-chosen field (for example), you can use
|
83
|
+
arel_scopes to do so. The same `email_select` and `email_list` can have their contents sorted by the
|
84
|
+
lowercase corrected name (for example)
|
82
85
|
|
83
|
-
Person.
|
86
|
+
Person.order('lower(name) asc').email_select
|
87
|
+
#=> [["sheri@example.com", 3], ["bob@example.com", 1], ["jen@example.com", 2]]
|
88
|
+
|
89
|
+
You can combine it with any other named_scopes, but as it maps to an array for use
|
90
|
+
in a select dropdown, it will need to be the last method on the chain.
|
91
|
+
|
92
|
+
Person.where(...).group(...).order(...).name_select
|
84
93
|
|
85
94
|
## Contributing
|
86
95
|
|
data/acts_as_select.gemspec
CHANGED
@@ -24,7 +24,7 @@ Gem::Specification.new do |spec|
|
|
24
24
|
spec.add_development_dependency 'sqlite3'
|
25
25
|
if RUBY_VERSION >= '1.9'
|
26
26
|
spec.add_development_dependency 'minitest'
|
27
|
-
spec.add_development_dependency '
|
27
|
+
spec.add_development_dependency 'activerecord'
|
28
28
|
else
|
29
29
|
spec.add_development_dependency 'test-unit'
|
30
30
|
spec.add_development_dependency 'activerecord'
|
data/test/select_test.rb
CHANGED
@@ -1,14 +1,16 @@
|
|
1
|
+
$:.unshift File.dirname(__FILE__) + '/../lib'
|
1
2
|
require 'rubygems'
|
2
3
|
if RUBY_VERSION >= '1.9'
|
4
|
+
gem 'minitest'
|
3
5
|
require 'minitest/autorun'
|
4
6
|
require 'active_record'
|
7
|
+
require_relative(File.dirname(__FILE__) + '/../lib/acts_as_select')
|
5
8
|
else
|
6
9
|
require 'test/unit'
|
7
10
|
require 'activerecord'
|
8
11
|
require 'sqlite3'
|
12
|
+
require File.dirname(__FILE__) + '/../acts_as_select'
|
9
13
|
end
|
10
|
-
$:.unshift File.dirname(__FILE__) + '/../lib'
|
11
|
-
require File.dirname(__FILE__) + '/../acts_as_select'
|
12
14
|
|
13
15
|
ActiveRecord::Base.establish_connection(:adapter => "sqlite3", :database => ":memory:")
|
14
16
|
|
@@ -84,6 +86,18 @@ class SelectTest < (begin MiniTest::Test rescue Test::Unit::TestCase end)
|
|
84
86
|
]
|
85
87
|
end
|
86
88
|
|
89
|
+
def selection_names_sorted
|
90
|
+
[
|
91
|
+
['fifth', 5],
|
92
|
+
['first', 1],
|
93
|
+
['forth', 4],
|
94
|
+
['second', 2],
|
95
|
+
['sixth', 6],
|
96
|
+
['third', 3]
|
97
|
+
]
|
98
|
+
end
|
99
|
+
|
100
|
+
|
87
101
|
def selection_descriptions
|
88
102
|
[
|
89
103
|
['First field', 1],
|
@@ -108,14 +122,14 @@ class SelectTest < (begin MiniTest::Test rescue Test::Unit::TestCase end)
|
|
108
122
|
|
109
123
|
def test_all_names_selection
|
110
124
|
SelectAll.acts_as_select
|
111
|
-
assert_equal(SelectAll.id_select
|
112
|
-
assert_equal(
|
113
|
-
assert_equal(SelectAll.name_select
|
114
|
-
assert_equal(
|
115
|
-
assert_equal(SelectAll.description_select
|
116
|
-
assert_equal(
|
117
|
-
assert_equal(SelectAll.excluded_string_select
|
118
|
-
assert_equal(
|
125
|
+
assert_equal(selection_ids,SelectAll.id_select)
|
126
|
+
assert_equal(selection_ids.map(&:first),SelectAll.id_list)
|
127
|
+
assert_equal(selection_names,SelectAll.name_select)
|
128
|
+
assert_equal(selection_names.map(&:first),SelectAll.name_list)
|
129
|
+
assert_equal(selection_descriptions,SelectAll.description_select)
|
130
|
+
assert_equal(selection_descriptions.map(&:first),SelectAll.description_list)
|
131
|
+
assert_equal(selection_excluded_strings,SelectAll.excluded_string_select)
|
132
|
+
assert_equal(selection_excluded_strings.map(&:first),SelectAll.excluded_string_list)
|
119
133
|
end
|
120
134
|
|
121
135
|
def test_incorrect_inclusion
|
@@ -127,8 +141,8 @@ class SelectTest < (begin MiniTest::Test rescue Test::Unit::TestCase end)
|
|
127
141
|
SelectIncludeSingle.acts_as_select :include => 'name'
|
128
142
|
assert_raises(NoMethodError) { SelectIncludeSingle.id_select }
|
129
143
|
assert_raises(NoMethodError) { SelectIncludeSingle.id_list }
|
130
|
-
assert_equal(
|
131
|
-
assert_equal(
|
144
|
+
assert_equal(selection_names.map { |x| [x[0], x[1]+6] },SelectIncludeSingle.name_select)
|
145
|
+
assert_equal(selection_names.map(&:first),SelectIncludeSingle.name_list)
|
132
146
|
assert_raises(NoMethodError) { SelectIncludeSingle.description_select }
|
133
147
|
assert_raises(NoMethodError) { SelectIncludeSingle.description_list }
|
134
148
|
assert_raises(NoMethodError) { SelectIncludeSingle.excluded_string_select }
|
@@ -139,32 +153,32 @@ class SelectTest < (begin MiniTest::Test rescue Test::Unit::TestCase end)
|
|
139
153
|
SelectIncludeMulti.acts_as_select :include => %w(name description)
|
140
154
|
assert_raises(NoMethodError) { SelectIncludeMulti.id_select }
|
141
155
|
assert_raises(NoMethodError) { SelectIncludeMulti.id_list }
|
142
|
-
assert_equal(
|
143
|
-
assert_equal(
|
144
|
-
assert_equal(
|
145
|
-
assert_equal(
|
156
|
+
assert_equal(selection_names.map { |x| [x[0], x[1]+12] },SelectIncludeMulti.name_select)
|
157
|
+
assert_equal(selection_names.map(&:first), SelectIncludeMulti.name_list)
|
158
|
+
assert_equal(selection_descriptions.map { |x| [x[0], x[1]+12] },SelectIncludeMulti.description_select)
|
159
|
+
assert_equal(selection_descriptions.map(&:first),SelectIncludeMulti.description_list)
|
146
160
|
assert_raises(NoMethodError) { SelectIncludeMulti.excluded_string_select }
|
147
161
|
assert_raises(NoMethodError) { SelectIncludeMulti.excluded_string_list }
|
148
162
|
end
|
149
163
|
|
150
164
|
def test_single_field_exclusion
|
151
165
|
SelectExcludeSingle.acts_as_select :exclude => 'excluded_string'
|
152
|
-
assert_equal(
|
153
|
-
assert_equal(
|
154
|
-
assert_equal(
|
155
|
-
assert_equal(
|
156
|
-
assert_equal(
|
157
|
-
assert_equal(
|
166
|
+
assert_equal(selection_ids.map { |x| [x[0]+18, x[1]+18] },SelectExcludeSingle.id_select)
|
167
|
+
assert_equal(selection_ids.map { |x| x[0]+18 },SelectExcludeSingle.id_list)
|
168
|
+
assert_equal(selection_names.map { |x| [x[0], x[1]+18] },SelectExcludeSingle.name_select)
|
169
|
+
assert_equal(selection_names.map(&:first),SelectExcludeSingle.name_list)
|
170
|
+
assert_equal(selection_descriptions.map { |x| [x[0], x[1]+18] },SelectExcludeSingle.description_select)
|
171
|
+
assert_equal(selection_descriptions.map(&:first),SelectExcludeSingle.description_list)
|
158
172
|
assert_raises(NoMethodError) { SelectExcludeSingle.excluded_string_select }
|
159
173
|
assert_raises(NoMethodError) { SelectExcludeSingle.excluded_string_list }
|
160
174
|
end
|
161
175
|
|
162
176
|
def test_multi_field_exclusion
|
163
177
|
SelectExcludeMulti.acts_as_select :exclude => %w(description excluded_string)
|
164
|
-
assert_equal(
|
165
|
-
assert_equal(
|
166
|
-
assert_equal(
|
167
|
-
assert_equal(
|
178
|
+
assert_equal(selection_ids.map { |x| [x[0]+24, x[1]+24] },SelectExcludeMulti.id_select)
|
179
|
+
assert_equal(selection_ids.map { |x| x[0]+24 },SelectExcludeMulti.id_list)
|
180
|
+
assert_equal(selection_names.map { |x| [x[0], x[1]+24] },SelectExcludeMulti.name_select)
|
181
|
+
assert_equal(selection_names.map(&:first),SelectExcludeMulti.name_list)
|
168
182
|
assert_raises(NoMethodError) { SelectExcludeMulti.description_select }
|
169
183
|
assert_raises(NoMethodError) { SelectExcludeMulti.description_list }
|
170
184
|
assert_raises(NoMethodError) { SelectExcludeMulti.excluded_string_select }
|
@@ -175,12 +189,18 @@ class SelectTest < (begin MiniTest::Test rescue Test::Unit::TestCase end)
|
|
175
189
|
SelectedIncludeExclude.acts_as_select :include => %w(name description), :exclude => %w(description excluded_string)
|
176
190
|
assert_raises(NoMethodError) { SelectedIncludeExclude.id_select }
|
177
191
|
assert_raises(NoMethodError) { SelectedIncludeExclude.id_list }
|
178
|
-
assert_equal(
|
179
|
-
assert_equal(
|
192
|
+
assert_equal(selection_names.map { |x| [x[0], x[1]+30] },SelectedIncludeExclude.name_select)
|
193
|
+
assert_equal(selection_names.map(&:first),SelectedIncludeExclude.name_list)
|
180
194
|
assert_raises(NoMethodError) { SelectedIncludeExclude.description_select }
|
181
195
|
assert_raises(NoMethodError) { SelectedIncludeExclude.description_list }
|
182
196
|
assert_raises(NoMethodError) { SelectedIncludeExclude.excluded_string_select }
|
183
197
|
assert_raises(NoMethodError) { SelectedIncludeExclude.excluded_string_list }
|
184
198
|
end
|
199
|
+
|
200
|
+
def test_sorted_fields
|
201
|
+
SelectIncludeSingle.acts_as_select :include => 'name'
|
202
|
+
assert_equal(selection_names_sorted.map { |x| [x[0], x[1]+6] },SelectIncludeSingle.order('name asc').name_select)
|
203
|
+
assert_equal(selection_names_sorted.map(&:first), SelectIncludeSingle.order('name asc').name_list)
|
204
|
+
end
|
185
205
|
end
|
186
206
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: acts_as_select
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.5
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -76,7 +76,7 @@ dependencies:
|
|
76
76
|
- !ruby/object:Gem::Version
|
77
77
|
version: '0'
|
78
78
|
- !ruby/object:Gem::Dependency
|
79
|
-
name:
|
79
|
+
name: activerecord
|
80
80
|
requirement: !ruby/object:Gem::Requirement
|
81
81
|
none: false
|
82
82
|
requirements:
|