site_prism-tableish 0.0.1 → 0.1.0

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: 12cb15dcd0d2e446159065bb71a03805dd2aebd5
4
- data.tar.gz: 032df734cda2d10352f30068532d3da8c9c0d253
3
+ metadata.gz: 43956014fa7ce3841366f6ca476c2a2307d53305
4
+ data.tar.gz: 5a8b7bedc3684cb5ec3e0b5ca14eb2c316f3002e
5
5
  SHA512:
6
- metadata.gz: 4aa7b52a7bd79e320a2958f9681e7cb72fa0c13f39d3287abb1d1832f125c16fa83c304e692d789b3094d4423f576bde346d6598919279dec81d1e8870c9e14d
7
- data.tar.gz: 2bf80c338acae34f809f7668dd41edce678d167498fc6915c6cd7f828d8febd3dae811005432294e412d6207b25aa9eebad4bedfbda0aca1f946994fca51a773
6
+ metadata.gz: 83c8b02cf5d011938f6bf53f874af550c9e04cbeae4d894d9b4f2bf1bc2eb1a97fc09ac5441c2567f2083cb53d0bfedbb73e1773bbfacef26fd34c36135d43f6
7
+ data.tar.gz: d7f09ddc9899f7357627670e76cc76042b7cd9844480b2e13f85b1830d8ba54c5ecbfa743802bd4f6412a3c8810f165641d48bbebe6be234e13bfa92921c0824
data/README.md CHANGED
@@ -1,8 +1,9 @@
1
1
  # SitePrism::Tableish
2
2
 
