yaml_ext 0.1.0 → 0.1.1

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
  SHA256:
3
- metadata.gz: 5c50a167ebcd2e16535c639ffb075f669e5460f36f1529f115c0ed9da5147b51
4
- data.tar.gz: 12bdbf3f9ee69f5dbdd331c013b2708c585a4de4ab692399fad4821fabef1ec0
3
+ metadata.gz: ff4954b8a7a31968db3c31d7d8008ec5b6943f53b58a441b53e296f222466116
4
+ data.tar.gz: 7570ae907e8ee2d47271bd568954cc8262e633e465ded6e6f737744b0f744bde
5
5
  SHA512:
6
- metadata.gz: 34340ea31a332e792426961325dc2312dc6c2e643d0aea00f9bed21a0f12fba20823282af5181f205ea92991d407caba692c2dfbc26afaf8921f489e82b4ec7c
7
- data.tar.gz: 9f5561dd431c156a93a71326e275f37458d25915c18d448b2611edcad207ab4dab83ed9a67fd1a121b6b9db9e0e90120e239b07c8da79a1019909f291334083c
6
+ metadata.gz: b7de6ed33f4fde2a27ef502c84cedb388ce3bb8bfd5936a329be0ab567f39280bd7dba1f21b995035fb9c462e43ed93d2995b537fe90810f34664fc6ef6e0ac9
7
+ data.tar.gz: 4498e81d9ce2a95a46a8e9ce885c00bf5819699f5d54442fdf203bb8192e96c0d0c2d6cd87cdb8fa1ba6c343b7cb6ec94f20c01a325fe566c4666f69dd66b746
data/.gitignore CHANGED
@@ -7,3 +7,5 @@
7
7
  /spec/reports/
8
8
  /tmp/
9
9
  /Gemfile.lock
