rails-settings-cached 0.2.4 → 0.3.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.
- checksums.yaml +7 -0
- data/README.md +9 -1
- data/lib/generators/settings/templates/model.rb +0 -1
- data/lib/rails-settings/cached_settings.rb +11 -12
- data/lib/rails-settings/extend.rb +20 -12
- data/lib/rails-settings/scoped_settings.rb +1 -1
- data/lib/rails-settings/settings.rb +15 -10
- metadata +15 -14
    
        checksums.yaml
    ADDED
    
    | @@ -0,0 +1,7 @@ | |
| 1 | 
            +
            ---
         | 
| 2 | 
            +
            SHA1:
         | 
| 3 | 
            +
              metadata.gz: c8b23098050aa4759654409c3c89868a28f75053
         | 
| 4 | 
            +
              data.tar.gz: 3aea3f6687a9248d88ff6512130a3646e53c7107
         | 
| 5 | 
            +
            SHA512:
         | 
| 6 | 
            +
              metadata.gz: caf5df986fc15f69e417409c6617a3c40026e6d9383d82007970699860a3fcff6390cf6393fe200200256be373c79979c26560d7db1c8e6ba71cdae1be288d5b
         | 
| 7 | 
            +
              data.tar.gz: a74798f521363fdf8a44a6bbae620b9fca61b56ce29553805416c23bdb5702d6bc15502f2bf5a1339e68fe9a1331e135721de46394c6d700f2782f003f1bbaa2
         | 
    
        data/README.md
    CHANGED
    
    | @@ -25,6 +25,14 @@ Generate your settings: | |
| 25 25 | 
             
            $ rails g settings <settings_name>
         | 
| 26 26 | 
             
            ```
         | 
| 27 27 |  | 
| 28 | 
            +
            Note: If you migrating from gem `rails-settings` then make sure you have it in your model
         | 
| 29 | 
            +
             | 
| 30 | 
            +
            ```ruby
         | 
| 31 | 
            +
            class Settings < RailsSettings::CachedSettings
         | 
| 32 | 
            +
              ...
         | 
| 33 | 
            +
            end
         | 
| 34 | 
            +
            ```
         | 
| 35 | 
            +
             | 
| 28 36 | 
             
            Now just put that migration in the database with:
         | 
| 29 37 |  | 
| 30 38 | 
             
            ```bash
         | 
| @@ -101,7 +109,7 @@ Setting.some_setting | |
| 101 109 | 
             
            Init defualt value in database, this has indifferent with `Setting.defaults[:some_setting]`, this will **save the value into database**:
         | 
