activeadmin_settings_cached 2.0.1 → 2.1.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 +4 -4
- data/.gitignore +1 -0
- data/.rspec +2 -0
- data/.travis.yml +7 -8
- data/Appraisals +11 -0
- data/Dockerfile +26 -0
- data/Gemfile +3 -2
- data/Makefile +15 -2
- data/README.md +3 -2
- data/activeadmin_settings_cached.gemspec +3 -2
- data/app/views/admin/settings/_index.html.erb +3 -2
- data/config/locales/de.yml +16 -0
- data/docker-compose.yml +13 -0
- data/lib/activeadmin_settings_cached.rb +1 -1
- data/lib/activeadmin_settings_cached/coercions.rb +21 -26
- data/lib/activeadmin_settings_cached/dsl.rb +16 -13
- data/lib/activeadmin_settings_cached/engine.rb +1 -1
- data/lib/activeadmin_settings_cached/model.rb +43 -8
- data/lib/activeadmin_settings_cached/options.rb +3 -1
- data/lib/activeadmin_settings_cached/version.rb +1 -1
- data/spec/coercions_spec.rb +64 -28
- data/spec/model_spec.rb +158 -2
- data/spec/settings_spec.rb +158 -118
- data/spec/support/admin.rb +9 -0
- data/spec/support/rails_template.rb +17 -1
- metadata +38 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 66b215e385891ca9912114999fb2f1503e0ea964
|
4
|
+
data.tar.gz: 144d18fd399db01299913ffde456ba1d758dd875
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 86461b1090024fbbd1be6754c99de2f3e8f31bffeb9bf80d099227063052db47f8a7fc36e996197cbcdb2622252b3c63cb7f7e1bb14cc1950f16229c46ae09ff
|
7
|
+
data.tar.gz: bee99e56e562d814c492c1055052b9895bd37465b07780a52e662e275590568fd2bf995148d50fe1378937ebdd39f91b3438f17d24e5e7169f7447557c4598d5
|
data/.gitignore
CHANGED
data/.rspec
ADDED
data/.travis.yml
CHANGED
@@ -1,11 +1,10 @@
|
|
1
|
+
language: ruby
|
2
|
+
cache: bundler
|
3
|
+
|
1
4
|
script:
|
2
|
-
-
|
5
|
+
- make
|
6
|
+
|
3
7
|
rvm:
|
4
|
-
|
5
|
-
|
6
|
-
- 2.2.0
|
8
|
+
#- 2.1.5
|
9
|
+
#- 2.2.0
|
7
10
|
- 2.3.0
|
8
|
-
before_install:
|
9
|
-
- gem install bundler -v '= 1.9.3'
|
10
|
-
- gem update --system
|
11
|
-
- gem --version
|
data/Appraisals
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
appraise "rails4.2" do
|
2
|
+
gem "rails", "~> 4.2.0"
|
3
|
+
end
|
4
|
+
|
5
|
+
#appraise "rails5.0" do
|
6
|
+
#gem "rails", "~> 5.0.0"
|
7
|
+
#gem 'inherited_resources', github: 'activeadmin/inherited_resources'
|
8
|
+
#gem 'ransack', github: 'activerecord-hackery/ransack'
|
9
|
+
#gem 'draper', '> 3.x'
|
10
|
+
#gem 'sass-rails', github: 'rails/sass-rails' # For Sprockets 4
|
11
|
+
#end
|
data/Dockerfile
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
FROM ruby:2.3-slim
|
2
|
+
|
3
|
+
ENV PHANTOMJS_VERSION 1.9.8
|
4
|
+
|
5
|
+
RUN apt-get update -qq && \
|
6
|
+
DEBIAN_FRONTEND=noninteractive apt-get install -yq --no-install-recommends \
|
7
|
+
make \
|
8
|
+
gcc \
|
9
|
+
g++ \
|
10
|
+
libsqlite3-dev \
|
11
|
+
git-core \
|
12
|
+
wget \
|
13
|
+
libfreetype6 \
|
14
|
+
libfontconfig \
|
15
|
+
bzip2 && \
|
16
|
+
apt-get clean
|
17
|
+
|
18
|
+
RUN \
|
19
|
+
wget -q --no-check-certificate -O /tmp/phantomjs-$PHANTOMJS_VERSION-linux-x86_64.tar.bz2 https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-$PHANTOMJS_VERSION-linux-x86_64.tar.bz2 && \
|
20
|
+
mkdir -p /srv/var && \
|
21
|
+
tar -xjf /tmp/phantomjs-$PHANTOMJS_VERSION-linux-x86_64.tar.bz2 -C /tmp && \
|
22
|
+
rm -f /tmp/phantomjs-$PHANTOMJS_VERSION-linux-x86_64.tar.bz2 && \
|
23
|
+
mv /tmp/phantomjs-$PHANTOMJS_VERSION-linux-x86_64/ /srv/var/phantomjs && \
|
24
|
+
ln -s /srv/var/phantomjs/bin/phantomjs /usr/bin/phantomjs
|
25
|
+
|
26
|
+
WORKDIR /app
|
data/Gemfile
CHANGED
@@ -1,8 +1,9 @@
|
|
1
1
|
source 'https://rubygems.org'
|
2
2
|
|
3
3
|
group :test do
|
4
|
-
|
5
|
-
gem '
|
4
|
+
gem 'pry-byebug'
|
5
|
+
gem 'therubyracer'
|
6
|
+
gem 'activeadmin', github: 'activeadmin/activeadmin'
|
6
7
|
end
|
7
8
|
|
8
9
|
gemspec
|
data/Makefile
CHANGED
@@ -1,3 +1,16 @@
|
|
1
|
-
|
1
|
+
default: test
|
2
|
+
|
3
|
+
test: appraisals
|
4
|
+
bundle exec appraisal rspec ${T}
|
5
|
+
|
6
|
+
appraisals: setup
|
7
|
+
bundle exec appraisal install
|
8
|
+
|
9
|
+
setup:
|
10
|
+
gem install bundler --no-ri --no-rdoc
|
11
|
+
bundle check || bundle install -j 2
|
12
|
+
|
13
|
+
clean:
|
14
|
+
rm -f Gemfile.lock
|
2
15
|
rm -rf spec/rails
|
3
|
-
|
16
|
+
rm -rf gemfiles
|
data/README.md
CHANGED
@@ -20,7 +20,7 @@ And then execute:
|
|
20
20
|
|
21
21
|
Create your settings model:
|
22
22
|
|
23
|
-
$ rails g settings
|
23
|
+
$ rails g settings:install
|
24
24
|
$ bundle exec rake db:migrate
|
25
25
|
|
26
26
|
Create your settings page:
|
@@ -52,7 +52,8 @@ end
|
|
52
52
|
Tool | Description
|
53
53
|
--------------------- | -----------
|
54
54
|
:model_name |String, settings model name override (default: uses name from global config.)
|
55
|
-
:starting_with |String, each key must starting with, (default: nil)
|
55
|
+
:starting_with |String, each key must starting with, (default: nil)
|
56
|
+
:key |String, Symbol root key, can be replacement for starting_with, (default: nil)
|
56
57
|
:template |String, custom template rendering (default: 'admin/settings/index')
|
57
58
|
:template_object |object passing to view (default: ActiveadminSettingsCached::Model instance)
|
58
59
|
:display |Hash, display settings override (default: {})
|
@@ -19,12 +19,13 @@ Gem::Specification.new do |s|
|
|
19
19
|
s.require_paths = ["lib"]
|
20
20
|
|
21
21
|
s.add_dependency 'activeadmin'
|
22
|
-
s.add_dependency 'rails-settings-cached', '>= 0.5.3', '< 0.
|
22
|
+
s.add_dependency 'rails-settings-cached', '>= 0.5.3', '< 0.6.6'
|
23
|
+
s.add_dependency 'dry-types', '>= 0.8.1'
|
23
24
|
|
24
25
|
s.add_development_dependency "bundler"
|
25
26
|
s.add_development_dependency "rake"
|
26
27
|
s.add_development_dependency "coveralls"
|
27
|
-
|
28
|
+
s.add_development_dependency "appraisal"
|
28
29
|
s.add_development_dependency "database_cleaner"
|
29
30
|
s.add_development_dependency "sqlite3"
|
30
31
|
s.add_development_dependency "rspec-rails"
|
@@ -9,11 +9,12 @@
|
|
9
9
|
</thead>
|
10
10
|
<tbody>
|
11
11
|
<% settings_model.settings.each_pair do |name, _| %>
|
12
|
+
<% field_name = settings_model.field_name(name) %>
|
12
13
|
<tr class="odd">
|
13
|
-
<td><strong><%= f.label t("settings.attributes.#{
|
14
|
+
<td><strong><%= f.label t("settings.attributes.#{field_name}", default: field_name) %></strong></td>
|
14
15
|
<td>
|
15
16
|
<div class='form'>
|
16
|
-
<ol><%= f.input
|
17
|
+
<ol><%= f.input field_name, settings_model.field_options(field_name, name) %></ol>
|
17
18
|
</div>
|
18
19
|
</td>
|
19
20
|
</tr>
|
@@ -0,0 +1,16 @@
|
|
1
|
+
de:
|
2
|
+
activeadmin_settings_cached:
|
3
|
+
settings:
|
4
|
+
update:
|
5
|
+
success: Konfiguration wurde gespeichert.
|
6
|
+
|
7
|
+
activerecord:
|
8
|
+
models:
|
9
|
+
settings: 'Konfiguration'
|
10
|
+
|
11
|
+
settings:
|
12
|
+
menu:
|
13
|
+
label: 'Konfiguration'
|
14
|
+
index:
|
15
|
+
name: 'Name'
|
16
|
+
value: 'Wert'
|
data/docker-compose.yml
ADDED
@@ -1,17 +1,15 @@
|
|
1
|
+
require 'dry-types'
|
2
|
+
|
1
3
|
module ActiveadminSettingsCached
|
4
|
+
# Coerce user input values to defined types
|
5
|
+
#
|
6
|
+
# @api private
|
2
7
|
class Coercions
|
3
|
-
SIMPLE_COERCIONS = {
|
4
|
-
float: :to_f,
|
5
|
-
integer: :to_i,
|
6
|
-
symbol: :to_sym
|
7
|
-
}
|
8
8
|
attr_reader :defaults, :display
|
9
9
|
|
10
10
|
def initialize(defaults, display)
|
11
11
|
@defaults = defaults
|
12
12
|
@display = display
|
13
|
-
|
14
|
-
init_methods
|
15
13
|
end
|
16
14
|
|
17
15
|
def cast_params(params)
|
@@ -22,39 +20,36 @@ module ActiveadminSettingsCached
|
|
22
20
|
return coerced_params unless block_given?
|
23
21
|
|
24
22
|
coerced_params.each do |name, value|
|
25
|
-
yield(name, value.call)
|
23
|
+
yield(name, value.call) unless value.nil?
|
26
24
|
end
|
27
25
|
end
|
28
26
|
|
29
27
|
private
|
30
28
|
|
31
|
-
def coerce(m, &block)
|
32
|
-
define_singleton_method :"string_to_#{m.to_s}", &block
|
33
|
-
end
|
34
|
-
|
35
|
-
def init_methods
|
36
|
-
coerce :boolean do |value|
|
37
|
-
value && %w(true 1 yes y t).include?(value)
|
38
|
-
end
|
39
|
-
|
40
|
-
SIMPLE_COERCIONS.each do |k, v|
|
41
|
-
coerce(k) { |value| String(value).send(v) }
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
29
|
def cast_value(name, value)
|
46
30
|
case defaults[name]
|
47
31
|
when TrueClass, FalseClass
|
48
|
-
|
32
|
+
-> { value_or_default('bool', value, false) }
|
49
33
|
when Integer
|
50
|
-
-> {
|
34
|
+
-> { value_or_default('int', value, 0) }
|
51
35
|
when Float
|
52
|
-
-> {
|
36
|
+
-> { value_or_default('float', value, 0.0) }
|
37
|
+
when Hash, 'ActiveSupport::HashWithIndifferentAccess'
|
38
|
+
nil
|
53
39
|
when Symbol
|
54
|
-
-> {
|
40
|
+
-> { value.to_sym }
|
55
41
|
else
|
56
42
|
-> { value }
|
57
43
|
end
|
58
44
|
end
|
45
|
+
|
46
|
+
def value_or_default(type, value, default)
|
47
|
+
result = Dry::Types["form.#{type}"].call(value)
|
48
|
+
if Dry::Types[type].valid?(result)
|
49
|
+
result
|
50
|
+
else
|
51
|
+
default
|
52
|
+
end
|
53
|
+
end
|
59
54
|
end
|
60
55
|
end
|
@@ -1,30 +1,33 @@
|
|
1
1
|
module ActiveadminSettingsCached
|
2
2
|
module DSL
|
3
|
-
# Declares settings function
|
3
|
+
# Declares settings function.
|
4
4
|
#
|
5
|
-
#
|
6
|
-
# +model_name+:: settings model name override (default: uses name from global config.)
|
7
|
-
# +starting_with+:: each key must starting with, (default: nil)
|
8
|
-
# +template+:: custom template rendering (default: 'admin/settings/index')
|
9
|
-
# +template_object+:: object to use in templates (default: ActiveadminSettingsCached::Model instance)
|
10
|
-
# +display+:: display settings override (default: nil)
|
11
|
-
# +title+:: title value override (default: I18n.t('settings.menu.label'))
|
5
|
+
# @api public
|
12
6
|
#
|
7
|
+
# @param [Hash] options
|
8
|
+
# @option options [String] :model_name, settings model name override (default: uses name from global config.)
|
9
|
+
# @option options [String] :starting_with, each key must starting with, (default: nil)
|
10
|
+
# @option options [String] :key, root key can be replacement for starting_with, (default: nil)
|
11
|
+
# @option options [String] :tempalte custom, template rendering (default: 'admin/settings/index')
|
12
|
+
# @option options [String] :template_object, object to use in templates (default: ActiveadminSettingsCached::Model instance)
|
13
|
+
# @option options [String] :display, display settings override (default: nil)
|
14
|
+
# @option options [String] :title, title value override (default: I18n.t('settings.menu.label'))
|
13
15
|
def active_admin_settings_page(options = {}, &block)
|
14
|
-
options.assert_valid_keys(*Options::VALID_OPTIONS)
|
16
|
+
options.assert_valid_keys(*ActiveadminSettingsCached::Options::VALID_OPTIONS)
|
15
17
|
|
16
|
-
options = Options.options_for(options)
|
17
|
-
coercion =
|
18
|
+
options = ActiveadminSettingsCached::Options.options_for(options)
|
19
|
+
coercion =
|
20
|
+
ActiveadminSettingsCached::Coercions.new(options[:template_object].defaults, options[:template_object].display)
|
18
21
|
|
19
22
|
content title: options[:title] do
|
20
23
|
render partial: options[:template], locals: { settings_model: options[:template_object] }
|
21
24
|
end
|
22
25
|
|
23
26
|
page_action :update, method: :post do
|
24
|
-
settings_params = params.require(:settings).permit
|
27
|
+
settings_params = params.require(:settings).permit!
|
25
28
|
|
26
29
|
coercion.cast_params(settings_params) do |name, value|
|
27
|
-
options[:template_object]
|
30
|
+
options[:template_object].save(name, value)
|
28
31
|
end
|
29
32
|
|
30
33
|
flash[:success] = t('activeadmin_settings_cached.settings.update.success'.freeze)
|
@@ -7,7 +7,7 @@ module ActiveadminSettingsCached
|
|
7
7
|
config.autoload_paths += Dir["#{config.root}/lib"]
|
8
8
|
|
9
9
|
initializer 'activeadmin_settings_cached' do
|
10
|
-
ActiveAdmin::DSL.send(:include, ActiveadminSettingsCached::DSL)
|
10
|
+
::ActiveAdmin::DSL.send(:include, ::ActiveadminSettingsCached::DSL)
|
11
11
|
end
|
12
12
|
end
|
13
13
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
module ActiveadminSettingsCached
|
2
2
|
class Model
|
3
|
-
include ActiveModel::Model
|
3
|
+
include ::ActiveModel::Model
|
4
4
|
|
5
5
|
attr_reader :attributes
|
6
6
|
|
@@ -11,9 +11,13 @@ module ActiveadminSettingsCached
|
|
11
11
|
assign_attributes(merge_attributes(args))
|
12
12
|
end
|
13
13
|
|
14
|
-
def
|
14
|
+
def field_name(settings_name)
|
15
|
+
has_key? ? "#{attributes[:key]}.#{settings_name}" : settings_name
|
16
|
+
end
|
17
|
+
|
18
|
+
def field_options(settings_name, key_name)
|
15
19
|
default_value = defaults[settings_name]
|
16
|
-
value = settings[
|
20
|
+
value = settings[key_name]
|
17
21
|
|
18
22
|
input_opts = if default_value.is_a?(Array)
|
19
23
|
{
|
@@ -36,12 +40,22 @@ module ActiveadminSettingsCached
|
|
36
40
|
end
|
37
41
|
|
38
42
|
def settings
|
39
|
-
data = load_settings
|
40
|
-
|
43
|
+
data = has_key? ? load_settings_by_key : load_settings
|
44
|
+
return unless data
|
45
|
+
|
46
|
+
::ActiveSupport::OrderedHash[data.to_a.sort { |a, b| a.first <=> b.first }]
|
41
47
|
end
|
42
48
|
|
43
49
|
def defaults
|
44
|
-
settings_model.defaults
|
50
|
+
settings_model.respond_to?(:defaults) ?
|
51
|
+
settings_model.defaults :
|
52
|
+
::RailsSettings::Default
|
53
|
+
end
|
54
|
+
|
55
|
+
def defaults_keys
|
56
|
+
settings_model.respond_to?(:defaults) ?
|
57
|
+
settings_model.defaults.keys :
|
58
|
+
::RailsSettings::Default.instance.keys
|
45
59
|
end
|
46
60
|
|
47
61
|
def display
|
@@ -56,6 +70,14 @@ module ActiveadminSettingsCached
|
|
56
70
|
settings_model[param] = value
|
57
71
|
end
|
58
72
|
|
73
|
+
def save(key, value)
|
74
|
+
if has_key?
|
75
|
+
settings_model.merge!(attributes[:key], { clean_key(key) => value })
|
76
|
+
else
|
77
|
+
self[key] = value
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
59
81
|
def persisted?
|
60
82
|
false
|
61
83
|
end
|
@@ -68,6 +90,18 @@ module ActiveadminSettingsCached
|
|
68
90
|
settings_model.public_send(meth, attributes[:starting_with])
|
69
91
|
end
|
70
92
|
|
93
|
+
def load_settings_by_key
|
94
|
+
self[attributes[:key]]
|
95
|
+
end
|
96
|
+
|
97
|
+
def has_key?
|
98
|
+
attributes[:key].present?
|
99
|
+
end
|
100
|
+
|
101
|
+
def clean_key(key)
|
102
|
+
key.is_a?(Symbol) ? key : "#{key.sub("#{attributes[:key]}.", '')}"
|
103
|
+
end
|
104
|
+
|
71
105
|
def assign_attributes(args = {})
|
72
106
|
@attributes.merge!(args)
|
73
107
|
end
|
@@ -75,8 +109,9 @@ module ActiveadminSettingsCached
|
|
75
109
|
def default_attributes
|
76
110
|
{
|
77
111
|
starting_with: nil,
|
78
|
-
|
79
|
-
|
112
|
+
key: nil,
|
113
|
+
model_name: ::ActiveadminSettingsCached.config.model_name,
|
114
|
+
display: ::ActiveadminSettingsCached.config.display
|
80
115
|
}
|
81
116
|
end
|
82
117
|
|
@@ -6,11 +6,13 @@ module ActiveadminSettingsCached
|
|
6
6
|
:template,
|
7
7
|
:template_object,
|
8
8
|
:display,
|
9
|
+
:key,
|
9
10
|
:title
|
10
11
|
].freeze
|
11
12
|
|
12
13
|
def self.options_for(options = {})
|
13
|
-
options[:template_object] =
|
14
|
+
options[:template_object] =
|
15
|
+
::ActiveadminSettingsCached::Model.new(options) unless options[:template_object]
|
14
16
|
|
15
17
|
{
|
16
18
|
template: 'admin/settings/index',
|
data/spec/coercions_spec.rb
CHANGED
@@ -1,42 +1,78 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
1
|
RSpec.describe ActiveadminSettingsCached::Coercions do
|
4
|
-
let(:display)
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
2
|
+
let(:display) do
|
3
|
+
Hash[
|
4
|
+
'base.first_setting' => 'string',
|
5
|
+
'base.second_setting' => 'boolean',
|
6
|
+
'base.third_setting' => 'number',
|
7
|
+
'base.four_setting' => 'number',
|
8
|
+
'second.first_setting' => 'boolean',
|
9
|
+
'second.second_setting' => 'string'
|
10
|
+
].with_indifferent_access
|
11
|
+
end
|
12
|
+
|
13
|
+
let(:defaults) do
|
14
|
+
Hash[
|
15
|
+
'base.first_setting' => 'AAA',
|
16
|
+
'base.second_setting' => true,
|
17
|
+
'base.third_setting' => 5,
|
18
|
+
'base.four_setting' => 5.5,
|
19
|
+
'base.five_setting' => :aaa,
|
20
|
+
'second.first_setting' => false,
|
21
|
+
'second.second_setting' => 'BBB',
|
22
|
+
'some' => Hash.new
|
23
|
+
].with_indifferent_access
|
24
|
+
end
|
25
|
+
|
26
|
+
let(:right_params) do
|
27
|
+
ActionController::Parameters.new(
|
28
|
+
Hash[
|
29
|
+
'base.first_setting' => 'BBB',
|
30
|
+
'base.second_setting' => 'false',
|
31
|
+
'base.third_setting' => '155',
|
32
|
+
'base.four_setting' => '55.5',
|
33
|
+
'base.five_setting' => 'bbb',
|
34
|
+
'second.first_setting' => 'true',
|
35
|
+
'second.second_setting' => 'AAA'
|
36
|
+
]
|
37
|
+
)
|
38
|
+
end
|
39
|
+
|
40
|
+
let(:wrong_params) do
|
41
|
+
ActionController::Parameters.new(
|
42
|
+
Hash['base.second_setting' => 'hjgj',
|
43
|
+
'base.third_setting' => 'fhfh',
|
44
|
+
'base.four_setting' => 'gjfhg',
|
45
|
+
'second.first_setting' => 'ggf',
|
46
|
+
'some' => Hash.new
|
47
|
+
])
|
48
|
+
end
|
49
|
+
|
15
50
|
let(:no_params) { ActionController::Parameters.new(Hash[]) }
|
16
51
|
|
17
|
-
|
18
|
-
|
52
|
+
subject(:coercions) do
|
53
|
+
ActiveadminSettingsCached::Coercions.new(defaults, display)
|
19
54
|
end
|
20
55
|
|
21
56
|
it 'when good params' do
|
22
|
-
expect { |b|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
57
|
+
expect { |b| coercions.cast_params(right_params, &b) }
|
58
|
+
.to yield_successive_args(['base.first_setting', 'BBB'],
|
59
|
+
['base.second_setting', false],
|
60
|
+
['base.third_setting', 155],
|
61
|
+
['base.four_setting', 55.5],
|
62
|
+
['base.five_setting', :bbb],
|
63
|
+
['second.first_setting', true],
|
64
|
+
['second.second_setting', 'AAA'])
|
28
65
|
end
|
29
66
|
|
30
67
|
it 'when wrong params' do
|
31
|
-
expect { |b|
|
32
|
-
|
33
|
-
|
34
|
-
|
68
|
+
expect { |b| coercions.cast_params(wrong_params, &b) }
|
69
|
+
.to yield_successive_args(['base.second_setting', false],
|
70
|
+
['base.third_setting', 0],
|
71
|
+
['base.four_setting', 0.0],
|
72
|
+
['second.first_setting', false])
|
35
73
|
end
|
36
74
|
|
37
75
|
it 'when no params' do
|
38
|
-
expect { |b|
|
39
|
-
@coercions.cast_params no_params, &b
|
40
|
-
}.not_to yield_control
|
76
|
+
expect { |b| coercions.cast_params(no_params, &b) }.not_to yield_control
|
41
77
|
end
|
42
78
|
end
|
data/spec/model_spec.rb
CHANGED
@@ -1,5 +1,3 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
1
|
RSpec.describe ActiveadminSettingsCached::Model do
|
4
2
|
include ActiveModel::Lint::Tests
|
5
3
|
|
@@ -9,6 +7,164 @@ RSpec.describe ActiveadminSettingsCached::Model do
|
|
9
7
|
end
|
10
8
|
end
|
11
9
|
|
10
|
+
before(:all) do
|
11
|
+
Setting.merge!('some', {
|
12
|
+
'first_setting' => 'CCC',
|
13
|
+
'second_setting' => true
|
14
|
+
})
|
15
|
+
end
|
16
|
+
|
17
|
+
let(:all_options) do
|
18
|
+
{
|
19
|
+
model_name: 'Setting',
|
20
|
+
starting_with: 'base.',
|
21
|
+
key: nil,
|
22
|
+
display: {'base.first_setting' => 'string', 'base.second_setting' => 'boolean'}
|
23
|
+
}
|
24
|
+
end
|
25
|
+
|
26
|
+
let(:key_options) do
|
27
|
+
{
|
28
|
+
model_name: 'Setting',
|
29
|
+
starting_with: nil,
|
30
|
+
key: 'some',
|
31
|
+
display: {'some.first_setting' => 'string', 'base.second_setting' => 'boolean'}
|
32
|
+
}
|
33
|
+
end
|
34
|
+
|
35
|
+
let(:no_options) do
|
36
|
+
{}
|
37
|
+
end
|
38
|
+
|
39
|
+
context '#attributes' do
|
40
|
+
it 'set options' do
|
41
|
+
object = described_class.new(all_options)
|
42
|
+
expect(object.attributes).to eq({
|
43
|
+
starting_with: all_options[:starting_with],
|
44
|
+
key: nil,
|
45
|
+
model_name: Setting,
|
46
|
+
display: all_options[:display]
|
47
|
+
})
|
48
|
+
end
|
49
|
+
|
50
|
+
it 'set default options' do
|
51
|
+
object = described_class.new(no_options)
|
52
|
+
expect(object.attributes).to eq({
|
53
|
+
starting_with: nil,
|
54
|
+
key: nil,
|
55
|
+
model_name: Setting,
|
56
|
+
display: {}
|
57
|
+
})
|
58
|
+
end
|
59
|
+
|
60
|
+
it 'set key options' do
|
61
|
+
object = described_class.new(key_options)
|
62
|
+
expect(object.attributes).to eq({
|
63
|
+
starting_with: nil,
|
64
|
+
key: key_options[:key],
|
65
|
+
model_name: Setting,
|
66
|
+
display: key_options[:display]
|
67
|
+
})
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
context '#field_name' do
|
72
|
+
it 'with keyed name' do
|
73
|
+
object = described_class.new(key_options)
|
74
|
+
expect(object.field_name('first_setting')).to eq('some.first_setting')
|
75
|
+
end
|
76
|
+
|
77
|
+
it 'with normal name' do
|
78
|
+
object = described_class.new(all_options)
|
79
|
+
expect(object.field_name('base.first_setting')).to eq('base.first_setting')
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
context '#field_options' do
|
84
|
+
it 'with default element' do
|
85
|
+
object = described_class.new(all_options)
|
86
|
+
expect(object.field_options('base.first_setting', 'base.first_setting')).to eq({as: 'string',
|
87
|
+
label: false,
|
88
|
+
input_html: {value: 'AAA', placeholder: 'AAA'}
|
89
|
+
})
|
90
|
+
end
|
91
|
+
|
92
|
+
it 'with keyed element' do
|
93
|
+
object = described_class.new(key_options)
|
94
|
+
expect(object.field_options('some.first_setting', 'first_setting')).to eq({as: 'string',
|
95
|
+
label: false,
|
96
|
+
input_html: {value: 'CCC', placeholder: 'AAA'}
|
97
|
+
})
|
98
|
+
end
|
99
|
+
|
100
|
+
it 'with array element' do
|
101
|
+
object = described_class.new(all_options.merge({display: {'base.first_setting' => 'string',
|
102
|
+
'base.second_setting' => 'boolean',
|
103
|
+
'base.six_setting' => 'array'}}))
|
104
|
+
expect(object.field_options('base.six_setting', 'base.six_setting')).to eq({as: 'array',
|
105
|
+
label: false,
|
106
|
+
collection: %w(a b),
|
107
|
+
selected: %w(a b)
|
108
|
+
})
|
109
|
+
end
|
110
|
+
|
111
|
+
it 'with boolean element' do
|
112
|
+
object = described_class.new(all_options)
|
113
|
+
expect(object.field_options('base.second_setting', 'base.second_setting')).to eq({as: 'boolean',
|
114
|
+
label: '',
|
115
|
+
input_html: {checked: true},
|
116
|
+
checked_value: 'true',
|
117
|
+
unchecked_value: 'false'
|
118
|
+
})
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
context '#settings' do
|
123
|
+
it 'normal settings' do
|
124
|
+
object = described_class.new(all_options)
|
125
|
+
expect(object.settings).to eq(Setting.get_all('base.'))
|
126
|
+
end
|
127
|
+
|
128
|
+
it 'settings by key' do
|
129
|
+
object = described_class.new(key_options)
|
130
|
+
expect(object.settings).to eq(Setting['some'])
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
134
|
+
context '#save' do
|
135
|
+
it 'normal settings' do
|
136
|
+
object = described_class.new(all_options)
|
137
|
+
object.save('base.first_setting', 'DDD')
|
138
|
+
expect(Setting['base.first_setting']).to eq('DDD')
|
139
|
+
end
|
140
|
+
|
141
|
+
it 'settings by key' do
|
142
|
+
object = described_class.new(key_options)
|
143
|
+
object.save('some.first_setting', 'LLL')
|
144
|
+
expect(Setting['some']['first_setting']).to eq('LLL')
|
145
|
+
end
|
146
|
+
end
|
147
|
+
|
148
|
+
context '#defaults' do
|
149
|
+
it 'normal defaults' do
|
150
|
+
object = described_class.new(all_options)
|
151
|
+
expect(object.defaults).to eq(RailsSettings::Default)
|
152
|
+
end
|
153
|
+
|
154
|
+
it 'old defaults' do
|
155
|
+
allow(Setting).to receive(:defaults).and_return(RailsSettings::Default.instance)
|
156
|
+
object = described_class.new(all_options)
|
157
|
+
expect(object.defaults).to be_an_instance_of(RailsSettings::Default)
|
158
|
+
end
|
159
|
+
end
|
160
|
+
|
161
|
+
context '#defaults_keys' do
|
162
|
+
it 'normal defaults keys' do
|
163
|
+
object = described_class.new(all_options)
|
164
|
+
expect(object.defaults_keys).to eq(RailsSettings::Default.instance.keys)
|
165
|
+
end
|
166
|
+
end
|
167
|
+
|
12
168
|
def model
|
13
169
|
subject
|
14
170
|
end
|
data/spec/settings_spec.rb
CHANGED
@@ -1,176 +1,216 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
1
|
RSpec.describe 'settings', type: :feature, js: true do
|
4
2
|
before do
|
5
|
-
Setting
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
Setting.defaults['base.five_setting'] = :aaa
|
10
|
-
Setting.defaults['second.first_setting'] = false
|
11
|
-
Setting.defaults['second.second_setting'] = 'BBB'
|
3
|
+
Setting['some'] = {
|
4
|
+
'first_setting' => 'CCC',
|
5
|
+
'second_setting' => false
|
6
|
+
}
|
12
7
|
Setting['base.first_setting'] = 'AAA'
|
13
8
|
Setting['base.second_setting'] = true
|
14
9
|
Setting['second.first_setting'] = false
|
15
10
|
Setting['second.second_setting'] = 'BBB'
|
16
11
|
end
|
17
12
|
|
13
|
+
let(:initial_some_settings) do
|
14
|
+
{
|
15
|
+
first_setting: 'CCC',
|
16
|
+
second_setting: false
|
17
|
+
}.with_indifferent_access
|
18
|
+
end
|
19
|
+
|
20
|
+
shared_examples_for 'render input with value' do |input_value|
|
21
|
+
it 'has input with value' do
|
22
|
+
expect(page).to have_selector("input[value='#{input_value}']")
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
shared_examples_for 'fill and save base settings to db' do
|
27
|
+
it 'saves base settings to db' do
|
28
|
+
fill_in('settings_base.first_setting', with: 'First')
|
29
|
+
uncheck('settings_base.second_setting')
|
30
|
+
fill_in('settings_base.third_setting', with: '100')
|
31
|
+
fill_in('settings_base.four_setting', with: '50.5')
|
32
|
+
fill_in('settings_base.five_setting', with: 'five')
|
33
|
+
|
34
|
+
submit
|
35
|
+
|
36
|
+
expect(Setting['base.first_setting']).to eq 'First'
|
37
|
+
expect(Setting['base.second_setting']).to eq false
|
38
|
+
expect(Setting['base.third_setting']).to eq 100
|
39
|
+
expect(Setting['base.four_setting']).to eq 50.5
|
40
|
+
expect(Setting['base.five_setting']).to eq :five
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
shared_examples_for 'fill and save second settings to db' do
|
45
|
+
it 'saves settings to db' do
|
46
|
+
fill_in('settings_second.second_setting', with: 'Awesome second')
|
47
|
+
check('settings_second.first_setting')
|
48
|
+
|
49
|
+
submit
|
50
|
+
|
51
|
+
expect(Setting['second.second_setting']).to eq 'Awesome second'
|
52
|
+
expect(Setting['second.first_setting']).to eq true
|
53
|
+
expect(Setting.some.with_indifferent_access).to eq(initial_some_settings)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
shared_examples_for 'fill and save some settings to db' do
|
58
|
+
it 'save some settings to db' do
|
59
|
+
fill_in('settings_some.first_setting', with: 'Awesome value')
|
60
|
+
check('settings_some.second_setting')
|
61
|
+
|
62
|
+
submit
|
63
|
+
|
64
|
+
expect(Setting['some']['first_setting']).to eq 'Awesome value'
|
65
|
+
expect(Setting['some']['second_setting']).to eq true
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
18
69
|
context 'global config' do
|
19
70
|
before do
|
20
71
|
ActiveadminSettingsCached.configure do |config|
|
21
|
-
config.display = {
|
22
|
-
|
23
|
-
|
72
|
+
config.display = {
|
73
|
+
'base.first_setting' => 'string',
|
74
|
+
'base.second_setting' => 'boolean',
|
75
|
+
'base.third_setting' => 'number',
|
76
|
+
'base.four_setting' => 'number',
|
77
|
+
'base.five_setting' => 'string',
|
78
|
+
'second.first_setting' => 'boolean',
|
79
|
+
'second.second_setting' => 'string',
|
80
|
+
'some.first_setting' => 'string',
|
81
|
+
'some.second_setting' => 'boolean'
|
82
|
+
}
|
24
83
|
end
|
84
|
+
|
25
85
|
add_setting_resource
|
26
86
|
add_second_setting_resource
|
87
|
+
add_some_setting_resource
|
27
88
|
add_all_setting_resource
|
28
89
|
end
|
29
90
|
|
30
91
|
context 'all setting index' do
|
31
|
-
|
32
|
-
visit '/admin/settings'
|
33
|
-
check_base_setting
|
34
|
-
check_second_setting
|
35
|
-
end
|
92
|
+
before { visit '/admin/settings' }
|
36
93
|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
fill_base_setting_check
|
45
|
-
fill_second_setting_check
|
46
|
-
end
|
94
|
+
it_behaves_like 'render input with value', 'AAA'
|
95
|
+
it_behaves_like 'render input with value', 'BBB'
|
96
|
+
|
97
|
+
# TODO: fixme
|
98
|
+
# it_behaves_like 'render input with value', Setting['some'].with_indifferent_access
|
99
|
+
it_behaves_like 'fill and save base settings to db'
|
100
|
+
it_behaves_like 'fill and save second settings to db'
|
47
101
|
end
|
48
102
|
end
|
49
103
|
|
50
104
|
context 'with custom template_object' do
|
51
105
|
context 'when right object' do
|
52
106
|
before do
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
107
|
+
display_settings = {
|
108
|
+
'base.first_setting' => 'string',
|
109
|
+
'base.second_setting' => 'boolean',
|
110
|
+
'base.third_setting' => 'number',
|
111
|
+
'base.four_setting' => 'number',
|
112
|
+
'base.five_setting' => 'string',
|
113
|
+
'second.first_setting' => 'boolean',
|
114
|
+
'second.second_setting' => 'string'
|
115
|
+
}
|
116
|
+
|
117
|
+
add_all_setting_resource(
|
118
|
+
template_object: ActiveadminSettingsCached::Model.new(display: display_settings)
|
119
|
+
)
|
58
120
|
|
59
|
-
it do
|
60
121
|
visit '/admin/base_settings'
|
61
|
-
check_base_setting
|
62
122
|
end
|
123
|
+
|
124
|
+
it_behaves_like 'render input with value', 'AAA'
|
63
125
|
end
|
64
126
|
|
65
127
|
context 'when wrong object' do
|
66
128
|
before do
|
67
|
-
template_object
|
68
|
-
add_all_setting_resource(template_object: template_object)
|
69
|
-
end
|
129
|
+
add_all_setting_resource(template_object: nil)
|
70
130
|
|
71
|
-
it do
|
72
131
|
visit '/admin/base_settings'
|
73
|
-
check_base_setting
|
74
132
|
end
|
133
|
+
|
134
|
+
it_behaves_like 'render input with value', 'AAA'
|
75
135
|
end
|
76
136
|
end
|
77
137
|
|
78
|
-
context '
|
138
|
+
context 'when settings on different pages' do
|
79
139
|
before do
|
80
140
|
ActiveadminSettingsCached.configure do |config|
|
81
141
|
config.display = {}
|
82
142
|
end
|
83
|
-
add_setting_resource(display: {'base.first_setting' => 'string', 'base.second_setting' => 'boolean',
|
84
|
-
'base.third_setting' => 'number', 'base.four_setting' => 'number'})
|
85
|
-
add_second_setting_resource(display: {'second.first_setting' => 'boolean', 'second.second_setting' => 'string'})
|
86
|
-
add_all_setting_resource(display: {'base.first_setting' => 'string', 'base.second_setting' => 'boolean',
|
87
|
-
'base.third_setting' => 'number', 'base.four_setting' => 'number',
|
88
|
-
'second.first_setting' => 'boolean', 'second.second_setting' => 'string'})
|
89
|
-
end
|
90
|
-
|
91
|
-
context 'setting index' do
|
92
|
-
it 'when list' do
|
93
|
-
visit '/admin/base_settings'
|
94
|
-
check_base_setting
|
95
|
-
end
|
96
143
|
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
144
|
+
add_setting_resource(
|
145
|
+
display: {
|
146
|
+
'base.first_setting' => 'string',
|
147
|
+
'base.second_setting' => 'boolean',
|
148
|
+
'base.third_setting' => 'number',
|
149
|
+
'base.four_setting' => 'number',
|
150
|
+
'base.five_setting' => 'string'
|
151
|
+
}
|
152
|
+
)
|
153
|
+
|
154
|
+
add_second_setting_resource(
|
155
|
+
display: {
|
156
|
+
'second.first_setting' => 'boolean',
|
157
|
+
'second.second_setting' => 'string'
|
158
|
+
}
|
159
|
+
)
|
160
|
+
|
161
|
+
add_some_setting_resource(
|
162
|
+
display: {
|
163
|
+
'some.first_setting' => 'string',
|
164
|
+
'some.second_setting' => 'boolean'
|
165
|
+
}
|
166
|
+
)
|
167
|
+
|
168
|
+
add_all_setting_resource(
|
169
|
+
display: {
|
170
|
+
'base.first_setting' => 'string',
|
171
|
+
'base.second_setting' => 'boolean',
|
172
|
+
'base.third_setting' => 'number',
|
173
|
+
'base.four_setting' => 'number',
|
174
|
+
'base.five_setting' => 'string',
|
175
|
+
'second.first_setting' => 'boolean',
|
176
|
+
'second.second_setting' => 'string'
|
177
|
+
}
|
178
|
+
)
|
104
179
|
end
|
105
180
|
|
106
|
-
context '
|
107
|
-
|
108
|
-
visit '/admin/second_settings'
|
109
|
-
check_second_setting
|
110
|
-
end
|
181
|
+
context 'base settings page' do
|
182
|
+
before { visit '/admin/base_settings' }
|
111
183
|
|
112
|
-
|
113
|
-
|
114
|
-
check_second_setting
|
115
|
-
fill_second_setting
|
116
|
-
submit
|
117
|
-
fill_second_setting_check
|
118
|
-
end
|
184
|
+
it_behaves_like 'render input with value', 'AAA'
|
185
|
+
it_behaves_like 'fill and save base settings to db'
|
119
186
|
end
|
120
187
|
|
121
|
-
context '
|
122
|
-
|
123
|
-
visit '/admin/settings'
|
124
|
-
check_base_setting
|
125
|
-
check_second_setting
|
126
|
-
end
|
188
|
+
context 'second setting page' do
|
189
|
+
before { visit '/admin/second_settings' }
|
127
190
|
|
128
|
-
|
129
|
-
|
130
|
-
check_base_setting
|
131
|
-
check_second_setting
|
132
|
-
fill_base_setting
|
133
|
-
fill_second_setting
|
134
|
-
submit
|
135
|
-
fill_base_setting_check
|
136
|
-
fill_second_setting_check
|
137
|
-
end
|
191
|
+
it_behaves_like 'render input with value', 'BBB'
|
192
|
+
it_behaves_like 'fill and save second settings to db'
|
138
193
|
end
|
139
|
-
end
|
140
|
-
|
141
|
-
def check_base_setting
|
142
|
-
expect(page).to have_selector("input[value='#{Setting['base.first_setting']}']")
|
143
|
-
end
|
144
|
-
|
145
|
-
def check_second_setting
|
146
|
-
expect(page).to have_selector("input[value='#{Setting['second.second_setting']}']")
|
147
|
-
end
|
148
194
|
|
149
|
-
|
150
|
-
|
151
|
-
uncheck('settings_base.second_setting')
|
152
|
-
fill_in('settings_base.third_setting', with: 100)
|
153
|
-
fill_in('settings_base.four_setting', with: 150.55)
|
154
|
-
fill_in('settings_base.five_setting', with: 'bbb')
|
195
|
+
context 'some setting index' do
|
196
|
+
before { visit '/admin/some_settings' }
|
155
197
|
|
156
|
-
|
198
|
+
it_behaves_like 'render input with value', 'CCC'
|
199
|
+
it_behaves_like 'fill and save some settings to db'
|
200
|
+
end
|
157
201
|
|
158
|
-
|
159
|
-
|
160
|
-
check('settings_second.first_setting')
|
161
|
-
end
|
202
|
+
context 'all setting index' do
|
203
|
+
before { visit '/admin/settings' }
|
162
204
|
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
expect(Setting['base.four_setting']).to eq 150.55
|
168
|
-
expect(Setting['base.five_setting']).to eq :bbb
|
169
|
-
end
|
205
|
+
it_behaves_like 'render input with value', 'AAA'
|
206
|
+
it_behaves_like 'render input with value', 'BBB'
|
207
|
+
# FIXME
|
208
|
+
#it_behaves_like 'render input with value', Setting['some'].with_indifferent_access
|
170
209
|
|
171
|
-
|
172
|
-
|
173
|
-
|
210
|
+
it_behaves_like 'fill and save base settings to db'
|
211
|
+
it_behaves_like 'fill and save second settings to db'
|
212
|
+
it { expect(Setting.some.with_indifferent_access).to eq(initial_some_settings) }
|
213
|
+
end
|
174
214
|
end
|
175
215
|
|
176
216
|
def submit
|
data/spec/support/admin.rb
CHANGED
@@ -16,6 +16,15 @@ def add_second_setting_resource(options = {}, &block)
|
|
16
16
|
Rails.application.reload_routes!
|
17
17
|
end
|
18
18
|
|
19
|
+
def add_some_setting_resource(options = {}, &block)
|
20
|
+
options.merge!({model_name: 'Setting', title: 'Some Settings', key: 'some'})
|
21
|
+
ActiveAdmin.register_page options[:title] do
|
22
|
+
menu label: options[:title], priority: 99, parent: 'settings'
|
23
|
+
active_admin_settings_page(options, &block)
|
24
|
+
end
|
25
|
+
Rails.application.reload_routes!
|
26
|
+
end
|
27
|
+
|
19
28
|
def add_all_setting_resource(options = {}, &block)
|
20
29
|
options.merge!({model_name: 'Setting', title: 'Settings'})
|
21
30
|
ActiveAdmin.register_page options[:title] do
|
@@ -4,8 +4,9 @@ generate :settings, 'Setting'
|
|
4
4
|
|
5
5
|
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
6
6
|
|
7
|
-
generate :'active_admin:install --skip-users'
|
7
|
+
generate :'active_admin:install --skip --skip-users'
|
8
8
|
generate :'formtastic:install'
|
9
|
+
generate :'settings:install'
|
9
10
|
|
10
11
|
# Configure Setup
|
11
12
|
inject_into_file 'config/initializers/active_admin.rb', <<-RUBY, before: "ActiveAdmin.setup do |config|"
|
@@ -14,6 +15,21 @@ inject_into_file 'config/initializers/active_admin.rb', <<-RUBY, before: "Active
|
|
14
15
|
end
|
15
16
|
RUBY
|
16
17
|
|
18
|
+
# Default Settings
|
19
|
+
inject_into_file 'config/app.yml', <<-YAML, after: "defaults: &defaults\n"
|
20
|
+
some:
|
21
|
+
first_setting: AAA
|
22
|
+
second_setting: true
|
23
|
+
'base.first_setting': AAA
|
24
|
+
'base.second_setting': true
|
25
|
+
'base.third_setting': 5
|
26
|
+
'base.four_setting': 5.50
|
27
|
+
'base.five_setting': :aaa
|
28
|
+
'base.six_setting': ['a', 'b']
|
29
|
+
'second.first_setting': false
|
30
|
+
'second.second_setting': BBB
|
31
|
+
YAML
|
32
|
+
|
17
33
|
route "root :to => 'admin/dashboard#index'"
|
18
34
|
|
19
35
|
rake 'db:migrate'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: activeadmin_settings_cached
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0
|
4
|
+
version: 2.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Semyon Pupkov
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-12-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activeadmin
|
@@ -33,7 +33,7 @@ dependencies:
|
|
33
33
|
version: 0.5.3
|
34
34
|
- - "<"
|
35
35
|
- !ruby/object:Gem::Version
|
36
|
-
version: 0.
|
36
|
+
version: 0.6.6
|
37
37
|
type: :runtime
|
38
38
|
prerelease: false
|
39
39
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -43,7 +43,21 @@ dependencies:
|
|
43
43
|
version: 0.5.3
|
44
44
|
- - "<"
|
45
45
|
- !ruby/object:Gem::Version
|
46
|
-
version: 0.
|
46
|
+
version: 0.6.6
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: dry-types
|
49
|
+
requirement: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - ">="
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: 0.8.1
|
54
|
+
type: :runtime
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
requirements:
|
58
|
+
- - ">="
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: 0.8.1
|
47
61
|
- !ruby/object:Gem::Dependency
|
48
62
|
name: bundler
|
49
63
|
requirement: !ruby/object:Gem::Requirement
|
@@ -86,6 +100,20 @@ dependencies:
|
|
86
100
|
- - ">="
|
87
101
|
- !ruby/object:Gem::Version
|
88
102
|
version: '0'
|
103
|
+
- !ruby/object:Gem::Dependency
|
104
|
+
name: appraisal
|
105
|
+
requirement: !ruby/object:Gem::Requirement
|
106
|
+
requirements:
|
107
|
+
- - ">="
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
110
|
+
type: :development
|
111
|
+
prerelease: false
|
112
|
+
version_requirements: !ruby/object:Gem::Requirement
|
113
|
+
requirements:
|
114
|
+
- - ">="
|
115
|
+
- !ruby/object:Gem::Version
|
116
|
+
version: '0'
|
89
117
|
- !ruby/object:Gem::Dependency
|
90
118
|
name: database_cleaner
|
91
119
|
requirement: !ruby/object:Gem::Requirement
|
@@ -178,7 +206,10 @@ extensions: []
|
|
178
206
|
extra_rdoc_files: []
|
179
207
|
files:
|
180
208
|
- ".gitignore"
|
209
|
+
- ".rspec"
|
181
210
|
- ".travis.yml"
|
211
|
+
- Appraisals
|
212
|
+
- Dockerfile
|
182
213
|
- Gemfile
|
183
214
|
- LICENSE.txt
|
184
215
|
- Makefile
|
@@ -186,8 +217,10 @@ files:
|
|
186
217
|
- Rakefile
|
187
218
|
- activeadmin_settings_cached.gemspec
|
188
219
|
- app/views/admin/settings/_index.html.erb
|
220
|
+
- config/locales/de.yml
|
189
221
|
- config/locales/en.yml
|
190
222
|
- config/locales/ru.yml
|
223
|
+
- docker-compose.yml
|
191
224
|
- lib/activeadmin_settings_cached.rb
|
192
225
|
- lib/activeadmin_settings_cached/coercions.rb
|
193
226
|
- lib/activeadmin_settings_cached/dsl.rb
|
@@ -225,7 +258,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
225
258
|
version: '0'
|
226
259
|
requirements: []
|
227
260
|
rubyforge_project:
|
228
|
-
rubygems_version: 2.
|
261
|
+
rubygems_version: 2.5.1
|
229
262
|
signing_key:
|
230
263
|
specification_version: 4
|
231
264
|
summary: UI interface for rails-settings-cached in active admin
|