page_magic 1.2.8 → 1.2.9

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 54342b32a9fb2d649e4cada494b95c5be2fafd72
4
- data.tar.gz: d2bd77b31ef141f7905859acc4713eb16957fe17
3
+ metadata.gz: cdfe7b7eb4aa09e8eab7a961a1b03156f4650af8
4
+ data.tar.gz: faaf84a4ff0c42dffa54b405bfbcb31812a3be6e
5
5
  SHA512:
6
- metadata.gz: f0a0a3d5e51de8e34df2518ad3bebf2c1b87fdaca9f4e2ab1d35a1317f83ae7e8d096bc014481b276d326019201ff9537b3ef38a884b27d938cd5c63241237c3
7
- data.tar.gz: 90a9469dde8f3f435a7bea31e9dbddb7a98cfd46b5cd62f43f62ed9b28c5334fb13542219abb5e4313fa12d7acf95add7ee050d1cbfc07230f164e2d12457081
6
+ metadata.gz: 352cdaa5d434b979ec5061193e9864f7fcb1b2d3418a4de064be94fef99ce71288da4421c4cfaceb1079fc0349e4b7c1ab4852c91c0f626bc9c7922f20f80b55
7
+ data.tar.gz: 1b22dfc283761f9ded938a899d115b7ffb3b07c96e58736879f33161621b6ccfb1510d0f1886bec75e30a95d1d5c4656613fc9671c9cc79a23e2d0d5f21cca69
@@ -4,6 +4,8 @@ Metrics/LineLength:
4
4
  AllCops:
5
5
  TargetRubyVersion: 2.1
6
6
  Exclude:
7
+ - 'lib/active_support/**/*'
8
+ - 'spec/lib/active_support/**/*'
7
9
  - 'pkg/**/*'
8
10
  - 'vendor/**/*'
9
11
  - 'coverage/**/*'
@@ -17,4 +19,18 @@ Metrics/MethodLength:
17
19
  Max: 11
18
20
 
19
21
  Style/MethodMissing:
20
- Enabled: false
22
+ Enabled: false
23
+
24
+ Metrics/BlockLength:
25
+ Enabled: true
26
+ Exclude:
27
+ - 'spec/**/*'
28
+
29
+ Style/PercentLiteralDelimiters:
30
+ PreferredDelimiters:
31
+ default: ()
32
+ '%i': '[]'
33
+ '%I': '[]'
34
+ '%r': '{}'
35
+ '%w': '[]'
36
+ '%W': '[]'
data/.simplecov CHANGED
@@ -1,8 +1,8 @@
1
1
  require 'pullreview/coverage'
2
- require "codeclimate-test-reporter"
3
2
 
4
- SimpleCov.formatters = [SimpleCov::Formatter::HTMLFormatter,PullReview::Coverage::Formatter,CodeClimate::TestReporter::Formatter]
3
+ SimpleCov.formatters = [SimpleCov::Formatter::HTMLFormatter,PullReview::Coverage::Formatter]
5
4
 
6
5
  SimpleCov.start do
7
6
  add_filter '/spec/'
7
+ add_filter '/lib/active_support/core_ext/object/to_query.rb'
8
8
  end
data/Gemfile CHANGED
@@ -1,24 +1,24 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
+ gem 'activesupport-inflector'
3
4
  gem 'capybara', '>= 2.5'
4
- gem 'activesupport', '~> 4'
5
5
 
6
6
  group :test do
7
- gem 'watir-webdriver'
8
- gem 'sinatra'
9
- gem 'rspec', require: 'rspec/core/rake_task'
10
- gem 'simplecov', require: false
11
- gem 'poltergeist'
7
+ gem 'arbre'
12
8
  gem 'codeclimate-test-reporter', group: :test, require: nil
9
+ gem 'poltergeist'
13
10
  gem 'pullreview-coverage', require: false
14
11
  gem 'reek'
15
- gem 'arbre'
12
+ gem 'rspec', require: 'rspec/core/rake_task'
13
+ gem 'simplecov', require: false
14
+ gem 'sinatra'
15
+ gem 'watir-webdriver'
16
16
  end
17
17
 
18
18
  group :development do
19
+ gem 'github-markup', '~> 1.4'
19
20
  gem 'jeweler', '~> 2.0'
21
+ gem 'redcarpet', '~> 3.3'
20
22
  gem 'rubocop', '~> 0.34', require: 'rubocop/rake_task'
21
23
  gem 'yard', '~> 0.8'
22
- gem 'redcarpet', '~> 3.3'
23
- gem 'github-markup', '~> 1.4'
24
24
  end
@@ -1,14 +1,13 @@
1
1
  GEM
2
2
  remote: https://rubygems.org/
3
3
  specs:
4
- activesupport (4.2.7)
4
+ activesupport (4.2.10)
5
5
  i18n (~> 0.7)
6
- json (~> 1.7, >= 1.7.7)
7
6
  minitest (~> 5.1)
