settingify 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 2434255ad4235e0a52d9668f1ab0b88e58cb2ecb
4
+ data.tar.gz: 6b2be1e3c5a2d9fed971ff36a46e7e638c3d48e4
5
+ SHA512:
6
+ metadata.gz: 910715d6d7252ab147f78ae77154e68b19b7b3a1662162c9b59a6e671ab4b8f734d6c3414c3210414e0ce40b393747fe000498a8faab23be49a682774bc906cc
7
+ data.tar.gz: 39e50023a37a292f28987846c7da59d282e7fc7826d99773ea4f8b0d6dc956a9c4435f360bb74a268488a8260fade67cca03675e92a7107580e74470dc492e34
data/.gitignore ADDED
@@ -0,0 +1,23 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
18
+ *.bundle
19
+ *.so
20
+ *.o
21
+ *.a
22
+ mkmf.log
23
+ .rvmrc
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in settingify.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2014 Sergey Gernyak
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,105 @@
1
+ # Settingify
2
+
3
+ This is small global settings system with some features:
4
+
5
+ 1. Works without table returning default values. Migrating db loaded the whole rails environment
6
+ and using settings in lazy code blocks (like activeadmin resource
7
+ files) may cause problems.
8
+ 2. May works with admin systems like simple model. For example,
9
+ integration with active admin:
10
+
11
+ ```
12
+ rails g active_admin:resource Settingify::Setting
13
+ ```
14
+
15
+ ## Installation
16
+
17
+ Add this line to your application's Gemfile:
18
+
19
+ gem 'settingify', '0.0.2'
20
+
21
+ And then execute:
22
+
23
+ $ bundle
24
+
25
+ Or install it yourself as:
26
+
27
+ $ gem install settingify -v 0.0.2
28
+
29
+ ### Post installation
30
+
31
+ Run intallation generator for installing migration and initializer:
32
+
33
+ ```
34
+ rails g settingify:install
35
+ ```
36
+
37
+ Then migrate:
38
+
39
+ ```
40
+ rake db:migrate
41
+ ```
42
+
43
+ ## Usage
44
+
45
+ ### Defining settings
46
+
47
+ It may be done by patching created initializer in
48
+ `config/initializers/settingify.rb`. There is simple DSL:
49
+
50
+ ```ruby
51
+ Settingify.prepare_settings do
52
+ setting :some_name, type: SettingType, default: 'some default value'
53
+ end
54
+ ```
55
+
56
+ Supported types are _String_, _Integer_ and _Float_. But you may define own
57
+ convertors. There are 2 conditions for that:
58
+
59
+ 1. Convertor must contains class method `ConvertorClass.try_convert`
60
+ 2. This method accepts string value
61
+
62
+ Also exists ability for set type as passing class or simple a symbol.
63
+ For example:
64
+
65
+ ```ruby
66
+ Settingify.prepare_settings do
67
+ setting :some_name, type: :string, default: 'some default value'
68
+ end
69
+ ```
70
+
71
+ Default type is __string__.
72
+
73
+ ### Reading settings
74
+
75
+ There are two cases:
76
+
77
+ 1. Setting table is not exists - the default value will be returned.
78
+ 2. Setting table is exists - value from record will be returned.
79
+ 3. Setting table is exists and record not found - the default value will
80
+ be returned too.
81
+
82
+ According to example above to read setting use the next code:
83
+
84
+ ```
85
+ Settingify.some_name
86
+ ```
87
+
88
+ ### Syncing settings
89
+
90
+ When you define settings in initializer this is no effect on DB. But in
91
+ most cases you (as site administator) want to change some settings
92
+ without redeploy the whole application. For this you may add settings to
93
+ the DB manually or run built-in rake task:
94
+
95
+ ```
96
+ bundle exec rake settingify:sync
97
+ ```
98
+
99
+ ## Contributing
100
+
101
+ 1. Fork it ( https://github.com/alterego-labs/settingify/fork )
102
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
103
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
104
+ 4. Push to the branch (`git push origin my-new-feature`)
105
+ 5. Create a new Pull Request
data/Rakefile ADDED
@@ -0,0 +1,18 @@
1
+ require "rubygems"
2
+ require 'rspec/core/rake_task'
3
+ require 'rubygems/specification'
4
+
5
+ task default: :spec
6
+ desc "Run specs"
7
+ RSpec::Core::RakeTask.new do |t|
8
+ t.pattern = FileList['spec/**/*_spec.rb']
9
+ t.rspec_opts = %w(--color)
10
+ end
11
+
12
+ namespace :settingify do
13
+ desc 'Syncs defined settings with DB'
14
+ task sync: :environment do
15
+ Settingify::DbSyncer.new.call
16
+ end
17
+ end
18
+
@@ -0,0 +1,28 @@
1
+ require 'rails/generators/migration'
2
+
3
+ module Settingify
4
+ module Generators
5
+ class InstallGenerator < ::Rails::Generators::Base
6
+ include Rails::Generators::Migration
7
+ source_root File.expand_path('../templates', __FILE__)
8
+ desc "Add migration and copy initializer"
9
+
10
+ def self.next_migration_number(path)
11
+ unless @prev_migration_nr
12
+ @prev_migration_nr = Time.now.utc.strftime("%Y%m%d%H%M%S").to_i
13
+ else
14
+ @prev_migration_nr += 1
15
+ end
16
+ @prev_migration_nr.to_s
17
+ end
18
+
19
+ def copy_migrations
20
+ migration_template "create_settingify_setting.rb", "db/migrate/create_settingify_setting.rb"
21
+ end
22
+
23
+ def copy_initializer
24
+ copy_file "settingify.rb", "config/initializers/settingify.rb"
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,10 @@
1
+ class CreateSettingifySetting < ActiveRecord::Migration
2
+ def change
3
+ create_table Settingify::TABLE_NAME do |t|
4
+ t.string :key
5
+ t.string :value
6
+ t.string :description
7
+ t.timestamps
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,4 @@
1
+ Settingify.prepare_settings do
2
+ # Your settings will be here
3
+ # setting :my_setting, type: String, default: 'msg'
4
+ end
@@ -0,0 +1,9 @@
1
+ module Settingify
2
+ class ActiveRecordHelpers
3
+ class << self
4
+ def table_exists?(table_name)
5
+ ActiveRecord::Base.connection.table_exists? table_name
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,20 @@
1
+ require 'active_support/core_ext/string/inflections'
2
+
3
+ module Settingify
4
+ class Caster < Struct.new(:type, :value)
5
+ using ContractExt
6
+
7
+ def call
8
+ type_class.try_convert value
9
+ end
10
+
11
+ private
12
+
13
+ def type_class
14
+ type
15
+ .to_s
16
+ .classify
17
+ .constantize
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,5 @@
1
+ module Settingify
2
+ module Constants
3
+ TABLE_NAME = 'settingify_settings'
4
+ end
5
+ end
@@ -0,0 +1,21 @@
1
+ module Settingify
2
+ module ContractExt
3
+ refine Integer.singleton_class do
4
+ def try_convert(value)
5
+ Integer(value)
6
+ end
7
+ end
8
+
9
+ refine Float.singleton_class do
10
+ def try_convert(value)
11
+ Float(value)
12
+ end
13
+ end
14
+
15
+ refine String.singleton_class do
16
+ def try_convert(value)
17
+ value.to_s
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,9 @@
1
+ module Settingify
2
+ class DbReader < Struct.new(:key, :default)
3
+ def call
4
+ ::Settingify::Setting
5
+ .where(key: key)
6
+ .first_or_initialize(value: default)
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,42 @@
1
+ module Settingify
2
+ #
3
+ # Syncs defined settings with DB.
4
+ #
5
+ # Very useful for copying defined settings in initializer
6
+ # to DB with goal for ability to edit through admin panel.
7
+ #
8
+ # You may call this class manually in rails console or use
9
+ # built-in rake task:
10
+ # bundle exec rake settingify:sync
11
+ #
12
+ # Syncing means adding new DB entries for settings
13
+ # which not exists yet.
14
+ #
15
+ class DbSyncer
16
+ def call
17
+ settings_list.each(&method(:process_setting))
18
+ end
19
+
20
+ private
21
+
22
+ def settings_list
23
+ Settingify.registered_settings
24
+ end
25
+
26
+ def process_setting(setting)
27
+ return if exists_in_db?(setting)
28
+ add_record_for setting
29
+ end
30
+
31
+ def exists_in_db?(setting)
32
+ Settingify::Setting.where(key: setting.name).any?
33
+ end
34
+
35
+ def add_record_for(setting)
36
+ Settingify::Setting.create(
37
+ key: setting.name,
38
+ value: setting.default
39
+ )
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,22 @@
1
+ module Settingify
2
+ class Reader < Struct.new(:key, :type, :default)
3
+ def call
4
+ return default unless table_exists?
5
+ Caster.new(type, db_value).call
6
+ end
7
+
8
+ private
9
+
10
+ def table_exists?
11
+ ActiveRecordHelpers.table_exists? Settingify::TABLE_NAME
12
+ end
13
+
14
+ def db_setting
15
+ DbReader.new(key, default).call
16
+ end
17
+
18
+ def db_value
19
+ db_setting.value
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,27 @@
1
+ require 'singleton'
2
+
3
+ module Settingify
4
+ class Repo
5
+ include Singleton
6
+
7
+ def list
8
+ @settings_list ||= []
9
+ @settings_list
10
+ end
11
+
12
+ def add(item)
13
+ list << item
14
+ end
15
+
16
+ def clear!
17
+ list.each(&method(:undef_method_for))
18
+ list.clear
19
+ end
20
+
21
+ private
22
+
23
+ def undef_method_for(item)
24
+ Settingify::SettingsList.send :remove_method, item.name
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,5 @@
1
+ module Settingify
2
+ class Setting < ActiveRecord::Base
3
+ self.table_name_prefix = 'settingify_'
4
+ end
5
+ end
@@ -0,0 +1,20 @@
1
+ module Settingify
2
+ module SettingBuilder
3
+ def setting(name, type: String, default: '')
4
+ register_setting name, type, default
5
+ define_setting name, type, default
6
+ end
7
+
8
+ private
9
+
10
+ def define_setting(name, type, default)
11
+ SettingsList.send :define_method, name do
12
+ Reader.new(name, type, default).call
13
+ end
14
+ end
15
+
16
+ def register_setting(name, type, default)
17
+ Settingify::Repo.instance.add OpenStruct.new(name: name, type: type, default: default)
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,4 @@
1
+ module Settingify
2
+ module SettingsList
3
+ end
4
+ end
@@ -0,0 +1,3 @@
1
+ module Settingify
2
+ VERSION = "0.0.2"
3
+ end
data/lib/settingify.rb ADDED
@@ -0,0 +1,35 @@
1
+ require 'active_record'
2
+ require 'active_record/version'
3
+ require 'active_support/core_ext/module'
4
+
5
+ require "settingify/version"
6
+
7
+ module Settingify
8
+ extend ActiveSupport::Autoload
9
+
10
+ autoload :ContractExt
11
+ autoload :Setting
12
+ autoload :SettingBuilder
13
+ autoload :SettingsList
14
+ autoload :Reader
15
+ autoload :Caster
16
+ autoload :DbReader
17
+ autoload :ActiveRecordHelpers
18
+ autoload :Constants
19
+ autoload :Repo
20
+ autoload :DbSyncer
21
+
22
+ extend SettingBuilder
23
+ extend SettingsList
24
+
25
+ include Constants
26
+
27
+ def self.prepare_settings(&block)
28
+ raise 'Block must be passed!' unless block_given?
29
+ instance_eval(&block)
30
+ end
31
+
32
+ def self.registered_settings
33
+ Repo.instance.list
34
+ end
35
+ end
@@ -0,0 +1,32 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'settingify/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "settingify"
8
+ spec.version = Settingify::VERSION
9
+ spec.authors = ["Sergey Gernyak"]
10
+ spec.email = ["sergeg1990@gmail.com"]
11
+ spec.summary = %q{Global setting system for Rails}
12
+ spec.description = %q{System for managing global settings trough database}
13
+ spec.homepage = "https://github.com/alterego-labs/settingify"
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0")
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_development_dependency "activesupport", ">= 4.0.4"
22
+ spec.add_development_dependency "activerecord", ">= 4.0.4"
23
+ spec.add_development_dependency "activemodel", ">= 4.0.4"
24
+ spec.add_development_dependency "rails", ">= 4.0.4"
25
+
26
+ spec.add_development_dependency "bundler", "~> 1.6"
27
+ spec.add_development_dependency "rake"
28
+ spec.add_development_dependency "rspec", "~> 3.0.0.beta"
29
+ spec.add_development_dependency "rspec-its", "1.0.1"
30
+ spec.add_development_dependency "pry-nav", "0.2.3"
31
+ spec.add_development_dependency 'sqlite3'
32
+ end
data/spec/db/schema.rb ADDED
@@ -0,0 +1,9 @@
1
+ ActiveRecord::Schema.define do
2
+ create_table "settingify_settings", force: true do |t|
3
+ t.string "key"
4
+ t.string "value"
5
+ t.string "description"
6
+ t.datetime "created_at"
7
+ t.datetime "updated_at"
8
+ end
9
+ end
@@ -0,0 +1,43 @@
1
+ require 'spec_helper'
2
+
3
+ module SomeBuilder
4
+ extend Settingify::SettingBuilder
5
+ end
6
+
7
+ describe Settingify::DbSyncer do
8
+ subject(:syncer) { described_class.new }
9
+
10
+ before do
11
+ Settingify::Setting.delete_all
12
+ Settingify::Repo.instance.clear!
13
+ SomeBuilder.setting :setting1, default: 'value1'
14
+ end
15
+
16
+ after do
17
+ Settingify::Repo.instance.clear!
18
+ end
19
+
20
+ context 'when setting does not exists in db' do
21
+ it 'creates new record' do
22
+ expect{
23
+ syncer.call
24
+ }.to change(Settingify::Setting, :count).by(1)
25
+ end
26
+ end
27
+
28
+ context 'when setting already exists in db' do
29
+ before do
30
+ Settingify::Setting.create(key: :setting1)
31
+ end
32
+
33
+ after do
34
+ Settingify::Setting.delete_all
35
+ end
36
+
37
+ it 'does not creates new record' do
38
+ expect{
39
+ syncer.call
40
+ }.to_not change(Settingify::Setting, :count)
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,43 @@
1
+ require 'spec_helper'
2
+
3
+ describe Settingify::Reader do
4
+ let(:key) { 'reader_setting' }
5
+ let(:type) { String }
6
+ let(:default) { 'reader_value' }
7
+
8
+ subject(:reader) { described_class.new(key, type, default) }
9
+
10
+ context 'when table does not exists' do
11
+ it 'returns default value' do
12
+ expect(reader.call).to eq default
13
+ end
14
+ end
15
+
16
+ context 'when table is exists' do
17
+ let(:db_value) { "#{default} - db" }
18
+
19
+ before do
20
+ expect(reader).to receive(:table_exists?).and_return true
21
+ end
22
+
23
+ context 'and record exists' do
24
+ before(:each) do
25
+ Settingify::Setting.create key: key, value: db_value
26
+ end
27
+
28
+ it 'returns value from db' do
29
+ expect(reader.call).to eq db_value
30
+ end
31
+ end
32
+
33
+ context 'and record not exists' do
34
+ before(:each) do
35
+ Settingify::Setting.delete_all
36
+ end
37
+
38
+ it 'returns default value' do
39
+ expect(reader.call).to eq default
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,49 @@
1
+ require 'spec_helper'
2
+
3
+ module SomeBuilder
4
+ extend Settingify::SettingBuilder
5
+ end
6
+
7
+ describe Settingify::Repo do
8
+ subject(:repo) { described_class.send :new }
9
+
10
+ describe '#list' do
11
+ context 'when no item has been added' do
12
+ it 'returns empty array' do
13
+ expect(repo.list).to be_empty
14
+ end
15
+ end
16
+
17
+ context 'when at least one item has been added' do
18
+ before do
19
+ repo.add :item
20
+ end
21
+
22
+ it 'returns it' do
23
+ expect(repo.list).to include(:item)
24
+ end
25
+ end
26
+ end
27
+
28
+ describe '#add' do
29
+ it 'adds item to list' do
30
+ expect{
31
+ repo.add :item
32
+ }.to change(repo.list, :count).by(1)
33
+ end
34
+ end
35
+
36
+ describe '#clear' do
37
+ before do
38
+ SomeBuilder.setting(:for_clear_setting)
39
+ end
40
+
41
+ it 'removes all settings' do
42
+ expect(Settingify).to respond_to :for_clear_setting
43
+ expect(Settingify.registered_settings).to_not be_empty
44
+ Settingify::Repo.instance.clear!
45
+ expect(Settingify).to_not respond_to :for_clear_setting
46
+ expect(Settingify.registered_settings).to be_empty
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,21 @@
1
+ require 'spec_helper'
2
+
3
+ module SomeBuilder
4
+ extend Settingify::SettingBuilder
5
+ end
6
+
7
+ describe Settingify::SettingBuilder do
8
+ describe 'defining settings' do
9
+ it 'successfully' do
10
+ SomeBuilder.setting(:some_setting)
11
+ expect(Settingify.some_setting).to eq ''
12
+ end
13
+
14
+ context 'when default is Integer' do
15
+ it 'returns integer value' do
16
+ SomeBuilder.setting :some_int_value, type: :integer, default: 12
17
+ expect(Settingify.some_int_value).to eq 12
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,29 @@
1
+ require 'spec_helper'
2
+
3
+ describe Settingify do
4
+ describe '.prepare_settings' do
5
+ context 'when no block passed' do
6
+ it 'raises exception' do
7
+ expect{
8
+ Settingify.prepare_settings
9
+ }.to raise_exception
10
+ end
11
+ end
12
+
13
+ context 'when block passed' do
14
+ it 'successfully completed' do
15
+ Settingify.prepare_settings do
16
+ setting :ssssome, default: 'msg'
17
+ end
18
+ expect(Settingify.ssssome).to eq 'msg'
19
+ end
20
+ end
21
+ end
22
+
23
+ describe '.registered_settings' do
24
+ it 'calls list on repo' do
25
+ expect(Settingify::Repo).to receive_message_chain(:instance, :list)
26
+ Settingify.registered_settings
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,22 @@
1
+ $TESTING=true
2
+ $:.unshift File.join(File.dirname(__FILE__), '..', 'lib')
3
+
4
+ require 'active_record'
5
+ ActiveRecord::Base.establish_connection adapter: "sqlite3", database: ":memory:"
6
+ load 'db/schema.rb'
7
+
8
+ require 'rspec/its'
9
+ require 'settingify'
10
+ require 'pry-nav'
11
+
12
+ Dir[File.join(File.dirname(__FILE__), 'support/**/*.rb')].each { |f| require f }
13
+
14
+ RSpec.configure do |config|
15
+ config.mock_with :rspec
16
+
17
+ config.filter_run focus: true
18
+ config.run_all_when_everything_filtered = true
19
+
20
+ config.order = "random"
21
+ end
22
+
metadata ADDED
@@ -0,0 +1,220 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: settingify
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ platform: ruby
6
+ authors:
7
+ - Sergey Gernyak
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-07-30 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: activesupport
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 4.0.4
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 4.0.4
27
+ - !ruby/object:Gem::Dependency
28
+ name: activerecord
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 4.0.4
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: 4.0.4
41
+ - !ruby/object:Gem::Dependency
42
+ name: activemodel
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: 4.0.4
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: 4.0.4
55
+ - !ruby/object:Gem::Dependency
56
+ name: rails
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: 4.0.4
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: 4.0.4
69
+ - !ruby/object:Gem::Dependency
70
+ name: bundler
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '1.6'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '1.6'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rake
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: rspec
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: 3.0.0.beta
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: 3.0.0.beta
111
+ - !ruby/object:Gem::Dependency
112
+ name: rspec-its
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - '='
116
+ - !ruby/object:Gem::Version
117
+ version: 1.0.1
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - '='
123
+ - !ruby/object:Gem::Version
124
+ version: 1.0.1
125
+ - !ruby/object:Gem::Dependency
126
+ name: pry-nav
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - '='
130
+ - !ruby/object:Gem::Version
131
+ version: 0.2.3
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - '='
137
+ - !ruby/object:Gem::Version
138
+ version: 0.2.3
139
+ - !ruby/object:Gem::Dependency
140
+ name: sqlite3
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
+ description: System for managing global settings trough database
154
+ email:
155
+ - sergeg1990@gmail.com
156
+ executables: []
157
+ extensions: []
158
+ extra_rdoc_files: []
159
+ files:
160
+ - ".gitignore"
161
+ - Gemfile
162
+ - LICENSE.txt
163
+ - README.md
164
+ - Rakefile
165
+ - lib/generators/settingify/install/install_generator.rb
166
+ - lib/generators/settingify/install/templates/create_settingify_setting.rb
167
+ - lib/generators/settingify/install/templates/settingify.rb
168
+ - lib/settingify.rb
169
+ - lib/settingify/active_record_helpers.rb
170
+ - lib/settingify/caster.rb
171
+ - lib/settingify/constants.rb
172
+ - lib/settingify/contract_ext.rb
173
+ - lib/settingify/db_reader.rb
174
+ - lib/settingify/db_syncer.rb
175
+ - lib/settingify/reader.rb
176
+ - lib/settingify/repo.rb
177
+ - lib/settingify/setting.rb
178
+ - lib/settingify/setting_builder.rb
179
+ - lib/settingify/settings_list.rb
180
+ - lib/settingify/version.rb
181
+ - settingify.gemspec
182
+ - spec/db/schema.rb
183
+ - spec/lib/settingify/db_syncer_spec.rb
184
+ - spec/lib/settingify/reader_spec.rb
185
+ - spec/lib/settingify/repo_spec.rb
186
+ - spec/lib/settingify/setting_builder_spec.rb
187
+ - spec/lib/settingify_spec.rb
188
+ - spec/spec_helper.rb
189
+ homepage: https://github.com/alterego-labs/settingify
190
+ licenses:
191
+ - MIT
192
+ metadata: {}
193
+ post_install_message:
194
+ rdoc_options: []
195
+ require_paths:
196
+ - lib
197
+ required_ruby_version: !ruby/object:Gem::Requirement
198
+ requirements:
199
+ - - ">="
200
+ - !ruby/object:Gem::Version
201
+ version: '0'
202
+ required_rubygems_version: !ruby/object:Gem::Requirement
203
+ requirements:
204
+ - - ">="
205
+ - !ruby/object:Gem::Version
206
+ version: '0'
207
+ requirements: []
208
+ rubyforge_project:
209
+ rubygems_version: 2.4.4
210
+ signing_key:
211
+ specification_version: 4
212
+ summary: Global setting system for Rails
213
+ test_files:
214
+ - spec/db/schema.rb
215
+ - spec/lib/settingify/db_syncer_spec.rb
216
+ - spec/lib/settingify/reader_spec.rb
217
+ - spec/lib/settingify/repo_spec.rb
218
+ - spec/lib/settingify/setting_builder_spec.rb
219
+ - spec/lib/settingify_spec.rb
220
+ - spec/spec_helper.rb