page-objectify 0.0.5 → 0.0.6

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: 90aa88c14c4fa054c23b0342aa976908256a3882
4
- data.tar.gz: 497ac89fdaaac01c9a1d5f8f7e49a19933ae7c1e
3
+ metadata.gz: 27b019b4792a400a13d6d7356b3f30baa32d1bdc
4
+ data.tar.gz: d27150057d0d9c302230501d439cd2874e80cf5f
5
5
  SHA512:
6
- metadata.gz: d881772b6935c50c559707bea500b410315b0c7432f8577c1e8eb5c6aa67d75af13d70dfa07ab772ded95a59715b1f28fb79f819a9ce45ac266901c24bbcf7a8
7
- data.tar.gz: b9469eeee1f0963b7ae81eb36972b61f83977a6af07aada08b4287af7fe94373c218b24184c742e0a6ad5e1c18c5d2e612eeb22e668ec19e23d03cf7d4651a7c
6
+ metadata.gz: c421161615a170a01c336305efc5d2ab73895e26058bb9533c570029371027dfed4d851d314e4296fc3274bdc9b27c17ea48a2fd29aa13181c6c3969d477482b
7
+ data.tar.gz: e1bc48f582cead0364858f553e75a20181fed70e0a284b2f975566cbf7762db914d0afc1c38484fb6dfb2fbbf73083b5c2deadc7eac099b3d1f8508b1958f92c
data/CHANGELOG.md CHANGED
@@ -1,5 +1,12 @@
1
1
  # Change Log
2
2
 
3
+ ## [v0.0.5](https://github.com/smoll/page-objectify/tree/v0.0.5) (2015-11-10)
4
+ [Full Changelog](https://github.com/smoll/page-objectify/compare/v0.0.4...v0.0.5)
5
+
6
+ **Fixed bugs:**
7
+
8
+ - HTML id with dashes should be converted into valid PO accessor method names [\#10](https://github.com/smoll/page-objectify/issues/10)
9
+
3
10
  ## [v0.0.4](https://github.com/smoll/page-objectify/tree/v0.0.4) (2015-11-10)
4
11
  [Full Changelog](https://github.com/smoll/page-objectify/compare/v0.0.3...v0.0.4)
5
12
 
@@ -1,6 +1,6 @@
1
1
  module PageObjectify
2
2
  class Config
3
- attr_reader :generator_class, :page, :base, :file
3
+ attr_reader :generator_class, :page, :base, :file, :method_name_mapping
4
4
 
5
5
  def initialize(**keywords)
6
6
  @generator_class = keywords[:generator_class] # => "GooglePageGenerator"
@@ -8,6 +8,7 @@ module PageObjectify
8
8
  @page = keywords[:page] || truncated # => "GooglePage"
9
9
  @base = keywords[:base] || "BasePage"
10
10
  @file = keywords[:file] || "#{underscorize(truncated)}.rb" # => google_page.rb
11
+ @method_name_mapping = keywords[:method_name_mapping] || []
11
12
  validate_configs
12
13
  end
13
14
 
@@ -1,12 +1,14 @@
1
1
  require "unparser"
2
2
  require "page-objectify/ast_maker"
3
3
  require "page-objectify/config"
4
+ require "page-objectify/logging"
4
5
 
5
6
  module PageObjectify
6
7
  # Takes an Array of DOM elements
7
8
  # and generates Ruby code (page class containing PageObject::Accessors)
8
9
  class DOMToRuby
9
10
  include ASTMaker
11
+ include Logging
10
12
 
11
13
  def initialize(dom, config)
12
14
  @dom = dom
@@ -36,8 +38,15 @@ module PageObjectify
36
38
  def accessors
37
39
  res = []
38
40
  @dom.to_accessors.each do |element|
41
+ method_name = element[:id].downcase # because HTML ids are case-insensitive
42
+ @config.method_name_mapping.each { |k,v| method_name.sub!(k, v) }
43
+ unless valid_method_name?(method_name)
44
+ logger.warn "Final method name #{method_name} is not a valid Ruby method name! Stripping non-alpha characters as a last resort!"
45
+ strip_non_alpha_or_underscore!(method_name)
46
+ end
47
+
39
48
  res << s(:send, nil, element[:accessor].to_sym,
40
- s(:sym, element[:id].gsub("-", "_").to_sym), # Can't have dashes in method names!
49
+ s(:sym, method_name.to_sym),
41
50
  s(:hash,
42
51
  s(:pair,
43
52
  s(:sym, :id),
@@ -48,5 +57,14 @@ module PageObjectify
48
57
  end
49
58
  res
50
59
  end
60
+
61
+ def valid_method_name?(s)
62
+ # From http://stackoverflow.com/a/4379197
63
+ !!(/\A(?:[a-z_]\w*[?!=]?|\[\]=?|<<|>>|\*\*|[!~+\*\/%&^|-]|[<>]=?|<=>|={2,3}|![=~]|=~)\z/i =~ s)
64
+ end
65
+
66
+ def strip_non_alpha_or_underscore!(m)
67
+ m.gsub!(/[^a-z_]/, '')
68
+ end
51
69
  end
52
70
  end
@@ -1,3 +1,3 @@
1
1
  module PageObjectify
2
- VERSION = "0.0.5"
2
+ VERSION = "0.0.6"
3
3
  end
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.5
4
+ version: 0.0.6
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-10 00:00:00.000000000 Z
11
+ date: 2015-11-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: nokogiri
@@ -209,7 +209,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
209
209
  version: '0'
210
210
  requirements: []
211
211
  rubyforge_project:
212
- rubygems_version: 2.4.3
212
+ rubygems_version: 2.4.6
213
213
  signing_key:
214
214
  specification_version: 4
215
215
  summary: A Ruby page class generator (for use with the page-object gem)