Skip to content

Commit

Permalink
More syntactic sugar
Browse files Browse the repository at this point in the history
  • Loading branch information
andyw8 committed Apr 20, 2012
1 parent 136f5af commit 227f05f
Show file tree
Hide file tree
Showing 9 changed files with 42 additions and 53 deletions.
12 changes: 4 additions & 8 deletions README.markdown
Expand Up @@ -30,18 +30,15 @@ features/step_definitions/product_steps.rb

```ruby
Given /^the products:$/ do |table|
@products = []
table.raw.flatten.each do |p|
@products << Product.create!(:title => p)
end
@products = table.raw.flatten.map { |p| Product.create!(:title => p) }
end

When /^I visit the store$/ do
@page = Pages::Products::Index.visit
end

Then /^those products should be listed$/ do
@page.product_titles.should == @products.collect{ |p| p.title }
@page.product_titles.should == @products.map{ |p| p.title }
end
```

Expand All @@ -52,9 +49,8 @@ module Pages
module Products
class Index
include CapybaraPageObject::Page
def path
'products'
end

path 'products'

def product_titles
all('.products .title').collect(&:text)
Expand Down
9 changes: 2 additions & 7 deletions lib/capybara-page-object/elements/anchor.rb
@@ -1,11 +1,6 @@
module CapybaraPageObject
class Anchor < CapybaraPageObject::Element
def link
source[:href]
end

def uri
URI link
end
field(:link) { source[:href] }
field(:uri) { URI link }
end
end
9 changes: 2 additions & 7 deletions lib/capybara-page-object/elements/form_field.rb
@@ -1,12 +1,7 @@
module CapybaraPageObject
class FormField < CapybaraPageObject::Element
def key
source[:name]
end

def value
source.value
end
field(:key) { source[:name] }
field(:value) { source.value }

def blank?
value.nil? || '' == value
Expand Down
16 changes: 4 additions & 12 deletions lib/capybara-page-object/elements/head.rb
@@ -1,15 +1,7 @@
module CapybaraPageObject
class Head < CapybaraPageObject::Element
def title
find('title').text
end

def meta_description
find('meta[@name="description"]')['content']
end

def meta_keywords
find('meta[@name="keywords"]')['content'].split(',').collect(&:strip)
end
field(:title) { find('title').text }
field(:meta_description) { find('meta[@name="description"]')['content'] }
field(:meta_keywords) { find('meta[@name="keywords"]')['content'].split(',').collect(&:strip) }
end
end
end
14 changes: 3 additions & 11 deletions lib/capybara-page-object/elements/image.rb
@@ -1,15 +1,7 @@
module CapybaraPageObject
class Image < CapybaraPageObject::Element
def key
alt
end

def value
URI(source[:src])
end

def alt
source[:alt].strip
end
field(:key) { alt }
field(:value) { URI(source[:src]) }
field(:alt){ source[:alt].strip }
end
end
9 changes: 2 additions & 7 deletions lib/capybara-page-object/elements/meta.rb
@@ -1,11 +1,6 @@
module CapybaraPageObject
class Meta < CapybaraPageObject::Element
def key
source[:name]
end

def value
source[:content]
end
field(:key) { source[:name] }
field(:value) { source[:content] }
end
end
7 changes: 7 additions & 0 deletions lib/capybara-page-object/node.rb
@@ -1,3 +1,6 @@
require 'capybara-page-object/delegators'


module CapybaraPageObject
class Node
include Delegators
Expand All @@ -24,5 +27,9 @@ def source
def self.element(name, &block)
define_method(name, &block)
end

def self.field(name, &block)
define_method(name, &block)
end
end
end
7 changes: 7 additions & 0 deletions lib/capybara-page-object/page.rb
@@ -1,3 +1,6 @@
require 'capybara-page-object/node'
require 'capybara-page-object/collections'

module CapybaraPageObject

module InstanceMethods
Expand Down Expand Up @@ -56,6 +59,10 @@ def forms
end
end

def self.path(p)
define_method(:path) { p }
end

include CapybaraPageObject::Collections
include CapybaraPageObject::InstanceMethods
extend CapybaraPageObject::ClassMethods
Expand Down
12 changes: 11 additions & 1 deletion spec/page_spec.rb
@@ -1,5 +1,5 @@
require 'active_support/ordered_hash'
require 'capybara-page-object'
require File.dirname(__FILE__) + '../../lib/capybara-page-object/page'

describe "a class which extends CapybaraPageObject::Page" do

Expand Down Expand Up @@ -73,5 +73,15 @@ def path
FooIndex.visit Object
end.should raise_error ArgumentError
end

it "supports some dsl syntax" do
class Blah < CapybaraPageObject::Page
path 'xyz'
end
session = mock()
session.should_receive(:visit).with('/xyz')
Capybara.stub :current_session => session
@page = Blah.visit
end
end
end

0 comments on commit 227f05f

Please sign in to comment.