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
@@ -0,0 +1,177 @@
|
|
1
|
+
PATH
|
2
|
+
remote: ..
|
3
|
+
specs:
|
4
|
+
setting_accessors (1.0.0)
|
5
|
+
activemodel (>= 4.2, <= 5.2)
|
6
|
+
activerecord (>= 4.2, <= 5.2)
|
7
|
+
activesupport (>= 4.2, <= 5.2)
|
8
|
+
|
9
|
+
GEM
|
10
|
+
remote: https://rubygems.org/
|
11
|
+
specs:
|
12
|
+
actioncable (5.2.0)
|
13
|
+
actionpack (= 5.2.0)
|
14
|
+
nio4r (~> 2.0)
|
15
|
+
websocket-driver (>= 0.6.1)
|
16
|
+
actionmailer (5.2.0)
|
17
|
+
actionpack (= 5.2.0)
|
18
|
+
actionview (= 5.2.0)
|
19
|
+
activejob (= 5.2.0)
|
20
|
+
mail (~> 2.5, >= 2.5.4)
|
21
|
+
rails-dom-testing (~> 2.0)
|
22
|
+
actionpack (5.2.0)
|
23
|
+
actionview (= 5.2.0)
|
24
|
+
activesupport (= 5.2.0)
|
25
|
+
rack (~> 2.0)
|
26
|
+
rack-test (>= 0.6.3)
|
27
|
+
rails-dom-testing (~> 2.0)
|
28
|
+
rails-html-sanitizer (~> 1.0, >= 1.0.2)
|
29
|
+
actionview (5.2.0)
|
30
|
+
activesupport (= 5.2.0)
|
31
|
+
builder (~> 3.1)
|
32
|
+
erubi (~> 1.4)
|
33
|
+
rails-dom-testing (~> 2.0)
|
34
|
+
rails-html-sanitizer (~> 1.0, >= 1.0.3)
|
35
|
+
activejob (5.2.0)
|
36
|
+
activesupport (= 5.2.0)
|
37
|
+
globalid (>= 0.3.6)
|
38
|
+
activemodel (5.2.0)
|
39
|
+
activesupport (= 5.2.0)
|
40
|
+
activerecord (5.2.0)
|
41
|
+
activemodel (= 5.2.0)
|
42
|
+
activesupport (= 5.2.0)
|
43
|
+
arel (>= 9.0)
|
44
|
+
activestorage (5.2.0)
|
45
|
+
actionpack (= 5.2.0)
|
46
|
+
activerecord (= 5.2.0)
|
47
|
+
marcel (~> 0.3.1)
|
48
|
+
activesupport (5.2.0)
|
49
|
+
concurrent-ruby (~> 1.0, >= 1.0.2)
|
50
|
+
i18n (>= 0.7, < 2)
|
51
|
+
minitest (~> 5.1)
|
52
|
+
tzinfo (~> 1.1)
|
53
|
+
appraisal (2.2.0)
|
54
|
+
bundler
|
55
|
+
rake
|
56
|
+
thor (>= 0.14.0)
|
57
|
+
arel (9.0.0)
|
58
|
+
ast (2.4.0)
|
59
|
+
builder (3.2.3)
|
60
|
+
concurrent-ruby (1.1.3)
|
61
|
+
crass (1.0.4)
|
62
|
+
diff-lcs (1.3)
|
63
|
+
erubi (1.7.1)
|
64
|
+
generator_spec (0.9.4)
|
65
|
+
activesupport (>= 3.0.0)
|
66
|
+
railties (>= 3.0.0)
|
67
|
+
globalid (0.4.1)
|
68
|
+
activesupport (>= 4.2.0)
|
69
|
+
i18n (1.1.1)
|
70
|
+
concurrent-ruby (~> 1.0)
|
71
|
+
jaro_winkler (1.5.1)
|
72
|
+
loofah (2.2.3)
|
73
|
+
crass (~> 1.0.2)
|
74
|
+
nokogiri (>= 1.5.9)
|
75
|
+
mail (2.7.1)
|
76
|
+
mini_mime (>= 0.1.1)
|
77
|
+
marcel (0.3.3)
|
78
|
+
mimemagic (~> 0.3.2)
|
79
|
+
method_source (0.9.2)
|
80
|
+
mimemagic (0.3.2)
|
81
|
+
mini_mime (1.0.1)
|
82
|
+
mini_portile2 (2.3.0)
|
83
|
+
minitest (5.11.3)
|
84
|
+
nio4r (2.3.1)
|
85
|
+
nokogiri (1.8.5)
|
86
|
+
mini_portile2 (~> 2.3.0)
|
87
|
+
parallel (1.12.1)
|
88
|
+
parser (2.5.3.0)
|
89
|
+
ast (~> 2.4.0)
|
90
|
+
powerpack (0.1.2)
|
91
|
+
rack (2.0.6)
|
92
|
+
rack-test (1.1.0)
|
93
|
+
rack (>= 1.0, < 3)
|
94
|
+
rails (5.2.0)
|
95
|
+
actioncable (= 5.2.0)
|
96
|
+
actionmailer (= 5.2.0)
|
97
|
+
actionpack (= 5.2.0)
|
98
|
+
actionview (= 5.2.0)
|
99
|
+
activejob (= 5.2.0)
|
100
|
+
activemodel (= 5.2.0)
|
101
|
+
activerecord (= 5.2.0)
|
102
|
+
activestorage (= 5.2.0)
|
103
|
+
activesupport (= 5.2.0)
|
104
|
+
bundler (>= 1.3.0)
|
105
|
+
railties (= 5.2.0)
|
106
|
+
sprockets-rails (>= 2.0.0)
|
107
|
+
rails-dom-testing (2.0.3)
|
108
|
+
activesupport (>= 4.2.0)
|
109
|
+
nokogiri (>= 1.6)
|
110
|
+
rails-html-sanitizer (1.0.4)
|
111
|
+
loofah (~> 2.2, >= 2.2.2)
|
112
|
+
railties (5.2.0)
|
113
|
+
actionpack (= 5.2.0)
|
114
|
+
activesupport (= 5.2.0)
|
115
|
+
method_source
|
116
|
+
rake (>= 0.8.7)
|
117
|
+
thor (>= 0.18.1, < 2.0)
|
118
|
+
rainbow (3.0.0)
|
119
|
+
rake (10.5.0)
|
120
|
+
rspec (3.8.0)
|
121
|
+
rspec-core (~> 3.8.0)
|
122
|
+
rspec-expectations (~> 3.8.0)
|
123
|
+
rspec-mocks (~> 3.8.0)
|
124
|
+
rspec-core (3.8.0)
|
125
|
+
rspec-support (~> 3.8.0)
|
126
|
+
rspec-expectations (3.8.2)
|
127
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
128
|
+
rspec-support (~> 3.8.0)
|
129
|
+
rspec-mocks (3.8.0)
|
130
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
131
|
+
rspec-support (~> 3.8.0)
|
132
|
+
rspec-support (3.8.0)
|
133
|
+
rubocop (0.60.0)
|
134
|
+
jaro_winkler (~> 1.5.1)
|
135
|
+
parallel (~> 1.10)
|
136
|
+
parser (>= 2.5, != 2.5.1.1)
|
137
|
+
powerpack (~> 0.1)
|
138
|
+
rainbow (>= 2.2.2, < 4.0)
|
139
|
+
ruby-progressbar (~> 1.7)
|
140
|
+
unicode-display_width (~> 1.4.0)
|
141
|
+
ruby-progressbar (1.10.0)
|
142
|
+
sprockets (3.7.2)
|
143
|
+
concurrent-ruby (~> 1.0)
|
144
|
+
rack (> 1, < 3)
|
145
|
+
sprockets-rails (3.2.1)
|
146
|
+
actionpack (>= 4.0)
|
147
|
+
activesupport (>= 4.0)
|
148
|
+
sprockets (>= 3.0.0)
|
149
|
+
sqlite3 (1.3.13)
|
150
|
+
thor (0.20.3)
|
151
|
+
thread_safe (0.3.6)
|
152
|
+
tzinfo (1.2.5)
|
153
|
+
thread_safe (~> 0.1)
|
154
|
+
unicode-display_width (1.4.0)
|
155
|
+
websocket-driver (0.7.0)
|
156
|
+
websocket-extensions (>= 0.1.0)
|
157
|
+
websocket-extensions (0.1.3)
|
158
|
+
with_model (2.1.2)
|
159
|
+
activerecord (>= 4.2, < 6.0)
|
160
|
+
|
161
|
+
PLATFORMS
|
162
|
+
ruby
|
163
|
+
|
164
|
+
DEPENDENCIES
|
165
|
+
appraisal (~> 2.2)
|
166
|
+
bundler (~> 1.6)
|
167
|
+
generator_spec (~> 0.9)
|
168
|
+
rails (~> 5.2.0)
|
169
|
+
rake (~> 10.4)
|
170
|
+
rspec (~> 3.8)
|
171
|
+
rubocop (~> 0.60)
|
172
|
+
setting_accessors!
|
173
|
+
sqlite3 (~> 1.3)
|
174
|
+
with_model (~> 2.1)
|
175
|
+
|
176
|
+
BUNDLED WITH
|
177
|
+
1.17.1
|
@@ -1,13 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module SettingAccessors
|
2
4
|
module Generators
|
3
5
|
class InstallGenerator < Rails::Generators::Base
|
4
6
|
include Rails::Generators::Migration
|
5
7
|
|
6
|
-
source_root File.expand_path('
|
8
|
+
source_root File.expand_path('templates', __dir__)
|
7
9
|
|
8
|
-
argument :model_name, :
|
10
|
+
argument :model_name, type: :string, default: 'Setting'
|
9
11
|
|
10
|
-
def self.next_migration_number(
|
12
|
+
def self.next_migration_number(_nbr)
|
11
13
|
if @prev_migration_nr
|
12
14
|
@prev_migration_nr += 1
|
13
15
|
else
|
@@ -22,12 +24,12 @@ module SettingAccessors
|
|
22
24
|
template 'model.rb.erb', "app/models/#{model_name.classify.underscore}.rb"
|
23
25
|
migration_template 'migration.rb.erb', "db/migrate/create_#{model_name.classify.underscore.pluralize}.rb"
|
24
26
|
|
25
|
-
initializer 'setting_accessors.rb',
|
26
|
-
#The model your application is using for settings.
|
27
|
-
#If you created it using the SettingAccessors generator, the
|
28
|
-
#model name below should already be correct.
|
29
|
-
SettingAccessors.setting_class = #{model_name}
|
30
|
-
|
27
|
+
initializer 'setting_accessors.rb', <<~EOS
|
28
|
+
# The model your application is using for settings.
|
29
|
+
# If you created it using the SettingAccessors generator, the
|
30
|
+
# model name below should already be correct.
|
31
|
+
SettingAccessors.setting_class = #{model_name}
|
32
|
+
EOS
|
31
33
|
end
|
32
34
|
end
|
33
35
|
end
|
@@ -20,28 +20,4 @@ class <%= model_name.camelize %> < ActiveRecord::Base
|
|
20
20
|
belongs_to :assignable, :polymorphic => true
|
21
21
|
|
22
22
|
include SettingAccessors::SettingScaffold
|
23
|
-
|
24
|
-
#
|
25
|
-
# Makes accessing settings a little easier.
|
26
|
-
# Examples:
|
27
|
-
#
|
28
|
-
# #Loading **the value** of a global setting named "my_setting"
|
29
|
-
# Setting.my_setting
|
30
|
-
#
|
31
|
-
# #Setting **the value** of a global setting named "my_setting"
|
32
|
-
# Setting.my_setting = [1,2,3,4,5]
|
33
|
-
#
|
34
|
-
# #Loading **the value** of an assigned setting named "cool_setting"
|
35
|
-
# #+some_cool_user+ is here an instance of ActiveRecord::Base
|
36
|
-
# Setting.cool_setting(some_cool_user)
|
37
|
-
#
|
38
|
-
def self.method_missing(method, *args)
|
39
|
-
super(method, *args) if args.size > 1
|
40
|
-
method_name = method.to_s
|
41
|
-
if method_name.last == '='
|
42
|
-
self.create_or_update(method_name[0..method_name.length-2], args.first, nil, true)
|
43
|
-
else
|
44
|
-
self.get(method_name, args.first)
|
45
|
-
end
|
46
|
-
end
|
47
23
|
end
|
data/lib/setting_accessors.rb
CHANGED
@@ -1,11 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'active_record'
|
4
|
+
require 'active_model/validations'
|
5
|
+
|
1
6
|
require 'setting_accessors/version'
|
2
|
-
require 'setting_accessors/
|
3
|
-
require 'setting_accessors/
|
7
|
+
require 'setting_accessors/helpers'
|
8
|
+
require 'setting_accessors/accessor_generator'
|
9
|
+
require 'setting_accessors/converters/base'
|
10
|
+
require 'setting_accessors/converters/boolean_converter'
|
11
|
+
require 'setting_accessors/converters/integer_converter'
|
12
|
+
require 'setting_accessors/converters/string_converter'
|
13
|
+
require 'setting_accessors/converters/polymorphic_converter'
|
4
14
|
require 'setting_accessors/integration'
|
5
|
-
require 'setting_accessors/integration_validator'
|
6
15
|
require 'setting_accessors/internal'
|
7
16
|
require 'setting_accessors/setting_scaffold'
|
8
|
-
require 'setting_accessors/
|
17
|
+
require 'setting_accessors/setting_set'
|
9
18
|
|
10
19
|
ActiveRecord::Base.class_eval do
|
11
20
|
include SettingAccessors::Integration
|
@@ -13,7 +22,7 @@ end
|
|
13
22
|
|
14
23
|
module SettingAccessors
|
15
24
|
def self.setting_class
|
16
|
-
|
25
|
+
setting_class_name.constantize
|
17
26
|
end
|
18
27
|
|
19
28
|
def self.setting_class=(klass)
|
@@ -0,0 +1,66 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
#
|
4
|
+
# This class handles creating everything necessary for a new setting_accessor
|
5
|
+
# and the actual method assignment in the calling class.
|
6
|
+
#
|
7
|
+
module SettingAccessors
|
8
|
+
class AccessorGenerator
|
9
|
+
attr_reader :setting_name
|
10
|
+
attr_reader :options
|
11
|
+
|
12
|
+
def initialize(setting_name, **options)
|
13
|
+
@setting_name = setting_name
|
14
|
+
@options = options
|
15
|
+
end
|
16
|
+
|
17
|
+
def assign_setting!(klass)
|
18
|
+
SettingAccessors::Internal.set_class_setting(klass, setting_name, options)
|
19
|
+
define_getters(klass)
|
20
|
+
define_setter(klass)
|
21
|
+
define_active_record_helpers(klass)
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
def define_getters(klass, outer_setting_name = setting_name)
|
27
|
+
setting_type = SettingAccessors::Internal.setting_value_type(setting_name, klass).to_sym
|
28
|
+
|
29
|
+
klass.class_eval do
|
30
|
+
define_method(outer_setting_name) do
|
31
|
+
settings.get_or_default(outer_setting_name)
|
32
|
+
end
|
33
|
+
|
34
|
+
# Getter alias for boolean settings
|
35
|
+
alias_method "#{outer_setting_name}?", outer_setting_name if setting_type == :boolean
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def define_setter(klass, outer_setting_name = setting_name)
|
40
|
+
klass.class_eval do
|
41
|
+
define_method("#{outer_setting_name}=") do |new_value|
|
42
|
+
settings[outer_setting_name] = new_value
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def define_active_record_helpers(klass, outer_setting_name = setting_name)
|
48
|
+
klass.class_eval do
|
49
|
+
# NAME_was
|
50
|
+
define_method("#{outer_setting_name}_was") do
|
51
|
+
settings.value_was(outer_setting_name)
|
52
|
+
end
|
53
|
+
|
54
|
+
# NAME_before_type_cast
|
55
|
+
define_method("#{outer_setting_name}_before_type_cast") do
|
56
|
+
settings.value_before_type_cast(outer_setting_name)
|
57
|
+
end
|
58
|
+
|
59
|
+
# NAME_changed?
|
60
|
+
define_method("#{outer_setting_name}_changed?") do
|
61
|
+
settings.value_changed?(outer_setting_name)
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module SettingAccessors
|
4
|
+
module Converters
|
5
|
+
class Base
|
6
|
+
attr_reader :value
|
7
|
+
|
8
|
+
def initialize(value)
|
9
|
+
@value = value
|
10
|
+
end
|
11
|
+
|
12
|
+
def convert
|
13
|
+
# ActiveRecord does not convert +nil+ values to the corresponding database type
|
14
|
+
return value if value.nil?
|
15
|
+
|
16
|
+
parse_value
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.parse_value
|
20
|
+
raise NotImplementedError
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module SettingAccessors
|
4
|
+
module Converters
|
5
|
+
class BooleanConverter < Base
|
6
|
+
def parse_value
|
7
|
+
case value
|
8
|
+
when TrueClass, FalseClass
|
9
|
+
value
|
10
|
+
when String
|
11
|
+
parse_string
|
12
|
+
when Integer
|
13
|
+
parse_integer
|
14
|
+
else
|
15
|
+
parse_other_value
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
#
|
22
|
+
# Special handler for Rails 4.2, see the following deprecation warning:
|
23
|
+
#
|
24
|
+
# DEPRECATION WARNING: You attempted to assign a value which is not explicitly `true` or `false` (0.0)
|
25
|
+
# to a boolean column. Currently this value casts to `false`.
|
26
|
+
# This will change to match Ruby's semantics, and will cast to `true` in Rails 5.
|
27
|
+
# If you would like to maintain the current behavior, you should explicitly handle
|
28
|
+
# the values you would like cast to `false`.
|
29
|
+
#
|
30
|
+
def parse_other_value
|
31
|
+
Gem.loaded_specs['activerecord'].version >= Gem::Version.create('5.0')
|
32
|
+
end
|
33
|
+
|
34
|
+
def parse_integer
|
35
|
+
return true if value.to_i == 1
|
36
|
+
return false if value.to_i.zero?
|
37
|
+
|
38
|
+
nil
|
39
|
+
end
|
40
|
+
|
41
|
+
def parse_string
|
42
|
+
case value.downcase
|
43
|
+
when 'true', '1' then true
|
44
|
+
when 'false', '0' then false
|
45
|
+
when '' then nil
|
46
|
+
else parse_other_value
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module SettingAccessors
|
4
|
+
module Converters
|
5
|
+
class IntegerConverter < Base
|
6
|
+
def parse_value
|
7
|
+
return parse_boolean if value == true || value == false
|
8
|
+
|
9
|
+
value.to_i
|
10
|
+
rescue NoMethodError
|
11
|
+
nil
|
12
|
+
end
|
13
|
+
|
14
|
+
private
|
15
|
+
|
16
|
+
def parse_boolean
|
17
|
+
value ? 1 : 0
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|