3
- Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/site_prism/tableish`. To experiment with that code, run `bin/console` for an interactive prompt.
3
+ SitePrism::Tableish extends [SitePrism](https://github.com/natritmeyer/site_prism)
4
+ making it easer and faster to parse `<table>` elements.
4
5
 
5
- TODO: Delete this and the text above, and describe your gem
6
+ Inspied by [SitePrism::Table](https://github.com/investtools/site_prism-table)
6
7
 
7
8
  ## Installation
8
9
 
@@ -22,7 +23,85 @@ Or install it yourself as:
22
23
 
23
24
  ## Usage
24
25
 
25
- TODO: Write usage instructions here
26
+ Example:
27
+
28
+ ```ruby
29
+ require 'site_prism'
30
+ require 'capybara/dsl'
31
+ require 'site_prism/tableish'
32
+ require 'selenium-webdriver'
33
+ require 'pp'
34
+
35
+ Capybara.default_driver = :selenium
36
+
37
+ class W3SchoolsTablesPage < SitePrism::Page
38
+ extend SitePrism::Tableish
39
+ set_url 'http://www.w3schools.com/html/html_tables.asp'
40
+ table :customers, '#customers' do
41
+ column :company
42
+ column :contact
43
+ column :country
44
+ end
45
+ end
46
+
47
+ page = W3SchoolsTablesPage.new
48
+ page.load
49
+ pp page.customers.rows
50
+
51
+ # [{:company=>
52
+ # #<Capybara::Node::Element tag="td" path="/html/body/div[6]/div[1]/div[1]/div[3]/div/table/tbody/tr[2]/td[1]">,
53
+ # :contact=>
54
+ # #<Capybara::Node::Element tag="td" path="/html/body/div[6]/div[1]/div[1]/div[3]/div/table/tbody/tr[2]/td[2]">,
55
+ # :country=>
56
+ # #<Capybara::Node::Element tag="td" path="/html/body/div[6]/div[1]/div[1]/div[3]/div/table/tbody/tr[2]/td[3]">},
57
+ # {:company=>
58
+ # #<Capybara::Node::Element tag="td" path="/html/body/div[6]/div[1]/div[1]/div[3]/div/table/tbody/tr[3]/td[1]">,
59
+ # :contact=>
60
+ # #<Capybara::Node::Element tag="td" path="/html/body/div[6]/div[1]/div[1]/div[3]/div/table/tbody/tr[3]/td[2]">,
61
+ # :country=>
62
+ # #<Capybara::Node::Element tag="td" path="/html/body/div[6]/div[1]/div[1]/div[3]/div/table/tbody/tr[3]/td[3]">},
63
+ # {:company=>
64
+ # #<Capybara::Node::Element tag="td" path="/html/body/div[6]/div[1]/div[1]/div[3]/div/table/tbody/tr[4]/td[1]">,
65
+ # :contact=>
66
+ # #<Capybara::Node::Element tag="td" path="/html/body/div[6]/div[1]/div[1]/div[3]/div/table/tbody/tr[4]/td[2]">,
67
+ # :country=>
68
+ # #<Capybara::Node::Element tag="td" path="/html/body/div[6]/div[1]/div[1]/div[3]/div/table/tbody/tr[4]/td[3]">},
69
+ # {:company=>
70
+ # #<Capybara::Node::Element tag="td" path="/html/body/div[6]/div[1]/div[1]/div[3]/div/table/tbody/tr[5]/td[1]">,
71
+ # :contact=>
72
+ # #<Capybara::Node::Element tag="td" path="/html/body/div[6]/div[1]/div[1]/div[3]/div/table/tbody/tr[5]/td[2]">,
73
+ # :country=>
74
+ # #<Capybara::Node::Element tag="td" path="/html/body/div[6]/div[1]/div[1]/div[3]/div/table/tbody/tr[5]/td[3]">},
75
+ # {:company=>
76
+ # #<Capybara::Node::Element tag="td" path="/html/body/div[6]/div[1]/div[1]/div[3]/div/table/tbody/tr[6]/td[1]">,
77
+ # :contact=>
78
+ # #<Capybara::Node::Element tag="td" path="/html/body/div[6]/div[1]/div[1]/div[3]/div/table/tbody/tr[6]/td[2]">,
79
+ # :country=>
80
+ # #<Capybara::Node::Element tag="td" path="/html/body/div[6]/div[1]/div[1]/div[3]/div/table/tbody/tr[6]/td[3]">},
81
+ # {:company=>
82
+ # #<Capybara::Node::Element tag="td" path="/html/body/div[6]/div[1]/div[1]/div[3]/div/table/tbody/tr[7]/td[1]">,
83
+ # :contact=>
84
+ # #<Capybara::Node::Element tag="td" path="/html/body/div[6]/div[1]/div[1]/div[3]/div/table/tbody/tr[7]/td[2]">,
85
+ # :country=>
86
+ # #<Capybara::Node::Element tag="td" path="/html/body/div[6]/div[1]/div[1]/div[3]/div/table/tbody/tr[7]/td[3]">}]
87
+
88
+ pp page.customers.rows.map{|row| row.map{|k, v| [k, v.text.strip]}.to_h }
89
+
90
+ # [{:company=>"Alfreds Futterkiste",
91
+ # :contact=>"MARIA ANDERS",
92
+ # :country=>"Germany"},
93
+ # {:company=>"Centro comercial Moctezuma",
94
+ # :contact=>"FRANCISCO CHANG",
95
+ # :country=>"Mexico"},
96
+ # {:company=>"Ernst Handel", :contact=>"ROLAND MENDEL", :country=>"Austria"},
97
+ # {:company=>"Island Trading", :contact=>"HELEN BENNETT", :country=>"UK"},
98
+ # {:company=>"Laughing Bacchus Winecellars",
99
+ # :contact=>"YOSHI TANNAMURI",
100
+ # :country=>"Canada"},
101
+ # {:company=>"Magazzini Alimentari Riuniti",
102
+ # :contact=>"GIOVANNI ROVELLI",
103
+ # :country=>"Italy"}]
104
+ ```
26
105
 
27
106
  ## Development
28
107
 
@@ -32,5 +111,9 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
32
111
 
33
112
  ## Contributing
34
113
 
35
- Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/site_prism-tableish.
114
+ Bug reports and pull requests are welcome on GitHub at https://github.com/fkshom/site_prism-tableish. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
115
+
116
+
117
+ ## License
36
118
 
119
+ The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
@@ -2,6 +2,15 @@ require "site_prism/tableish/version"
2
2
 
3
3
  module SitePrism
4
4
  module Tableish
5
- # Your code goes here...
5
+
6
+ autoload :Element, 'site_prism/tableish/element'
7
+ autoload :Definition, 'site_prism/tableish/definition'
8
+
9
+ def table(table_name, *args, &block)
10
+ definition = Definition.new(&block)
11
+ define_method table_name do |*runtime_args, &element_block|
12
+ Element.new(page.find(*args), definition)
13
+ end
14
+ end
6
15
  end
7
16
  end
@@ -0,0 +1,15 @@
1
+ module SitePrism
2
+ module Tableish
3
+ class Definition
4
+ attr_reader :columns
5
+ def initialize(&block)
6
+ @columns = []
7
+ instance_exec(&block)
8
+ end
9
+
10
+ def column(name, options={})
11
+ @columns << [ name, options ]
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,26 @@
1
+ module SitePrism
2
+ module Tableish
3
+ class Element
4
+ include Capybara::DSL
5
+ def initialize(root_element, definition)
6
+ @root_element = root_element
7
+ @definition = definition
8
+ end
9
+
10
+ def rows
11
+ [].tap do |result|
12
+ Capybara.within(@root_element){
13
+ all(:xpath, ".//tbody/tr | .//body/tr").each do |row_in|
14
+ row_out = {}
15
+ row_in.all(:xpath, "td").each_with_index do |cell, i|
16
+ name, options = @definition.columns[i]
17
+ row_out[name] = cell
18
+ end
19
+ result << row_out unless row_out.empty?
20
+ end
21
+ }
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -1,5 +1,5 @@
1
1
  module SitePrism
2
2
  module Tableish
3
- VERSION = "0.0.1"
3
+ VERSION = "0.1.0"
4
4
  end
5
5
  end
@@ -24,4 +24,6 @@ Gem::Specification.new do |spec|
24
24
  spec.add_development_dependency "bundler", "~> 1.14"
25
25
  spec.add_development_dependency "rake", "~> 10.0"
26
26
  spec.add_development_dependency "rspec", "~> 3.0"
27
+ spec.add_development_dependency "selenium-webdriver"
28
+ spec.add_dependency "site_prism"
27
29
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: site_prism-tableish
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Shoma FUKUDA
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-05-20 00:00:00.000000000 Z
11
+ date: 2017-05-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -52,6 +52,34 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '3.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: selenium-webdriver
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: site_prism
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
55
83
  description: Table scraping for SitePrism
56
84
  email:
57
85
  - fkshom@gmail.com
@@ -68,6 +96,8 @@ files:
68
96
  - bin/console
69
97
  - bin/setup
70
98
  - lib/site_prism/tableish.rb
99
+ - lib/site_prism/tableish/definition.rb
100
+ - lib/site_prism/tableish/element.rb
71
101
  - lib/site_prism/tableish/version.rb
72
102
  - site_prism-tableish.gemspec
73
103
  homepage: https://github.com/fkshom/site_prism-tableish