10
+
11
+ .rspec_status
@@ -0,0 +1,162 @@
1
+ inherit_from: .rubocop_todo.yml
2
+
3
+ AllCops:
4
+ TargetRubyVersion: 2.6
5
+ Exclude:
6
+ - "node_modules/**/*"
7
+ - "vendor/**/*"
8
+
9
+ Layout/IndentFirstArrayElement:
10
+ EnforcedStyle: consistent
11
+
12
+ Layout/IndentFirstHashElement:
13
+ EnforcedStyle: consistent
14
+
15
+ Layout/IndentationConsistency:
16
+ EnforcedStyle: indented_internal_methods
17
+
18
+ Layout/MultilineMethodCallIndentation:
19
+ EnforcedStyle: indented_relative_to_receiver
20
+
21
+ Lint/AmbiguousBlockAssociation:
22
+ Exclude:
23
+ - "spec/**/*_spec.rb"
24
+
25
+ Lint/InheritException:
26
+ EnforcedStyle: standard_error
27
+
28
+ Lint/UnderscorePrefixedVariableName:
29
+ Enabled: false
30
+
31
+ Lint/UnusedMethodArgument:
32
+ Enabled: false
33
+
34
+ Metrics/AbcSize:
35
+ Max: 24
36
+
37
+ Metrics/BlockLength:
38
+ Exclude:
39
+ - "spec/**/*.rb"
40
+ - "Gemfile"
41
+ - "*.gemspec"
42
+
43
+ CyclomaticComplexity:
44
+ Max: 10
45
+
46
+ Metrics/LineLength:
47
+ Max: 120
48
+
49
+ Metrics/MethodLength:
50
+ Max: 20
51
+
52
+ Naming/UncommunicativeMethodParamName:
53
+ Enabled: false
54
+
55
+ Security/YAMLLoad:
56
+ Enabled: false
57
+
58
+ Style/Alias:
59
+ EnforcedStyle: prefer_alias_method
60
+
61
+ Style/AndOr:
62
+ EnforcedStyle: conditionals
63
+
64
+ Style/AsciiComments:
65
+ Enabled: false
66
+
67
+ Style/BlockDelimiters:
68
+ Enabled: false
69
+
70
+ Style/BracesAroundHashParameters:
71
+ Enabled: false
72
+
73
+ Style/ClassAndModuleChildren:
74
+ Enabled: false
75
+
76
+ Style/CollectionMethods:
77
+ PreferredMethods:
78
+ detect: "detect"
79
+ find: "detect"
80
+ inject: "inject"
81
+ reduce: "inject"
82
+
83
+ Style/Documentation:
84
+ Enabled: false
85
+
86
+ Style/DoubleNegation:
87
+ Enabled: false
88
+
89
+ Style/EmptyCaseCondition:
90
+ Enabled: false
91
+
92
+ Style/EmptyElse:
93
+ EnforcedStyle: empty
94
+
95
+ Style/EmptyMethod:
96
+ EnforcedStyle: expanded
97
+
98
+ Style/FormatString:
99
+ EnforcedStyle: percent
100
+
101
+ Style/FrozenStringLiteralComment:
102
+ Enabled: false
103
+
104
+ Style/HashSyntax:
105
+ Exclude:
106
+ - "Rakefile"
107
+
108
+ Style/MultilineBlockChain:
109
+ Enabled: false
110
+
111
+ Style/MixinUsage:
112
+ Exclude:
113
+ - "bin/setup"
114
+
115
+ Style/NumericLiterals:
116
+ MinDigits: 7
117
+ Strict: true
118
+
119
+ Style/NumericPredicate:
120
+ Enabled: false
121
+
122
+ Style/OrAssignment:
123
+ Enabled: false
124
+
125
+ Style/PercentLiteralDelimiters:
126
+ Enabled: false
127
+
128
+ Style/PreferredHashMethods:
129
+ EnforcedStyle: verbose
130
+
131
+ Style/RedundantReturn:
132
+ AllowMultipleReturnValues: true
133
+
134
+ Style/RedundantSelf:
135
+ Enabled: false
136
+
137
+ Style/RescueStandardError:
138
+ EnforcedStyle: implicit
139
+
140
+ Style/StringLiterals:
141
+ EnforcedStyle: double_quotes
142
+
143
+ Style/StringLiteralsInInterpolation:
144
+ EnforcedStyle: double_quotes
145
+
146
+ Style/SymbolArray:
147
+ Enabled: false
148
+
149
+ Style/TernaryParentheses:
150
+ EnforcedStyle: require_parentheses_when_complex
151
+
152
+ Style/TrailingCommaInArguments:
153
+ EnforcedStyleForMultiline: comma
154
+
155
+ Style/TrailingCommaInArrayLiteral:
156
+ EnforcedStyleForMultiline: comma
157
+
158
+ Style/TrailingCommaInHashLiteral:
159
+ EnforcedStyleForMultiline: comma
160
+
161
+ Style/WordArray:
162
+ Enabled: false
@@ -0,0 +1,21 @@
1
+ # This configuration was generated by
2
+ # `rubocop --auto-gen-config`
3
+ # on 2019-08-28 09:55:33 +0900 using RuboCop version 0.74.0.
4
+ # The point is for the user to remove these configuration records
5
+ # one by one as the offenses are removed from the code base.
6
+ # Note that changes in the inspected code, or installation of new
7
+ # versions of RuboCop, may require this file to be generated again.
8
+
9
+ # Offense count: 2
10
+ Lint/UselessAssignment:
11
+ Exclude:
12
+ - 'lib/yaml_ext.rb'
13
+
14
+ # Offense count: 1
15
+ # Configuration parameters: CountComments, ExcludedMethods.
16
+ Metrics/MethodLength:
17
+ Max: 21
18
+
19
+ # Offense count: 2
20
+ Metrics/PerceivedComplexity:
21
+ Max: 9
@@ -1,5 +1,10 @@
1
+ ---
1
2
  sudo: false
2
3
  language: ruby
4
+ cache: bundler
3
5
  rvm:
4
- - 2.5.1
5
- before_install: gem install bundler -v 1.16.2
6
+ - 2.6.3
7
+ before_install: gem install bundler -v 2.0.2
8
+ script:
9
+ - bundle exec rake spec
10
+ - bundle exec rubocop
data/Gemfile CHANGED
@@ -1,6 +1,6 @@
1
1
  source "https://rubygems.org"
2
2
 
3
- git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
3
+ git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
4
4
 
5
5
  # Specify your gem's dependencies in yaml_ext.gemspec
6
6
  gemspec
data/README.md CHANGED
@@ -1,5 +1,7 @@
1
1
  # YamlExt
2
2
 
