napybara 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: c60bfd33a34b3c9225ede612cd2ceaecb644b235
4
- data.tar.gz: ed872c87a98a39850a887a9f66e5fdcf5884e143
3
+ metadata.gz: 1d7b59ac7590d39a09e63cc572d21aa5c43f6c27
4
+ data.tar.gz: 9f3b75d890dbed6b3d19a0d4413950a212e3088f
5
5
  SHA512:
6
- metadata.gz: 745db690753460d0e8b058f176463fac216f5a335b3abf4409e2229f3f6c3f8c75ea79b5b84f6d8ce204b2134cf7172f6dfc0caef95ad11207df7b1dfdbe245f
7
- data.tar.gz: dcde1d036cedd78c9894b01110d6536db00e66a954cd82cd977ac8bcdd4961b535810e5ffb7b51b40c159bacffe8619412266289c486193c19468807d299248c
6
+ metadata.gz: a6e6557bf502740bff951cca82f8a2fbd1f177cd725e04e2dc506b89118974231ef0a58a1dd64d022b3b53c102756855c284a65b9841f9792b20c915d0b64c2a
7
+ data.tar.gz: fbb927c8fa87961f978213aa665a03622369cb427fa954985a358db171313394ebcaf02ee7cf08efa1e9b9c6a578ce28c040000ffdb7e87f87b8e5d900a674d1
@@ -0,0 +1,5 @@
1
+ # Changelog
2
+
3
+ ## 0.4.0
4
+
5
+ Require separate record selector for finding records.
data/README.md CHANGED
@@ -30,8 +30,8 @@ messages_page.form.submit!
30
30
  expect(messages_page.message(Message.find(1))).to have_content('Hello world!')
31
31
  expect(messages_page.message(Message.find(2))).to have_content('Kamusta mundo!')
32
32
 
33
- expect(messages_page.message_items[0]).to have_content('Hello world!')
34
- expect(messages_page.message_items[1]).to have_content('Kamusta mundo!')
33
+ expect(messages_page.messages[0]).to have_content('Hello world!')
34
+ expect(messages_page.messages[1]).to have_content('Kamusta mundo!')
35
35
  ```
36
36
 
37
37
  With Napybara, now you can!
@@ -73,14 +73,13 @@ expect(messages_page.form.get['class']).to eq('new-message')
73
73
 
74
74
  ## Finding by object
75
75
 
76
- In Rails, dom elements usually have ids which end with object ids, the objects
77
- usually being active records. The method generated by `Napybara::Element#finder`
78
- can also accept an object when searching for the object's matching element:
76
+ In order to find an element representing a particular ruby object, you need to
77
+ add a separate selector which incorporates the ruby object's id:
79
78
 
80
79
  ```ruby
81
80
  let(:messages_page) do
82
81
  Napybara::Element.new(self) do |page|
83
- page.finder :message, '#message-'
82
+ page.finder :message, '.message', '#message-{id}'
84
83
  end
85
84
  end
86
85
 
@@ -96,19 +95,11 @@ expect(messages_page.message(some_message).get['id'])
96
95
  ```
97
96
 
98
97
  In the above example, the `message` finder looks for an element matching the
99
- given selector (`#message-`) with `some_message`'s id (`1`). So it ends up
98
+ given selector (`#message-{id}`) with `some_message`'s id (`1`). So it ends up
100
99
  looking for "#message-1".
101
100
 
102
- ## Calling the finder with or without an object argument
101
+ If the ruby object is identified by a method other than the object's id, you can replace `{id}` with the method e.g. `{name}`, `{to_s}`.
103
102
 
104
- As you may have observed, the finder added by `Napybara::Element#finder`
105
- can be called with or without an object argument. Usually, you only want to use
106
- just one of these two options; the selector you declare will determine what
107
- option you want to use. For example, `#message-` only makes sense with an object
108
- id at the end of the selector, so you want to call the `messages_page.message()`
109
- finder with an object. On the other hand, `form.new-message` does not make sense
110
- with an object id at the end of the selector, so you want to call the
111
- `messages_page.form()` finder without an object argument.
112
103
 
113
104
  ## Checking if an element exists
114
105
 
@@ -139,14 +130,14 @@ Finally, `Napybara::Element#finder` adds a pluralized version of the finder. For
139
130
  ```ruby
140
131
  let(:messages_page) do
141
132
  Napybara::Element.new(self) do |page|
142
- page.finder :message_item, '.message'
133
+ page.finder :message, '.message'
143
134
  end
144
135
  end
145
136
 
146
137
  # ...
147
138
 
148
- expect(messages_page.message_items[0].get.text).to eq("Hello world!")
149
- expect(messages_page.message_items[1].get.text).to eq("Kamusta mundo!")
139
+ expect(messages_page.messages[0].get.text).to eq("Hello world!")
140
+ expect(messages_page.messages[1].get.text).to eq("Kamusta mundo!")
150
141
  ```
151
142
 
152
143
  Napybara uses ActiveSupport to get the plural version of the finder name.
@@ -221,8 +212,7 @@ let(:messages_page) do
221
212
  form.finder :submit_button, 'input[type=submit]'
222
213
  end
223
214
 
