page-objectify 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ae357f04a6463e9ce9ca859ef3b35dd972bf2273
4
- data.tar.gz: d8ccb8ea92acc03c956ed4c417b181d2ecade5c6
3
+ metadata.gz: 2e417ae16edad20693749b84059c88413fae8636
4
+ data.tar.gz: 4db57673c01f2bf12050c57e06f2a9ab6304af44
5
5
  SHA512:
6
- metadata.gz: f39e6a878b561ea68ad3ecedcf18f0e46cf190a64952ef4c0b7505ab2c8d4e66e26bb298ef89650464739e9224a7c2516ab4aa9156e604f4c584aba2b2fe437e
7
- data.tar.gz: de9a4634a70803745848cebc3b9526998fe4f3b6a9a8a5951649b0559477cbd4c4109c42f0d4bc421c3cdedc9b783058d65b0e05af417d11d96eee4aa1f6aff5
6
+ metadata.gz: 6f6785027783a751977dad1bde51b0028bac70eb94e43a269dcec69e12cf53df3fc7bd9094b6e056441be647589246d882a0a1073e608543fca1ab874ffbc2ea
7
+ data.tar.gz: d9c093ed86d7f5a1396783e5ffee3df5306b010a34df03d8231270a8b6583c60a8e110831c63cde95162f388f69e72a5b47ac22cfca755b1fde8ce9eafefdc3a
data/README.md CHANGED
@@ -51,16 +51,10 @@ require "page-objectify/generator"
51
51
  require "watir-webdriver"
52
52
 
53
53
  class GooglePageGenerator < PageObjectify::Generator
54
- # Overriding the constructor here is optional
55
- def initialize
56
- super(file: "path/to/pages-dir/google_page.rb")
57
- end
58
-
59
54
  def visit
60
55
  @browser = Watir::Browser.new :chrome
61
56
  @browser.goto "www.google.com"
62
- # TODO: write a #wait_for_ajax helper
63
- sleep 1
57
+ sleep 1 # Use `wait_for_ajax` instead of `sleep`, if jQuery is available on the page!
64
58
  end
65
59
  end
66
60
  ```
@@ -69,15 +63,16 @@ end
69
63
  # Rakefile
70
64
  require "generators/google_page_generator"
71
65
 
72
- namespace :po do
73
- task :generate do
74
- GooglePageGenerator.new.generate!
66
+ namespace :generate do
67
+ task :po do
68
+ # Specifying file path is optional
69
+ GooglePageGenerator.new(file: "path/to/pages-dir/google_page.rb").generate!
75
70
  # and any other pages you want to generate programmatically
76
71
  end
77
72
  end
78
73
  ```
79
74
 
80
- Then, upon executing the rake task `$ bundle exec rake po:generate`, the following file will be generated:
75
+ Then, upon executing the rake task `$ bundle exec rake generate:po`, the following file will be generated:
81
76
 
82
77
  ```ruby
83
78
  class GooglePage < BasePage
@@ -104,7 +99,15 @@ PageObjectify::Logging.logger.level = 0
104
99
 
105
100
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
106
101
 
107
- To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
102
+ To install this gem onto your local machine, run `bundle exec rake install`.
103
+
104
+ ## Releasing
105
+
106
+ To release a new version, I must:
107
+
108
+ 0. Update the version number in `version.rb`.
109
+ 0. Run `rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
110
+ 0. Run `rake changelog`, which will auto-generate a changelog of the PRs merged/Issues resolved in the newest release.
108
111
 
109
112
  ## Contributing
110
113
 
data/Rakefile CHANGED
@@ -17,5 +17,9 @@ Cucumber::Rake::Task.new(:cucumber_wip) do |t|
17
17
  t.cucumber_opts = "-p wip"
18
18
  end
19
19
 
20
+ task :changelog do
21
+ sh "github_changelog_generator smoll/page-objectify"
22
+ end
23
+
20
24
  task test: [:spec, :cucumber]
21
25
  task default: :test
@@ -1,12 +1,13 @@
1
1
  module PageObjectify
2
2
  class Config
3
- attr_reader :page, :base, :file
3
+ attr_reader :generator_class, :page, :base, :file
4
4
 
