page_magic 1.0.0.alpha4 → 1.0.0.alpha5

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.
Files changed (41) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +9 -0
  3. data/Gemfile +7 -8
  4. data/Gemfile.lock +15 -30
  5. data/Rakefile +12 -10
  6. data/VERSION +1 -1
  7. data/lib/ext/string.rb +6 -6
  8. data/lib/page_magic/driver.rb +2 -2
  9. data/lib/page_magic/drivers/poltergeist.rb +1 -2
  10. data/lib/page_magic/drivers/rack_test.rb +1 -1
  11. data/lib/page_magic/drivers/selenium.rb +2 -2
  12. data/lib/page_magic/drivers.rb +5 -6
  13. data/lib/page_magic/element.rb +50 -43
  14. data/lib/page_magic/element_context.rb +14 -14
  15. data/lib/page_magic/elements.rb +9 -10
  16. data/lib/page_magic/exceptions.rb +1 -2
  17. data/lib/page_magic/page_magic.rb +12 -9
  18. data/lib/page_magic/session.rb +21 -16
  19. data/lib/page_magic.rb +7 -10
  20. data/page_magic.gemspec +57 -58
  21. data/spec/element_spec.rb +34 -27
  22. data/spec/helpers/capybara.rb +4 -4
  23. data/spec/member_methods_spec.rb +1 -10
  24. data/spec/page_magic/driver_spec.rb +5 -5
  25. data/spec/page_magic/drivers/poltergeist_spec.rb +4 -3
  26. data/spec/page_magic/drivers/rack_test_spec.rb +4 -3
  27. data/spec/page_magic/drivers/selenium_spec.rb +3 -2
  28. data/spec/page_magic/drivers_spec.rb +3 -5
  29. data/spec/page_magic/element_context_spec.rb +17 -29
  30. data/spec/page_magic/elements_spec.rb +13 -30
  31. data/spec/page_magic/page_magic_spec.rb +19 -0
  32. data/spec/page_magic/session_spec.rb +52 -31
  33. data/spec/page_magic/usage/defining_pages_spec.rb +3 -7
  34. data/spec/page_magic/usage/include_page_magic_spec.rb +2 -2
  35. data/spec/page_magic/usage/interacting_with_pages_spec.rb +0 -2
  36. data/spec/page_magic/usage/starting_a_session_spec.rb +4 -7
  37. data/spec/page_magic_spec.rb +4 -6
  38. data/spec/spec_helper.rb +14 -22
  39. metadata +5 -19
  40. data/Guardfile +0 -8
  41. data/spec/page_magic/usage/defining_page_elements_spec.rb +0 -7
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9a6a5a8192c367103828b5dd1a471cd38f8d2440
4
- data.tar.gz: 93107e43e4697a659d38e6d41875c52698e6caf9
3
+ metadata.gz: b33162c06d10048ac36843da5cd88309ad7184dc
4
+ data.tar.gz: 8c92249eb7b1c575dc1465b7fa4d8c35bd8bb06b
5
5
  SHA512:
6
- metadata.gz: 8fb9a1fc03dca9d10af4b854d0f968de74b57269bcfd2d6bf8e6f8db452e336173096e678a4619f8c55be8fc2234016369ff6cd66209a7e023590e5d16d4e8af
7
- data.tar.gz: 676d99b55ed4baa40dc576a6277393f54e9d77225f9f8f73a3680d7a290a5d44fd89c515144e94d5d559643ab386adcf099ad64a135cdc4ab6482eefd2576b72
6
+ metadata.gz: 58ec1e9df6f5a7194e5a4a3af215ead0bb42b49df4fe0485f91e4556b4aa49f4b0e2aa0a576999faca425c89cce75a2bf1f8147be6561ec7f131982a4710d79a
7
+ data.tar.gz: 97d1f7e0db82b33d7b066738b484dc3b6d7c83d75a7462429aaa6eb5a03e37b139aaf357ea671a2717df23109e0332d2b8d3c2508bb3a43a41d8b34567a467e4
data/.rubocop.yml ADDED
@@ -0,0 +1,9 @@
1
+ Documentation:
2
+ Enabled: false
3
+
4
+ AllCops:
5
+ Exclude:
6
+ - 'pkg/**/*'
7
+ - 'vendor/**/*'
8
+ - 'coverage/**/*'
9
+ - '.idea/**/*'
data/Gemfile CHANGED
@@ -1,19 +1,18 @@
1
- source "http://rubygems.org"
1
+ source 'http://rubygems.org'
2
2
 
3
3
  gem 'capybara'
4
4
  gem 'activesupport'
5
5
  gem 'wait'
6
6
 
7
7
  group :test do
8
- gem "watir-webdriver"
8
+ gem 'watir-webdriver'
9
9
  gem 'sinatra'
10
- gem "rspec", require: 'rspec/core/rake_task'
11
- gem "simplecov", require: false
10
+ gem 'rspec', require: 'rspec/core/rake_task'
11
+ gem 'simplecov', require: false
12
12
  gem 'poltergeist'
13
13
  end
14
14
 
15
15
  group :development do
16
- gem "jeweler"
17
- gem 'guard'
18
- gem 'guard-ctags-bundler'
19
- end
16
+ gem 'jeweler'
17
+ gem 'rubocop', require: 'rubocop/rake_task'
18
+ end
data/Gemfile.lock CHANGED
@@ -8,6 +8,9 @@ GEM
8
8
  thread_safe (~> 0.3, >= 0.3.4)
9
9
  tzinfo (~> 1.1)
10
10
  addressable (2.3.6)
11
+ ast (2.1.0)
12
+ astrolabe (1.3.1)
13
+ parser (~> 2.2)
11
14
  builder (3.2.2)
12
15
  capybara (2.1.0)
13
16
  mime-types (>= 1.16)
@@ -15,17 +18,13 @@ GEM
15
18
  rack (>= 1.0.0)
16
19
  rack-test (>= 0.5.4)
17
20
  xpath (~> 2.0)
18
- celluloid (0.15.2)
19
- timers (~> 1.1.0)
20
21
  childprocess (0.3.9)
21
22
  ffi (~> 1.0, >= 1.0.11)
22
23
  cliver (0.2.2)
23
- coderay (1.1.0)
24
24
  diff-lcs (1.2.4)
25
25
  faraday (0.8.9)
26
26
  multipart-post (~> 1.2.0)
27
27
  ffi (1.9.3)
28
- formatador (0.2.5)
29
28
  git (1.2.6)
30
29
  github_api (0.10.2)
31
30
  addressable
@@ -34,14 +33,6 @@ GEM
34
33
  multi_json (~> 1.4)
35
34
  nokogiri (~> 1.6.0)
36
35
  oauth2
37
- guard (2.6.1)
38
- formatador (>= 0.2.4)
39
- listen (~> 2.7)
40
- lumberjack (~> 1.0)
41
- pry (>= 0.9.12)
42
- thor (>= 0.18.1)
43
- guard-ctags-bundler (1.0.2)
44
- guard (~> 2.0)
45
36
  hashie (2.0.5)
46
37
  highline (1.6.21)
47
38
  i18n (0.7.0)
@@ -57,12 +48,6 @@ GEM
57
48
  json (1.8.1)
58
49
  jwt (0.1.11)
59
50
  multi_json (>= 1.5)
60
- listen (2.7.8)
61
- celluloid (>= 0.15.2)
62
- rb-fsevent (>= 0.9.3)
63
- rb-inotify (>= 0.9)
64
- lumberjack (1.0.6)
65
- method_source (0.8.2)
66
51
  mime-types (1.25)
67
52
  mini_portile (0.5.1)
68
53
  minitest (5.7.0)
@@ -77,24 +62,21 @@ GEM
77
62
  multi_json (~> 1.3)
78
63
  multi_xml (~> 0.5)
79
64
  rack (~> 1.2)
65
+ parser (2.2.2.6)
66
+ ast (>= 1.1, < 3.0)
80
67
  poltergeist (1.4.1)
81
68
  capybara (~> 2.1.0)
82
69
  cliver (~> 0.2.1)
83
70
  multi_json (~> 1.0)
84
71
  websocket-driver (>= 0.2.0)
85
- pry (0.10.0)
86
- coderay (~> 1.1.0)
87
- method_source (~> 0.8.1)
88
- slop (~> 3.4)
72
+ powerpack (0.1.1)
89
73
  rack (1.5.2)
90
74
  rack-protection (1.5.0)
91
75
  rack
92
76
  rack-test (0.6.2)
93
77
  rack (>= 1.0)
78
+ rainbow (2.0.0)
94
79
  rake (10.2.2)
95
- rb-fsevent (0.9.4)
96
- rb-inotify (0.9.5)
97
- ffi (>= 0.5.0)
98
80
  rdoc (4.1.1)
99
81
  json (~> 1.4)
100
82
  rspec (2.14.1)
