setting_accessors 0.0.9 → 0.0.10

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: ff68f0a6d47ec46945e83aa4c4f625bec4e7c115
4
- data.tar.gz: b3d12cf74aac005bf9d0e0f46e4b9b4402127701
3
+ metadata.gz: 8b57b02b1ed6e6025882eb8f66f00811e31187d0
4
+ data.tar.gz: 9e9f7ce1783329c95f1cc1d3a22a40c39e605d97
5
5
  SHA512:
6
- metadata.gz: 399a03eabae5d7b475b0ac0119cec650ad37f6c266d53d86c9d90cbb63431e8b32987f9c5fe8a1ec4b255f5b83df876603beeb6fb178c52bb5b1ae2d9130aea0
7
- data.tar.gz: aca92f047b34247a2f9b6bcbc1478f36529e6b31e6837758749a99aa81088216a90883ff977c167681618eaf5079acdaf1fb2fcce96dcbcb23092c1600dbc940
6
+ metadata.gz: e0c62a32615cf53c34729be73ca94be87826bdfef304e231333cf1cbfad1d0543bf23cc9a10a4ba8633626e92269e750ced273080d26430b195b064cbd4d7bc6
7
+ data.tar.gz: 29fd6bb464c1a5ea65f9cc0a018a2659a7f96d4521d41e59febb4819f90139c48f7ace193da1833dcdc2e1decffd58d1d95c2682c73748def7f7420125b4554f
data/.travis.yml CHANGED
@@ -6,6 +6,7 @@ rvm:
6
6
  - 2.1
7
7
  - 2.2
8
8
 
9
+ before_install: 'gem install bundler'
9
10
  script: 'bundle exec rake'
10
11
 
11
12
  notifications:
@@ -28,6 +28,22 @@ class SettingAccessors::Accessor
28
28
  result
29
29
  end
30
30
 
31
+ #
32
+ # Like #fetch, but it will store the default value as a temporary setting
33
+ # if no actual setting value could be found. This is useful to further work
34
+ # with default setting values.
35
+ # The default value is cloned (using #dup to avoid copying object states) before
36
+ # it is assigned. This will not work for singleton instances like true, false, etc.
37
+ #
38
+ def fetch_and_store(key, default = nil)
39
+ result = self[key]
40
+ if result.nil? && !has_key?(key)
41
+ self[key] = default.duplicable? ? default.dup : default
42
+ else
43
+ result
44
+ end
45
+ end
46
+
31
47
  def has_key?(key)
32
48
  @temp_settings.has_key?(key.to_sym)
33
49
  end
@@ -46,7 +62,7 @@ class SettingAccessors::Accessor
46
62
  # specified in the setting config file.
47
63
  #
48
64
  def get_or_default(key)
49
- fetch key, SettingAccessors.setting_class.get_or_default(key, @record)
65
+ fetch_and_store(key, SettingAccessors.setting_class.get_or_default(key, @record))
50
66
  end
51
67
 
52
68
  #
@@ -54,7 +70,7 @@ class SettingAccessors::Accessor
54
70
  # If none is found, tries to find a global setting with the same name
55
71
  #
56
72
  def get_or_global(key)
57
- fetch key, SettingAccessors.setting_class.get(key)
73
+ fetch_and_store(key, SettingAccessors.setting_class.get(key))
58
74
  end
59
75
 
60
76
  #
@@ -62,7 +78,7 @@ class SettingAccessors::Accessor
62
78
  # if none is found, it will return the given value instead.
63
79
  #
64
80
  def get_or_value(key, value)
65
- fetch key, value
81
+ fetch_and_store(key, value)
66
82
  end
67
83
 
68
84
  def get_with_fallback(key, fallback = nil)
@@ -25,7 +25,7 @@ class SettingAccessors::Converter
25
25
  #
26
26
  def convert(new_value)
27
27
  #If the value is set to be polymorphic, we don't have to convert anything.
28
- return new_value if @value_type == 'polymorphic'
28
+ return new_value if @value_type.to_s == 'polymorphic'
29
29
 
30
30
  #ActiveRecord only converts non-nil values to their database type
31
31
  #during assignment
@@ -68,4 +68,4 @@ class SettingAccessors::Converter
68
68
  value.to_s
69
69
  end
70
70
 
71
- end
71
+ end
@@ -95,4 +95,4 @@ module SettingAccessors::Integration
95
95
  def settings
96
96
  @settings_accessor ||= SettingAccessors::Accessor.new(self)
97
97
  end
