yamload 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,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: d479e22a573daeec01e50860fd57bcbbdd156b41
4
+ data.tar.gz: a214e210884aa1700000372b007876511494f7fa
5
+ SHA512:
6
+ metadata.gz: db21529dffbe4ec9389b2935628700ae463316f823e65202531a95409976400673fbccb5e2865da036204d401b8fa77e94c227b9d41b39daf9c1809175ee3307
7
+ data.tar.gz: ac79928bb7fe4532c1e153d85cd2d60e170d6ab838323b15235abadb3b2eaceade65ce239ee3b3ea8bb772219d25523c2b1899da59c346ac5105cb4de189c2ce
data/.gitignore ADDED
@@ -0,0 +1,16 @@
1
+ /vendor/
2
+ /.idea/
3
+ /.bundle/
4
+ /.yardoc
5
+ /Gemfile.lock
6
+ /_yardoc/
7
+ /coverage/
8
+ /doc/
9
+ /pkg/
10
+ /spec/reports/
11
+ /tmp/
12
+ *.bundle
13
+ *.so
14
+ *.o
15
+ *.a
16
+ mkmf.log
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --format documentation
2
+ --color
data/.rubocop.yml ADDED
@@ -0,0 +1,11 @@
1
+ Metrics/LineLength:
2
+ Max: 100
3
+
4
+ Documentation:
5
+ Enabled: false
6
+
7
+ Style/Blocks:
8
+ Enabled: false
9
+
10
+ Style/TrivialAccessors:
11
+ AllowPredicates: true
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 2.2.0
data/.travis.yml ADDED
@@ -0,0 +1,10 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.9.3
4
+ - 2.1
5
+ - 2.2
6
+ script: "bundle exec rake coverage"
7
+ notifications:
8
+ email:
9
+ - support@travellink.com.au
10
+ flowdock: e69dcafad1fea15c6b8c76e9ced965af
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in yamload.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2015 Alessandro Berardi
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,79 @@
1
+ # Yamload
2
+
3
+ [![Gem Version](https://badge.fury.io/rb/yamload.png)](http://badge.fury.io/rb/yamload)
4
+ [![Build Status](https://travis-ci.org/sealink/yamload.png?branch=master)](https://travis-ci.org/sealink/yamload)
5
+ [![Coverage Status](https://coveralls.io/repos/sealink/yamload/badge.png)](https://coveralls.io/r/sealink/yamload)
6
+ [![Dependency Status](https://gemnasium.com/sealink/yamload.png)](https://gemnasium.com/sealink/yamload)
7
+ [![Code Climate](https://codeclimate.com/github/sealink/yamload.png)](https://codeclimate.com/github/sealink/yamload)
8
+
9
+ * YAML files loading
10
+ * Recursive conversion to immutable objects
11
+ * Schema validation
12
+ * Default values
13
+
14
+ ## Installation
15
+
16
+ Add this line to your application's Gemfile:
17
+
18
+ ```ruby
19
+ gem 'yamload'
20
+ ```
21
+
22
+ And then execute:
23
+
24
+ $ bundle
25
+
26
+ Or install it yourself as:
27
+
28
+ $ gem install yamload
29
+
30
+ ## Usage
31
+
32
+ Set up the YAML files directory
33
+ ```ruby
34
+ Yamload.dir = File.join(File.dirname(File.expand_path(__FILE__)),'config')
35
+ ```
36
+
37
+ e.g. config/test.yml
38
+ ```yaml
39
+ ---
40
+ test: true
41
+ ```
42
+
43
+ Load YAML files from the directory and access keys
44
+ ```ruby
45
+ # Load config/test.yml
46
+ loader = Yamload::Loader.new(:test)
47
+ loader.loaded_hash('attribute')
48
+ # => true
49
+ loader.obj.attribute
50
+ # => true
51
+ ```
52
+
53
+ Define a schema for the configuration
54
+ ```ruby
55
+ # Load config/test.yml
56
+ loader = Yamload::Loader.new(:test)
57
+ loader.define_schema do |schema|
58
+ schema.string 'test'
59
+ end
60
+ loader.valid?
61
+ # => true
62
+ loader.validate!
63
+ # => nil
64
+ loader.error
65
+ # => nil
66
+ ```
67
+
68
+ Define defaults
69
+ ```ruby
70
+ loader.defaults = { 'test' => true , 'coverage' => { 'minimum' => 0.95 } }
71
+ ```
72
+
73
+ ## Contributing
74
+
75
+ 1. Fork it ( https://github.com/sealink/yamload/fork )
76
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
77
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
78
+ 4. Push to the branch (`git push origin my-new-feature`)
79
+ 5. Create a new Pull Request
data/Rakefile ADDED
@@ -0,0 +1,12 @@
1
+ require 'bundler/gem_tasks'
2
+ require 'rspec/core/rake_task'
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task default: :spec
7
+
8
+ desc 'Generate SimpleCov test coverage and open in your browser'
9
+ task :coverage do
10
+ ENV['COVERAGE'] = 'true'
11
+ Rake::Task['spec'].invoke
12
+ end
@@ -0,0 +1,40 @@
1
+ require 'facets/hash/rekey'
2
+ require 'anima'
3
+
4
+ module Yamload
5
+ class HashToImmutableObject
6
+ def initialize(hash)
7
+ @hash = hash.rekey
8
+ end
9
+
10
+ def call
11
+ immutable_objects_factory.new(converted_hash)
12
+ end
13
+
14
+ private
15
+
16
+ def immutable_objects_factory
17
+ anima = Anima.new(*@hash.keys)
18
+ Class.new do
19
+ include Adamantium
20
+ include anima
21
+ end
22
+ end
23
+
24
+ def converted_hash
25
+ @hash.map.with_object({}) { |(key, value), hash|
26
+ hash[key] = convert(value)
27
+ }
28
+ end
29
+
30
+ def convert(value)
31
+ if value.is_a?(Hash)
32
+ self.class.new(value).call
33
+ elsif value.is_a?(Array)
34
+ value.map { |element| convert(element) }
35
+ else
36
+ value
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,60 @@
1
+ require 'yaml'
2
+ require 'respect'
3
+ require 'facets/hash/deep_merge'
4
+
5
+ module Yamload
6
+ class Loader
7
+ def initialize(file, dir = Yamload.dir)
8
+ @file = file
9
+ @dir = dir
10
+ end
11
+
12
+ def loaded_hash
13
+ @loaded_hash ||= defaults.deep_merge(load)
14
+ end
15
+
16
+ def obj
17
+ @immutable_obj ||= HashToImmutableObject.new(loaded_hash).call
18
+ end
19
+
20
+ def reload
21
+ @loaded_hash = @immutable_obj = nil
22
+ loaded_hash
23
+ end
24
+
25
+ def define_schema
26
+ @schema = Respect::HashSchema.define do |schema|
27
+ yield schema
28
+ end
29
+ end
30
+
31
+ attr_writer :defaults
32
+
33
+ def defaults
34
+ @defaults ||= {}
35
+ end
36
+
37
+ def valid?
38
+ return true if @schema.nil?
39
+ @schema.validate? loaded_hash
40
+ end
41
+
42
+ def validate!
43
+ return if valid?
44
+ fail SchemaError, error
45
+ end
46
+
47
+ def error
48
+ return nil if valid?
49
+ @schema.last_error.message
50
+ end
51
+
52
+ private
53
+
54
+ def load
55
+ YAML.load_file(File.join(@dir, "#{@file}.yml"))
56
+ end
57
+ end
58
+
59
+ class SchemaError < StandardError; end
60
+ end
@@ -0,0 +1,3 @@
1
+ module Yamload
2
+ VERSION = '0.0.1'
3
+ end
data/lib/yamload.rb ADDED
@@ -0,0 +1,10 @@
1
+ require 'yamload/version'
2
+
3
+ module Yamload
4
+ class << self
5
+ attr_accessor :dir
6
+ end
7
+ end
8
+
9
+ require 'yamload/loader'
10
+ require 'yamload/hash_to_immutable_object'
@@ -0,0 +1,25 @@
1
+ ---
2
+ test: true
3
+ users:
4
+ - first_name: Testy
5
+ last_name: Tester
6
+ address:
7
+ address_line_1: 1 Test Avenue
8
+ address_line_2:
9
+ city: Testville
10
+ state: TST
11
+ post_code: 1234
12
+ country: Testalia
13
+ email: testy.tester@test.com
14
+ - first_name: Speccy
15
+ last_name: Speccer
16
+ address:
17
+ address_line_1: Unit 1
18
+ address_line_2: 42 Spec Street
19
+ city: Specwood
20
+ state: SPC
21
+ post_code: 5678
22
+ country: Specland
23
+ email: speccy.speccer@spec.com
24
+ settings:
25
+ remote_access: true
@@ -0,0 +1,139 @@
1
+ require 'spec_helper'
2
+
3
+ require 'yamload'
4
+
5
+ describe Yamload do
6
+ let(:loader) { Yamload::Loader.new(:test) }
7
+ let(:config) { loader.loaded_hash }
8
+ let(:config_obj) { loader.obj }
9
+
10
+ let(:expected_config) {
11
+ {
12
+ 'test' => true,
13
+ 'users' => [
14
+ {
15
+ 'first_name' => 'Testy',
16
+ 'last_name' => 'Tester',
17
+ 'address' => {
18
+ 'address_line_1' => '1 Test Avenue',
19
+ 'address_line_2' => nil,
20
+ 'city' => 'Testville',
21
+ 'state' => 'TST',
22
+ 'post_code' => 1234,
23
+ 'country' => 'Testalia'
24
+ },
25
+ 'email' => 'testy.tester@test.com'
26
+ },
27
+ {
28
+ 'first_name' => 'Speccy',
29
+ 'last_name' => 'Speccer',
30
+ 'address' => {
31
+ 'address_line_1' => 'Unit 1',
32
+ 'address_line_2' => '42 Spec Street',
33
+ 'city' => 'Specwood',
34
+ 'state' => 'SPC',
35
+ 'post_code' => 5678,
36
+ 'country' => 'Specland'
37
+ },
38
+ 'email' => 'speccy.speccer@spec.com'
39
+ }
40
+ ],
41
+ 'settings' => {
42
+ 'remote_access' => true
43
+ }
44
+ }
45
+ }
46
+
47
+ specify { expect(config).to eq expected_config }
48
+ specify { expect(config_obj.test).to eq true }
49
+ specify { expect(config_obj.users[0].first_name).to eq 'Testy' }
50
+ specify { expect(config_obj.users[0].last_name).to eq 'Tester' }
51
+ specify { expect(config_obj.users[0].address.address_line_1).to eq '1 Test Avenue' }
52
+ specify { expect(config_obj.users[0].address.address_line_2).to eq nil }
53
+ specify { expect(config_obj.users[0].address.city).to eq 'Testville' }
54
+ specify { expect(config_obj.users[0].address.state).to eq 'TST' }
55
+ specify { expect(config_obj.users[0].address.post_code).to eq 1234 }
56
+ specify { expect(config_obj.users[0].address.country).to eq 'Testalia' }
57
+ specify { expect(config_obj.users[0].email).to eq 'testy.tester@test.com' }
58
+ specify { expect(config_obj.users[1].first_name).to eq 'Speccy' }
59
+ specify { expect(config_obj.users[1].last_name).to eq 'Speccer' }
60
+ specify { expect(config_obj.users[1].address.address_line_1).to eq 'Unit 1' }
61
+ specify { expect(config_obj.users[1].address.address_line_2).to eq '42 Spec Street' }
62
+ specify { expect(config_obj.users[1].address.city).to eq 'Specwood' }
63
+ specify { expect(config_obj.users[1].address.state).to eq 'SPC' }
64
+ specify { expect(config_obj.users[1].address.post_code).to eq 5678 }
65
+ specify { expect(config_obj.users[1].address.country).to eq 'Specland' }
66
+ specify { expect(config_obj.users[1].email).to eq 'speccy.speccer@spec.com' }
67
+ specify { expect(config_obj.settings.remote_access).to eq true }
68
+
69
+ context 'when trying to modify the configuration object' do
70
+ let(:new_user) { double('new user') }
71
+ specify 'the object should be immutable' do
72
+ expect { config_obj.users << new_user }
73
+ .to raise_error RuntimeError, "can't modify frozen Array"
74
+ expect(config_obj.users).not_to include new_user
75
+ end
76
+ end
77
+
78
+ context 'when a schema is defined' do
79
+ let(:define_schema) {
80
+ loader.define_schema do |schema|
81
+ schema.array 'users' do |users_array|
82
+ users_array.hash do |user_hash|
83
+ user_hash.string 'first_name'
84
+ user_hash.string 'last_name'
85
+ user_hash.hash 'address' do |address_hash|
86
+ address_hash.string 'address_line_1'
87
+ address_hash.string 'city'
88
+ address_hash.string 'state'
89
+ address_hash.integer 'post_code'
90
+ address_hash.string 'country'
91
+ end
92
+ user_hash.string 'email', format: :email
93
+ end
94
+ end
95
+ end
96
+ }
97
+
98
+ before { define_schema }
99
+
100
+ specify { expect(loader).to be_valid }
101
+ specify { expect(loader.error).to be_nil }
102
+ specify { expect { loader.validate! }.not_to raise_error }
103
+
104
+ context 'when the schema is not matched' do
105
+ let(:define_schema) {
106
+ loader.define_schema do |schema|
107
+ schema.array 'users' do |users_array|
108
+ users_array.hash do |user_hash|
109
+ user_hash.string 'expected_attribute'
110
+ end
111
+ end
112
+ end
113
+ }
114
+
115
+ let(:expected_error) { "missing key `expected_attribute'" }
116
+ specify { expect(loader).not_to be_valid }
117
+ specify { expect(loader.error).to eq expected_error }
118
+ specify { expect { loader.validate! }.to raise_error Yamload::SchemaError, expected_error }
119
+ end
120
+ end
121
+
122
+ context 'when defaults are defined' do
123
+ let(:defaults) {
124
+ {
125
+ 'settings' => {
126
+ 'remember_user' => false,
127
+ 'remote_access' => false
128
+ }
129
+ }
130
+ }
131
+
132
+ before do
133
+ loader.defaults = defaults
134
+ end
135
+
136
+ specify { expect(config_obj.settings.remember_user).to eq false }
137
+ specify { expect(config_obj.settings.remote_access).to eq true }
138
+ end
139
+ end
@@ -0,0 +1,33 @@
1
+ $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
2
+
3
+ MINIMUM_COVERAGE = 95
4
+
5
+ if ENV['COVERAGE']
6
+ require 'simplecov'
7
+ require 'simplecov-rcov'
8
+ require 'coveralls'
9
+ Coveralls.wear!
10
+
11
+ SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
12
+ SimpleCov::Formatter::RcovFormatter,
13
+ Coveralls::SimpleCov::Formatter
14
+ ]
15
+ SimpleCov.start do
16
+ add_filter '/vendor/'
17
+ add_filter '/spec/'
18
+ add_group 'lib', 'lib'
19
+ end
20
+ SimpleCov.at_exit do
21
+ SimpleCov.result.format!
22
+ percent = SimpleCov.result.covered_percent
23
+ unless percent >= MINIMUM_COVERAGE
24
+ puts "Coverage must be above #{MINIMUM_COVERAGE}%. It is #{format('%.2f', percent)}%"
25
+ Kernel.exit(1)
26
+ end
27
+ end
28
+ end
29
+
30
+ require 'yamload'
31
+
32
+ current_file_dir = File.expand_path(File.dirname(__FILE__))
33
+ Yamload.dir = File.join(current_file_dir, 'fixtures')
data/yamload.gemspec ADDED
@@ -0,0 +1,32 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'yamload/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = 'yamload'
8
+ spec.version = Yamload::VERSION
9
+ spec.authors = ['Alessandro Berardi']
10
+ spec.email = ['berardialessandro@gmail.com']
11
+ spec.summary = 'YAML files loader'
12
+ spec.description = 'YAML files loader with validation'
13
+ spec.homepage = ''
14
+ spec.license = 'MIT'
15
+
16
+ spec.files = `git ls-files -z`.split("\x0")
17
+ spec.executables = spec.files.grep(/^bin\//) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(/^(test|spec|features)\//)
19
+ spec.require_paths = ['lib']
20
+
21
+ spec.add_dependency 'anima', '~> 0.2'
22
+ spec.add_dependency 'facets', '~> 3.0'
23
+ spec.add_dependency 'respect', '~> 0.1'
24
+
25
+ spec.add_development_dependency 'bundler', '~> 1.7'
26
+ spec.add_development_dependency 'rake', '~> 10.0'
27
+ spec.add_development_dependency 'rspec', '~> 3.1'
28
+ spec.add_development_dependency 'simplecov', '~> 0.9'
29
+ spec.add_development_dependency 'simplecov-rcov', '~> 0.2'
30
+ spec.add_development_dependency 'coveralls'
31
+ spec.add_development_dependency 'rubocop'
32
+ end
metadata ADDED
@@ -0,0 +1,204 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: yamload
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Alessandro Berardi
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-02-03 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: anima
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '0.2'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '0.2'
27
+ - !ruby/object:Gem::Dependency
28
+ name: facets
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '3.0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '3.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: respect
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '0.1'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '0.1'
55
+ - !ruby/object:Gem::Dependency
56
+ name: bundler
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '1.7'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '1.7'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rake
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '10.0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '10.0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rspec
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '3.1'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '3.1'
97
+ - !ruby/object:Gem::Dependency
98
+ name: simplecov
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '0.9'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '0.9'
111
+ - !ruby/object:Gem::Dependency
112
+ name: simplecov-rcov
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '0.2'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '0.2'
125
+ - !ruby/object:Gem::Dependency
126
+ name: coveralls
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: rubocop
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ description: YAML files loader with validation
154
+ email:
155
+ - berardialessandro@gmail.com
156
+ executables: []
157
+ extensions: []
158
+ extra_rdoc_files: []
159
+ files:
160
+ - ".gitignore"
161
+ - ".rspec"
162
+ - ".rubocop.yml"
163
+ - ".ruby-version"
164
+ - ".travis.yml"
165
+ - Gemfile
166
+ - LICENSE.txt
167
+ - README.md
168
+ - Rakefile
169
+ - lib/yamload.rb
170
+ - lib/yamload/hash_to_immutable_object.rb
171
+ - lib/yamload/loader.rb
172
+ - lib/yamload/version.rb
173
+ - spec/fixtures/test.yml
174
+ - spec/loader_spec.rb
175
+ - spec/spec_helper.rb
176
+ - yamload.gemspec
177
+ homepage: ''
178
+ licenses:
179
+ - MIT
180
+ metadata: {}
181
+ post_install_message:
182
+ rdoc_options: []
183
+ require_paths:
184
+ - lib
185
+ required_ruby_version: !ruby/object:Gem::Requirement
186
+ requirements:
187
+ - - ">="
188
+ - !ruby/object:Gem::Version
189
+ version: '0'
190
+ required_rubygems_version: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - ">="
193
+ - !ruby/object:Gem::Version
194
+ version: '0'
195
+ requirements: []
196
+ rubyforge_project:
197
+ rubygems_version: 2.4.5
198
+ signing_key:
199
+ specification_version: 4
200
+ summary: YAML files loader
201
+ test_files:
202
+ - spec/fixtures/test.yml
203
+ - spec/loader_spec.rb
204
+ - spec/spec_helper.rb