@@ -105,6 +87,13 @@ GEM
105
87
  rspec-expectations (2.14.3)
106
88
  diff-lcs (>= 1.1.3, < 2.0)
107
89
  rspec-mocks (2.14.4)
90
+ rubocop (0.34.0)
91
+ astrolabe (~> 1.3)
92
+ parser (>= 2.2.2.5, < 3.0)
93
+ powerpack (~> 0.1)
94
+ rainbow (>= 1.99.1, < 3.0)
95
+ ruby-progressbar (~> 1.4)
96
+ ruby-progressbar (1.7.5)
108
97
  rubyzip (0.9.9)
109
98
  selenium-webdriver (2.35.1)
110
99
  childprocess (>= 0.2.5)
@@ -119,11 +108,8 @@ GEM
119
108
  rack (~> 1.4)
120
109
  rack-protection (~> 1.4)
121
110
  tilt (~> 1.3, >= 1.3.4)
122
- slop (3.5.0)
123
- thor (0.19.1)
124
111
  thread_safe (0.3.5)
125
112
  tilt (1.4.1)
126
- timers (1.1.0)
127
113
  tzinfo (1.2.2)
128
114
  thread_safe (~> 0.1)
129
115
  wait (0.5.1)
@@ -140,11 +126,10 @@ PLATFORMS
140
126
  DEPENDENCIES
141
127
  activesupport
142
128
  capybara
143
- guard
144
- guard-ctags-bundler
145
129
  jeweler
146
130
  poltergeist
147
131
  rspec
132
+ rubocop
148
133
  simplecov
149
134
  sinatra
150
135
  wait
data/Rakefile CHANGED
@@ -1,19 +1,21 @@
1
- Bundler.require :test,:development
1
+ Bundler.require :test, :development
2
+
3
+ RuboCop::RakeTask.new
2
4
 
3
5
  RSpec::Core::RakeTask.new(:spec) do
4
- ENV['coverage'] = "true"
6
+ ENV['coverage'] = 'true'
5
7
  end
6
8
 
7
9
  Jeweler::Tasks.new do |gem|
8
- gem.name = "page_magic"
9
- gem.homepage = "https://github.com/ladtech/page_magic"
10
- gem.license = "ruby"
11
- gem.summary = "Framework for modeling and interacting with webpages"
12
- gem.description = "Framework for modeling and interacting with webpages which wraps capybara"
13
- gem.email = "info@lad-tech.com"
14
- gem.authors = ["Leon Davis"]
10
+ gem.name = 'page_magic'
11
+ gem.homepage = 'https://github.com/ladtech/page_magic'
12
+ gem.license = 'ruby'
13
+ gem.summary = 'Framework for modeling and interacting with webpages'
14
+ gem.description = 'Framework for modeling and interacting with webpages which wraps capybara'
15
+ gem.email = 'info@lad-tech.com'
16
+ gem.authors = ['Leon Davis']
15
17
  end
16
18
 
17
19
  Jeweler::RubygemsDotOrgTasks.new
18
20
 
19
- task :default => :spec
21
+ task default: :spec
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.0.0.alpha4
1
+ 1.0.0.alpha5
data/lib/ext/string.rb CHANGED
@@ -1,9 +1,9 @@
1
1
  class String
2
2
  def to_snake_case
3
- self.gsub(/::/, '/').
4
- gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2').
5
- gsub(/([a-z\d])([A-Z])/, '\1_\2').
6
- tr("-", "_").
7
- downcase
3
+ gsub(/::/, '/')
4
+ .gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2')
5
+ .gsub(/([a-z\d])([A-Z])/, '\1_\2')
6
+ .tr('-', '_')
7
+ .downcase
8
8
  end
9
- end
9
+ end
@@ -6,7 +6,7 @@ module PageMagic
6
6
  @supported_browsers = supported_browsers
7
7
  end
8
8
 
9
- def support? browser
9
+ def support?(browser)
10
10
  supported_browsers.include?(browser)
11
11
  end
12
12
 
@@ -16,4 +16,4 @@ module PageMagic
16
16
  driver_clazz.new(app, options)
17
17
  end
18
18
  end
19
- end
19
+ end
@@ -5,5 +5,4 @@ module PageMagic
5
5
  Capybara::Poltergeist::Driver
6
6
  end
7
7
  end
8
-
9
- end
8
+ end
@@ -4,4 +4,4 @@ module PageMagic
4
4
  Capybara::RackTest::Driver
5
5
  end
6
6
  end
