acts-as-optionable 0.3.1 → 0.4.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/README.rdoc +7 -1
- data/VERSION +1 -1
- data/generators/option/templates/create_options.rb +1 -0
- data/generators/option/templates/option.rb +3 -19
- data/lib/acts_as_optionable/acts_as_optionable.rb +3 -2
- data/lib/acts_as_optionable/specify_option.rb +2 -2
- data/spec/acts_as_optionable_spec.rb +17 -4
- metadata +4 -4
data/README.rdoc
CHANGED
@@ -41,8 +41,14 @@ Use #get_option, #set_option, and #delete_option for interacting with options.
|
|
41
41
|
|
42
42
|
You can also store an optional "kind" attribute as a hint to what you are storing:
|
43
43
|
|
44
|
-
style.set_option("bgcolor", "white", "color")
|
44
|
+
style.set_option("bgcolor", "white", :kind => "color")
|
45
45
|
style.get_option("bgcolor").kind => "color"
|
46
|
+
|
47
|
+
You can also store an optional display name for human consumption:
|
48
|
+
|
49
|
+
style.set_option("bgcolor", "white", :display_name => "Background Color")
|
50
|
+
style.get_option("bgcolor").display_name => "Background Color"
|
51
|
+
|
46
52
|
|
47
53
|
=== Specifying default options at the class level
|
48
54
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.4.0
|
@@ -37,34 +37,18 @@ class Option < ActiveRecord::Base
|
|
37
37
|
end
|
38
38
|
|
39
39
|
def display_name
|
40
|
-
name.humanize.titleize
|
40
|
+
read_attribute(:display_name) || name.humanize.titleize
|
41
41
|
end
|
42
42
|
|
43
43
|
def to_h
|
44
44
|
option_hash = {}
|
45
45
|
option_hash["value"] = value
|
46
|
+
option_hash["display_name"] = display_name
|
46
47
|
option_hash["default"] = default if default
|
47
48
|
option_hash["kind"] = kind if kind
|
48
49
|
option_hash.dup
|
49
50
|
end
|
50
|
-
|
51
|
-
# def default_value
|
52
|
-
# @config['default']
|
53
|
-
# end
|
54
|
-
#
|
55
|
-
# def evaluated_value
|
56
|
-
# value && !value.empty? ? value : default_value
|
57
|
-
# end
|
58
|
-
#
|
59
|
-
# def color?
|
60
|
-
# @config['type'] == :color
|
61
|
-
# end
|
62
|
-
#
|
63
|
-
# def config=(h)
|
64
|
-
# @config = h
|
65
|
-
# write_attribute(:name, h['name'])
|
66
|
-
# end
|
67
|
-
|
51
|
+
|
68
52
|
protected
|
69
53
|
|
70
54
|
def value_class_ok?(val)
|
@@ -16,8 +16,8 @@ module ActiveRecord
|
|
16
16
|
|
17
17
|
module IntanceMethods
|
18
18
|
# Store an option persistently and override default option
|
19
|
-
def set_option(name, value,
|
20
|
-
option = get_stored_option(name) || options.build(:name => name.to_s, :value => value, :kind => kind)
|
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])
|
21
21
|
return if new_option_matches_current?(option, value)
|
22
22
|
option.value = value
|
23
23
|
ret = option.save!
|
@@ -67,6 +67,7 @@ module ActiveRecord
|
|
67
67
|
opt_key = name.to_s
|
68
68
|
options[opt_key] = option.value
|
69
69
|
options["#{opt_key}_kind"] = option.kind
|
70
|
+
options["#{opt_key}_display_name"] = option.display_name
|
70
71
|
end
|
71
72
|
OpenStruct.new(options)
|
72
73
|
end
|
@@ -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])
|
9
|
+
optionable_specified_options[name] = Option.new_readonly(:name => name, :default => opts[:default], :kind => opts[:kind], :display_name => opts[:display_name])
|
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, :default => attributes[:default], :kind => attributes[:kind])
|
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])
|
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"
|
12
|
+
specify_option :bar, :default => "BARBAR", :kind => "example", :display_name => "Bar Bar"
|
13
13
|
end
|
14
14
|
|
15
15
|
class NoSpecifiedMixin < Mixin
|
@@ -28,6 +28,7 @@ def setup_db
|
|
28
28
|
|
29
29
|
create_table :options do |t|
|
30
30
|
t.string :name
|
31
|
+
t.string :display_name
|
31
32
|
t.string :value
|
32
33
|
t.string :kind
|
33
34
|
t.references :optionable, :polymorphic => true
|
@@ -79,6 +80,9 @@ describe "ActsAsOptionable" do
|
|
79
80
|
@optionable.get_option(:bar).kind.should == "example"
|
80
81
|
end
|
81
82
|
|
83
|
+
it "should be able to specify a display name" do
|
84
|
+
@optionable.get_option(:bar).display_name.should == "Bar Bar"
|
85
|
+
end
|
82
86
|
|
83
87
|
it "should not mix specifications across unrelated classes" do
|
84
88
|
class Foobar < Mixin
|
@@ -119,6 +123,11 @@ describe "ActsAsOptionable" do
|
|
119
123
|
@optionable.get_option(:kind_is_set).kind.should == "example_kind"
|
120
124
|
end
|
121
125
|
|
126
|
+
it "should have the display name if set" do
|
127
|
+
@optionable.instance_specified_options = @options_template.merge(:display_name_is_set => {:default => "kind_is_set", :kind => "example_kind", :display_name => "Example Name" })
|
128
|
+
@optionable.get_option(:display_name_is_set).display_name.should == "Example Name"
|
129
|
+
end
|
130
|
+
|
122
131
|
it "should not have the kind if none was provided" do
|
123
132
|
@optionable.instance_specified_options = @options_template
|
124
133
|
@optionable.get_option(:fizz).kind.should be_blank
|
@@ -196,7 +205,7 @@ describe "ActsAsOptionable" do
|
|
196
205
|
end
|
197
206
|
|
198
207
|
it "should allowing storing the option kind" do
|
199
|
-
@optionable.set_option(@key, "red", "color")
|
208
|
+
@optionable.set_option(@key, "red", :kind => "color")
|
200
209
|
@optionable.get_option(@key).kind.should == "color"
|
201
210
|
end
|
202
211
|
|
@@ -289,7 +298,7 @@ describe "ActsAsOptionable" do
|
|
289
298
|
it "should contain both set and default options" do
|
290
299
|
@optionable.instance_specified_options = @options_template
|
291
300
|
@optionable.set_option("example_option", 99)
|
292
|
-
|
301
|
+
option_values = @optionable.options_values_struct
|
293
302
|
option_values.foo.should == "FOOFOO"
|
294
303
|
option_values.fizz.should == "FIZZFIZZ"
|
295
304
|
option_values.example_option.should == 99
|
@@ -298,7 +307,7 @@ describe "ActsAsOptionable" do
|
|
298
307
|
|
299
308
|
describe "getting options and defaults as a hash" do
|
300
309
|
before(:each) do
|
301
|
-
@optionable.set_option("example_option", "example_value")
|
310
|
+
@optionable.set_option("example_option", "example_value", :kind => "example", :display_name => "Example Name")
|
302
311
|
@options_and_defaults_hash = @optionable.options_and_defaults_hash
|
303
312
|
end
|
304
313
|
|
@@ -319,5 +328,9 @@ describe "ActsAsOptionable" do
|
|
319
328
|
@options_and_defaults_hash["bar"]["default"].should == "BARBAR"
|
320
329
|
@options_and_defaults_hash["bar"]["kind"].should == "example"
|
321
330
|
end
|
331
|
+
|
332
|
+
it "should include the display name" do
|
333
|
+
@options_and_defaults_hash["example_option"]["display_name"].should == "Example Name"
|
334
|
+
end
|
322
335
|
end
|
323
336
|
end
|
metadata
CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
|
|
4
4
|
prerelease: false
|
5
5
|
segments:
|
6
6
|
- 0
|
7
|
-
-
|
8
|
-
-
|
9
|
-
version: 0.
|
7
|
+
- 4
|
8
|
+
- 0
|
9
|
+
version: 0.4.0
|
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-04-
|
17
|
+
date: 2010-04-30 00:00:00 -07:00
|
18
18
|
default_executable:
|
19
19
|
dependencies: []
|
20
20
|
|