site_prism 1.3 → 1.4

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -127,7 +127,7 @@ queried (is it enabled? visible?).
127
127
 
128
128
  SitePrism is based around this concept, but goes further as you'll see
129
129
  below by also allowing modelling of repeated sections that appear on
130
- muliple pages, or many times on a page using the concept of sections.
130
+ multiple pages, or many times on a page using the concept of sections.
131
131
 
132
132
  ## Pages
133
133
 
@@ -171,7 +171,7 @@ to the page using `#load`:
171
171
  @home_page.load
172
172
  ```
173
173
 
174
- This will tell which ever capybara driver you have configured to
174
+ This will tell whichever capybara driver you have configured to
175
175
  navigate to the URL set against that page's class.
176
176
 
177
177
  ### Verifying that a particular page is displayed
@@ -591,7 +591,7 @@ SitePrism provides the Section class for this task.
591
591
 
592
592
  In the same way that SitePrism provides `element` and `elements`, it
593
593
  provides `section` and `sections`. The first returns an instance of a
594
- page section, the secont returns an array of section instances, one for
594
+ page section, the second returns an array of section instances, one for
595
595
  each capybara element found by the supplied css selector. What follows
596
596
  is an explanation of `section`.
597
597
 
@@ -807,9 +807,9 @@ how they're used:
807
807
 
808
808
  ```ruby
809
809
  @home = Home.new
810
- @home.wait_for_menu_visible
810
+ @home.wait_until_menu_visible
811
811
  # and...
812
- @home.wait_for_menu_invisible
812
+ @home.wait_until_menu_invisible
813
813
  ```
814
814
 
815
815
  Again, as for an element, it is possible to give a specific amount of
@@ -817,9 +817,9 @@ time to wait for visibility/invisibility of a section. Here's how:
817
817
 
818
818
  ```ruby
819
819
  @home = Home.new
820
- @home.wait_for_menu_visible(5)
820
+ @home.wait_until_menu_visible(5)
821
821
  # and...