7
- end
7
+ end
@@ -1,8 +1,8 @@
1
1
  module PageMagic
2
2
  class Drivers
3
- Selenium = Driver.new(:chrome, :firefox) do
3
+ Selenium = Driver.new(:chrome, :firefox) do
4
4
  require 'watir-webdriver'
5
5
  Capybara::Selenium::Driver
6
6
  end
7
7
  end
8
- end
8
+ end
@@ -2,19 +2,18 @@ require 'page_magic/driver'
2
2
  module PageMagic
3
3
  class Drivers
4
4
  def all
5
- @all ||=[]
5
+ @all ||= []
6
6
  end
7
7
 
8
8
  def register(driver)
9
9
  all << driver
10
10
  end
11
11
 
12
-
13
- def find browser
14
- all.find{|driver|driver.support?(browser)}
12
+ def find(browser)
13
+ all.find { |driver| driver.support?(browser) }
15
14
  end
16
15
 
17
- def load path="#{__dir__}/drivers"
16
+ def load(path = "#{__dir__}/drivers")
18
17
  require 'active_support/inflector'
19
18
 
20
19
  Dir["#{path}/*.rb"].each do |driver_file|
@@ -24,7 +23,7 @@ module PageMagic
24
23
  end
25
24
  end
26
25
 
27
- def == other
26
+ def ==(other)
28
27
  other.is_a?(Drivers) && other.all == other.all
29
28
  end
30
29
  end
@@ -1,7 +1,6 @@
1
1
  module PageMagic
2
-
3
2
  module MethodObserver
4
- def singleton_method_added arg
3
+ def singleton_method_added(arg)
5
4
  @singleton_methods_added = true unless arg == :singleton_method_added
6
5
  end
7
6
 
@@ -16,34 +15,36 @@ module PageMagic
16
15
  include Elements
17
16
 
18
17
  class << self
19
- def inherited clazz
18
+ def inherited(clazz)
20
19
  clazz.extend(Elements)
21
20
 
22
- def clazz.selector selector=nil
21
+ def clazz.selector(selector = nil)
23
22
  return @selector unless selector
24
23
  @selector = selector
25
24
  end
26
25
  end
27
26
  end
28
27
 
29
- def initialize name, parent_page_element, options, &block
30
- options = {type: :element, selector: {}, browser_element: nil}.merge(options)
28
+ def initialize(name, parent_page_element, options, &block)
29
+ options = { type: :element, selector: {}, browser_element: nil }.merge(options)
31
30
  @browser_element = options[:browser_element]
32
31
  @selector = options[:selector]
33
32
 
34
33
  @before_hook = proc {}
35
34
  @after_hook = proc {}
36
- @parent_page_element, @type, @name = parent_page_element, options[:type], name.to_s.downcase.to_sym
35
+ @parent_page_element = parent_page_element
36
+ @type = options[:type]
37
+ @name = name.to_s.downcase.to_sym
37
38
 
38
39
  extend MethodObserver
39
40
  expand &block if block
40
41
  end
41
42
 
42
- def expand *args, &block
43
+ def expand(*args, &block)
43
44
  instance_exec *args, &block
44
45
  end
45
46
 
46
- def selector selector=nil
47
+ def selector(selector = nil)
47
48
  return @selector unless selector
48
49
  @selector = selector
49
50
  end
@@ -56,62 +57,62 @@ module PageMagic
56
57
  @parent_page_element.session
57
58
  end
58
59
 
59
- def before &block
60
+ def before(&block)
60
61
  return @before_hook unless block
61
62
  @before_hook = block
62
63
  end
63
64
 
64
- def after &block
65
+ def after(&block)
65
66
  return @after_hook unless block
66
67
  @after_hook = block
67
68
  end
68
69
 
69
- def method_missing method, *args
70
+ def method_missing(method, *args)
71
+ element_context(args).send(method, args.first)
72
+ rescue ElementMissingException
70
73
  begin
71
- ElementContext.new(self, @browser_element, self, *args).send(method, args.first)
72
- rescue ElementMissingException
73
- begin
74
- @browser_element.send(method, *args)
75
- rescue
76
- super
77
- end
74
+ @browser_element.send(method, *args)
75
+ rescue
76
+ super
78
77
  end
79
78
  end
80
79
 
81
- def browser_element *args
80
+ def respond_to?(*args)
81
+ super || element_context.respond_to?(*args) || @browser_element.respond_to?(*args)
82
+ end
83
+
84
+ def browser_element(*_args)
82
85
  return @browser_element if @browser_element