224
- page.finder :message, '.message-list #message-'
225
- page.finder :message_item, '.message-list .message'
215
+ page.finder :message, '.message-list .message', '#message-{id}'
226
216
  end
227
217
  end
228
218
  ```
@@ -10,19 +10,19 @@ module Napybara
10
10
  block.call(self) if block_given?
11
11
  end
12
12
 
13
- def finder(child_element_name, child_element_selector, method_name = :id, &block)
13
+ def finder(child_element_name, child_element_selector, record_selector = nil, &block)
14
14
  self.define_singleton_method(child_element_name) do |record = nil|
15
- selector = Selector.new(child_element_selector, method_name, record)
15
+ selector = Selector.new(child_element_selector, record_selector, record)
16
16
  self.class.new(self.get.find(selector.to_s), &block)
17
17
  end
18
18
 
19
19
  self.define_singleton_method("has_#{child_element_name}?") do |record = nil|
20
- selector = Selector.new(child_element_selector, method_name, record)
20
+ selector = Selector.new(child_element_selector, record_selector, record)
21
21
  self.get.has_css?(selector.to_s)
22
22
  end
23
23
 
24
24
  self.define_singleton_method("has_no_#{child_element_name}?") do |record = nil|
25
- selector = Selector.new(child_element_selector, method_name, record)
25
+ selector = Selector.new(child_element_selector, record_selector, record)
26
26
  self.get.has_no_css?(selector.to_s)
27
27
  end
28
28
 
@@ -33,13 +33,22 @@ module Napybara
33
33
  end
34
34
  end
35
35
 
36
- class Selector < Struct.new(:child_element_selector, :method_name, :record)
36
+ class Selector < Struct.new(:child_element_selector, :record_selector, :record)
37
+ METHOD_NAME_REGEX = /\{(\w+)\}/
38
+ def method_name
39
+ record_selector.match(METHOD_NAME_REGEX)[1]
40
+ end
41
+
37
42
  def record_id
38
43
  record && record.public_send(method_name)
39
44
  end
40
45
 
41
46
  def to_s
42
- "#{child_element_selector}#{record_id}"
47
+ if record
48
+ record_selector.gsub(METHOD_NAME_REGEX, record_id.to_s)
49
+ else
50
+ child_element_selector
51
+ end
43
52
  end
44
53
  end
45
54
  end
@@ -1,3 +1,3 @@
1
1
  module Napybara
2
- VERSION = "0.3.1"
2
+ VERSION = "0.4.0"
3
3
  end
@@ -63,7 +63,7 @@ describe 'Readme example:' do
63
63
 
64
64
  When "I add an object finder to the Napybara page wrapping the capybara page" do
65
65
  @messages_page = Napybara::Element.new(capybara_page) do |page|
66
- page.finder :message, '#message-'
66
+ page.finder :message, '.message', '#message-{id}'
67
67
  end
68
68
  end
69
69
 
@@ -82,7 +82,7 @@ describe 'Readme example:' do
82
82
  When "I add finders to the Napybara page wrapping the capybara page" do
83
83
  @messages_page = Napybara::Element.new(capybara_page) do |page|
84
84
  page.finder :form, 'form.new-message'
85
- page.finder :message, '#message-'
85
+ page.finder :message, '.message', '#message-{id}'
86
86
  end
87
87
  end
88
88
 
@@ -50,7 +50,7 @@ describe Napybara::Element do
50
50
 
51
51
  it 'allows the element to find a sub-element with an id' do
52
52
  page = described_class.new(capybara_page)
53
- page.finder(:form, '#form-')
53
+ page.finder(:form, '.some-form', '#form-{id}')
54
54
 
55
55
  object = OpenStruct.new(id: 1)
56
56
 
@@ -59,7 +59,7 @@ describe Napybara::Element do
59
59
 
60
60
  it 'allows the element to find a sub-element with a record method' do
61
61
  page = described_class.new(capybara_page)
62
- page.finder(:form, '#form-', :name)
62
+ page.finder(:form, '.some-form', '#form-{name}')
63
63
 
64
64
  object = OpenStruct.new(name: 1)
65
65
 
@@ -88,7 +88,7 @@ describe Napybara::Element do
88
88
 
89
89
  it 'adds a method to check if the element has a sub-element matching a record' do
90
90
  page = described_class.new(capybara_page)
91
- page.finder(:form, '#form-')
91
+ page.finder(:form, '.some-form', '#form-{id}')
92
92
 
93
93
  object = OpenStruct.new(id: 1)
94
94
 
@@ -97,7 +97,7 @@ describe Napybara::Element do
97
97
 
98
98
  it 'adds a method to check if the element has no sub-element matching a record' do
99
99
  page = described_class.new(capybara_page)
100
- page.finder(:form, '#form-')
100
+ page.finder(:form, '.some-form', '#form-{id}')
101
101
 
102
102
  object = OpenStruct.new(id: 1)
103
103
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: napybara
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
  - George Mendoza
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-04-06 00:00:00.000000000 Z
11
+ date: 2014-05-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -190,6 +190,7 @@ files:
190
190
  - .rspec
191
191
  - .rubocop.yml
192
192
  - .travis.yml
193
+ - CHANGELOG.md
193
194
  - Gemfile
194
195
  - Guardfile
195
196
  - LICENSE.txt