8
7
  thread_safe (~> 0.3, >= 0.3.4)
9
8
  tzinfo (~> 1.1)
10
- addressable (2.5.2)
11
- public_suffix (>= 2.0.2, < 4.0)
9
+ activesupport-inflector (0.1.0)
10
+ addressable (2.4.0)
12
11
  arbre (1.1.1)
13
12
  activesupport (>= 3.0.0)
14
13
  ast (2.3.0)
@@ -17,159 +16,157 @@ GEM
17
16
  ice_nine (~> 0.11.0)
18
17
  thread_safe (~> 0.3, >= 0.3.1)
19
18
  builder (3.2.3)
20
- capybara (2.7.1)
19
+ capybara (2.15.2)
21
20
  addressable
22
- mime-types (>= 1.16)
21
+ mini_mime (>= 0.1.3)
23
22
  nokogiri (>= 1.3.3)
24
23
  rack (>= 1.0.0)
25
24
  rack-test (>= 0.5.4)
26
25
  xpath (~> 2.0)
27
- certifi (2016.08.02)
28
- childprocess (0.5.9)
26
+ certifi (2017.07.27)
27
+ childprocess (0.8.0)
29
28
  ffi (~> 1.0, >= 1.0.11)
30
29
  cliver (0.3.2)
31
- codeclimate-engine-rb (0.3.1)
30
+ codeclimate-engine-rb (0.4.0)
32
31
  virtus (~> 1.0)
33
- codeclimate-test-reporter (0.6.0)
34
- simplecov (>= 0.7.1, < 1.0.0)
32
+ codeclimate-test-reporter (1.0.8)
33
+ simplecov (<= 0.13)
35
34
  coercible (1.0.0)
36
35
  descendants_tracker (~> 0.0.1)
37
36
  descendants_tracker (0.0.4)
38
37
  thread_safe (~> 0.3, >= 0.3.1)
39
- diff-lcs (1.2.5)
38
+ diff-lcs (1.3)
40
39
  docile (1.1.5)
41
40
  equalizer (0.0.11)
42
41
  faraday (0.9.2)
43
42
  multipart-post (>= 1.2, < 3)
44
- ffi (1.9.14)
43
+ ffi (1.9.18)
45
44
  git (1.3.0)
46
- github-markup (1.4.0)
47
- github_api (0.11.3)
48
- addressable (~> 2.3)
49
- descendants_tracker (~> 0.0.1)
45
+ github-markup (1.6.1)
46
+ github_api (0.16.0)
47
+ addressable (~> 2.4.0)
48
+ descendants_tracker (~> 0.0.4)
50
49
  faraday (~> 0.8, < 0.10)
51
- hashie (>= 1.2)
52
- multi_json (>= 1.7.5, < 2.0)
53
- nokogiri (~> 1.6.0)
54
- oauth2
50
+ hashie (>= 3.4)
51
+ mime-types (>= 1.16, < 3.0)
52
+ oauth2 (~> 1.0)
55
53
  hashie (3.5.6)
56
54
  highline (1.7.8)
57
- i18n (0.7.0)
55
+ i18n (0.8.6)
58
56
  ice_nine (0.11.2)
59
- jeweler (2.3.5)
57
+ jeweler (2.3.7)
60
58
  builder
61
- bundler (>= 1.0)
59
+ bundler (>= 1)
62
60
  git (>= 1.2.5)
63
- github_api (~> 0.11.0)
61
+ github_api (~> 0.16.0)
64
62
  highline (>= 1.6.15)
65
63
  nokogiri (>= 1.5.10)
66
64
  psych (~> 2.2)
67
65
  rake
68
66
  rdoc
69
67
  semver2
70
- json (1.8.6)
68
+ json (2.1.0)
71
69
  jwt (1.5.6)
72
- mime-types (3.1)
73
- mime-types-data (~> 3.2015)
74
- mime-types-data (3.2016.0521)
75
- mini_portile2 (2.1.0)
76
- minitest (5.9.0)
70
+ mime-types (2.99.3)
71
+ mini_mime (0.1.4)
72
+ mini_portile2 (2.3.0)
73
+ minitest (5.10.3)
77
74
  multi_json (1.12.2)
78
75
  multi_xml (0.6.0)
79
76
  multipart-post (2.0.0)
80
- nokogiri (1.6.8.1)
81
- mini_portile2 (~> 2.1.0)
77
+ nokogiri (1.8.1)
78
+ mini_portile2 (~> 2.3.0)
82
79
  oauth2 (1.4.0)
83
80
  faraday (>= 0.8, < 0.13)
84
81
  jwt (~> 1.0)
85
82
  multi_json (~> 1.3)
86
83
  multi_xml (~> 0.5)
87
84
  rack (>= 1.2, < 3)
88
- parser (2.3.1.2)
85
+ parallel (1.12.0)
86
+ parser (2.4.0.0)
89
87
  ast (~> 2.2)
