blackbriar 0.0.1 → 0.0.2

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: 4ddd381c689796ae779abb2a140ed5cc885c8060
4
- data.tar.gz: 73fd72f9a25b47390651c0449369cabf78b1d239
3
+ metadata.gz: bfa258cf5a2bafcb54e99a3846d7b4c82cce6c61
4
+ data.tar.gz: 665a8f8d6a4188c3be984bb7d9d9888d3c230a8c
5
5
  SHA512:
6
- metadata.gz: b497ef4cffb9c91d3d5ed820e130eebd6a7dec5c455a62bddf13ade291310c3fff3cb520425adabd1c01263159c4c4ae4a1ec2cba855622c2df50de36f248bc5
7
- data.tar.gz: b98733db52b9fecb115683db08043769a7db38a1b9399ba4d0025ec27be281b000a83b9d21d26d366d9acc7ddf8f20807ec6d7b641a77500857b3064173f82c7
6
+ metadata.gz: 6712411a6e5d378759bf046260ea4a0feb72edf330f500de0832a6e596f638998c653bf6f031f47ba65d4bc66b2c2741795d5491ae942ad74a7938eeceac8bf4
7
+ data.tar.gz: 04ef97b2da99d8d6ae7e951c8137f7ccca8d0806882b283da2bc0ce6a7a4ad9b56e13966fc7b80ae5df5b1ece8f8f233e883e27ecd928d7bd41c7666f5d255cd
@@ -30,7 +30,13 @@ Gem::Specification.new do |spec|
30
30
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
31
31
  spec.require_paths = ["lib"]
32
32
 
33
+ spec.add_dependency "json_schema", "~> 0.16.2"
34
+ spec.add_dependency "jsonpath", "~> 0.8.2"
35
+ spec.add_dependency "activesupport", "~> 5"
36
+
33
37
  spec.add_development_dependency "bundler", "~> 1.14"
34
38
  spec.add_development_dependency "rake", "~> 12"
35
39
  spec.add_development_dependency "rspec", "~> 3.0"
40
+ spec.add_development_dependency "sleepers", "~> 0.0.10"
41
+
36
42
  end
@@ -1,5 +1,11 @@
1
1
  require "blackbriar/version"
2
+ require "active_support/core_ext/hash"
3
+ require "json"
4
+ require "json_schema"
5
+ require "jsonpath"
6
+ require "blackbriar/node"
7
+ require "blackbriar/value_provider"
8
+ require "sleepers"
2
9
 
3
10
  module Blackbriar
4
- # Your code goes here...
5
11
  end
@@ -0,0 +1,50 @@
1
+ module Blackbriar
2
+ class Node
3
+ def initialize(hash, value_provider)
4
+ @key, @value = hash.to_a.first
5
+ @value_provider = value_provider
6
+ end
7
+
8
+ attr_reader :key, :value, :value_provider
9
+
10
+ def resolve
11
+ if value.is_a? String
12
+ {key => resolve_string(value)}
13
+ elsif value.is_a? Numeric
14
+ {key => value}
15
+ elsif value.is_a? Time
16
+ {key => value}
17
+ elsif value.is_a? Hash
18
+ {key => resolve_hash(value)}
19
+ elsif value.is_a? Array
20
+ {key => resolve_array(value)}
21
+ end
22
+ end
23
+
24
+ def resolve_array_item(item)
25
+ if item.is_a? String
26
+ resolve_string(item)
27
+ elsif value.is_a? Numeric
28
+ {key => value}
29
+ elsif value.is_a? Time
30
+ {key => value}
31
+ elsif item.is_a? Hash
32
+ resolve_hash item
33
+ elsif item.is_a? Array
34
+ resolve_array(item)
35
+ end
36
+ end
37
+
38
+ def resolve_string(string)
39
+ value_provider.resolve(string)
40
+ end
41
+
42
+ def resolve_hash(hash)
43
+ hash.to_a.map {|item| self.class.new([item].to_h, value_provider).resolve}.reduce(&:merge)
44
+ end
45
+
46
+ def resolve_array(array)
47
+ array.map {|item| resolve_array_item(item)}
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,75 @@
1
+ # Special thanks to https://robots.thoughtbot.com/validating-json-schemas-with-an-rspec-matcher
2
+ # Depends on json_schema
3
+
4
+ RSpec::Matchers.define :match_yaml_schema do |schema|
5
+ match do |response|
6
+ # Setup
7
+ if defined?(Rails)
8
+ schema_path = Rails.root.join("spec/support/schemas", "#{schema}.yaml")
9
+ else
10
+ schema_path = "spec/support/schemas/#{schema}.yaml"
11
+ end
12
+
13
+ # Parse and expand the schema definition
14
+ @schema = JsonSchema.parse!(YAML.load(File.read(schema_path)))
15
+ @schema.expand_references!
16
+ # ap @schema.inspect_schema
17
+
18
+ # Get data to match
19
+ @data = response.respond_to?(:body) ? response.body : response
20
+
21
+ # Validate
22
+ begin
23
+ @schema.validate! @data.deep_stringify_keys
24
+ true
25
+ rescue JsonSchema::AggregateError => e
26
+ @errors = e.message
27
+ false
28
+ end
29
+ end
30
+
31
+ failure_message do
32
+ @errors
33
+ end
34
+ end
35
+
36
+ RSpec::Matchers.define_negated_matcher :not_match_yaml_schema, :match_yaml_schema
37
+
38
+ RSpec::Matchers.define :match_json_schema do |schema|
39
+ match do |response|
40
+ if schema.is_a? String
41
+ # Setup
42
+ if defined?(Rails)
43
+ schema_path = Rails.root.join("spec/support/schemas", "#{schema}.json")
44
+ else
45
+ schema_path = "spec/support/schemas/#{schema}.yaml"
46
+ end
47
+
48
+ # Parse and expand the schema definition
49
+ @schema = JsonSchema.parse!(YAML.load(File.read(schema_path)))
50
+ elsif schema.kind_of? Hash
51
+ @schema = JsonSchema.parse!(schema)
52
+ end
53
+
54
+ @schema.expand_references!
55
+
56
+ # Get data to match
57
+ @data = response.respond_to?(:body) ? response.body : response
58
+
59
+ begin
60
+ # Validate
61
+ @schema.validate! @data
62
+ true
63
+ rescue JsonSchema::AggregateError => e
64
+ @errors = e.message
65
+ false
66
+ end
67
+ end
68
+
69
+ failure_message do
70
+ binding.pry
71
+ @errors
72
+ end
73
+ end
74
+
75
+ RSpec::Matchers.define_negated_matcher :not_match_json_schema, :match_json_schema
@@ -0,0 +1,30 @@
1
+ # Module is responsible for returning a json_path value from the given data Hash
2
+ #
3
+ # Example:
4
+ # irb> provider = Messages::Transformation::ValueProvider.new(some_hash)
5
+ # irb> provider.send('json_path:$.test.value[0]')
6
+ #
7
+ # Our use case for the creation was that this was to be used in conjuction with a json mapping
8
+ # template to populate the template with real values
9
+
10
+ module Blackbriar
11
+ class ValueProvider
12
+ def initialize(data)
13
+ @data = data
14
+ end
15
+
16
+ def resolve(arg)
17
+ path = is_json_path?(arg.to_s) ? arg.to_s.split(":").last : nil
18
+ return arg unless path
19
+ JsonPath.on(data, path).first
20
+ end
21
+
22
+ private
23
+ attr_reader :data
24
+
25
+ def is_json_path?(method_name)
26
+ # Ensure that we are dealin with a json path object
27
+ /^json_path/.match(method_name)
28
+ end
29
+ end
30
+ end
@@ -1,3 +1,3 @@
1
1
  module Blackbriar
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
metadata CHANGED
@@ -1,15 +1,57 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: blackbriar
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tyrone Wilson
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-10-03 00:00:00.000000000 Z
11
+ date: 2017-11-14 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: json_schema
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 0.16.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.16.2
27
+ - !ruby/object:Gem::Dependency
28
+ name: jsonpath
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 0.8.2
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 0.8.2
41
+ - !ruby/object:Gem::Dependency
42
+ name: activesupport
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '5'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '5'
13
55
  - !ruby/object:Gem::Dependency
14
56
  name: bundler
15
57
  requirement: !ruby/object:Gem::Requirement
@@ -52,6 +94,20 @@ dependencies:
52
94
  - - "~>"
53
95
  - !ruby/object:Gem::Version
54
96
  version: '3.0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: sleepers
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: 0.0.10
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: 0.0.10
55
111
  description: If you need to map JSON to other JSON via some kind of mapping then this
56
112
  gem helps you to do that easily
57
113
  email:
@@ -71,6 +127,9 @@ files:
71
127
  - bin/setup
72
128
  - blackbriar.gemspec
73
129
  - lib/blackbriar.rb
130
+ - lib/blackbriar/node.rb
131
+ - lib/blackbriar/rspec/matchers.rb
132
+ - lib/blackbriar/value_provider.rb
74
133
  - lib/blackbriar/version.rb
75
134
  homepage: https://github.com/container-streams/blackbriar
76
135
  licenses: