activeadmin_settings_cached 1.0.1 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.gitignore +3 -0
- data/.travis.yml +11 -0
- data/Gemfile +5 -1
- data/README.md +35 -8
- data/Rakefile +6 -1
- data/activeadmin_settings_cached.gemspec +9 -1
- data/app/views/admin/settings/_index.html.erb +4 -4
- data/lib/activeadmin_settings_cached.rb +1 -19
- data/lib/activeadmin_settings_cached/coercions.rb +60 -0
- data/lib/activeadmin_settings_cached/dsl.rb +37 -0
- data/lib/activeadmin_settings_cached/engine.rb +5 -5
- data/lib/activeadmin_settings_cached/model.rb +101 -0
- data/lib/activeadmin_settings_cached/options.rb +21 -0
- data/lib/activeadmin_settings_cached/version.rb +1 -1
- data/lib/generators/active_admin/settings/USAGE +8 -0
- data/lib/generators/active_admin/settings/settings_generator.rb +11 -0
- data/lib/generators/active_admin/settings/templates/settings.rb +5 -0
- data/spec/coercions_spec.rb +42 -0
- data/spec/model_spec.rb +15 -0
- data/spec/settings_spec.rb +179 -0
- data/spec/spec_helper.rb +65 -0
- data/spec/support/admin.rb +26 -0
- data/spec/support/rails_template.rb +20 -0
- data/tasks/test.rake +22 -0
- metadata +125 -10
- data/app/admin/settings.rb +0 -13
- data/app/controllers/activeadmin_settings_cached/settings_controller.rb +0 -22
- data/app/helpers/settings_helper.rb +0 -20
- data/config/routes.rb +0 -3
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: a9f431cda46f273c027277f759dd4072f57a74c8
         | 
| 4 | 
            +
              data.tar.gz: 532fbe14c373077e49bb431db5702836429e7d9d
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 2f3d082e1f588e1f86207b1efe3dd4f0971fcef11862418fc41adc61bb1a71991fd1b6bf07af6f1f06da491a6c5b300fcda417149406f08fd410cc66123cdf5b
         | 
| 7 | 
            +
              data.tar.gz: a9911d042145d5f126ee0faf578650615a971e5ac9bdead4cab311e84bcd7dbe50a54e9da9bfe68cb3c82289d2f47a96420333882c6b467293663d2956a31746
         | 
    
        data/.gitignore
    CHANGED
    
    
    
        data/.travis.yml
    ADDED
    
    
    
        data/Gemfile
    CHANGED
    
    | @@ -1,4 +1,8 @@ | |
| 1 1 | 
             
            source 'https://rubygems.org'
         | 
| 2 2 |  | 
| 3 | 
            -
             | 
| 3 | 
            +
            group :test do
         | 
| 4 | 
            +
              #gem 'turbolinks'
         | 
| 5 | 
            +
              gem 'activeadmin', github: 'activeadmin/activeadmin', branch: 'ab1d8d1a4a1af748ae7009d9d725193d780d0059'
         | 
| 6 | 
            +
            end
         | 
| 7 | 
            +
             | 
| 4 8 | 
             
            gemspec
         | 
    
        data/README.md
    CHANGED
    
    | @@ -1,6 +1,7 @@ | |
| 1 1 | 
             
            # Activeadmin Settings Cached
         | 
