druthers 0.0.1
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 +15 -0
- data/.gitignore +17 -0
- data/.travis.yml +20 -0
- data/CHANGELOG.md +5 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +123 -0
- data/Rakefile +17 -0
- data/ci/Gemfile.rails-3.2.x +4 -0
- data/ci/Gemfile.rails-4.0.x +5 -0
- data/druthers.gemspec +30 -0
- data/lib/druthers/def.rb +21 -0
- data/lib/druthers/support.rb +51 -0
- data/lib/druthers/version.rb +3 -0
- data/lib/druthers.rb +7 -0
- data/test/database.yml +17 -0
- data/test/minitest_helper.rb +21 -0
- data/test/setting_test.rb +56 -0
- data/test/test_models.rb +25 -0
- metadata +193 -0
checksums.yaml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
---
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
OGM1OGQ0ZTM1OTliNWUwYmY3NDMxNWRkN2Q5NTRmNTRmYTJhMDNkMA==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
YmMyNWQ3Mjc0YzBiMTUzNGFjZDdlYTljODdhODA3MTI1ZDZhYTZjMw==
|
7
|
+
!binary "U0hBNTEy":
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
MmJmNjJiMGY4NTI2MzlkNmQzMTg1NGFlYjgwMTEzYWI3MTI3YjdhN2RhOTdj
|
10
|
+
ZjdlN2ZjNjRhZDQyY2M1Yjk4MThhY2U5YzUxZGMxMzY1NGEwMmJkOTE2YmU4
|
11
|
+
NDhiM2ZlZmNjNzllMzQwY2FkYmMwNDMwMjEzYmExNTNlOGYyNGM=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
M2YyMTcwNmY0YWUyM2QxNGI4M2UyODExMDViNjM0ZDM2ZjA3Mzc5ZDc3Nzdi
|
14
|
+
MWQ4NThiYzFiOWJiZjllNDg2NWU5OTZmZmVjMjZlZjJlY2M2MTdjOGQyOTgw
|
15
|
+
ZmY5YTIyMGI2YzVmY2VkMmJjZDQ3MTZhODY2ZTM5YTU4YzljZmE=
|
data/.gitignore
ADDED
data/.travis.yml
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
language: ruby
|
2
|
+
|
3
|
+
rvm:
|
4
|
+
- 2.0.0
|
5
|
+
- 1.9.3
|
6
|
+
|
7
|
+
gemfile:
|
8
|
+
- ci/Gemfile.rails-4.0.x
|
9
|
+
- ci/Gemfile.rails-3.2.x
|
10
|
+
|
11
|
+
env:
|
12
|
+
- DB=sqlite
|
13
|
+
- DB=mysql
|
14
|
+
- DB=postgresql
|
15
|
+
|
16
|
+
script: bundle exec rake --trace
|
17
|
+
|
18
|
+
before_script:
|
19
|
+
- mysql -e 'create database druthers_test'
|
20
|
+
- psql -c 'create database druthers_test' -U postgres
|
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2013 Matthew McEachen
|
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,123 @@
|
|
1
|
+
# Druthers
|
2
|
+
|
3
|
+
[](https://travis-ci.org/mceachen/druthers)
|
4
|
+
[](http://rubygems.org/gems/druthers)
|
5
|
+
[](https://codeclimate.com/github/mceachen/druthers)
|
6
|
+
|
7
|
+
```Druthers``` is the simplest performant solution to storing application-specific settings via
|
8
|
+
ActiveRecord.
|
9
|
+
|
10
|
+
When you use an off-the-shelf Rails application, frequently you'll need to store
|
11
|
+
configuration information specific to your installation.
|
12
|
+
|
13
|
+
If you store that information in a flat file, and you subsequently upgrade the rails application,
|
14
|
+
you'll need to make sure your settings don't get overwritten. If you're running multiple servers,
|
15
|
+
you'll need to store those settings in a shared datastore. If you're already using ActiveRecord,
|
16
|
+
we might as well use ActiveRecord to store this.
|
17
|
+
|
18
|
+
Druthers is a simple enhancement to a key/value model that adds caching and the ability to override
|
19
|
+
behavior for specific settings.
|
20
|
+
|
21
|
+
As opposed to ```rails-settings``` and forks, ```method_missing``` isn't used anywhere. *HURRAY!*
|
22
|
+
|
23
|
+
## Supported versions
|
24
|
+
|
25
|
+
The latest versions of
|
26
|
+
* Rails 3.2 & 4.0
|
27
|
+
* Ruby 1.9.3 & 2.0.0
|
28
|
+
* SQLite, MySQL, and PostgreSQL
|
29
|
+
|
30
|
+
Every valid combination is [tested via Travis](https://travis-ci.org/mceachen/druthers).
|
31
|
+
|
32
|
+
## Usage
|
33
|
+
|
34
|
+
Assuming your configuration is stored via a ```Setting``` model:
|
35
|
+
|
36
|
+
```ruby
|
37
|
+
class Setting < ActiveRecord::Base
|
38
|
+
|
39
|
+
# Add class-level getter/setters for your settings:
|
40
|
+
def_druthers :quest, :favourite_colour
|
41
|
+
|
42
|
+
# This is not required, but allows for more than just string values:
|
43
|
+
serialize :value
|
44
|
+
|
45
|
+
# This will be used as the value of `Setting.quest` if it is not set.
|
46
|
+
def default_quest
|
47
|
+
"to find the holy grail"
|
48
|
+
end
|
49
|
+
|
50
|
+
# This validation will be only run for instances whose key == "favourite_color":
|
51
|
+
def validate_favourite_colour
|
52
|
+
add_error("we're right out of teal, sorry") if value == "teal"
|
53
|
+
end
|
54
|
+
end
|
55
|
+
```
|
56
|
+
|
57
|
+
You can get values:
|
58
|
+
|
59
|
+
```ruby
|
60
|
+
Setting.quest
|
61
|
+
=> "to find the holy grail" # <- because we defined default_quest above
|
62
|
+
|
63
|
+
Setting.favourite_color
|
64
|
+
=> nil # <- no default
|
65
|
+
```
|
66
|
+
|
67
|
+
You can set values:
|
68
|
+
|
69
|
+
```ruby
|
70
|
+
Setting.favourite_color = "red"
|
71
|
+
```
|
72
|
+
|
73
|
+
If you want to store more than just strings, use
|
74
|
+
[serialize](http://apidock.com/rails/ActiveRecord/AttributeMethods/Serialization/ClassMethods/serialize),
|
75
|
+
which is in the above example, and is not required.
|
76
|
+
|
77
|
+
## Installation
|
78
|
+
|
79
|
+
Add this line to your application's Gemfile:
|
80
|
+
|
81
|
+
```
|
82
|
+
gem 'druthers'
|
83
|
+
```
|
84
|
+
|
85
|
+
And then execute:
|
86
|
+
|
87
|
+
```
|
88
|
+
$ bundle
|
89
|
+
```
|
90
|
+
|
91
|
+
Add a model:
|
92
|
+
|
93
|
+
```
|
94
|
+
rails g model Setting key:string value:text
|
95
|
+
```
|
96
|
+
|
97
|
+
Edit the resulting migration to add an index. Here's a complete example:
|
98
|
+
|
99
|
+
```ruby
|
100
|
+
class CreateSettings < ActiveRecord::Migration
|
101
|
+
def change
|
102
|
+
create_table :settings do |t|
|
103
|
+
t.string :key
|
104
|
+
t.text :value
|
105
|
+
t.timestamps
|
106
|
+
end
|
107
|
+
add_index :settings, [:key], :unique => true, :name => 'key_udx'
|
108
|
+
end
|
109
|
+
end
|
110
|
+
```
|
111
|
+
|
112
|
+
Finally, edit your model, adding ```has_druthers``` and the appropriate defaults and validations.
|
113
|
+
See the Usage section above for more details.
|
114
|
+
|
115
|
+
|
116
|
+
## Contributing
|
117
|
+
|
118
|
+
1. Fork it
|
119
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
120
|
+
3. Add tests and code
|
121
|
+
4. Commit your changes (`git commit -am 'Add some feature'`)
|
122
|
+
5. Push to the branch (`git push origin my-new-feature`)
|
123
|
+
6. Create new Pull Request
|
data/Rakefile
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
2
|
+
|
3
|
+
require 'yard'
|
4
|
+
YARD::Rake::YardocTask.new do |t|
|
5
|
+
t.files = ['lib/**/*.rb', 'README.md']
|
6
|
+
end
|
7
|
+
|
8
|
+
require 'rake/testtask'
|
9
|
+
|
10
|
+
Rake::TestTask.new do |t|
|
11
|
+
t.libs.push "lib"
|
12
|
+
t.libs.push "test"
|
13
|
+
t.pattern = 'test/**/*_test.rb'
|
14
|
+
t.verbose = true
|
15
|
+
end
|
16
|
+
|
17
|
+
task :default => :test
|
data/druthers.gemspec
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'druthers/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = 'druthers'
|
8
|
+
spec.version = Druthers::VERSION
|
9
|
+
spec.authors = ["Matthew McEachen"]
|
10
|
+
spec.email = ["matthew+github@mceachen.org"]
|
11
|
+
spec.description = %q{Simple, performant settings for your Rails application}
|
12
|
+
spec.summary = ''
|
13
|
+
spec.homepage = 'https://github.com/mceachen/druthers'
|
14
|
+
spec.license = 'MIT'
|
15
|
+
|
16
|
+
spec.files = `git ls-files`.split($/)
|
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 = %w(lib)
|
20
|
+
|
21
|
+
spec.add_dependency 'activerecord', '>= 3.0'
|
22
|
+
spec.add_development_dependency 'rake'
|
23
|
+
spec.add_development_dependency 'bundler'
|
24
|
+
spec.add_development_dependency 'yard'
|
25
|
+
spec.add_development_dependency 'mysql2'
|
26
|
+
spec.add_development_dependency 'pg'
|
27
|
+
spec.add_development_dependency 'sqlite3'
|
28
|
+
spec.add_development_dependency 'minitest-great_expectations'
|
29
|
+
spec.add_development_dependency 'minitest-reporters' unless ENV['CI']
|
30
|
+
end
|
data/lib/druthers/def.rb
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'druthers/support'
|
2
|
+
|
3
|
+
module Druthers
|
4
|
+
VALID_METHOD_NAME = /\A\w+\z/
|
5
|
+
module Def
|
6
|
+
def def_druthers(*keys)
|
7
|
+
include Support
|
8
|
+
keys.each do |ea|
|
9
|
+
fail "setting keys must be alphanumeric" unless ea.to_s =~ Druthers::VALID_METHOD_NAME
|
10
|
+
class_eval <<-RUBY, __FILE__, __LINE__ + 1
|
11
|
+
def self.#{ea}=(value)
|
12
|
+
self.set_druther(:#{ea}, value)
|
13
|
+
end
|
14
|
+
def self.#{ea}
|
15
|
+
get_druther(:#{ea})
|
16
|
+
end
|
17
|
+
RUBY
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
require 'active_support/concern'
|
2
|
+
module Druthers
|
3
|
+
module Support
|
4
|
+
extend ActiveSupport::Concern
|
5
|
+
|
6
|
+
included do
|
7
|
+
validate :validate_druthers
|
8
|
+
end
|
9
|
+
|
10
|
+
def validate_druthers
|
11
|
+
sym = "validate_#{key}".to_sym
|
12
|
+
send(sym) if respond_to?(sym)
|
13
|
+
end
|
14
|
+
|
15
|
+
module ClassMethods
|
16
|
+
# This can be overridden by the consumer
|
17
|
+
def druthers_cache
|
18
|
+
@druthers_cache ||= ActiveSupport::Cache::MemoryStore.new(expires_in: 10.minutes)
|
19
|
+
end
|
20
|
+
|
21
|
+
# Directly access the setting with the given key name.
|
22
|
+
# Note that overriding this method shouldn't be done directly.
|
23
|
+
# Use one of the event methods instead.
|
24
|
+
def get_druther(key)
|
25
|
+
druthers_cache.fetch(key) do
|
26
|
+
val = where(key: key).pluck(:value).to_a
|
27
|
+
val.present? ? val.first : send_druthers_event(:default, key)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def set_druther(key, value)
|
32
|
+
obj = where(key: key).first_or_initialize
|
33
|
+
if obj.respond_to? :update!
|
34
|
+
# Rails 4.x:
|
35
|
+
obj.update!(value: value)
|
36
|
+
else
|
37
|
+
# Rails 3.x:
|
38
|
+
obj.update_attributes!(value: value)
|
39
|
+
end
|
40
|
+
# Only update the cache if the update! succeeded:
|
41
|
+
druthers_cache.write(key, value)
|
42
|
+
obj
|
43
|
+
end
|
44
|
+
|
45
|
+
def send_druthers_event(event_name, key)
|
46
|
+
sym = "#{event_name}_#{key}".to_sym
|
47
|
+
send(sym) if respond_to?(sym)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
data/lib/druthers.rb
ADDED
data/test/database.yml
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
sqlite:
|
2
|
+
adapter: <%= "jdbc" if defined? JRUBY_VERSION %>sqlite3
|
3
|
+
database: test/sqlite.db
|
4
|
+
timeout: 500
|
5
|
+
pool: 50
|
6
|
+
postgresql:
|
7
|
+
adapter: postgresql
|
8
|
+
username: postgres
|
9
|
+
database: druthers_test
|
10
|
+
min_messages: ERROR
|
11
|
+
pool: 50
|
12
|
+
mysql:
|
13
|
+
adapter: mysql2
|
14
|
+
host: localhost
|
15
|
+
username: root
|
16
|
+
database: druthers_test
|
17
|
+
pool: 50
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'erb'
|
2
|
+
require 'active_record'
|
3
|
+
require 'druthers'
|
4
|
+
require 'tmpdir'
|
5
|
+
|
6
|
+
db_config = File.expand_path("database.yml", File.dirname(__FILE__))
|
7
|
+
ActiveRecord::Base.configurations = YAML::load(ERB.new(IO.read(db_config)).result)
|
8
|
+
|
9
|
+
def env_db
|
10
|
+
ENV["DB"] || "mysql"
|
11
|
+
end
|
12
|
+
|
13
|
+
ActiveRecord::Base.establish_connection(env_db)
|
14
|
+
ActiveRecord::Migration.verbose = false
|
15
|
+
|
16
|
+
require 'test_models'
|
17
|
+
require 'minitest/autorun'
|
18
|
+
require 'minitest/great_expectations'
|
19
|
+
require 'minitest/reporters' unless ENV['CI']
|
20
|
+
|
21
|
+
Thread.abort_on_exception = true
|
@@ -0,0 +1,56 @@
|
|
1
|
+
require 'minitest_helper'
|
2
|
+
|
3
|
+
describe Setting do
|
4
|
+
before :each do
|
5
|
+
Setting.delete_all
|
6
|
+
end
|
7
|
+
|
8
|
+
describe 'validations' do
|
9
|
+
def assert_saved_and_valid(key)
|
10
|
+
Setting.where(key: key).first.valid?.must_be_true
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'works on defined settings without a validation' do
|
14
|
+
Setting.quest = 'to eat bacon in moderation'
|
15
|
+
assert_saved_and_valid('quest')
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'works on defined settings with a validation' do
|
19
|
+
Setting.favourite_colour = 'green'
|
20
|
+
assert_saved_and_valid('favourite_colour')
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'raises validation errors correctly' do
|
24
|
+
proc { Setting.favourite_colour = 'invalid' }.
|
25
|
+
must_raise ActiveRecord::RecordInvalid
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'allows unknown settings' do
|
29
|
+
Setting.create do |ea|
|
30
|
+
ea.key = 'airspeed'
|
31
|
+
end.valid?.must_be_true
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
describe 'defaults' do
|
36
|
+
it 'returns proper defaults' do
|
37
|
+
Setting.quest.must_equal 'to find the holy grail'
|
38
|
+
Setting.favourite_colour.must_be_nil
|
39
|
+
Setting.things.must_equal [1, 2, 3]
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
describe 'serialized persistence' do
|
44
|
+
it "works with arrays" do
|
45
|
+
a = [3, 4, 5]
|
46
|
+
Setting.things = a
|
47
|
+
Setting.where(key: 'things').first.value.must_equal a
|
48
|
+
end
|
49
|
+
|
50
|
+
it "works with hashes" do
|
51
|
+
h = {hello: 'world'}
|
52
|
+
Setting.hashish = h
|
53
|
+
Setting.where(key: 'hashish').first.value.must_equal h
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
data/test/test_models.rb
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
ActiveRecord::Schema.define(:version => 0) do
|
2
|
+
create_table :settings, :force => true do |t|
|
3
|
+
t.string :key
|
4
|
+
t.text :value
|
5
|
+
t.timestamps
|
6
|
+
end
|
7
|
+
add_index :settings, [:key], :unique => true, :name => 'key_udx'
|
8
|
+
end
|
9
|
+
|
10
|
+
class Setting < ActiveRecord::Base
|
11
|
+
def_druthers :quest, :favourite_colour, :things, :hashish
|
12
|
+
serialize :value
|
13
|
+
|
14
|
+
def self.default_quest
|
15
|
+
"to find the holy grail"
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.default_things
|
19
|
+
[1, 2, 3]
|
20
|
+
end
|
21
|
+
|
22
|
+
def validate_favourite_colour
|
23
|
+
errors.add(:value, "invalid is invalid WERD") if value == "invalid"
|
24
|
+
end
|
25
|
+
end
|
metadata
ADDED
@@ -0,0 +1,193 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: druthers
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Matthew McEachen
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2013-07-11 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: activerecord
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ! '>='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '3.0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ! '>='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '3.0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ! '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ! '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: bundler
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ! '>='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: yard
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ! '>='
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: mysql2
|
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: pg
|
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: minitest-great_expectations
|
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: minitest-reporters
|
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
|
+
description: Simple, performant settings for your Rails application
|
140
|
+
email:
|
141
|
+
- matthew+github@mceachen.org
|
142
|
+
executables: []
|
143
|
+
extensions: []
|
144
|
+
extra_rdoc_files: []
|
145
|
+
files:
|
146
|
+
- .gitignore
|
147
|
+
- .travis.yml
|
148
|
+
- CHANGELOG.md
|
149
|
+
- Gemfile
|
150
|
+
- LICENSE.txt
|
151
|
+
- README.md
|
152
|
+
- Rakefile
|
153
|
+
- ci/Gemfile.rails-3.2.x
|
154
|
+
- ci/Gemfile.rails-4.0.x
|
155
|
+
- druthers.gemspec
|
156
|
+
- lib/druthers.rb
|
157
|
+
- lib/druthers/def.rb
|
158
|
+
- lib/druthers/support.rb
|
159
|
+
- lib/druthers/version.rb
|
160
|
+
- test/database.yml
|
161
|
+
- test/minitest_helper.rb
|
162
|
+
- test/setting_test.rb
|
163
|
+
- test/test_models.rb
|
164
|
+
homepage: https://github.com/mceachen/druthers
|
165
|
+
licenses:
|
166
|
+
- MIT
|
167
|
+
metadata: {}
|
168
|
+
post_install_message:
|
169
|
+
rdoc_options: []
|
170
|
+
require_paths:
|
171
|
+
- lib
|
172
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
173
|
+
requirements:
|
174
|
+
- - ! '>='
|
175
|
+
- !ruby/object:Gem::Version
|
176
|
+
version: '0'
|
177
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
178
|
+
requirements:
|
179
|
+
- - ! '>='
|
180
|
+
- !ruby/object:Gem::Version
|
181
|
+
version: '0'
|
182
|
+
requirements: []
|
183
|
+
rubyforge_project:
|
184
|
+
rubygems_version: 2.0.3
|
185
|
+
signing_key:
|
186
|
+
specification_version: 4
|
187
|
+
summary: ''
|
188
|
+
test_files:
|
189
|
+
- test/database.yml
|
190
|
+
- test/minitest_helper.rb
|
191
|
+
- test/setting_test.rb
|
192
|
+
- test/test_models.rb
|
193
|
+
has_rdoc:
|