anyway_config 0.5.1.rc1 → 0.5.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2bccd0227df51b6e96f2036d7863eadd0b0bbc07
4
- data.tar.gz: 70d571464f14b6881c9cfcafe5af9ad367e24161
3
+ metadata.gz: 809092685f06ffac464aa29746797c1fec47f899
4
+ data.tar.gz: 37855a5237e91c0a0958ce89c7cd4772af85689a
5
5
  SHA512:
6
- metadata.gz: 38d485231332fdb6d4be36a5a12a20eef21d0c4cbbfdb9077c2a5454998b36ed4c1ff4cfd522b0e91bb5bb3f97fd118f8df47ff1a20c42d85f2fdd452bd364ab
7
- data.tar.gz: 1e52529cd706d22621e6ef6d50fe2605f727d92c6d8b643ba17224745a40c4e6b0b4f4b448b2e9b83cf5e7d80353278ea55516c8b0a1d039699a2cce28505e31
6
+ metadata.gz: c818eacf91c5364efe0df64de0ee36b8dacaab2ed7df2594265fac8bdc29f02d5f0a72fa82131f46324332c7a84d170e260cba6fb91cea378b70e91963132b2e
7
+ data.tar.gz: eb0806e2ad07292ef47a363fd212c5b41f16b3f51dbf4d7a4957e51438351eef4c4c9bd06ede20042395ddd13bbb04edd1dfe578652212c2f1adf839a346071b
data/.gitignore CHANGED
@@ -34,6 +34,4 @@ spec/dummy/tmp/
34
34
  Gemfile.lock
35
35
  Gemfile.local
36
36
  .rspec
37
- *.gem
38
-
39
- tmp/
37
+ *.gem
data/.hound.yml ADDED
@@ -0,0 +1,12 @@
1
+ ruby:
2
+ enabled: true
3
+ config_file: .rubocop.yml
4
+
5
+ javascript:
6
+ enabled: false
7
+
8
+ coffeescript:
9
+ enabled: false
10
+
11
+ sass:
12
+ enabled: false
data/.rubocop.yml CHANGED
@@ -1,19 +1,15 @@
1
1
  AllCops:
2
+ # Include gemspec and Rakefile
2
3
  Include:
3
4
  - 'lib/**/*.rb'
4
5
  - 'lib/**/*.rake'
5
6
  - 'spec/**/*.rb'
6
- - 'Gemfile'
7
- - 'Rakefile'
8
7
  Exclude:
9
8
  - 'bin/**/*'
10
9
  - 'spec/dummy/**/*'
11
- - 'tmp/**/*'
12
- - 'gemfiles/vendor/**/*'
13
- - 'vendor/**/*'
10
+ RunRailsCops: true
14
11
  DisplayCopNames: true
15
12
  StyleGuideCopsOnly: false
16
- TargetRubyVersion: 2.3
17
13
 
18
14
  Style/Documentation:
19
15
  Exclude:
@@ -30,9 +26,11 @@ Metrics/MethodLength:
30
26
  Exclude:
31
27
  - 'spec/**/*.rb'
32
28
 
33
- Metrics/BlockLength:
34
- Exclude:
35
- - 'spec/**/*.rb'
36
-
37
29
  Metrics/LineLength:
38
30
  Max: 100
31
+
32
+ Rails/Date:
33
+ Enabled: false
34
+
35
+ Rails/TimeZone:
36
+ Enabled: false
data/.travis.yml CHANGED
@@ -1,9 +1,6 @@
1
1
  language: ruby
2
2
  cache: bundler
3
3
 
4
- dist: trusty
5
- sudo: false
6
-
7
4
  notifications:
8
5
  email: false
9
6
 
@@ -13,14 +10,8 @@ before_install:
13
10
 
14
11
  matrix:
15
12
  include:
16
- - rvm: ruby-head
17
- gemfile: gemfiles/railsmaster.gemfile
18
- - rvm: 2.4.1
19
- gemfile: gemfiles/rails5.gemfile
20
13
  - rvm: 2.3.1
21
14
  gemfile: gemfiles/rails42.gemfile
22
- - rvm: 2.2.3
23
- gemfile: gemfiles/rails42.gemfile
24
- allow_failures:
25
- - rvm: ruby-head
26
- gemfile: gemfiles/railsmaster.gemfile
15
+
16
+ - rvm: 2.4.0
17
+ gemfile: gemfiles/rails5.gemfile
data/Gemfile CHANGED
@@ -1,5 +1,3 @@
1
- # frozen_string_literal: true
2
-
3
1
  source 'https://rubygems.org'
4
2
 
5
3
  # Specify your gem's dependencies in anyway_config.gemspec
@@ -9,7 +7,7 @@ gemspec
9
7
  local_gemfile = "#{File.dirname(__FILE__)}/Gemfile.local"
10
8
 
11
9
  if File.exist?(local_gemfile)
12
- eval(File.read(local_gemfile)) # rubocop:disable Security/Eval
10
+ eval(File.read(local_gemfile)) # rubocop:disable Lint/Eval
13
11
  else
14
12
  gem 'rails', '~> 5.0'
15
13
  end
data/LICENSE.txt CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2017 palkan
1
+ Copyright (c) 2015 palkan
2
2
 
3
3
  MIT License
4
4
 
data/README.md CHANGED
@@ -2,45 +2,34 @@
2
2
 
3
3
  # Anyway Config
4
4
 
