acts_as_select 0.0.3 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|