page-objectify 0.0.1 → 0.0.2

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: 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