acts_as_select 0.0.3 → 0.1.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.
- checksums.yaml +7 -0
- data/README.md +61 -10
- data/Rakefile +12 -1
- data/acts_as_select.gemspec +7 -3
- data/init.rb +2 -0
- data/lib/active_record/acts/select.rb +57 -0
- data/test/select_test.rb +186 -0
- metadata +93 -70
- data/lib/acts_as_select.rb +0 -6
- data/lib/acts_as_select/selection.rb +0 -28
- data/lib/acts_as_select/version.rb +0 -3
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: e114efe5884981553cae5f2216196f593c83ebfb
|
4
|
+
data.tar.gz: 4614fd67e72e492b3e3bec4427a82cdfebd02fe7
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 6c5688553ed5ce7bdee580b0246ebc0e304f022029663497519cf728208bc2c06e3963084beec32bc2af7f33868cfb2de49c4a43cd55bad6b735eb0c78c37fcc
|
7
|
+
data.tar.gz: c5c5a99e8a1a59a2241eee8d3f810473a8dbee979f6c9e3ff899a69bbc546422b6a5c85a6087b3b7cf3f12a6ee09e8be8c86eaec747f937eae2f7a82cea6d565
|
data/README.md
CHANGED
@@ -1,7 +1,14 @@
|
|
1
1
|
# ActsAsSelect
|
2
2
|
|
3
|
-
|
4
|
-
|
3
|
+
Acts_as_select allows you to automatically use the columns from an activerecord reference table with a
|
4
|
+
descriptive name and primary key ids
|
5
|
+
|
6
|
+
It generates <column_name>_select methods for each permitted column, which maps that column and its primary
|
7
|
+
key to a 2d array suitable for use in an option_select or as a container for options_for_select.
|
8
|
+
|
9
|
+
Additionally, it can generate a list of items using <column_name>_list methods.
|
10
|
+
|
11
|
+
All of these options can be used to terminate scopes or other database methods.
|
5
12
|
|
6
13
|
## Installation
|
7
14
|
|
@@ -18,18 +25,62 @@ Or install it yourself as:
|
|
18
25
|
$ gem install acts_as_select
|
19
26
|
|
20
27
|
## Usage
|
28
|
+
Include acts_as_select in your model file.
|
29
|
+
|
30
|
+
class Person < ActiveRecord::Base
|
31
|
+
acts_as_select
|
32
|
+
end
|
33
|
+
|
34
|
+
This makes all columns database accessible. You can return selectable options by calling <column_name>_select, or
|
35
|
+
obtain a list of the contents of a column by calling <column_name>_list
|
36
|
+
|
37
|
+
### Options
|
38
|
+
acts_as_select takes two options to allow for finer grained control over which methods are created:
|
39
|
+
|
40
|
+
:include => [column_list]
|
41
|
+
|
42
|
+
This specifies which columns have _select and _list methods created for them. All other columns are excluded
|
43
|
+
Note: if you include a column name that doesn't exist, it will raise a NoMethodError exception when you try to use it.
|
44
|
+
|
45
|
+
:exclude => [column_list]
|
46
|
+
|
47
|
+
This specifies which columns are excluded from having the _select and _list methods created.
|
48
|
+
|
49
|
+
:include => [column_list_1], :exclude => [column_list_2]
|
50
|
+
|
51
|
+
When both options are supplied, the exclusion happens after the inclusion. That is, if there are overlapping column
|
52
|
+
names in both lists, these columns are excluded, regardless of the order of the options.
|
53
|
+
|
54
|
+
### Example
|
55
|
+
|
56
|
+
With this database table
|
57
|
+
|
58
|
+
| id | name | email |
|
59
|
+
|----|------|-----------------|
|
60
|
+
| 1 | Bob | bob@example.com |
|
61
|
+
| 2 | Jen | jen@example.com |
|
62
|
+
|
63
|
+
And this model
|
64
|
+
|
65
|
+
class Person < ActiveRecord::Base
|
66
|
+
acts_as_select :include=>['name', 'email'], :exclude=>['id']
|
67
|
+
end
|
68
|
+
|
69
|
+
This would create two select methods, `name_select` and `email_select`,
|
70
|
+
and three list methods `name_list` and `email_list`
|
71
|
+
|
72
|
+
Person.name_select
|
73
|
+
#=> [["Bob", 1], ["Jen", 2]]
|
74
|
+
Person.email_select
|
75
|
+
#=> [["bob@example.com", 1], ["jen@example.com", 2]]
|
21
76
|
|
22
|
-
|
77
|
+
This is the right format for use in a select tag and friends
|
23
78
|
|
24
|
-
|
25
|
-
class Dummy < ActiveRecord::Base
|
26
|
-
acts_as_select
|
27
|
-
end
|
79
|
+
select :order, :customer, Person.name_select
|
28
80
|
|
29
|
-
|
30
|
-
the methods: select_description, select_name
|
81
|
+
You can combine it with scopes
|
31
82
|
|
32
|
-
|
83
|
+
Person.where(...).name_select
|
33
84
|
|
34
85
|
## Contributing
|
35
86
|
|
data/Rakefile
CHANGED
@@ -1 +1,12 @@
|
|
1
|
-
require
|
1
|
+
require 'rake'
|
2
|
+
require 'rake/testtask'
|
3
|
+
|
4
|
+
desc 'Default: run all tests.'
|
5
|
+
task :default=>:test
|
6
|
+
|
7
|
+
desc 'Test acts_as_select plugin'
|
8
|
+
Rake::TestTask.new(:test) do |t|
|
9
|
+
t.libs << 'lib'
|
10
|
+
t.pattern = 'test/*_test.rb'
|
11
|
+
t.verbose = true
|
12
|
+
end
|
data/acts_as_select.gemspec
CHANGED
@@ -1,14 +1,15 @@
|
|
1
1
|
# coding: utf-8
|
2
2
|
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
require File.dirname(__FILE__) + '/lib/active_record/acts/select'
|
4
|
+
|
3
5
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
-
require 'acts_as_select/version'
|
5
6
|
|
6
7
|
Gem::Specification.new do |spec|
|
7
8
|
spec.name = 'acts_as_select'
|
8
|
-
spec.version =
|
9
|
+
spec.version = ActiveRecord::Acts::Select::VERSION
|
9
10
|
spec.authors = ['Paul McKibbin']
|
10
11
|
spec.email = ['pmckibbin@gmail.com']
|
11
|
-
spec.description = %q{Creation of automatic selection suitable for drop downs from
|
12
|
+
spec.description = %q{Creation of automatic selection suitable for drop downs from column fields in an ActiveRecord table}
|
12
13
|
spec.summary = %q{Automated selection for Activerecord Tables}
|
13
14
|
spec.homepage = 'http://blackrat.org'
|
14
15
|
spec.license = 'MIT'
|
@@ -20,4 +21,7 @@ Gem::Specification.new do |spec|
|
|
20
21
|
|
21
22
|
spec.add_development_dependency "bundler", "~> 1.3"
|
22
23
|
spec.add_development_dependency "rake"
|
24
|
+
spec.add_development_dependency 'minitest'
|
25
|
+
spec.add_development_dependency 'test-unit'
|
26
|
+
spec.add_development_dependency 'activerecord'
|
23
27
|
end
|
data/init.rb
ADDED
@@ -0,0 +1,57 @@
|
|
1
|
+
module ActiveRecord
|
2
|
+
module Acts
|
3
|
+
module Select
|
4
|
+
VERSION="0.1.0"
|
5
|
+
class << self
|
6
|
+
def included(base)
|
7
|
+
base.instance_eval do
|
8
|
+
extend ClassMethods
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
#Acts_as_select allows you to automatically use the columns from an activerecord reference table with a
|
14
|
+
#descriptive name and primary key ids
|
15
|
+
#It generates XXXX_select method for each permitted column, which maps that column and its primary key
|
16
|
+
#to an array suitable for use in an option_select or as a container for options_for_select.
|
17
|
+
|
18
|
+
module ClassMethods
|
19
|
+
private
|
20
|
+
def default_opts
|
21
|
+
{
|
22
|
+
:include=>column_names,
|
23
|
+
:exclude=>[]
|
24
|
+
}
|
25
|
+
end
|
26
|
+
|
27
|
+
def allowed_columns(*opts)
|
28
|
+
opts=!opts.empty? && opts.first.is_a?(Hash) ? default_opts.merge(opts.first) : default_opts
|
29
|
+
opts[:include]=[opts[:include]] if opts[:include].is_a?(String)
|
30
|
+
opts[:exclude]=[opts[:exclude]] if opts[:exclude].is_a?(String)
|
31
|
+
column_names & (opts[:include]-opts[:exclude])
|
32
|
+
end
|
33
|
+
|
34
|
+
public
|
35
|
+
def acts_as_select(*opts)
|
36
|
+
allowed_columns(*opts).each do |field|
|
37
|
+
(class << self;self;end).class_eval do
|
38
|
+
define_method "#{field}_select" do
|
39
|
+
if respond_to?(:scoped)
|
40
|
+
scoped(:select=>["#{field}, #{primary_key}"])
|
41
|
+
else
|
42
|
+
select(field,primary_key)
|
43
|
+
end.map{|x| [x.send(field),x.send(primary_key)]}
|
44
|
+
end
|
45
|
+
define_method "#{field}_list" do
|
46
|
+
(respond_to?(:scoped) ? scoped(:select=>[field]) : select(field)).map{|x| x.send(field)}
|
47
|
+
end
|
48
|
+
define_method "#{field}_objects" do
|
49
|
+
respond_to?(:scoped) ? scoped(:select=>[field]) : select(field)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
data/test/select_test.rb
ADDED
@@ -0,0 +1,186 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
if RUBY_VERSION >= '1.9'
|
3
|
+
require 'minitest/autorun'
|
4
|
+
require 'active_record'
|
5
|
+
else
|
6
|
+
require 'test/unit'
|
7
|
+
require 'activerecord'
|
8
|
+
require 'sqlite3'
|
9
|
+
end
|
10
|
+
$:.unshift File.dirname(__FILE__) + '/../lib'
|
11
|
+
require File.dirname(__FILE__) + '/../init'
|
12
|
+
|
13
|
+
ActiveRecord::Base.establish_connection(:adapter => "sqlite3", :database => ":memory:")
|
14
|
+
|
15
|
+
def setup_db
|
16
|
+
ActiveRecord::Base.logger
|
17
|
+
ActiveRecord::Schema.define(:version => 1) do
|
18
|
+
create_table :selections do |t|
|
19
|
+
t.column :type, :string
|
20
|
+
t.column :name, :string
|
21
|
+
t.column :description, :string
|
22
|
+
t.column :excluded_string, :string
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def teardown_db
|
28
|
+
ActiveRecord::Base.connection.tables.each do |table|
|
29
|
+
ActiveRecord::Base.connection.drop_table(table)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
class Selection < ActiveRecord::Base;
|
34
|
+
end
|
35
|
+
class SelectAll < Selection;
|
36
|
+
end
|
37
|
+
class SelectIncludeSingle < Selection;
|
38
|
+
end
|
39
|
+
class SelectIncludeMulti < Selection;
|
40
|
+
end
|
41
|
+
class SelectExcludeSingle < Selection;
|
42
|
+
end
|
43
|
+
class SelectExcludeMulti < Selection;
|
44
|
+
end
|
45
|
+
class SelectedIncludeExclude < Selection;
|
46
|
+
end
|
47
|
+
|
48
|
+
class SelectTest < (begin MiniTest::Test rescue Test::Unit::TestCase end)
|
49
|
+
def setup
|
50
|
+
setup_db
|
51
|
+
[SelectAll, SelectIncludeSingle, SelectIncludeMulti, SelectExcludeSingle, SelectExcludeMulti, SelectedIncludeExclude].each do |klass|
|
52
|
+
klass.create! :name => 'first', :description => 'First field', :excluded_string => 'not allowed'
|
53
|
+
klass.create! :name => 'second', :description => 'Second field', :excluded_string => 'not allowed'
|
54
|
+
klass.create! :name => 'third', :description => 'Third field', :excluded_string => 'not allowed'
|
55
|
+
klass.create! :name => 'forth', :description => 'Forth field', :excluded_string => 'not allowed'
|
56
|
+
klass.create! :name => 'fifth', :description => 'Fifth field', :excluded_string => 'not allowed'
|
57
|
+
klass.create! :name => 'sixth', :description => 'Sixth field', :excluded_string => 'not allowed'
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def teardown
|
62
|
+
teardown_db
|
63
|
+
end
|
64
|
+
|
65
|
+
def selection_ids
|
66
|
+
[
|
67
|
+
[1, 1],
|
68
|
+
[2, 2],
|
69
|
+
[3, 3],
|
70
|
+
[4, 4],
|
71
|
+
[5, 5],
|
72
|
+
[6, 6]
|
73
|
+
]
|
74
|
+
end
|
75
|
+
|
76
|
+
def selection_names
|
77
|
+
[
|
78
|
+
['first', 1],
|
79
|
+
['second', 2],
|
80
|
+
['third', 3],
|
81
|
+
['forth', 4],
|
82
|
+
['fifth', 5],
|
83
|
+
['sixth', 6]
|
84
|
+
]
|
85
|
+
end
|
86
|
+
|
87
|
+
def selection_descriptions
|
88
|
+
[
|
89
|
+
['First field', 1],
|
90
|
+
['Second field', 2],
|
91
|
+
['Third field', 3],
|
92
|
+
['Forth field', 4],
|
93
|
+
['Fifth field', 5],
|
94
|
+
['Sixth field', 6]
|
95
|
+
]
|
96
|
+
end
|
97
|
+
|
98
|
+
def selection_excluded_strings
|
99
|
+
[
|
100
|
+
['not allowed', 1],
|
101
|
+
['not allowed', 2],
|
102
|
+
['not allowed', 3],
|
103
|
+
['not allowed', 4],
|
104
|
+
['not allowed', 5],
|
105
|
+
['not allowed', 6]
|
106
|
+
]
|
107
|
+
end
|
108
|
+
|
109
|
+
def test_all_names_selection
|
110
|
+
SelectAll.acts_as_select
|
111
|
+
assert_equal(SelectAll.id_select, selection_ids)
|
112
|
+
assert_equal(SelectAll.id_list, selection_ids.map(&:first))
|
113
|
+
assert_equal(SelectAll.name_select, selection_names)
|
114
|
+
assert_equal(SelectAll.name_list, selection_names.map(&:first))
|
115
|
+
assert_equal(SelectAll.description_select, selection_descriptions)
|
116
|
+
assert_equal(SelectAll.description_list, selection_descriptions.map(&:first))
|
117
|
+
assert_equal(SelectAll.excluded_string_select, selection_excluded_strings)
|
118
|
+
assert_equal(SelectAll.excluded_string_list, selection_excluded_strings.map(&:first))
|
119
|
+
end
|
120
|
+
|
121
|
+
def test_incorrect_inclusion
|
122
|
+
Selection.acts_as_select :include => ['wibble']
|
123
|
+
assert_raises(NoMethodError) { Selection.wibble_select }
|
124
|
+
end
|
125
|
+
|
126
|
+
def test_single_field_selection
|
127
|
+
SelectIncludeSingle.acts_as_select :include => 'name'
|
128
|
+
assert_raises(NoMethodError) { SelectIncludeSingle.id_select }
|
129
|
+
assert_raises(NoMethodError) { SelectIncludeSingle.id_list }
|
130
|
+
assert_equal(SelectIncludeSingle.name_select, selection_names.map { |x| [x[0], x[1]+6] })
|
131
|
+
assert_equal(SelectIncludeSingle.name_list, selection_names.map(&:first))
|
132
|
+
assert_raises(NoMethodError) { SelectIncludeSingle.description_select }
|
133
|
+
assert_raises(NoMethodError) { SelectIncludeSingle.description_list }
|
134
|
+
assert_raises(NoMethodError) { SelectIncludeSingle.excluded_string_select }
|
135
|
+
assert_raises(NoMethodError) { SelectIncludeSingle.excluded_string_list }
|
136
|
+
end
|
137
|
+
|
138
|
+
def test_multi_field_selection
|
139
|
+
SelectIncludeMulti.acts_as_select :include => %w(name description)
|
140
|
+
assert_raises(NoMethodError) { SelectIncludeMulti.id_select }
|
141
|
+
assert_raises(NoMethodError) { SelectIncludeMulti.id_list }
|
142
|
+
assert_equal(SelectIncludeMulti.name_select, selection_names.map { |x| [x[0], x[1]+12] })
|
143
|
+
assert_equal(SelectIncludeMulti.name_list, selection_names.map(&:first))
|
144
|
+
assert_equal(SelectIncludeMulti.description_select, selection_descriptions.map { |x| [x[0], x[1]+12] })
|
145
|
+
assert_equal(SelectIncludeMulti.description_list, selection_descriptions.map(&:first))
|
146
|
+
assert_raises(NoMethodError) { SelectIncludeMulti.excluded_string_select }
|
147
|
+
assert_raises(NoMethodError) { SelectIncludeMulti.excluded_string_list }
|
148
|
+
end
|
149
|
+
|
150
|
+
def test_single_field_exclusion
|
151
|
+
SelectExcludeSingle.acts_as_select :exclude => 'excluded_string'
|
152
|
+
assert_equal(SelectExcludeSingle.id_select, selection_ids.map { |x| [x[0]+18, x[1]+18] })
|
153
|
+
assert_equal(SelectExcludeSingle.id_list, selection_ids.map { |x| x[0]+18 })
|
154
|
+
assert_equal(SelectExcludeSingle.name_select, selection_names.map { |x| [x[0], x[1]+18] })
|
155
|
+
assert_equal(SelectExcludeSingle.name_list, selection_names.map(&:first))
|
156
|
+
assert_equal(SelectExcludeSingle.description_select, selection_descriptions.map { |x| [x[0], x[1]+18] })
|
157
|
+
assert_equal(SelectExcludeSingle.description_list, selection_descriptions.map(&:first))
|
158
|
+
assert_raises(NoMethodError) { SelectExcludeSingle.excluded_string_select }
|
159
|
+
assert_raises(NoMethodError) { SelectExcludeSingle.excluded_string_list }
|
160
|
+
end
|
161
|
+
|
162
|
+
def test_multi_field_exclusion
|
163
|
+
SelectExcludeMulti.acts_as_select :exclude => %w(description excluded_string)
|
164
|
+
assert_equal(SelectExcludeMulti.id_select, selection_ids.map { |x| [x[0]+24, x[1]+24] })
|
165
|
+
assert_equal(SelectExcludeMulti.id_list, selection_ids.map { |x| x[0]+24 })
|
166
|
+
assert_equal(SelectExcludeMulti.name_select, selection_names.map { |x| [x[0], x[1]+24] })
|
167
|
+
assert_equal(SelectExcludeMulti.name_list, selection_names.map(&:first))
|
168
|
+
assert_raises(NoMethodError) { SelectExcludeMulti.description_select }
|
169
|
+
assert_raises(NoMethodError) { SelectExcludeMulti.description_list }
|
170
|
+
assert_raises(NoMethodError) { SelectExcludeMulti.excluded_string_select }
|
171
|
+
assert_raises(NoMethodError) { SelectExcludeMulti.excluded_string_list }
|
172
|
+
end
|
173
|
+
|
174
|
+
def test_include_exclude
|
175
|
+
SelectedIncludeExclude.acts_as_select :include => %w(name description), :exclude => %w(description excluded_string)
|
176
|
+
assert_raises(NoMethodError) { SelectedIncludeExclude.id_select }
|
177
|
+
assert_raises(NoMethodError) { SelectedIncludeExclude.id_list }
|
178
|
+
assert_equal(SelectedIncludeExclude.name_select, selection_names.map { |x| [x[0], x[1]+30] })
|
179
|
+
assert_equal(SelectedIncludeExclude.name_list, selection_names.map(&:first))
|
180
|
+
assert_raises(NoMethodError) { SelectedIncludeExclude.description_select }
|
181
|
+
assert_raises(NoMethodError) { SelectedIncludeExclude.description_list }
|
182
|
+
assert_raises(NoMethodError) { SelectedIncludeExclude.excluded_string_select }
|
183
|
+
assert_raises(NoMethodError) { SelectedIncludeExclude.excluded_string_list }
|
184
|
+
end
|
185
|
+
end
|
186
|
+
|
metadata
CHANGED
@@ -1,102 +1,125 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: acts_as_select
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
prerelease:
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 0
|
9
|
-
- 3
|
10
|
-
version: 0.0.3
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
11
5
|
platform: ruby
|
12
|
-
authors:
|
6
|
+
authors:
|
13
7
|
- Paul McKibbin
|
14
8
|
autorequire:
|
15
9
|
bindir: bin
|
16
10
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
- !ruby/object:Gem::Dependency
|
11
|
+
date: 2015-02-15 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
21
14
|
name: bundler
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
- !ruby/object:Gem::Version
|
28
|
-
hash: 9
|
29
|
-
segments:
|
30
|
-
- 1
|
31
|
-
- 3
|
32
|
-
version: "1.3"
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.3'
|
33
20
|
type: :development
|
34
|
-
|
35
|
-
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.3'
|
27
|
+
- !ruby/object:Gem::Dependency
|
36
28
|
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
37
35
|
prerelease: false
|
38
|
-
|
39
|
-
|
40
|
-
requirements:
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
41
38
|
- - ">="
|
42
|
-
- !ruby/object:Gem::Version
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: minitest
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
47
48
|
type: :development
|
48
|
-
|
49
|
-
|
50
|
-
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: test-unit
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: activerecord
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
description: Creation of automatic selection suitable for drop downs from column fields
|
84
|
+
in an ActiveRecord table
|
85
|
+
email:
|
51
86
|
- pmckibbin@gmail.com
|
52
87
|
executables: []
|
53
|
-
|
54
88
|
extensions: []
|
55
|
-
|
56
89
|
extra_rdoc_files: []
|
57
|
-
|
58
|
-
|
59
|
-
- .gitignore
|
90
|
+
files:
|
91
|
+
- ".gitignore"
|
60
92
|
- Gemfile
|
61
93
|
- LICENSE.txt
|
62
94
|
- README.md
|
63
95
|
- Rakefile
|
64
96
|
- acts_as_select.gemspec
|
65
|
-
-
|
66
|
-
- lib/
|
67
|
-
-
|
97
|
+
- init.rb
|
98
|
+
- lib/active_record/acts/select.rb
|
99
|
+
- test/select_test.rb
|
68
100
|
homepage: http://blackrat.org
|
69
|
-
licenses:
|
101
|
+
licenses:
|
70
102
|
- MIT
|
103
|
+
metadata: {}
|
71
104
|
post_install_message:
|
72
105
|
rdoc_options: []
|
73
|
-
|
74
|
-
require_paths:
|
106
|
+
require_paths:
|
75
107
|
- lib
|
76
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
77
|
-
|
78
|
-
requirements:
|
108
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
109
|
+
requirements:
|
79
110
|
- - ">="
|
80
|
-
- !ruby/object:Gem::Version
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
version: "0"
|
85
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
86
|
-
none: false
|
87
|
-
requirements:
|
111
|
+
- !ruby/object:Gem::Version
|
112
|
+
version: '0'
|
113
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
88
115
|
- - ">="
|
89
|
-
- !ruby/object:Gem::Version
|
90
|
-
|
91
|
-
segments:
|
92
|
-
- 0
|
93
|
-
version: "0"
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
94
118
|
requirements: []
|
95
|
-
|
96
119
|
rubyforge_project:
|
97
|
-
rubygems_version:
|
120
|
+
rubygems_version: 2.2.2
|
98
121
|
signing_key:
|
99
|
-
specification_version:
|
122
|
+
specification_version: 4
|
100
123
|
summary: Automated selection for Activerecord Tables
|
101
|
-
test_files:
|
102
|
-
|
124
|
+
test_files:
|
125
|
+
- test/select_test.rb
|
data/lib/acts_as_select.rb
DELETED
@@ -1,28 +0,0 @@
|
|
1
|
-
module ActsAsSelect
|
2
|
-
def acts_as_select
|
3
|
-
column_names.each do |field|
|
4
|
-
class_eval %Q(
|
5
|
-
if case Rails::VERSION_MAJOR < 3
|
6
|
-
named_scope :select_#{field}_objects, lambda {{:select => "#{field}, \#{primary_key}"}}
|
7
|
-
else
|
8
|
-
scope :select_#{field}_objects, lambda { select("#{field}, \#{primary_key}") }
|
9
|
-
end
|
10
|
-
|
11
|
-
class << self
|
12
|
-
def #{field}_select
|
13
|
-
select_#{field}_objects.map{|x| [x.#{field}, x.send(x.class.primary_key)]}
|
14
|
-
end
|
15
|
-
|
16
|
-
def #{field}_list
|
17
|
-
select_#{field}_objects.map(&:#{field})
|
18
|
-
end
|
19
|
-
|
20
|
-
def #{field}_objects
|
21
|
-
select_#{field}_objects.map(&:#{field})
|
22
|
-
end
|
23
|
-
|
24
|
-
end
|
25
|
-
)
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|