capybara-pagemap 0.2.0
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 +7 -0
- data/.gitignore +9 -0
- data/.rubocop.yml +3 -0
- data/.rubocop_todo.yml +17 -0
- data/.travis.yml +16 -0
- data/Gemfile +6 -0
- data/LICENSE +21 -0
- data/README.md +52 -0
- data/Rakefile +12 -0
- data/bin/console +8 -0
- data/bin/setup +8 -0
- data/capybara-pagemap.gemspec +30 -0
- data/changelog.md +25 -0
- data/lib/capybara/pagemap.rb +60 -0
- data/lib/capybara/pagemap/button.rb +39 -0
- data/lib/capybara/pagemap/configuration.rb +26 -0
- data/lib/capybara/pagemap/input.rb +73 -0
- data/lib/capybara/pagemap/select.rb +91 -0
- data/lib/capybara/pagemap/version.rb +7 -0
- metadata +146 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: a28e06a198938ebad6bd6afc197aa5764e95e50b
|
4
|
+
data.tar.gz: f708a6d76b31feaa9d589a7d17d356f25a08f7cf
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 9b78c955732d8328d8d38c585cc049e22cb9fb3957a9413db8672b26cac8d49fa07c398e7d2327e42c1353d5b6be6259dfe06aa257fe48a209da4491a9a6bbbc
|
7
|
+
data.tar.gz: 1204e6c784f5959bdcfec1c617889a457e52452e199f5ea4f6aea0e02cd1c97a78e17d23804a30b42977c329f6e986e64ed69fe759abfe0de0f546c6e5fbae78
|
data/.gitignore
ADDED
data/.rubocop.yml
ADDED
data/.rubocop_todo.yml
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
# This configuration was generated by
|
2
|
+
# `rubocop --auto-gen-config`
|
3
|
+
# on 2017-12-11 17:21:26 -0600 using RuboCop version 0.51.0.
|
4
|
+
# The point is for the user to remove these configuration records
|
5
|
+
# one by one as the offenses are removed from the code base.
|
6
|
+
# Note that changes in the inspected code, or installation of new
|
7
|
+
# versions of RuboCop, may require this file to be generated again.
|
8
|
+
|
9
|
+
# Offense count: 1
|
10
|
+
Metrics/AbcSize:
|
11
|
+
Max: 20
|
12
|
+
|
13
|
+
# Offense count: 8
|
14
|
+
# Configuration parameters: AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, IgnoredPatterns.
|
15
|
+
# URISchemes: http, https
|
16
|
+
Metrics/LineLength:
|
17
|
+
Max: 180
|
data/.travis.yml
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
env:
|
2
|
+
global:
|
3
|
+
- CC_TEST_REPORTER_ID=a84280065b8cb316f57d2f99d2dcf057fcb8164c6972136346d445c9beed8ddb
|
4
|
+
language: ruby
|
5
|
+
rvm:
|
6
|
+
- 2.4.2
|
7
|
+
- 2.3.5
|
8
|
+
before_install: gem install bundler -v 1.16.0
|
9
|
+
before_script:
|
10
|
+
- curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
|
11
|
+
- chmod +x ./cc-test-reporter
|
12
|
+
- ./cc-test-reporter before-build
|
13
|
+
script:
|
14
|
+
- bundle exec rake test
|
15
|
+
after_script:
|
16
|
+
- ./cc-test-reporter after-build --exit-code $TRAVIS_TEST_RESULT
|
data/Gemfile
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
The MIT License (MIT)
|
2
|
+
|
3
|
+
Copyright (c) 2016 Luis Ezcurdia
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
13
|
+
copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
21
|
+
SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,52 @@
|
|
1
|
+
# Capybara Pagemap
|
2
|
+
[](https://travis-ci.org/3zcurdia/capybara-pagemap)
|
3
|
+
[](https://codeclimate.com/github/3zcurdia/capybara-pagemap/maintainability)
|
4
|
+
[](https://codeclimate.com/github/3zcurdia/capybara-pagemap/test_coverage)
|
5
|
+
[](https://badge.fury.io/rb/capybara-pagemap)
|
6
|
+
|
7
|
+
Simple object mapper for page objects with capybara
|
8
|
+
|
9
|
+
## Installation
|
10
|
+
|
11
|
+
Add this line to your application's Gemfile:
|
12
|
+
|
13
|
+
```ruby
|
14
|
+
gem 'capybara-pagemap'
|
15
|
+
```
|
16
|
+
|
17
|
+
And then execute:
|
18
|
+
|
19
|
+
$ bundle
|
20
|
+
|
21
|
+
Or install it yourself as:
|
22
|
+
|
23
|
+
$ gem install capybara-pagemap
|
24
|
+
|
25
|
+
## Usage
|
26
|
+
|
27
|
+
Inherit from ```Capybara::Pagemap::Base``` and define the input fields as the following example
|
28
|
+
|
29
|
+
```ruby
|
30
|
+
class LoginPage
|
31
|
+
include Capybara::Pagemap
|
32
|
+
define_input :email, '//*[@id="user_email"]'
|
33
|
+
define_input :password, '//*[@id="user_password"]'
|
34
|
+
define_button :log_in, '//*[@id="log_in"]'
|
35
|
+
end
|
36
|
+
```
|
37
|
+
Once you have define your input you will have access to the getters setters
|
38
|
+
|
39
|
+
```ruby
|
40
|
+
login_page = LoginPage.new
|
41
|
+
login_page.email = "test@example.org"
|
42
|
+
login_page.email
|
43
|
+
# => "test@example.org"
|
44
|
+
login_page.email_input
|
45
|
+
# => Capybara::Node
|
46
|
+
login_page.log_in_button.click if login_page.valid?
|
47
|
+
```
|
48
|
+
|
49
|
+
|
50
|
+
## Contributing
|
51
|
+
|
52
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/3zcurdia/capybara-pagemap.
|
data/Rakefile
ADDED
data/bin/console
ADDED
data/bin/setup
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
lib = File.expand_path('../lib', __FILE__)
|
5
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
6
|
+
require 'capybara/pagemap/version'
|
7
|
+
|
8
|
+
Gem::Specification.new do |spec|
|
9
|
+
spec.name = 'capybara-pagemap'
|
10
|
+
spec.version = Capybara::Pagemap::VERSION
|
11
|
+
spec.authors = ['Luis Ezcurdia']
|
12
|
+
spec.email = ['ing.ezcurdia@gmail.com']
|
13
|
+
spec.license = 'MIT'
|
14
|
+
spec.summary = 'Object mapper DSL for capybara'
|
15
|
+
spec.description = 'Simple object mapper for page objects with capybara'
|
16
|
+
spec.homepage = 'https://github.com/3zcurdia/capybara-pagemap'
|
17
|
+
|
18
|
+
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
19
|
+
spec.bindir = 'exe'
|
20
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
21
|
+
spec.require_paths = ['lib']
|
22
|
+
|
23
|
+
spec.add_dependency 'capybara', '>= 2.2.0'
|
24
|
+
|
25
|
+
spec.add_development_dependency 'bundler', '~> 1.11'
|
26
|
+
spec.add_development_dependency 'minitest', '~> 5.0'
|
27
|
+
spec.add_development_dependency 'simplecov', '>= 0.13'
|
28
|
+
spec.add_development_dependency 'pry', '~> 0.10.3'
|
29
|
+
spec.add_development_dependency 'rake', '~> 10.0'
|
30
|
+
end
|
data/changelog.md
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
# Changelog
|
2
|
+
|
3
|
+
## v0.1.0..v0.1.1
|
4
|
+
|
5
|
+
* [a2c48ab](https://github.com/3zcurdia/capybara-pagemap/commit/a2c48abb8833e8f5506103302087804e267ccf3f) release 0.1.1 [Luis Ezcurdia](mailto:ing.ezcurdia@gmail.com)
|
6
|
+
* [66adbdf](https://github.com/3zcurdia/capybara-pagemap/commit/66adbdf94d6ad96d255973b8baab3c717fd14401) add select input [Luis Ezcurdia](mailto:ing.ezcurdia@gmail.com)
|
7
|
+
* [e15797e](https://github.com/3zcurdia/capybara-pagemap/commit/e15797e3d90d5ad5e7f67a570ae0c6495d55959d) use metaprograming method to detarminate if a page is valid [Luis Ezcurdia](mailto:ing.ezcurdia@gmail.com)
|
8
|
+
* [144916b](https://github.com/3zcurdia/capybara-pagemap/commit/144916be91178c3c9a51e65f50772fb83a1ae2c6) add gem badge [Luis Ezcurdia](mailto:ing.ezcurdia@gmail.com)
|
9
|
+
|
10
|
+
# Changelog
|
11
|
+
|
12
|
+
## v0.1.1..v0.1.2
|
13
|
+
|
14
|
+
* [00f1edc](https://github.com/3zcurdia/capybara-pagemap/commit/00f1edcfa8c6b1eece323a52f3d12450705f48d6) update version [Luis Ezcurdia](mailto:ing.ezcurdia@gmail.com)
|
15
|
+
* [8bd501a](https://github.com/3zcurdia/capybara-pagemap/commit/8bd501a0694638aef1f73da46886fdfd1cf91cc3) fix node definitions namespace [Luis Ezcurdia](mailto:ing.ezcurdia@gmail.com)
|
16
|
+
* [afc382e](https://github.com/3zcurdia/capybara-pagemap/commit/afc382ea035d33e7e9203207a558ddf4b5e0b5af) add select by value [Luis Ezcurdia](mailto:ing.ezcurdia@gmail.com)
|
17
|
+
* [7a6c82c](https://github.com/3zcurdia/capybara-pagemap/commit/7a6c82c30c4f4818e368d4b7493c4753e8b47f1c) create changelog [Luis Ezcurdia](mailto:ing.ezcurdia@gmail.com)
|
18
|
+
|
19
|
+
## v0.1.0..v0.1.1
|
20
|
+
|
21
|
+
* [a2c48ab](https://github.com/3zcurdia/capybara-pagemap/commit/a2c48abb8833e8f5506103302087804e267ccf3f) release 0.1.1 [Luis Ezcurdia](mailto:ing.ezcurdia@gmail.com)
|
22
|
+
* [66adbdf](https://github.com/3zcurdia/capybara-pagemap/commit/66adbdf94d6ad96d255973b8baab3c717fd14401) add select input [Luis Ezcurdia](mailto:ing.ezcurdia@gmail.com)
|
23
|
+
* [e15797e](https://github.com/3zcurdia/capybara-pagemap/commit/e15797e3d90d5ad5e7f67a570ae0c6495d55959d) use metaprograming method to detarminate if a page is valid [Luis Ezcurdia](mailto:ing.ezcurdia@gmail.com)
|
24
|
+
* [144916b](https://github.com/3zcurdia/capybara-pagemap/commit/144916be91178c3c9a51e65f50772fb83a1ae2c6) add gem badge [Luis Ezcurdia](mailto:ing.ezcurdia@gmail.com)
|
25
|
+
|
@@ -0,0 +1,60 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'capybara/pagemap/version'
|
4
|
+
require 'capybara/pagemap/configuration'
|
5
|
+
require 'capybara/pagemap/input'
|
6
|
+
require 'capybara/pagemap/button'
|
7
|
+
require 'capybara/pagemap/select'
|
8
|
+
|
9
|
+
module Capybara
|
10
|
+
# Pagemap module extend functionality to clases to map capybara nodes
|
11
|
+
module Pagemap
|
12
|
+
# Modules Available
|
13
|
+
include Input
|
14
|
+
include Button
|
15
|
+
include Select
|
16
|
+
MODULES_ENABLED = configuration.enabled.freeze
|
17
|
+
|
18
|
+
def self.included(base)
|
19
|
+
base.extend(ClassMethods)
|
20
|
+
MODULES_ENABLED.each do |mod|
|
21
|
+
base.extend(Object.const_get("Capybara::Pagemap::#{mod.capitalize}::ClassMethods"))
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
# :nodoc:
|
26
|
+
module ClassMethods
|
27
|
+
def node_definitions
|
28
|
+
@node_definitions ||= {}
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def valid?
|
33
|
+
self.class.node_definitions.map do |node, definition|
|
34
|
+
MODULES_ENABLED.map do |type|
|
35
|
+
next if definition[:type] != type
|
36
|
+
send("#{type}_validator_for", node)
|
37
|
+
end.compact.all?
|
38
|
+
end.all?
|
39
|
+
end
|
40
|
+
|
41
|
+
def method_missing(method_name, *args, &block)
|
42
|
+
self.class.node_definitions.each_value do |definition|
|
43
|
+
MODULES_ENABLED.each do |type|
|
44
|
+
next if definition[:type] != type
|
45
|
+
return send("#{type}_method_missing", method_name, args, block) if respond_to?(method_name)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
super
|
49
|
+
end
|
50
|
+
|
51
|
+
def respond_to_missing?(method_name, include_private = false)
|
52
|
+
self.class.node_definitions.map do |_, definition|
|
53
|
+
MODULES_ENABLED.map do |type|
|
54
|
+
next if definition[:type] != type
|
55
|
+
send("#{type}_respond_to_missing?", method_name, include_private)
|
56
|
+
end.compact.all?
|
57
|
+
end.all?
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Capybara
|
4
|
+
module Pagemap
|
5
|
+
# Button build methods for clickable DOM elements
|
6
|
+
module Button
|
7
|
+
# :nodoc
|
8
|
+
module ClassMethods
|
9
|
+
def define_button(name, xpath)
|
10
|
+
node_definitions[name] = { type: :button, value: xpath }
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def button_validator_for(node)
|
15
|
+
!send("#{node}_button").nil?
|
16
|
+
end
|
17
|
+
|
18
|
+
def button_method_missing(method_name, *_, &_block)
|
19
|
+
return unless /(?<key>.*)_button$/ =~ method_name && self.class.node_definitions[key.to_sym] && self.class.node_definitions[key.to_sym][:type] == :button
|
20
|
+
build_button(key.to_sym)
|
21
|
+
send(method_name)
|
22
|
+
end
|
23
|
+
|
24
|
+
def button_respond_to_missing?(method_name, _include_private = false)
|
25
|
+
/(?<key>.*)_button$/ =~ method_name && self.class.node_definitions[key.to_sym]
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
def build_button(key_name)
|
31
|
+
instance_eval <<-RUBY
|
32
|
+
def #{key_name}_button
|
33
|
+
@#{key_name}_button ||= page.find(:xpath, self.class.node_definitions[:#{key_name}][:value])
|
34
|
+
end
|
35
|
+
RUBY
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Capybara
|
4
|
+
# Pagemap module extend functionality to clases to map capybara nodes
|
5
|
+
module Pagemap
|
6
|
+
class << self
|
7
|
+
attr_writer :configuration
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.configuration
|
11
|
+
@configuration ||= Configuration.new
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.configure
|
15
|
+
yield(configuration)
|
16
|
+
end
|
17
|
+
|
18
|
+
# Configuration class encapsulates gobal configurations
|
19
|
+
class Configuration
|
20
|
+
attr_accessor :enabled
|
21
|
+
def initialize
|
22
|
+
@enabled = %i[input button select]
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,73 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Capybara
|
4
|
+
module Pagemap
|
5
|
+
# Input build methods for input selector
|
6
|
+
module Input
|
7
|
+
# :nodoc:
|
8
|
+
module ClassMethods
|
9
|
+
def define_input(name, xpath, type = :input)
|
10
|
+
node_definitions[name] = { type: type, value: xpath }
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def input_validator_for(node)
|
15
|
+
!send("#{node}_input").nil?
|
16
|
+
end
|
17
|
+
|
18
|
+
def input_method_missing(method_name, args, block)
|
19
|
+
input_build_and_send(method_name, args, block) ||
|
20
|
+
input_setter_build_and_send(method_name, args, block) ||
|
21
|
+
input_getter_build_and_send(method_name, args, block)
|
22
|
+
end
|
23
|
+
|
24
|
+
def input_build_and_send(method_name, _, _block)
|
25
|
+
return unless /(?<key>.*)_input$/ =~ method_name && self.class.node_definitions[key.to_sym]
|
26
|
+
build_input(key.to_sym)
|
27
|
+
send(method_name)
|
28
|
+
end
|
29
|
+
|
30
|
+
def input_setter_build_and_send(method_name, args, _block)
|
31
|
+
return unless /(?<key>.*)=$/ =~ method_name && self.class.node_definitions[key.to_sym]
|
32
|
+
define_input_setter(key)
|
33
|
+
send(method_name, args.first)
|
34
|
+
end
|
35
|
+
|
36
|
+
def input_getter_build_and_send(method_name, _, _block)
|
37
|
+
return unless self.class.node_definitions[method_name.to_sym]
|
38
|
+
define_input_getter(method_name)
|
39
|
+
send(method_name)
|
40
|
+
end
|
41
|
+
|
42
|
+
def input_respond_to_missing?(method_name, _include_private = false)
|
43
|
+
/(.*)_input$/ =~ method_name || /(.*)=$/ =~ method_name || self.class.node_definitions[(Regexp.last_match(1) || method_name).to_sym]
|
44
|
+
end
|
45
|
+
|
46
|
+
private
|
47
|
+
|
48
|
+
def build_input(key_name)
|
49
|
+
instance_eval <<-RUBY
|
50
|
+
def #{key_name}_input
|
51
|
+
@#{key_name}_input ||= page.find(:xpath, self.class.node_definitions[:#{key_name}][:value])
|
52
|
+
end
|
53
|
+
RUBY
|
54
|
+
end
|
55
|
+
|
56
|
+
def define_input_setter(key_name)
|
57
|
+
instance_eval <<-RUBY
|
58
|
+
def #{key_name}=(value)
|
59
|
+
self.#{key_name}_input.set(value) if self.#{key_name}_input.respond_to?(:set)
|
60
|
+
end
|
61
|
+
RUBY
|
62
|
+
end
|
63
|
+
|
64
|
+
def define_input_getter(key_name)
|
65
|
+
instance_eval <<-RUBY
|
66
|
+
def #{key_name}
|
67
|
+
self.#{key_name}_input.value
|
68
|
+
end
|
69
|
+
RUBY
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
@@ -0,0 +1,91 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Capybara
|
4
|
+
module Pagemap
|
5
|
+
# Select build methods for selectable DOM elements
|
6
|
+
module Select
|
7
|
+
# :nodoc
|
8
|
+
module ClassMethods
|
9
|
+
def define_select(name, xpath)
|
10
|
+
node_definitions[name] = { type: :select, value: xpath }
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def select_validator_for(node)
|
15
|
+
!send("#{node}_select").nil?
|
16
|
+
end
|
17
|
+
|
18
|
+
def select_method_missing(method_name, args, block)
|
19
|
+
select_input_build_and_send(method_name, args, block) ||
|
20
|
+
select_opt_build_and_send(method_name, args, block) ||
|
21
|
+
select_value_build_and_send(method_name, args, block) ||
|
22
|
+
select_getter_build_and_send(method_name, args, block)
|
23
|
+
end
|
24
|
+
|
25
|
+
def select_input_build_and_send(method_name, _args, _block)
|
26
|
+
return unless /(?<key>.*)_input$/ =~ method_name && self.class.node_definitions[key.to_sym]
|
27
|
+
build_select_input(key)
|
28
|
+
send(method_name)
|
29
|
+
end
|
30
|
+
|
31
|
+
def select_opt_build_and_send(method_name, args, _block)
|
32
|
+
return unless /(?<key>.*)_select$/ =~ method_name && self.class.node_definitions[key.to_sym] && self.class.node_definitions[key.to_sym][:type] == :select
|
33
|
+
build_select_opt(key)
|
34
|
+
send(method_name, args.first)
|
35
|
+
end
|
36
|
+
|
37
|
+
def select_value_build_and_send(method_name, args, _block)
|
38
|
+
return unless /(?<key>.*)_select_by$/ =~ method_name && self.class.node_definitions[key.to_sym] && self.class.node_definitions[key.to_sym][:type] == :select
|
39
|
+
build_select_by(key)
|
40
|
+
send(method_name, args.first)
|
41
|
+
end
|
42
|
+
|
43
|
+
def select_getter_build_and_send(method_name, _args, _block)
|
44
|
+
return unless self.class.node_definitions[method_name.to_sym]
|
45
|
+
build_select_getter(method_name)
|
46
|
+
send(method_name)
|
47
|
+
end
|
48
|
+
|
49
|
+
def select_respond_to_missing?(method_name, _include_private = false)
|
50
|
+
/(.*)_input$/ =~ method_name ||
|
51
|
+
/(.*)_select$/ =~ method_name ||
|
52
|
+
/(.*)_select_by$/ =~ method_name ||
|
53
|
+
self.class.node_definitions[(Regexp.last_match(1) || method_name).to_sym]
|
54
|
+
end
|
55
|
+
|
56
|
+
private
|
57
|
+
|
58
|
+
def build_select_input(key_name)
|
59
|
+
instance_eval <<-RUBY
|
60
|
+
def #{key_name}_input
|
61
|
+
@#{key_name}_input ||= page.find(:xpath, self.class.node_definitions[:#{key_name}][:value])
|
62
|
+
end
|
63
|
+
RUBY
|
64
|
+
end
|
65
|
+
|
66
|
+
def build_select_opt(key_name)
|
67
|
+
instance_eval <<-RUBY
|
68
|
+
def #{key_name}_select(option)
|
69
|
+
@#{key_name}_input.select(option) if self.#{key_name}_input.respond_to?(:select)
|
70
|
+
end
|
71
|
+
RUBY
|
72
|
+
end
|
73
|
+
|
74
|
+
def build_select_by(key_name)
|
75
|
+
instance_eval <<-RUBY
|
76
|
+
def #{key_name}_select_by(value)
|
77
|
+
self.#{key_name}_input.find("option[value='"+value+"']").select_option if self.#{key_name}_input.respond_to?(:find)
|
78
|
+
end
|
79
|
+
RUBY
|
80
|
+
end
|
81
|
+
|
82
|
+
def build_select_getter(key_name)
|
83
|
+
instance_eval <<-RUBY
|
84
|
+
def #{key_name}
|
85
|
+
self.#{key_name}_input.value
|
86
|
+
end
|
87
|
+
RUBY
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
metadata
ADDED
@@ -0,0 +1,146 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: capybara-pagemap
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.2.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Luis Ezcurdia
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2017-12-14 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: capybara
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 2.2.0
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 2.2.0
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: bundler
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.11'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.11'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: minitest
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '5.0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '5.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: simplecov
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0.13'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0.13'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: pry
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 0.10.3
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 0.10.3
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rake
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '10.0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '10.0'
|
97
|
+
description: Simple object mapper for page objects with capybara
|
98
|
+
email:
|
99
|
+
- ing.ezcurdia@gmail.com
|
100
|
+
executables: []
|
101
|
+
extensions: []
|
102
|
+
extra_rdoc_files: []
|
103
|
+
files:
|
104
|
+
- ".gitignore"
|
105
|
+
- ".rubocop.yml"
|
106
|
+
- ".rubocop_todo.yml"
|
107
|
+
- ".travis.yml"
|
108
|
+
- Gemfile
|
109
|
+
- LICENSE
|
110
|
+
- README.md
|
111
|
+
- Rakefile
|
112
|
+
- bin/console
|
113
|
+
- bin/setup
|
114
|
+
- capybara-pagemap.gemspec
|
115
|
+
- changelog.md
|
116
|
+
- lib/capybara/pagemap.rb
|
117
|
+
- lib/capybara/pagemap/button.rb
|
118
|
+
- lib/capybara/pagemap/configuration.rb
|
119
|
+
- lib/capybara/pagemap/input.rb
|
120
|
+
- lib/capybara/pagemap/select.rb
|
121
|
+
- lib/capybara/pagemap/version.rb
|
122
|
+
homepage: https://github.com/3zcurdia/capybara-pagemap
|
123
|
+
licenses:
|
124
|
+
- MIT
|
125
|
+
metadata: {}
|
126
|
+
post_install_message:
|
127
|
+
rdoc_options: []
|
128
|
+
require_paths:
|
129
|
+
- lib
|
130
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
131
|
+
requirements:
|
132
|
+
- - ">="
|
133
|
+
- !ruby/object:Gem::Version
|
134
|
+
version: '0'
|
135
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
136
|
+
requirements:
|
137
|
+
- - ">="
|
138
|
+
- !ruby/object:Gem::Version
|
139
|
+
version: '0'
|
140
|
+
requirements: []
|
141
|
+
rubyforge_project:
|
142
|
+
rubygems_version: 2.6.14
|
143
|
+
signing_key:
|
144
|
+
specification_version: 4
|
145
|
+
summary: Object mapper DSL for capybara
|
146
|
+
test_files: []
|