capybara-widgets 0.3.1 → 0.4.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7b6a90efedf17b2f0960750cc217dde6d049cb80
4
- data.tar.gz: 73edd6777f2997aeafd5eed992def14d4f83d82f
3
+ metadata.gz: dc8ba6872d65c984e482da032b16bc77918c6847
4
+ data.tar.gz: e7f0e2119a36f16bbbca1c2e35b05ba6375f5229
5
5
  SHA512:
6
- metadata.gz: b40f627cd2fadf8d5b1212ba77fd738429b1c2a080a76ab950fb2661c38739d76237fa7229963f7b5f2e5db23f57abb33445621ae2ba9bbc38b15e9676a0ade8
7
- data.tar.gz: 16b63567da4888f5a77509d5d9aeaac1bd05f7d4742aeaa0e43b5194c17ff39beaf40c5d5680acaad07c92304f18b3e3123d4a26b6de01dd8c4ce786e0bb60ef
6
+ metadata.gz: 5552b63d66512fa9fe7f621c482094c2c94d4df939d3020bc38ade8775a16d1dc86f6ae191f86355b41a381e82b8d1f116ec621c3b510396448190354ca21f78
7
+ data.tar.gz: 12f25e3b3c24ed0e4935ff9a60ed3cd034aa7b6398676a6be1c68d082d271574b7242cd9c74efd38adb4dd9bd577cb68395bdab48b6e5a96a5e4b3cc5cf9f433
@@ -9,7 +9,7 @@ Gem::Specification.new do |spec|
9
9
  spec.authors = ["Vitalii Grygoruk"]
10
10
  spec.email = ["vitalii[dot]grygoruk[at]gmail[dot]com"]
11
11
  spec.summary = %q{Page objects and page components for Capybara}
12
- spec.description = %q{Easily create well-structured page and ui component classes in your Capybara + Cucumber or Rspec tests}
12
+ spec.description = %q{Easily create well-structured page and ui component classes in your Capybara, Cucumber/RSpec tests}
13
13
  spec.homepage = ""
14
14
  spec.license = "MIT"
15
15
 
@@ -20,9 +20,10 @@ Gem::Specification.new do |spec|
20
20
 
21
21
  spec.add_development_dependency "bundler", "~> 1.7"
22
22
  spec.add_development_dependency "rake", "~> 10.0"
23
- spec.add_development_dependency "rspec", "~> 3.2"
24
- spec.add_development_dependency "cucumber"
25
23
 
26
24
  spec.add_dependency "capybara", "~> 2.0"
27
25
  spec.add_dependency "activesupport"
26
+ spec.add_dependency "rspec", "~> 3.2"
27
+ spec.add_dependency "rspec-wait"
28
+ spec.add_development_dependency "cucumber"
28
29
  end
@@ -29,43 +29,51 @@ module Capybara
29
29
  @root
30
30
  end
31
31
 
32
- # override this method if you need to narrow down search context for a particular UI widget / block
32
+ # @deprecated, use :root_element method instead
33
33
  def narrow
34
34
  @root
35
35
  end
36
36
 
37
- def element(*query)
38
- root.find(*query)
39
- end
40
-
41
- def has_element?(*query)
42
- root.has_selector?(*query)
37
+ def resolve(*query_with_args)
38
+ query = query_with_args.shift
39
+ args = query_with_args
40
+ if query.is_a?(Proc)
41
+ # resolve lambda selector in scope of widget instance
42
+ return self.instance_exec(*args, &query)
43
+ else
44
+ return query, *args
45
+ end
43
46
  end
44
47
 
45
48
  class << self
49
+
50
+ ## override :narrow method if :root_element is used in a class
51
+ def root_element(*query)
52
+ define_method(:root_query) { resolve(*query) }
53
+ define_method(:narrow) { root.find(*resolve(*query)) }
54
+ define_method(:has_root_element?) { page.has_selector?(*resolve(*query))}
55
+ define_method(:has_no_root_element?) { page.has_no_selector?(*resolve(*query))}
56
+ end
57
+
46
58
  def component(name, klass, *query)
47
59
  define_method name do |*args|
48
- component_root = query.length > 0 ? root.find(*query, *args) : root
60
+ component_root = query.length > 0 ? root.find(*resolve(*query, *args)) : root
49
61
  klass.new(component_root)
50
62
  end
51
- end
52
-
53
- def resolve(*query_with_args)
54
- query = query_with_args.shift
55
- args = query_with_args
56
- if query.is_a?(Proc)
57
- return query.(*args)
58
- else
59
- return query, *args
63
+ define_method "has_#{name}?".to_sym do |*args|
64
+ root.has_selector?(*resolve(*query, *args))
65
+ end
66
+ define_method "has_no_#{name}?" do |*args|
67
+ root.has_no_selector?(*resolve(*query, *args))
60
68
  end
61
69
  end
62
70
 
63
71
  def element(name, *query)
64
- define_method("#{name}!") { |*args| root.find(*Widget.resolve(*query, *args)).click }
65
- define_method(name) { |*args| root.find(*Widget.resolve(*query, *args)) }
66
- define_method("#{name}=") { |arg| root.find(*Widget.resolve(*query)).set(arg) }
67
- define_method("has_#{name}?") { |*args| root.has_selector?(*Widget.resolve(*query, *args)) }
68
- define_method("has_no_#{name}?") { |*args| root.has_no_selector?(*Widget.resolve(*query, *args)) }
72
+ define_method("#{name}!") { |*args| root.find(*resolve(*query, *args)).click }
73
+ define_method(name) { |*args| root.find(*resolve(*query, *args)) }
74
+ define_method("#{name}=") { |arg| root.find(*resolve(*query)).set(arg) }
75
+ define_method("has_#{name}?") { |*args| root.has_selector?(*resolve(*query, *args)) }
76
+ define_method("has_no_#{name}?") { |*args| root.has_no_selector?(*resolve(*query, *args)) }
69
77
  end
70
78
 
71
79
  def required_element(*element_names)
@@ -90,10 +98,6 @@ module Capybara
90
98
  alias_method :required_components, :required_component
91
99
  end
92
100
 
93
- def displayed?
94
- root.visible?
95
- end
96
-
97
101
  # delegate missing methods to the @root node
98
102
  def method_missing(method_sym, *arguments, &block)
99
103
  if root.respond_to? method_sym
@@ -21,12 +21,12 @@ When(/^I click "([^"]*)" [o|i]n a "([^"]*)"$/) do |action, widget_path|
21
21
  target_widget.send(to_widget_action(action, '!'))
22
22
  end
23
23
 
24
- Then(/^the "([^"]*)" should( not)? be displayed$/) do |widget_path, negated|
24
+ Then(/^the "([^"]*)" should( not)? (be .*)$/) do |widget_path, negated, action|
25
25
  target_widget = resolve_widget(widget_path)
26
26
  if negated
27
- expect(target_widget).to be_not_displayed, "#{target_widget} should not be displayed"
27
+ expect(target_widget).not_to send(to_widget_action(action))
28
28
  else
29
- expect(target_widget).to be_displayed, "#{target_widget} should be displayed"
29
+ expect(target_widget).to send(to_widget_action(action))
30
30
  end
31
31
  end
32
32
 
@@ -21,6 +21,24 @@ module Capybara
21
21
  "Expected that '#{widget.class.name}' does not have '#{element}' element"
22
22
  end
23
23
  end
24
+
25
+ RSpec::Matchers.define :be_visible do
26
+ match do |widget|
27
+ widget.has_root_element?
28
+ end
29
+
30
+ match_when_negated do |widget|
31
+ widget.has_no_root_element?
32
+ end
33
+
34
+ failure_message do |widget|
35
+ "Expected that '#{widget.class.name}' to be visible"
36
+ end
37
+
38
+ failure_message_when_negated do |widget|
39
+ "Expected that '#{widget.class.name}' not to be visible"
40
+ end
41
+ end
24
42
  end
25
43
  end
26
44
  end
@@ -1,5 +1,5 @@
1
1
  module Capybara
2
2
  module Widgets
3
- VERSION = "0.3.1"
3
+ VERSION = "0.4.0"
4
4
  end
5
5
  end
@@ -5,7 +5,7 @@ describe Capybara::Widgets::Widget do
5
5
  let(:stub_node) { Capybara::Node::Base.new(nil, nil) }
6
6
 
7
7
  it 'has capybara page as a default root node' do
8
- expect(subject.root).to eq(page)
8
+ expect(klass.new.root).to eq(page)
9
9
  end
10
10
 
11
11
  it 'can be initialized with Capybara::Node::Base' do
@@ -26,7 +26,7 @@ describe Capybara::Widgets::Widget do
26
26
 
27
27
  it 'can have lazy-initialized root node' do
28
28
  # Arrange
29
- class MyWidget < klass
29
+ class MyWidget < Capybara::Widgets::Widget
30
30
  attr_accessor :loaded
31
31
  def initialize; self.loaded = false; end
32
32
  def narrow; self.loaded = true; @root; end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: capybara-widgets
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vitalii Grygoruk
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-11-16 00:00:00.000000000 Z
11
+ date: 2015-11-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -39,27 +39,27 @@ dependencies:
39
39
  - !ruby/object:Gem::Version
40
40
  version: '10.0'
41
41
  - !ruby/object:Gem::Dependency
42
- name: rspec
42
+ name: capybara
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '3.2'
48
- type: :development
47
+ version: '2.0'
48
+ type: :runtime
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: '3.2'
54
+ version: '2.0'
55
55
  - !ruby/object:Gem::Dependency
56
- name: cucumber
56
+ name: activesupport
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - ">="
60
60
  - !ruby/object:Gem::Version
61
61
  version: '0'
62
- type: :development
62
+ type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
@@ -67,21 +67,21 @@ dependencies:
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
- name: capybara
70
+ name: rspec
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '2.0'
75
+ version: '3.2'
76
76
  type: :runtime
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: '2.0'
82
+ version: '3.2'
83
83
  - !ruby/object:Gem::Dependency
84
- name: activesupport
84
+ name: rspec-wait
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - ">="
@@ -94,8 +94,22 @@ dependencies:
94
94
  - - ">="
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
- description: Easily create well-structured page and ui component classes in your Capybara
98
- + Cucumber or Rspec tests
97
+ - !ruby/object:Gem::Dependency
98
+ name: cucumber
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ description: Easily create well-structured page and ui component classes in your Capybara,
112
+ Cucumber/RSpec tests
99
113
  email:
100
114
  - vitalii[dot]grygoruk[at]gmail[dot]com
101
115
  executables: []