5
5
  def initialize(**keywords)
6
- truncated = keywords[:generator_class].chomp("Generator")
7
- @page = keywords[:page] || truncated
6
+ @generator_class = keywords[:generator_class] # => "GooglePageGenerator"
7
+ truncated = @generator_class.chomp("Generator")
8
+ @page = keywords[:page] || truncated # => "GooglePage"
8
9
  @base = keywords[:base] || "BasePage"
9
- @file = keywords[:file] || "#{underscorize(truncated)}.rb"
10
+ @file = keywords[:file] || "#{underscorize(truncated)}.rb" # => google_page.rb
10
11
  validate_configs
11
12
  end
12
13
 
@@ -29,7 +29,7 @@ module PageObjectify
29
29
  @code.each_line { |line| logger.debug line.chomp }
30
30
  logger.debug "** END GENERATED CODE **"
31
31
 
32
- File.open(@config.file, 'w') { |file| file.write(@code) }
32
+ write_to_disk
33
33
 
34
34
  teardown
35
35
  end
@@ -38,8 +38,37 @@ module PageObjectify
38
38
  @browser.quit
39
39
  end
40
40
 
41
+ # Wait until the number of pending AJAX requests drops to zero. Assumes
42
+ # jQuery is available on the page; behavior is undefined if it's not.
43
+ #
44
+ # Raises Watir::Wait::TimeoutError exception if timeout is exceeded.
45
+ # Raises Selenium::WebDriver::Error::UnknownError: { "errorMessage":"Can't find variable: jQuery", ... } if jQuery is not loaded on page.
46
+ def wait_for_ajax(timeout = 3, interval = 0.5)
47
+ require "watir-webdriver/wait" unless defined?(Watir)
48
+ (timeout / interval).to_i.times do
49
+ return true if @browser.execute_script('return jQuery.active').to_i == 0
50
+ sleep interval
51
+ end
52
+
53
+ raise Watir::Wait::TimeoutError, "Timeout of #{timeout} seconds exceeded on waiting for Ajax."
54
+ end
55
+
41
56
  private
42
57
 
58
+ def write_to_disk
59
+ final = <<-BANNER.gsub(/^\s*\|/, '')
60
+ |# This configuration was generated by calling:
61
+ |# #{@config.generator_class}.new.generate!
62
+ |# on #{Time.now} using PageObjectify version #{PageObjectify::VERSION}.
63
+ |# Note that changes to the underlying page that this page class is modeling, or
64
+ |# new versions of PageObjectify, may require this file to be generated again.
65
+ BANNER
66
+ final << @code
67
+ File.open(@config.file, 'w') do |file|
68
+ file.write(final)
69
+ end
70
+ end
71
+
43
72
  def execute_runtime_checks
44
73
  fail "@browser variable must be a Watir::Browser instance! @browser=#{@browser.inspect}" unless @browser.is_a?(Watir::Browser)
45
74
  fail "Cannot get current page HTML!" unless @browser.respond_to?(:html)
@@ -1,3 +1,3 @@
1
1
  module PageObjectify
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -32,6 +32,7 @@ Gem::Specification.new do |spec|
32
32
  spec.add_development_dependency "aruba", "~> 0.10.0"
33
33
  spec.add_development_dependency "bundler", "~> 1.10"
34
34
  spec.add_development_dependency "chromedriver-helper", "~> 1.0"
35
+ spec.add_development_dependency "github_changelog_generator", "~> 1.9"
35
36
  spec.add_development_dependency "phantomjs", "~> 1.9"
36
37
  spec.add_development_dependency "rake", "~> 10.0"
37
38
  spec.add_development_dependency "rspec", "~> 3.3"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: page-objectify
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Shujon Mollah
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-11-09 00:00:00.000000000 Z
11
+ date: 2015-11-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: nokogiri
@@ -94,6 +94,20 @@ dependencies:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
96
  version: '1.0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: github_changelog_generator
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '1.9'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '1.9'
97
111
  - !ruby/object:Gem::Dependency
98
112
  name: phantomjs
99
113
  requirement: !ruby/object:Gem::Requirement