90
- poltergeist (1.10.0)
88
+ poltergeist (1.16.0)
91
89
  capybara (~> 2.1)
92
90
  cliver (~> 0.3.1)
93
91
  websocket-driver (>= 0.2.0)
94
92
  powerpack (0.1.1)
95
93
  psych (2.2.4)
96
- public_suffix (3.0.0)
97
94
  pullreview-coverage (0.0.5)
98
95
  certifi
99
96
  simplecov (>= 0.7.1, < 1.0.0)
100
97
  rack (1.6.8)
101
98
  rack-protection (1.5.3)
102
99
  rack
103
- rack-test (0.6.3)
104
- rack (>= 1.0)
105
- rainbow (2.1.0)
100
+ rack-test (0.7.0)
101
+ rack (>= 1.0, < 3)
102
+ rainbow (2.2.2)
103
+ rake
106
104
  rake (12.1.0)
107
105
  rdoc (5.1.0)
108
- redcarpet (3.3.4)
109
- reek (4.2.3)
110
- codeclimate-engine-rb (~> 0.3.1)
111
- parser (~> 2.3.1, >= 2.3.1.2)
106
+ redcarpet (3.4.0)
107
+ reek (4.7.2)
108
+ codeclimate-engine-rb (~> 0.4.0)
109
+ parser (>= 2.4.0.0, < 2.5)
112
110
  rainbow (~> 2.0)
113
- rspec (3.5.0)
114
- rspec-core (~> 3.5.0)
115
- rspec-expectations (~> 3.5.0)
116
- rspec-mocks (~> 3.5.0)
117
- rspec-core (3.5.2)
118
- rspec-support (~> 3.5.0)
119
- rspec-expectations (3.5.0)
111
+ rspec (3.6.0)
112
+ rspec-core (~> 3.6.0)
113
+ rspec-expectations (~> 3.6.0)
114
+ rspec-mocks (~> 3.6.0)
115
+ rspec-core (3.6.0)
116
+ rspec-support (~> 3.6.0)
117
+ rspec-expectations (3.6.0)
120
118
  diff-lcs (>= 1.2.0, < 2.0)
121
- rspec-support (~> 3.5.0)
122
- rspec-mocks (3.5.0)
119
+ rspec-support (~> 3.6.0)
120
+ rspec-mocks (3.6.0)
123
121
  diff-lcs (>= 1.2.0, < 2.0)
124
- rspec-support (~> 3.5.0)
125
- rspec-support (3.5.0)
126
- rubocop (0.42.0)
127
- parser (>= 2.3.1.1, < 3.0)
122
+ rspec-support (~> 3.6.0)
123
+ rspec-support (3.6.0)
124
+ rubocop (0.50.0)
125
+ parallel (~> 1.10)
126
+ parser (>= 2.3.3.1, < 3.0)
128
127
  powerpack (~> 0.1)
129
- rainbow (>= 1.99.1, < 3.0)
128
+ rainbow (>= 2.2.2, < 3.0)
130
129
  ruby-progressbar (~> 1.7)
131
130
  unicode-display_width (~> 1.0, >= 1.0.1)
132
- ruby-progressbar (1.8.1)
133
- rubyzip (1.2.0)
134
- selenium-webdriver (2.53.4)
131
+ ruby-progressbar (1.9.0)
132
+ rubyzip (1.2.1)
133
+ selenium-webdriver (3.6.0)
135
134
  childprocess (~> 0.5)
136
135
  rubyzip (~> 1.0)
137
- websocket (~> 1.0)
138
136
  semver2 (3.4.2)
139
- simplecov (0.12.0)
137
+ simplecov (0.13.0)
140
138
  docile (~> 1.1.0)
141
139
  json (>= 1.8, < 3)
142
140
  simplecov-html (~> 0.10.0)
143
- simplecov-html (0.10.0)
144
- sinatra (1.4.7)
141
+ simplecov-html (0.10.2)
142
+ sinatra (1.4.8)
145
143
  rack (~> 1.5)
146
144
  rack-protection (~> 1.4)
147
145
  tilt (>= 1.3, < 3)
148
146
  thread_safe (0.3.6)
149
- tilt (2.0.5)
150
- tzinfo (1.2.2)
147
+ tilt (2.0.8)
148
+ tzinfo (1.2.3)
151
149
  thread_safe (~> 0.1)
152
- unicode-display_width (1.1.0)
150
+ unicode-display_width (1.3.0)
153
151
  virtus (1.0.5)
154
152
  axiom-types (~> 0.1)
155
153
  coercible (~> 1.0)
156
154
  descendants_tracker (~> 0.0, >= 0.0.3)
157
155
  equalizer (~> 0.0, >= 0.0.9)
158
- watir-webdriver (0.9.3)
156
+ watir-webdriver (0.9.9)
159
157
  selenium-webdriver (>= 2.46.2)
160
- websocket (1.2.3)
161
- websocket-driver (0.6.4)
158
+ websocket-driver (0.7.0)
162
159
  websocket-extensions (>= 0.1.0)
