page_magic 1.2.8 → 2.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.
Files changed (101) hide show
  1. checksums.yaml +5 -5
  2. data/.rubocop.yml +23 -4
  3. data/.simplecov +5 -3
  4. data/.zsh_config +6 -0
  5. data/Dockerfile +11 -0
  6. data/Gemfile +13 -13
  7. data/Gemfile.lock +136 -148
  8. data/Makefile +17 -0
  9. data/README.md +26 -5
  10. data/Rakefile +12 -2
  11. data/VERSION +1 -1
  12. data/circle.yml +3 -1
  13. data/lib/active_support/core_ext/object/to_query.rb +84 -0
  14. data/lib/page_magic.rb +31 -24
  15. data/lib/page_magic/class_methods.rb +5 -2
  16. data/lib/page_magic/comparator.rb +37 -0
  17. data/lib/page_magic/comparator/fuzzy.rb +23 -0
  18. data/lib/page_magic/comparator/literal.rb +22 -0
  19. data/lib/page_magic/comparator/null.rb +26 -0
  20. data/lib/page_magic/comparator/parameter_map.rb +52 -0
  21. data/lib/page_magic/driver.rb +3 -0
  22. data/lib/page_magic/drivers.rb +6 -5
  23. data/lib/page_magic/drivers/poltergeist.rb +2 -0
  24. data/lib/page_magic/drivers/rack_test.rb +3 -1
  25. data/lib/page_magic/drivers/selenium.rb +4 -2
  26. data/lib/page_magic/element.rb +35 -15
  27. data/lib/page_magic/element/locators.rb +8 -5
  28. data/lib/page_magic/element/not_found.rb +38 -0
  29. data/lib/page_magic/element/query.rb +21 -20
  30. data/lib/page_magic/element/query/multiple_results.rb +21 -0
  31. data/lib/page_magic/element/query/prefetched_result.rb +26 -0
  32. data/lib/page_magic/element/query/single_result.rb +20 -0
  33. data/lib/page_magic/element/selector.rb +41 -16
  34. data/lib/page_magic/element/selector/methods.rb +18 -0
  35. data/lib/page_magic/element/selector/model.rb +21 -0
  36. data/lib/page_magic/element_context.rb +7 -21
  37. data/lib/page_magic/element_definition_builder.rb +20 -24
  38. data/lib/page_magic/elements.rb +65 -69
  39. data/lib/page_magic/elements/config.rb +103 -0
  40. data/lib/page_magic/elements/inheritance_hooks.rb +15 -0
  41. data/lib/page_magic/elements/types.rb +25 -0
  42. data/lib/page_magic/exceptions.rb +6 -1
  43. data/lib/page_magic/instance_methods.rb +8 -3
  44. data/lib/page_magic/mapping.rb +79 -0
  45. data/lib/page_magic/session.rb +15 -35
  46. data/lib/page_magic/session_methods.rb +3 -1
  47. data/lib/page_magic/transitions.rb +49 -0
  48. data/lib/page_magic/utils/string.rb +18 -0
  49. data/lib/page_magic/utils/url.rb +20 -0
  50. data/lib/page_magic/wait_methods.rb +3 -0
  51. data/lib/page_magic/watcher.rb +12 -17
  52. data/lib/page_magic/watchers.rb +31 -15
  53. data/page_magic.gemspec +15 -11
  54. data/spec/lib/active_support/core_ext/object/to_query_test.rb +78 -0
  55. data/spec/page_magic/class_methods_spec.rb +66 -37
  56. data/spec/page_magic/comparator/fuzzy_spec.rb +44 -0
  57. data/spec/page_magic/comparator/literal_spec.rb +41 -0
  58. data/spec/page_magic/comparator/null_spec.rb +35 -0
  59. data/spec/page_magic/comparator/parameter_map_spec.rb +75 -0
  60. data/spec/page_magic/driver_spec.rb +26 -28
  61. data/spec/page_magic/drivers/poltergeist_spec.rb +6 -7
  62. data/spec/page_magic/drivers/rack_test_spec.rb +6 -9
  63. data/spec/page_magic/drivers/selenium_spec.rb +11 -12
  64. data/spec/page_magic/drivers_spec.rb +38 -29
  65. data/spec/page_magic/element/locators_spec.rb +28 -25
  66. data/spec/page_magic/element/not_found_spec.rb +24 -0
  67. data/spec/page_magic/element/query/multiple_results_spec.rb +14 -0
  68. data/spec/page_magic/element/query/single_result_spec.rb +21 -0
  69. data/spec/page_magic/element/query_spec.rb +26 -45
  70. data/spec/page_magic/element/selector_spec.rb +120 -110
  71. data/spec/page_magic/element_context_spec.rb +47 -87
  72. data/spec/page_magic/element_definition_builder_spec.rb +14 -71
  73. data/spec/page_magic/element_spec.rb +256 -0
  74. data/spec/page_magic/elements/config_spec.rb +203 -0
  75. data/spec/page_magic/elements_spec.rb +90 -134
  76. data/spec/page_magic/instance_methods_spec.rb +65 -63
  77. data/spec/page_magic/mapping_spec.rb +181 -0
  78. data/spec/page_magic/session_methods_spec.rb +29 -25
  79. data/spec/page_magic/session_spec.rb +109 -199
  80. data/spec/page_magic/transitions_spec.rb +43 -0
  81. data/spec/page_magic/utils/string_spec.rb +29 -0
  82. data/spec/page_magic/utils/url_spec.rb +9 -0
  83. data/spec/page_magic/wait_methods_spec.rb +16 -22
  84. data/spec/page_magic/watcher_spec.rb +22 -0
  85. data/spec/page_magic/watchers_spec.rb +58 -62
  86. data/spec/page_magic_spec.rb +37 -29
  87. data/spec/spec_helper.rb +9 -2
  88. data/spec/support/shared_contexts.rb +3 -1
  89. data/spec/support/shared_examples.rb +17 -17
  90. metadata +101 -48
  91. data/lib/page_magic/element/query_builder.rb +0 -48
  92. data/lib/page_magic/element/selector_methods.rb +0 -13
  93. data/lib/page_magic/matcher.rb +0 -121
  94. data/spec/element_spec.rb +0 -249
  95. data/spec/page_magic/element/query_builder_spec.rb +0 -108
  96. data/spec/page_magic/matcher_spec.rb +0 -336
  97. data/spec/support/shared_contexts/files_context.rb +0 -7
  98. data/spec/support/shared_contexts/nested_elements_html_context.rb +0 -16
  99. data/spec/support/shared_contexts/rack_application_context.rb +0 -9
  100. data/spec/support/shared_contexts/webapp_fixture_context.rb +0 -39
  101. data/spec/watcher_spec.rb +0 -61
