blackbriar 0.0.1 → 0.0.2
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 +4 -4
- data/blackbriar.gemspec +6 -0
- data/lib/blackbriar.rb +7 -1
- data/lib/blackbriar/node.rb +50 -0
- data/lib/blackbriar/rspec/matchers.rb +75 -0
- data/lib/blackbriar/value_provider.rb +30 -0
- data/lib/blackbriar/version.rb +1 -1
- metadata +61 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bfa258cf5a2bafcb54e99a3846d7b4c82cce6c61
|
4
|
+
data.tar.gz: 665a8f8d6a4188c3be984bb7d9d9888d3c230a8c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6712411a6e5d378759bf046260ea4a0feb72edf330f500de0832a6e596f638998c653bf6f031f47ba65d4bc66b2c2741795d5491ae942ad74a7938eeceac8bf4
|
7
|
+
data.tar.gz: 04ef97b2da99d8d6ae7e951c8137f7ccca8d0806882b283da2bc0ce6a7a4ad9b56e13966fc7b80ae5df5b1ece8f8f233e883e27ecd928d7bd41c7666f5d255cd
|
data/blackbriar.gemspec
CHANGED
@@ -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
|
data/lib/blackbriar.rb
CHANGED
@@ -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
|
data/lib/blackbriar/version.rb
CHANGED
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.
|
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-
|
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:
|