configureasy 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 27a4dc67f6dbb0c1a719a09453e3621c91365ea1
4
+ data.tar.gz: 7110800425b8880687c7a78e5c23b285b58d3705
5
+ SHA512:
6
+ metadata.gz: eb1870f7f84b47e4b08483dc958dc3de2cc4859b66d4066e38786c9f553cf28bc220a278797a8cc43aea450d244fb79365b5d398df0d5a0cd087abac4e35b23a
7
+ data.tar.gz: 2f88c2dfe20f5ed7b34ec131691c81a228e9b39104583b289620d1c81c98ffe4b548a65b62a25ad83d84806aac2429692e6d9c6e16d85db2137a3152c46592c3
data/.gitignore ADDED
@@ -0,0 +1,14 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+ *.bundle
11
+ *.so
12
+ *.o
13
+ *.a
14
+ mkmf.log
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in configureasy.gemspec
4
+ gemspec
data/Guardfile ADDED
@@ -0,0 +1,15 @@
1
+ clearing :on
2
+ guard :rspec, cmd: "bundle exec rspec" do
3
+ require "guard/rspec/dsl"
4
+ dsl = Guard::RSpec::Dsl.new(self)
5
+
6
+ # RSpec files
7
+ rspec = dsl.rspec
8
+ watch(rspec.spec_helper) { rspec.spec_dir }
9
+ watch(rspec.spec_support) { rspec.spec_dir }
10
+ watch(rspec.spec_files)
11
+
12
+ # Ruby files
13
+ ruby = dsl.ruby
14
+ dsl.watch_spec_files_for(ruby.lib_files)
15
+ end
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2015 Alexandre Prates
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,68 @@
1
+ Configureasy
2
+ =============
3
+
4
+ A forma mais simples de carregar arquivos de configuração em suas Classe/Módulos.
5
+
6
+ ## Instalação
7
+
8
+ Basta adicionar esta linha no seu Gemfile
9
+
10
+ ```ruby
11
+ gem 'configureasy'
12
+ ```
13
+
14
+ E entao executar:
15
+
16
+ $ bundle
17
+
18
+ Ou instale manualmente:
19
+
20
+ $ gem install configureasy
21
+
22
+ ## Como usar
23
+
24
+ Basta incluir na classe e começar a usar
25
+
26
+ ```ruby
27
+ class Foo
28
+ include Configureasy
29
+ end
30
+
31
+ Foo.config.some_key_in_config
32
+ # => 'some value for that key'
33
+ ```
34
+
35
+ Por padrão ele busca um arquivo (.yml) no diretório _config_, caso precise especificar um nome diferente utilize o método _config_name_.
36
+
37
+ ```ruby
38
+ class Foo
39
+ include Configureasy
40
+ # load APP_ROOT/config/foo_config.yml
41
+ config_name :foo_config
42
+ end
43
+ ```
44
+
45
+ Caso precise você tambem pode especificar de onde carregar a configuração usando o método _config_filename_.
46
+
47
+ ```ruby
48
+ class Foo
49
+ include Configureasy
50
+ # load APP_ROOT/.hide_dir/secrets.yml
51
+ config_filename '.hide_dir/secrets.yml'
52
+ end
53
+ ```
54
+
55
+ Caso precise ver o conteúdo original do arquivo utilize o método _raw_content_.
56
+
57
+ ```ruby
58
+ class Foo
59
+ include Configureasy
60
+ end
61
+
62
+ Foo.config.raw_content
63
+ # => {'foo' => 'bar'}
64
+ ```
65
+
66
+ ## Duvidas, questões e desconfianças em geral
67
+
68
+ mail me: ajfprates@gmail.com
data/Rakefile ADDED
@@ -0,0 +1,2 @@
1
+ require "bundler/gem_tasks"
2
+
@@ -0,0 +1,27 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'configureasy/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "configureasy"
8
+ spec.version = Configureasy::VERSION
9
+ spec.authors = ["Alexandre Prates"]
10
+ spec.email = ["ajfprates@gmail.com"]
11
+ spec.summary = %q{A Simple way to get configs in your Classes/Modules.}
12
+ spec.description = %q{A Simple way to get configs in your Classes/Modules.}
13
+ spec.homepage = "https://gitlab.ir7.com.br/videos/configureasy"
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{^(spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_development_dependency "bundler", "~> 1.7"
22
+ spec.add_development_dependency "rake", "~> 10.0"
23
+
24
+ spec.add_development_dependency "rspec", "~> 3.1"
25
+ spec.add_development_dependency "guard", "~> 2.10"
26
+ spec.add_development_dependency "guard-rspec", "~> 4.5"
27
+ end
@@ -0,0 +1,38 @@
1
+ require "configureasy/version"
2
+
3
+ # Configureasy is a easy way to getting configs into you class/model
4
+ #
5
+ # Example
6
+ #
7
+ # class Foo
8
+ # include Configureasy
9
+ # end
10
+ # Foo.config.some_key
11
+ # => 'some value'
12
+ #
13
+ # class Bar
14
+ # include Configureasy
15
+ # config_name :barz #looks for APP_DIR/config/barz.yml
16
+ # end
17
+ #
18
+ # class FooBar
19
+ # include Configureasy
20
+ # def internal_access
21
+ # value = self.class.some_key
22
+ # ...
23
+ # end
24
+ # end
25
+ #
26
+ module Configureasy
27
+ # Class to raise error on missing config file _yaml_
28
+ class ConfigNotFound < Exception; end
29
+ # Class to raise error on invalid config file
30
+ class ConfigInvalid < Exception; end
31
+
32
+ def self.included(receiver)
33
+ receiver.extend Configurable
34
+ end
35
+ end
36
+
37
+ require 'configureasy/config'
38
+ require 'configureasy/configurable'
@@ -0,0 +1,15 @@
1
+ require 'ostruct'
2
+
3
+ ##
4
+ # Class for store and retrive config values
5
+ #
6
+ # Example
7
+ # >> Confugureasy::Config.new(foo: 'foo').foo
8
+ # => 'foo'
9
+ #
10
+ class Configureasy::Config < OpenStruct
11
+ # return config as hash
12
+ def raw_content
13
+ @table
14
+ end
15
+ end
@@ -0,0 +1,57 @@
1
+ require 'yaml'
2
+
3
+ module Configureasy::Configurable
4
+ # Setting config file name
5
+ #
6
+ # Example
7
+ # config_name :foo
8
+ # => APP_ROOT/config/foo.yml
9
+ #
10
+ # config_name :bar
11
+ # => APP_ROOT/config/bar.yml
12
+ #
13
+ def config_name(name = nil)
14
+ @config_name = name if name
15
+ @config_name || self.name.downcase
16
+ end
17
+
18
+ def config_filename(filename = nil)
19
+ @config_filename = File.expand_path filename if filename
20
+ @config_filename || File.expand_path("./config/#{config_name}.yml")
21
+ end
22
+
23
+ # Load the config yaml and return Configureasy::Config instance
24
+ def config
25
+ @config ||= load_configs
26
+ end
27
+
28
+ # Looks for config file an return true if file exists
29
+ def have_config?
30
+ File.exist? config_filename
31
+ end
32
+
33
+ # Reload configs
34
+ def reset_config!
35
+ @config = nil
36
+ config
37
+ end
38
+
39
+ private
40
+
41
+ def load_configs
42
+ configs_hash = parse_configs
43
+ raise Configureasy::ConfigInvalid, "invalid config file '#{config_filename}'", caller unless configs_hash.is_a? Hash
44
+
45
+ Configureasy::Config.new configs_hash[_current_env] || configs_hash
46
+ end
47
+
48
+ def parse_configs
49
+ raise Configureasy::ConfigNotFound, "file not found '#{config_filename}'", caller unless have_config?
50
+ YAML.load_file config_filename
51
+ end
52
+
53
+ def _current_env
54
+ ENV['RAILS_ENV'] || ENV['RUBY_ENV'] || ENV['RACK_ENV'] || 'development'
55
+ end
56
+
57
+ end
@@ -0,0 +1,3 @@
1
+ module Configureasy
2
+ VERSION = "0.0.2"
3
+ end
@@ -0,0 +1,13 @@
1
+ require 'spec_helper'
2
+
3
+ describe Configureasy::Config do
4
+ describe ".new" do
5
+ it "should store key/value as methods" do
6
+ expect(Configureasy::Config.new(foo: 'bar').foo).to eq('bar')
7
+ end
8
+ end
9
+
10
+ describe "#as_hash" do
11
+
12
+ end
13
+ end
@@ -0,0 +1,81 @@
1
+ require 'spec_helper'
2
+
3
+ class Foo
4
+ extend Configureasy::Configurable
5
+ end
6
+
7
+ describe Configureasy::Configurable do
8
+ describe ".config_name" do
9
+ it "by default config name is class name" do
10
+ expect(Foo.config_name).to eq('foo')
11
+ end
12
+
13
+ it "changes config name" do
14
+ expect(Foo.config_name).to eq('foo')
15
+ Foo.config_name "bar"
16
+ expect(Foo.config_name).to eq('bar')
17
+ end
18
+
19
+ it "config name reflects on config_filename" do
20
+ Foo.config_name "other_conf"
21
+ expect(Foo.send :config_filename).to match(/other_conf\.yml$/)
22
+ end
23
+ end
24
+
25
+ describe '.config_filename' do
26
+ it "set config filename" do
27
+ Foo.config_filename '.hidedir/secret_config.yml'
28
+ expect(Foo.config_filename).to end_with('.hidedir/secret_config.yml')
29
+ end
30
+ end
31
+
32
+ describe '#config' do
33
+ let(:yaml_content) { {'development' => {'foo' => 'bar'}, 'test' => {'foo' => 'test'} } }
34
+
35
+ it "raise excepion when file missing" do
36
+ expect { Foo.config }.to raise_exception Configureasy::ConfigNotFound
37
+ end
38
+
39
+ it "raise exception when file content is not valid yaml" do
40
+ allow(YAML).to receive(:load_file).and_return("wrong yaml content")
41
+ allow(File).to receive(:exist?).and_return(true)
42
+
43
+ expect { Foo.config }.to raise_exception Configureasy::ConfigInvalid
44
+ end
45
+
46
+ it "access values on config file" do
47
+ allow(YAML).to receive(:load_file).and_return(yaml_content)
48
+ allow(File).to receive(:exist?).and_return(true)
49
+
50
+ expect(Foo.config).to respond_to(:foo)
51
+ expect(Foo.config.foo).to eq('bar')
52
+ end
53
+
54
+ it "load contend for current environment" do
55
+ allow(YAML).to receive(:load_file).and_return(yaml_content)
56
+ allow(File).to receive(:exist?).and_return(true)
57
+
58
+ ENV['RUBY_ENV'] = 'development'
59
+ expect(Foo.reset_config!.foo).to eq('bar')
60
+
61
+ ENV['RUBY_ENV'] = 'test'
62
+ expect(Foo.reset_config!.foo).to eq('test')
63
+
64
+ ENV['RUBY_ENV'] = nil
65
+
66
+ ENV['RACK_ENV'] = 'development'
67
+ expect(Foo.reset_config!.foo).to eq('bar')
68
+ ENV['RACK_ENV'] = nil
69
+
70
+ ENV['RAILS_ENV'] = 'test'
71
+ expect(Foo.reset_config!.foo).to eq('test')
72
+ end
73
+
74
+ it "config is kind of Configs class" do
75
+ allow(YAML).to receive(:load_file).and_return(yaml_content)
76
+ allow(File).to receive(:exist?).and_return(true)
77
+
78
+ expect(Foo.config).to be_kind_of(Configureasy::Config)
79
+ end
80
+ end
81
+ end
File without changes
@@ -0,0 +1,9 @@
1
+ require './lib/configureasy'
2
+ RSpec.configure do |config|
3
+ config.expect_with :rspec do |expectations|
4
+ expectations.include_chain_clauses_in_custom_matcher_descriptions = true
5
+ end
6
+ config.mock_with :rspec do |mocks|
7
+ mocks.verify_partial_doubles = true
8
+ end
9
+ end
metadata ADDED
@@ -0,0 +1,133 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: configureasy
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ platform: ruby
6
+ authors:
7
+ - Alexandre Prates
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-03-06 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.7'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.7'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '3.1'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '3.1'
55
+ - !ruby/object:Gem::Dependency
56
+ name: guard
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '2.10'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '2.10'
69
+ - !ruby/object:Gem::Dependency
70
+ name: guard-rspec
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '4.5'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '4.5'
83
+ description: A Simple way to get configs in your Classes/Modules.
84
+ email:
85
+ - ajfprates@gmail.com
86
+ executables: []
87
+ extensions: []
88
+ extra_rdoc_files: []
89
+ files:
90
+ - ".gitignore"
91
+ - Gemfile
92
+ - Guardfile
93
+ - LICENSE.txt
94
+ - README.md
95
+ - Rakefile
96
+ - configureasy.gemspec
97
+ - lib/configureasy.rb
98
+ - lib/configureasy/config.rb
99
+ - lib/configureasy/configurable.rb
100
+ - lib/configureasy/version.rb
101
+ - spec/lib/configureasy/config_spec.rb
102
+ - spec/lib/configureasy/configurable_spec.rb
103
+ - spec/lib/configureasy_spec.rb
104
+ - spec/spec_helper.rb
105
+ homepage: https://gitlab.ir7.com.br/videos/configureasy
106
+ licenses:
107
+ - MIT
108
+ metadata: {}
109
+ post_install_message:
110
+ rdoc_options: []
111
+ require_paths:
112
+ - lib
113
+ required_ruby_version: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ required_rubygems_version: !ruby/object:Gem::Requirement
119
+ requirements:
120
+ - - ">="
121
+ - !ruby/object:Gem::Version
122
+ version: '0'
123
+ requirements: []
124
+ rubyforge_project:
125
+ rubygems_version: 2.4.5
126
+ signing_key:
127
+ specification_version: 4
128
+ summary: A Simple way to get configs in your Classes/Modules.
129
+ test_files:
130
+ - spec/lib/configureasy/config_spec.rb
131
+ - spec/lib/configureasy/configurable_spec.rb
132
+ - spec/lib/configureasy_spec.rb
133
+ - spec/spec_helper.rb