acts-as-optionable 0.4.1 → 0.4.2
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.rdoc +7 -1
- data/VERSION +1 -1
- data/generators/option/templates/create_options.rb +1 -0
- data/generators/option/templates/option.rb +1 -0
- data/lib/acts_as_optionable/acts_as_optionable.rb +1 -1
- data/lib/acts_as_optionable/specify_option.rb +2 -2
- data/spec/acts_as_optionable_spec.rb +22 -3
- metadata +3 -3
data/README.rdoc
CHANGED
@@ -44,6 +44,11 @@ You can also store an optional "kind" attribute as a hint to what you are storin
|
|
44
44
|
style.set_option("bgcolor", "white", :kind => "color")
|
45
45
|
style.get_option("bgcolor").kind => "color"
|
46
46
|
|
47
|
+
Add a "category" if you want to group options:
|
48
|
+
|
49
|
+
style.set_option("bgcolor", "white", :category => "colors")
|
50
|
+
style.get_option("bgcolor").category => "colors"
|
51
|
+
|
47
52
|
You can also store an optional display name for human consumption:
|
48
53
|
|
49
54
|
style.set_option("bgcolor", "white", :display_name => "Background Color")
|
@@ -55,13 +60,14 @@ You can also store an optional display name for human consumption:
|
|
55
60
|
class StyleWithDefaults < ActiveRecord::Base
|
56
61
|
acts_as_optionable
|
57
62
|
|
58
|
-
specify_option :background_color, :default => "white", :kind => "color"
|
63
|
+
specify_option :background_color, :default => "white", :kind => "color", :category => "background"
|
59
64
|
specify_option :color, :default => "black"
|
60
65
|
end
|
61
66
|
|
62
67
|
style = StyleWithDefaults.create
|
63
68
|
style.get_option("background_color").value => "white"
|
64
69
|
style.get_option("background_color").kind => "color"
|
70
|
+
style.get_option("background_color").category => "background"
|
65
71
|
|
66
72
|
=== Specifying instance options at runtime
|
67
73
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.4.
|
1
|
+
0.4.2
|
@@ -17,7 +17,7 @@ module ActiveRecord
|
|
17
17
|
module IntanceMethods
|
18
18
|
# Store an option persistently and override default option
|
19
19
|
def set_option(name, value, opts = {})
|
20
|
-
option = get_stored_option(name) || options.build(:name => name.to_s, :value => value, :kind => opts[:kind], :display_name => opts[:display_name])
|
20
|
+
option = get_stored_option(name) || options.build(:name => name.to_s, :value => value, :kind => opts[:kind], :display_name => opts[:display_name], :category => opts[:category])
|
21
21
|
return if !opts[:force_set] && new_option_matches_current?(option, value)
|
22
22
|
option.value = value
|
23
23
|
ret = option.save!
|
@@ -6,7 +6,7 @@ module ActiveRecord
|
|
6
6
|
# Setup a default value at the class level.
|
7
7
|
def specify_option(option_name, opts = {})
|
8
8
|
name = option_name.to_s
|
9
|
-
optionable_specified_options[name] = Option.new_readonly(:name => name, :default => opts[:default], :kind => opts[:kind], :display_name => opts[:display_name])
|
9
|
+
optionable_specified_options[name] = Option.new_readonly(:name => name, :default => opts[:default], :kind => opts[:kind], :display_name => opts[:display_name], :category => opts[:category])
|
10
10
|
end
|
11
11
|
|
12
12
|
# Returns a hash of options specified at the class level
|
@@ -40,7 +40,7 @@ module ActiveRecord
|
|
40
40
|
@instance_specified_options = {}
|
41
41
|
opts.each do |option_name, attributes|
|
42
42
|
attributes.symbolize_keys!
|
43
|
-
@instance_specified_options[option_name.to_s] = Option.new_readonly(:name => option_name.to_s, :default => attributes[:default], :kind => attributes[:kind], :display_name => attributes[:display_name])
|
43
|
+
@instance_specified_options[option_name.to_s] = Option.new_readonly(:name => option_name.to_s, :default => attributes[:default], :kind => attributes[:kind], :display_name => attributes[:display_name], :category => attributes[:category])
|
44
44
|
end
|
45
45
|
end
|
46
46
|
end
|
@@ -9,7 +9,7 @@ class SpecifiedMixin < Mixin
|
|
9
9
|
acts_as_optionable
|
10
10
|
|
11
11
|
specify_option :foo, :default => "FOOFOO"
|
12
|
-
specify_option :bar, :default => "BARBAR", :kind => "example", :display_name => "Bar Bar"
|
12
|
+
specify_option :bar, :default => "BARBAR", :kind => "example", :display_name => "Bar Bar", :category => "tabs"
|
13
13
|
end
|
14
14
|
|
15
15
|
class NoSpecifiedMixin < Mixin
|
@@ -31,6 +31,7 @@ def setup_db
|
|
31
31
|
t.string :display_name
|
32
32
|
t.string :value
|
33
33
|
t.string :kind
|
34
|
+
t.string :category
|
34
35
|
t.references :optionable, :polymorphic => true
|
35
36
|
t.timestamps
|
36
37
|
end
|
@@ -84,6 +85,10 @@ describe "ActsAsOptionable" do
|
|
84
85
|
@optionable.get_option(:bar).display_name.should == "Bar Bar"
|
85
86
|
end
|
86
87
|
|
88
|
+
it "should be able to specify a category" do
|
89
|
+
@optionable.get_option(:bar).category.should == "tabs"
|
90
|
+
end
|
91
|
+
|
87
92
|
it "should not mix specifications across unrelated classes" do
|
88
93
|
class Foobar < Mixin
|
89
94
|
acts_as_optionable
|
@@ -123,6 +128,11 @@ describe "ActsAsOptionable" do
|
|
123
128
|
@optionable.get_option(:kind_is_set).kind.should == "example_kind"
|
124
129
|
end
|
125
130
|
|
131
|
+
it "should have the category if set" do
|
132
|
+
@optionable.instance_specified_options = @options_template.merge(:category_is_set => {:default => "category_is_set", :category => "tabs" })
|
133
|
+
@optionable.get_option(:category_is_set).category.should == "tabs"
|
134
|
+
end
|
135
|
+
|
126
136
|
it "should have the display name if set" do
|
127
137
|
@optionable.instance_specified_options = @options_template.merge(:display_name_is_set => {:default => "kind_is_set", :kind => "example_kind", :display_name => "Example Name" })
|
128
138
|
@optionable.get_option(:display_name_is_set).display_name.should == "Example Name"
|
@@ -204,11 +214,16 @@ describe "ActsAsOptionable" do
|
|
204
214
|
@optionable.get_option(@key).value.should be_false
|
205
215
|
end
|
206
216
|
|
207
|
-
it "should
|
217
|
+
it "should allow storing the option kind" do
|
208
218
|
@optionable.set_option(@key, "red", :kind => "color")
|
209
219
|
@optionable.get_option(@key).kind.should == "color"
|
210
220
|
end
|
211
221
|
|
222
|
+
it "should allow storing the option category" do
|
223
|
+
@optionable.set_option(@key, "foo", :category => "tabs")
|
224
|
+
@optionable.get_option(@key).category.should == "tabs"
|
225
|
+
end
|
226
|
+
|
212
227
|
it "should not update the option if it already matches current" do
|
213
228
|
@optionable.set_option(@key, "red", "color")
|
214
229
|
timestamp = @optionable.get_option(@key).updated_at.dup
|
@@ -314,7 +329,7 @@ describe "ActsAsOptionable" do
|
|
314
329
|
|
315
330
|
describe "getting options and defaults as a hash" do
|
316
331
|
before(:each) do
|
317
|
-
@optionable.set_option("example_option", "example_value", :kind => "example", :display_name => "Example Name")
|
332
|
+
@optionable.set_option("example_option", "example_value", :kind => "example", :display_name => "Example Name", :category => "tabs")
|
318
333
|
@options_and_defaults_hash = @optionable.options_and_defaults_hash
|
319
334
|
end
|
320
335
|
|
@@ -336,6 +351,10 @@ describe "ActsAsOptionable" do
|
|
336
351
|
@options_and_defaults_hash["bar"]["kind"].should == "example"
|
337
352
|
end
|
338
353
|
|
354
|
+
it "should include the category" do
|
355
|
+
@options_and_defaults_hash["example_option"]["category"].should == "tabs"
|
356
|
+
end
|
357
|
+
|
339
358
|
it "should include the display name" do
|
340
359
|
@options_and_defaults_hash["example_option"]["display_name"].should == "Example Name"
|
341
360
|
end
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 4
|
8
|
-
-
|
9
|
-
version: 0.4.
|
8
|
+
- 2
|
9
|
+
version: 0.4.2
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Brendon Murphy
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-05-
|
17
|
+
date: 2010-05-06 00:00:00 -07:00
|
18
18
|
default_executable:
|
19
19
|
dependencies: []
|
20
20
|
|