163
160
  websocket-extensions (0.1.2)
164
- xpath (2.0.0)
161
+ xpath (2.1.0)
165
162
  nokogiri (~> 1.3)
166
- yard (0.9.5)
163
+ yard (0.9.9)
167
164
 
168
165
  PLATFORMS
169
166
  ruby
170
167
 
171
168
  DEPENDENCIES
172
- activesupport (~> 4)
169
+ activesupport-inflector
173
170
  arbre
174
171
  capybara (>= 2.5)
175
172
  codeclimate-test-reporter
data/Rakefile CHANGED
@@ -19,4 +19,12 @@ end
19
19
 
20
20
  Jeweler::RubygemsDotOrgTasks.new
21
21
 
22
- task default: [:spec, 'rubocop:auto_correct']
22
+ require 'rake/testtask'
23
+ Rake::TestTask.new do |t|
24
+ t.libs << 'spec'
25
+ t.pattern = 'spec/**/*_test.rb'
26
+ t.warning = true
27
+ t.verbose = true
28
+ end
29
+
30
+ task default: [:spec, :test, 'rubocop:auto_correct']
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.2.8
1
+ 1.2.9
data/circle.yml CHANGED
@@ -3,4 +3,6 @@ machine:
3
3
  version: '2.2'
4
4
  test:
5
5
  override:
6
- - bundle exec rake
6
+ - bundle exec rake
7
+ post:
8
+ - CODECLIMATE_REPO_TOKEN=$CODECLIMATE_REPO_TOKEN bundle exec codeclimate-test-reporter
@@ -0,0 +1,84 @@
1
+ require 'cgi'
2
+
3
+ class Object
4
+ # Alias of <tt>to_s</tt>.
5
+ def to_param
6
+ to_s
7
+ end
8
+
9
+ # Converts an object into a string suitable for use as a URL query string,
10
+ # using the given <tt>key</tt> as the param name.
11
+ def to_query(key)
12
+ "#{CGI.escape(key.to_param)}=#{CGI.escape(to_param.to_s)}"
13
+ end
14
+ end
15
+
16
+ class NilClass
17
+ # Returns +self+.
18
+ def to_param
19
+ self
20
+ end
21
+ end
22
+
23
+ class TrueClass
24
+ # Returns +self+.
25
+ def to_param
26
+ self
27
+ end
28
+ end
29
+
30
+ class FalseClass
31
+ # Returns +self+.
32
+ def to_param
33
+ self
34
+ end
35
+ end
36
+
37
+ class Array
38
+ # Calls <tt>to_param</tt> on all its elements and joins the result with
39
+ # slashes. This is used by <tt>url_for</tt> in Action Pack.
40
+ def to_param
41
+ collect(&:to_param).join '/'
42
+ end
43
+
44
+ # Converts an array into a string suitable for use as a URL query string,
45
+ # using the given +key+ as the param name.
46
+ #
47
+ # ['Rails', 'coding'].to_query('hobbies') # => "hobbies%5B%5D=Rails&hobbies%5B%5D=coding"
48
+ def to_query(key)
49
+ prefix = "#{key}[]"
50
+
51
+ if empty?
52
+ nil.to_query(prefix)
53
+ else
54
+ collect { |value| value.to_query(prefix) }.join '&'
55
+ end
56
+ end
57
+ end
58
+
59
+ class Hash
60
+ # Returns a string representation of the receiver suitable for use as a URL
61
+ # query string:
62
+ #
63
+ # {name: 'David', nationality: 'Danish'}.to_query
64
+ # # => "name=David&nationality=Danish"
65
+ #
66
+ # An optional namespace can be passed to enclose key names:
67
+ #
68
+ # {name: 'David', nationality: 'Danish'}.to_query('user')
69
+ # # => "user%5Bname%5D=David&user%5Bnationality%5D=Danish"
70
+ #
71
+ # The string pairs "key=value" that conform the query string
72
+ # are sorted lexicographically in ascending order.
73
+ #
74
+ # This method is also aliased as +to_param+.
75
+ def to_query(namespace = nil)
76
+ collect do |key, value|
77
+ unless (value.is_a?(Hash) || value.is_a?(Array)) && value.empty?
78
+ value.to_query(namespace ? "#{namespace}[#{key}]" : key)
79
+ end
80
+ end.compact.sort! * '&'
81
+ end
82
+
83
+ alias to_param to_query
84
+ end
@@ -31,7 +31,8 @@ module PageMagic
31
31
  def included(clazz)
32
32
  clazz.class_eval do
33
33
  include(InstanceMethods)
34
- extend(Elements, ClassMethods)
34
+ extend ClassMethods
35
+ extend Elements
35
36
  end
36
37
  end
37
38
 
@@ -1,4 +1,5 @@
1
1
  require 'page_magic/driver'
2
+ require 'page_magic/utils/string'
2
3
  module PageMagic
