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 +7 -3
 - data/Rakefile +1 -1
 - data/VERSION +1 -1
 - data/generators/option/option_generator.rb +13 -0
 - data/generators/option/templates/create_options.rb +15 -0
 - data/generators/option/templates/option.rb +65 -0
 - metadata +6 -3
 
    
        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.  
     | 
| 
      
 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. 
     | 
| 
      
 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 
     | 
    
         
            -
              -  
     | 
| 
       9 
     | 
    
         
            -
              version: 0.2. 
     | 
| 
      
 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- 
     | 
| 
      
 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
         
     |