ns_settings_ui 1.1.0 → 1.5.2
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/Appraisals +1 -1
- data/Gemfile +2 -1
- data/Jenkinsfile +11 -12
- data/README.md +6 -1
- data/app/controllers/ns_settings_ui/settings_controller.rb +2 -2
- data/app/helpers/ns_settings_ui/application_helper.rb +1 -1
- data/app/helpers/ns_settings_ui/settings_helper.rb +16 -0
- data/app/models/ns_settings_ui/setting.rb +64 -8
- data/app/views/ns_settings_ui/settings/_edit.html.erb +2 -2
- data/docker/{ruby-2.1 → ruby-2.5}/Dockerfile +2 -2
- data/gemfiles/rails_5.0.gemfile +1 -1
- data/gemfiles/rails_5.1.gemfile +8 -0
- data/gemfiles/rails_5.2.gemfile +8 -0
- data/lib/ns_settings_ui/version.rb +1 -1
- data/ns_settings_ui.gemspec +6 -4
- data/spec/controllers/ns_settings_ui/settings_controller_spec.rb +15 -6
- data/spec/dummy/app/assets/javascripts/application.js +0 -2
- data/spec/dummy/app/controllers/home_controller.rb +4 -0
- data/spec/dummy/app/views/layouts/application.html.erb +3 -2
- data/spec/dummy/config/initializers/ns_settings_ui.rb +1 -1
- data/spec/dummy/config/routes.rb +1 -0
- data/spec/helpers/ns_settings_ui/application_helper_spec.rb +25 -0
- data/spec/models/ns_settings_ui/setting_spec.rb +120 -18
- metadata +69 -94
- data/bin/rails +0 -13
- data/gemfiles/rails_3.2.gemfile +0 -7
- data/gemfiles/rails_4.2.gemfile +0 -7
- 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/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 -22
- 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 -78
- data/test/dummy/config/environments/test.rb +0 -39
- data/test/dummy/config/initializers/assets.rb +0 -8
- 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/wrap_parameters.rb +0 -14
- data/test/dummy/config/locales/en.yml +0 -23
- data/test/dummy/config/routes.rb +0 -3
- data/test/dummy/config/secrets.yml +0 -22
- data/test/dummy/lib/assets/.keep +0 -0
- data/test/dummy/log/.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/integration/navigation_test.rb +0 -9
- data/test/ns_settings_ui_test.rb +0 -7
- data/test/test_helper.rb +0 -15
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 02b49482fb2f7c31768dbe484b83e7fd0c781b28bd36fdf44bd9d143a8e7bb58
|
4
|
+
data.tar.gz: 47aebdc2fc7252481962e92310ff14c63f55d4b7830579748f213270ce2ad9a6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 95e9fcfbca788664f6c5cd8ca525379bd239add0daec59b25d6cda5550061f5232918391c503c3930d27327bf30f8b6289159c4bc8155d7715918bac08ba3936
|
7
|
+
data.tar.gz: ddc46185a5c57a8f7e04ce1ecc79cb63f379ce15e0c6efb6c4816b5231ad9b8de52a36d494f4e6e09f4b20c4b8c873e4859de1c88c60e022816c73631bdc8b64
|
data/Appraisals
CHANGED
data/Gemfile
CHANGED
data/Jenkinsfile
CHANGED
@@ -33,9 +33,9 @@ def appNode(String rubyVersion) {
|
|
33
33
|
}
|
34
34
|
}
|
35
35
|
|
36
|
-
appNode('ruby-2.1')
|
37
36
|
appNode('ruby-2.2')
|
38
37
|
appNode('ruby-2.3')
|
38
|
+
appNode('ruby-2.5')
|
39
39
|
|
40
40
|
def setupGemsDockerVolume(String rubyVersion, String executorNumber) {
|
41
41
|
stage name: "$rubyVersion - Setup Docker Volume", concurrency: 1
|
@@ -45,16 +45,19 @@ def setupGemsDockerVolume(String rubyVersion, String executorNumber) {
|
|
45
45
|
def resolveDependencies(me.knapik.DockerCompose compose, String rubyVersion) {
|
46
46
|
stage "$rubyVersion - Resolve Dependencies"
|
47
47
|
compose.exec('app', "bundle install --quiet")
|
48
|
-
compose.exec('app', "appraisal install")
|
48
|
+
compose.exec('app', "bundle exec appraisal install")
|
49
|
+
compose.exec('app', "bundle exec appraisal list > .rails_versions")
|
49
50
|
}
|
50
51
|
|
51
52
|
def test(me.knapik.DockerCompose compose, String rubyVersion) {
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
53
|
+
def railsVersions = readFile('.rails_versions').tokenize("\n")
|
54
|
+
for (int i = 0; i < railsVersions.size(); ++i) {
|
55
|
+
def railsVersion = railsVersions[i]
|
56
|
+
if(rubyVersion < 'ruby-2.5' && railsVersion >= 'rails_5.2')
|
57
|
+
continue
|
58
|
+
stage "$rubyVersion $railsVersion - Tests"
|
59
|
+
compose.exec('app', "bundle exec appraisal $railsVersion rake db:schema:load")
|
60
|
+
compose.exec('app', "bundle exec appraisal $railsVersion rspec spec")
|
58
61
|
}
|
59
62
|
}
|
60
63
|
|
@@ -67,10 +70,6 @@ def checkstyle(me.knapik.DockerCompose compose, String rubyVersion) {
|
|
67
70
|
}
|
68
71
|
}
|
69
72
|
|
70
|
-
def publishTestResults() {
|
71
|
-
step([$class: 'JUnitResultArchiver', testResults: 'spec/reports/*.xml,test/reports/*.xml'])
|
72
|
-
}
|
73
|
-
|
74
73
|
def publishStyleCheckResults() {
|
75
74
|
step([$class: 'CheckStylePublisher', pattern: 'checkstyle.xml'])
|
76
75
|
}
|
data/README.md
CHANGED
@@ -39,9 +39,14 @@ You can modify NsSettingsUi variables in order to:
|
|
39
39
|
* `NsSettingsUi.layout` - set a layout from your application
|
40
40
|
* `NsSettingsUi.parent_controller` - choose a controller that NsSettingUi controllers will inherit from
|
41
41
|
|
42
|
+
## Rails support
|
43
|
+
Rails 4.2 since ver 1.1, dropped in 1.5
|
44
|
+
Rails 5.0 since ver 1.2
|
45
|
+
Rails 5.2 since ver 1.5
|
46
|
+
|
42
47
|
## Testing
|
48
|
+
This engine is used by NTTR and socialguide.
|
43
49
|
|
44
|
-
This engine is used by NTTR and socialguide, thereby needs to be compatible with both Rails 3.2 and 4.2.
|
45
50
|
It uses [Appraisal](https://github.com/thoughtbot/appraisal) gem with a set up similar to [permitters gem](https://github.com/permitters/permitters) to give you an easy way of testing the code under multiple Rails versions.
|
46
51
|
|
47
52
|
To bundle install for each appraisal defined:
|
@@ -1,10 +1,10 @@
|
|
1
1
|
module NsSettingsUi
|
2
2
|
class SettingsController < NsSettingsUi::ApplicationController
|
3
3
|
layout NsSettingsUi.layout
|
4
|
-
|
4
|
+
before_action :setting_from_id_param, only: [:update, :reset]
|
5
5
|
|
6
6
|
def index
|
7
|
-
@settings = Setting.order('`key`').all
|
7
|
+
@settings = Setting.order(Arel.sql('`key`')).all
|
8
8
|
end
|
9
9
|
|
10
10
|
def update
|
@@ -6,8 +6,24 @@ module NsSettingsUi
|
|
6
6
|
''
|
7
7
|
end
|
8
8
|
|
9
|
+
def render_value_field(form, setting)
|
10
|
+
render_field(form, setting.value_type, :value, setting_value_class(setting))
|
11
|
+
end
|
12
|
+
|
13
|
+
def render_default_value_field(form, setting)
|
14
|
+
render_field(form, setting.value_type, :default_value)
|
15
|
+
end
|
16
|
+
|
9
17
|
private
|
10
18
|
|
19
|
+
def render_field(form, value_type, name, additional_class = '')
|
20
|
+
if [NsSettingsUi::Setting::TYPES[:boolean], NsSettingsUi::Setting::TYPES[:nullable_boolean]].include?(value_type)
|
21
|
+
form.select(name, [[:true, 'true'], [:false, 'false']], include_blank: true)
|
22
|
+
else
|
23
|
+
form.text_field(name, size: 10, class: "form-control #{additional_class}")
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
11
27
|
def recursive_hash
|
12
28
|
Hash.new { |hash, key| hash[key] = recursive_hash }
|
13
29
|
end
|
@@ -2,9 +2,37 @@ module NsSettingsUi
|
|
2
2
|
class Setting < ActiveRecord::Base
|
3
3
|
TYPES = {
|
4
4
|
string: 1,
|
5
|
-
integer: 2
|
5
|
+
integer: 2,
|
6
|
+
boolean: 3,
|
7
|
+
date: 7,
|
8
|
+
nullable_string: 4,
|
9
|
+
nullable_integer: 5,
|
10
|
+
nullable_boolean: 6
|
6
11
|
}.freeze
|
7
12
|
|
13
|
+
TYPE_HANDLERS = {
|
14
|
+
1 => :string_value,
|
15
|
+
2 => :integer_value,
|
16
|
+
3 => :boolean_value,
|
17
|
+
7 => :date_value,
|
18
|
+
4 => :nullable_string,
|
19
|
+
5 => :nullable_integer,
|
20
|
+
6 => :nullable_boolean
|
21
|
+
}.freeze
|
22
|
+
|
23
|
+
NULL_VALUES = [nil, ''].freeze
|
24
|
+
|
25
|
+
# TODO: in Nttr
|
26
|
+
# belongs_to :country
|
27
|
+
#
|
28
|
+
# def self.get(country, *keys)
|
29
|
+
# where(country: country, key: keys.join('.')).first_or_create
|
30
|
+
# end
|
31
|
+
#
|
32
|
+
# def country_code
|
33
|
+
# country.try(:alpha2).to_s
|
34
|
+
# end
|
35
|
+
|
8
36
|
def self.get(*keys)
|
9
37
|
where(key: keys.join('.')).first_or_create
|
10
38
|
end
|
@@ -14,13 +42,41 @@ module NsSettingsUi
|
|
14
42
|
end
|
15
43
|
|
16
44
|
def formatted_value
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
45
|
+
TYPE_HANDLERS[value_type] ? send(TYPE_HANDLERS[value_type]) : value
|
46
|
+
end
|
47
|
+
|
48
|
+
private
|
49
|
+
|
50
|
+
def nullify?
|
51
|
+
NULL_VALUES.include?(value)
|
52
|
+
end
|
53
|
+
|
54
|
+
def nullable_string
|
55
|
+
string_value unless nullify?
|
56
|
+
end
|
57
|
+
|
58
|
+
def nullable_integer
|
59
|
+
integer_value unless nullify?
|
60
|
+
end
|
61
|
+
|
62
|
+
def nullable_boolean
|
63
|
+
boolean_value unless nullify?
|
64
|
+
end
|
65
|
+
|
66
|
+
def string_value
|
67
|
+
value.to_s
|
68
|
+
end
|
69
|
+
|
70
|
+
def integer_value
|
71
|
+
value.to_i
|
72
|
+
end
|
73
|
+
|
74
|
+
def boolean_value
|
75
|
+
value == 'true'
|
76
|
+
end
|
77
|
+
|
78
|
+
def date_value
|
79
|
+
Date.parse(value)
|
24
80
|
end
|
25
81
|
end
|
26
82
|
end
|
@@ -1,9 +1,9 @@
|
|
1
1
|
<div id="setting_<%= setting.id -%>">
|
2
2
|
<%= form_for(setting, url: ns_settings_ui.setting_path(setting), method: :put, remote: true, html: {class: 'form-inline'}) do |f| %>
|
3
3
|
<%= f.label(:value) %>
|
4
|
-
<%= f
|
4
|
+
<%= render_value_field(f, setting) %>
|
5
5
|
<%= f.label(:default_value) %>
|
6
|
-
<%= f
|
6
|
+
<%= render_default_value_field(f, setting) %>
|
7
7
|
<%= f.submit('Update', class: 'btn btn-default') %>
|
8
8
|
<% end %>
|
9
9
|
<%= form_for(setting, url: ns_settings_ui.reset_setting_path(setting), method: :put, remote: true) do |f| %>
|
data/gemfiles/rails_5.0.gemfile
CHANGED
data/ns_settings_ui.gemspec
CHANGED
@@ -18,20 +18,22 @@ Gem::Specification.new do |s|
|
|
18
18
|
s.files = `git ls-files -z`.split("\x0")
|
19
19
|
s.test_files = Dir['spec/**/*']
|
20
20
|
|
21
|
-
s.add_dependency 'rails', '>=
|
21
|
+
s.add_dependency 'rails', '>= 5.0', '< 6'
|
22
22
|
|
23
23
|
s.add_development_dependency 'appraisal', '~> 2.1'
|
24
|
-
s.add_development_dependency 'sqlite3', '~> 1.3'
|
24
|
+
s.add_development_dependency 'sqlite3', '~> 1.3.0'
|
25
25
|
s.add_development_dependency 'rspec', '~> 3.4'
|
26
26
|
s.add_development_dependency 'rspec-rails', '~> 3.4'
|
27
27
|
s.add_development_dependency 'rspec-its', '~> 1.2'
|
28
28
|
s.add_development_dependency 'machinist', '~> 2.0'
|
29
29
|
s.add_development_dependency 'database_cleaner', '~> 1.5'
|
30
30
|
s.add_development_dependency 'u2i-ci_utils', '~> 2.0'
|
31
|
-
s.add_development_dependency 'bundler', '
|
32
|
-
s.add_development_dependency 'rake', '~>
|
31
|
+
s.add_development_dependency 'bundler', '> 1.5'
|
32
|
+
s.add_development_dependency 'rake', '~> 12.3.3'
|
33
33
|
s.add_development_dependency 'test-unit', '~> 3.1'
|
34
34
|
s.add_development_dependency 'rubocop-rspec', '~> 1.4.0'
|
35
|
+
s.add_development_dependency 'sass', '~> 3.4'
|
36
|
+
s.add_development_dependency 'rails-controller-testing'
|
35
37
|
|
36
38
|
s.add_development_dependency 'guard', '~> 2.13'
|
37
39
|
s.add_development_dependency 'guard-rspec', '~> 4.6'
|
@@ -5,11 +5,17 @@ RSpec.describe NsSettingsUi::SettingsController, type: :controller do
|
|
5
5
|
|
6
6
|
describe 'GET index' do
|
7
7
|
let!(:settings) { Array.new(8) { NsSettingsUi::Setting.make! }.sort_by(&:key) }
|
8
|
+
subject { get :index }
|
8
9
|
|
9
10
|
it 'assigns all settings' do
|
10
|
-
|
11
|
+
subject
|
11
12
|
expect(assigns(:settings)).to eq(settings)
|
12
13
|
end
|
14
|
+
|
15
|
+
context 'with views' do
|
16
|
+
render_views
|
17
|
+
it { is_expected.to be_success }
|
18
|
+
end
|
13
19
|
end
|
14
20
|
|
15
21
|
shared_examples_for 'sets setting and renders update' do
|
@@ -28,8 +34,9 @@ RSpec.describe NsSettingsUi::SettingsController, type: :controller do
|
|
28
34
|
|
29
35
|
describe 'PUT reset' do
|
30
36
|
let(:setting) { NsSettingsUi::Setting.make!(value: 'a', default_value: 'b') }
|
37
|
+
let(:params) { {id: setting.id, format: :js} }
|
31
38
|
|
32
|
-
before { get :reset,
|
39
|
+
before { get :reset, params: params }
|
33
40
|
|
34
41
|
it 'resets setting value to the default value' do
|
35
42
|
expect(assigns(:setting).value).to eq(setting.default_value)
|
@@ -40,16 +47,18 @@ RSpec.describe NsSettingsUi::SettingsController, type: :controller do
|
|
40
47
|
|
41
48
|
describe 'PUT update' do
|
42
49
|
let(:setting) { NsSettingsUi::Setting.make! }
|
43
|
-
let(:
|
50
|
+
let(:setting_params) { {value: '5', default_value: '6', key: 'matching.cluster_size'} }
|
51
|
+
let(:params) { {id: setting.id, setting: setting_params, format: :js} }
|
52
|
+
|
44
53
|
|
45
|
-
before { put :update,
|
54
|
+
before { put :update, params: params }
|
46
55
|
|
47
56
|
it 'updates value' do
|
48
|
-
expect(assigns(:setting).value).to eq(
|
57
|
+
expect(assigns(:setting).value).to eq(setting_params[:value])
|
49
58
|
end
|
50
59
|
|
51
60
|
it 'updates default value' do
|
52
|
-
expect(assigns(:setting).default_value).to eq(
|
61
|
+
expect(assigns(:setting).default_value).to eq(setting_params[:default_value])
|
53
62
|
end
|
54
63
|
|
55
64
|
it 'does not update key' do
|
@@ -2,12 +2,13 @@
|
|
2
2
|
<html>
|
3
3
|
<head>
|
4
4
|
<title>Dummy</title>
|
5
|
-
<%=
|
6
|
-
<%= javascript_include_tag "application" %>
|
5
|
+
<%= yield :head -%>
|
7
6
|
<%= csrf_meta_tags %>
|
8
7
|
</head>
|
9
8
|
<body>
|
10
9
|
|
10
|
+
<%= link_to 'Homepage', url_for(controller: '/home', action: :index) -%>
|
11
|
+
|
11
12
|
<%= yield %>
|
12
13
|
|
13
14
|
</body>
|
data/spec/dummy/config/routes.rb
CHANGED
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
RSpec.describe NsSettingsUi::ApplicationHelper, type: :helper do
|
4
|
+
describe '#url_for' do
|
5
|
+
subject { helper.url_for(url_params) }
|
6
|
+
|
7
|
+
context 'on self route' do
|
8
|
+
let(:url_params) { NsSettingsUi::Engine.routes.url_helpers.settings_path }
|
9
|
+
it { is_expected.to eq('/ns_settings_ui/settings') }
|
10
|
+
end
|
11
|
+
|
12
|
+
context 'on main application route' do
|
13
|
+
let(:url_params) { {controller: '/home'} }
|
14
|
+
it { is_expected.to eq('/home') }
|
15
|
+
end
|
16
|
+
|
17
|
+
context 'on incorrect route' do
|
18
|
+
let(:url_params) { {controller: 'non-existing-controller', action: 'index'} }
|
19
|
+
let(:error_class) do
|
20
|
+
Rails::VERSION::MAJOR <= 3 ? ActionController::RoutingError : ActionController::UrlGenerationError
|
21
|
+
end
|
22
|
+
it { expect { subject }.to raise_error(error_class) }
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -53,61 +53,163 @@ RSpec.describe NsSettingsUi::Setting, type: :model do
|
|
53
53
|
let(:key) { 'aa.bb' }
|
54
54
|
subject { described_class.make(key: key, value: value, value_type: value_type).formatted_value }
|
55
55
|
|
56
|
-
|
57
|
-
let(:value_type) { nil }
|
58
|
-
context 'when value is a nil' do
|
59
|
-
let(:value) { nil }
|
60
|
-
it { is_expected.to be_nil }
|
61
|
-
end
|
56
|
+
shared_examples 'string' do
|
62
57
|
context 'when value is a string' do
|
63
58
|
let(:value) { 'abcd' }
|
64
59
|
it { is_expected.to eq('abcd') }
|
65
60
|
end
|
61
|
+
|
66
62
|
context 'when value is an integer with a string' do
|
67
63
|
let(:value) { '4abcd' }
|
68
64
|
it { is_expected.to eq('4abcd') }
|
69
65
|
end
|
66
|
+
|
70
67
|
context 'when value is an integer' do
|
71
68
|
let(:value) { '10' }
|
72
69
|
it { is_expected.to eq('10') }
|
73
70
|
end
|
74
71
|
end
|
75
|
-
|
76
|
-
|
72
|
+
|
73
|
+
shared_examples 'integer' do
|
74
|
+
context 'when value is a string' do
|
75
|
+
let(:value) { 'abcd' }
|
76
|
+
it { is_expected.to eq(0) }
|
77
|
+
end
|
78
|
+
|
79
|
+
context 'when value is an integer with a string' do
|
80
|
+
let(:value) { '4abcd' }
|
81
|
+
it { is_expected.to eq(4) }
|
82
|
+
end
|
83
|
+
|
84
|
+
context 'when value is an integer' do
|
85
|
+
let(:value) { '10' }
|
86
|
+
it { is_expected.to eq(10) }
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
shared_examples 'boolean' do
|
91
|
+
context 'when value is true' do
|
92
|
+
let(:value) { 'true' }
|
93
|
+
it { is_expected.to eq(true) }
|
94
|
+
end
|
95
|
+
|
96
|
+
context 'when value is false' do
|
97
|
+
let(:value) { 'false' }
|
98
|
+
it { is_expected.to eq(false) }
|
99
|
+
end
|
100
|
+
|
101
|
+
context 'when value is other than true or 1 or false' do
|
102
|
+
let(:value) { 'other' }
|
103
|
+
it { is_expected.to eq(false) }
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
shared_examples 'nullable_type' do
|
77
108
|
context 'when value is a nil' do
|
78
109
|
let(:value) { nil }
|
79
110
|
it { is_expected.to eq(nil) }
|
80
111
|
end
|
112
|
+
|
113
|
+
context 'when value is a empty string' do
|
114
|
+
let(:value) { '' }
|
115
|
+
it { is_expected.to eq(nil) }
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
context 'when value_type is default' do
|
120
|
+
let(:value_type) { nil }
|
121
|
+
|
122
|
+
context 'when value is a nil' do
|
123
|
+
let(:value) { nil }
|
124
|
+
it { is_expected.to be_nil }
|
125
|
+
end
|
126
|
+
|
81
127
|
context 'when value is a string' do
|
82
128
|
let(:value) { 'abcd' }
|
83
129
|
it { is_expected.to eq('abcd') }
|
84
130
|
end
|
131
|
+
|
85
132
|
context 'when value is an integer with a string' do
|
86
133
|
let(:value) { '4abcd' }
|
87
134
|
it { is_expected.to eq('4abcd') }
|
88
135
|
end
|
136
|
+
|
89
137
|
context 'when value is an integer' do
|
90
138
|
let(:value) { '10' }
|
91
139
|
it { is_expected.to eq('10') }
|
92
140
|
end
|
141
|
+
|
142
|
+
context 'when value is a boolean' do
|
143
|
+
let(:value) { 'true' }
|
144
|
+
it { is_expected.to eq('true') }
|
145
|
+
end
|
93
146
|
end
|
147
|
+
|
148
|
+
context 'when value_type is :string' do
|
149
|
+
let(:value_type) { NsSettingsUi::Setting::TYPES[:string] }
|
150
|
+
|
151
|
+
context 'when value is a nil' do
|
152
|
+
let(:value) { nil }
|
153
|
+
it { is_expected.to eq('') }
|
154
|
+
end
|
155
|
+
|
156
|
+
it_behaves_like 'string'
|
157
|
+
end
|
158
|
+
|
159
|
+
context 'when value_type is :nullable_string' do
|
160
|
+
let(:value_type) { NsSettingsUi::Setting::TYPES[:nullable_string] }
|
161
|
+
|
162
|
+
it_behaves_like 'string'
|
163
|
+
it_behaves_like 'nullable_type'
|
164
|
+
end
|
165
|
+
|
94
166
|
context 'when value_type is :integer' do
|
95
167
|
let(:value_type) { NsSettingsUi::Setting::TYPES[:integer] }
|
168
|
+
|
96
169
|
context 'when value is a nil' do
|
97
170
|
let(:value) { nil }
|
98
|
-
it { is_expected.to eq(nil) }
|
99
|
-
end
|
100
|
-
context 'when value is a string' do
|
101
|
-
let(:value) { 'abcd' }
|
102
171
|
it { is_expected.to eq(0) }
|
103
172
|
end
|
104
|
-
|
105
|
-
|
106
|
-
|
173
|
+
|
174
|
+
it_behaves_like 'integer'
|
175
|
+
end
|
176
|
+
|
177
|
+
context 'when value_type is :nullable_integer' do
|
178
|
+
let(:value_type) { NsSettingsUi::Setting::TYPES[:nullable_integer] }
|
179
|
+
|
180
|
+
it_behaves_like 'integer'
|
181
|
+
it_behaves_like 'nullable_type'
|
182
|
+
end
|
183
|
+
|
184
|
+
context 'when value_type is :boolean' do
|
185
|
+
let(:value_type) { NsSettingsUi::Setting::TYPES[:boolean] }
|
186
|
+
|
187
|
+
context 'when value is a nil' do
|
188
|
+
let(:value) { nil }
|
189
|
+
it { is_expected.to eq(false) }
|
107
190
|
end
|
108
|
-
|
109
|
-
|
110
|
-
|
191
|
+
|
192
|
+
it_behaves_like 'boolean'
|
193
|
+
end
|
194
|
+
|
195
|
+
context 'when value_type is :nullable_boolean' do
|
196
|
+
let(:value_type) { NsSettingsUi::Setting::TYPES[:nullable_boolean] }
|
197
|
+
|
198
|
+
it_behaves_like 'boolean'
|
199
|
+
it_behaves_like 'nullable_type'
|
200
|
+
end
|
201
|
+
|
202
|
+
context 'when value_type is :date' do
|
203
|
+
let(:value_type) { NsSettingsUi::Setting::TYPES[:date] }
|
204
|
+
|
205
|
+
context 'when value is a proper date' do
|
206
|
+
let(:value) { '2017-05-08' }
|
207
|
+
it { is_expected.to eq(Date.parse(value)) }
|
208
|
+
end
|
209
|
+
|
210
|
+
context 'when value is malformatted' do
|
211
|
+
let(:value) { '2017-05-df' }
|
212
|
+
it { expect { subject }.to raise_error(ArgumentError, 'invalid date') }
|
111
213
|
end
|
112
214
|
end
|
113
215
|
end
|