83
- raise UndefinedSelectorException, "Pass a selector/define one on the class" if @selector.empty?
86
+ fail UndefinedSelectorException, 'Pass a selector/define one on the class' if @selector.empty?
84
87
  if @selector
85
88
  selector_copy = @selector.dup
86
89
  method = selector.keys.first
87
90
  selector = selector_copy.delete(method)
88
91
  options = selector_copy
89
92
 
90
-
91
93
  finder_method, selector_type, selector_arg = case method
92
- when :id
93
- [:find, "##{selector}"]
94
- when :xpath
95
- [:find, :xpath, selector]
96
- when :name
97
- [:find, "*[name='#{selector}']"]
98
- when :css
99
- [:find, :css, selector]
100
- when :label
101
- [:find_field, selector]
102
- when :text
103
- if @type == :link
104
- [:find_link, selector]
105
- elsif @type == :button
106
- [:find_button, selector]
107
- else
108
- raise UnsupportedSelectorException
109
- end
110
-
94
+ when :id
95
+ [:find, "##{selector}"]
96
+ when :xpath
97
+ [:find, :xpath, selector]
98
+ when :name
99
+ [:find, "*[name='#{selector}']"]
100
+ when :css
101
+ [:find, :css, selector]
102
+ when :label
103
+ [:find_field, selector]
104
+ when :text
105
+ if @type == :link
106
+ [:find_link, selector]
107
+ elsif @type == :button
108
+ [:find_button, selector]
111
109
  else
112
- raise UnsupportedSelectorException
113
- end
110
+ fail UnsupportedSelectorException
111
+ end
114
112
 
113
+ else
114
+ fail UnsupportedSelectorException
115
+ end
115
116
 
116
117
  finder_args = [selector_type, selector_arg].compact
117
118
  finder_args << options unless options.empty?
@@ -119,5 +120,11 @@ module PageMagic
119
120
  end
120
121
  @browser_element
121
122
  end
123
+
124
+ private
125
+
126
+ def element_context(*args)
127
+ ElementContext.new(self, @browser_element, self, *args)
128
+ end
122
129
  end
123
130
  end
@@ -1,26 +1,23 @@
1
1
  module PageMagic
2
-
3
2
  class ElementMissingException < Exception
4
-
5
3
  end
6
4
 
7
5
  class ElementContext
8
-
9
6
  attr_reader :caller, :page_element
10
7
 
11
- def initialize page_element, browser, caller, *args
8
+ def initialize(page_element, browser, caller, *_args)
12
9
  @page_element = page_element
13
10
  @browser = browser
14
11
  @caller = caller
15
12
  end
16
13
 
17
- def method_missing method, *args
14
+ def method_missing(method, *args)
18
15
  return @caller.send(method, *args) if @executing_hooks
19
16
  return @page_element.send(method, *args) if @page_element.methods.include?(method)
20
17
 
21
- element_locator_factory = @page_element.element_definitions[method]
18
+ element_locator_factory = @page_element.element_definitions[method]
22
19
 
23
- raise ElementMissingException, "Could not find: #{method}" unless element_locator_factory
20
+ fail ElementMissingException, "Could not find: #{method}" unless element_locator_factory
24
21
 
25
22
  if args.empty?
26
23
  element_locator = element_locator_factory.call(@page_element, nil)
@@ -32,16 +29,21 @@ module PageMagic
32
29
  apply_hooks(page_element: element_locator.browser_element,
33
30
  capybara_method: action_method,
34
31
  before_hook: element_locator.before,
35
- after_hook: element_locator.after,
36
- )
32
+ after_hook: element_locator.after
33
+ )
37
34
  end
38
35
 
39
36
  element_locator.section? ? element_locator : element_locator.browser_element
40
37
  end
41
38
 
39
+ def respond_to?(*args)
40
+ @page_element.element_definitions.keys.include?(args.first)
41
+ end
42
+
42
43
  def apply_hooks(options)
43
44
  _self = self
44
- page_element, capybara_method = options[:page_element], options[:capybara_method]
45
+ page_element = options[:page_element]
46
+ capybara_method = options[:capybara_method]
45
47
  if page_element.respond_to?(capybara_method)
46
48
  original_method = page_element.method(capybara_method)
47
49
 
@@ -53,13 +55,11 @@ module PageMagic
53
55
  end
54
56
  end
55
57
 
56
-
57
- def call_hook &block
58
+ def call_hook(&block)
58
59
  @executing_hooks = true
