tamplier 0.0.1 → 0.1.0

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: fea1bfad7a66cbbf76e0750bb1dee17b250338ec
4
- data.tar.gz: 019c9084db0414d3b27631751c61b1b3e6398f7b
3
+ metadata.gz: c19c4b86a92337ec4c88daf48eac19b48f18ba0d
4
+ data.tar.gz: ae4d04d4295cbbe1574f375599939c7dbb6283c6
5
5
  SHA512:
6
- metadata.gz: dfaedf18b8a739b2c16e50bb73ea5bd021e2e4dba19524f42e710c46a47057dd3bf772df4a6cebf6a91e179df0c3fe07f0a8a069b7633d0ad25c9eb3d8761664
7
- data.tar.gz: a0d2dfc274ede643f08ebc8ff3419877d1053f98c10d795749fd2db421ac421ffcc0fd679c54699ded135bf4ce6c93c2f68357e46cc0e37737bd91893d3a1f4e
6
+ metadata.gz: 1c02be62ff4cb55581ab70ef4f3dff913c2a765bb263983b41e097ecd5ecafe61c533d67b96dc3233fb0381bdaa9ced476058ce22c6396774e445f5b1f621e11
7
+ data.tar.gz: 782e381c1d7ff8a869d30ea50fae8c0b4fd437c64a13b415dc1fd3c8e7d2da85063b091cd02384868efc8fadaa08d1e30595205923ec5b46a34ac311f2354d47
@@ -1,4 +1,8 @@
1
- require "tamplier/version"
1
+ require 'pathname'
2
+ require 'yaml'
2
3
 
3
- module Tamplier
4
- end
4
+ require 'tamplier/version'
5
+ require 'tamplier/exceptions/configuration_exception'
6
+ require 'tamplier/validator'
7
+
8
+ require 'tamplier/railtie' if defined?(Rails)
@@ -0,0 +1,2 @@
1
+ class ConfigurationException < RuntimeError
2
+ end
@@ -0,0 +1,7 @@
1
+ module Tamplier
2
+ class Railtie < Rails::Railtie
3
+ initializer('tamplier.initializer') do
4
+ Validator.new.ensure(Rails.root.join('config'), Rails.env)
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,33 @@
1
+ module Tamplier
2
+ class Validator
3
+ def ensure(root, environment = nil)
4
+ Pathname.glob(File.join(root, '*.yml.sample')).each do |sample_file|
5
+ config_file = sample_file.sub_ext('')
6
+ raise ConfigurationException.new("Configuration file #{config_file} does not exist, but sample file #{sample_file} does.") unless config_file.exist?
7
+
8
+ if environmental_file?(sample_file)
9
+ raise ConfigurationException.new("There is no #{environment} environment in the #{config_file} file.") unless YAML.load(config_file.read)[environment].present?
10
+ end
11
+
12
+ diff = environmental_file?(sample_file) ?
13
+ flat_keys(YAML.load(sample_file.read)['development']) - flat_keys(YAML.load(config_file.read)[environment]) :
14
+ flat_keys(YAML.load(sample_file.read)) - flat_keys(YAML.load(config_file.read))
15
+
16
+ raise ConfigurationException.new("Several keys #{diff.inspect} from #{sample_file} are not in #{config_file} file.") unless diff.empty?
17
+ end
18
+ end
19
+
20
+ private
21
+
22
+ def environmental_file?(file)
23
+ (YAML.load(file.read).keys & %w[development test]).present?
24
+ end
25
+
26
+ def flat_keys(hash, path = '')
27
+ return path unless hash.is_a?(Hash)
28
+ hash.map do |key, value|
29
+ flat_keys(value, "#{path}/#{key}")
30
+ end.flatten
31
+ end
32
+ end
33
+ end
@@ -1,3 +1,3 @@
1
1
  module Tamplier
2
- VERSION = "0.0.1"
2
+ VERSION = "0.1.0"
3
3
  end