| 2 2 |  | 
| 3 3 | 
             
            [](http://badge.fury.io/rb/activeadmin_settings_cached)
         | 
| 4 | 
            +
            [](https://travis-ci.org/artofhuman/activeadmin_settings_cached)
         | 
| 4 5 |  | 
| 5 6 | 
             
            Provides a nice UI interface for [rails-settings-cached](https://github.com/huacnlee/rails-settings-cached) gem in [Active Admin](http://activeadmin.info/).
         | 
| 6 7 |  | 
| @@ -21,12 +22,9 @@ Create your settings model: | |
| 21 22 | 
             
                $ rails g settings Settings
         | 
| 22 23 | 
             
                $ bundle exec rake db:migrate
         | 
| 23 24 |  | 
| 24 | 
            -
             | 
| 25 | 
            +
            Create your settings page:
         | 
| 25 26 |  | 
| 26 | 
            -
             | 
| 27 | 
            -
            ActiveAdmin.routes(self)
         | 
| 28 | 
            -
            mount ActiveadminSettingsCached::Engine => '/admin'
         | 
| 29 | 
            -
            ```
         | 
| 27 | 
            +
                $ rails g active_admin:settings Settings    
         | 
| 30 28 |  | 
| 31 29 | 
             
            And configure your default values in your Settings model:
         | 
| 32 30 |  | 
| @@ -38,6 +36,28 @@ end | |
| 38 36 |  | 
| 39 37 | 
             
            In your application's admin interface, there will now be a new page with this setting
         | 
| 40 38 |  | 
| 39 | 
            +
            ## active_admin_settings_page DSL
         | 
| 40 | 
            +
             | 
| 41 | 
            +
            #### Basic usage
         | 
| 42 | 
            +
             | 
| 43 | 
            +
            ```ruby
         | 
| 44 | 
            +
            ActiveAdmin.register_page 'Settings' do
         | 
| 45 | 
            +
              menu label: 'Settings', priority: 99
         | 
| 46 | 
            +
              active_admin_settings_page options
         | 
| 47 | 
            +
            end
         | 
| 48 | 
            +
            ```
         | 
| 49 | 
            +
             | 
| 50 | 
            +
            #### Options
         | 
| 51 | 
            +
            Tool                    | Description
         | 
| 52 | 
            +
            ---------------------   | -----------
         | 
| 53 | 
            +
            :model_name					|String, settings model name override (default: uses name from global config.)
         | 
| 54 | 
            +
            :starting_with			|String, each key must starting with, (default: nil) 
         | 
| 55 | 
            +
            :template				|String, custom template rendering (default: 'admin/settings/index')
         | 
| 56 | 
            +
            :template_object				|object passing to view (default: ActiveadminSettingsCached::Model instance)
         | 
| 57 | 
            +
            :display    |Hash, display settings override (default: {})
         | 
| 58 | 
            +
            :title			|String, title value override (default: I18n.t('settings.menu.label'))
         | 
| 59 | 
            +
             
         | 
| 60 | 
            +
             | 
| 41 61 | 
             
            ## Localization
         | 
| 42 62 | 
             
            You can localize settings keys in local file
         | 
| 43 63 |  | 
| @@ -45,8 +65,7 @@ You can localize settings keys in local file | |
| 45 65 | 
             
            en:
         | 
| 46 66 | 
             
              settings:
         | 
| 47 67 | 
             
                attributes:
         | 
| 48 | 
            -
                  my_awesome_settings:
         | 
| 49 | 
            -
                    name: 'My Awesome Lolaized Setting'
         | 
| 68 | 
            +
                  my_awesome_settings: 'My Awesome Lolaized Setting'
         | 
| 50 69 | 
             
            ```
         | 
| 51 70 | 
             
            ## Model name
         | 
| 52 71 |  | 
| @@ -65,7 +84,7 @@ If you need define display options for settings fields, eg textarea, url or :tim | |
| 65 84 |  | 
| 66 85 | 
             
            ``` ruby
         | 
| 67 86 | 
             
            ActiveadminSettingsCached.configure do |config|
         | 
| 68 | 
            -
               | 
| 87 | 
            +
              config.display = {
         | 
| 69 88 | 
             
                my_awesome_setting_name: :text,
         | 
| 70 89 | 
             
                my_awesome_setting_name_2: :timestamp,
         | 
| 71 90 | 
             
                my_awesome_setting_name_3: :select
         | 
| @@ -74,3 +93,11 @@ end | |
| 74 93 | 
             
            ```
         | 
| 75 94 |  | 
| 76 95 | 
             
            Available options see [here](https://github.com/justinfrench/formtastic#the-available-inputs)
         | 
| 96 | 
            +
             | 
| 97 | 
            +
            ## Contributing
         | 
| 98 | 
            +
             | 
| 99 | 
            +
            1. Fork it
         | 
| 100 | 
            +
            2. Create your feature branch (`git checkout -b my-new-feature`)
         | 
| 101 | 
            +
            3. Commit your changes (`git commit -am 'Add some feature'`)
         | 
| 102 | 
            +
            4. Push to the branch (`git push origin my-new-feature`)
         | 
| 103 | 
            +
            5. Create new Pull Request
         | 
    
        data/Rakefile
    CHANGED
    
    
| @@ -19,8 +19,16 @@ 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'
         | 
| 22 | 
            +
              s.add_dependency 'rails-settings-cached', '>= 0.5.3'
         | 
| 23 23 |  | 
| 24 24 | 
             
              s.add_development_dependency "bundler"
         | 
| 25 25 | 
             
              s.add_development_dependency "rake"
         | 
| 26 | 
            +
              s.add_development_dependency "coveralls"
         | 
| 27 | 
            +
             | 
| 28 | 
            +
              s.add_development_dependency "database_cleaner"
         | 
| 29 | 
            +
              s.add_development_dependency "sqlite3"
         | 
| 30 | 
            +
              s.add_development_dependency "rspec-rails"
         | 
| 31 | 
            +
              s.add_development_dependency "capybara"
         | 
| 32 | 
            +
              s.add_development_dependency "selenium-webdriver"
         | 
| 33 | 
            +
              s.add_development_dependency "poltergeist"
         | 
| 26 34 | 
             
            end
         | 
| @@ -1,5 +1,5 @@ | |
| 1 1 | 
             
            <div>
         | 
| 2 | 
            -
              <%= semantic_form_for :settings, :method => : | 
| 2 | 
            +
              <%= semantic_form_for :settings, :method => :post, url: {action: :update} do |f| %>
         | 
| 3 3 | 
             
                <table id="settings" class="index_table index">
         | 
| 4 4 | 
             
                  <thead>
         | 
| 5 5 | 
             
                    <tr>
         | 
| @@ -8,12 +8,12 @@ | |
| 8 8 | 
             
                    </tr>
         | 
| 9 9 | 
             
                  </thead>
         | 
| 10 10 | 
             
                  <tbody>
         | 
| 11 | 
            -
                    <%  | 
| 11 | 
            +
                    <% settings_model.settings.each_pair do |name, _| %>
         | 
| 12 12 | 
             
                      <tr class="odd">
         | 
| 13 | 
            -
                        <td><strong><%= f.label t("settings.attributes.#{name} | 
| 13 | 
            +
                        <td><strong><%= f.label t("settings.attributes.#{name}", default: name) %></strong></td>
         | 
| 14 14 | 
             
                        <td>
         | 
| 15 15 | 
             
                          <div class='form'>
         | 
| 16 | 
            -
                            <ol><%= f.input name,  | 
| 16 | 
            +
                            <ol><%= f.input name, settings_model.field_options(name) %></ol>
         | 
| 17 17 | 
             
                          </div>
         | 
| 18 18 | 
             
                        </td>
         | 
| 19 19 | 
             
                      </tr>
         | 
| @@ -1,4 +1,4 @@ | |
| 1 | 
            -
            require  | 
| 1 | 
            +
            require 'activeadmin_settings_cached/engine'
         | 
| 2 2 |  | 
| 3 3 | 
             
            module ActiveadminSettingsCached
         | 
| 4 4 | 
             
              class Configuration
         | 
| @@ -21,23 +21,5 @@ module ActiveadminSettingsCached | |
| 21 21 | 
             
                def configure
         | 
| 22 22 | 
             
                  yield config
         | 
| 23 23 | 
             
                end
         | 
| 24 | 
            -
             | 
| 25 | 
            -
                def settings
         | 
| 26 | 
            -
                  defaults.merge! config.model_name.public_send(meth)
         | 
| 27 | 
            -
                end
         | 
| 28 | 
            -
             | 
| 29 | 
            -
                def defaults
         | 
| 30 | 
            -
                  config.model_name.defaults
         | 
| 31 | 
            -
                end
         | 
| 32 | 
            -
             | 
| 33 | 
            -
                private
         | 
| 34 | 
            -
             | 
| 35 | 
            -
                def meth
         | 
| 36 | 
            -
                  if Rails.version >= '4.1.0'
         | 
| 37 | 
            -
                    :get_all
         | 
| 38 | 
            -
                  else
         | 
| 39 | 
            -
                    :all
         | 
| 40 | 
            -
                  end
         | 
| 41 | 
            -
                end
         | 
| 42 24 | 
             
              end
         | 
| 43 25 | 
             
            end
         | 
| @@ -0,0 +1,60 @@ | |
| 1 | 
            +
            module ActiveadminSettingsCached
         | 
| 2 | 
            +
              class Coercions
         | 
| 3 | 
            +
                SIMPLE_COERCIONS = {
         | 
| 4 | 
            +
                  float: :to_f,
         | 
| 5 | 
            +
                  integer: :to_i,
         | 
| 6 | 
            +
                  symbol: :to_sym
         | 
| 7 | 
            +
                }
         | 
| 8 | 
            +
                attr_reader :defaults, :display
         | 
| 9 | 
            +
             | 
| 10 | 
            +
                def initialize(defaults, display)
         | 
| 11 | 
            +
                  @defaults = defaults
         | 
| 12 | 
            +
                  @display = display
         | 
| 13 | 
            +
             | 
| 14 | 
            +
                  init_methods
         | 
| 15 | 
            +
                end
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                def cast_params(params)
         | 
| 18 | 
            +
                  coerced_params = params.map do |name, value|
         | 
| 19 | 
            +
                    [name, cast_value(name, value)]
         | 
| 20 | 
            +
                  end
         | 
| 21 | 
            +
             | 
| 22 | 
            +
                  return coerced_params unless block_given?
         | 
| 23 | 
            +
             | 
| 24 | 
            +
                  coerced_params.each do |name, value|
         | 
| 25 | 
            +
                    yield(name, value.call)
         | 
| 26 | 
            +
                  end
         | 
| 27 | 
            +
                end
         | 
| 28 | 
            +
             | 
| 29 | 
            +
                private
         | 
| 30 | 
            +
             | 
| 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 | 
            +
                def cast_value(name, value)
         | 
| 46 | 
            +
                  case defaults[name]
         | 
| 47 | 
            +
                  when TrueClass, FalseClass
         | 
| 48 | 
            +
                    display[name].to_s == 'boolean' ? -> { string_to_boolean(value) } : -> { value }
         | 
| 49 | 
            +
                  when Integer
         | 
| 50 | 
            +
                    -> { string_to_integer(value) }
         | 
| 51 | 
            +
                  when Float
         | 
| 52 | 
            +
                    -> { string_to_float(value) }
         | 
| 53 | 
            +
                  when Symbol
         | 
| 54 | 
            +
                    -> { string_to_symbol(value) }
         | 
| 55 | 
            +
                  else
         | 
| 56 | 
            +
                    -> { value }
         | 
| 57 | 
            +
                  end
         | 
| 58 | 
            +
                end
         | 
| 59 | 
            +
              end
         | 
| 60 | 
            +
            end
         | 
| @@ -0,0 +1,37 @@ | |
| 1 | 
            +
            module ActiveadminSettingsCached
         | 
| 2 | 
            +
              module DSL
         | 
| 3 | 
            +
                # Declares settings function
         | 
| 4 | 
            +
                #
         | 
| 5 | 
            +
                # Options:
         | 
| 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'))
         | 
| 12 | 
            +
                #
         | 
| 13 | 
            +
                def active_admin_settings_page(options = {}, &block)
         | 
| 14 | 
            +
                  options.assert_valid_keys(*Options::VALID_OPTIONS)
         | 
| 15 | 
            +
             | 
| 16 | 
            +
                  options = Options.options_for(options)
         | 
| 17 | 
            +
                  coercion = Coercions.new(options[:template_object].defaults, options[:template_object].display)
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                  content title: options[:title] do
         | 
| 20 | 
            +
                    render partial: options[:template], locals: { settings_model: options[:template_object] }
         | 
| 21 | 
            +
                  end
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                  page_action :update, method: :post do
         | 
| 24 | 
            +
                    settings_params = params.require(:settings).permit(options[:template_object].defaults.keys)
         | 
| 25 | 
            +
             | 
| 26 | 
            +
                    coercion.cast_params(settings_params) do |name, value|
         | 
| 27 | 
            +
                      options[:template_object][name] = value
         | 
| 28 | 
            +
                    end
         | 
| 29 | 
            +
             | 
| 30 | 
            +
                    flash[:success] = t('activeadmin_settings_cached.settings.update.success'.freeze)
         | 
| 31 | 
            +
                    redirect_to :back
         | 
| 32 | 
            +
                  end
         | 
| 33 | 
            +
             | 
| 34 | 
            +
                  instance_eval(&block) if block_given?
         | 
| 35 | 
            +
                end
         | 
| 36 | 
            +
              end
         | 
| 37 | 
            +
            end
         | 
| @@ -1,13 +1,13 @@ | |
| 1 1 | 
             
            require 'rails-settings-cached'
         | 
| 2 | 
            +
            require 'active_admin'
         | 
| 2 3 |  | 
| 3 4 | 
             
            module ActiveadminSettingsCached
         | 
| 4 5 | 
             
              class Engine < Rails::Engine
         | 
| 5 | 
            -
                 | 
| 6 | 
            +
                config.mount_at = '/'
         | 
| 7 | 
            +
                config.autoload_paths += Dir["#{config.root}/lib"]
         | 
| 6 8 |  | 
| 7 | 
            -
                initializer 'activeadmin_settings_cached | 
| 8 | 
            -
                  ActiveAdmin. | 
| 9 | 
            -
                    app.load_paths << File.expand_path("../../../app/admin", __FILE__)
         | 
| 10 | 
            -
                  end
         | 
| 9 | 
            +
                initializer 'activeadmin_settings_cached' do
         | 
| 10 | 
            +
                  ActiveAdmin::DSL.send(:include, ActiveadminSettingsCached::DSL)
         | 
| 11 11 | 
             
                end
         | 
| 12 12 | 
             
              end
         | 
| 13 13 | 
             
            end
         | 
| @@ -0,0 +1,101 @@ | |
| 1 | 
            +
            module ActiveadminSettingsCached
         | 
| 2 | 
            +
              class Model
         | 
| 3 | 
            +
                include ActiveModel::Model
         | 
| 4 | 
            +
             | 
| 5 | 
            +
                attr_reader :attributes
         | 
| 6 | 
            +
             | 
| 7 | 
            +
                def initialize(args = {})
         | 
| 8 | 
            +
                  @attributes = {}
         | 
| 9 | 
            +
                  args[:model_name] = args[:model_name].constantize if args[:model_name].is_a? String
         | 
| 10 | 
            +
                  args[:display] = default_attributes[:display].merge!(args[:display]) if args[:display]
         | 
| 11 | 
            +
                  assign_attributes(merge_attributes(args))
         | 
| 12 | 
            +
                end
         | 
| 13 | 
            +
             | 
| 14 | 
            +
                def field_options(settings_name)
         | 
| 15 | 
            +
                  default_value = defaults[settings_name]
         | 
| 16 | 
            +
                  value = settings[settings_name]
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                  input_opts = if default_value.is_a?(Array)
         | 
| 19 | 
            +
                                 {
         | 
| 20 | 
            +
                                   collection: default_value,
         | 
| 21 | 
            +
                                   selected: value,
         | 
| 22 | 
            +
                                 }
         | 
| 23 | 
            +
                               elsif (default_value.is_a?(TrueClass) || default_value.is_a?(FalseClass)) &&
         | 
| 24 | 
            +
                                     display[settings_name].to_s == 'boolean'
         | 
| 25 | 
            +
                                 {
         | 
| 26 | 
            +
                                   input_html: { checked: value }, label: '', checked_value: 'true', unchecked_value: 'false'
         | 
| 27 | 
            +
                                 }
         | 
| 28 | 
            +
                               else
         | 
| 29 | 
            +
                                 {
         | 
| 30 | 
            +
                                   input_html: { value: value, placeholder: default_value },
         | 
| 31 | 
            +
                                 }
         | 
| 32 | 
            +
                               end
         | 
| 33 | 
            +
             | 
| 34 | 
            +
                  { as: display[settings_name], label: false }
         | 
| 35 | 
            +
                    .merge!(input_opts)
         | 
| 36 | 
            +
                end
         | 
| 37 | 
            +
             | 
| 38 | 
            +
                def settings
         | 
| 39 | 
            +
                  data = load_settings
         | 
| 40 | 
            +
                  ActiveSupport::OrderedHash[data.to_a.sort { |a, b| a.first <=> b.first }] if data
         | 
| 41 | 
            +
                end
         | 
| 42 | 
            +
             | 
| 43 | 
            +
                def defaults
         | 
| 44 | 
            +
                  settings_model.defaults
         | 
| 45 | 
            +
                end
         | 
| 46 | 
            +
             | 
| 47 | 
            +
                def display
         | 
| 48 | 
            +
                  attributes[:display]
         | 
| 49 | 
            +
                end
         | 
| 50 | 
            +
             | 
| 51 | 
            +
                def [](param)
         | 
| 52 | 
            +
                  settings_model[param]
         | 
| 53 | 
            +
                end
         | 
| 54 | 
            +
             | 
| 55 | 
            +
                def []=(param, value)
         | 
| 56 | 
            +
                  settings_model[param] = value
         | 
| 57 | 
            +
                end
         | 
| 58 | 
            +
             | 
| 59 | 
            +
                def persisted?
         | 
| 60 | 
            +
                  false
         | 
| 61 | 
            +
                end
         | 
| 62 | 
            +
             | 
| 63 | 
            +
                alias_method :to_hash, :attributes
         | 
| 64 | 
            +
             | 
| 65 | 
            +
                protected
         | 
| 66 | 
            +
             | 
| 67 | 
            +
                def load_settings
         | 
| 68 | 
            +
                  settings_model.public_send(meth, attributes[:starting_with])
         | 
| 69 | 
            +
                end
         | 
| 70 | 
            +
             | 
| 71 | 
            +
                def assign_attributes(args = {})
         | 
| 72 | 
            +
                  @attributes.merge!(args)
         | 
| 73 | 
            +
                end
         | 
| 74 | 
            +
             | 
| 75 | 
            +
                def default_attributes
         | 
| 76 | 
            +
                  {
         | 
| 77 | 
            +
                    starting_with: nil,
         | 
| 78 | 
            +
                    model_name: ActiveadminSettingsCached.config.model_name,
         | 
| 79 | 
            +
                    display: ActiveadminSettingsCached.config.display
         | 
| 80 | 
            +
                  }
         | 
| 81 | 
            +
                end
         | 
| 82 | 
            +
             | 
| 83 | 
            +
                def merge_attributes(args)
         | 
| 84 | 
            +
                  default_attributes.each_with_object({}) do |(k, v), h|
         | 
| 85 | 
            +
                    h[k] = args[k] || v
         | 
| 86 | 
            +
                  end
         | 
| 87 | 
            +
                end
         | 
| 88 | 
            +
             | 
| 89 | 
            +
                def settings_model
         | 
| 90 | 
            +
                  attributes[:model_name]
         | 
| 91 | 
            +
                end
         | 
| 92 | 
            +
             | 
| 93 | 
            +
                def meth
         | 
| 94 | 
            +
                  if Rails.version >= '4.1.0'
         | 
| 95 | 
            +
                    :get_all
         | 
| 96 | 
            +
                  else
         | 
| 97 | 
            +
                    :all
         | 
| 98 | 
            +
                  end
         | 
| 99 | 
            +
                end
         | 
| 100 | 
            +
              end
         | 
| 101 | 
            +
            end
         | 
| @@ -0,0 +1,21 @@ | |
| 1 | 
            +
            module ActiveadminSettingsCached
         | 
| 2 | 
            +
              module Options
         | 
| 3 | 
            +
                VALID_OPTIONS = [
         | 
| 4 | 
            +
                  :model_name,
         | 
| 5 | 
            +
                  :starting_with,
         | 
| 6 | 
            +
                  :template,
         | 
| 7 | 
            +
                  :template_object,
         | 
| 8 | 
            +
                  :display,
         | 
| 9 | 
            +
                  :title
         | 
| 10 | 
            +
                ].freeze
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                def self.options_for(options = {})
         | 
| 13 | 
            +
                  options[:template_object] = ActiveadminSettingsCached::Model.new(options) unless options[:template_object]
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                  {
         | 
| 16 | 
            +
                    template: 'admin/settings/index',
         | 
| 17 | 
            +
                    title: I18n.t('settings.menu.label')
         | 
| 18 | 
            +
                  }.deep_merge(options)
         | 
| 19 | 
            +
                end
         | 
| 20 | 
            +
              end
         | 
| 21 | 
            +
            end
         | 
| @@ -0,0 +1,11 @@ | |
| 1 | 
            +
            module ActiveadminSettingsCached
         | 
| 2 | 
            +
              module Generators
         | 
| 3 | 
            +
                class SettingsGenerator < Rails::Generators::NamedBase
         | 
| 4 | 
            +
                  source_root File.expand_path('../templates', __FILE__)
         | 
| 5 | 
            +
             | 
| 6 | 
            +
                  def generate_config_file
         | 
| 7 | 
            +
                    template 'settings.rb', "app/admin/#{file_path.tr('/', '_')}.rb"
         | 
| 8 | 
            +
                  end
         | 
| 9 | 
            +
                end
         | 
| 10 | 
            +
              end
         | 
| 11 | 
            +
            end
         | 
| @@ -0,0 +1,42 @@ | |
| 1 | 
            +
            require 'spec_helper'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            RSpec.describe ActiveadminSettingsCached::Coercions do
         | 
| 4 | 
            +
              let(:display) { Hash['base.first_setting' => 'string', 'base.second_setting' => 'boolean',
         | 
| 5 | 
            +
                               'base.third_setting' => 'number', 'base.four_setting' => 'number',
         | 
| 6 | 
            +
                               'second.first_setting' => 'boolean', 'second.second_setting' => 'string'].with_indifferent_access }
         | 
| 7 | 
            +
              let(:defaults) { Hash['base.first_setting' => 'AAA', 'base.second_setting' => true, 'base.third_setting' => 5,
         | 
| 8 | 
            +
                                    'base.four_setting' => 5.5, 'base.five_setting' => :aaa, 'second.first_setting' => false,
         | 
| 9 | 
            +
                                    'second.second_setting' => 'BBB'].with_indifferent_access }
         | 
| 10 | 
            +
              let(:right_params) { ActionController::Parameters.new(Hash['base.first_setting' => 'BBB', 'base.second_setting' => 'false', 'base.third_setting' => '155',
         | 
| 11 | 
            +
                                  'base.four_setting' => '55.5', 'base.five_setting' => 'bbb', 'second.first_setting' => 'true',
         | 
| 12 | 
            +
                                  'second.second_setting' => 'AAA']) }
         | 
| 13 | 
            +
              let(:wrong_params) { ActionController::Parameters.new(Hash['base.second_setting' => 'hjgj', 'base.third_setting' => 'fhfh',
         | 
| 14 | 
            +
                                  'base.four_setting' => 'gjfhg', 'second.first_setting' => 'ggf']) }
         | 
| 15 | 
            +
              let(:no_params) { ActionController::Parameters.new(Hash[]) }
         | 
| 16 | 
            +
             | 
| 17 | 
            +
              before do
         | 
| 18 | 
            +
                @coercions = ActiveadminSettingsCached::Coercions.new(defaults, display)
         | 
| 19 | 
            +
              end
         | 
| 20 | 
            +
             | 
| 21 | 
            +
              it 'when good params' do
         | 
| 22 | 
            +
                expect { |b|
         | 
| 23 | 
            +
                  @coercions.cast_params right_params, &b
         | 
| 24 | 
            +
                }.to yield_successive_args(['base.first_setting', 'BBB'], ['base.second_setting', false],
         | 
| 25 | 
            +
                                           ['base.third_setting', 155], ['base.four_setting', 55.5],
         | 
| 26 | 
            +
                                           ['base.five_setting', :bbb], ['second.first_setting', true],
         | 
| 27 | 
            +
                                           ['second.second_setting', 'AAA'])
         | 
| 28 | 
            +
              end
         | 
| 29 | 
            +
             | 
| 30 | 
            +
              it 'when wrong params' do
         | 
| 31 | 
            +
                expect { |b|
         | 
| 32 | 
            +
                  @coercions.cast_params wrong_params, &b
         | 
| 33 | 
            +
                }.to yield_successive_args(['base.second_setting', false], ['base.third_setting', 0],
         | 
| 34 | 
            +
                                           ['base.four_setting', 0.0], ['second.first_setting', false])
         | 
| 35 | 
            +
              end
         | 
| 36 | 
            +
             | 
| 37 | 
            +
              it 'when no params' do
         | 
| 38 | 
            +
                expect { |b|
         | 
| 39 | 
            +
                  @coercions.cast_params no_params, &b
         | 
| 40 | 
            +
                }.not_to yield_control
         | 
| 41 | 
            +
              end
         | 
| 42 | 
            +
            end
         | 
    
        data/spec/model_spec.rb
    ADDED
    
    | @@ -0,0 +1,15 @@ | |
| 1 | 
            +
            require 'spec_helper'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            RSpec.describe ActiveadminSettingsCached::Model do
         | 
| 4 | 
            +
              include ActiveModel::Lint::Tests
         | 
| 5 | 
            +
             | 
| 6 | 
            +
              ActiveModel::Lint::Tests.public_instance_methods.map{|m| m.to_s}.grep(/^test/).each do |m|
         | 
| 7 | 
            +
                example m.gsub('_',' ') do
         | 
| 8 | 
            +
                  send m
         | 
| 9 | 
            +
                end
         | 
| 10 | 
            +
              end
         | 
| 11 | 
            +
             | 
| 12 | 
            +
              def model
         | 
| 13 | 
            +
                subject
         | 
| 14 | 
            +
              end
         | 
| 15 | 
            +
            end
         | 
| @@ -0,0 +1,179 @@ | |
| 1 | 
            +
            require 'spec_helper'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            RSpec.describe 'settings', type: :feature, js: true do
         | 
| 4 | 
            +
              before do
         | 
| 5 | 
            +
                Setting.defaults['base.first_setting'] = 'AAA'
         | 
| 6 | 
            +
                Setting.defaults['base.second_setting'] = true
         | 
| 7 | 
            +
                Setting.defaults['base.third_setting'] = 5
         | 
| 8 | 
            +
                Setting.defaults['base.four_setting'] = 5.50
         | 
| 9 | 
            +
                Setting.defaults['base.five_setting'] = :aaa
         | 
| 10 | 
            +
                Setting.defaults['second.first_setting'] = false
         | 
| 11 | 
            +
                Setting.defaults['second.second_setting'] = 'BBB'
         | 
| 12 | 
            +
                Setting['base.first_setting'] = 'AAA'
         | 
| 13 | 
            +
                Setting['base.second_setting'] = true
         | 
| 14 | 
            +
                Setting['second.first_setting'] = false
         | 
| 15 | 
            +
                Setting['second.second_setting'] = 'BBB'
         | 
| 16 | 
            +
              end
         | 
| 17 | 
            +
             | 
| 18 | 
            +
              context 'global config' do
         | 
| 19 | 
            +
                before do
         | 
| 20 | 
            +
                  ActiveadminSettingsCached.configure do |config|
         | 
| 21 | 
            +
                    config.display = {'base.first_setting' => 'string', 'base.second_setting' => 'boolean',
         | 
| 22 | 
            +
                                      'base.third_setting' => 'number', 'base.four_setting' => 'number',
         | 
| 23 | 
            +
                                      'second.first_setting' => 'boolean', 'second.second_setting' => 'string'}
         | 
| 24 | 
            +
                  end
         | 
| 25 | 
            +
                  add_setting_resource
         | 
| 26 | 
            +
                  add_second_setting_resource
         | 
| 27 | 
            +
                  add_all_setting_resource
         | 
| 28 | 
            +
                end
         | 
| 29 | 
            +
             | 
| 30 | 
            +
                context 'all setting index' do
         | 
| 31 | 
            +
                  it 'when list' do
         | 
| 32 | 
            +
                    visit '/admin/settings'
         | 
| 33 | 
            +
                    check_base_setting
         | 
| 34 | 
            +
                    check_second_setting
         | 
| 35 | 
            +
                  end
         | 
| 36 | 
            +
             | 
| 37 | 
            +
                  it 'when save' do
         | 
| 38 | 
            +
                    visit '/admin/settings'
         | 
| 39 | 
            +
                    check_base_setting
         | 
| 40 | 
            +
                    check_second_setting
         | 
| 41 | 
            +
                    fill_base_setting
         | 
| 42 | 
            +
                    fill_second_setting
         | 
| 43 | 
            +
                    submit
         | 
| 44 | 
            +
                    fill_base_setting_check
         | 
| 45 | 
            +
                    fill_second_setting_check
         | 
| 46 | 
            +
                  end
         | 
| 47 | 
            +
                end
         | 
| 48 | 
            +
              end
         | 
| 49 | 
            +
             | 
| 50 | 
            +
              context 'with custom template_object' do
         | 
| 51 | 
            +
                context 'when right object' do
         | 
| 52 | 
            +
                  before do
         | 
| 53 | 
            +
                    template_object = ActiveadminSettingsCached::Model.new(display: {'base.first_setting' => 'string', 'base.second_setting' => 'boolean',
         | 
| 54 | 
            +
                                                                                     'base.third_setting' => 'number', 'base.four_setting' => 'number',
         | 
| 55 | 
            +
                                                                                     'second.first_setting' => 'boolean', 'second.second_setting' => 'string'})
         | 
| 56 | 
            +
                    add_all_setting_resource(template_object: template_object)
         | 
| 57 | 
            +
                  end
         | 
| 58 | 
            +
             | 
| 59 | 
            +
                  it do
         | 
| 60 | 
            +
                    visit '/admin/base_settings'
         | 
| 61 | 
            +
                    check_base_setting
         | 
| 62 | 
            +
                  end
         | 
| 63 | 
            +
                end
         | 
| 64 | 
            +
             | 
| 65 | 
            +
                context 'when wrong object' do
         | 
| 66 | 
            +
                  before do
         | 
| 67 | 
            +
                    template_object = nil
         | 
| 68 | 
            +
                    add_all_setting_resource(template_object: template_object)
         | 
| 69 | 
            +
                  end
         | 
| 70 | 
            +
             | 
| 71 | 
            +
                  it do
         | 
| 72 | 
            +
                    visit '/admin/base_settings'
         | 
| 73 | 
            +
                    check_base_setting
         | 
| 74 | 
            +
                  end
         | 
| 75 | 
            +
                end
         | 
| 76 | 
            +
              end
         | 
| 77 | 
            +
             | 
| 78 | 
            +
              context 'per page' do
         | 
| 79 | 
            +
                before do
         | 
| 80 | 
            +
                  ActiveadminSettingsCached.configure do |config|
         | 
| 81 | 
            +
                    config.display = {}
         | 
| 82 | 
            +
                  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 | 
            +
             | 
| 97 | 
            +
                  it 'when save' do
         | 
| 98 | 
            +
                    visit '/admin/base_settings'
         | 
| 99 | 
            +
                    check_base_setting
         | 
| 100 | 
            +
                    fill_base_setting
         | 
| 101 | 
            +
                    submit
         | 
| 102 | 
            +
                    fill_base_setting_check
         | 
| 103 | 
            +
                  end
         | 
| 104 | 
            +
                end
         | 
| 105 | 
            +
             | 
| 106 | 
            +
                context 'second setting index' do
         | 
| 107 | 
            +
                  it 'when list' do
         | 
| 108 | 
            +
                    visit '/admin/second_settings'
         | 
| 109 | 
            +
                    check_second_setting
         | 
| 110 | 
            +
                  end
         | 
| 111 | 
            +
             | 
| 112 | 
            +
                  it 'when save' do
         | 
| 113 | 
            +
                    visit '/admin/second_settings'
         | 
| 114 | 
            +
                    check_second_setting
         | 
| 115 | 
            +
                    fill_second_setting
         | 
| 116 | 
            +
                    submit
         | 
| 117 | 
            +
                    fill_second_setting_check
         | 
| 118 | 
            +
                  end
         | 
| 119 | 
            +
                end
         | 
| 120 | 
            +
             | 
| 121 | 
            +
                context 'all setting index' do
         | 
| 122 | 
            +
                  it 'when list' do
         | 
| 123 | 
            +
                    visit '/admin/settings'
         | 
| 124 | 
            +
                    check_base_setting
         | 
| 125 | 
            +
                    check_second_setting
         | 
| 126 | 
            +
                  end
         | 
| 127 | 
            +
             | 
| 128 | 
            +
                  it 'when save' do
         | 
| 129 | 
            +
                    visit '/admin/settings'
         | 
| 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
         | 
| 138 | 
            +
                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 | 
            +
             | 
| 149 | 
            +
              def fill_base_setting
         | 
| 150 | 
            +
                fill_in('settings_base.first_setting', with: 'BBB')
         | 
| 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')
         | 
| 155 | 
            +
             | 
| 156 | 
            +
              end
         | 
| 157 | 
            +
             | 
| 158 | 
            +
              def fill_second_setting
         | 
| 159 | 
            +
                fill_in('settings_second.second_setting', with: 'AAA')
         | 
| 160 | 
            +
                check('settings_second.first_setting')
         | 
| 161 | 
            +
              end
         | 
| 162 | 
            +
             | 
| 163 | 
            +
              def fill_base_setting_check
         | 
| 164 | 
            +
                expect(Setting['base.first_setting']).to eq 'BBB'
         | 
| 165 | 
            +
                expect(Setting['base.second_setting']).to eq false
         | 
| 166 | 
            +
                expect(Setting['base.third_setting']).to eq 100
         | 
| 167 | 
            +
                expect(Setting['base.four_setting']).to eq 150.55
         | 
| 168 | 
            +
                expect(Setting['base.five_setting']).to eq :bbb
         | 
| 169 | 
            +
              end
         | 
| 170 | 
            +
             | 
| 171 | 
            +
              def fill_second_setting_check
         | 
| 172 | 
            +
                expect(Setting['second.second_setting']).to eq 'AAA'
         | 
| 173 | 
            +
                expect(Setting['second.first_setting']).to eq true
         | 
| 174 | 
            +
              end
         | 
| 175 | 
            +
             | 
| 176 | 
            +
              def submit
         | 
| 177 | 
            +
                click_on('Save Settings')
         | 
| 178 | 
            +
              end
         | 
| 179 | 
            +
            end
         | 
    
        data/spec/spec_helper.rb
    ADDED
    
    | @@ -0,0 +1,65 @@ | |
| 1 | 
            +
            require 'database_cleaner'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require 'coveralls'
         | 
| 4 | 
            +
            Coveralls.wear!
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            $LOAD_PATH.unshift(File.dirname(__FILE__))
         | 
| 7 | 
            +
            $LOAD_PATH << File.expand_path('../support', __FILE__)
         | 
| 8 | 
            +
             | 
| 9 | 
            +
            ENV['BUNDLE_GEMFILE'] = File.expand_path('../../Gemfile', __FILE__)
         | 
| 10 | 
            +
            require 'bundler'
         | 
| 11 | 
            +
            Bundler.setup
         | 
| 12 | 
            +
             | 
| 13 | 
            +
            ENV['RAILS_ENV'] = 'test'
         | 
| 14 | 
            +
            # Ensure the Active Admin load path is happy
         | 
| 15 | 
            +
            require 'rails'
         | 
| 16 | 
            +
            ENV['RAILS'] = Rails.version
         | 
| 17 | 
            +
            ENV['RAILS_ROOT'] = File.expand_path("../rails/rails-#{ENV['RAILS']}", __FILE__)
         | 
| 18 | 
            +
            # Create the test app if it doesn't exists
         | 
| 19 | 
            +
            unless File.exists?(ENV['RAILS_ROOT'])
         | 
| 20 | 
            +
              system 'rake setup'
         | 
| 21 | 
            +
            end
         | 
| 22 | 
            +
             | 
| 23 | 
            +
            require 'active_model'
         | 
| 24 | 
            +
            # require ActiveRecord to ensure that Ransack loads correctly
         | 
| 25 | 
            +
            require 'active_record'
         | 
| 26 | 
            +
            require 'active_admin'
         | 
| 27 | 
            +
            ActiveAdmin.application.load_paths = [ENV['RAILS_ROOT'] + '/app/admin']
         | 
| 28 | 
            +
            require ENV['RAILS_ROOT'] + '/config/environment.rb'
         | 
| 29 | 
            +
            # Disabling authentication in specs so that we don't have to worry about
         | 
| 30 | 
            +
            # it allover the place
         | 
| 31 | 
            +
            ActiveAdmin.application.authentication_method = false
         | 
| 32 | 
            +
            ActiveAdmin.application.current_user_method = false
         | 
| 33 | 
            +
             | 
| 34 | 
            +
            require 'rspec/rails'
         | 
| 35 | 
            +
            require 'support/admin'
         | 
| 36 | 
            +
            require 'capybara/rails'
         | 
| 37 | 
            +
            require 'capybara/rspec'
         | 
| 38 | 
            +
             | 
| 39 | 
            +
            unless ENV['CAPYBARA_FIREFOX']
         | 
| 40 | 
            +
              require 'capybara/poltergeist'
         | 
| 41 | 
            +
             | 
| 42 | 
            +
              Capybara.register_driver :poltergeist do |app|
         | 
| 43 | 
            +
                Capybara::Poltergeist::Driver.new(app, {
         | 
| 44 | 
            +
                    js_errors: true,
         | 
| 45 | 
            +
                    timeout: 80,
         | 
| 46 | 
            +
                    debug: true,
         | 
| 47 | 
            +
                    :phantomjs_options => ['--debug=no', '--load-images=no']
         | 
| 48 | 
            +
             | 
| 49 | 
            +
                })
         | 
| 50 | 
            +
              end
         | 
| 51 | 
            +
             | 
| 52 | 
            +
              Capybara.javascript_driver = :poltergeist
         | 
| 53 | 
            +
            end
         | 
| 54 | 
            +
             | 
| 55 | 
            +
            RSpec.configure do |config|
         | 
| 56 | 
            +
              DatabaseCleaner.strategy = :truncation
         | 
| 57 | 
            +
             | 
| 58 | 
            +
              config.before(:each) do
         | 
| 59 | 
            +
                DatabaseCleaner.start
         | 
| 60 | 
            +
              end
         | 
| 61 | 
            +
             | 
| 62 | 
            +
              config.after(:each) do
         | 
| 63 | 
            +
                DatabaseCleaner.clean
         | 
| 64 | 
            +
              end
         | 
| 65 | 
            +
            end
         | 
| @@ -0,0 +1,26 @@ | |
| 1 | 
            +
            def add_setting_resource(options = {}, &block)
         | 
| 2 | 
            +
              options.merge!({model_name: 'Setting', starting_with: 'base.', title: 'Base Settings'})
         | 
| 3 | 
            +
              ActiveAdmin.register_page options[:title] do
         | 
| 4 | 
            +
                menu label: options[:title], priority: 99, parent: 'settings'
         | 
| 5 | 
            +
                active_admin_settings_page(options, &block)
         | 
| 6 | 
            +
              end
         | 
| 7 | 
            +
              Rails.application.reload_routes!
         | 
| 8 | 
            +
            end
         | 
| 9 | 
            +
             | 
| 10 | 
            +
            def add_second_setting_resource(options = {}, &block)
         | 
| 11 | 
            +
              options.merge!({model_name: 'Setting', starting_with: 'second.', title: 'Second Settings'})
         | 
| 12 | 
            +
              ActiveAdmin.register_page options[:title] do
         | 
| 13 | 
            +
                menu label: options[:title], priority: 99, parent: 'settings'
         | 
| 14 | 
            +
                active_admin_settings_page(options, &block)
         | 
| 15 | 
            +
              end
         | 
| 16 | 
            +
              Rails.application.reload_routes!
         | 
| 17 | 
            +
            end
         | 
| 18 | 
            +
             | 
| 19 | 
            +
            def add_all_setting_resource(options = {}, &block)
         | 
| 20 | 
            +
              options.merge!({model_name: 'Setting', title: 'Settings'})
         | 
| 21 | 
            +
              ActiveAdmin.register_page options[:title] do
         | 
| 22 | 
            +
                menu label: options[:title], priority: 99, id: 'settings'
         | 
| 23 | 
            +
                active_admin_settings_page(options, &block)
         | 
| 24 | 
            +
              end
         | 
| 25 | 
            +
              Rails.application.reload_routes!
         | 
| 26 | 
            +
            end
         | 
| @@ -0,0 +1,20 @@ | |
| 1 | 
            +
            # Rails template to build the sample app for specs
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            generate :settings, 'Setting'
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            generate :'active_admin:install --skip-users'
         | 
| 8 | 
            +
            generate :'formtastic:install'
         | 
| 9 | 
            +
             | 
| 10 | 
            +
            # Configure Setup
         | 
| 11 | 
            +
            inject_into_file 'config/initializers/active_admin.rb', <<-RUBY, before: "ActiveAdmin.setup do |config|"
         | 
| 12 | 
            +
              ActiveadminSettingsCached.configure do |config|
         | 
| 13 | 
            +
                config.model_name = 'Setting'
         | 
| 14 | 
            +
              end
         | 
| 15 | 
            +
            RUBY
         | 
| 16 | 
            +
             | 
| 17 | 
            +
            route "root :to => 'admin/dashboard#index'"
         | 
| 18 | 
            +
             | 
| 19 | 
            +
            rake 'db:migrate'
         | 
| 20 | 
            +
            rake 'db:test:prepare'
         | 
    
        data/tasks/test.rake
    ADDED
    
    | @@ -0,0 +1,22 @@ | |
| 1 | 
            +
            desc 'Creates a test rails app for the specs to run against'
         | 
| 2 | 
            +
            task :setup do
         | 
| 3 | 
            +
              require 'rails/version'
         | 
| 4 | 
            +
              if File.exists? dir = "spec/rails/rails-#{Rails::VERSION::STRING}"
         | 
| 5 | 
            +
                puts "test app #{dir} already exists; skipping"
         | 
| 6 | 
            +
              else
         | 
| 7 | 
            +
                system 'mkdir -p spec/rails'
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                args = %w[
         | 
| 10 | 
            +
                  -m\ spec/support/rails_template.rb
         | 
| 11 | 
            +
                  --skip-gemfile
         | 
| 12 | 
            +
                  --skip-bundle
         | 
| 13 | 
            +
                  --skip-git
         | 
| 14 | 
            +
                  --skip-keeps
         | 
| 15 | 
            +
                  --skip-turbolinks
         | 
| 16 | 
            +
                  --skip-test-unit
         | 
| 17 | 
            +
                  --skip-spring
         | 
| 18 | 
            +
                ]
         | 
| 19 | 
            +
             | 
| 20 | 
            +
                system "bundle exec rails new #{dir} #{args.join ' '}"
         | 
| 21 | 
            +
              end
         | 
| 22 | 
            +
            end
         | 
    
        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:  | 
| 4 | 
            +
              version: 2.0.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:  | 
| 11 | 
            +
            date: 2016-04-25 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: activeadmin
         | 
| @@ -30,14 +30,14 @@ dependencies: | |
| 30 30 | 
             
                requirements:
         | 
| 31 31 | 
             
                - - ">="
         | 
| 32 32 | 
             
                  - !ruby/object:Gem::Version
         | 
| 33 | 
            -
                    version:  | 
| 33 | 
            +
                    version: 0.5.3
         | 
| 34 34 | 
             
              type: :runtime
         | 
| 35 35 | 
             
              prerelease: false
         | 
| 36 36 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 37 37 | 
             
                requirements:
         | 
| 38 38 | 
             
                - - ">="
         | 
| 39 39 | 
             
                  - !ruby/object:Gem::Version
         | 
| 40 | 
            -
                    version:  | 
| 40 | 
            +
                    version: 0.5.3
         | 
| 41 41 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 42 42 | 
             
              name: bundler
         | 
| 43 43 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -66,6 +66,104 @@ dependencies: | |
| 66 66 | 
             
                - - ">="
         | 
| 67 67 | 
             
                  - !ruby/object:Gem::Version
         | 
| 68 68 | 
             
                    version: '0'
         | 
| 69 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 70 | 
            +
              name: coveralls
         | 
| 71 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 72 | 
            +
                requirements:
         | 
| 73 | 
            +
                - - ">="
         | 
| 74 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 75 | 
            +
                    version: '0'
         | 
| 76 | 
            +
              type: :development
         | 
| 77 | 
            +
              prerelease: false
         | 
| 78 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 79 | 
            +
                requirements:
         | 
| 80 | 
            +
                - - ">="
         | 
| 81 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 82 | 
            +
                    version: '0'
         | 
| 83 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 84 | 
            +
              name: database_cleaner
         | 
| 85 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 86 | 
            +
                requirements:
         | 
| 87 | 
            +
                - - ">="
         | 
| 88 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 89 | 
            +
                    version: '0'
         | 
| 90 | 
            +
              type: :development
         | 
| 91 | 
            +
              prerelease: false
         | 
| 92 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 93 | 
            +
                requirements:
         | 
| 94 | 
            +
                - - ">="
         | 
| 95 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 96 | 
            +
                    version: '0'
         | 
| 97 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 98 | 
            +
              name: sqlite3
         | 
| 99 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 100 | 
            +
                requirements:
         | 
| 101 | 
            +
                - - ">="
         | 
| 102 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 103 | 
            +
                    version: '0'
         | 
| 104 | 
            +
              type: :development
         | 
| 105 | 
            +
              prerelease: false
         | 
| 106 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 107 | 
            +
                requirements:
         | 
| 108 | 
            +
                - - ">="
         | 
| 109 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 110 | 
            +
                    version: '0'
         | 
| 111 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 112 | 
            +
              name: rspec-rails
         | 
| 113 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 114 | 
            +
                requirements:
         | 
| 115 | 
            +
                - - ">="
         | 
| 116 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 117 | 
            +
                    version: '0'
         | 
| 118 | 
            +
              type: :development
         | 
| 119 | 
            +
              prerelease: false
         | 
| 120 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 121 | 
            +
                requirements:
         | 
| 122 | 
            +
                - - ">="
         | 
| 123 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 124 | 
            +
                    version: '0'
         | 
| 125 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 126 | 
            +
              name: capybara
         | 
| 127 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 128 | 
            +
                requirements:
         | 
| 129 | 
            +
                - - ">="
         | 
| 130 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 131 | 
            +
                    version: '0'
         | 
| 132 | 
            +
              type: :development
         | 
| 133 | 
            +
              prerelease: false
         | 
| 134 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 135 | 
            +
                requirements:
         | 
| 136 | 
            +
                - - ">="
         | 
| 137 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 138 | 
            +
                    version: '0'
         | 
| 139 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 140 | 
            +
              name: selenium-webdriver
         | 
| 141 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 142 | 
            +
                requirements:
         | 
| 143 | 
            +
                - - ">="
         | 
| 144 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 145 | 
            +
                    version: '0'
         | 
| 146 | 
            +
              type: :development
         | 
| 147 | 
            +
              prerelease: false
         | 
| 148 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 149 | 
            +
                requirements:
         | 
| 150 | 
            +
                - - ">="
         | 
| 151 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 152 | 
            +
                    version: '0'
         | 
| 153 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 154 | 
            +
              name: poltergeist
         | 
| 155 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 156 | 
            +
                requirements:
         | 
| 157 | 
            +
                - - ">="
         | 
| 158 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 159 | 
            +
                    version: '0'
         | 
| 160 | 
            +
              type: :development
         | 
| 161 | 
            +
              prerelease: false
         | 
| 162 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 163 | 
            +
                requirements:
         | 
| 164 | 
            +
                - - ">="
         | 
| 165 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 166 | 
            +
                    version: '0'
         | 
| 69 167 | 
             
            description: UI interface for rails-settings-cached in active admin
         | 
| 70 168 | 
             
            email:
         | 
| 71 169 | 
             
            - semen.pupkov@gmail.com
         | 
| @@ -74,21 +172,32 @@ extensions: [] | |
| 74 172 | 
             
            extra_rdoc_files: []
         | 
| 75 173 | 
             
            files:
         | 
| 76 174 | 
             
            - ".gitignore"
         | 
| 175 | 
            +
            - ".travis.yml"
         | 
| 77 176 | 
             
            - Gemfile
         | 
| 78 177 | 
             
            - LICENSE.txt
         | 
| 79 178 | 
             
            - README.md
         | 
| 80 179 | 
             
            - Rakefile
         | 
| 81 180 | 
             
            - activeadmin_settings_cached.gemspec
         | 
| 82 | 
            -
            - app/admin/settings.rb
         | 
| 83 | 
            -
            - app/controllers/activeadmin_settings_cached/settings_controller.rb
         | 
| 84 | 
            -
            - app/helpers/settings_helper.rb
         | 
| 85 181 | 
             
            - app/views/admin/settings/_index.html.erb
         | 
| 86 182 | 
             
            - config/locales/en.yml
         | 
| 87 183 | 
             
            - config/locales/ru.yml
         | 
| 88 | 
            -
            - config/routes.rb
         | 
| 89 184 | 
             
            - lib/activeadmin_settings_cached.rb
         | 
| 185 | 
            +
            - lib/activeadmin_settings_cached/coercions.rb
         | 
| 186 | 
            +
            - lib/activeadmin_settings_cached/dsl.rb
         | 
| 90 187 | 
             
            - lib/activeadmin_settings_cached/engine.rb
         | 
| 188 | 
            +
            - lib/activeadmin_settings_cached/model.rb
         | 
| 189 | 
            +
            - lib/activeadmin_settings_cached/options.rb
         | 
| 91 190 | 
             
            - lib/activeadmin_settings_cached/version.rb
         | 
| 191 | 
            +
            - lib/generators/active_admin/settings/USAGE
         | 
| 192 | 
            +
            - lib/generators/active_admin/settings/settings_generator.rb
         | 
| 193 | 
            +
            - lib/generators/active_admin/settings/templates/settings.rb
         | 
| 194 | 
            +
            - spec/coercions_spec.rb
         | 
| 195 | 
            +
            - spec/model_spec.rb
         | 
| 196 | 
            +
            - spec/settings_spec.rb
         | 
| 197 | 
            +
            - spec/spec_helper.rb
         | 
| 198 | 
            +
            - spec/support/admin.rb
         | 
| 199 | 
            +
            - spec/support/rails_template.rb
         | 
| 200 | 
            +
            - tasks/test.rake
         | 
| 92 201 | 
             
            homepage: https://github.com/artofhuman/activeadmin_settings_cached
         | 
| 93 202 | 
             
            licenses:
         | 
| 94 203 | 
             
            - MIT
         | 
| @@ -109,8 +218,14 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 109 218 | 
             
                  version: '0'
         | 
| 110 219 | 
             
            requirements: []
         | 
| 111 220 | 
             
            rubyforge_project: 
         | 
| 112 | 
            -
            rubygems_version: 2.4. | 
| 221 | 
            +
            rubygems_version: 2.4.5
         | 
| 113 222 | 
             
            signing_key: 
         | 
| 114 223 | 
             
            specification_version: 4
         | 
| 115 224 | 
             
            summary: UI interface for rails-settings-cached in active admin
         | 
| 116 | 
            -
            test_files: | 
| 225 | 
            +
            test_files:
         | 
| 226 | 
            +
            - spec/coercions_spec.rb
         | 
| 227 | 
            +
            - spec/model_spec.rb
         | 
| 228 | 
            +
            - spec/settings_spec.rb
         | 
| 229 | 
            +
            - spec/spec_helper.rb
         | 
| 230 | 
            +
            - spec/support/admin.rb
         | 
| 231 | 
            +
            - spec/support/rails_template.rb
         | 
    
        data/app/admin/settings.rb
    DELETED
    
    
| @@ -1,22 +0,0 @@ | |
| 1 | 
            -
            module ActiveadminSettingsCached
         | 
| 2 | 
            -
              class SettingsController < ApplicationController
         | 
| 3 | 
            -
                def update
         | 
| 4 | 
            -
                  settings_params.each_pair do |name, value|
         | 
| 5 | 
            -
                    settings_model[name] = value
         | 
| 6 | 
            -
                  end
         | 
| 7 | 
            -
             | 
| 8 | 
            -
                  flash[:success] = t('.success'.freeze)
         | 
| 9 | 
            -
                  redirect_to :back
         | 
| 10 | 
            -
                end
         | 
| 11 | 
            -
             | 
| 12 | 
            -
                private
         | 
| 13 | 
            -
             | 
| 14 | 
            -
                def settings_params
         | 
| 15 | 
            -
                  params.require(:settings).permit(settings_model.defaults.keys)
         | 
| 16 | 
            -
                end
         | 
| 17 | 
            -
             | 
| 18 | 
            -
                def settings_model
         | 
| 19 | 
            -
                  ActiveadminSettingsCached.config.model_name
         | 
| 20 | 
            -
                end
         | 
| 21 | 
            -
              end
         | 
| 22 | 
            -
            end
         | 
| @@ -1,20 +0,0 @@ | |
| 1 | 
            -
            module SettingsHelper
         | 
| 2 | 
            -
              def settings_field_options(settings_name)
         | 
| 3 | 
            -
                default_value = ActiveadminSettingsCached.defaults[settings_name]
         | 
| 4 | 
            -
                value = ActiveadminSettingsCached.settings[settings_name]
         | 
| 5 | 
            -
             | 
| 6 | 
            -
                input_opts = if default_value.is_a?(Array)
         | 
| 7 | 
            -
                              {
         | 
| 8 | 
            -
                                collection: default_value,
         | 
| 9 | 
            -
                                selected: value,
         | 
| 10 | 
            -
                              }
         | 
| 11 | 
            -
                            else
         | 
| 12 | 
            -
                              {
         | 
| 13 | 
            -
                                input_html: {value: value, placeholder: default_value},
         | 
| 14 | 
            -
                              }
         | 
| 15 | 
            -
                            end
         | 
| 16 | 
            -
             | 
| 17 | 
            -
                {as: ActiveadminSettingsCached.config.display[settings_name], label: false}
         | 
| 18 | 
            -
                  .merge!(input_opts)
         | 
| 19 | 
            -
              end
         | 
| 20 | 
            -
            end
         | 
    
        data/config/routes.rb
    DELETED