rails-settings-cached 0.5.4 → 0.5.5

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 573145ca5a45516e138312ff9b35338e97b2a12b
4
- data.tar.gz: 4e55fec2760056d075ae1cd330d5d26cc6cd7a0b
3
+ metadata.gz: caebc0d7ac88a78fec43016475b3ed2e9e22a730
4
+ data.tar.gz: 05861d98bbece04178fec89687f2310a42a31194
5
5
  SHA512:
6
- metadata.gz: 5844cac704005e2d797f1e6d9bcd770f480f84f3ee5eba29aae25f4a0e67466863ff14cdd94b2e95e955a5a07a8d19c85b31cfdb7318f141b42772e877147e03
7
- data.tar.gz: f9dcf649734ed373921eaab2fee33257beb68e785841268c4eba98c1bb610172647bec696dd911a70f489852fc30bfe1aee1bf0f46c3065018f68c9d2ee66048
6
+ metadata.gz: 3c814d540d0f548744d4c10ced5de27142b56f4d50519ab33e7b9b8435d11970ee1cf6fce0f747df8ac33e9ecd64a115e105267e569055ae430d66e6608c1b72
7
+ data.tar.gz: f2f7b6c1ce43c34f6917a5ad9396d40735093fd06778d891c74c0cf6f4062ebcc3ee4aa5f833dc42926b2c11eccbd3e2ae9fe533daf42d470e305abea14e7b9e
data/README.md CHANGED
@@ -9,13 +9,17 @@ of object. Strings, numbers, arrays, or any object.
9
9
 
10
10
  ## Status
11
11
 
