easy_configs 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ MjkwNWNiMGNkZGZiOTFhMTU1NmRlMjQ0MWRhZDk0ZGViYzY0YWZlNg==
5
+ data.tar.gz: !binary |-
6
+ MjViNmY1MzBmMWM4ZDRiOWQ5MzQ4MmI2MDRhMjZkNDMwMjMwM2EwMA==
7
+ !binary "U0hBNTEy":
8
+ metadata.gz: !binary |-
9
+ YTk3ZDllZWY2YmY2NzcyMzAxN2I1ZWU2Mjk5MzBjYjIyNmRhNDVmMGJjYzdi
10
+ NjNhMGNkODUxNTg4Nzc3NDE3M2QxMGM4NDg3YjRlOWJmOGUwMjAzMjcyOTcx
11
+ NTYxZjkzMzYwODZiYmQyOTU1ZDZiNjUwNGIxMmRkODE3MWI4Yjk=
12
+ data.tar.gz: !binary |-
13
+ NGVlMzE2OGY5M2Y0OTQ2Y2MyY2QzYTU5OTlkNDRmZmVkMjc0YmE3Yzk1MDg5
14
+ YjdjZjQzZjlmOTZkNTM0YTgwYzgxNWM1MGFkZjIxMGZlMWIyNDQ1M2IzNDZl
15
+ ZjhmNzJkOTEyMDlmNjYyMWFiYjEzNjhjZGY2NGM5YTI4NTRjODM=
data/.gitignore ADDED
@@ -0,0 +1,8 @@
1
+ .bundle/
2
+ log/*.log
3
+ pkg/
4
+ test/dummy/db/*.sqlite3
5
+ test/dummy/db/*.sqlite3-journal
6
+ test/dummy/log/*.log
7
+ test/dummy/tmp/
8
+ test/dummy/.sass-cache
data/Gemfile ADDED
@@ -0,0 +1,7 @@
1
+ source "https://rubygems.org"
2
+
3
+ gemspec
4
+
5
+ group :development, :test do
6
+ gem 'rake'
7
+ end
data/Gemfile.lock ADDED
@@ -0,0 +1,16 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ easy_configs (0.0.1)
5
+
6
+ GEM
7
+ remote: https://rubygems.org/
8
+ specs:
9
+ rake (10.0.4)
10
+
11
+ PLATFORMS
12
+ ruby
13
+
14
+ DEPENDENCIES
15
+ easy_configs!
16
+ rake
data/MIT-LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright 2013 Andrea Pavoni - http://andreapavoni.com
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,82 @@
1
+ # EasyConfig
2
+
3
+ A simple gem to store custom app settings the easiest way. It can be used in any
4
+ Ruby *or* Rails application.
5
+
6
+ ## Installation
7
+
8
+ Add this line to your application's Gemfile:
9
+
10
+ ```gem 'easy_configs'```
11
+
12
+ then execute:
13
+
14
+ ```$ bundle install```
15
+
16
+ or install it yourself as:
17
+
18
+ ```$ gem install easy_configs```
19
+
20
+ ## Usage
21
+
22
+ EasyConfig loads a YAML file (with eventual ERB tags, so you can use ```ENV``` variables).
23
+ For example, given a YAML file with a bunch of keys:
24
+
25
+ ```
26
+ foo:
27
+ bar: 1
28
+ env: <%= ENV['USER'] %>
29
+ baz:
30
+ nested: 2
31
+ ```
32
+
33
+ Here's how to use it:
34
+
35
+ ```
36
+ # Load yaml file
37
+ MyConfig = EasyConfig.load_yaml 'path_to_yaml.yml'
38
+
39
+ # Retrieve keys
40
+ MyConfig.bar # => 1
41
+ MyConfig.env # => YOUR_USERNAME
42
+
43
+ # Retuns a nested object (EasyConfig::DeepStruct is a modified version of Ruby's OpenStruct)
44
+ MyConfig.baz # => <#EasyConfig::DeepStruct>
45
+
46
+ # Access a nested key
47
+ MyConfig.baz.nested # => 2
48
+
49
+ # Returns an Hash
50
+ MyConfig.to_h # => {foo: {bar: 1, env: ..., baz: {nested: 2} }}
51
+
52
+ ```
53
+
54
+ ## Rails support
55
+
56
+ EasyConfig has built-in support for Rails. It provides a generator to create an initializer and a sample config:
57
+
58
+ * run the generator
59
+
60
+ ```rails generate easy_config:install```
61
+ * edit the sample configuration in ```config/easy_config.yml```
62
+
63
+ You might want to modify ```config/initializers/easy_config.rb``` to choose another name for the object that should store the settings.
64
+ (default name is ```EConfig```), or add additional logic. No problem, this is just a *decent default* for the lazy.
65
+
66
+ ## Contributing
67
+
68
+ 1. Fork it!
69
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
70
+ 3. Commit your changes (`git commit -am 'Added some feature'`)
71
+ 4. Push to the branch (`git push origin my-new-feature`)
72
+ 5. Create new Pull Request
73
+
74
+ ### Testing
75
+
76
+ * clone this repo
77
+ * run `bundle install`
78
+ * run `rake spec`
79
+
80
+
81
+ ## License
82
+ Copyright (c) 2013 Andrea Pavoni http://andreapavoni.com
data/Rakefile ADDED
@@ -0,0 +1,16 @@
1
+ begin
2
+ require 'bundler/setup'
3
+ rescue LoadError
4
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
5
+ end
6
+
7
+ Bundler::GemHelper.install_tasks
8
+
9
+ require 'rake/testtask'
10
+
11
+ Rake::TestTask.new(:spec) do |t|
12
+ t.test_files = Dir["spec/**/*_spec.rb"]
13
+ t.verbose = false
14
+ end
15
+
16
+ task :default => :spec
@@ -0,0 +1,21 @@
1
+ $:.push File.expand_path("../lib", __FILE__)
2
+
3
+ # Maintain your gem's version:
4
+ require "easy_config/version"
5
+
6
+ # Describe your gem and declare its dependencies:
7
+ Gem::Specification.new do |s|
8
+ s.name = "easy_configs"
9
+ s.description = "Store Ruby or Rails app settings in the easiest way."
10
+ s.summary = "Store custom Ruby or Rails app settings in the easiest way."
11
+ s.version = EasyConfig::VERSION
12
+
13
+ s.authors = ["Andrea Pavoni"]
14
+ s.email = ["andrea.pavoni@gmail.com"]
15
+ s.homepage = "http://github.com/apeacox/easy_config"
16
+
17
+ s.require_paths = ["lib"]
18
+ s.files = `git ls-files`.split($\)
19
+ s.test_files = Dir["spec/**/*"]
20
+
21
+ end
@@ -0,0 +1,15 @@
1
+ require 'yaml'
2
+ require 'erb'
3
+ require 'easy_config/deep_struct'
4
+ require 'easy_config/version'
5
+
6
+ module EasyConfig
7
+
8
+ def self.load_yaml(path, key = nil)
9
+ result = YAML.load(ERB.new(File.read(path)).result)
10
+ result = result[key.to_s] unless key.nil?
11
+
12
+ DeepStruct.new result
13
+ end
14
+
15
+ end
@@ -0,0 +1,26 @@
1
+ require 'ostruct'
2
+
3
+ module EasyConfig
4
+
5
+ class DeepStruct < OpenStruct
6
+ def initialize(hash=nil)
7
+ @table = {}
8
+ @hash_table = {}
9
+
10
+ if hash
11
+ hash.each do |k,v|
12
+ @table[k.to_sym] = (v.is_a?(Hash) ? self.class.new(v) : v)
13
+ @hash_table[k.to_sym] = v
14
+
15
+ new_ostruct_member(k)
16
+ end
17
+ end
18
+ end
19
+
20
+ def to_h
21
+ @hash_table
22
+ end
23
+
24
+ end
25
+
26
+ end
@@ -0,0 +1,3 @@
1
+ module EasyConfig
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,23 @@
1
+ require 'rails/generators/base'
2
+
3
+ module EasyConfig
4
+ class InstallGenerator < ::Rails::Generators::Base #:nodoc:
5
+
6
+ desc 'Generates EasyConfig files.'
7
+
8
+ def self.source_root
9
+ @_easy_config_source_root ||= File.expand_path(File.join(File.dirname(__FILE__), 'templates'))
10
+ end
11
+
12
+ def self.banner
13
+ "rails generate easy_config:install"
14
+ end
15
+
16
+ def copy_files
17
+ template 'easy_config.rb', 'config/initializers/easy_config.rb'
18
+ template 'easy_config.yml', 'config/easy_config.yml'
19
+ end
20
+
21
+ end
22
+
23
+ end
@@ -0,0 +1,5 @@
1
+ require 'easy_config'
2
+
3
+ path = File.join(Rails.root, "/config/easy_config.yml")
4
+
5
+ EConfig = EasyConfig.load_yaml path, Rails.env
@@ -0,0 +1,16 @@
1
+ # Set your configs here.
2
+
3
+ development:
4
+ foo: 'example_dev'
5
+ bar:
6
+ baz: 1
7
+
8
+ test:
9
+ foo: 'example_test'
10
+ bar:
11
+ baz: 1
12
+
13
+ production:
14
+ foo: 'example_prod'
15
+ bar:
16
+ baz: 1
@@ -0,0 +1,42 @@
1
+ require_relative 'helper'
2
+
3
+ describe EasyConfig do
4
+
5
+ describe ".load" do
6
+
7
+ describe "it loads a basic YAML" do
8
+ let(:path) { File.expand_path './spec/fixtures/basic.yml' }
9
+ let(:obj) { EasyConfig.load_yaml path }
10
+
11
+ it "returns a EasyConfig::DeepStruct object" do
12
+ obj.must_be_instance_of EasyConfig::DeepStruct
13
+ end
14
+ end
15
+
16
+ describe "it loads a namespace inside YAML" do
17
+ let(:path) { File.expand_path './spec/fixtures/namespaced.yml' }
18
+
19
+ it "loads only the given namespace" do
20
+ obj1 = EasyConfig.load_yaml path, 'namespace1'
21
+ obj2 = EasyConfig.load_yaml path, 'namespace2'
22
+
23
+ obj1.test.foo.must_equal 1
24
+ obj2.test.foo.must_equal 3
25
+ end
26
+
27
+ end
28
+
29
+ describe "it loads ERB tags" do
30
+ let(:path) { File.expand_path './spec/fixtures/erbiefed.yml' }
31
+
32
+ it "loads only the given namespace" do
33
+ obj = EasyConfig.load_yaml path
34
+
35
+ obj.test.foo.must_equal 'this is from ERB'
36
+ end
37
+
38
+ end
39
+
40
+ end
41
+
42
+ end
@@ -0,0 +1,4 @@
1
+ test:
2
+ foo: 1
3
+ bar:
4
+ baz: 2
@@ -0,0 +1,4 @@
1
+ test:
2
+ foo: <%= 'this is from ERB' %>
3
+ bar:
4
+ baz: 2
@@ -0,0 +1,11 @@
1
+ namespace1:
2
+ test:
3
+ foo: 1
4
+ bar:
5
+ baz: 2
6
+
7
+ namespace2:
8
+ test:
9
+ foo: 3
10
+ bar:
11
+ baz: 4
data/spec/helper.rb ADDED
@@ -0,0 +1,5 @@
1
+ $:.push File.expand_path("../lib", __FILE__)
2
+
3
+ require 'easy_config'
4
+ require 'minitest/spec'
5
+ require 'minitest/autorun'
@@ -0,0 +1,32 @@
1
+ require_relative '../helper'
2
+
3
+ describe EasyConfig::DeepStruct do
4
+ let(:hash) { {a: 1, b: {c: 3}} }
5
+ let(:deep_struct) { EasyConfig::DeepStruct.new hash }
6
+
7
+ describe ".new" do
8
+ it "returns a DeepStruct object" do
9
+ deep_struct.must_be_instance_of EasyConfig::DeepStruct
10
+ end
11
+ end
12
+
13
+ it "inherits from OpenStruct" do
14
+ deep_struct.class.ancestors.must_include OpenStruct
15
+ end
16
+
17
+ it "exposes method names to access keys" do
18
+ deep_struct.a.must_equal 1
19
+ end
20
+
21
+ it "can wrap another DeepStruct" do
22
+ deep_struct.b.must_be_instance_of EasyConfig::DeepStruct
23
+ deep_struct.b.c.must_equal 3
24
+ end
25
+
26
+ describe "#to_h" do
27
+ it "returns the original Hash" do
28
+ deep_struct.to_h.must_equal hash
29
+ end
30
+ end
31
+
32
+ end
metadata ADDED
@@ -0,0 +1,68 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: easy_configs
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Andrea Pavoni
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-04-26 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: Store Ruby or Rails app settings in the easiest way.
14
+ email:
15
+ - andrea.pavoni@gmail.com
16
+ executables: []
17
+ extensions: []
18
+ extra_rdoc_files: []
19
+ files:
20
+ - .gitignore
21
+ - Gemfile
22
+ - Gemfile.lock
23
+ - MIT-LICENSE
24
+ - README.md
25
+ - Rakefile
26
+ - easy_config.gemspec
27
+ - lib/easy_config.rb
28
+ - lib/easy_config/deep_struct.rb
29
+ - lib/easy_config/version.rb
30
+ - lib/generators/easy_config/install/install_generator.rb
31
+ - lib/generators/easy_config/install/templates/easy_config.rb
32
+ - lib/generators/easy_config/install/templates/easy_config.yml
33
+ - spec/easy_config_spec.rb
34
+ - spec/fixtures/basic.yml
35
+ - spec/fixtures/erbiefed.yml
36
+ - spec/fixtures/namespaced.yml
37
+ - spec/helper.rb
38
+ - spec/lib/deep_struct_spec.rb
39
+ homepage: http://github.com/apeacox/easy_config
40
+ licenses: []
41
+ metadata: {}
42
+ post_install_message:
43
+ rdoc_options: []
44
+ require_paths:
45
+ - lib
46
+ required_ruby_version: !ruby/object:Gem::Requirement
47
+ requirements:
48
+ - - ! '>='
49
+ - !ruby/object:Gem::Version
50
+ version: '0'
51
+ required_rubygems_version: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ! '>='
54
+ - !ruby/object:Gem::Version
55
+ version: '0'
56
+ requirements: []
57
+ rubyforge_project:
58
+ rubygems_version: 2.0.3
59
+ signing_key:
60
+ specification_version: 4
61
+ summary: Store custom Ruby or Rails app settings in the easiest way.
62
+ test_files:
63
+ - spec/easy_config_spec.rb
64
+ - spec/fixtures/basic.yml
65
+ - spec/fixtures/erbiefed.yml
66
+ - spec/fixtures/namespaced.yml
67
+ - spec/helper.rb
68
+ - spec/lib/deep_struct_spec.rb