anyway_config 0.2.0 → 0.3.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 40e4e0dd7f4d5e1fb19d83de0755be5f0054ac2f
4
- data.tar.gz: 555132629ca863a88d84ba53ee9cfd6ce02a2fad
3
+ metadata.gz: 19177bb68f7f250550ee553fb36c41f33fe181b7
4
+ data.tar.gz: f6fa6a2cb3f29c3434a0c8f660c97adc74a3f6d1
5
5
  SHA512:
6
- metadata.gz: 31e46f769ef2a2e550f195232c0fe76e127fc567d56de1c6a1d14e6c0f77e99a05c6f956746ca96a0647ad3edfd74e1d0f5e2301ab1c4f5af9dcc8ce119c939f
7
- data.tar.gz: f19f0adfe0d2827c14c4ff83b718ae06f13a2614103dcc4e86cc5cfc5de91dbf4be5f36d885ea57f5cb1a862eca04a60f6e8eed8297eda368bfe2103a368eeb0
6
+ metadata.gz: e1b58e60a43d24867f9a6e81a4ea032ac94b373592638b150001aa8e105e51dea2289bc84acd2edece19a1956f369c1ec522b62adcd81600b0001a8190e5a936
7
+ data.tar.gz: 164ea5df4fe0444e6f3e64df243c7602c2c0dbaf5615442c19246e20f75bedf3ba0a662028831eb11852f726109aa3e1fd5546570e3cee0889f3282551c1a8c7
data/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  # Anyway Config
4
4
 
5
- Rails plugin/application configuration using any source: YAML, _secrets_, environment.
5
+ Rails/Ruby plugin/application configuration using any source: YAML, _secrets_, environment.
6
6
 
7
7
 
8
8
  Apps using Anyway Config:
@@ -98,6 +98,7 @@ Rails 4.2 introduces new feature: `Rails.application.config_for`. It looks very
98
98
  | raise errors if file doesn't exist | yes | no |
99
99
 
100
100
  But the main advantage of Anyway::Config is that it's supported in Rails >= 3.2, Ruby >= 1.9.3.
101
+ And it can be even used [without Rails](#using-without-rails)!
101
102
 
102
103
  ## How to set env vars
103
104
 
@@ -108,6 +109,10 @@ For example, if your module is called "MyCoolGem" then your env var "MYCOOLGEM_P
108
109
  *Anyway Config* supports nested (_hashed_) environmental variables. Just separate keys with double-underscore.
109
110
  For example, "MYCOOLGEM_OPTIONS__VERBOSE" is transformed to `config.options.verbose`.
110
111
 
112
+ ## Using without Rails
113
+
114
+ AnywayConfig can be used without Rails too.
115
+ Environmental variables remain the same. To load config from YAML add special environment variable 'MYGEM_CONF' containing path to config. But you cannot use one file for different environments (unless you do it yourself).
111
116
 
112
117
  ## Contributing
113
118
 
data/Rakefile CHANGED
@@ -3,4 +3,8 @@ require "bundler/gem_tasks"
3
3
  require 'rspec/core/rake_task'
4
4
  RSpec::Core::RakeTask.new(:spec)
5
5
 
6
- task :default => :spec
6
+ RSpec::Core::RakeTask.new(:spec2) do |t|
7
+ t.pattern = "./spec/**/*_norails.rb"
8
+ end
9
+
10
+ task :default => [:spec2, :spec]
@@ -17,6 +17,8 @@ Gem::Specification.new do |s|
17
17
  s.require_paths = ["lib"]
18
18
  s.required_ruby_version = '>= 1.9.3'
19
19
 
20
+ s.add_dependency "activesupport", ">= 3.2"
21
+
20
22
  s.add_development_dependency 'pry'
21
23
  s.add_development_dependency "simplecov", ">= 0.3.8"
22
24
  s.add_development_dependency "rspec", "~> 3.0.0"
data/lib/anyway/config.rb CHANGED
@@ -56,19 +56,20 @@ module Anyway
56
56
  end
57
57
 
58
58
  def load_from_sources(config={}.with_indifferent_access)
59
- # then load from YAML if any
60
- config_path = Rails.root.join("config","#{@config_name}.yml")
61
- if File.file? config_path
62
- require 'yaml'
63
- config.deep_merge! (YAML.load_file(config_path)[Rails.env] || {})
64
- end
59
+ load_from_file(config)
60
+ load_from_env(config)
61
+ end
65
62
 
66
- # then load from Rails secrets
67
- if Rails.application.respond_to?(:secrets)
68
- config.deep_merge! (Rails.application.secrets.send(@config_name)||{})
63
+ def load_from_file(config)
64
+ config_path = (Anyway.env.send(@config_name)||{}).delete(:conf)
65
+ if config_path and File.file?(config_path)
66
+ require 'yaml'
67
+ config.deep_merge! (YAML.load_file(config_path) || {})
69
68
  end
70
-
71
- # and then load from env
69
+ config
70
+ end
71
+
72
+ def load_from_env(config)
72
73
  config.deep_merge! (Anyway.env.send(@config_name) || {})
73
74
  config
74
75
  end
@@ -0,0 +1,25 @@
1
+ module Anyway
2
+ class Config
3
+ def load_from_sources(config={}.with_indifferent_access)
4
+ load_from_file(config)
5
+ load_from_secrets(config)
6
+ load_from_env(config)
7
+ end
8
+
9
+ def load_from_file(config)
10
+ config_path = Rails.root.join("config","#{@config_name}.yml")
11
+ if File.file? config_path
12
+ require 'yaml'
13
+ config.deep_merge! (YAML.load_file(config_path)[Rails.env] || {})
14
+ end
15
+ config
16
+ end
17
+
18
+ def load_from_secrets(config)
19
+ if Rails.application.respond_to?(:secrets)
20
+ config.deep_merge! (Rails.application.secrets.send(@config_name)||{})
21
+ end
22
+ config
23
+ end
24
+ end
25
+ end
@@ -1,3 +1,3 @@
1
1
  module Anyway
2
- VERSION = "0.2.0"
2
+ VERSION = "0.3.0"
3
3
  end
data/lib/anyway.rb CHANGED
@@ -1,7 +1,11 @@
1
- require "anyway/version"
1
+ require 'active_support/core_ext/hash'
2
+ require 'active_support/core_ext/string'
3
+ require 'active_support/core_ext/object'
2
4
 
5
+ require "anyway/version"
3
6
  module Anyway
4
7
  require "anyway/config"
8
+ require "anyway/rails/config" if defined?(Rails)
5
9
  require "anyway/env"
6
10
 
7
11
  def self.env
data/spec/anyway.yml ADDED
@@ -0,0 +1,2 @@
1
+ api:
2
+ endpoint: 'localhost'
data/spec/config_spec.rb CHANGED
@@ -79,24 +79,6 @@ describe Anyway::Config do
79
79
  end
80
80
  end
81
81
 
82
- describe "config with default name" do
83
- after(:each) { Anyway.env.clear }
84
- specify { expect(Anyway::TestConfig.config_name).to eq "anyway" }
85
-
86
- specify do
87
- expect(test_conf).to respond_to(:test)
88
- expect(test_conf).to respond_to(:api)
89
- end
90
-
91
- it "should work" do
92
- ENV['ANYWAY_API__KEY'] = 'test1'
93
- ENV['ANYWAY_TEST'] = 'test'
94
- Anyway.env.reload
95
- expect(test_conf.api[:key]).to eq "test1"
96
- expect(test_conf.test).to eq "test"
97
- end
98
- end
99
-
100
82
  describe "config for name" do
101
83
  after(:each) { Anyway.env.clear }
102
84
  it "should load data by config name" do
@@ -0,0 +1,43 @@
1
+ require 'spec_norails_helper'
2
+
3
+ describe Anyway::Config do
4
+
5
+ let(:conf) { Anyway::TestConfig.new }
6
+
7
+ describe "config without Rails" do
8
+ after(:each) { Anyway.env.clear }
9
+ specify { expect(Anyway::TestConfig.config_name).to eq "anyway" }
10
+
11
+ specify do
12
+ expect(conf).to respond_to(:test)
13
+ expect(conf).to respond_to(:api)
14
+ end
15
+
16
+ it "should work" do
17
+ ENV['ANYWAY_CONF'] = File.join(File.dirname(__FILE__),"anyway.yml")
18
+ ENV['ANYWAY_API__KEY'] = 'test1'
19
+ ENV['ANYWAY_TEST'] = 'test'
20
+
21
+ Anyway.env.reload
22
+ expect(conf.api[:key]).to eq "test1"
23
+ expect(conf.api[:endpoint]).to eq "localhost"
24
+ expect(conf.test).to eq "test"
25
+ end
26
+
27
+ it "should reload config" do
28
+ expect(conf.api[:key]).to eq ""
29
+ expect(conf.api[:endpoint]).to be_nil
30
+ expect(conf.test).to be_nil
31
+
32
+ ENV['ANYWAY_CONF'] = File.join(File.dirname(__FILE__),"anyway.yml")
33
+ ENV['ANYWAY_API__KEY'] = 'test1'
34
+ ENV['ANYWAY_TEST'] = 'test'
35
+ Anyway.env.reload
36
+
37
+ conf.reload
38
+ expect(conf.api[:key]).to eq "test1"
39
+ expect(conf.api[:endpoint]).to eq "localhost"
40
+ expect(conf.test).to eq "test"
41
+ end
42
+ end
43
+ end
data/spec/dummy.yml ADDED
File without changes
data/spec/spec_helper.rb CHANGED
@@ -3,17 +3,13 @@ $LOAD_PATH.unshift(File.dirname(__FILE__))
3
3
 
4
4
  ENV["RAILS_ENV"] ||= 'test'
5
5
 
6
- # require 'simplecov'
7
- # SimpleCov.root File.join(File.dirname(__FILE__), '..', 'lib')
8
- # SimpleCov.start
9
-
10
6
  require 'rspec'
11
7
  require 'pry'
12
- require 'anyway'
13
8
 
14
9
  require 'rails/all'
15
10
  require 'rspec/rails'
16
11
 
12
+ require 'anyway'
17
13
  require "dummy/config/environment"
18
14
 
19
15
  Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
@@ -0,0 +1,13 @@
1
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
3
+
4
+ require 'rspec'
5
+ require 'pry'
6
+
7
+ require 'anyway'
8
+
9
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
10
+
11
+ RSpec.configure do |config|
12
+ config.mock_with :rspec
13
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: anyway_config
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vlad Dem
@@ -10,6 +10,20 @@ bindir: bin
10
10
  cert_chain: []
11
11
  date: 2015-01-23 00:00:00.000000000 Z
12
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: '3.2'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '3.2'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: pry
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -87,8 +101,12 @@ files:
87
101
  - lib/anyway.rb
88
102
  - lib/anyway/config.rb
89
103
  - lib/anyway/env.rb
104
+ - lib/anyway/rails/config.rb
90
105
  - lib/anyway/version.rb
106
+ - spec/anyway.yml
91
107
  - spec/config_spec.rb
108
+ - spec/config_spec_norails.rb
109
+ - spec/dummy.yml
92
110
  - spec/dummy/README.rdoc
93
111
  - spec/dummy/Rakefile
94
112
  - spec/dummy/app/assets/images/.keep
@@ -134,6 +152,7 @@ files:
134
152
  - spec/dummy/public/favicon.ico
135
153
  - spec/env_spec.rb
136
154
  - spec/spec_helper.rb
155
+ - spec/spec_norails_helper.rb
137
156
  - spec/support/cool_config.rb
138
157
  - spec/support/test_config.rb
139
158
  homepage: http://github.com/palkan/anyway_config