12
- [![Gem Version](https://badge.fury.io/rb/rails-settings-cached.svg)](https://rubygems.org/gems/rails-settings-cached) [![CI Status](https://api.travis-ci.org/huacnlee/rails-settings-cached.svg)](http://travis-ci.org/huacnlee/rails-settings-cached)
12
+ [![Gem Version](https://badge.fury.io/rb/rails-settings-cached.svg)](https://rubygems.org/gems/rails-settings-cached) [![CI Status](https://api.travis-ci.org/huacnlee/rails-settings-cached.svg)](http://travis-ci.org/huacnlee/rails-settings-cached) [![Code Climate](https://codeclimate.com/github/huacnlee/rails-settings-cached/badges/gpa.svg)](https://codeclimate.com/github/huacnlee/rails-settings-cached) [![codecov.io](https://codecov.io/github/huacnlee/rails-settings-cached/coverage.svg?branch=master)](https://codecov.io/github/huacnlee/rails-settings-cached?branch=master)
13
13
 
14
14
  ## Setup
15
15
 
16
16
  Edit your Gemfile:
17
17
 
18
18
  ```ruby
19
+ # Rails 5.0.x
20
+ gem 'rails-settings-cached', '~> 0.6.0'
21
+ # Rails 4.2.x
22
+ gem 'rails-settings-cached', "~> 0.5.4"
19
23
  # Rails 4.1.x
20
24
  gem "rails-settings-cached", "~> 0.4.0"
21
25
  # Rails 4+
@@ -27,15 +31,13 @@ gem "rails-settings-cached", "0.2.4"
27
31
  Generate your settings:
28
32
 
29
33
  ```bash
30
- $ rails g settings <settings_name>
34
+ $ rails g settings:install
31
35
  ```
32
36
 
33
- Note: If you migrating from gem `rails-settings` then make sure you have it in your model
37
+ If you want custom model name:
34
38
 
35
- ```ruby
36
- class Settings < RailsSettings::CachedSettings
37
- ...
38
- end
39
+ ```bash
40
+ $ rails g settings:install MySetting
39
41
  ```
40
42
 
41
43
  Now just put that migration in the database with:
@@ -0,0 +1,33 @@
1
+ require 'rails/generators'
2
+ require 'rails/generators/migration'
3
+
4
+ module Settings
5
+ class InstallGenerator < Rails::Generators::NamedBase
6
+ desc "Generate RailsSettings files."
7
+ include Rails::Generators::Migration
8
+
9
+ argument :name, type: :string, default: 'setting'
10
+
11
+ source_root File.expand_path('../templates', __FILE__)
12
+
13
+ @@migrations = false
14
+
15
+ def self.next_migration_number(dirname) #:nodoc:
16
+ if ActiveRecord::Base.timestamped_migrations
17
+ if @@migrations
18
+ (current_migration_number(dirname) + 1)
19
+ else
20
+ @@migrations = true
21
+ Time.now.utc.strftime('%Y%m%d%H%M%S')
22
+ end
23
+ else
24
+ format '%.3d', current_migration_number(dirname) + 1
25
+ end
26
+ end
27
+
28
+ def install_setting
29
+ template 'model.rb', File.join('app/models', class_path, "#{file_name}.rb"), force: true
30
+ migration_template 'migration.rb', 'db/migrate/create_settings.rb'
31
+ end
32
+ end
33
+ end
@@ -1,11 +1,15 @@
1
+ require_relative 'rails-settings/base'
1
2
  require_relative 'rails-settings/settings'
2
3
  require_relative 'rails-settings/cached_settings'
3
4
  require_relative 'rails-settings/scoped_settings'
4
5
  require_relative 'rails-settings/extend'
6
+ require_relative 'rails-settings/version'
5
7
 
6
- class RailsSettings::Railtie < Rails::Railtie
7
- initializer "rails_settings.active_record.initialization" do
8
- RailsSettings::CachedSettings.after_commit :rewrite_cache, on: %i(create update)
9
- RailsSettings::CachedSettings.after_commit :expire_cache, on: %i(destroy)
8
+ module RailsSettings
9
+ class Railtie < Rails::Railtie
10
+ initializer "rails_settings.active_record.initialization" do
11
+ RailsSettings::CachedSettings.after_commit :rewrite_cache, on: %i(create update)
12
+ RailsSettings::CachedSettings.after_commit :expire_cache, on: %i(destroy)
13
+ end
10
14
  end
11
15
  end
@@ -0,0 +1,112 @@
1
+ module RailsSettings
2
+ class Base < ActiveRecord::Base
3
+ self.table_name = table_name_prefix + 'settings'
4
+
5
+ class SettingNotFound < RuntimeError; end
6
+
7
+ cattr_accessor :defaults
8
+ @@defaults = {}.with_indifferent_access
9
+
10
+ belongs_to :thing, polymorphic: true
11
+
12
+ # Support old plugin
13
+ if defined?(SettingsDefaults::DEFAULTS)
14
+ @@defaults = SettingsDefaults::DEFAULTS.with_indifferent_access
15
+ end
16
+
17
+ # get the value field, YAML decoded
18
+ def value
19
+ YAML.load(self[:value]) if self[:value].present?
20
+ end
21
+
22
+ # set the value field, YAML encoded
23
+ def value=(new_value)
24
+ self[:value] = new_value.to_yaml
25
+ end
26
+
27
+ class << self
28
+ # get or set a variable with the variable as the called method
29
+ def method_missing(method, *args)
30
+ method_name = method.to_s
31
+ super(method, *args)
32
+ rescue NoMethodError
33
+ # set a value for a variable
34
+ if method_name[-1] == '='
35
+ var_name = method_name.sub('=', '')
36
+ value = args.first
37
+ self[var_name] = value
38
+ else
39
+ # retrieve a value
40
+ self[method_name]
41
+ end
42
+ end
43
+
44
+ # destroy the specified settings record
45
+ def destroy(var_name)
46
+ var_name = var_name.to_s
47
+ obj = object(var_name)
48
+ raise SettingNotFound, "Setting variable \"#{var_name}\" not found" if obj.nil?
49
+
50
+ obj.destroy
51
+ true
52
+ end
53
+
54
+ # retrieve all settings as a hash (optionally starting with a given namespace)
55
+ def get_all(starting_with = nil)
56
+ vars = thing_scoped.select('var, value')
57
+ vars = vars.where("var LIKE '#{starting_with}%'") if starting_with
58
+
59
+ result = {}
60
+ vars.each do |record|
61
+ result[record.var] = record.value
62
+ end
63
+ default_keys = @@defaults.keys
64
+ default_keys = default_keys.select {|k| k.start_with? starting_with } if starting_with
65
+ result.merge! @@defaults.slice(*(default_keys - result.keys))
66
+
67
+ result.with_indifferent_access
68
+ end
69
+
70
+ def where(sql = nil)
71
+ vars = thing_scoped.where(sql) if sql
72
+ vars
73
+ end
74
+
75
+ # get a setting value by [] notation
76
+ def [](var_name)
77
+ object(var_name).try(:value) || @@defaults[var_name.to_s]
78
+ end
79
+
80
+ # set a setting value by [] notation
81
+ def []=(var_name, value)
82
+ var_name = var_name.to_s
83
+
84
+ record = object(var_name) || thing_scoped.new(var: var_name)
85
+ record.value = value
86
+ record.save!
87
+
88
+ value
89
+ end
90
+
91
+ def merge!(var_name, hash_value)
92
+ raise ArgumentError unless hash_value.is_a?(Hash)
93
+
94
+ old_value = self[var_name] || {}
95
+ raise TypeError, "Existing value is not a hash, can't merge!" unless old_value.is_a?(Hash)
96
+
97
+ new_value = old_value.merge(hash_value)
98
+ self[var_name] = new_value if new_value != old_value
99
+
100
+ new_value
101
+ end
102
+
103
+ def object(var_name)
104
+ thing_scoped.where(var: var_name.to_s).first
105
+ end
106
+
107
+ def thing_scoped
108
+ unscoped.where('thing_type is NULL and thing_id is NULL')
109
+ end
110
+ end
111
+ end
112
+ end
@@ -1,112 +1,9 @@
1
1
  module RailsSettings
2
- class Settings < ActiveRecord::Base
3
- self.table_name = table_name_prefix + 'settings'
4
-
5
- class SettingNotFound < RuntimeError; end
6
-
7
- cattr_accessor :defaults
8
- @@defaults = {}.with_indifferent_access
9
-
10
- belongs_to :thing, polymorphic: true
11
-
12
- # Support old plugin
13
- if defined?(SettingsDefaults::DEFAULTS)
14
- @@defaults = SettingsDefaults::DEFAULTS.with_indifferent_access
15
- end
16
-
17
- # get the value field, YAML decoded
18
- def value
19
- YAML.load(self[:value]) if self[:value].present?
20
- end
21
-
22
- # set the value field, YAML encoded
23
- def value=(new_value)
24
- self[:value] = new_value.to_yaml
25
- end
26
-
27
- class << self
28
- # get or set a variable with the variable as the called method
29
- def method_missing(method, *args)
30
- method_name = method.to_s
31
- super(method, *args)
32
- rescue NoMethodError
33
- # set a value for a variable
34
- if method_name[-1] == '='
35
- var_name = method_name.sub('=', '')
36
- value = args.first
37
- self[var_name] = value
38
- else
39
- # retrieve a value
40
- self[method_name]
41
- end
42
- end
43
-
44
- # destroy the specified settings record
45
- def destroy(var_name)
46
- var_name = var_name.to_s
47
- obj = object(var_name)
48
- raise SettingNotFound, "Setting variable \"#{var_name}\" not found" if obj.nil?
49
-
50
- obj.destroy
51
- true
52
- end
53
-
54
- # retrieve all settings as a hash (optionally starting with a given namespace)
55
- def get_all(starting_with = nil)
56
- vars = thing_scoped.select('var, value')
57
- vars = vars.where("var LIKE '#{starting_with}%'") if starting_with
58
-
59
- result = {}
60
- vars.each do |record|
61
- result[record.var] = record.value
62
- end
63
- default_keys = @@defaults.keys
64
- default_keys = default_keys.select {|k| k.start_with? starting_with } if starting_with
65
- result.merge! @@defaults.slice(*(default_keys - result.keys))
66
-
67
- result.with_indifferent_access
68
- end
69
-
70
- def where(sql = nil)
71
- vars = thing_scoped.where(sql) if sql
72
- vars
73
- end
74
-
75
- # get a setting value by [] notation
76
- def [](var_name)
77
- object(var_name).try(:value) || @@defaults[var_name.to_s]
78
- end
79
-
80
- # set a setting value by [] notation
81
- def []=(var_name, value)
82
- var_name = var_name.to_s
83
-
84
- record = object(var_name) || thing_scoped.new(var: var_name)
85
- record.value = value
86
- record.save!
87
-
88
- value
89
- end
90
-
91
- def merge!(var_name, hash_value)
92
- raise ArgumentError unless hash_value.is_a?(Hash)
93
-
94
- old_value = self[var_name] || {}
95
- raise TypeError, "Existing value is not a hash, can't merge!" unless old_value.is_a?(Hash)
96
-
97
- new_value = old_value.merge(hash_value)
98
- self[var_name] = new_value if new_value != old_value
99
-
100
- new_value
101
- end
102
-
103
- def object(var_name)
104
- thing_scoped.where(var: var_name.to_s).first
105
- end
106
-
107
- def thing_scoped
108
- unscoped.where('thing_type is NULL and thing_id is NULL')
109
- end
2
+ class Settings < Base
3
+ def self.inherited(subclass)
4
+ Kernel.warn 'DEPRECATION WARNING: RailsSettings::Settings is deprecated and it will removed in 0.6.0. ' <<
5
+ 'Please use RailsSettings::Base instead.'
6
+ super(subclass)
110
7
  end
111
8
  end
112
9
  end
@@ -0,0 +1,7 @@
1
+ module RailsSettings
2
+ class << self
3
+ def version
4
+ "0.5.5"
5
+ end
6
+ end
7
+ end
metadata CHANGED
@@ -1,17 +1,17 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rails-settings-cached
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.4
4
+ version: 0.5.5
5
5
  platform: ruby
6
6
  authors:
7
+ - Jason Lee
7
8
  - Squeegy
8
9
  - Georg Ledermann
9
10
  - 100hz
10
- - Jason Lee
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2016-03-10 00:00:00.000000000 Z
14
+ date: 2016-04-08 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: rails
@@ -27,77 +27,28 @@ dependencies:
27
27
  - - ">="
28
28
  - !ruby/object:Gem::Version
29
29
  version: 4.2.0
30
- - !ruby/object:Gem::Dependency
31
- name: rake
32
- requirement: !ruby/object:Gem::Requirement
33
- requirements:
34
- - - ">="
35
- - !ruby/object:Gem::Version
36
- version: '0'
37
- type: :development
38
- prerelease: false
39
- version_requirements: !ruby/object:Gem::Requirement
40
- requirements:
41
- - - ">="
42
- - !ruby/object:Gem::Version
43
- version: '0'
44
- - !ruby/object:Gem::Dependency
45
- name: rspec
46
- requirement: !ruby/object:Gem::Requirement
47
- requirements:
48
- - - ">="
49
- - !ruby/object:Gem::Version
50
- version: 3.3.0
51
- type: :development
52
- prerelease: false
53
- version_requirements: !ruby/object:Gem::Requirement
54
- requirements:
55
- - - ">="
56
- - !ruby/object:Gem::Version
57
- version: 3.3.0
58
- - !ruby/object:Gem::Dependency
59
- name: rubocop
60
- requirement: !ruby/object:Gem::Requirement
61
- requirements:
62
- - - ">="
63
- - !ruby/object:Gem::Version
64
- version: '0'
65
- type: :development
66
- prerelease: false
67
- version_requirements: !ruby/object:Gem::Requirement
68
- requirements:
69
- - - ">="
70
- - !ruby/object:Gem::Version
71
- version: '0'
72
- - !ruby/object:Gem::Dependency
73
- name: sqlite3
74
- requirement: !ruby/object:Gem::Requirement
75
- requirements:
76
- - - ">="
77
- - !ruby/object:Gem::Version
78
- version: 1.3.10
79
- type: :development
80
- prerelease: false
81
- version_requirements: !ruby/object:Gem::Requirement
82
- requirements:
83
- - - ">="
84
- - !ruby/object:Gem::Version
85
- version: 1.3.10
86
- description:
30
+ description: "\n This is improved from rails-settings, added caching.\n Settings
31
+ plugin for Rails that makes managing a table of global key,\n value pairs easy.
32
+ Think of it like a global Hash stored in you database,\n that uses simple ActiveRecord
33
+ like methods for manipulation.\n\n Keep track of any global setting that you dont
34
+ want to hard code into your rails app.\n You can store any kind of object. Strings,
35
+ numbers, arrays, or any object.\n "
87
36
  email: huacnlee@gmail.com
88
37
  executables: []
89
38
  extensions: []
90
39
  extra_rdoc_files: []
91
40
  files:
92
41
  - README.md
93
- - lib/generators/settings/settings_generator.rb
42
+ - lib/generators/settings/install_generator.rb
94
43
  - lib/generators/settings/templates/migration.rb
95
44
  - lib/generators/settings/templates/model.rb
96
45
  - lib/rails-settings-cached.rb
46
+ - lib/rails-settings/base.rb
97
47
  - lib/rails-settings/cached_settings.rb
98
48
  - lib/rails-settings/extend.rb
99
49
  - lib/rails-settings/scoped_settings.rb
100
50
  - lib/rails-settings/settings.rb
51
+ - lib/rails-settings/version.rb
101
52
  homepage: https://github.com/huacnlee/rails-settings-cached
102
53
  licenses: []
103
54
  metadata: {}
@@ -109,7 +60,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
109
60
  requirements:
110
61
  - - ">="
111
62
  - !ruby/object:Gem::Version
112
- version: '2.0'
63
+ version: '2.1'
113
64
  required_rubygems_version: !ruby/object:Gem::Requirement
114
65
  requirements:
115
66
  - - ">="
@@ -117,13 +68,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
117
68
  version: '0'
118
69
  requirements: []
119
70
  rubyforge_project:
120
- rubygems_version: 2.5.1
71
+ rubygems_version: 2.6.2
121
72
  signing_key:
122
73
  specification_version: 4
123
- summary: This is improved from rails-settings, added caching. Settings is a plugin
124
- that makes managing a table of global key, value pairs easy. Think of it like a
125
- global Hash stored in you database, that uses simple ActiveRecord like methods for
126
- manipulation. Keep track of any global setting that you dont want to hard code
127
- into your rails app. You can store any kind of object. Strings, numbers, arrays,
128
- or any object. Ported to Rails 3!
74
+ summary: Settings plugin for Rails that makes managing a table of global keys.
129
75
  test_files: []
@@ -1,30 +0,0 @@
1
- require 'rails/generators/migration'
2
-
3
- class SettingsGenerator < Rails::Generators::NamedBase
4
- include Rails::Generators::Migration
5
-
6
- argument :name, type: :string, default: 'my_settings'
7
-
8
- source_root File.expand_path('../templates', __FILE__)
9
-
10
- @@migrations = false
11
-
12
- def self.next_migration_number(dirname) #:nodoc:
13
- if ActiveRecord::Base.timestamped_migrations
14
- if @@migrations
15
- (current_migration_number(dirname) + 1)
16
- else
17
- @@migrations = true
18
- Time.now.utc.strftime('%Y%m%d%H%M%S')
19
- end
20
- else
21
- format '%.3d', current_migration_number(dirname) + 1
22
- end
23
- end
24
-
25
- def settings
26
- # generate(:model, name, "--skip-migration")
27
- template 'model.rb', File.join('app/models', class_path, "#{file_name}.rb"), force: true
28
- migration_template 'migration.rb', 'db/migrate/create_settings.rb'
29
- end
30
- end