59
- result = self.instance_exec @browser, &block
60
+ result = instance_exec @browser, &block
60
61
  @executing_hooks = false
61
62
  result
62
63
  end
63
-
64
64
  end
65
65
  end
@@ -8,7 +8,7 @@ module PageMagic
8
8
  class InvalidMethodNameException < Exception
9
9
  end
10
10
 
11
- def self.extended clazz
11
+ def self.extended(clazz)
12
12
  clazz.class_eval do
13
13
  unless instance_methods.include?(:browser_element)
14
14
  attr_reader :browser_element
@@ -20,8 +20,8 @@ module PageMagic
20
20
  end
21
21
  end
22
22
 
23
- def method_added method
24
- raise InvalidMethodNameException, "method name matches element name" if element_definitions[method]
23
+ def method_added(method)
24
+ fail InvalidMethodNameException, 'method name matches element name' if element_definitions[method]
25
25
  end
26
26
 
27
27
  def elements(browser_element, *args)
@@ -31,11 +31,10 @@ module PageMagic
31
31
  TYPES = [:element, :text_field, :button, :link, :checkbox, :select_list, :radios, :textarea, :section]
32
32
  TYPES.each do |type|
33
33
  define_method type do |*args, &block|
34
-
35
34
  first_arg = args.first
36
35
  if first_arg.is_a?(Symbol)
37
36
  name, object = args
38
- options = {type: type}
37
+ options = { type: type }
39
38
  if object.is_a?(Hash)
40
39
  options[:selector] = object
41
40
  else
@@ -44,7 +43,7 @@ module PageMagic
44
43
 
45
44
  add_element_definition(name) do |*args_for_block|
46
45
  page_section = PageMagic::Element.new name, args_for_block.delete_at(0), options
47
- page_section.expand *args_for_block, &(block || Proc.new {})
46
+ page_section.expand *args_for_block, &(block || proc {})
48
47
  page_section
49
48
  end
50
49
 
@@ -64,11 +63,11 @@ module PageMagic
64
63
  end
65
64
  end
66
65
 
67
- def add_element_definition name, &block
68
- raise InvalidElementNameException, "duplicate page element defined" if element_definitions[name]
66
+ def add_element_definition(name, &block)
67
+ fail InvalidElementNameException, 'duplicate page element defined' if element_definitions[name]
69
68
 
70
69
  methods = respond_to?(:instance_methods) ? instance_methods : methods()
71
- raise InvalidElementNameException, "a method already exists with this method name" if methods.find { |method| method == name }
70
+ fail InvalidElementNameException, 'a method already exists with this method name' if methods.find { |method| method == name }
72
71
 
73
72
  element_definitions[name] = block
74
73
  end
@@ -77,4 +76,4 @@ module PageMagic
77
76
  @element_definitions ||= {}
78
77
  end
79
78
  end
80
- end
79
+ end
@@ -1,10 +1,9 @@
1
1
  module PageMagic
2
2
  class UnsupportedSelectorException < Exception
3
-
4
3
  end
5
4
  class UndefinedSelectorException < Exception
6
5
  end
7
6
 
8
7
  class MissingLocatorOrSelector < Exception
9
8
  end
10
- end
9
+ end
@@ -1,8 +1,7 @@
1
1
  module PageMagic
2
2
  attr_reader :browser, :session
3
3
 
4
- def initialize session=Session.new(Capybara.current_session), options={}, &block
5
-
4
+ def initialize(session = Session.new(Capybara.current_session), options = {}, &block)
6
5
  @browser = session.raw_session
7
6
  @session = session
8
7
 
@@ -15,8 +14,8 @@ module PageMagic
15
14
  @browser.title
16
15
  end
17
16
 
18
- def text_on_page? text
19
- text().downcase.include?(text.downcase)
17
+ def text_on_page?(text)
18
+ text.downcase.include?(text.downcase)
20
19
  end
21
20
 
22
21
  def visit
@@ -28,11 +27,15 @@ module PageMagic
28
27
  @browser.text
29
28
  end
30
29
 
31
- def method_missing method, *args
32
- ElementContext.new(self, @browser, self).send(method, *args)
30
+ def method_missing(method, *args)
31
+ element_context.send(method, *args)
33
32
  end
34
- end
35
-
36
-
37
33
 
34
+ def respond_to?(*args)
35
+ super || element_context.respond_to?(*args)
36
+ end
38
37
 
38
+ def element_context
39
+ ElementContext.new(self, @browser, self)
40
+ end
41
+ end