| 102 110 |  | 
| 103 111 | 
             
            ```ruby
         | 
| 104 | 
            -
            Setting.save_default(:some_key | 
| 112 | 
            +
            Setting.save_default(:some_key, "123")
         | 
| 105 113 | 
             
            Setting.where(:var => "some_key").count
         | 
| 106 114 | 
             
            => 1
         | 
| 107 115 | 
             
            Setting.some_key 
         | 
| @@ -1,18 +1,17 @@ | |
| 1 1 | 
             
            module RailsSettings
         | 
| 2 | 
            -
             | 
| 2 | 
            +
              class CachedSettings < Settings
         | 
| 3 3 | 
             
                after_update :rewrite_cache    
         | 
| 4 4 | 
             
                after_create :rewrite_cache
         | 
| 5 | 
            -
             | 
| 6 | 
            -
             | 
| 7 | 
            -
             | 
| 5 | 
            +
                def rewrite_cache
         | 
| 6 | 
            +
                  Rails.cache.write("settings:#{self.var}", self.value)
         | 
| 7 | 
            +
                end
         | 
| 8 8 |  | 
| 9 | 
            -
             | 
| 9 | 
            +
                after_destroy { |record| Rails.cache.delete("settings:#{record.var}") }
         | 
| 10 10 |  | 
| 11 | 
            -
             | 
| 12 | 
            -
             | 
| 13 | 
            -
             | 
| 14 | 
            -
             | 
| 15 | 
            -
            			}
         | 
| 11 | 
            +
                def self.[](var_name)
         | 
| 12 | 
            +
                  obj = Rails.cache.fetch("settings:#{var_name}") {
         | 
| 13 | 
            +
                    super(var_name)
         | 
| 14 | 
            +
                  }
         | 
| 16 15 | 
             
                  obj || @@defaults[var_name.to_s]
         | 
| 17 16 | 
             
                end    
         | 
| 18 17 |  | 
| @@ -21,5 +20,5 @@ module RailsSettings | |
| 21 20 | 
             
                    self.send("#{key}=",value)
         | 
| 22 21 | 
             
                  end
         | 
| 23 22 | 
             
                end
         | 
| 24 | 
            -
             | 
| 25 | 
            -
            end
         | 
| 23 | 
            +
              end
         | 
| 24 | 
            +
            end
         | 
| @@ -3,21 +3,29 @@ module RailsSettings | |
| 3 3 | 
             
                extend ActiveSupport::Concern
         | 
| 4 4 |  | 
| 5 5 | 
             
                included do 
         | 
| 6 | 
            -
                  scope :with_settings,  | 
| 7 | 
            -
             | 
| 8 | 
            -
             | 
| 6 | 
            +
                  scope :with_settings, -> {
         | 
| 7 | 
            +
                    joins("JOIN settings ON (settings.thing_id = #{self.table_name}.#{self.primary_key} AND
         | 
| 8 | 
            +
                                                           settings.thing_type = '#{self.base_class.name}')")
         | 
| 9 | 
            +
                    .select("DISTINCT #{self.table_name}.*")
         | 
| 10 | 
            +
                  } 
         | 
| 11 | 
            +
                                         
         | 
| 9 12 |  | 
| 10 | 
            -
                  scope :with_settings_for,  | 
| 11 | 
            -
             | 
| 13 | 
            +
                  scope :with_settings_for, -> (var) { 
         | 
| 14 | 
            +
                    joins("JOIN settings ON (settings.thing_id = #{self.table_name}.#{self.primary_key} AND
         | 
| 15 | 
            +
                          settings.thing_type = '#{self.base_class.name}') AND settings.var = '#{var}'") 
         | 
| 16 | 
            +
                  }
         | 
| 12 17 |  | 
| 13 | 
            -
                  scope :without_settings,  | 
| 14 | 
            -
             | 
| 15 | 
            -
             | 
| 18 | 
            +
                  scope :without_settings, -> {
         | 
| 19 | 
            +
                    joins("LEFT JOIN settings ON (settings.thing_id = #{self.table_name}.#{self.primary_key} AND settings.thing_type = '#{self.base_class.name}')")
         | 
| 20 | 
            +
                    .where("settings.id IS NULL")    
         | 
| 21 | 
            +
                  } 
         | 
| 16 22 |  | 
| 17 | 
            -
                  scope :without_settings_for,  | 
| 18 | 
            -
             | 
| 19 | 
            -
             | 
| 20 | 
            -
             | 
| 23 | 
            +
                  scope :without_settings_for, -> (var) { 
         | 
| 24 | 
            +
                    where('settings.id IS NULL')
         | 
| 25 | 
            +
                    .joins("LEFT JOIN settings ON (settings.thing_id = #{self.table_name}.#{self.primary_key} AND
         | 
| 26 | 
            +
                           settings.thing_type = '#{self.base_class.name}') AND settings.var = '#{var}'")
         | 
| 27 | 
            +
                  }
         | 
| 28 | 
            +
                                                                                                
         | 
| 21 29 | 
             
                end
         | 
| 22 30 |  | 
| 23 31 | 
             
                def settings
         | 
| @@ -2,7 +2,7 @@ module RailsSettings | |
| 2 2 | 
             
              class Settings < ActiveRecord::Base
         | 
| 3 3 |  | 
| 4 4 | 
             
                self.table_name = 'settings'
         | 
| 5 | 
            -
                attr_accessible :var
         | 
| 5 | 
            +
                # attr_accessible :var
         | 
| 6 6 |  | 
| 7 7 | 
             
                class SettingNotFound < RuntimeError; end
         | 
| 8 8 |  | 
| @@ -18,18 +18,15 @@ module RailsSettings | |
| 18 18 | 
             
                def self.method_missing(method, *args)
         | 
| 19 19 | 
             
                  method_name = method.to_s
         | 
| 20 20 | 
             
                  super(method, *args)
         | 
| 21 | 
            -
             | 
| 22 21 | 
             
                rescue NoMethodError
         | 
| 23 22 | 
             
                  #set a value for a variable
         | 
| 24 23 | 
             
                  if method_name =~ /=$/
         | 
| 25 24 | 
             
                    var_name = method_name.gsub('=', '')
         | 
| 26 25 | 
             
                    value = args.first
         | 
| 27 26 | 
             
                    self[var_name] = value
         | 
| 28 | 
            -
             | 
| 29 27 | 
             
                  #retrieve a value
         | 
| 30 28 | 
             
                  else
         | 
| 31 29 | 
             
                    self[method_name]
         | 
| 32 | 
            -
             | 
| 33 30 | 
             
                  end
         | 
| 34 31 | 
             
                end
         | 
| 35 32 |  | 
| @@ -45,9 +42,11 @@ module RailsSettings | |
| 45 42 | 
             
                end
         | 
| 46 43 |  | 
| 47 44 | 
             
                #retrieve all settings as a hash (optionally starting with a given namespace)
         | 
| 48 | 
            -
                def self.all(starting_with=nil)
         | 
| 49 | 
            -
                   | 
| 50 | 
            -
                   | 
| 45 | 
            +
                def self.all(starting_with = nil)
         | 
| 46 | 
            +
                  vars = thing_scoped.select("var,value")
         | 
| 47 | 
            +
                  if starting_with
         | 
| 48 | 
            +
                    vars = vars.where("var LIKE '#{starting_with}%'")
         | 
| 49 | 
            +
                  end
         | 
| 51 50 |  | 
| 52 51 | 
             
                  result = {}
         | 
| 53 52 | 
             
                  vars.each do |record|
         | 
| @@ -55,7 +54,14 @@ module RailsSettings | |
| 55 54 | 
             
                  end
         | 
| 56 55 | 
             
                  result.with_indifferent_access
         | 
| 57 56 | 
             
                end
         | 
| 58 | 
            -
             | 
| 57 | 
            +
                
         | 
| 58 | 
            +
                def self.where(sql = nil)
         | 
| 59 | 
            +
                  if sql
         | 
| 60 | 
            +
                    vars = thing_scoped.where(sql)
         | 
| 61 | 
            +
                  end
         | 
| 62 | 
            +
                  vars
         | 
| 63 | 
            +
                end
         | 
| 64 | 
            +
                
         | 
| 59 65 | 
             
                #get a setting value by [] notation
         | 
| 60 66 | 
             
                def self.[](var_name)
         | 
| 61 67 | 
             
                  if var = object(var_name)
         | 
| @@ -105,9 +111,8 @@ module RailsSettings | |
| 105 111 | 
             
                end
         | 
| 106 112 |  | 
| 107 113 | 
             
                def self.thing_scoped
         | 
| 108 | 
            -
                   | 
| 114 | 
            +
                  unscoped.where("thing_type is NULL and thing_id is NULL")
         | 
| 109 115 | 
             
                end
         | 
| 110 116 |  | 
| 111 | 
            -
             | 
| 112 117 | 
             
              end
         | 
| 113 118 | 
             
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,8 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: rails-settings-cached
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0. | 
| 5 | 
            -
              prerelease: 
         | 
| 4 | 
            +
              version: 0.3.0
         | 
| 6 5 | 
             
            platform: ruby
         | 
| 7 6 | 
             
            authors:
         | 
| 8 7 | 
             
            - Squeegy
         | 
| @@ -12,19 +11,22 @@ authors: | |
| 12 11 | 
             
            autorequire: 
         | 
| 13 12 | 
             
            bindir: bin
         | 
| 14 13 | 
             
            cert_chain: []
         | 
| 15 | 
            -
            date:  | 
| 14 | 
            +
            date: 2013-02-26 00:00:00.000000000 Z
         | 
| 16 15 | 
             
            dependencies:
         | 
| 17 16 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 18 17 | 
             
              name: rails
         | 
| 19 | 
            -
              requirement:  | 
| 20 | 
            -
                none: false
         | 
| 18 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 21 19 | 
             
                requirements:
         | 
| 22 | 
            -
                - -  | 
| 20 | 
            +
                - - '>='
         | 
| 23 21 | 
             
                  - !ruby/object:Gem::Version
         | 
| 24 | 
            -
                    version:  | 
| 22 | 
            +
                    version: 4.0.0.beta1
         | 
| 25 23 | 
             
              type: :runtime
         | 
| 26 24 | 
             
              prerelease: false
         | 
| 27 | 
            -
              version_requirements:  | 
| 25 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 26 | 
            +
                requirements:
         | 
| 27 | 
            +
                - - '>='
         | 
| 28 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 29 | 
            +
                    version: 4.0.0.beta1
         | 
| 28 30 | 
             
            description: 
         | 
| 29 31 | 
             
            email: huacnlee@gmail.com
         | 
| 30 32 | 
             
            executables: []
         | 
| @@ -42,27 +44,26 @@ files: | |
| 42 44 | 
             
            - README.md
         | 
| 43 45 | 
             
            homepage: https://github.com/huacnlee/rails-settings-cached
         | 
| 44 46 | 
             
            licenses: []
         | 
| 47 | 
            +
            metadata: {}
         | 
| 45 48 | 
             
            post_install_message: 
         | 
| 46 49 | 
             
            rdoc_options: []
         | 
| 47 50 | 
             
            require_paths:
         | 
| 48 51 | 
             
            - lib
         | 
| 49 52 | 
             
            required_ruby_version: !ruby/object:Gem::Requirement
         | 
| 50 | 
            -
              none: false
         | 
| 51 53 | 
             
              requirements:
         | 
| 52 | 
            -
              - -  | 
| 54 | 
            +
              - - '>='
         | 
| 53 55 | 
             
                - !ruby/object:Gem::Version
         | 
| 54 56 | 
             
                  version: '0'
         | 
| 55 57 | 
             
            required_rubygems_version: !ruby/object:Gem::Requirement
         | 
| 56 | 
            -
              none: false
         | 
| 57 58 | 
             
              requirements:
         | 
| 58 | 
            -
              - -  | 
| 59 | 
            +
              - - '>='
         | 
| 59 60 | 
             
                - !ruby/object:Gem::Version
         | 
| 60 61 | 
             
                  version: '0'
         | 
| 61 62 | 
             
            requirements: []
         | 
| 62 63 | 
             
            rubyforge_project: 
         | 
| 63 | 
            -
            rubygems_version:  | 
| 64 | 
            +
            rubygems_version: 2.0.0
         | 
| 64 65 | 
             
            signing_key: 
         | 
| 65 | 
            -
            specification_version:  | 
| 66 | 
            +
            specification_version: 4
         | 
| 66 67 | 
             
            summary: This is imporved from rails-settings, added caching. Settings is a plugin
         | 
| 67 68 | 
             
              that makes managing a table of global key, value pairs easy. Think of it like a
         | 
| 68 69 | 
             
              global Hash stored in you database, that uses simple ActiveRecord like methods for
         |