822
- @home.wait_for_menu_invisible(3)
822
+ @home.wait_until_menu_invisible(3)
823
823
  ```
824
824
 
825
825
  #### Sections within sections
@@ -1005,7 +1005,7 @@ end
1005
1005
 
1006
1006
  SitePrism allows you to interact with iframes. An iframe is declared as
1007
1007
  a `SitePrism::Page` class, and then referenced by the page or section it
1008
- is embeded into. Like a section, it is possible to test for the
1008
+ is embedded into. Like a section, it is possible to test for the
1009
1009
  existence of the iframe, wait for it to exist as well as interact with
1010
1010
  the page it contains.
1011
1011
 
@@ -1,7 +1,7 @@
1
1
  module SitePrism::ElementChecker
2
2
  def all_there?
3
3
  Capybara.using_wait_time(0) do
4
- self.class.element_names.all? {|element| send "has_#{element}?" }
4
+ self.class.mapped_items.all? {|element| send "has_#{element}?" }
5
5
  end
6
6
  end
7
7
  end
@@ -1,62 +1,42 @@
1
1
  module SitePrism::ElementContainer
2
2
 
3
- def element element_name, element_locator = nil
4
- if element_locator.nil?
5
- create_no_locator element_name
6
- else
7
- add_element_name element_name.to_s
3
+ def element element_name, element_selector = nil
4
+ build element_name, element_selector do
8
5
  define_method element_name.to_s do
9
- find_one element_locator
6
+ find_one element_selector
10
7
  end
11
8
  end
12
- create_existence_checker element_name, element_locator
13
- create_waiter element_name, element_locator
14
- create_visibility_waiter element_name, element_locator
15
- create_invisibility_waiter element_name, element_locator
16
9
  end
17
10
 
18
- def elements collection_name, collection_locator = nil
19
- if collection_locator.nil?
20
- create_no_locator collection_name
21
- else
22
- add_element_name collection_name
11
+ def elements collection_name, collection_selector = nil
12
+ build collection_name, collection_selector do
23
13
  define_method collection_name.to_s do
24
- find_all collection_locator
14
+ find_all collection_selector
25
15
  end
26
16
  end
27
- create_existence_checker collection_name, collection_locator
28
- create_waiter collection_name, collection_locator
29
- create_visibility_waiter collection_name, collection_locator
30
- create_invisibility_waiter collection_name, collection_locator
31
17
  end
32
18
  alias :collection :elements
33
19
 
34
- def section section_name, section_class, section_locator
35
- add_element_name section_name
36
- create_existence_checker section_name, section_locator
37
- create_waiter section_name, section_locator
38
- create_visibility_waiter section_name, section_locator
39
- create_invisibility_waiter section_name, section_locator
40
- define_method section_name do
41
- section_class.new find_one section_locator
20
+ def section section_name, section_class, section_selector
21
+ build section_name, section_selector do
22
+ define_method section_name do
23
+ section_class.new find_one section_selector
24
+ end
42
25
  end
43
26
  end
44
27
 
45
- def sections section_collection_name, section_class, section_collection_locator
46
- add_element_name section_collection_name
47
- create_existence_checker section_collection_name, section_collection_locator
48
- create_waiter section_collection_name, section_collection_locator
49
- create_visibility_waiter section_collection_name, section_collection_locator
50
- create_invisibility_waiter section_collection_name, section_collection_locator
51
- define_method section_collection_name do
52
- find_all(section_collection_locator).collect do |element|
53
- section_class.new element
28
+ def sections section_collection_name, section_class, section_collection_selector
29
+ build section_collection_name, section_collection_selector do
30
+ define_method section_collection_name do
31
+ find_all(section_collection_selector).collect do |element|
32
+ section_class.new element
33
+ end
54
34
  end
55
35
  end
56
36
  end
57
37
 
58
38
  def iframe iframe_name, iframe_page_class, iframe_id
59
- add_element_name iframe_name
39
+ add_to_mapped_items iframe_name
60
40
  create_existence_checker iframe_name, iframe_id
61
41
  create_waiter iframe_name, iframe_id
62
42
  define_method iframe_name do |&block|
@@ -66,57 +46,76 @@ module SitePrism::ElementContainer
66
46
  end
67
47
  end
68
48
 
69
- def add_element_name element_name
70
- @element_names ||= []
71
- @element_names << element_name
49
+ def add_to_mapped_items item
50
+ @mapped_items ||= []
51
+ @mapped_items << item.to_s
72
52
  end
73
53
 
74
- def element_names
75
- @element_names
54
+ def mapped_items
55
+ @mapped_items
76
56
  end
77
57
 
78
58
  private
59
+
60
+ def build name, selector
61
+ if selector.nil?
62
+ create_no_selector name
63
+ else
64
+ add_to_mapped_items name
65
+ yield
66
+ end
67
+ add_checkers_and_waiters name, selector
68
+ end
69
+
70
+ def add_checkers_and_waiters name, selector
71
+ create_existence_checker name, selector
72
+ create_waiter name, selector
73
+ create_visibility_waiter name, selector
74
+ create_invisibility_waiter name, selector
75
+ end
76
+
77
+ def build_checker_or_waiter element_name, proposed_method_name, selector
78
+ if selector.nil?
79
+ create_no_selector element_name, proposed_method_name
80
+ else
81
+ yield
82
+ end
83
+ end
79
84
 
80
- def create_existence_checker element_name, element_locator
85
+ def create_existence_checker element_name, element_selector
81
86
  method_name = "has_#{element_name.to_s}?"
82
- if element_locator.nil?
83
- create_no_locator element_name, method_name
84
- else
87
+ build_checker_or_waiter element_name, method_name, element_selector do
85
88
  define_method method_name do
86
89
  Capybara.using_wait_time 0 do
87
- element_exists? element_locator
90
+ element_exists? element_selector
88
91
  end
89
92
  end
90
93
  end
91
94
  end
92
95
 
93
- def create_waiter element_name, element_locator
96
+ def create_waiter element_name, element_selector
94
97
  method_name = "wait_for_#{element_name.to_s}"
95
- if element_locator.nil?
96
- create_no_locator element_name, method_name
97
- else
98
+ build_checker_or_waiter element_name, method_name, element_selector do
98
99
  define_method method_name do |*args| #used to use block args, but they don't work under ruby 1.8 :(
99
100
  timeout = args.shift || Capybara.default_wait_time
100
101
  Capybara.using_wait_time timeout do
101
- element_waiter element_locator
102
+ element_waiter element_selector
102
103
  end
103
104
  end
104
105
  end
105
106
  end
106
107
 
107
- def create_visibility_waiter element_name, element_locator
108
+ def create_visibility_waiter element_name, element_selector
108
109
  method_name = "wait_until_#{element_name.to_s}_visible"
109
- if element_locator.nil?
110
- create_no_locator element_name, method_name
111
- else
110
+ build_checker_or_waiter element_name, method_name, element_selector do
112
111
  define_method method_name do |*args|
113
112
  timeout = args.shift || Capybara.default_wait_time
114
113
  Capybara.using_wait_time timeout do
115
- element_waiter element_locator
114
+ element_waiter element_selector
116
115
  end
117
116
  begin
118
117
  Timeout.timeout(timeout) do
119
- sleep 0.1 until find_one(element_locator).visible?
118
+ sleep 0.1 until find_one(element_selector).visible?
120
119
  end
121
120
  rescue Timeout::Error
122
121
  raise SitePrism::TimeOutWaitingForElementVisibility.new("#{element_name} did not become visible")
@@ -125,16 +124,14 @@ module SitePrism::ElementContainer
125
124
  end
126
125
  end
127
126
 
128
- def create_invisibility_waiter element_name, element_locator
127
+ def create_invisibility_waiter element_name, element_selector
129
128
  method_name = "wait_until_#{element_name.to_s}_invisible"
130
- if element_locator.nil?
131
- create_no_locator element_name, method_name
132
- else
129
+ build_checker_or_waiter element_name, method_name, element_selector do
133
130
  define_method method_name do |*args|
134
131
  timeout = args.shift || Capybara.default_wait_time
135
132
  begin
136
133
  Timeout.timeout(timeout) do
137
- sleep 0.1 while element_exists?(element_locator) && find_one(element_locator).visible?
134
+ sleep 0.1 while element_exists?(element_selector) && find_one(element_selector).visible?
138
135
  end
139
136
  rescue Timeout::Error
140
137
  raise SitePrism::TimeOutWaitingForElementInvisibility.new("#{element_name} did not become invisible")
@@ -143,11 +140,10 @@ module SitePrism::ElementContainer
143
140
  end
144
141
  end
145
142
 
146
-
147
- def create_no_locator element_name, method_name = nil
148
- no_locator_method_name = method_name.nil? ? element_name : method_name
149
- define_method no_locator_method_name do
150
- raise SitePrism::NoLocatorForElement.new("#{self.class.name} => :#{element_name} needs a locator")
143
+ def create_no_selector element_name, method_name = nil
144
+ no_selector_method_name = method_name.nil? ? element_name : method_name
145
+ define_method no_selector_method_name do
146
+ raise SitePrism::NoSelectorForElement.new("#{self.class.name} => :#{element_name} needs a selector")
151
147
  end
152
148
  end
153
149
  end
@@ -1,7 +1,7 @@
1
1
  module SitePrism
2
2
  class NoUrlForPage < StandardError; end
3
3
  class NoUrlMatcherForPage < StandardError; end
4
- class NoLocatorForElement < StandardError; end
4
+ class NoSelectorForElement < StandardError; end
5
5
  class TimeOutWaitingForElementVisibility < StandardError; end
6
6
  class TimeOutWaitingForElementInvisibility < StandardError; end
7
7
  end
@@ -49,20 +49,20 @@ module SitePrism
49
49
 
50
50
  private
51
51
 
52
- def find_one locator
53
- find locator
52
+ def find_one selector
53
+ find selector
54
54
  end
55
55
 
56
- def find_all locator
57
- all locator
56
+ def find_all selector
57
+ all selector
58
58
  end
59
59
 
60
- def element_exists? locator
61
- has_selector? locator
60
+ def element_exists? selector
61
+ has_selector? selector
62
62
  end
63
63
 
64
- def element_waiter locator
65
- wait_until { element_exists? locator }
64
+ def element_waiter selector
65
+ wait_until { element_exists? selector }
66
66
  end
67
67
  end
68
68
  end
@@ -24,20 +24,20 @@ module SitePrism
24
24
 
25
25
  private
26
26
 
27
- def find_one locator
28
- root_element.find locator
27
+ def find_one selector
28
+ root_element.find selector
29
29
  end
30
30
 
31
- def find_all locator
32
- root_element.all locator
31
+ def find_all selector
32
+ root_element.all selector
33
33
  end
34
34
 
35
- def element_exists? locator
36
- root_element.has_selector? locator
35
+ def element_exists? selector
36
+ root_element.has_selector? selector
37
37
  end
38
38
 
39
- def element_waiter locator
40
- Capybara.current_session.wait_until { element_exists? locator }
39
+ def element_waiter selector
40
+ Capybara.current_session.wait_until { element_exists? selector }
41
41
  end
42
42
  end
43
43
  end
@@ -1,4 +1,4 @@
1
1
  module SitePrism
2
- VERSION = "1.3"
2
+ VERSION = "1.4"
3
3
  end
4
4
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: site_prism
3
3
  version: !ruby/object:Gem::Version
4
- version: '1.3'
4
+ version: '1.4'
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,40 +9,40 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-07-29 00:00:00.000000000 Z
12
+ date: 2012-11-20 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: capybara
16
16
  requirement: !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
- - - ! '>='
19
+ - - ~>
20
20
  - !ruby/object:Gem::Version
21
- version: 1.1.1
21
+ version: '1.1'
22
22
  type: :runtime
23
23
  prerelease: false
24
24
  version_requirements: !ruby/object:Gem::Requirement
25
25
  none: false
26
26
  requirements:
27
- - - ! '>='
27
+ - - ~>
28
28
  - !ruby/object:Gem::Version
29
- version: 1.1.1
29
+ version: '1.1'
30
30
  - !ruby/object:Gem::Dependency
31
31
  name: rspec
32
32
  requirement: !ruby/object:Gem::Requirement
33
33
  none: false
34
34
  requirements:
35
- - - ! '>='
35
+ - - ~>
36
36
  - !ruby/object:Gem::Version
37
- version: 2.0.0
37
+ version: '2.0'
38
38
  type: :runtime
39
39
  prerelease: false
40
40
  version_requirements: !ruby/object:Gem::Requirement
41
41
  none: false
42
42
  requirements:
43
- - - ! '>='
43
+ - - ~>
44
44
  - !ruby/object:Gem::Version
45
- version: 2.0.0
45
+ version: '2.0'
46
46
  description: SitePrism gives you a simple, clean and semantic DSL for describing your
47
47
  site using the Page Object Model pattern, for use with Capybara
48
48
  email: