yaml_ext 0.1.0 → 0.1.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
  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