3
4
  # class Drivers - creates an object that can be used to hold driver definitions
4
5
  # These PageMagic gets the user's chosen driver from this object.
@@ -16,12 +17,10 @@ module PageMagic
16
17
  # Loads drivers defined in files at the given path
17
18
  # @param [String] path where the drivers are located
18
19
  def load(path = "#{__dir__}/drivers")
19
- require 'active_support/inflector'
20
-
21
20
  Dir["#{path}/*.rb"].each do |driver_file|
22
21
  require driver_file
23
22
  driver_name = File.basename(driver_file)[/(.*)\.rb$/, 1]
24
- register self.class.const_get(driver_name.classify)
23
+ register self.class.const_get(Utils::String.classify(driver_name))
25
24
  end
26
25
  end
27
26
 
@@ -6,12 +6,18 @@ require 'page_magic/element/query_builder'
6
6
  module PageMagic
7
7
  # class Element - represents an element in a html page.
8
8
  class Element
9
- EVENT_TYPES = [:set, :select, :select_option, :unselect_option, :click].freeze
9
+ EVENT_TYPES = %i[set select select_option unselect_option click].freeze
10
10
  DEFAULT_HOOK = proc {}.freeze
11
11
  EVENT_NOT_SUPPORTED_MSG = '%s event not supported'.freeze
12
12
 
13
- include SelectorMethods, Watchers, SessionMethods, WaitMethods, Locators
14
- extend Elements, SelectorMethods, Forwardable
13
+ include Locators
14
+ include WaitMethods
15
+ include SessionMethods
16
+ include Watchers
17
+ include SelectorMethods
18
+ extend Forwardable
19
+ extend SelectorMethods
20
+ extend Elements
15
21
 
16
22
  attr_reader :type, :name, :parent_element, :browser_element, :before_events, :after_events
17
23
 
@@ -24,7 +30,7 @@ module PageMagic
24
30
  # @!method before_events
25
31
  # If a block is passed in, it adds it to be run before an event is triggered on an element.
26
32
  # @see .after_events
27
- %i(after_events before_events).each do |method|
33
+ %i[after_events before_events].each do |method|
28
34
  define_method method do |&block|
29
35
  instance_variable_name = "@#{method}".to_sym
30
36
  instance_variable_value = instance_variable_get(instance_variable_name) || [DEFAULT_HOOK]
@@ -14,7 +14,7 @@ module PageMagic
14
14
 
15
15
  INVALID_METHOD_NAME_MSG = 'a method already exists with this method name'.freeze
16
16
 
17
- TYPES = [:text_field, :button, :link, :checkbox, :select_list, :radio, :textarea].collect do |type|
17
+ TYPES = %i[text_field button link checkbox select_list radio textarea].collect do |type|
18
18
  [type, :"#{type}s"]
19
19
  end.flatten.freeze
20
20
 
@@ -3,7 +3,10 @@ module PageMagic
3
3
  module InstanceMethods
4
4
  attr_reader :browser, :session, :browser_element
5
5
 
6
- include Watchers, SessionMethods, WaitMethods, Element::Locators
6
+ include Element::Locators
7
+ include WaitMethods
8
+ include SessionMethods
9
+ include Watchers
7
10
 
8
11
  # Creates a new instance
9
12
  # @param [Session] session session that provides gateway to the browser throw the users chosen browser
@@ -44,7 +44,7 @@ module PageMagic
44
44
  # @param [Matcher] other
45
45
  # @return [Fixnum] -1 = smaller, 0 = equal to, 1 = greater than
46
46
  def <=>(other)
47
- results = [:path, :parameters, :fragment].collect do |component|
47
+ results = %i[path parameters fragment].collect do |component|
48
48
  compare(send(component), other.send(component))
49
49
  end
50
50
  results.find { |result| !result.zero? } || 0
@@ -113,7 +113,7 @@ module PageMagic
113
113
 
114
114
  def query_string_valid?(string)
115
115
  return true unless parameters
116
- !parameters.any? do |key, value|
116
+ parameters.none? do |key, value|
117
117
  !compatible?(parameters_hash(string)[key.downcase.to_s], value)
118
118
  end
119
119
  end
@@ -0,0 +1,12 @@
1
+ module PageMagic
2
+ module Utils
3
+ # module String - contains methods for manipulating strings
4
+ module String
5
+ class << self
6
+ def classify(string_or_symbol)
7
+ string_or_symbol.to_s.split('_').collect(&:capitalize).reduce(:+)
8
+ end
9
+ end
10
+ end
11
+ end
12
+ end
@@ -2,11 +2,11 @@
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
3
  # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
- # stub: page_magic 1.2.8 ruby lib
5
+ # stub: page_magic 1.2.9 ruby lib
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "page_magic"
9
- s.version = "1.2.8"
9
+ s.version = "1.2.9"
10
10
 
11
11
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
12
12
  s.require_paths = ["lib"]
