acts-as-optionable 0.2.0 → 0.2.1

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 CHANGED
@@ -19,7 +19,7 @@ Available as a gem:
19
19
  This creates an Option model in you app.
20
20
 
21
21
  1. script/generate option
22
- 2. Rake db:migrate
22
+ 2. rake db:migrate
23
23
 
24
24
  == Usage
25
25
 
@@ -38,19 +38,24 @@ Use #get_option, #set_option, and #delete_option for interacting with options.
38
38
  style.get_option("color").value => "red"
39
39
  style.delete_option("color")
40
40
  style.get_option("color") => nil
41
+
42
+ You can also store an optional "kind" attribute as a hint to what you are storing:
41
43
 
44
+ style.set_option("bgcolor", "white", "color")
45
+ style.get_option("bgcolor").kind => "color"
42
46
 
43
47
  === Specifying default options at the class level
44
48
 
45
49
  class StyleWithDefaults < ActiveRecord::Base
46
50
  acts_as_optionable
47
51
 
48
- specify_option :background_color, :default => "white"
52
+ specify_option :background_color, :default => "white", :kind => "color"
49
53
  specify_option :color, :default => "black"
50
54
  end
51
55
 
52
56
  style = StyleWithDefaults.create
53
57
  style.get_option("background_color").value => "white"
58
+ style.get_option("background_color").kind => "color"
54
59
 
55
60
  === Specifying instance options at runtime
56
61
 
@@ -110,6 +115,5 @@ This is useful, for instance, for passing a set of options into a liquid templat
110
115
  * Thinking about finding a way to optionally associate the option with an asset table. This would be useful for allowing user defined stylesheet options referencing S3 assets.
111
116
  * Add in a way to return an option value straight away.
112
117
  * Assign multiple settings at a time.
113
- * Add a type or hint storage on options (i.e. this option is for a color)
114
118
 
115
119
  Copyright (c) 2010 Brendon Murphy, released under the MIT license
data/Rakefile CHANGED
@@ -11,7 +11,7 @@ begin
11
11
  gemspec.email = "xternal1+aao@gmail.com"
12
12
  gemspec.homepage = "http://github.com/bemurphy/acts_as_optionable"
13
13
  gemspec.authors = ["Brendon Murphy"]
14
- gemspec.files = FileList["[A-Z]*", "{lib,spec,rails}/**/*"] - FileList["**/*.log"]
14
+ gemspec.files = FileList["[A-Z]*", "{lib,spec,rails,generators}/**/*"] - FileList["**/*.log"]
15
15
  end
16
16
  Jeweler::GemcutterTasks.new
17
17
  rescue LoadError
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.0
1
+ 0.2.1
@@ -0,0 +1,13 @@
1
+ class OptionGenerator < Rails::Generator::Base
2
+ def manifest
3
+ record do |m|
4
+ m.directory 'app/models'
5
+ m.file 'option.rb', 'app/models/option.rb'
6
+ m.migration_template "create_options.rb", "db/migrate"
7
+ end
8
+ end
9
+
10
+ def file_name
11
+ "create_options"
12
+ end
13
+ end
@@ -0,0 +1,15 @@
1
+ class CreateOptions < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :options do |t|
4
+ t.string :name
5
+ t.string :value
6
+ t.string :kind
7
+ t.references :optionable, :polymorphic => true
8
+ t.timestamps
9
+ end
10
+ end
11
+
12
+ def self.down
13
+ drop_table :options
14
+ end
15
+ end
@@ -0,0 +1,65 @@
1
+ class Option < ActiveRecord::Base
2
+ include ActiveRecord::Acts::Optionable
3
+ extend ActiveSupport::Memoizable
4
+
5
+ belongs_to :optionable, :polymorphic => true
6
+
7
+ default_scope :order => 'created_at ASC'
8
+
9
+ validates_uniqueness_of :name, :scope => [:optionable_id, :optionable_type]
10
+ validates_presence_of [:optionable_type, :optionable_id]
11
+
12
+ attr_accessor :default
13
+
14
+ def self.new_readonly(attrs)
15
+ option = new(attrs)
16
+ option.readonly!
17
+ option
18
+ end
19
+
20
+ def value
21
+ val = read_attribute(:value)
22
+ val ? YAML.load(val) : default
23
+ end
24
+ memoize :value
25
+
26
+ def value_or_default
27
+ value || default
28
+ end
29
+ memoize :value_or_default
30
+
31
+ def value=(val)
32
+ unless value_class_ok?(val)
33
+ raise ArgumentError, "Only store booleans, numbers, and strings, please"
34
+ end
35
+
36
+ write_attribute(:value, val.to_yaml)
37
+ end
38
+
39
+ def display_name
40
+ name.humanize.titleize
41
+ end
42
+
43
+ # def default_value
44
+ # @config['default']
45
+ # end
46
+ #
47
+ # def evaluated_value
48
+ # value && !value.empty? ? value : default_value
49
+ # end
50
+ #
51
+ # def color?
52
+ # @config['type'] == :color
53
+ # end
54
+ #
55
+ # def config=(h)
56
+ # @config = h
57
+ # write_attribute(:name, h['name'])
58
+ # end
59
+
60
+ protected
61
+
62
+ def value_class_ok?(val)
63
+ val.is_a?(TrueClass) || val.is_a?(FalseClass) || val.kind_of?(Numeric) || val.is_a?(String)
64
+ end
65
+ end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 2
8
- - 0
9
- version: 0.2.0
8
+ - 1
9
+ version: 0.2.1
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-26 00:00:00 -07:00
17
+ date: 2010-04-27 00:00:00 -07:00
18
18
  default_executable:
19
19
  dependencies: []
20
20
 
@@ -31,6 +31,9 @@ files:
31
31
  - README.rdoc
32
32
  - Rakefile
33
33
  - VERSION
34
+ - generators/option/option_generator.rb
35
+ - generators/option/templates/create_options.rb
36
+ - generators/option/templates/option.rb
34
37
  - lib/acts-as-optionable.rb
35
38
  - lib/acts_as_optionable/acts_as_optionable.rb
36
39
  - lib/acts_as_optionable/option_methods.rb