5
- Rails/Ruby plugin/application configuration tool which allows you to load parameters from different sources: YAML, Rails secrets, environment.
5
+ Rails/Ruby plugin/application configuration using any source: YAML, _secrets_, environment.
6
6
 
7
- Apps using AnywayConfig:
8
7
 
8
+ Apps using Anyway Config:
9
9
  - [Influxer](https://github.com/palkan/influxer)
10
+ - [AnyCable](https://github.com/anycable/anycable).
10
11
 
11
- - [AnyCable](https://github.com/anycable/anycable)
12
+ ## Using with Gem
12
13
 
13
- - [and others](https://github.com/palkan/anyway_config/network/dependents).
14
-
15
- ## Installation
16
-
17
- 1) Adding to a gem:
14
+ Configure your gemspec:
18
15
 
19
16
  ```ruby
20
- # my-cool-gem.gemspec
21
- Gem::Specification.new do |spec|
17
+ Gem::Specification.new do |s|
22
18
  ...
23
- spec.add_dependancy "anyway_config", "~> 1.0"
19
+ s.add_dependancy 'anyway_config', "~>0.5"
24
20
  ...
25
21
  end
26
22
  ```
27
23
 
28
- 2) Adding to your project:
24
+ And then execute:
29
25
 
30
- ```ruby
31
- # Gemfile
32
- gem "anyway_config", "~> 1.0"
33
- ```
26
+ $ bundle
34
27
 
35
- 3) Install globally:
28
+ Or install it yourself as:
36
29
 
37
- ```sh
38
- $ gem install anyway_config
39
- ```
30
+ $ gem install anyway_config
40
31
 
41
- ## Usage
42
-
43
- ### Pre-defined configuration
32
+ ### Usage
44
33
 
45
34
  Create configuration class:
46
35
 
@@ -60,21 +49,11 @@ end
60
49
  attr_config :user, :password, host: 'localhost'
61
50
  ```
62
51
 
63
- Then create an instance of the config class and use it:
52
+ Your config will be filled up with values from `RAILS_ROOT/config/my_cool_gem.yml`, `Rails.application.secrets.my_cool_gem` (if using Rails) and `ENV['MYCOOLGEM_*']`.
64
53
 
65
- ```ruby
66
- module MyCoolGem
67
- def self.config
68
- @config ||= Config.new
69
- end
70
- end
71
-
72
- MyCoolGem.config.user #=> 'root'
73
- ```
74
-
75
- #### Customize name
54
+ ### Customize name
76
55
 
77
- By default, AnywayConfig uses the namespace (the outer module name) as the config name, but you can set it manually:
56
+ If you want to load config params from, for example, "cool.yml" (secrets, env), just add one line:
78
57
 
79
58
  ```ruby
80
59
  module MyCoolGem
@@ -85,41 +64,30 @@ module MyCoolGem
85
64
  end
86
65
  ```
87
66
 
88
- ### Dynamic configuration
89
-
90
- You can also create configuration objects without pre-defined schema (just like `Rails.application.config_for` but more [powerful](#railsapplicationconfig_for-vs-anywayconfigfor)):
91
-
92
- ```ruby
93
- # load data from config/my_app.yml, secrets.my_app (if using Rails), ENV["MYAPP_*"]
94
- config = Anyway::Config.for(:my_app)
95
- ```
96
-
97
- ### Using with Rails
98
-
99
- Your config will be filled up with values from the following sources (ordered by priority from low to high):
100
-
101
- - `RAILS_ROOT/config/my_cool_gem.yml` (for the current `RAILS_ENV`, supports `ERB`)
67
+ ### Config clear and reload
102
68
 
103
- - `Rails.application.secrets.my_cool_gem`
69
+ You can use `clear` and `reload` functions on your config (which do exactly what they state).
104
70
 
105
- - `ENV['MYCOOLGEM_*']`.
106
71
 
107
- ### Using with Ruby
72
+ ## Using with Rails app
108
73
 
109
- By default AnywayConfig is looking for a config YAML at `./config/<config-name>.yml`. You can override this setting
110
- through special environment variable – 'MYGEM_CONF' – containing the path to the YAML file.
74
+ In your Gemfile
111
75
 
112
- Environmental variables work the same way as with Rails.
76
+ ```ruby
77
+ require 'anyway_config', "~>0.5", require: 'anyway'
78
+ ```
113
79
 
80
+ In your code
114
81
 
115
- ### Config clear and reload
82
+ ```ruby
116
83
 
117
- There are `#clear` and `#reload` functions on your config (which do exactly what they state).
84
+ config = Anyway::Config.for(:my_app) # load data from config/my_app.yml, secrets.my_app, ENV["MYAPP_*"]
118
85
 
86
+ ```
119
87
 
120
88
  ## `Rails.application.config_for` vs `Anyway::Config.for`
121
89
 
122
- Rails 4.2 introduced new feature: `Rails.application.config_for`. It looks very similar to
90
+ Rails 4.2 introduces new feature: `Rails.application.config_for`. It looks very similar to
123
91
  `Anyway::Config.for`, but there are some differences:
124
92
 
125
93
  | Feature | Rails | Anyway |
@@ -128,33 +96,26 @@ Rails 4.2 introduced new feature: `Rails.application.config_for`. It looks very
128
96
  | load data from `secrets` | no | yes |
129
97
  | load data from environment | no | yes |
130
98
  | return Hash with indifferent access | no | yes |
131
- | support ERB within `config/app.yml` | yes | yes* |
99
+ | support ERB within `config/app.yml` | yes | no |
132
100
  | raise errors if file doesn't exist | yes | no |
133
101
 
134
- <sub><sup>*</sup>make sure that ERB is loaded</sub>
135
-
136
- But the main advantage of Anyway::Config is that it can be used [without Rails](#using-with-ruby)!)
102
+ But the main advantage of Anyway::Config is that it can be used [without Rails](#using-without-rails)!
137
103
 
138
104
  ## How to set env vars
139
105
 
140
- Environmental variables for your config should start with your config name, uppercased and underscore-free.
141
-
142
- For example, if your module is called "MyCoolGem" then the env var "MYCOOLGEM_PASSWORD" is used as `config.password`.
106
+ Environmental variables for your config should start with your module name (or config name if any), uppercased and underscore-free.
143
107
 
144
- Environment variables are type-casted (case-insensitive).
108
+ For example, if your module is called "MyCoolGem" then your env var "MYCOOLGEM_PASSWORD" is used as `config.password`.
145
109
 
110
+ Environment variables are type-casted (case-insensitive).
146
111
  Examples:
112
+ - "True", "T" and "yes" to `true`;
113
+ - "False", "f" and "no" to `false`;
114
+ - "nil" and "null" to `nil` (do you really need it?);
115
+ - "123" to 123 and "3.14" to 3.14.
147
116
 
148
- - `"True"`, `"t"` and `"yes"` to `true`;
149
-
150
- - `"False"`, `"f"` and `"no"` to `false`;
151
-
152
- - `"nil"` and `"null"` to `nil` (do you really need it?);
153
-
154
- - `"123"` to 123 and `"3.14"` to 3.14.
155
-
156
- *Anyway Config* supports nested (_hashed_) env variables. Just separate keys with double-underscore.
157
- For example, "MYCOOLGEM_OPTIONS__VERBOSE" is parsed as `config.options.verbose`.
117
+ *Anyway Config* supports nested (_hashed_) environmental variables. Just separate keys with double-underscore.
118
+ For example, "MYCOOLGEM_OPTIONS__VERBOSE" is transformed to `config.options.verbose`.
158
119
 
159
120
  Array values are also supported:
160
121
 
@@ -163,16 +124,21 @@ Array values are also supported:
163
124
  config.ids #=> [1,2,3]
164
125
  ```
165
126
 
166
- If you want to provide a text-like env variable which contains commas then wrap it into quotes:
127
+ If you want to provide text-like env variable which contain commas then wrap it into quotes:
167
128
 
168
129
  ```ruby
169
130
  MYCOOLGEM="Nif-Nif, Naf-Naf and Nouf-Nouf"
170
131
  ```
171
132
 
133
+ ## Using without Rails
134
+
135
+ AnywayConfig can be used without Rails too.
136
+ 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).
137
+
172
138
  ## Contributing