@@ -30,6 +30,7 @@ Gem::Specification.new do |s|
30
30
  "Rakefile",
31
31
  "VERSION",
32
32
  "circle.yml",
33
+ "lib/active_support/core_ext/object/to_query.rb",
33
34
  "lib/page_magic.rb",
34
35
  "lib/page_magic/class_methods.rb",
35
36
  "lib/page_magic/driver.rb",
@@ -51,11 +52,13 @@ Gem::Specification.new do |s|
51
52
  "lib/page_magic/matcher.rb",
52
53
  "lib/page_magic/session.rb",
53
54
  "lib/page_magic/session_methods.rb",
55
+ "lib/page_magic/utils/string.rb",
54
56
  "lib/page_magic/wait_methods.rb",
55
57
  "lib/page_magic/watcher.rb",
56
58
  "lib/page_magic/watchers.rb",
57
59
  "page_magic.gemspec",
58
60
  "spec/element_spec.rb",
61
+ "spec/lib/active_support/core_ext/object/to_query_test.rb",
59
62
  "spec/page_magic/class_methods_spec.rb",
60
63
  "spec/page_magic/driver_spec.rb",
61
64
  "spec/page_magic/drivers/poltergeist_spec.rb",
@@ -73,6 +76,7 @@ Gem::Specification.new do |s|
73
76
  "spec/page_magic/matcher_spec.rb",
74
77
  "spec/page_magic/session_methods_spec.rb",
75
78
  "spec/page_magic/session_spec.rb",
79
+ "spec/page_magic/utils/string_spec.rb",
76
80
  "spec/page_magic/wait_methods_spec.rb",
77
81
  "spec/page_magic/watchers_spec.rb",
78
82
  "spec/page_magic_spec.rb",
@@ -95,30 +99,30 @@ Gem::Specification.new do |s|
95
99
  s.specification_version = 4
96
100
 
97
101
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
102
+ s.add_runtime_dependency(%q<activesupport-inflector>, [">= 0"])
98
103
  s.add_runtime_dependency(%q<capybara>, [">= 2.5"])
99
- s.add_runtime_dependency(%q<activesupport>, ["~> 4"])
104
+ s.add_development_dependency(%q<github-markup>, ["~> 1.4"])
100
105
  s.add_development_dependency(%q<jeweler>, ["~> 2.0"])
106
+ s.add_development_dependency(%q<redcarpet>, ["~> 3.3"])
101
107
  s.add_development_dependency(%q<rubocop>, ["~> 0.34"])
102
108
  s.add_development_dependency(%q<yard>, ["~> 0.8"])
103
- s.add_development_dependency(%q<redcarpet>, ["~> 3.3"])
104
- s.add_development_dependency(%q<github-markup>, ["~> 1.4"])
105
109
  else
110
+ s.add_dependency(%q<activesupport-inflector>, [">= 0"])
106
111
  s.add_dependency(%q<capybara>, [">= 2.5"])
107
- s.add_dependency(%q<activesupport>, ["~> 4"])
112
+ s.add_dependency(%q<github-markup>, ["~> 1.4"])
108
113
  s.add_dependency(%q<jeweler>, ["~> 2.0"])
114
+ s.add_dependency(%q<redcarpet>, ["~> 3.3"])
109
115
  s.add_dependency(%q<rubocop>, ["~> 0.34"])
110
116
  s.add_dependency(%q<yard>, ["~> 0.8"])
111
- s.add_dependency(%q<redcarpet>, ["~> 3.3"])
112
- s.add_dependency(%q<github-markup>, ["~> 1.4"])
113
117
  end
114
118
  else
119
+ s.add_dependency(%q<activesupport-inflector>, [">= 0"])
115
120
  s.add_dependency(%q<capybara>, [">= 2.5"])
116
- s.add_dependency(%q<activesupport>, ["~> 4"])
121
+ s.add_dependency(%q<github-markup>, ["~> 1.4"])
117
122
  s.add_dependency(%q<jeweler>, ["~> 2.0"])
123
+ s.add_dependency(%q<redcarpet>, ["~> 3.3"])
118
124
  s.add_dependency(%q<rubocop>, ["~> 0.34"])
119
125
  s.add_dependency(%q<yard>, ["~> 0.8"])
120
- s.add_dependency(%q<redcarpet>, ["~> 3.3"])
121
- s.add_dependency(%q<github-markup>, ["~> 1.4"])
122
126
  end
123
127
  end
124
128
 
