ledermann-rails-settings 1.2.0 → 2.0.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/.travis.yml +2 -3
- data/Changelog.md +22 -1
- data/Gemfile +1 -1
- data/MIT-LICENSE +6 -5
- data/README.md +133 -158
- data/Rakefile +4 -9
- data/ci/Gemfile.rails-3.1.x +4 -3
- data/ci/Gemfile.rails-3.2.x +4 -3
- data/lib/generators/rails_settings/migration/migration_generator.rb +23 -0
- data/lib/generators/rails_settings/migration/templates/migration.rb +15 -0
- data/lib/rails-settings.rb +14 -5
- data/lib/rails-settings/base.rb +36 -0
- data/lib/rails-settings/configuration.rb +32 -0
- data/lib/rails-settings/scopes.rb +33 -0
- data/lib/rails-settings/setting_object.rb +64 -0
- data/lib/rails-settings/version.rb +2 -2
- data/rails-settings.gemspec +18 -21
- data/spec/configuration_spec.rb +108 -0
- data/spec/queries_spec.rb +108 -0
- data/spec/scopes_spec.rb +31 -0
- data/spec/serialize_spec.rb +40 -0
- data/spec/setting_object_spec.rb +119 -0
- data/spec/settings_spec.rb +206 -0
- data/spec/spec_helper.rb +90 -0
- data/spec/support/matchers/perform_queries.rb +18 -0
- data/spec/support/query_counter.rb +17 -0
- metadata +100 -121
- data/ci/Gemfile.rails-2.3.x +0 -5
- data/ci/Gemfile.rails-3.0.x +0 -5
- data/init.rb +0 -1
- data/lib/rails-settings/active_record.rb +0 -38
- data/lib/rails-settings/null_store.rb +0 -48
- data/lib/rails-settings/scoped_settings.rb +0 -14
- data/lib/rails-settings/settings.rb +0 -142
- data/test/settings_test.rb +0 -252
- data/test/test_helper.rb +0 -34
data/test/settings_test.rb
DELETED
@@ -1,252 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
class SettingsTest < Test::Unit::TestCase
|
4
|
-
setup_db
|
5
|
-
|
6
|
-
def setup
|
7
|
-
Settings.create!(:var => 'test', :value => 'foo')
|
8
|
-
Settings.create!(:var => 'test2', :value => 'bar')
|
9
|
-
|
10
|
-
# Reset defaults
|
11
|
-
Settings.defaults = {}.with_indifferent_access
|
12
|
-
end
|
13
|
-
|
14
|
-
def teardown
|
15
|
-
User.delete_all
|
16
|
-
Settings.delete_all
|
17
|
-
end
|
18
|
-
|
19
|
-
def test_defaults
|
20
|
-
Settings.defaults[:foo] = 'default foo'
|
21
|
-
|
22
|
-
assert_nil Settings.target(:foo)
|
23
|
-
assert_equal 'default foo', Settings.foo
|
24
|
-
|
25
|
-
Settings.foo = 'bar'
|
26
|
-
assert_equal 'bar', Settings.foo
|
27
|
-
assert_not_nil Settings.target(:foo)
|
28
|
-
end
|
29
|
-
|
30
|
-
def tests_defaults_true
|
31
|
-
Settings.defaults[:foo] = true
|
32
|
-
assert_equal true, Settings.foo
|
33
|
-
end
|
34
|
-
|
35
|
-
def tests_defaults_false
|
36
|
-
Settings.defaults[:foo] = false
|
37
|
-
assert_equal false, Settings.foo
|
38
|
-
end
|
39
|
-
|
40
|
-
def test_get
|
41
|
-
assert_setting 'foo', :test
|
42
|
-
assert_setting 'bar', :test2
|
43
|
-
end
|
44
|
-
|
45
|
-
def test_update
|
46
|
-
assert_assign_setting '321', :test
|
47
|
-
end
|
48
|
-
|
49
|
-
def test_create
|
50
|
-
assert_assign_setting '123', :onetwothree
|
51
|
-
end
|
52
|
-
|
53
|
-
def test_complex_serialization
|
54
|
-
complex = [1, '2', {:three => true}]
|
55
|
-
Settings.complex = complex
|
56
|
-
assert_equal complex, Settings.complex
|
57
|
-
end
|
58
|
-
|
59
|
-
def test_serialization_of_float
|
60
|
-
Settings.float = 0.01
|
61
|
-
Settings.reload
|
62
|
-
assert_equal 0.01, Settings.float
|
63
|
-
assert_equal 0.02, Settings.float * 2
|
64
|
-
end
|
65
|
-
|
66
|
-
def test_target_scope
|
67
|
-
user1 = User.create! :name => 'First user'
|
68
|
-
user2 = User.create! :name => 'Second user'
|
69
|
-
|
70
|
-
assert_assign_setting 1, :one, user1
|
71
|
-
assert_assign_setting 2, :two, user2
|
72
|
-
|
73
|
-
assert_setting 1, :one, user1
|
74
|
-
assert_setting 2, :two, user2
|
75
|
-
|
76
|
-
assert_setting nil, :one
|
77
|
-
assert_setting nil, :two
|
78
|
-
|
79
|
-
assert_setting nil, :two, user1
|
80
|
-
assert_setting nil, :one, user2
|
81
|
-
|
82
|
-
assert_equal({ "one" => 1}, user1.settings.all('one'))
|
83
|
-
assert_equal({ "two" => 2}, user2.settings.all('two'))
|
84
|
-
assert_equal({ "one" => 1}, user1.settings.all('o'))
|
85
|
-
assert_equal({}, user1.settings.all('non_existing_var'))
|
86
|
-
end
|
87
|
-
|
88
|
-
def test_named_scope
|
89
|
-
user_without_settings = User.create! :name => 'User without settings'
|
90
|
-
user_with_settings = User.create! :name => 'User with settings'
|
91
|
-
user_with_settings.settings.one = '1'
|
92
|
-
user_with_settings.settings.two = '2'
|
93
|
-
|
94
|
-
assert_equal [user_with_settings], User.with_settings
|
95
|
-
assert_equal [user_with_settings], User.with_settings_for('one')
|
96
|
-
assert_equal [user_with_settings], User.with_settings_for('two')
|
97
|
-
assert_equal [], User.with_settings_for('foo')
|
98
|
-
|
99
|
-
assert_equal [user_without_settings], User.without_settings
|
100
|
-
assert_equal [user_without_settings], User.without_settings_for('one')
|
101
|
-
assert_equal [user_without_settings], User.without_settings_for('two')
|
102
|
-
assert_equal [user_without_settings, user_with_settings], User.without_settings_for('foo')
|
103
|
-
end
|
104
|
-
|
105
|
-
def test_delete_settings_after_destroying_target
|
106
|
-
user1 = User.create! :name => 'Mr. Foo'
|
107
|
-
user2 = User.create! :name => 'Mr. Bar'
|
108
|
-
user1.settings.example = 42
|
109
|
-
user2.settings.example = 43
|
110
|
-
|
111
|
-
before_count = Settings.count
|
112
|
-
user1.destroy
|
113
|
-
assert_equal before_count - 1, Settings.count
|
114
|
-
|
115
|
-
before_count = Settings.count
|
116
|
-
user2.destroy
|
117
|
-
assert_equal before_count - 1, Settings.count
|
118
|
-
end
|
119
|
-
|
120
|
-
def test_all
|
121
|
-
assert_equal({ "test2" => "bar", "test" => "foo" }, Settings.all)
|
122
|
-
assert_equal({ "test2" => "bar" }, Settings.all('test2'))
|
123
|
-
assert_equal({ "test2" => "bar", "test" => "foo" }, Settings.all('test'))
|
124
|
-
assert_equal({}, Settings.all('non_existing_var'))
|
125
|
-
end
|
126
|
-
|
127
|
-
def test_merge
|
128
|
-
assert_raise(TypeError) do
|
129
|
-
Settings.merge! :test, { :a => 1 }
|
130
|
-
end
|
131
|
-
|
132
|
-
Settings[:hash] = { :one => 1 }
|
133
|
-
Settings.merge! :hash, { :two => 2 }
|
134
|
-
assert_equal({ :one => 1, :two => 2 }, Settings[:hash])
|
135
|
-
|
136
|
-
assert_raise(ArgumentError) do
|
137
|
-
Settings.merge! :hash, 123
|
138
|
-
end
|
139
|
-
|
140
|
-
Settings.merge! :empty_hash, { :two => 2 }
|
141
|
-
assert_equal({ :two => 2 }, Settings[:empty_hash])
|
142
|
-
end
|
143
|
-
|
144
|
-
def test_destroy
|
145
|
-
Settings.destroy :test
|
146
|
-
assert_equal nil, Settings.test
|
147
|
-
|
148
|
-
assert_raise(Settings::SettingNotFound) do
|
149
|
-
Settings.destroy :unknown
|
150
|
-
end
|
151
|
-
end
|
152
|
-
|
153
|
-
def test_false
|
154
|
-
Settings.test3 = false
|
155
|
-
assert_setting(false, 'test3')
|
156
|
-
|
157
|
-
Settings.destroy :test3
|
158
|
-
assert_setting(nil, 'test3')
|
159
|
-
end
|
160
|
-
|
161
|
-
def test_class_level_settings
|
162
|
-
assert_equal User.settings.name, "ScopedSettings"
|
163
|
-
end
|
164
|
-
|
165
|
-
def test_object_inherits_class_settings_before_default
|
166
|
-
Settings.defaults[:foo] = 'global default'
|
167
|
-
User.settings.foo = 'model default'
|
168
|
-
|
169
|
-
user = User.create! :name => 'Dwight'
|
170
|
-
|
171
|
-
assert_equal user.settings.foo, 'model default'
|
172
|
-
assert_equal 'global default', Settings.foo
|
173
|
-
end
|
174
|
-
|
175
|
-
def test_class_inherits_default_settings
|
176
|
-
Settings.defaults[:foo] = 'bar'
|
177
|
-
assert_equal User.settings.foo, 'bar'
|
178
|
-
end
|
179
|
-
|
180
|
-
def test_sets_settings_with_hash
|
181
|
-
user = User.create! :name => 'Mr. Foo'
|
182
|
-
user.settings[:one] = '1'
|
183
|
-
user.settings[:two] = '2'
|
184
|
-
user.settings = { :two => '2a', :three => '3' }
|
185
|
-
|
186
|
-
assert_equal '1', user.settings[:one] # ensure existing settings remain intact
|
187
|
-
assert_equal '2a', user.settings[:two] # ensure settings are properly overwritten
|
188
|
-
assert_equal '3', user.settings[:three] # ensure new setting are created
|
189
|
-
end
|
190
|
-
|
191
|
-
def test_all_includes_defaults
|
192
|
-
Settings.defaults[:foo] = 'bar'
|
193
|
-
user = User.create! :name => 'Mr. Foo'
|
194
|
-
assert_equal({ 'foo' => 'bar' }, user.settings.all)
|
195
|
-
end
|
196
|
-
|
197
|
-
private
|
198
|
-
def assert_setting(value, key, scope_target=nil)
|
199
|
-
key = key.to_sym
|
200
|
-
|
201
|
-
if scope_target
|
202
|
-
assert_equal value, scope_target.instance_eval("settings.#{key}")
|
203
|
-
assert_equal value, scope_target.settings[key.to_sym]
|
204
|
-
assert_equal value, scope_target.settings[key.to_s]
|
205
|
-
else
|
206
|
-
assert_equal value, eval("Settings.#{key}")
|
207
|
-
assert_equal value, Settings[key.to_sym]
|
208
|
-
assert_equal value, Settings[key.to_s]
|
209
|
-
end
|
210
|
-
end
|
211
|
-
|
212
|
-
def assert_assign_setting(value, key, scope_target=nil)
|
213
|
-
key = key.to_sym
|
214
|
-
|
215
|
-
if scope_target
|
216
|
-
assert_equal value, (scope_target.settings[key] = value)
|
217
|
-
assert_setting value, key, scope_target
|
218
|
-
scope_target.settings[key] = nil
|
219
|
-
|
220
|
-
assert_equal value, (scope_target.settings[key.to_s] = value)
|
221
|
-
assert_setting value, key, scope_target
|
222
|
-
else
|
223
|
-
assert_equal value, (Settings[key] = value)
|
224
|
-
assert_setting value, key
|
225
|
-
Settings[key] = nil
|
226
|
-
|
227
|
-
assert_equal value, (Settings[key.to_s] = value)
|
228
|
-
assert_setting value, key
|
229
|
-
end
|
230
|
-
end
|
231
|
-
end
|
232
|
-
|
233
|
-
class CachedSettingsTest < SettingsTest
|
234
|
-
def setup
|
235
|
-
Settings.cache = ActiveSupport::Cache::MemoryStore.new
|
236
|
-
Settings.cache_options = { :expires_in => 5.minutes }
|
237
|
-
super
|
238
|
-
end
|
239
|
-
|
240
|
-
def test_caching_is_in_place
|
241
|
-
Settings.progress = "boing"
|
242
|
-
Settings.connection.execute("delete from settings")
|
243
|
-
assert_equal "boing", Settings.progress
|
244
|
-
Settings.cache.clear
|
245
|
-
assert_nil Settings.progress
|
246
|
-
end
|
247
|
-
|
248
|
-
def teardown
|
249
|
-
Settings.cache.clear
|
250
|
-
super
|
251
|
-
end
|
252
|
-
end
|
data/test/test_helper.rb
DELETED
@@ -1,34 +0,0 @@
|
|
1
|
-
require 'rubygems'
|
2
|
-
|
3
|
-
require 'active_support'
|
4
|
-
require 'active_support/test_case'
|
5
|
-
require 'active_record'
|
6
|
-
require 'test/unit'
|
7
|
-
|
8
|
-
require "#{File.dirname(__FILE__)}/../init"
|
9
|
-
|
10
|
-
ActiveRecord::Base.establish_connection(:adapter => "sqlite3", :database => ":memory:")
|
11
|
-
ActiveRecord::Migration.verbose = false
|
12
|
-
|
13
|
-
class User < ActiveRecord::Base
|
14
|
-
has_settings
|
15
|
-
end
|
16
|
-
|
17
|
-
def setup_db
|
18
|
-
ActiveRecord::Schema.define(:version => 1) do
|
19
|
-
create_table :settings do |t|
|
20
|
-
t.string :var, :null => false
|
21
|
-
t.text :value, :null => true
|
22
|
-
t.integer :target_id, :null => true
|
23
|
-
t.string :target_type, :limit => 30, :null => true
|
24
|
-
t.timestamps
|
25
|
-
end
|
26
|
-
add_index :settings, [ :target_type, :target_id, :var ], :unique => true
|
27
|
-
|
28
|
-
create_table :users do |t|
|
29
|
-
t.string :name
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
puts "Testing with ActiveRecord #{ActiveRecord::VERSION::STRING}"
|