@@ -0,0 +1,20 @@
1
+ ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../../../Gemfile', __FILE__)
2
+
3
+ require 'bundler/setup'
4
+
5
+ require 'rails'
6
+
7
+ Bundler.require(*Rails.groups)
8
+ require 'tamplier'
9
+
10
+ module Dummy
11
+ class Application < Rails::Application
12
+ end
13
+ end
14
+
15
+ Rails.application.configure do
16
+ config.eager_load = false
17
+ config.root = File.dirname(File.expand_path('../', __FILE__))
18
+ end
19
+
20
+ Rails.application.initialize!
@@ -0,0 +1 @@
1
+ test.yml.sample
File without changes
@@ -0,0 +1,2 @@
1
+ development:
2
+ key: value
@@ -0,0 +1,2 @@
1
+ development:
2
+ key: value
@@ -0,0 +1,2 @@
1
+ production:
2
+ exist: value
@@ -0,0 +1,3 @@
1
+ development:
2
+ exist: value
3
+ not_exist: value
@@ -0,0 +1,4 @@
1
+ production:
2
+ first:
3
+ second:
4
+ third: value
@@ -0,0 +1,5 @@
1
+ development:
2
+ first:
3
+ second:
4
+ third: value
5
+ fourth: value
@@ -0,0 +1 @@
1
+ invalid.yml.sample
@@ -0,0 +1 @@
1
+ valid.yml
@@ -0,0 +1 @@
1
+ valid.yml.sample
@@ -0,0 +1,6 @@
1
+ first:
2
+ second_misspell:
3
+ third:
4
+ - 1
5
+ - 2
6
+ fourth: value
@@ -0,0 +1,6 @@
1
+ first:
2
+ second:
3
+ third:
4
+ - 1
5
+ - 2
6
+ fourth: value
@@ -0,0 +1,8 @@
1
+ require 'spec_helper'
2
+ require 'tamplier/exceptions/configuration_exception'
3
+
4
+ describe 'integration test' do
5
+ it 'should not let application start without proper config' do
6
+ expect { require File.expand_path("../dummy/config/environment", __FILE__) }.to raise_error(ConfigurationException)
7
+ end
8
+ end
@@ -0,0 +1,4 @@
1
+ require 'simplecov'
2
+ SimpleCov.start do
3
+ add_filter 'spec/'
4
+ end
@@ -0,0 +1,25 @@
1
+ require 'spec_helper'
2
+ require 'tamplier/exceptions/configuration_exception'
3
+ require 'tamplier/validator'
4
+
5
+ describe Tamplier::Validator do
6
+ it 'checks, that all required config files are present' do
7
+ expect { subject.ensure('spec/examples/absent_file/') }.to raise_error(ConfigurationException, %q[Configuration file spec/examples/absent_file/invalid.yml does not exist, but sample file spec/examples/absent_file/invalid.yml.sample does.])
8
+ end
9
+
10
+ it 'checks, that there is a valid environment in yml file' do
11
+ expect { subject.ensure('spec/examples/absent_environment/', 'production') }.to raise_error(ConfigurationException, %q[There is no production environment in the spec/examples/absent_environment/environment.yml file.])
12
+ end
13
+
14
+ it 'checks, that all environmental keys from sample file exist in real file' do
15
+ expect { subject.ensure('spec/examples/absent_environment_key/', 'production') }.to raise_error(ConfigurationException, %q[Several keys ["/not_exist"] from spec/examples/absent_environment_key/environment.yml.sample are not in spec/examples/absent_environment_key/environment.yml file.])
16
+ end
17
+
18
+ it 'checks, that all environmental keys (in deep) from sample file exist in real file' do
19
+ expect { subject.ensure('spec/examples/absent_environment_keys/', 'production') }.to raise_error(ConfigurationException, %q[Several keys ["/first/second/fourth"] from spec/examples/absent_environment_keys/environment.yml.sample are not in spec/examples/absent_environment_keys/environment.yml file.])
20
+ end
21
+
22
+ it 'checks, that all non enviromental keys from sample file exist in real file' do
23
+ expect { subject.ensure('spec/examples/absent_keys/') }.to raise_error(ConfigurationException, %q[Several keys ["/first/second/third", "/first/second/fourth"] from spec/examples/absent_keys/non_environment.yml.sample are not in spec/examples/absent_keys/non_environment.yml file.])
24
+ end
25
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tamplier
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alexander Shestakov
@@ -38,6 +38,62 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rails
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: rspec
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: simplecov
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: pry
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'
41
97
  description: |
42
98
  How many times your deploys were failed, because you forgot to update .yml files on server... No more!
43
99
  Tamplier gem checks, that all keys from any .yml.sample files are actually exist in real .yml files.
@@ -50,7 +106,27 @@ extensions: []
50
106
  extra_rdoc_files: []
51
107
  files:
52
108
  - lib/tamplier.rb
109
+ - lib/tamplier/exceptions/configuration_exception.rb
110
+ - lib/tamplier/railtie.rb
111
+ - lib/tamplier/validator.rb
53
112
  - lib/tamplier/version.rb
113
+ - spec/dummy/config/environment.rb
114
+ - spec/dummy/config/test.yml.sample
115
+ - spec/dummy/log/development.log
116
+ - spec/examples/absent_environment/environment.yml
117
+ - spec/examples/absent_environment/environment.yml.sample
118
+ - spec/examples/absent_environment_key/environment.yml
119
+ - spec/examples/absent_environment_key/environment.yml.sample
120
+ - spec/examples/absent_environment_keys/environment.yml
121
+ - spec/examples/absent_environment_keys/environment.yml.sample
122
+ - spec/examples/absent_file/invalid.yml.sample
123
+ - spec/examples/absent_file/valid.yml
124
+ - spec/examples/absent_file/valid.yml.sample
125
+ - spec/examples/absent_keys/non_environment.yml
126
+ - spec/examples/absent_keys/non_environment.yml.sample
127
+ - spec/railtie_spec.rb
128
+ - spec/spec_helper.rb
129
+ - spec/validator_spec.rb
54
130
  homepage: https://github.com/maksar/tamplier
55
131
  licenses:
56
132
  - MIT
@@ -76,4 +152,21 @@ signing_key:
76
152
  specification_version: 4
77
153
  summary: Tamplier gem provides ability to manage .yml.sample config files in your
78
154
  ruby projects.
79
- test_files: []
155
+ test_files:
156
+ - spec/dummy/config/environment.rb
157
+ - spec/dummy/config/test.yml.sample
158
+ - spec/dummy/log/development.log
159
+ - spec/examples/absent_environment/environment.yml
160
+ - spec/examples/absent_environment/environment.yml.sample
161
+ - spec/examples/absent_environment_key/environment.yml
162
+ - spec/examples/absent_environment_key/environment.yml.sample
163
+ - spec/examples/absent_environment_keys/environment.yml
164
+ - spec/examples/absent_environment_keys/environment.yml.sample
165
+ - spec/examples/absent_file/invalid.yml.sample
166
+ - spec/examples/absent_file/valid.yml
167
+ - spec/examples/absent_file/valid.yml.sample
168
+ - spec/examples/absent_keys/non_environment.yml
169
+ - spec/examples/absent_keys/non_environment.yml.sample
170
+ - spec/railtie_spec.rb
171
+ - spec/spec_helper.rb
172
+ - spec/validator_spec.rb