metadata CHANGED
@@ -1,115 +1,143 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: page_magic
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.8
4
+ version: 2.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Leon Davis
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-10-03 00:00:00.000000000 Z
11
+ date: 2021-07-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: capybara
14
+ name: activesupport
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '2.5'
19
+ version: '0'
20
20
  type: :runtime
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: '2.5'
26
+ version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
- name: activesupport
28
+ name: capybara
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: '4'
33
+ version: '3.0'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - "~>"
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '3.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: github-markup
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
39
46
  - !ruby/object:Gem::Version
40
- version: '4'
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: jeweler
43
57
  requirement: !ruby/object:Gem::Requirement
44
58
  requirements:
45
- - - "~>"
59
+ - - ">="
46
60
  - !ruby/object:Gem::Version
47
- version: '2.0'
61
+ version: '0'
48
62
  type: :development
49
63
  prerelease: false
50
64
  version_requirements: !ruby/object:Gem::Requirement
51
65
  requirements:
52
- - - "~>"
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: redcarpet
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
53
81
  - !ruby/object:Gem::Version
54
- version: '2.0'
82
+ version: '0'
55
83
  - !ruby/object:Gem::Dependency
56
84
  name: rubocop
57
85
  requirement: !ruby/object:Gem::Requirement
58
86
  requirements:
59
- - - "~>"
87
+ - - ">="
60
88
  - !ruby/object:Gem::Version
61
- version: '0.34'
89
+ version: '0'
62
90
  type: :development
63
91
  prerelease: false
64
92
  version_requirements: !ruby/object:Gem::Requirement
65
93
  requirements:
66
- - - "~>"
94
+ - - ">="
67
95
  - !ruby/object:Gem::Version
68
- version: '0.34'
96
+ version: '0'
69
97
  - !ruby/object:Gem::Dependency
70
- name: yard
98
+ name: rubocop-rspec
71
99
  requirement: !ruby/object:Gem::Requirement
72
100
  requirements:
73
- - - "~>"
101
+ - - ">="
74
102
  - !ruby/object:Gem::Version
75
- version: '0.8'
103
+ version: '0'
76
104
  type: :development
77
105
  prerelease: false
78
106
  version_requirements: !ruby/object:Gem::Requirement
79
107
  requirements:
80
- - - "~>"
108
+ - - ">="
81
109
  - !ruby/object:Gem::Version
82
- version: '0.8'
110
+ version: '0'
83
111
  - !ruby/object:Gem::Dependency
84
- name: redcarpet
112
+ name: ruby-debug-ide
85
113
  requirement: !ruby/object:Gem::Requirement
86
114
  requirements:
87
- - - "~>"
115
+ - - ">="
88
116
  - !ruby/object:Gem::Version
89
- version: '3.3'
117
+ version: '0'
90
118
  type: :development
91
119
  prerelease: false
92
120
  version_requirements: !ruby/object:Gem::Requirement
93
121
  requirements:
94
- - - "~>"
122
+ - - ">="
95
123
  - !ruby/object:Gem::Version
96
- version: '3.3'
124
+ version: '0'
97
125
  - !ruby/object:Gem::Dependency
98
- name: github-markup
126
+ name: yard
99
127
  requirement: !ruby/object:Gem::Requirement
100
128
  requirements:
101
129
  - - "~>"
102
130
  - !ruby/object:Gem::Version
103
- version: '1.4'
131
+ version: '0.8'
104
132
  type: :development
105
133
  prerelease: false
106
134
  version_requirements: !ruby/object:Gem::Requirement
107
135
  requirements:
108
136
  - - "~>"
109
137
  - !ruby/object:Gem::Version
110
- version: '1.4'
138
+ version: '0.8'
111
139
  description: Framework for modeling and interacting with webpages which wraps capybara
112
- email: info@lad-tech.com
140
+ email: info@lvl-up.uk
113
141
  executables: []
114
142
  extensions: []
115
143
  extra_rdoc_files:
@@ -121,14 +149,23 @@ files:
121
149
  - ".rubocop.yml"
122
150
  - ".simplecov"
123
151
  - ".yardopts"
152
+ - ".zsh_config"
153
+ - Dockerfile
124
154
  - Gemfile
125
155
  - Gemfile.lock
156
+ - Makefile
126
157
  - README.md
127
158
  - Rakefile
128
159
  - VERSION
129
160
  - circle.yml
161
+ - lib/active_support/core_ext/object/to_query.rb
130
162
  - lib/page_magic.rb
131
163
  - lib/page_magic/class_methods.rb
164
+ - lib/page_magic/comparator.rb
165
+ - lib/page_magic/comparator/fuzzy.rb
166
+ - lib/page_magic/comparator/literal.rb
167
+ - lib/page_magic/comparator/null.rb
168
+ - lib/page_magic/comparator/parameter_map.rb
132
169
  - lib/page_magic/driver.rb
133
170
  - lib/page_magic/drivers.rb
134
171
  - lib/page_magic/drivers/poltergeist.rb
@@ -136,56 +173,73 @@ files:
136
173
  - lib/page_magic/drivers/selenium.rb
137
174
  - lib/page_magic/element.rb
138
175
  - lib/page_magic/element/locators.rb
176
+ - lib/page_magic/element/not_found.rb
139
177
  - lib/page_magic/element/query.rb
140
- - lib/page_magic/element/query_builder.rb
178
+ - lib/page_magic/element/query/multiple_results.rb
179
+ - lib/page_magic/element/query/prefetched_result.rb
180
+ - lib/page_magic/element/query/single_result.rb
141
181
  - lib/page_magic/element/selector.rb
142
- - lib/page_magic/element/selector_methods.rb
182
+ - lib/page_magic/element/selector/methods.rb
183
+ - lib/page_magic/element/selector/model.rb
143
184
  - lib/page_magic/element_context.rb
144
185
  - lib/page_magic/element_definition_builder.rb
145
186
  - lib/page_magic/elements.rb
187
+ - lib/page_magic/elements/config.rb
188
+ - lib/page_magic/elements/inheritance_hooks.rb
189
+ - lib/page_magic/elements/types.rb
146
190
  - lib/page_magic/exceptions.rb
147
191
  - lib/page_magic/instance_methods.rb
148
- - lib/page_magic/matcher.rb
192
+ - lib/page_magic/mapping.rb
149
193
  - lib/page_magic/session.rb
150
194
  - lib/page_magic/session_methods.rb
195
+ - lib/page_magic/transitions.rb
196
+ - lib/page_magic/utils/string.rb
197
+ - lib/page_magic/utils/url.rb
151
198
  - lib/page_magic/wait_methods.rb
152
199
  - lib/page_magic/watcher.rb
153
200
  - lib/page_magic/watchers.rb
154
201
  - page_magic.gemspec
155
- - spec/element_spec.rb
202
+ - spec/lib/active_support/core_ext/object/to_query_test.rb
156
203
  - spec/page_magic/class_methods_spec.rb
204
+ - spec/page_magic/comparator/fuzzy_spec.rb
205
+ - spec/page_magic/comparator/literal_spec.rb
206
+ - spec/page_magic/comparator/null_spec.rb
207
+ - spec/page_magic/comparator/parameter_map_spec.rb
157
208
  - spec/page_magic/driver_spec.rb
158
209
  - spec/page_magic/drivers/poltergeist_spec.rb
159
210
  - spec/page_magic/drivers/rack_test_spec.rb
160
211
  - spec/page_magic/drivers/selenium_spec.rb
161
212
  - spec/page_magic/drivers_spec.rb
162
213
  - spec/page_magic/element/locators_spec.rb
163
- - spec/page_magic/element/query_builder_spec.rb
214
+ - spec/page_magic/element/not_found_spec.rb
215
+ - spec/page_magic/element/query/multiple_results_spec.rb
216
+ - spec/page_magic/element/query/single_result_spec.rb
164
217
  - spec/page_magic/element/query_spec.rb
165
218
  - spec/page_magic/element/selector_spec.rb
166
219
  - spec/page_magic/element_context_spec.rb
167
220
  - spec/page_magic/element_definition_builder_spec.rb
221
+ - spec/page_magic/element_spec.rb
222
+ - spec/page_magic/elements/config_spec.rb
168
223
  - spec/page_magic/elements_spec.rb
169
224
  - spec/page_magic/instance_methods_spec.rb
170
- - spec/page_magic/matcher_spec.rb
225
+ - spec/page_magic/mapping_spec.rb
171
226
  - spec/page_magic/session_methods_spec.rb
172
227
  - spec/page_magic/session_spec.rb
228
+ - spec/page_magic/transitions_spec.rb
229
+ - spec/page_magic/utils/string_spec.rb
230
+ - spec/page_magic/utils/url_spec.rb
173
231
  - spec/page_magic/wait_methods_spec.rb
