page-objectify 0.0.5 → 0.0.6

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