@@ -0,0 +1,78 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'minitest'
4
+ Minitest.autorun
5
+ require 'active_support/core_ext/object/to_query'
6
+
7
+ class ToQueryTest < ::Minitest::Test
8
+ def test_simple_conversion
9
+ assert_query_equal 'a=10', a: 10
10
+ end
11
+
12
+ def test_cgi_escaping
13
+ assert_query_equal 'a%3Ab=c+d', 'a:b' => 'c d'
14
+ end
15
+
16
+ def test_nil_parameter_value
17
+ empty = Object.new
18
+ def empty.to_param
19
+ nil
20
+ end
21
+ assert_query_equal 'a=', 'a' => empty
22
+ end
23
+
24
+ def test_nested_conversion
25
+ assert_query_equal 'person%5Blogin%5D=seckar&person%5Bname%5D=Nicholas',
26
+ person: Hash[:login, 'seckar', :name, 'Nicholas']
27
+ end
28
+
29
+ def test_multiple_nested
30
+ assert_query_equal 'account%5Bperson%5D%5Bid%5D=20&person%5Bid%5D=10',
31
+ Hash[:account, { person: { id: 20 } }, :person, { id: 10 }]
32
+ end
33
+
34
+ def test_array_values
35
+ assert_query_equal 'person%5Bid%5D%5B%5D=10&person%5Bid%5D%5B%5D=20',
36
+ person: { id: [10, 20] }
37
+ end
38
+
39
+ def test_array_values_are_not_sorted
40
+ assert_query_equal 'person%5Bid%5D%5B%5D=20&person%5Bid%5D%5B%5D=10',
41
+ person: { id: [20, 10] }
42
+ end
43
+
44
+ def test_empty_array
45
+ assert_equal 'person%5B%5D=', [].to_query('person')
46
+ end
47
+
48
+ def test_nested_empty_hash
49
+ assert_equal '',
50
+ {}.to_query
51
+ assert_query_equal 'a=1&b%5Bc%5D=3',
52
+ a: 1, b: { c: 3, d: {} }
53
+ assert_query_equal '',
54
+ a: { b: { c: {} } }
55
+ assert_query_equal 'b%5Bc%5D=false&b%5Be%5D=&b%5Bf%5D=&p=12',
56
+ p: 12, b: { c: false, e: nil, f: '' }
57
+ assert_query_equal 'b%5Bc%5D=3&b%5Bf%5D=',
58
+ b: { c: 3, k: {}, f: '' }
59
+ assert_query_equal 'b=3',
60
+ a: [], b: 3
61
+ end
62
+
63
+ def test_hash_with_namespace
64
+ hash = { name: 'Nakshay', nationality: 'Indian' }
65
+ assert_equal 'user%5Bname%5D=Nakshay&user%5Bnationality%5D=Indian', hash.to_query('user')
66
+ end
67
+
68
+ def test_hash_sorted_lexicographically
69
+ hash = { type: 'human', name: 'Nakshay' }
70
+ assert_equal 'name=Nakshay&type=human', hash.to_query
71
+ end
72
+
73
+ private
74
+
75
+ def assert_query_equal(expected, actual)
76
+ assert_equal expected.split('&'), actual.to_query.split('&')
77
+ end
78
+ end
@@ -18,7 +18,7 @@ module PageMagic
18
18
  end
19
19
 
20
20
  it 'raises an error' do
21
- expected_message = 'Unable to find css "wrong"'
21
+ expected_message = 'Unable to find visible css "wrong"'
22
22
  expect { subject.execute(page.browser) }.to raise_exception(ElementMissingException, expected_message)
23
23
  end
24
24
  end
@@ -29,7 +29,7 @@ module PageMagic
29
29
  end
30
30
 
31
31
  it 'raises an error' do
32
- expected_message = 'Ambiguous match, found 2 elements matching css "a"'
32
+ expected_message = 'Ambiguous match, found 2 elements matching visible css "a"'
33
33
  expect { subject.execute(page.browser) }.to raise_error AmbiguousQueryException, expected_message
34
34
  end
35
35
  end
@@ -33,7 +33,7 @@ module PageMagic
33
33
  described_class.new(supports_type: true)
34
34
  end
35
35
  it 'includes the element type in the result' do
36
- expect(subject.build(:field, :locator)).to eq([:field, :locator])
36
+ expect(subject.build(:field, :locator)).to eq(%i[field locator])
37
37
  end
38
38
  end
39
39
 
@@ -54,7 +54,7 @@ module PageMagic
54
54
  end
55
55
 
56
56
  it 'is added to the result' do
57
- expect(subject.build(:field, :locator)).to eq([:css, :locator])
57
+ expect(subject.build(:field, :locator)).to eq(%i[css locator])
58
58
  end
59
59
  end
60
60
  end
@@ -113,8 +113,7 @@ module PageMagic
113
113
  subject.class_eval do
114
114
  link(:hello, text: 'world')
115
115
 
116
- def hello
117
- end
116
+ def hello; end
118
117
  end
119
118
  end.to raise_error(InvalidMethodNameException)
120
119
  end
@@ -122,8 +121,7 @@ module PageMagic
122
121
  it 'should not allow element names that match method names' do
123
122
  expect do
124
123
  subject.class_eval do
125
- def hello
126
- end
124
+ def hello; end
127
125
 
128
126
  link(:hello, text: 'world')
129
127
  end
@@ -124,7 +124,7 @@ module PageMagic
124
124
  context 'more than one match on path' do