232
+ - spec/page_magic/watcher_spec.rb
174
233
  - spec/page_magic/watchers_spec.rb
175
234
  - spec/page_magic_spec.rb
176
235
  - spec/spec_helper.rb
177
236
  - spec/support/shared_contexts.rb
178
- - spec/support/shared_contexts/files_context.rb
179
- - spec/support/shared_contexts/nested_elements_html_context.rb
180
- - spec/support/shared_contexts/rack_application_context.rb
181
- - spec/support/shared_contexts/webapp_fixture_context.rb
182
237
  - spec/support/shared_examples.rb
183
- - spec/watcher_spec.rb
184
238
  homepage: https://github.com/ladtech/page_magic
185
239
  licenses:
186
240
  - ruby
187
241
  metadata: {}
188
- post_install_message:
242
+ post_install_message:
189
243
  rdoc_options: []
190
244
  require_paths:
191
245
  - lib
@@ -200,9 +254,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
200
254
  - !ruby/object:Gem::Version
201
255
  version: '0'
202
256
  requirements: []
203
- rubyforge_project:
204
- rubygems_version: 2.4.6
205
- signing_key:
257
+ rubygems_version: 3.1.4
258
+ signing_key:
206
259
  specification_version: 4
207
260
  summary: Framework for modeling and interacting with webpages
208
261
  test_files: []
