selection_options_for 0.0.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/.DS_Store +0 -0
- data/CHANGELOG.md +3 -0
- data/Gemfile +4 -0
- data/LICENSE +22 -0
- data/README.md +135 -0
- data/Rakefile +2 -0
- data/lib/selection_options_for.rb +7 -0
- data/lib/selection_options_for/model_additions.rb +62 -0
- data/lib/selection_options_for/railtie.rb +9 -0
- data/lib/selection_options_for/version.rb +3 -0
- data/selection_options_for.gemspec +29 -0
- data/test/selection_options_for_ex_test.rb +66 -0
- data/test/selection_options_for_test.rb +167 -0
- data/test/test_helper.rb +4 -0
- metadata +82 -0
data/.DS_Store
ADDED
Binary file
|
data/CHANGELOG.md
ADDED
data/Gemfile
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2006 Mark Windholtz
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,135 @@
|
|
1
|
+
# SelectionOptionsFor
|
2
|
+
|
3
|
+
This code allows you to keep the display labels in the model
|
4
|
+
when the DB holds only a 1 character flag.
|
5
|
+
and when the code requires symbolic references to the value to use in algorithms
|
6
|
+
|
7
|
+
## Installation
|
8
|
+
|
9
|
+
Add this line to your application's Gemfile:
|
10
|
+
|
11
|
+
gem 'selection_options_for'
|
12
|
+
|
13
|
+
And then execute:
|
14
|
+
|
15
|
+
$ bundle
|
16
|
+
|
17
|
+
Or install it yourself as:
|
18
|
+
|
19
|
+
$ gem install selection_options_for
|
20
|
+
|
21
|
+
## Usage
|
22
|
+
|
23
|
+
|
24
|
+
SelectionOptionsFor
|
25
|
+
===================
|
26
|
+
|
27
|
+
This code allows you to keep the display labels in the model
|
28
|
+
when the DB holds only a 1 character flag.
|
29
|
+
and when the code requires symbolic references to the value to use in algorithms
|
30
|
+
|
31
|
+
element 0 of the array passed in is always the logical symbol
|
32
|
+
If a 2-element Array is passed in, [key, label] and the first letter of label is the DB value
|
33
|
+
If a 3-element Array is passed in, [key, DB value, label]
|
34
|
+
Any other type passed in throws an error
|
35
|
+
|
36
|
+
Limitations: Don't use this if you will run reports directly against the DB
|
37
|
+
In that case, the reports will not have access to the display labels
|
38
|
+
|
39
|
+
|
40
|
+
class Article < ActiveRecord::Base
|
41
|
+
selection_options_for :file_type_option,
|
42
|
+
[:pdf, 'PDF'],
|
43
|
+
[:html, 'HTML'],
|
44
|
+
[:msword, 'MS-Word']
|
45
|
+
[:text, 'X', 'Textfile']
|
46
|
+
end
|
47
|
+
|
48
|
+
adds the following CLASS METHODS to Article
|
49
|
+
|
50
|
+
* file_type_options
|
51
|
+
returns a array of 2-value arrays suitable to fill a select tag
|
52
|
+
The second example shows how to start the selection on a blank
|
53
|
+
$ <%= select :article, :file_type_option, Article.file_type_options %>
|
54
|
+
$ <%= select :article, :file_type_option, [['','']] + Article.file_type_options %>
|
55
|
+
|
56
|
+
$ assert_equal ["MS-Word", "PDF", "HTML"], Article.file_type_option_hash.values
|
57
|
+
$ assert_equal "['MS-Word', 'PDF', 'HTML']", Article.file_type_option_js_list
|
58
|
+
|
59
|
+
$ file_type_option_symbols
|
60
|
+
returns hash of symbols
|
61
|
+
|
62
|
+
adds the following INSTANCE METHODS to Article
|
63
|
+
|
64
|
+
$ file_type_option_hash
|
65
|
+
$ file_type_option
|
66
|
+
returns the single character value as in the db
|
67
|
+
|
68
|
+
$ file_type_option_label
|
69
|
+
returns the current values label
|
70
|
+
|
71
|
+
$ file_type_option_symbol
|
72
|
+
returns the current values symbol
|
73
|
+
|
74
|
+
methods ending in '?' return boolean if the value is set
|
75
|
+
methods ending in '!' set the value
|
76
|
+
|
77
|
+
$ file_type_option_pdf?
|
78
|
+
$ file_type_option_pdf!
|
79
|
+
|
80
|
+
$ file_type_option_html?
|
81
|
+
$ file_type_option_html!
|
82
|
+
|
83
|
+
$ file_type_option_msword?
|
84
|
+
$ file_type_option_msword!
|
85
|
+
|
86
|
+
example #1: Selection list
|
87
|
+
|
88
|
+
article = Article.new
|
89
|
+
article.file_type_option_pdf!
|
90
|
+
assert_equal 'P', article.file_type_option
|
91
|
+
assert_equal :pdf, article.file_type_symbol
|
92
|
+
assert_equal true, article.file_type_option_pdf?
|
93
|
+
assert_equal 'PDF', article.file_type_option_label
|
94
|
+
assert_equal [["MS-Word", "M"], ["PDF", "P"], ["HTML", "H"]],
|
95
|
+
Article.file_type_options
|
96
|
+
assert_equal({"M"=>"MS-Word", "P"=>"PDF", "H"=>"HTML"},
|
97
|
+
Article.file_type_option_hash)
|
98
|
+
|
99
|
+
assert_equals({'P'=>:pdf, 'H'=>:html, 'W'=>:msword, 'T'=>:text},
|
100
|
+
Article.file_type_option_symbols)
|
101
|
+
|
102
|
+
By default the first letter of the label is used as the one character value
|
103
|
+
in the database field. When there are duplicate first letters
|
104
|
+
you can specify a different letter to be stored in the database
|
105
|
+
In the example below 'R' is stored in the database when
|
106
|
+
'Credit Card Account' is selected.
|
107
|
+
|
108
|
+
Example #1: Selection list
|
109
|
+
|
110
|
+
class Article < ActiveRecord::Base
|
111
|
+
selection_options_for :payment_method_option,
|
112
|
+
[:basic, 'Basic'],
|
113
|
+
[:cash, 'Cash Account'],
|
114
|
+
[:cc, 'R','Credit Card Account']
|
115
|
+
end
|
116
|
+
|
117
|
+
$ <%= select :article, :payment_method_option, Article.payment_method_options %>
|
118
|
+
|
119
|
+
Example #2: Radio button labels
|
120
|
+
|
121
|
+
$ <% Article.payment_method_option_hash.each do | key, value | %>
|
122
|
+
$ <%= radio_button :article, :payment_method_option, key %> <%= value %><br />
|
123
|
+
$ <% end %>
|
124
|
+
|
125
|
+
Example #3 in a java_script list
|
126
|
+
payment_method_option_js_list
|
127
|
+
|
128
|
+
|
129
|
+
## Contributing
|
130
|
+
|
131
|
+
1. Fork it
|
132
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
133
|
+
3. Commit your changes (`git commit -am 'Added some feature'`)
|
134
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
135
|
+
5. Create new Pull Request
|
data/Rakefile
ADDED
@@ -0,0 +1,62 @@
|
|
1
|
+
module ModelAdditions
|
2
|
+
|
3
|
+
def selection_options_for(id, *opts) # :nodoc:
|
4
|
+
id = id.to_s
|
5
|
+
id_hash = id + '_hash'
|
6
|
+
id_symbols = id + '_symbols'
|
7
|
+
class_eval <<-EOF
|
8
|
+
write_inheritable_attribute("#{id_hash}".to_sym, {})
|
9
|
+
write_inheritable_attribute("#{id_symbols}".to_sym, {})
|
10
|
+
def self.#{id_hash}()
|
11
|
+
read_inheritable_attribute("#{id_hash}".to_sym)
|
12
|
+
end
|
13
|
+
def self.#{id_symbols}()
|
14
|
+
read_inheritable_attribute("#{id_symbols}".to_sym)
|
15
|
+
end
|
16
|
+
def self.#{id}s
|
17
|
+
#{id_hash}.map { |key, value| [value,key] }.sort
|
18
|
+
end
|
19
|
+
def #{id}_label
|
20
|
+
#{self}.#{id_hash}[#{id}]
|
21
|
+
end
|
22
|
+
def self.#{id}_js_list
|
23
|
+
result = '['
|
24
|
+
#{id_hash}.values.sort.each{ |e| result = result + "'"+ e + "', "}
|
25
|
+
result.chop!.chop! if result.size > 2
|
26
|
+
result + ']'
|
27
|
+
end
|
28
|
+
def #{id}_symbol
|
29
|
+
#{self}.#{id_symbols}[self.#{id}]
|
30
|
+
end
|
31
|
+
EOF
|
32
|
+
# load the labels into the class id_hash variable
|
33
|
+
opts.each do |label|
|
34
|
+
unless label.class == Array
|
35
|
+
raise "Invalid item ["+ label.to_s + "] in :" + id + " of type [" + label.class.to_s + "]. Expected Array"
|
36
|
+
end
|
37
|
+
case label.size
|
38
|
+
when 2
|
39
|
+
letter, display_text = label[1].first, label[1]
|
40
|
+
when 3
|
41
|
+
letter, display_text = label[1], label[2]
|
42
|
+
else
|
43
|
+
raise "Invalid number of items in selection_options_for :" + id + " [" +
|
44
|
+
label.class.to_s + "]."
|
45
|
+
end
|
46
|
+
if(send(id_hash).has_key?(letter))
|
47
|
+
raise "Duplicate key during selection_options_for :" + id + ". key: " +
|
48
|
+
letter + ' for text: ' + display_text
|
49
|
+
end
|
50
|
+
send(id_hash)[letter] = display_text
|
51
|
+
send(id_symbols)[letter] = label[0]
|
52
|
+
module_eval <<-EOF2
|
53
|
+
def #{id}_#{label[0].to_s}?
|
54
|
+
self.#{id} == '#{letter}'
|
55
|
+
end
|
56
|
+
def #{id}_#{label[0].to_s}!
|
57
|
+
self.#{id} = '#{letter}'
|
58
|
+
end
|
59
|
+
EOF2
|
60
|
+
end # opts.each
|
61
|
+
end # selection_options_for
|
62
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
require File.expand_path('../lib/selection_options_for/version', __FILE__)
|
3
|
+
|
4
|
+
Gem::Specification.new do |gem|
|
5
|
+
gem.authors = ["Mark Windholtz"]
|
6
|
+
gem.email = ["mark@agiledna.com"]
|
7
|
+
gem.summary = %q{Display labels and symbolic references }
|
8
|
+
gem.description = %q{
|
9
|
+
This code allows you to keep the display labels in the model
|
10
|
+
when the DB holds only a 1 character flag.
|
11
|
+
and when the code requires symbolic references to the value to use in algorithms
|
12
|
+
|
13
|
+
element 0 of the array passed in is always the logical symbol
|
14
|
+
If a 2-element Array is passed in, [key, label] and the first letter of label is the DB value
|
15
|
+
If a 3-element Array is passed in, [key, DB value, label]
|
16
|
+
Any other type passed in throws an error
|
17
|
+
|
18
|
+
Limitations: Don't use this if you will run reports directly against the DB
|
19
|
+
In that case, the reports will not have access to the display labels
|
20
|
+
}
|
21
|
+
gem.homepage = "https://github.com/mwindholtz/selection_options_for"
|
22
|
+
|
23
|
+
gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
24
|
+
gem.files = `git ls-files`.split("\n")
|
25
|
+
gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
26
|
+
gem.name = "selection_options_for"
|
27
|
+
gem.require_paths = ["lib"]
|
28
|
+
gem.version = SelectionOptionsFor::VERSION
|
29
|
+
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
## ruby -Itest test/selection_options_for_ex_test.rb
|
2
|
+
require 'test_helper'
|
3
|
+
|
4
|
+
#
|
5
|
+
# test bad data and exceptions
|
6
|
+
#
|
7
|
+
|
8
|
+
class ModelUnderTest < ActiveRecord::Base
|
9
|
+
def self.columns() @columns ||= []; end
|
10
|
+
def self.column(name, sql_type = nil, default = nil, null = true)
|
11
|
+
columns << ActiveRecord::ConnectionAdapters::Column.new(name.to_s, default, sql_type.to_s, null)
|
12
|
+
end
|
13
|
+
|
14
|
+
column :price_option, :string
|
15
|
+
|
16
|
+
begin
|
17
|
+
selection_options_for :price_option,
|
18
|
+
[:basic, 'Basic' ],
|
19
|
+
[:cash, 'Cash Account '],
|
20
|
+
[:cc, 'R','Credit Card Account'],
|
21
|
+
123
|
22
|
+
|
23
|
+
rescue RuntimeError => ex
|
24
|
+
@@exception_num = ex
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.exception_num
|
28
|
+
@@exception_num
|
29
|
+
end
|
30
|
+
|
31
|
+
begin
|
32
|
+
selection_options_for :status_option,
|
33
|
+
[:basic, 'Basic' ],
|
34
|
+
'Cash Account',
|
35
|
+
[:cc, 'R','Credit Card Account']
|
36
|
+
|
37
|
+
rescue RuntimeError => ex
|
38
|
+
@@exception_string = ex
|
39
|
+
end
|
40
|
+
|
41
|
+
def self.exception_string
|
42
|
+
@@exception_string
|
43
|
+
end
|
44
|
+
|
45
|
+
|
46
|
+
end
|
47
|
+
|
48
|
+
class TranslateOptionsForExTest < Test::Unit::TestCase
|
49
|
+
def setup
|
50
|
+
@model = ModelUnderTest
|
51
|
+
end
|
52
|
+
|
53
|
+
def test_invalid_num
|
54
|
+
assert_equal RuntimeError, ModelUnderTest.exception_num.class
|
55
|
+
assert_equal "Invalid item [123] in :price_option of type [Fixnum]. Expected Array",
|
56
|
+
ModelUnderTest.exception_num.message
|
57
|
+
end
|
58
|
+
|
59
|
+
def test_invalid_string
|
60
|
+
assert_equal RuntimeError, ModelUnderTest.exception_string.class
|
61
|
+
assert_equal "Invalid item [Cash Account] in :status_option of type [String]. Expected Array",
|
62
|
+
ModelUnderTest.exception_string.message
|
63
|
+
end
|
64
|
+
|
65
|
+
|
66
|
+
end
|
@@ -0,0 +1,167 @@
|
|
1
|
+
## ruby -Itest test/selection_options_for_test.rb
|
2
|
+
require 'test_helper'
|
3
|
+
|
4
|
+
#
|
5
|
+
# setup three classes for these tests
|
6
|
+
#
|
7
|
+
# 1. ModelUnderTest -- declare selection_options_for to be tested
|
8
|
+
# 2. SiblingOfModelUnderTest -- make sure that no meta-level leaks occur
|
9
|
+
# 3. SubClassOfModel -- should have it's own copy of class variables
|
10
|
+
#
|
11
|
+
|
12
|
+
class SiblingOfModelUnderTest < ActiveRecord::Base
|
13
|
+
def self.columns() @columns ||= []; end
|
14
|
+
def self.column(name, sql_type = nil, default = nil, null = true)
|
15
|
+
columns << ActiveRecord::ConnectionAdapters::Column.new(name.to_s, default, sql_type.to_s, null)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
class ModelUnderTest < ActiveRecord::Base
|
20
|
+
def self.columns() @columns ||= []; end
|
21
|
+
def self.column(name, sql_type = nil, default = nil, null = true)
|
22
|
+
columns << ActiveRecord::ConnectionAdapters::Column.new(name.to_s, default, sql_type.to_s, null)
|
23
|
+
end
|
24
|
+
|
25
|
+
column :status_option, :string
|
26
|
+
column :payment_method_option, :string
|
27
|
+
|
28
|
+
selection_options_for :status_option,
|
29
|
+
[:partial, 'Partial Registration'],
|
30
|
+
[:active, 'Active'],
|
31
|
+
[:changing_email, 'E', 'Active, Changing Email'],
|
32
|
+
[:inactive, 'Inactive'],
|
33
|
+
[:forgot_pw, 'F', 'Active, Forgot Password' ]
|
34
|
+
|
35
|
+
selection_options_for :payment_method_option,
|
36
|
+
[:basic, 'Basic'],
|
37
|
+
[:cash, 'Cash Account'],
|
38
|
+
[:cc, 'R','Credit Card Account']
|
39
|
+
|
40
|
+
selection_options_for :sorted_option,
|
41
|
+
[:none, 'H', 'Honorary Member'],
|
42
|
+
[:member, 'M', 'CSM - Certified ScrumMaster'],
|
43
|
+
[:pract, 'P', 'CSP - Certified Scrum Practitioner'],
|
44
|
+
[:cst, 'T', 'CST - Certified Scrum Trainer'],
|
45
|
+
[:icst, 'I', 'ICST - Certified Scrum Trainer (inactive)']
|
46
|
+
|
47
|
+
end
|
48
|
+
|
49
|
+
class SubClassOfModel < ModelUnderTest
|
50
|
+
selection_options_for :payment_method_option,
|
51
|
+
[:advanced, 'Advanced'],
|
52
|
+
[:ecash, 'ECash Account']
|
53
|
+
end
|
54
|
+
|
55
|
+
class SelectionOptionsForTest < Test::Unit::TestCase
|
56
|
+
def setup
|
57
|
+
@model = ModelUnderTest
|
58
|
+
end
|
59
|
+
|
60
|
+
def test_should_provide_symbols
|
61
|
+
expected = {"Basic"=>:basic, "Cash Account"=>:cash, "R"=>:cc}
|
62
|
+
assert_equal expected, ModelUnderTest.payment_method_option_symbols
|
63
|
+
end
|
64
|
+
|
65
|
+
def test_should_provide_symbol
|
66
|
+
target = @model.new
|
67
|
+
target.status_option_forgot_pw!
|
68
|
+
assert_equal :forgot_pw, @model.status_option_symbols[target.status_option]
|
69
|
+
assert_equal :forgot_pw, target.status_option_symbol
|
70
|
+
end
|
71
|
+
|
72
|
+
def test_symbol_generation
|
73
|
+
target = @model.new
|
74
|
+
# forget PW
|
75
|
+
target.status_option_forgot_pw!
|
76
|
+
assert target.status_option_forgot_pw?
|
77
|
+
assert !target.status_option_active?
|
78
|
+
assert !target.status_option_changing_email?
|
79
|
+
assert !target.status_option_inactive?
|
80
|
+
assert !target.status_option_partial?
|
81
|
+
# active
|
82
|
+
target.status_option_active!
|
83
|
+
assert !target.status_option_forgot_pw?
|
84
|
+
assert target.status_option_active?
|
85
|
+
assert !target.status_option_changing_email?
|
86
|
+
assert !target.status_option_inactive?
|
87
|
+
assert !target.status_option_partial?
|
88
|
+
# active
|
89
|
+
target.status_option_inactive!
|
90
|
+
assert !target.status_option_forgot_pw?
|
91
|
+
assert !target.status_option_active?
|
92
|
+
assert !target.status_option_changing_email?
|
93
|
+
assert target.status_option_inactive?
|
94
|
+
assert !target.status_option_partial?
|
95
|
+
end
|
96
|
+
|
97
|
+
def test_sibling_of_target_not_effected_by_calss_methods
|
98
|
+
SiblingOfModelUnderTest.payment_method_options
|
99
|
+
flunk "Should throw Exception"
|
100
|
+
rescue NoMethodError => ex
|
101
|
+
assert true
|
102
|
+
rescue
|
103
|
+
flunk "wrong exception thrown"
|
104
|
+
end
|
105
|
+
|
106
|
+
def test_sibling_of_target_not_effected_by_instance_methods
|
107
|
+
sib = SiblingOfModelUnderTest.new
|
108
|
+
sib.status_option_partial?
|
109
|
+
flunk "Should throw Exception"
|
110
|
+
rescue NoMethodError => ex
|
111
|
+
assert true
|
112
|
+
rescue
|
113
|
+
flunk "wrong exception thrown"
|
114
|
+
end
|
115
|
+
|
116
|
+
def test_each_subclass_has_own_symbols
|
117
|
+
|
118
|
+
assert_equal [["Advanced", "Advanced"], ["ECash Account", "ECash Account"]].sort ,
|
119
|
+
SubClassOfModel.payment_method_options.sort
|
120
|
+
end
|
121
|
+
|
122
|
+
def test_payment_method_option_array
|
123
|
+
|
124
|
+
assert_equal [["Basic", "Basic"],
|
125
|
+
["Cash Account", "Cash Account"],
|
126
|
+
["Credit Card Account", "R"]].sort ,
|
127
|
+
@model.payment_method_options.sort
|
128
|
+
end
|
129
|
+
|
130
|
+
def test_default_status
|
131
|
+
target = @model.new
|
132
|
+
target.status_option_forgot_pw!
|
133
|
+
assert_equal 'Active, Forgot Password', target.status_option_label
|
134
|
+
target.status_option = 'Active'
|
135
|
+
assert_equal 'Active', target.status_option_label
|
136
|
+
end
|
137
|
+
|
138
|
+
def test_status_option_array
|
139
|
+
|
140
|
+
assert_equal [["Active", "Active"],
|
141
|
+
["Active, Changing Email", "E"],
|
142
|
+
["Active, Forgot Password", "F"],
|
143
|
+
["Inactive", "Inactive"],
|
144
|
+
["Partial Registration", "Partial Registration"]].sort ,
|
145
|
+
@model.status_options.sort
|
146
|
+
end
|
147
|
+
|
148
|
+
def test_default_payment_method_option_hash
|
149
|
+
expected = {"Cash Account"=>"Cash Account", "R"=>"Credit Card Account", "Basic"=>"Basic"}
|
150
|
+
assert_equal expected, @model.payment_method_option_hash
|
151
|
+
end
|
152
|
+
|
153
|
+
def test_status_option_js_list
|
154
|
+
assert_equal "['Active', 'Active, Changing Email', 'Active, Forgot Password', 'Inactive', 'Partial Registration']",
|
155
|
+
@model.status_option_js_list
|
156
|
+
end
|
157
|
+
|
158
|
+
def test_sorted_option_array
|
159
|
+
assert_equal [["CSM - Certified ScrumMaster", "M"],
|
160
|
+
["CSP - Certified Scrum Practitioner", "P"],
|
161
|
+
["CST - Certified Scrum Trainer", "T"],
|
162
|
+
["Honorary Member", "H"],
|
163
|
+
["ICST - Certified Scrum Trainer (inactive)", "I"]] ,
|
164
|
+
@model.sorted_options
|
165
|
+
end
|
166
|
+
|
167
|
+
end
|
data/test/test_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,82 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: selection_options_for
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 21
|
5
|
+
prerelease:
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 0
|
9
|
+
- 5
|
10
|
+
version: 0.0.5
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- Mark Windholtz
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2012-03-09 00:00:00 Z
|
19
|
+
dependencies: []
|
20
|
+
|
21
|
+
description: "\n This code allows you to keep the display labels in the model \n when the DB holds only a 1 character flag.\n and when the code requires symbolic references to the value to use in algorithms\n \n element 0 of the array passed in is always the logical symbol\n If a 2-element Array is passed in, [key, label] and the first letter of label is the DB value\n If a 3-element Array is passed in, [key, DB value, label] \n Any other type passed in throws an error\n \n Limitations: Don't use this if you will run reports directly against the DB \n In that case, the reports will not have access to the display labels \n "
|
22
|
+
email:
|
23
|
+
- mark@agiledna.com
|
24
|
+
executables: []
|
25
|
+
|
26
|
+
extensions: []
|
27
|
+
|
28
|
+
extra_rdoc_files: []
|
29
|
+
|
30
|
+
files:
|
31
|
+
- .DS_Store
|
32
|
+
- CHANGELOG.md
|
33
|
+
- Gemfile
|
34
|
+
- LICENSE
|
35
|
+
- README.md
|
36
|
+
- Rakefile
|
37
|
+
- lib/selection_options_for.rb
|
38
|
+
- lib/selection_options_for/model_additions.rb
|
39
|
+
- lib/selection_options_for/railtie.rb
|
40
|
+
- lib/selection_options_for/version.rb
|
41
|
+
- selection_options_for.gemspec
|
42
|
+
- test/selection_options_for_ex_test.rb
|
43
|
+
- test/selection_options_for_test.rb
|
44
|
+
- test/test_helper.rb
|
45
|
+
homepage: https://github.com/mwindholtz/selection_options_for
|
46
|
+
licenses: []
|
47
|
+
|
48
|
+
post_install_message:
|
49
|
+
rdoc_options: []
|
50
|
+
|
51
|
+
require_paths:
|
52
|
+
- lib
|
53
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
54
|
+
none: false
|
55
|
+
requirements:
|
56
|
+
- - ">="
|
57
|
+
- !ruby/object:Gem::Version
|
58
|
+
hash: 3
|
59
|
+
segments:
|
60
|
+
- 0
|
61
|
+
version: "0"
|
62
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
63
|
+
none: false
|
64
|
+
requirements:
|
65
|
+
- - ">="
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
hash: 3
|
68
|
+
segments:
|
69
|
+
- 0
|
70
|
+
version: "0"
|
71
|
+
requirements: []
|
72
|
+
|
73
|
+
rubyforge_project:
|
74
|
+
rubygems_version: 1.8.17
|
75
|
+
signing_key:
|
76
|
+
specification_version: 3
|
77
|
+
summary: Display labels and symbolic references
|
78
|
+
test_files:
|
79
|
+
- test/selection_options_for_ex_test.rb
|
80
|
+
- test/selection_options_for_test.rb
|
81
|
+
- test/test_helper.rb
|
82
|
+
has_rdoc:
|