page_magic 1.2.7 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
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 +135 -144
  8. data/Makefile +17 -0
  9. data/README.md +48 -4
  10. data/Rakefile +12 -2
  11. data/VERSION +1 -1
  12. data/circle.yml +4 -2
  13. data/lib/active_support/core_ext/object/to_query.rb +84 -0
  14. data/lib/page_magic.rb +22 -20
  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 -68
  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 +17 -13
  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 +200 -0
  75. data/spec/page_magic/elements_spec.rb +90 -127
  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 +31 -30
  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.7
4
+ version: 2.0.0
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-02-17 00:00:00.000000000 Z
11
+ date: 2021-07-01 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.8
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