98
- end
98
+ end
@@ -194,7 +194,7 @@ module SettingAccessors::SettingScaffold
194
194
  # @return [Object] the default value for the current setting
195
195
  #
196
196
  def default_value
197
- data['default']
197
+ data['default'].freeze
198
198
  end
199
199
 
200
200
  #
@@ -249,4 +249,4 @@ module SettingAccessors::SettingScaffold
249
249
  SettingAccessors::Internal.setting_data(name, assignable)
250
250
  end
251
251
 
252
- end
252
+ end
@@ -1,3 +1,3 @@
1
1
  module SettingAccessors
2
- VERSION = '0.0.9'
2
+ VERSION = '0.0.10'
3
3
  end
@@ -26,5 +26,5 @@ Gem::Specification.new do |spec|
26
26
  spec.add_development_dependency 'minitest', '~> 5.5'
27
27
  spec.add_development_dependency 'byebug', '~> 3.5'
28
28
 
29
- spec.add_dependency 'rails', '~> 4'
29
+ spec.add_dependency 'rails', '~> 4.1'
30
30
  end
@@ -1,5 +1,7 @@
1
1
  class User < ActiveRecord::Base
2
2
 
3
+ setting_accessor :polymorphic_setting, :type => :polymorphic, :default => {}, :fallback => :default
4
+
3
5
  setting_accessor :locale, :type => :string, :validations => {:presence => true}
4
6
 
5
7
  setting_accessor :a_string, :fallback => :default
@@ -37,4 +37,31 @@ class UserTest < ActiveSupport::TestCase
37
37
  assert !@user.respond_to?(:a_string?)
38
38
  end
39
39
  end
40
+
41
+ context 'Polymorphic class-wise settings' do
42
+ setup do
43
+ @user = User.create
44
+ end
45
+
46
+ should 'be updated in database if their whole value changes' do
47
+ @user.polymorphic_setting = {:a => :b}
48
+ assert @user.save
49
+ assert_equal User.last, @user
50
+ assert_equal User.last.polymorphic_setting, {:a => :b}
51
+ end
52
+
53
+ should 'be updated in database if a property of their value changes' do
54
+ @user.polymorphic_setting[:new_key] = 'new_value'
55
+ assert @user.save
56
+ assert_equal User.last, @user
57
+ assert_equal User.last.polymorphic_setting, {:new_key => 'new_value'}
58
+ end
59
+
60
+ should 'not update other assignable settings' do
61
+ @user2 = User.create
62
+ @user2.polymorphic_setting = {:foo => :bar}
63
+ assert @user2.save
64
+ assert_equal User.first.polymorphic_setting, {}
65
+ end
66
+ end
40
67
  end
data/test/test_helper.rb CHANGED
@@ -7,6 +7,7 @@ require 'active_support'
7
7
  require 'minitest'
8
8
  require 'shoulda'
9
9
  require "rails/test_help"
10
+ require 'byebug'
10
11
 
11
12
  Rails.backtrace_cleaner.remove_silencers!
12
13
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: setting_accessors
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.9
4
+ version: 0.0.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stefan Exner
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-12-09 00:00:00.000000000 Z
11
+ date: 2016-03-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -100,14 +100,14 @@ dependencies:
100
100
  requirements:
101
101
  - - "~>"
102
102
  - !ruby/object:Gem::Version
103
- version: '4'
103
+ version: '4.1'
104
104
  type: :runtime
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
- version: '4'
110
+ version: '4.1'
111
111
  description: |-
112
112
  Adds a global key-value-store to Rails applications and allows adding typed columns
113
113
  to model classes without having to change the database layout.
@@ -119,8 +119,6 @@ extra_rdoc_files: []
119
119
  files:
120
120
  - ".codeclimate.yml"
121
121
  - ".gitignore"
122
- - ".ruby-gemset"
123
- - ".ruby-version"
124
122
  - ".travis.yml"
125
123
  - Gemfile
126
124
  - LICENSE.txt
@@ -217,7 +215,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
217
215
  version: '0'
218
216
  requirements: []
219
217
  rubyforge_project:
220
- rubygems_version: 2.2.2
218
+ rubygems_version: 2.5.1
221
219
  signing_key:
222
220
  specification_version: 4
223
221
  summary: A global key-value-store and virtual model columns
data/.ruby-gemset DELETED
@@ -1 +0,0 @@
1
- setting_accessors
data/.ruby-version DELETED
@@ -1 +0,0 @@
1
- ruby-2.1.1