codeclimate-yaml 0.9.0 → 0.10.0

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
  SHA1:
3
- metadata.gz: 2287a1160b8518aa4c54714ba3edf06cfb3fbfa0
4
- data.tar.gz: 1ef0b5da351f2a29bb2718f8999a2df584899337
3
+ metadata.gz: 9c28a3785dba022ee6a05b05d61a0fe074fec7e6
4
+ data.tar.gz: 9b0396f71bed5e81d13d067c46aeff6df87d5457
5
5
  SHA512:
6
- metadata.gz: 18cd4dc8b3d4ed6d8393c7cec8c3365190f74fa03ead8a3f25da5cf7d40a1b6b466d04c8c2832547cde53af6ebba0086dbc1ef56a1cc4564cc64c73c39202934
7
- data.tar.gz: fc0e285e26bd07d30f21a35bdf56bc6594a058dc3be198987ce32a272d4a94e26f1d1bfaa01b96c7a4ea65e08795602cd2ec025df35a48064e6f7b4abe91ef9c
6
+ metadata.gz: 8d336af7276f0a55d990bde2675f6da8cd9a76937143b47e28d135af47bf2bc30f7aaaec150aad017ec496418b62faf8b32c972d36c5e36950c0742a0e284264
7
+ data.tar.gz: 962fe7dfabc7b31d942527ab4ed783fe83f4b43d5ef1c09689d5e73f6d371a7221fad0cf08e88089bcef59bd1bed46283c6469e69ff21032dba2e3bbab858d5d
data/lib/cc/yaml/nodes.rb CHANGED
@@ -3,9 +3,12 @@ module CC
3
3
  module Nodes
4
4
  autoload :Check, "cc/yaml/nodes/check"
5
5
  autoload :Checks, "cc/yaml/nodes/checks"
6
+ autoload :Dependencies, "cc/yaml/nodes/dependencies"
6
7
  autoload :Engine, "cc/yaml/nodes/engine"
7
8
  autoload :EngineConfig, "cc/yaml/nodes/engine_config"
8
9
  autoload :EngineList, "cc/yaml/nodes/engine_list"
10
+ autoload :FileDependency, "cc/yaml/nodes/file_dependency"
11
+ autoload :FileDependencyList, "cc/yaml/nodes/file_dependency_list"
9
12
  autoload :Glob, "cc/yaml/nodes/glob"
10
13
  autoload :GlobList, "cc/yaml/nodes/glob_list"
11
14
  autoload :LanguageList, "cc/yaml/nodes/language_list"
@@ -0,0 +1,9 @@
1
+ module CC
2
+ module Yaml
3
+ module Nodes
4
+ class Dependencies < OpenMapping
5
+ map :files, to: FileDependencyList
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,74 @@
1
+ require "uri"
2
+ require "pathname"
3
+
4
+ module CC
5
+ module Yaml
6
+ module Nodes
7
+ class FileDependency < Mapping
8
+ INVALID_URL_ERROR = "invalid URL: %s".freeze
9
+ EMPTY_PATH_ERROR = "path cannot be empty".freeze
10
+ ABSOLUTE_PATH_ERROR = "absolute path \"%s\" is invalid".freeze
11
+ PARENT_PATH_ERROR = "relative path elements in \"%s\" are invalid: use \"%s\" instead".freeze
12
+
13
+ map :url, to: Scalar[:str], required: true
14
+ map :path, to: Scalar[:str], required: true
15
+
16
+ def visit_scalar(_visitor, type, value_node, _implicit = true)
17
+ if type == :str
18
+ if valid_url?(value_node.value)
19
+ self.url = url_node_from_url(value_node.value)
20
+ else
21
+ error(format(INVALID_URL_ERROR, value_node.value))
22
+ end
23
+ else
24
+ super
25
+ end
26
+ end
27
+
28
+ def verify
29
+ if !url.nil? && path.nil?
30
+ self.path = path_node_from_url(url.value)
31
+ end
32
+ error(format(INVALID_URL_ERROR, url.value)) if url && !valid_url?(url.value)
33
+ validate_path(path.value) if path
34
+ super
35
+ end
36
+
37
+ private
38
+
39
+ def valid_url?(url)
40
+ uri = URI.parse(url)
41
+ uri.is_a?(URI::HTTP) || uri.is_a?(URI::HTTPS)
42
+ rescue URI::InvalidUriError
43
+ false
44
+ end
45
+
46
+ def validate_path(path)
47
+ if path.nil? || path.length.zero?
48
+ return error(EMPTY_PATH_ERROR)
49
+ end
50
+
51
+ pathname = Pathname.new(path)
52
+ if pathname.absolute?
53
+ error(format(ABSOLUTE_PATH_ERROR, path))
54
+ end
55
+ if pathname.cleanpath.to_s != pathname.to_s || path.include?("..")
56
+ error(format(PARENT_PATH_ERROR, path, pathname.cleanpath.to_s))
57
+ end
58
+ end
59
+
60
+ def url_node_from_url(url)
61
+ node = Scalar.new(self)
62
+ node.value = url
63
+ node
64
+ end
65
+
66
+ def path_node_from_url(url)
67
+ node = Scalar.new(self)
68
+ node.value = File.basename(URI.parse(url).path)
69
+ node
70
+ end
71
+ end
72
+ end
73
+ end
74
+ end
@@ -0,0 +1,9 @@
1
+ module CC
2
+ module Yaml
3
+ module Nodes
4
+ class FileDependencyList < Sequence
5
+ type FileDependency
6
+ end
7
+ end
8
+ end
9
+ end
@@ -5,6 +5,7 @@ module CC
5
5
  module Yaml
6
6
  module Nodes
7
7
  class Root < Mapping
8
+ map :dependencies, to: Dependencies
8
9
  map :engines, to: EngineList
9
10
  map :exclude_paths, to: GlobList
10
11
  map :languages, to: LanguageList
@@ -1,5 +1,5 @@
1
1
  module CC
2
2
  module Yaml
3
- VERSION = "0.9.0".freeze
3
+ VERSION = "0.10.0".freeze
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: codeclimate-yaml
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.0
4
+ version: 0.10.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Code Climate
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-05-25 00:00:00.000000000 Z
11
+ date: 2016-11-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: secure_string
@@ -48,9 +48,12 @@ files:
48
48
  - lib/cc/yaml/nodes.rb
49
49
  - lib/cc/yaml/nodes/check.rb
50
50
  - lib/cc/yaml/nodes/checks.rb
51
+ - lib/cc/yaml/nodes/dependencies.rb
51
52
  - lib/cc/yaml/nodes/engine.rb
52
53
  - lib/cc/yaml/nodes/engine_config.rb
53
54
  - lib/cc/yaml/nodes/engine_list.rb
55
+ - lib/cc/yaml/nodes/file_dependency.rb
56
+ - lib/cc/yaml/nodes/file_dependency_list.rb
54
57
  - lib/cc/yaml/nodes/glob.rb
55
58
  - lib/cc/yaml/nodes/glob_list.rb
56
59
  - lib/cc/yaml/nodes/language_list.rb