125
125
  it 'orders the results by specificity ' do
126
126
  subject.define_page_mappings %r{/page} => :mapped_page_using_regex, '/page' => :mapped_page_using_string
127
- expected_result = [:mapped_page_using_string, :mapped_page_using_regex]
127
+ expected_result = %i[mapped_page_using_string mapped_page_using_regex]
128
128
  expect(subject.instance_eval { matches('/page') }).to eq(expected_result)
129
129
  end
130
130
  end
@@ -155,8 +155,7 @@ module PageMagic
155
155
 
156
156
  it 'checks the current page' do
157
157
  page.class_eval do
158
- def my_method
159
- end
158
+ def my_method; end
160
159
  end
161
160
  expect(subject.respond_to?(:my_method)).to eq(true)
162
161
  end
@@ -0,0 +1,34 @@
1
+ require 'page_magic/utils/string'
2
+ module PageMagic
3
+ module Utils
4
+ describe String do
5
+ describe '.classify' do
6
+ context 'parameter is symbol' do
7
+ it 'returns a string' do
8
+ expect(described_class.classify(:Symbol)).to eq('Symbol')
9
+ end
10
+ end
11
+
12
+ context 'parameter is string' do
13
+ it 'returns a string' do
14
+ expect(described_class.classify(:String)).to eq('String')
15
+ end
16
+ end
17
+
18
+ context 'single word' do
19
+ context 'first letter is lower case' do
20
+ it 'converts the first letter to uppercase' do
21
+ expect(described_class.classify(:symbol)).to eq('Symbol')
22
+ end
23
+ end
24
+ end
25
+
26
+ context 'snakecase' do
27
+ it 'removes underscores and capitalises each word' do
28
+ expect(described_class.classify(:snake_case)).to eq('SnakeCase')
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
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: 1.2.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Leon Davis
@@ -11,103 +11,103 @@ cert_chain: []
11
11
  date: 2017-10-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: capybara
14
+ name: activesupport-inflector
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: '2.5'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - "~>"
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: '4'
40
+ version: '2.5'
41
41
  - !ruby/object:Gem::Dependency
42
- name: jeweler
42
+ name: github-markup
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '2.0'
47
+ version: '1.4'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '2.0'
54
+ version: '1.4'
55
55
  - !ruby/object:Gem::Dependency
56
- name: rubocop
56
+ name: jeweler
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '0.34'
61
+ version: '2.0'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '0.34'
68
+ version: '2.0'
69
69
  - !ruby/object:Gem::Dependency
70
- name: yard
70
+ name: redcarpet
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '0.8'
75
+ version: '3.3'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: '0.8'
82
+ version: '3.3'
83
83
  - !ruby/object:Gem::Dependency
84
- name: redcarpet
84
+ name: rubocop
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: '3.3'
89
+ version: '0.34'
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
- version: '3.3'
96
+ version: '0.34'
97
97
  - !ruby/object:Gem::Dependency
98
- name: github-markup
98
+ name: yard
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
101
  - - "~>"
102
102
  - !ruby/object:Gem::Version
103
- version: '1.4'
103
+ version: '0.8'
104
104
  type: :development
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
- version: '1.4'
110
+ version: '0.8'
111
111
  description: Framework for modeling and interacting with webpages which wraps capybara
112
112
  email: info@lad-tech.com
113
113
  executables: []
@@ -127,6 +127,7 @@ files:
127
127
  - Rakefile
128
128
  - VERSION
129
129
  - circle.yml
130
+ - lib/active_support/core_ext/object/to_query.rb
130
131
  - lib/page_magic.rb
131
132
  - lib/page_magic/class_methods.rb
132
133
  - lib/page_magic/driver.rb
@@ -148,11 +149,13 @@ files:
148
149
  - lib/page_magic/matcher.rb
149
150
  - lib/page_magic/session.rb
150
151
  - lib/page_magic/session_methods.rb
152
+ - lib/page_magic/utils/string.rb
151
153
  - lib/page_magic/wait_methods.rb
152
154
  - lib/page_magic/watcher.rb
153
155
  - lib/page_magic/watchers.rb
154
156
  - page_magic.gemspec
155
157
  - spec/element_spec.rb
158
+ - spec/lib/active_support/core_ext/object/to_query_test.rb
156
159
  - spec/page_magic/class_methods_spec.rb
157
160
  - spec/page_magic/driver_spec.rb
158
161
  - spec/page_magic/drivers/poltergeist_spec.rb
@@ -170,6 +173,7 @@ files:
170
173
  - spec/page_magic/matcher_spec.rb
171
174
  - spec/page_magic/session_methods_spec.rb
172
175
  - spec/page_magic/session_spec.rb
176
+ - spec/page_magic/utils/string_spec.rb
173
177
  - spec/page_magic/wait_methods_spec.rb
174
178
  - spec/page_magic/watchers_spec.rb
175
179
  - spec/page_magic_spec.rb