poller-json 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,20 @@
1
+ module Matchers
2
+ module JSON
3
+ class DocumentContainsJSONPath
4
+ include JSONPath
5
+
6
+ def initialize(json_path)
7
+ @json_path = json_path
8
+ end
9
+
10
+ # @param document_s [String] - the document given as String
11
+ # Exceptions caught by JSON Parserwill be thrown up the stack
12
+ # ::JSON::ParserError in the case of invalid JSON
13
+ def matches?(document_s)
14
+ json_hash = ::JSON.parse(document_s)
15
+ !value_on_path(json_hash, @json_path).nil?
16
+ end
17
+ end
18
+ end
19
+ end
20
+
@@ -0,0 +1,37 @@
1
+ # This is by no means an implementation of JSONPath as outlined in
2
+ # http://goessner.net/articles/JsonPath/ and implemented in
3
+ # https://github.com/joshbuddy/jsonpath.
4
+ #
5
+ # Instead, the module can handle only a very limited subset of JSONPath and
6
+ # operates on a Hash (result of ::JSON.parse(document)). It makes sense in the
7
+ # context of poller-json and its current set of features.
8
+
9
+ module Matchers
10
+ module JSON
11
+ module JSONPath
12
+ def value_on_path(json_hash, path)
13
+ path = path[1..-1] if path.start_with?('$') # TODO: check jsonpath syntax and raise error
14
+ path_items = path.split('.')
15
+ child_node = json_hash
16
+ path_items.each do |path_item|
17
+ path_item = path_item.sub('[\'', '').sub('\']', '') if path_item.start_with?('[\'')
18
+ path_item, index = path_item.split('[')
19
+ begin
20
+ child_node = child_node.send(:fetch, path_item)
21
+ rescue IndexError
22
+ return nil
23
+ end
24
+ if index
25
+ index = index[0..-2].to_i
26
+ begin
27
+ child_node = child_node.send(:fetch, index)
28
+ rescue IndexError
29
+ return nil
30
+ end
31
+ end
32
+ end
33
+ child_node
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,12 @@
1
+ module Matchers
2
+ module JSON
3
+ class JSONPathHasArray < JSONPathHasValue
4
+
5
+ def initialize(json_path, value)
6
+ @json_path = json_path
7
+ @value = value.is_a?(Array) ? value : ::JSON.parse(value)
8
+ end
9
+
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,12 @@
1
+ module Matchers
2
+ module JSON
3
+ class JSONPathHasObject < JSONPathHasValue
4
+
5
+ def initialize(json_path, value)
6
+ @json_path = json_path
7
+ @value = value.is_a?(Hash) ? value : ::JSON.parse(value)
8
+ end
9
+
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,18 @@
1
+ module Matchers
2
+ module JSON
3
+ class JSONPathHasValue
4
+ include JSONPath
5
+
6
+ def initialize(json_path, value)
7
+ @json_path = json_path
8
+ @value = value
9
+ end
10
+
11
+ def matches?(document_s)
12
+ json_hash = ::JSON.parse(document_s)
13
+ value_on_path(json_hash, @json_path) == @value
14
+ end
15
+
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,5 @@
1
+ module Poller
2
+ module JSON
3
+ VERSION = '0.1.1'
4
+ end
5
+ end
@@ -0,0 +1,7 @@
1
+ require 'json'
2
+ require 'poller'
3
+ require 'matchers/json/json_path'
4
+ require 'matchers/json/document_contains_json_path'
5
+ require 'matchers/json/json_path_has_value'
6
+ require 'matchers/json/json_path_has_object'
7
+ require 'matchers/json/json_path_has_array'
metadata ADDED
@@ -0,0 +1,117 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: poller-json
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Markus Krogemann
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-04-19 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: poller
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: multi_json
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ~>
36
+ - !ruby/object:Gem::Version
37
+ version: 1.7.2
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: 1.7.2
46
+ - !ruby/object:Gem::Dependency
47
+ name: rspec
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ~>
52
+ - !ruby/object:Gem::Version
53
+ version: 2.13.0
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: 2.13.0
62
+ - !ruby/object:Gem::Dependency
63
+ name: simplecov
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ~>
68
+ - !ruby/object:Gem::Version
69
+ version: 0.7.1
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ~>
76
+ - !ruby/object:Gem::Version
77
+ version: 0.7.1
78
+ description: JSON matchers that can be used on top of the 'poller' gem
79
+ email:
80
+ - markus@krogemann.de
81
+ executables: []
82
+ extensions: []
83
+ extra_rdoc_files: []
84
+ files:
85
+ - lib/matchers/json/document_contains_json_path.rb
86
+ - lib/matchers/json/json_path.rb
87
+ - lib/matchers/json/json_path_has_array.rb
88
+ - lib/matchers/json/json_path_has_object.rb
89
+ - lib/matchers/json/json_path_has_value.rb
90
+ - lib/poller/json/version.rb
91
+ - lib/poller/poller_json.rb
92
+ homepage: https://github.com/mkrogemann/poller-json
93
+ licenses:
94
+ - MIT
95
+ post_install_message:
96
+ rdoc_options: []
97
+ require_paths:
98
+ - lib
99
+ required_ruby_version: !ruby/object:Gem::Requirement
100
+ none: false
101
+ requirements:
102
+ - - ! '>='
103
+ - !ruby/object:Gem::Version
104
+ version: '0'
105
+ required_rubygems_version: !ruby/object:Gem::Requirement
106
+ none: false
107
+ requirements:
108
+ - - ! '>='
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ requirements: []
112
+ rubyforge_project:
113
+ rubygems_version: 1.8.25
114
+ signing_key:
115
+ specification_version: 3
116
+ summary: JSON matchers
117
+ test_files: []