173
139
 
174
140
  1. Fork it
175
141
  2. Create your feature branch (`git checkout -b my-new-feature`)
176
142
  3. Commit your changes (`git commit -am 'Add some feature'`)
177
143
  4. Push to the branch (`git push origin my-new-feature`)
178
- 5. Create a new Pull Request
144
+ 5. Create a new Pull Request
data/Rakefile CHANGED
@@ -1,10 +1,6 @@
1
- # frozen_string_literal: true
2
-
3
1
  require "bundler/gem_tasks"
4
- require 'rspec/core/rake_task'
5
- require "rubocop/rake_task"
6
2
 
7
- RuboCop::RakeTask.new
3
+ require 'rspec/core/rake_task'
8
4
 
9
5
  task(:spec).clear
10
6
  desc "Run specs with Rails app"
@@ -19,5 +15,5 @@ RSpec::Core::RakeTask.new("spec:norails") do |task|
19
15
  task.verbose = false
20
16
  end
21
17
 
22
- desc "Run the all specs and linters"
23
- task default: %w[spec:norails spec rubocop]
18
+ desc "Run the all specs"
19
+ task default: %w(spec:norails spec)
@@ -1,6 +1,4 @@
1
1
  # coding: utf-8
2
- # frozen_string_literal: true
3
-
4
2
  lib = File.expand_path('../lib', __FILE__)
5
3
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
6
4
  require 'anyway/version'
@@ -8,23 +6,17 @@ require 'anyway/version'
8
6
  Gem::Specification.new do |s|
9
7
  s.name = "anyway_config"
10
8
  s.version = Anyway::VERSION
11
- s.authors = ["Vladimir Dementyev"]
9
+ s.authors = ["Vlad Dem"]
12
10
  s.email = ["dementiev.vm@gmail.com"]
13
11
  s.homepage = "http://github.com/palkan/anyway_config"
