coded_options 1.0.2 → 1.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.
- data/CHANGELOG +3 -0
- data/README.md +2 -5
- data/lib/coded_options/base.rb +16 -10
- data/lib/coded_options/version.rb +1 -1
- data/spec/coded_options_spec.rb +18 -1
- metadata +4 -3
data/CHANGELOG
ADDED
data/README.md
CHANGED
@@ -11,13 +11,10 @@ in a Rails controller, it turns
|
|
11
11
|
|
12
12
|
into
|
13
13
|
|
14
|
-
STATES =
|
14
|
+
STATES = {0 => initial, 1 => active, 2 => closed)
|
15
15
|
STATE_OPTIONS = [["initial", 0], ["active", 1], ["closed", 2]]
|
16
16
|
|
17
|
-
|
18
|
-
return unless state_id
|
19
|
-
STATES[state_id]
|
20
|
-
end
|
17
|
+
along with the getter and setter methods #state and #state=(new_state) respectively.
|
21
18
|
|
22
19
|
The STATE_OPTIONS array is perfect for select tags. You can also use this in
|
23
20
|
a plain Ruby object as follows:
|
data/lib/coded_options/base.rb
CHANGED
@@ -35,25 +35,31 @@ module CodedOptions
|
|
35
35
|
|
36
36
|
def setup_coded_options singular_name, values
|
37
37
|
plural_name = singular_name.to_s.pluralize
|
38
|
+
options = to_options(values)
|
38
39
|
|
39
|
-
|
40
|
-
|
40
|
+
field = "#{singular_name}_id"
|
41
|
+
values_constant = plural_name.upcase
|
42
|
+
options_constant = "#{singular_name}_options".upcase
|
43
|
+
|
44
|
+
const_set options_constant, options
|
45
|
+
const_set values_constant, Hash[*options.map(&:reverse).flatten]
|
41
46
|
|
42
47
|
class_eval <<-EOT, __FILE__, (__LINE__+1)
|
43
|
-
def #{singular_name}
|
44
|
-
return unless #{
|
45
|
-
#{
|
46
|
-
end
|
48
|
+
def #{singular_name} # def state
|
49
|
+
return unless #{field} # return unless state_id
|
50
|
+
#{values_constant}[#{field}.to_i] # STATES[state_id.to_i]
|
51
|
+
end # end
|
47
52
|
|
48
|
-
def #{singular_name}= new_value
|
49
|
-
|
50
|
-
|
53
|
+
def #{singular_name}= new_value # def state= new_value
|
54
|
+
_, id = #{options_constant}.detect {|value, id| value == new_value } # _, id = STATE_OPTIONS.detect {|value, id| value == new_value }
|
55
|
+
send :#{field}=, id # send :state_id=, id
|
56
|
+
end # end
|
51
57
|
EOT
|
52
58
|
end
|
53
59
|
|
54
60
|
def to_options values
|
55
61
|
if values.is_a? Hash
|
56
|
-
values.sort{|a,b| a.first <=> b.first}.map{|a| a.reverse}
|
62
|
+
values.sort{|a,b| a.first <=> b.first }.map{|a| a.reverse }
|
57
63
|
else
|
58
64
|
ids = (CodedOptions.initial_value..(CodedOptions.initial_value + values.length)).to_a
|
59
65
|
values.zip(ids)
|
data/spec/coded_options_spec.rb
CHANGED
@@ -39,6 +39,15 @@ describe CodedOptions do
|
|
39
39
|
end
|
40
40
|
|
41
41
|
Foo::STATE_OPTIONS.should == [["initial", 1], ["active", 2], ["closed", 3]]
|
42
|
+
|
43
|
+
@foo = Foo.new
|
44
|
+
@foo.state = "active"
|
45
|
+
@foo.state_id.should == 2
|
46
|
+
|
47
|
+
@foo = Foo.new
|
48
|
+
@foo.state_id = 3
|
49
|
+
@foo.state.should == "closed"
|
50
|
+
|
42
51
|
CodedOptions.initial_value = 0
|
43
52
|
end
|
44
53
|
|
@@ -53,6 +62,14 @@ describe CodedOptions do
|
|
53
62
|
|
54
63
|
Foo::STATE_OPTIONS.should == [["initial", 42], ["active", 43], ["closed", 44]]
|
55
64
|
Foo::BAR_OPTIONS.should == [["quux", 0], ["rand", 1]]
|
65
|
+
|
66
|
+
@foo = Foo.new
|
67
|
+
@foo.state = "active"
|
68
|
+
@foo.state_id.should == 43
|
69
|
+
|
70
|
+
@foo = Foo.new
|
71
|
+
@foo.state_id = 44
|
72
|
+
@foo.state.should == "closed"
|
56
73
|
end
|
57
74
|
end
|
58
75
|
|
@@ -83,7 +100,7 @@ describe CodedOptions do
|
|
83
100
|
end
|
84
101
|
|
85
102
|
it "should set a constant containing all the values" do
|
86
|
-
Foo::STATES.should == %w(initial active closed)
|
103
|
+
Foo::STATES.values.should == %w(initial active closed)
|
87
104
|
end
|
88
105
|
|
89
106
|
it "should set a constant containing the ids and values suitable for consumption by select_tag" do
|
metadata
CHANGED
@@ -5,9 +5,9 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 1
|
8
|
+
- 1
|
8
9
|
- 0
|
9
|
-
|
10
|
-
version: 1.0.2
|
10
|
+
version: 1.1.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Jason Dew
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-03-
|
18
|
+
date: 2011-03-07 00:00:00 -05:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -88,6 +88,7 @@ extra_rdoc_files: []
|
|
88
88
|
files:
|
89
89
|
- .gemtest
|
90
90
|
- .gitignore
|
91
|
+
- CHANGELOG
|
91
92
|
- Gemfile
|
92
93
|
- LICENSE
|
93
94
|
- README.md
|