3
+ [![Build Status](https://travis-ci.org/i2bskn/yaml_ext.svg?branch=master)](https://travis-ci.org/i2bskn/yaml_ext)
4
+
3
5
  Multiple YAML Loader.
4
6
 
5
7
  ## Installation
data/Rakefile CHANGED
@@ -1,10 +1,6 @@
1
1
  require "bundler/gem_tasks"
2
- require "rake/testtask"
2
+ require "rspec/core/rake_task"
3
3
 
4
- Rake::TestTask.new(:test) do |t|
5
- t.libs << "test"
6
- t.libs << "lib"
7
- t.test_files = FileList["test/**/*_test.rb"]
8
- end
4
+ RSpec::Core::RakeTask.new(:spec)
9
5
 
10
- task :default => :test
6
+ task default: :spec
data/bin/setup CHANGED
@@ -3,6 +3,4 @@ set -euo pipefail
3
3
  IFS=$'\n\t'
4
4
  set -vx
5
5
 
6
- bundle install
7
-
8
- # Do any other automated setup that you need to do here
6
+ bundle install --path .bundle -j 4
@@ -5,74 +5,88 @@ require "yaml_ext/version"
5
5
  module YamlExt
6
6
  class << self
7
7
  def load(path)
8
- resolve_ref_inner_json(load_file(path))
8
+ parse_nodes(:ref_inner_node, load_with_extended_nodes(path), path)
9
9
  end
10
10
 
11
- def load_file(path)
12
- parse_extended_node(load_yaml_file(path), path)
11
+ def load_with_extended_nodes(path)
12
+ parse_nodes(:ref_extended_node, load_with_erb(path), path)
13
+ end
14
+
15
+ def load_with_erb(path)
16
+ YAML.safe_load(ERB.new(File.read(path), trim_mode: "-").result)
13
17
  end
14
18
 
15
19
  private
16
20
 
17
- def load_yaml_file(path)
18
- YAML.load(ERB.new(File.read(path), nil, "-").result)
19
- end
21
+ def parse_nodes(type, node, path, node_tree = nil, node_path = [])
22
+ node_tree ||= node.dup
20
23
 
21
- def parse_extended_node(node, path)
22
24
  case node
23
25
  when Hash
24
- node.each_with_object({}) { |(k, v), obj|
25
- if k == "$ref" && v.is_a?(String) && !v.start_with?("#/")
26
- value = load_file(File.expand_path(v, File.dirname(path)))
27
- case value
28
- when Hash
29
- obj = {} unless obj.is_a?(Hash)
30
- obj.merge!(value)
31
- when Array
32
- obj = [] unless obj.is_a?(Array)
33
- obj.concat(value)
34
- else
35
- obj = value
36
- end
37
- else
38
- obj = {} unless obj.is_a?(Hash)
39
- obj[k] = parse_extended_node(v, path)
40
- end
41
- }
26
+ send(type, node, path, node_tree, node_path)
42
27
  when Array
43
- node.map { |n| parse_extended_node(n, path) }
28
+ node.map.with_index { |n, idx|
29
+ parse_nodes(type, n, path, node_tree, node_path.dup.push(idx))
30
+ }
44
31
  else
45
32
  node
46
33
  end
47
34
  end
48
35
 
49
- def resolve_ref_inner_json(node, node_tree = nil)
50
- node_tree ||= node
36
+ def ref_inner_node(node, path, node_tree = nil, node_path = [])
37
+ node.each_with_object({}) do |(k, v), obj|
38
+ if k == "$ref" && v.is_a?(String) && v.start_with?("#/")
39
+ ref_path = v.split("/")[1..-1]
40
+ value = ref_path.inject(node_tree) { |nodes, key| nodes[key] }
41
+ value = parse_nodes(:ref_inner_node, value, path, node_tree, ref_path)
42
+ update_node_tree(node_tree, node_path, value)
51
43
 
52
- case node
53
- when Hash
54
- node.each_with_object({}) { |(k, v), obj|
55
- if k == "$ref" && v.is_a?(String) && v.start_with?("#/")
56
- value = v.split("/")[1..-1].inject(node_tree) { |nodes, key| nodes.fetch(key) }
57
- case value
58
- when Hash
59
- obj = {} unless obj.is_a?(Hash)
60
- obj.merge!(value)
61
- when Array
62
- obj = [] unless obj.is_a?(Array)
63
- obj.concat(value)
64
- else
65
- obj = value
66
- end
44
+ case value
45
+ when Hash
46
+ obj = {} unless obj.is_a?(Hash)
47
+ obj.merge!(value)
48
+ when Array
49
+ obj = [] unless obj.is_a?(Array)
50
+ obj.concat(value)
67
51
  else
52
+ obj = value
53
+ end
54
+ else
55
+ obj = {} unless obj.is_a?(Hash)
56
+ obj[k] = parse_nodes(:ref_inner_node, v, path, node_tree, node_path.dup.push(k))
57
+ end
58
+ end
59
+ end
60
+
61
+ def ref_extended_node(node, path, node_tree = nil, node_path = [])
62
+ node.each_with_object({}) do |(k, v), obj|
63
+ if k == "$ref" && v.is_a?(String) && !v.start_with?("#/")
64
+ value = load_with_extended_nodes(File.expand_path(v, File.dirname(path)))
65
+ case value
66
+ when Hash
68
67
  obj = {} unless obj.is_a?(Hash)
69
- obj[k] = resolve_ref_inner_json(v, node_tree)
68
+ obj.merge!(value)
69
+ when Array
70
+ obj = [] unless obj.is_a?(Array)
71
+ obj.concat(value)
72
+ else
73
+ obj = value
70
74
  end
71
- }
72
- when Array
73
- node.map { |n| resolve_ref_inner_json(n, node_tree) }
74
- else
75
- node
75
+ else
76
+ obj = {} unless obj.is_a?(Hash)
77
+ obj[k] = parse_nodes(:ref_extended_node, v, path, node_tree, node_path.dup.push(k))
78
+ end
79
+ end
80
+ end
81
+
82
+ def update_node_tree(node_tree, node_path, value)
83
+ content = node_tree
84
+ node_path.each.with_index(1) do |k, i|
85
+ if node_path.size > i
86
+ content = content[k]
87
+ else
88
+ content[k] = value
89
+ end
76
90
  end
77
91
  end
78
92
  end
@@ -1,3 +1,3 @@
1
1
  module YamlExt
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1".freeze
3
3
  end
@@ -1,5 +1,4 @@
1
-
2
- lib = File.expand_path("../lib", __FILE__)
1
+ lib = File.expand_path("lib", __dir__)
3
2
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
3
  require "yaml_ext/version"
5
4
 
@@ -9,21 +8,22 @@ Gem::Specification.new do |spec|
9
8
  spec.authors = ["i2bskn"]
10
9
  spec.email = ["i2bskn@gmail.com"]
11
10
 
12
- spec.summary = %q{Multiple YAML Loader.}
13
- spec.description = %q{Multiple YAML Loader.}
11
+ spec.summary = "Multiple YAML Loader."
12
+ spec.description = "Multiple YAML Loader."
14
13
  spec.homepage = "https://github.com/i2bskn/yaml_ext"
15
14
 
16
15
  # Specify which files should be added to the gem when it is released.
17
16
  # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
18
- spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
17
+ spec.files = Dir.chdir(File.expand_path(__dir__)) do
19
18
  `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
20
19
  end
21
20
  spec.bindir = "exe"
22
21
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
23
22
  spec.require_paths = ["lib"]
24
23
 
25
- spec.add_development_dependency "bundler"
24
+ spec.add_development_dependency "bundler", "~> 2.0.2"
25
+ spec.add_development_dependency "pry", "~> 0.12.2"
26
26
  spec.add_development_dependency "rake"
27
- spec.add_development_dependency "minitest"
28
- spec.add_development_dependency "pry"
27
+ spec.add_development_dependency "rspec", "~> 3.8.0"
28
+ spec.add_development_dependency "rubocop", "~> 0.74.0"
29
29
  end
metadata CHANGED
@@ -1,29 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: yaml_ext
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - i2bskn
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-04-17 00:00:00.000000000 Z
11
+ date: 2019-08-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0'
19
+ version: 2.0.2
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ">="
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '0'
26
+ version: 2.0.2
27
+ - !ruby/object:Gem::Dependency
28
+ name: pry
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 0.12.2
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 0.12.2
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: rake
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -39,33 +53,33 @@ dependencies:
39
53
  - !ruby/object:Gem::Version
40
54
  version: '0'
41
55
  - !ruby/object:Gem::Dependency
42
- name: minitest
56
+ name: rspec
43
57
  requirement: !ruby/object:Gem::Requirement
44
58
  requirements:
45
- - - ">="
59
+ - - "~>"
46
60
  - !ruby/object:Gem::Version
47
- version: '0'
61
+ version: 3.8.0
48
62
  type: :development
49
63
  prerelease: false
50
64
  version_requirements: !ruby/object:Gem::Requirement
51
65
  requirements:
52
- - - ">="
66
+ - - "~>"
53
67
  - !ruby/object:Gem::Version
54
- version: '0'
68
+ version: 3.8.0
55
69
  - !ruby/object:Gem::Dependency
56
- name: pry
70
+ name: rubocop
57
71
  requirement: !ruby/object:Gem::Requirement
58
72
  requirements:
59
- - - ">="
73
+ - - "~>"
60
74
  - !ruby/object:Gem::Version
61
- version: '0'
75
+ version: 0.74.0
62
76
  type: :development
63
77
  prerelease: false
64
78
  version_requirements: !ruby/object:Gem::Requirement
65
79
  requirements:
66
- - - ">="
80
+ - - "~>"
67
81
  - !ruby/object:Gem::Version
68
- version: '0'
82
+ version: 0.74.0
69
83
  description: Multiple YAML Loader.
70
84
  email:
71
85
  - i2bskn@gmail.com
@@ -74,6 +88,8 @@ extensions: []
74
88
  extra_rdoc_files: []
75
89
  files:
76
90
  - ".gitignore"
91
+ - ".rubocop.yml"
92
+ - ".rubocop_todo.yml"
77
93
  - ".travis.yml"
78
94
  - Gemfile
79
95
  - LICENSE