14
- s.summary = "Configuration DSL for Ruby libraries and applications"
15
- s.description = %{
16
- Configuration DSL for Ruby libraries and applications.
17
-
18
- Allows you to easily follow the twevle factor application principles (https://12factor.net/config).
19
- }
20
-
21
- s.license = "MIT"
12
+ s.summary = "Configuration for Ruby plugins and applications"
13
+ s.description = "Configuration for Ruby plugins and applications"
14
+ s.license = "MIT"
22
15
 
23
- s.files = `git ls-files`.split($INPUT_RECORD_SEPARATOR)
16
+ s.files = `git ls-files`.split($/)
24
17
  s.require_paths = ["lib"]
25
18
  s.required_ruby_version = '>= 2'
26
19
 
27
20
  s.add_development_dependency "simplecov", ">= 0.3.8"
28
21
  s.add_development_dependency "rspec", "~> 3.5.0"
29
- s.add_development_dependency "rubocop", "~> 0.49"
30
22
  end
data/lib/anyway.rb CHANGED
@@ -1,5 +1,3 @@
1
- # frozen_string_literal: true
2
-
3
1
  module Anyway # :nodoc:
4
2
  require "anyway/version"
5
3
  require "anyway/config"
data/lib/anyway/config.rb CHANGED
@@ -1,10 +1,8 @@
1
- # frozen_string_literal: true
2
-
3
1
  require 'anyway/ext/class'
4
2
  require 'anyway/ext/deep_dup'
5
3
  require 'anyway/ext/hash'
6
4
 
7
- module Anyway # :nodoc:
5
+ module Anyway
8
6
  using Anyway::Ext::Class
9
7
  using Anyway::Ext::DeepDup
10
8
  using Anyway::Ext::Hash
@@ -75,16 +73,16 @@ module Anyway # :nodoc:
75
73
  end
76
74
 
77
75
  def load_from_file(config)
78
- config_path = Anyway.env.fetch(config_name).delete('conf') ||
79
- "./config/#{config_name}.yml"
76
+ config_path = (Anyway.env.send(config_name) || {}).delete('conf')
80
77
  if config_path && File.file?(config_path)
81
- config.deep_merge!(parse_yml(config_path) || {})
78
+ require 'yaml'
79
+ config.deep_merge!(YAML.load_file(config_path) || {})
82
80
  end
83
81
  config
84
82
  end
85
83
 
86
84
  def load_from_env(config)
87
- config.deep_merge!(Anyway.env.fetch(config_name))
85
+ config.deep_merge!(Anyway.env.send(config_name) || {})
88
86
  config
89
87
  end
90
88
 
@@ -93,14 +91,5 @@ module Anyway # :nodoc:
93
91
  def set_value(key, val)
94
92
  send("#{key}=", val) if respond_to?(key)
95
93
  end
96
-
97
- def parse_yml(path)
98
- require 'yaml'
99
- if defined?(ERB)
100
- YAML.safe_load(ERB.new(File.read(path)).result)
101
- else
102
- YAML.load_file(path)
103
- end
104
- end
105
94
  end
106
95
  end
data/lib/anyway/env.rb CHANGED
@@ -1,5 +1,3 @@
1
- # frozen_string_literal: true
2
-
3
1
  module Anyway
4
2
  # Parses environment variables and provides
5
3
  # method-like access
@@ -11,29 +9,34 @@ module Anyway
11
9
 
12
10
  def initialize
13
11
  @data = {}
12
+ load
13
+ end
14
+
15
+ def reload
16
+ clear
17
+ load
18
+ self
14
19
  end
15
20
 
16
21
  def clear
17
22
  @data.clear
23
+ self
18
24
  end
19
25
 
20
- def fetch(config_name)
21
- @data[config_name] ||= parse_env(config_name)
26
+ def method_missing(method_name, *args, &_block)
27
+ method_name = method_name.to_s.gsub(/\_/, '')
28
+ return @data[method_name] if args.empty? && @data.key?(method_name)
22
29
  end
23
30
 
24
31
  private
25
32
 
26
- def parse_env(config_name)
27
- config_env_name = config_name.to_s.delete("_")
28
- config_env_name.upcase!
29
- data = {}
33
+ def load
30
34
  ENV.each_pair do |key, val|
31
- if key.start_with?(config_env_name)
32
- _mod, path = extract_module_path(key)
33
- set_by_path(data, path, serialize_val(val))
35
+ if config_key?(key)
36
+ mod, path = extract_module_path(key)
37
+ set_by_path(get_hash(@data, mod), path, serialize_val(val))
34
38
  end
35
39
  end
36
- data
37
40
  end
38
41
 
39
42
  def config_key?(key)
@@ -58,8 +61,6 @@ module Anyway
58
61
  (from[name] ||= {})
59
62
  end
60
63
 
61
- # rubocop:disable Metrics/MethodLength
62
- # rubocop:disable Metrics/CyclomaticComplexity
63
64
  def serialize_val(value)
64
65
  case value
65
66
  when ARRAY_RXP
@@ -80,7 +81,5 @@ module Anyway
80
81
  value
81
82
  end
82
83
  end
83
- # rubocop:enable Metrics/MethodLength
84
- # rubocop:enable Metrics/CyclomaticComplexity
85
84
  end
86
85
  end
@@ -1,5 +1,3 @@
1
- # frozen_string_literal: true
2
-
3
1
  module Anyway
4
2
  module Ext
5
3
  # Extend String through refinements
@@ -8,7 +6,7 @@ module Anyway
8
6
  def underscore_name
9
7
  return unless name
10
8
  word = name[/^(\w+)/]
11
- word.gsub!(/([A-Z\d]+)([A-Z][a-z])/, '\1_\2')
9
+ word.gsub!(/([A-Z\d]+)([A-Z][a-z])/,'\1_\2')
12
10
  word.downcase!
13
11
  word
14
12
  end
@@ -1,5 +1,3 @@
1
- # frozen_string_literal: true
2
-
3
1
  module Anyway
4
2
  module Ext
5
3
  # Extend Object through refinements
@@ -8,11 +6,7 @@ module Anyway
8
6
  # Based on ActiveSupport http://api.rubyonrails.org/classes/Hash.html#method-i-deep_dup
9
7
  def deep_dup
10
8
  each_with_object(dup) do |(key, value), hash|
11
- hash[key] = if value.is_a?(::Hash) || value.is_a?(::Array)
12
- value.deep_dup
13
- else
14
- value
15
- end
9
+ hash[key] = value.respond_to?(:deep_dup) ? value.deep_dup : value
16
10
  end
17
11
  end
18
12
  end
@@ -20,13 +14,7 @@ module Anyway
20
14
  refine ::Array do
21
15
  # From ActiveSupport http://api.rubyonrails.org/classes/Array.html#method-i-deep_dup
22
16
  def deep_dup
23
- map do |value|
24
- if value.is_a?(::Hash) || value.is_a?(::Array)
25
- value.deep_dup
26
- else
27
- value
28
- end
29
- end
17
+ map { |el| el.respond_to?(:deep_dup) ? el.deep_dup : el }
30
18
  end
31
19
  end
32
20
  end
@@ -1,5 +1,3 @@
1
- # frozen_string_literal: true
2
-
3
1
  module Anyway
4
2
  module Ext
5
3
  # Extend Hash through refinements
@@ -22,7 +20,7 @@ module Anyway
22
20
  end
23
21
 
24
22
  def stringify_keys!
25
- keys.each do |key|
23
+ self.keys.each do |key|
26
24
  value = delete(key)
27
25
  value.stringify_keys! if value.is_a?(::Hash)
28
26
  self[key.to_s] = value
@@ -1,5 +1,3 @@
1
- # frozen_string_literal: true
2
-
3
1
  module Anyway
4
2
  class Config # :nodoc:
5
3
  class << self
@@ -19,7 +17,8 @@ module Anyway
19
17
  def load_from_file(config)
20
18
  config_path = Rails.root.join("config", "#{@config_name}.yml")
21
19
  if File.file? config_path
22
- config.deep_merge!(parse_yml(config_path)[Rails.env] || {})
20
+ require 'yaml'
21
+ config.deep_merge!(YAML.load_file(config_path)[Rails.env] || {})
23
22
  end
24
23
  config
25
24
  end
@@ -1,5 +1,3 @@
1
- # frozen_string_literal: true
2
-
3
1
  module Anyway # :nodoc:
4
- VERSION = "0.5.1.rc1"
2
+ VERSION = "0.5.1"
5
3
  end
data/spec/config_spec.rb CHANGED
@@ -1,5 +1,3 @@
1
- # frozen_string_literal: true
2
-
3
1
  require 'spec_helper'
4
2
 
5
3
  describe Anyway::Config do
@@ -7,10 +5,6 @@ describe Anyway::Config do
7
5
  let(:test_conf) { Anyway::TestConfig.new }
8
6
 
9
7
  describe "config with name" do
10
- before(:each) do
11
- ENV.delete_if { |var| var =~ /^(cool|anyway)_/i }
12
- end
13
-
14
8
  specify { expect(CoolConfig.config_name).to eq "cool" }
15
9
 
16
10
  describe "defaults" do
@@ -27,20 +21,21 @@ describe Anyway::Config do
27
21
  end
28
22
 
29
23
  describe "load from files" do
30
- it "set defaults" do
24
+ it "should set defauls" do
31
25
  expect(conf.port).to eq 8080
32
26
  end
33
27
 
34
- it "load config from YAML" do
28
+ it "should load config from YAML" do
35
29
  expect(conf.host).to eq "test.host"
36
30
  end
37
31
 
38
32
  if Rails.application.respond_to?(:secrets)
39
- it "load config from secrets" do
33
+ it "should load config from secrets" do
40
34
  expect(conf.user[:name]).to eq "test"
35
+ expect(conf.user[:password]).to eq "test"
41
36
  end
42
37
  else
43
- it "load config from file if no secrets" do
38
+ it "should load config from file if no secrets" do
44
39
  expect(conf.user[:name]).to eq "root"
45
40
  expect(conf.user[:password]).to eq "root"
46
41
  end
@@ -48,18 +43,14 @@ describe Anyway::Config do
48
43
  end
49
44
 
50
45
  describe "load from env" do
51
- it "work" do
46
+ after(:each) { Anyway.env.clear }
47
+ it "should work" do
52
48
  ENV['COOL_PORT'] = '80'
53
49
  ENV['COOL_USER__NAME'] = 'john'
54
- Anyway.env.clear
50
+ Anyway.env.reload
55
51
  expect(conf.port).to eq 80
56
52
  expect(conf.user[:name]).to eq 'john'
57
53
  end
58
-
59
- it "handle ENV in YML thru ERB" do
60
- ENV['ANYWAY_SECRET_PASSWORD'] = 'my_pass'
61
- expect(conf.user[:password]).to eq 'my_pass'
62
- end
63
54
  end
64
55
 
65
56
  describe "clear" do
@@ -75,11 +66,12 @@ describe Anyway::Config do
75
66
  end
76
67
 
77
68
  describe "reload" do
69
+ after(:each) { Anyway.env.clear }
78
70
  it do
79
71
  expect(conf.port).to eq 8080
80
72
  ENV['COOL_PORT'] = '80'
81
73
  ENV['COOL_USER__NAME'] = 'john'
82
- Anyway.env.clear
74
+ Anyway.env.reload
83
75
  conf.reload
84
76
  expect(conf.port).to eq 80
85
77
  expect(conf.user[:name]).to eq 'john'
@@ -88,14 +80,11 @@ describe Anyway::Config do
88
80
  end
89
81
 
90
82
  describe "config for name" do
91
- before(:each) do
92
- ENV.delete_if { |var| var =~ /^myapp_/i }
93
- end
94
-
95
- it "load data by config name", :aggregate_failures do
83
+ after(:each) { Anyway.env.clear }
84
+ it "should load data by config name", :aggregate_failures do
96
85
  ENV['MYAPP_TEST'] = '1'
97
86
  ENV['MYAPP_NAME'] = 'my_app'
98
- Anyway.env.clear
87
+ Anyway.env.reload
99
88
  data = Anyway::Config.for(:my_app)
100
89
  expect(data[:test]).to eq 1
101
90
  expect(data[:name]).to eq 'my_app'
@@ -1,12 +1,11 @@
1
- # frozen_string_literal: true
2
-
3
1
  require 'spec_norails_helper'
4
2
 
5
3
  describe Anyway::Config do
6
4
  let(:conf) { Anyway::TestConfig.new }
7
5
 
8
6
  describe "config without Rails" do
9
- before(:each) do
7
+ after(:each) do
8
+ Anyway.env.clear
10
9
  ENV.delete_if { |var| var =~ /^anyway_/i }
11
10
  end
12
11
 
@@ -26,27 +25,26 @@ describe Anyway::Config do
26
25
  ENV['ANYWAY_LOG__FORMAT__COLOR'] = 't'
27
26
  ENV['ANYWAY_LOG_LEVELS'] = 'debug,warning,info'
28
27
 
29
- Anyway.env.clear
28
+ Anyway.env.reload
30
29
  expect(conf.api['key']).to eq "test1"
31
30
  expect(conf.api['endpoint']).to eq "localhost"
32
31
  expect(conf.test).to eq "test"
33
32
  expect(conf.log['format']['color']).to eq true
34
- expect(conf.log_levels).to eq(%w[debug warning info])
33
+ expect(conf.log_levels).to eq(%w(debug warning info))
35
34
  end
36
35
 
37
36
  it "reloads config", :aggregate_failures do
38
- ENV['ANYWAY_CONF'] = File.join(File.dirname(__FILE__), "anyway.yml")
39
-
40
37
  expect(conf.api['key']).to eq ""
41
- expect(conf.api['endpoint']).to eq 'localhost'
38
+ expect(conf.api['endpoint']).to be_nil
42
39
  expect(conf.test).to be_nil
43
40
  expect(conf.log['format']['color']).to eq false
44
41
 
42
+ ENV['ANYWAY_CONF'] = File.join(File.dirname(__FILE__), "anyway.yml")
45
43
  ENV['ANYWAY_API__KEY'] = 'test1'
46
44
  ENV['ANYWAY_API__SSL'] = 'yes'
47
45
  ENV['ANYWAY_TEST'] = 'test'
48
46
  ENV['ANYWAY_LOG__FORMAT__COLOR'] = 't'
49
- Anyway.env.clear
47
+ Anyway.env.reload
50
48
 
51
49
  conf.reload
52
50
  expect(conf.api['key']).to eq "test1"
@@ -63,24 +61,5 @@ describe Anyway::Config do
63
61
 
64
62
  specify { expect(conf.config_name).to be_nil }
65
63
  end
66
-
67
- context "loading from default path" do
68
- let(:conf) { CoolConfig.new }
69
-
70
- before(:each) do
71
- ENV.delete_if { |var| var =~ /^cool_/i }
72
- end
73
-
74
- it "loads from ./config", :aggregate_failures do
75
- expect(conf.user).to eq("name" => "root", "password" => "root")
76
- expect(conf.host).to eq "test.host"
77
- expect(conf.port).to eq 9292
78
- end
79
-
80
- it "handle ENV in YML thru ERB" do
81
- ENV["ANYWAY_COOL_PORT"] = "1957"
82
- expect(conf.port).to eq 1957
83
- end
84
- end
85
64
  end
86
65
  end
data/spec/dummy.yml ADDED
File without changes
@@ -2,4 +2,4 @@ test:
2
2
  host: "test.host"
3
3
  user:
4
4
  name: "root"
5
- password: <%= ENV['ANYWAY_SECRET_PASSWORD'] || "root" %>
5
+ password: "root"
@@ -18,6 +18,7 @@ test:
18
18
  cool:
19
19
  user:
20
20
  name: test
21
+ password: test
21
22
  bullshit: 'mooo'
22
23
  my_app:
23
24
  name: 'app'
data/spec/env_spec.rb CHANGED
@@ -1,36 +1,32 @@
1
- # frozen_string_literal: true
2
-
3
1
  require 'spec_helper'
4
2
 
5
3
  describe Anyway::Env do
6
- let(:env) { Anyway.env }
4
+ let(:env) { Anyway.env.reload }
7
5
 
8
- it "loads simple key/values by module", :aggregate_failures do
6
+ it "should load simple key/values by module", :aggregate_failures do
9
7
  ENV['TESTO_KEY'] = 'a'
10
8
  ENV['MYTEST_KEY'] = 'b'
11
- expect(env.fetch('testo')['key']).to eq 'a'
12
- expect(env.fetch('my_test')['key']).to eq 'b'
9
+ expect(env.testo['key']).to eq 'a'
10
+ expect(env.my_test['key']).to eq 'b'
13
11
  end
14
12
 
15
- it "loads hash values", :aggregate_failures do
13
+ it "should load hash values", :aggregate_failures do
16
14
  ENV['TESTO_DATA__ID'] = '1'
17
15
  ENV['TESTO_DATA__META__NAME'] = 'meta'
18
16
  ENV['TESTO_DATA__META__VAL'] = 'true'
19
- testo_config = env.fetch('testo')
20
- expect(testo_config['data']['id']).to eq 1
21
- expect(testo_config['data']['meta']['name']).to eq 'meta'
22
- expect(testo_config['data']['meta']['val']).to be_truthy
17
+ expect(env.testo['data']['id']).to eq 1
18
+ expect(env.testo['data']['meta']['name']).to eq 'meta'
19
+ expect(env.testo['data']['meta']['val']).to be_truthy
23
20
  end
24
21
 
25
- it "loads array values", :aggregate_failures do
22
+ it "should load array values", :aggregate_failures do
26
23
  ENV['TESTO_DATA__IDS'] = '1,2, 3'
27
24
  ENV['TESTO_DATA__META__NAMES'] = 'meta, kotleta'
28
25
  ENV['TESTO_DATA__META__SIZE'] = '2'
29
26
  ENV['TESTO_DATA__TEXT'] = '"C\'mon, everybody"'
30
- testo_config = env.fetch('testo')
31
- expect(testo_config['data']['ids']).to include(1, 2, 3)
32
- expect(testo_config['data']['meta']['names']).to include('meta', 'kotleta')
33
- expect(testo_config['data']['meta']['size']).to eq 2
34
- expect(testo_config['data']['text']).to eq "C'mon, everybody"
27
+ expect(env.testo['data']['ids']).to include(1, 2, 3)
28
+ expect(env.testo['data']['meta']['names']).to include('meta', 'kotleta')
29
+ expect(env.testo['data']['meta']['size']).to eq 2
30
+ expect(env.testo['data']['text']).to eq "C'mon, everybody"
35
31
  end
36
32
  end
data/spec/spec_helper.rb CHANGED
@@ -1,17 +1,15 @@
1
- # frozen_string_literal: true
2
-
3
1
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
4
2
  $LOAD_PATH.unshift(File.dirname(__FILE__))
5
3
 
6
4
  begin
7
5
  require "pry-byebug"
8
- rescue LoadError # rubocop:disable all
6
+ rescue LoadError
9
7
  end
10
8
 
11
9
  ENV["RAILS_ENV"] = 'test'
12
10
 
13
11
  require File.expand_path("../dummy/config/environment", __FILE__)
14
- require 'anyway_config'
12
+ require 'anyway'
15
13
 
16
14
  Rails.application.eager_load!
17
15
 
@@ -19,13 +17,4 @@ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
19
17
 
20
18
  RSpec.configure do |config|
21
19
  config.mock_with :rspec
22
-
23
- config.example_status_persistence_file_path = "tmp/rspec_examples.txt"
24
- config.filter_run :focus
25
- config.run_all_when_everything_filtered = true
26
-
27
- config.order = :random
28
- Kernel.srand config.seed
29
-
30
- config.before(:each) { Anyway.env.clear }
31
20
  end
@@ -1,26 +1,15 @@
1
- # frozen_string_literal: true
2
-
3
1
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
4
2
  $LOAD_PATH.unshift(File.dirname(__FILE__))
5
3
 
6
4
  begin
7
5
  require "pry-byebug"
8
- rescue LoadError # rubocop:disable all
6
+ rescue LoadError
9
7
  end
10
8
 
11
- require 'anyway_config'
12
- require 'erb'
9
+ require 'anyway'
13
10
 
14
11
  Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
15
12
 
16
13
  RSpec.configure do |config|
17
14
  config.mock_with :rspec
18
-
19
- config.filter_run :focus
20
- config.run_all_when_everything_filtered = true
21
-
22
- config.order = :random
23
- Kernel.srand config.seed
24
-
25
- config.before(:each) { Anyway.env.clear }
26
15
  end
@@ -1,5 +1,3 @@
1
- # frozen_string_literal: true
2
-
3
1
  class CoolConfig < Anyway::Config # :nodoc:
4
2
  config_name :cool
5
3
  attr_config :meta,
@@ -1,8 +1,6 @@
1
- # frozen_string_literal: true
2
-
3
1
  module Anyway
4
2
  class TestConfig < Anyway::Config # :nodoc:
5
- attr_config :test,
3
+ attr_config :test,
6
4
  api: { key: '' },
7
5
  log: {
8
6
  format: {
@@ -11,6 +9,6 @@ module Anyway
11
9
  },
12
10
  level: :info
13
11
  },
14
- log_levels: %i[info fatal]
12
+ log_levels: [:info, :fatal]
15
13
  end
16
14
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: anyway_config
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.1.rc1
4
+ version: 0.5.1
5
5
  platform: ruby
6
6
  authors:
7
- - Vladimir Dementyev
7
+ - Vlad Dem
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-06-20 00:00:00.000000000 Z
11
+ date: 2017-01-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: simplecov
@@ -38,23 +38,7 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: 3.5.0
41
- - !ruby/object:Gem::Dependency
42
- name: rubocop
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - "~>"
46
- - !ruby/object:Gem::Version
47
- version: '0.49'
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - "~>"
53
- - !ruby/object:Gem::Version
54
- version: '0.49'
55
- description: "\n Configuration DSL for Ruby libraries and applications.\n\n Allows
56
- you to easily follow the twevle factor application principles (https://12factor.net/config).\n
57
- \ "
41
+ description: Configuration for Ruby plugins and applications
58
42
  email:
59
43
  - dementiev.vm@gmail.com
60
44
  executables: []
@@ -62,18 +46,16 @@ extensions: []
62
46
  extra_rdoc_files: []
63
47
  files:
64
48
  - ".gitignore"
49
+ - ".hound.yml"
65
50
  - ".rubocop.yml"
66
51
  - ".travis.yml"
67
- - CHANGELOG.md
68
52
  - Gemfile
69
53
  - LICENSE.txt
70
54
  - README.md
71
55
  - Rakefile
72
56
  - anyway_config.gemspec
73
- - config/cool.yml
74
57
  - gemfiles/rails42.gemfile
75
58
  - gemfiles/rails5.gemfile
76
- - gemfiles/railsmaster.gemfile
77
59
  - lib/anyway.rb
78
60
  - lib/anyway/config.rb
79
61
  - lib/anyway/env.rb
@@ -82,10 +64,10 @@ files:
82
64
  - lib/anyway/ext/hash.rb
83
65
  - lib/anyway/rails/config.rb
84
66
  - lib/anyway/version.rb
85
- - lib/anyway_config.rb
86
67
  - spec/anyway.yml
87
68
  - spec/config_spec.rb
88
69
  - spec/config_spec_norails.rb
70
+ - spec/dummy.yml
89
71
  - spec/dummy/config.ru
90
72
  - spec/dummy/config/application.rb
91
73
  - spec/dummy/config/boot.rb
@@ -96,7 +78,6 @@ files:
96
78
  - spec/dummy/config/routes.rb
97
79
  - spec/dummy/config/secrets.yml
98
80
  - spec/env_spec.rb
99
- - spec/ext/deep_dup_spec.rb
100
81
  - spec/spec_helper.rb
101
82
  - spec/spec_norails_helper.rb
102
83
  - spec/support/cool_config.rb
@@ -116,13 +97,13 @@ required_ruby_version: !ruby/object:Gem::Requirement
116
97
  version: '2'
117
98
  required_rubygems_version: !ruby/object:Gem::Requirement
118
99
  requirements:
119
- - - ">"
100
+ - - ">="
120
101
  - !ruby/object:Gem::Version
121
- version: 1.3.1
102
+ version: '0'
122
103
  requirements: []
123
104
  rubyforge_project:
124
105
  rubygems_version: 2.6.4
125
106
  signing_key:
126
107
  specification_version: 4
127
- summary: Configuration DSL for Ruby libraries and applications
108
+ summary: Configuration for Ruby plugins and applications
128
109
  test_files: []
data/CHANGELOG.md DELETED
@@ -1,21 +0,0 @@
1
- # Change log
2
-
3
- ## 1.0.0 (2017-06-20)
4
-
5
- - Lazy load and parse ENV configurtaion (https://github.com/palkan/anyway_config/commit/5fe407c75fefec8994ca201ea7b4691b5ddd96e5). ([@palkan][])
6
-
7
- - Add support for ERB in YML configuration (https://github.com/palkan/anyway_config/commit/8d8a47dbda6858a43ff509aaa4cddf4f938dd660). ([@palkan][])
8
-
9
- ## 0.5.0 (2017-01-20)
10
-
11
- - Drop `active_support` dependency. ([@palkan][])
12
-
13
- Use custom refinements instead of requiring `active_support`.
14
-
15
- No we're dependency-free!
16
-
17
- ## 0.1.0 (2015-01-20)
18
-
19
- Initial version.
20
-
21
- [@palkan]: https://github.com/palkan
data/config/cool.yml DELETED
@@ -1,5 +0,0 @@
1
- host: "test.host"
2
- user:
3
- name: "root"
4
- password: "root"
5
- port: <%= ENV['ANYWAY_COOL_PORT'] || 9292 %>
@@ -1,6 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- gem 'arel', github: 'rails/arel'
4
- gem 'rails', github: 'rails/rails'
5
-
6
- gemspec path: '..'
data/lib/anyway_config.rb DELETED
@@ -1,3 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "anyway"
@@ -1,38 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
-
5
- describe Anyway::Ext::DeepDup do
6
- using Anyway::Ext::DeepDup
7
-
8
- it "duplicates nested arrays and hashes", :aggregate_failures do
9
- source = {
10
- a: 1,
11
- b: 'hello',
12
- c: {
13
- id: 1,
14
- list: [1, 2, { name: 'John' }]
15
- },
16
- d: [{ id: 1 }, { id: 2 }]
17
- }
18
-
19
- dup = source.deep_dup
20
-
21
- expect(dup[:a]).to eq 1
22
- expect(dup[:b]).to eq 'hello'
23
- expect(dup[:c]).to eq(
24
- id: 1,
25
- list: [1, 2, { name: 'John' }]
26
- )
27
- expect(dup[:d]).to eq(
28
- [{ id: 1 }, { id: 2 }]
29
- )
30
-
31
- expect(dup[:c]).not_to be_equal(source[:c])
32
- expect(dup[:c][:list]).not_to be_equal(source[:c][:list])
33
- expect(dup[:c][:list].last).not_to be_equal(source[:c][:list].last)
34
-
35
- expect(dup[:d].first).not_to be_equal(source[:d].first)
36
- expect(dup[:d].last).not_to be_equal(source[:d].last)
37
- end
38
- end