setting_accessors 0.3.0 → 1.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 +5 -5
- data/.editorconfig +10 -0
- data/.rspec +1 -0
- data/.rubocop.yml +131 -0
- data/.travis.yml +11 -7
- data/Appraisals +17 -0
- data/CHANGELOG.md +38 -1
- data/Gemfile +2 -0
- data/README.md +64 -124
- data/Rakefile +5 -27
- data/bin/console +15 -0
- data/bin/setup +10 -0
- data/gemfiles/rails_4.1.gemfile +7 -0
- data/gemfiles/rails_4.2.gemfile +7 -0
- data/gemfiles/rails_4.2.gemfile.lock +162 -0
- data/gemfiles/rails_5.0.gemfile +7 -0
- data/gemfiles/rails_5.0.gemfile.lock +169 -0
- data/gemfiles/rails_5.1.gemfile +7 -0
- data/gemfiles/rails_5.1.gemfile.lock +169 -0
- data/gemfiles/rails_5.2.gemfile +7 -0
- data/gemfiles/rails_5.2.gemfile.lock +177 -0
- data/lib/generators/setting_accessors/install_generator.rb +11 -9
- data/lib/generators/setting_accessors/templates/model.rb.erb +0 -24
- data/lib/setting_accessors.rb +14 -5
- data/lib/setting_accessors/accessor_generator.rb +66 -0
- data/lib/setting_accessors/converters/base.rb +24 -0
- data/lib/setting_accessors/converters/boolean_converter.rb +51 -0
- data/lib/setting_accessors/converters/integer_converter.rb +21 -0
- data/lib/setting_accessors/converters/polymorphic_converter.rb +11 -0
- data/lib/setting_accessors/converters/string_converter.rb +11 -0
- data/lib/setting_accessors/helpers.rb +28 -0
- data/lib/setting_accessors/integration.rb +83 -97
- data/lib/setting_accessors/internal.rb +37 -64
- data/lib/setting_accessors/setting_scaffold.rb +147 -214
- data/lib/setting_accessors/setting_set.rb +168 -0
- data/lib/setting_accessors/version.rb +3 -1
- data/lib/tasks/setting_accessors_tasks.rake +2 -0
- data/setting_accessors.gemspec +27 -19
- metadata +117 -143
- data/.codeclimate.yml +0 -66
- data/lib/setting_accessors/accessor.rb +0 -189
- data/lib/setting_accessors/converter.rb +0 -71
- data/lib/setting_accessors/integration_validator.rb +0 -15
- data/lib/setting_accessors/validator.rb +0 -144
- data/test/dummy/README.rdoc +0 -28
- data/test/dummy/Rakefile +0 -6
- data/test/dummy/app/assets/images/.keep +0 -0
- data/test/dummy/app/assets/javascripts/application.js +0 -13
- data/test/dummy/app/assets/stylesheets/application.css +0 -15
- data/test/dummy/app/controllers/application_controller.rb +0 -5
- data/test/dummy/app/controllers/concerns/.keep +0 -0
- data/test/dummy/app/helpers/application_helper.rb +0 -2
- data/test/dummy/app/mailers/.keep +0 -0
- data/test/dummy/app/models/.keep +0 -0
- data/test/dummy/app/models/concerns/.keep +0 -0
- data/test/dummy/app/models/post.rb +0 -2
- data/test/dummy/app/models/setting.rb +0 -59
- data/test/dummy/app/models/user.rb +0 -19
- data/test/dummy/app/views/layouts/application.html.erb +0 -14
- data/test/dummy/bin/bundle +0 -3
- data/test/dummy/bin/rails +0 -4
- data/test/dummy/bin/rake +0 -4
- data/test/dummy/config.ru +0 -4
- data/test/dummy/config/application.rb +0 -25
- data/test/dummy/config/boot.rb +0 -5
- data/test/dummy/config/database.yml +0 -25
- data/test/dummy/config/environment.rb +0 -5
- data/test/dummy/config/environments/development.rb +0 -37
- data/test/dummy/config/environments/production.rb +0 -83
- data/test/dummy/config/environments/test.rb +0 -34
- data/test/dummy/config/initializers/backtrace_silencers.rb +0 -7
- data/test/dummy/config/initializers/cookies_serializer.rb +0 -3
- data/test/dummy/config/initializers/filter_parameter_logging.rb +0 -4
- data/test/dummy/config/initializers/inflections.rb +0 -16
- data/test/dummy/config/initializers/mime_types.rb +0 -4
- data/test/dummy/config/initializers/session_store.rb +0 -3
- data/test/dummy/config/initializers/setting_accessors.rb +0 -1
- data/test/dummy/config/initializers/wrap_parameters.rb +0 -14
- data/test/dummy/config/locales/en.yml +0 -23
- data/test/dummy/config/routes.rb +0 -56
- data/test/dummy/config/secrets.yml +0 -22
- data/test/dummy/config/settings.yml +0 -23
- data/test/dummy/db/migrate/20150102112106_create_users.rb +0 -9
- data/test/dummy/db/migrate/20150102115329_create_settings.rb +0 -12
- data/test/dummy/db/migrate/20150723114600_create_posts.rb +0 -11
- data/test/dummy/db/schema.rb +0 -40
- data/test/dummy/db/test.sqlite3 +0 -0
- data/test/dummy/lib/assets/.keep +0 -0
- data/test/dummy/public/404.html +0 -67
- data/test/dummy/public/422.html +0 -67
- data/test/dummy/public/500.html +0 -66
- data/test/dummy/public/favicon.ico +0 -0
- data/test/dummy/test/fixtures/posts.yml +0 -11
- data/test/dummy/test/models/post_test.rb +0 -19
- data/test/dummy/test/models/setting_test.rb +0 -143
- data/test/dummy/test/models/user_test.rb +0 -154
- data/test/generators/install_generator_test.rb +0 -15
- data/test/setting_accessors_test.rb +0 -4
- data/test/test_helper.rb +0 -31
File without changes
|
@@ -1,11 +0,0 @@
|
|
1
|
-
# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html
|
2
|
-
|
3
|
-
# This model initially had no columns defined. If you add columns to the
|
4
|
-
# model remove the '{}' from the fixture names and add the columns immediately
|
5
|
-
# below each fixture, per the syntax in the comments below
|
6
|
-
#
|
7
|
-
one: {}
|
8
|
-
# column: value
|
9
|
-
#
|
10
|
-
two: {}
|
11
|
-
# column: value
|
@@ -1,19 +0,0 @@
|
|
1
|
-
require_relative '../../../test_helper'
|
2
|
-
|
3
|
-
class PostTest < ActiveSupport::TestCase
|
4
|
-
context 'JSON serialization' do
|
5
|
-
setup do
|
6
|
-
@post = Post.new(:title => 'a post', :text => 'a content')
|
7
|
-
end
|
8
|
-
|
9
|
-
should 'work without having any setting_accessors defined' do
|
10
|
-
assert @post.as_json
|
11
|
-
end
|
12
|
-
|
13
|
-
should 'contain all original public attributes' do
|
14
|
-
[:title, :text, :id, :created_at, :updated_at].each do |attr|
|
15
|
-
assert_includes @post.as_json.keys, attr.to_s
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
@@ -1,143 +0,0 @@
|
|
1
|
-
require_relative '../../../test_helper'
|
2
|
-
|
3
|
-
class SettingTest < ActiveSupport::TestCase
|
4
|
-
should validate_presence_of :name
|
5
|
-
|
6
|
-
#FIXME: This is currently setting assignable_type and assignable_id to "0" resp. "1" which breaks everything.
|
7
|
-
# should validate_uniqueness_of(:name).scoped_to([:assignable_type, :assignable_id])
|
8
|
-
|
9
|
-
context 'Global Setting Accessors (method missing)' do
|
10
|
-
|
11
|
-
should 'ignore a setting function if more than 1 argument is given' do
|
12
|
-
assert_raises(NoMethodError) { Setting.my_setting(1, 2, 3) }
|
13
|
-
end
|
14
|
-
|
15
|
-
should 'return nil for a non-existing setting' do
|
16
|
-
assert_nil Setting.gotta_catch_em_all
|
17
|
-
end
|
18
|
-
|
19
|
-
should 'create a new setting if necessary' do
|
20
|
-
assert Setting.count.zero?
|
21
|
-
assert Setting.gotta_catch_em_all = 'Pokemon!'
|
22
|
-
assert Setting.count == 1
|
23
|
-
end
|
24
|
-
|
25
|
-
should "return the setting's value for an existing setting" do
|
26
|
-
assert Setting.gotta_catch_em_all = 'Pokemon!'
|
27
|
-
assert_equal Setting.gotta_catch_em_all, 'Pokemon!'
|
28
|
-
end
|
29
|
-
|
30
|
-
should 'update an existing setting instead of creating a new one' do
|
31
|
-
assert Setting.count.zero?
|
32
|
-
assert Setting.gotta_catch_em_all = 'Pokemon!'
|
33
|
-
assert Setting.gotta_catch_em_all = 'Pokemon!'
|
34
|
-
assert Setting.count == 1
|
35
|
-
end
|
36
|
-
|
37
|
-
should 'return assignable specific settings if an assignable is given' do
|
38
|
-
ash = User.create(:first_name => 'Ash', :last_name => 'Ketchum')
|
39
|
-
gary = User.create(:first_name => 'Gary', :last_name => 'Oak')
|
40
|
-
team_rocket = User.create(:first_name => 'Jessie', :last_name => 'James')
|
41
|
-
|
42
|
-
assert Setting.create_or_update(:pokedex_count, 151, ash)
|
43
|
-
assert Setting.create_or_update(:pokedex_count, 1, gary)
|
44
|
-
|
45
|
-
assert_nil Setting.pokedex_count
|
46
|
-
|
47
|
-
assert_equal Setting.pokedex_count(ash), 151
|
48
|
-
assert_equal Setting.pokedex_count(gary), 1
|
49
|
-
|
50
|
-
#They don't want to be on file.
|
51
|
-
assert_nil Setting.pokedex_count(team_rocket)
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
context 'The create_or_update function' do
|
56
|
-
setup do
|
57
|
-
@ash = User.create(:first_name => 'Ash', :last_name => 'Ketchum')
|
58
|
-
end
|
59
|
-
|
60
|
-
should 'create a new assigned setting if it did not exist before' do
|
61
|
-
assert Setting.count.zero?
|
62
|
-
Setting.create_or_update(:pokedex_count, 151, @ash)
|
63
|
-
assert Setting.count == 1
|
64
|
-
end
|
65
|
-
|
66
|
-
should 'update an assigned setting if it already exists' do
|
67
|
-
Setting.create_or_update(:pokedex_count, 150, @ash)
|
68
|
-
assert Setting.count == 1
|
69
|
-
Setting.create_or_update(:pokedex_count, 151, @ash)
|
70
|
-
assert Setting.count == 1
|
71
|
-
assert_equal Setting.pokedex_count(@ash), 151
|
72
|
-
end
|
73
|
-
|
74
|
-
should 'return a setting object by default' do
|
75
|
-
assert_instance_of Setting, Setting.create_or_update(:pokedex_count, 151, @ash)
|
76
|
-
end
|
77
|
-
|
78
|
-
should 'return just the value if wished' do
|
79
|
-
assert_equal Setting.create_or_update(:pokedex_count, 151, @ash, true), 151
|
80
|
-
end
|
81
|
-
end
|
82
|
-
|
83
|
-
context 'The globally_defined method' do
|
84
|
-
should 'return true for a setting which is defined in config/settings.yml' do
|
85
|
-
assert SettingAccessors::Internal.globally_defined_setting?('a_string')
|
86
|
-
end
|
87
|
-
|
88
|
-
should 'return false for a setting which is not defined in config/settings.yml' do
|
89
|
-
assert !SettingAccessors::Internal.globally_defined_setting?('something_different')
|
90
|
-
end
|
91
|
-
end
|
92
|
-
|
93
|
-
context 'setting_accessors' do
|
94
|
-
should 'return the default value as fallback if :fallback => :default is given' do
|
95
|
-
assert_equal 'I am a string!', User.new.a_string
|
96
|
-
end
|
97
|
-
|
98
|
-
should 'return the global setting value as fallback if :fallback => :global is given' do
|
99
|
-
Setting.a_number = 42
|
100
|
-
assert_equal 42, User.new.a_number
|
101
|
-
end
|
102
|
-
|
103
|
-
should 'return the given value as fallback if :fallback => VALUE is given' do
|
104
|
-
assert_equal false, User.new.a_boolean
|
105
|
-
end
|
106
|
-
end
|
107
|
-
|
108
|
-
context 'Class-Defined Settings' do
|
109
|
-
should 'have the type defined in the setting_accessor call' do
|
110
|
-
assert u = User.create(:first_name => 'a', :last_name => 'name', :locale => 'de')
|
111
|
-
assert s = Setting.setting_record(:locale, User.first)
|
112
|
-
assert_equal 'string', s.value_type.to_s
|
113
|
-
end
|
114
|
-
|
115
|
-
should 'not override global settings' do
|
116
|
-
assert_raises(ArgumentError) do
|
117
|
-
User.class_eval do
|
118
|
-
setting_accessor :a_string, :type => :integer
|
119
|
-
end
|
120
|
-
end
|
121
|
-
end
|
122
|
-
|
123
|
-
should 'use value fallbacks' do
|
124
|
-
assert_equal 'Oiski Poiski!', User.new.class_wise_with_value_fallback
|
125
|
-
end
|
126
|
-
|
127
|
-
should 'use default fallbacks' do
|
128
|
-
assert_equal 'Kapitanski', User.new.class_wise_with_default_fallback
|
129
|
-
end
|
130
|
-
end
|
131
|
-
|
132
|
-
context 'Boolean settings' do
|
133
|
-
should 'respect temporary settings which are set to `false`' do
|
134
|
-
user = User.new(:class_wise_truthy_boolean => false)
|
135
|
-
assert_equal user.class_wise_truthy_boolean, false
|
136
|
-
end
|
137
|
-
|
138
|
-
should 'respect temporary settings which are set to `true`' do
|
139
|
-
user = User.new(:a_boolean => true)
|
140
|
-
assert_equal user.a_boolean, true
|
141
|
-
end
|
142
|
-
end
|
143
|
-
end
|
@@ -1,154 +0,0 @@
|
|
1
|
-
require_relative '../../../test_helper'
|
2
|
-
|
3
|
-
class UserTest < ActiveSupport::TestCase
|
4
|
-
context 'JSON serialization' do
|
5
|
-
setup do
|
6
|
-
@user = User.new(:a_string => 'test', :a_number => 42, :a_boolean => false)
|
7
|
-
end
|
8
|
-
|
9
|
-
should 'include the setting accessors' do
|
10
|
-
SettingAccessors::Internal.setting_accessor_names(User).each do |setting_name|
|
11
|
-
assert_includes @user.as_json.keys, setting_name
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
should 'contain the correct values' do
|
16
|
-
SettingAccessors::Internal.setting_accessor_names(User).each do |setting_name|
|
17
|
-
assert_equal @user.as_json[setting_name.to_s], @user.send(setting_name)
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
context 'when using as_json with option :only' do
|
22
|
-
context 'set to a class attribute name' do
|
23
|
-
should 'not include any setting accessors' do
|
24
|
-
json = @user.as_json :only => [:first_name]
|
25
|
-
SettingAccessors::Internal.setting_accessor_names(User).each do |setting_name|
|
26
|
-
assert_not_includes json.keys, setting_name
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
context 'set to a setting accessor name' do
|
32
|
-
should 'not include other setting accessors' do
|
33
|
-
json = @user.as_json :only => [:a_string]
|
34
|
-
assert_includes json.keys, 'a_string'
|
35
|
-
(SettingAccessors::Internal.setting_accessor_names(User) - ['a_string']).each do |setting_name|
|
36
|
-
assert_not_includes json.keys, setting_name
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
context 'when using as_json with option :except' do
|
43
|
-
context 'set to a class attribute name' do
|
44
|
-
should 'include all setting accessors' do
|
45
|
-
json = @user.as_json :except => [:first_name]
|
46
|
-
SettingAccessors::Internal.setting_accessor_names(User).each do |setting_name|
|
47
|
-
assert_includes json.keys, setting_name
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
context 'set to a setting accessor name' do
|
53
|
-
should 'include all other setting accessors' do
|
54
|
-
json = @user.as_json :except => [:a_string]
|
55
|
-
assert_not_includes json.keys, 'a_string'
|
56
|
-
(SettingAccessors::Internal.setting_accessor_names(User) - ['a_string']).each do |setting_name|
|
57
|
-
assert_includes json.keys, setting_name
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
|
-
context 'Boolean getter methods' do
|
65
|
-
setup do
|
66
|
-
@user = User.new(:a_string => 'test', :a_number => 42, :a_boolean => false)
|
67
|
-
end
|
68
|
-
|
69
|
-
should 'be created for boolean settings' do
|
70
|
-
assert @user.respond_to?(:a_boolean?), '?-getter is not defined for boolean settings'
|
71
|
-
end
|
72
|
-
|
73
|
-
should 'return the same value as the original getter' do
|
74
|
-
assert_equal @user.a_boolean, @user.a_boolean?
|
75
|
-
end
|
76
|
-
|
77
|
-
should 'not be created for non-boolean settings' do
|
78
|
-
assert !@user.respond_to?(:a_number?)
|
79
|
-
assert !@user.respond_to?(:a_string?)
|
80
|
-
end
|
81
|
-
end
|
82
|
-
|
83
|
-
context 'the read set (@temp_settings)' do
|
84
|
-
setup do
|
85
|
-
@user = User.create
|
86
|
-
@user_alias = User.find(@user.id)
|
87
|
-
|
88
|
-
# Use @user_alias here to ensure that the setting value is saved in the instance's read set
|
89
|
-
@user.a_boolean = !@user_alias.a_boolean
|
90
|
-
assert @user.save
|
91
|
-
end
|
92
|
-
|
93
|
-
should 'be refreshed with the new values on #reload' do
|
94
|
-
assert @user_alias.reload
|
95
|
-
assert_equal @user.a_boolean, @user_alias.a_boolean
|
96
|
-
end
|
97
|
-
end
|
98
|
-
|
99
|
-
context 'Polymorphic class-wise settings' do
|
100
|
-
setup do
|
101
|
-
@user = User.create
|
102
|
-
end
|
103
|
-
|
104
|
-
context 'when being assigned an initial value' do
|
105
|
-
should 'be created in database' do
|
106
|
-
@user.polymorphic_setting = {:a => :b}
|
107
|
-
assert @user.save
|
108
|
-
assert_equal User.last, @user
|
109
|
-
assert_equal User.last.polymorphic_setting, {:a => :b}
|
110
|
-
end
|
111
|
-
|
112
|
-
should 'be created in database if one of their properties changes' do
|
113
|
-
@user.polymorphic_setting[:new_key] = 'new_value'
|
114
|
-
assert @user.save
|
115
|
-
assert_equal User.last, @user
|
116
|
-
assert_equal({:new_key => 'new_value'}, User.last.polymorphic_setting)
|
117
|
-
end
|
118
|
-
|
119
|
-
should 'not change the value of other assignable settings' do
|
120
|
-
@user2 = User.create
|
121
|
-
@user2.polymorphic_setting = {:foo => :bar}
|
122
|
-
assert @user2.save
|
123
|
-
assert_equal User.first.polymorphic_setting, {}
|
124
|
-
end
|
125
|
-
end
|
126
|
-
|
127
|
-
context 'when being updated' do
|
128
|
-
setup do
|
129
|
-
@user.polymorphic_setting = {:a => :b}
|
130
|
-
assert @user.save
|
131
|
-
assert @user.reload
|
132
|
-
assert_equal({:a => :b}, @user.polymorphic_setting)
|
133
|
-
assert_equal({:a => :b}, User.last.polymorphic_setting)
|
134
|
-
end
|
135
|
-
|
136
|
-
# Single hash value changed, etc.
|
137
|
-
should 'be saved if one of their properties changes' do
|
138
|
-
@user.polymorphic_setting[:a] = :c
|
139
|
-
assert @user.save
|
140
|
-
assert @user.reload
|
141
|
-
assert_equal({:a => :c}, @user.polymorphic_setting)
|
142
|
-
assert_equal({:a => :c}, User.last.polymorphic_setting)
|
143
|
-
end
|
144
|
-
|
145
|
-
should 'be updated if their whole value changes' do
|
146
|
-
@user.polymorphic_setting = {:a => :c}
|
147
|
-
assert @user.save
|
148
|
-
assert @user.reload
|
149
|
-
assert_equal({:a => :c}, @user.polymorphic_setting)
|
150
|
-
assert_equal({:a => :c}, User.last.polymorphic_setting)
|
151
|
-
end
|
152
|
-
end
|
153
|
-
end
|
154
|
-
end
|
@@ -1,15 +0,0 @@
|
|
1
|
-
require_relative '../test_helper'
|
2
|
-
|
3
|
-
class InstallGeneratorTest < Rails::Generators::TestCase
|
4
|
-
tests SettingAccessors::Generators::InstallGenerator
|
5
|
-
destination File.expand_path('../dummy/tmp', File.dirname(__FILE__))
|
6
|
-
setup :prepare_destination
|
7
|
-
|
8
|
-
test 'Assert all files are properly created' do
|
9
|
-
run_generator
|
10
|
-
assert_file 'config/settings.yml'
|
11
|
-
assert_file 'config/initializers/setting_accessors.rb'
|
12
|
-
assert_file 'app/models/setting.rb'
|
13
|
-
assert_migration 'db/migrate/create_settings.rb'
|
14
|
-
end
|
15
|
-
end
|
data/test/test_helper.rb
DELETED
@@ -1,31 +0,0 @@
|
|
1
|
-
# Configure Rails Environment
|
2
|
-
ENV["RAILS_ENV"] = "test"
|
3
|
-
|
4
|
-
require File.expand_path("../dummy/config/environment.rb", __FILE__)
|
5
|
-
|
6
|
-
require 'active_support'
|
7
|
-
require 'minitest'
|
8
|
-
require 'shoulda'
|
9
|
-
require "rails/test_help"
|
10
|
-
|
11
|
-
Rails.backtrace_cleaner.remove_silencers!
|
12
|
-
|
13
|
-
# Load support files
|
14
|
-
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
|
15
|
-
|
16
|
-
# Load fixtures from the engine
|
17
|
-
if ActiveSupport::TestCase.method_defined?(:fixture_path=)
|
18
|
-
ActiveSupport::TestCase.fixture_path = File.expand_path("../fixtures", __FILE__)
|
19
|
-
end
|
20
|
-
|
21
|
-
# configure shoulda matchers
|
22
|
-
Shoulda::Matchers.configure do |config|
|
23
|
-
config.integrate do |with|
|
24
|
-
with.test_framework :minitest
|
25
|
-
with.library :rails
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
# For generators
|
30
|
-
require "rails/generators/test_case"
|
31
|
-
require "generators/setting_accessors/install_generator"
|