@@ -1,48 +0,0 @@
1
- require 'capybara/query'
2
- require 'page_magic/element/query'
3
- module PageMagic
4
- class Element
5
- # class QueryBuilder - builds query to be executed on capybara driver, queries can include:
6
- # - requirements on element type
7
- # - selection criteria, modeled through the Selector class
8
- # - options
9
- class QueryBuilder
10
- class << self
11
- # Find a query using it's name
12
- # @param [Symbol] type the name of the required query in snakecase format
13
- # @return [QueryBuilder] returns the predefined query with the given name
14
- def find(type)
15
- query = constants.find { |constant| constant.to_s.casecmp(type.to_s).zero? }
16
- return ELEMENT unless query
17
- const_get(query)
18
- end
19
- end
20
-
21
- attr_reader :type
22
-
23
- # @param type -
24
- def initialize(type = nil)
25
- @type = type
26
- end
27
-
28
- # Build query parameters for Capybara's find method
29
- # @param [Hash] locator the location method e.g. text: 'button text'
30
- # @param [Hash] capybara_options additional options to be provided to Capybara. e.g. count: 3
31
- # @return [Array] list of compatible capybara query parameters.
32
- def build(locator, capybara_options = {}, multiple_results: false)
33
- args = [].tap do |array|
34
- selector = Selector.find(locator.keys.first)
35
- array << selector.build(type, locator.values.first)
36
- array << capybara_options unless capybara_options.empty?
37
- end.flatten
38
-
39
- Query.new(args, multiple_results: multiple_results)
40
- end
41
-
42
- ELEMENT = QueryBuilder.new
43
- TEXT_FIELD = CHECKBOX = SELECT_LIST = RADIO = TEXTAREA = QueryBuilder.new(:field)
44
- LINK = QueryBuilder.new(:link)
45
- BUTTON = QueryBuilder.new(:button)
46
- end
47
- end
48
- end
@@ -1,13 +0,0 @@
1
- module PageMagic
2
- class Element
3
- # module SelectorMethods - adds method for getting and setting an element selector
4
- module SelectorMethods
5
- # Gets/Sets a selector
6
- # @param [Hash] selector method for locating the browser element. E.g. text: 'the text'
7
- def selector(selector = nil)
8
- return @selector unless selector
9
- @selector = selector
10
- end
11
- end
12
- end
13
- end
@@ -1,121 +0,0 @@
1
- require 'active_support/core_ext/object/to_query'
2
- module PageMagic
3
- # models mapping used to relate pages to uris
4
- class Matcher
5
- attr_reader :path, :parameters, :fragment
6
-
7
- # @param [Object] path String or Regular expression to match with
8
- # @param [Hash] parameters mapping of parameter name to literal or regex to match with
9
- # @param [Object] fragment String or Regular expression to match with
10
- # @raise [MatcherInvalidException] if at least one component is not specified
11
- def initialize(path = nil, parameters: nil, fragment: nil)
12
- raise MatcherInvalidException unless path || parameters || fragment
13
- @path = path
14
- @parameters = parameters
15
- @fragment = fragment
16
- end
17
-
18
- # @return [Boolean] true if no component contains a Regexp
19
- def can_compute_uri?
20
- !fuzzy?(fragment) && !fuzzy?(path) && !fuzzy?(parameters)
21
- end
22
-
23
- # @return [String] uri represented by this mapping
24
- def compute_uri
25
- path.to_s.tap do |uri|
26
- uri << "?#{parameters.to_query}" if parameters
27
- uri << "##{fragment}" if fragment
28
- end
29
- end
30
-
31
- # @return [Fixnum] hash for instance
32
- def hash
33
- [path, parameters, fragment].hash
34
- end
35
-
36
- # @param [String] uri
37
- # @return [Boolean] returns true if the uri is matched against this matcher
38
- def match?(uri)
39
- uri = URI(uri)
40
- path_valid?(uri.path) && query_string_valid?(uri.query) && fragment_valid?(uri.fragment)
41
- end
42
-
43
- # compare this matcher against another
44
- # @param [Matcher] other
45
- # @return [Fixnum] -1 = smaller, 0 = equal to, 1 = greater than
46
- def <=>(other)
47
- results = [:path, :parameters, :fragment].collect do |component|
48
- compare(send(component), other.send(component))
49
- end
50
- results.find { |result| !result.zero? } || 0
51
- end
52
-
53
- # check equality
54
- # @param [Matcher] other
55
- # @return [Boolean]
56
- def ==(other)
57
- return false unless other.is_a?(Matcher)
58
- path == other.path && parameters == other.parameters && fragment == other.fragment
59
- end
60
-
61
- alias eql? ==
62
-
63
- private
64
-
65
- def compare(this, other)
66
- return presence_comparison(this, other) unless this && other
67
- fuzzy_comparison(this, other)
68
- end
69
-
70
- def compatible?(string, comparitor)
71
- return true if comparitor.nil?
72
- if fuzzy?(comparitor)
73
- string =~ comparitor ? true : false
74
- else
75
- string == comparitor
76
- end
77
- end
78
-
79
- def fragment_valid?(string)
80
- compatible?(string, fragment)
81
- end
82
-
83
- def fuzzy?(component)
84
- return false unless component
85
- if component.is_a?(Hash)
86
- component.values.any? { |o| fuzzy?(o) }
87
- else
88
- component.is_a?(Regexp)
89
- end
90
- end
91
-
92
- def fuzzy_comparison(this, other)
93
- if fuzzy?(this)
94
- fuzzy?(other) ? 0 : 1
95
- else
96
- fuzzy?(other) ? -1 : 0
97
- end
98
- end
99
-
100
- def parameters_hash(string)
101
- CGI.parse(string.to_s.downcase).collect { |key, value| [key.downcase, value.first] }.to_h
102
- end
103
-
104
- def path_valid?(string)
105
- compatible?(string, path)
106
- end
107
-
108
- def presence_comparison(this, other)
109
- return 0 if this.nil? && other.nil?
110
- return 1 if this.nil? && other
111
- -1
112
- end
113
-
114
- def query_string_valid?(string)
115
- return true unless parameters
116
- !parameters.any? do |key, value|
117
- !compatible?(parameters_hash(string)[key.downcase.to_s], value)
118
- end
119
- end
120
- end
121
- end