jsoner 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- NjZiMGZjNWIxMzhjMmFkMzRlYTJiYTIyYjdiMjY5ZTc5YzM2MDI4MA==
4
+ ZjUyODljYzQ2MjJhZjdlNTVjM2FkN2EwYjQ1MmMwYzQzZmQ2YTgzYg==
5
5
  data.tar.gz: !binary |-
6
- YWMyZjYzNzNkZGYzNDA3NjkwMDlkNTMzNmJkMTYwMmU1NGNkNWQ0OQ==
6
+ NDY2NTIxOWFiZjVkNmU1M2M3NmE0OWY2Mjc1MTM2MGZiZTM4OTA5NQ==
7
7
  !binary "U0hBNTEy":
8
8
  metadata.gz: !binary |-
9
- ZTMxNGU2NjU2NzA4YzRiN2RlYTcyOWIxMGQyMDlhYzNkY2I4YzJjYmEwMzhj
10
- ZWZhM2FhODg1MTc1NWY4OGEyZjg5NTgyMGVlMmM2YzUxZjdhMjE5YTA3YmU0
11
- NGM4NzQ3ZTU4YTljNzYzZmY0MGFkMWZmNDk2ZTYxNzg1NmRkMjE=
9
+ M2UwZTJjNTQzZDZiZGExNTZmOThlYzA3MDUzMzE2YTY4YWU0Yzk2NmY4ZWY2
10
+ ZDA1ZTNhOTllZDRhYjZlM2RkZDE2NGMxY2U1MmRkMDNmYzFhZjQ4NDIwYTM5
11
+ ZWY4NGQxYTdjNzAwOWExNWJjYjczMzA2ZjE1Njg0ZWE3NjZjYTM=
12
12
  data.tar.gz: !binary |-
13
- NWMxNjkyMjQ1Y2YwZTkwODhhYTgyNmQwM2UxMzMxM2Y4Y2EzYTIyNjgxNGM3
14
- MDIzZDdkODliNDY4ZjQwYzE0NmJiMzQ4YTUyMWFkYzAzOTM3ZjYzNDI2NDUw
15
- YTQwM2Y0YjQ0MTAzNTE3YTFiZTgyNDZjZDY1NTJhMGY2MjQyZTg=
13
+ NjQ4YjJmMTk0Y2E4YTdjZDU3ZDcyY2YwNGRlMTlkMTZkNzZlZDM3NTJkMGY2
14
+ ODY1MjZjNzllODY5ZGQ2M2ZiZmY0MTFhMzNjYTNjOGZjOTUyOTRhOTgyOTY4
15
+ NTlhMDFjZDc0OGRkOTc3ODg2N2MxNWRkMmY0Nzg2OGFkNDBkNTQ=
@@ -3,5 +3,10 @@
3
3
  * Get first table element when having more than two in parsed HTML
4
4
 
5
5
  ## v0.0.3
6
- * parse HTML file including HTML Table
7
- * fixing file is empty or have no table element
6
+ * Parse HTML file including HTML Table
7
+ * Fixing file is empty or have no table element
8
+
9
+ ## v0.0.4
10
+ * Add rspec test of checking integrity of HTML table
11
+ * Supply exception message of NotFullTable
12
+ * Parse Link including HTML Table
data/README.md CHANGED
@@ -61,7 +61,34 @@ json = Jsoner.parse(html)
61
61
  # {"First Name"=>"Adam", "Last Name"=>"Johnson", "Points"=>"67"} ]
62
62
 
63
63
  ```
64
+ Or, `Jsoner` can parse HTML file including HTML table
64
65
 
66
+ ```ruby
67
+ require 'open-uri'
68
+ # you must have table.html file and assign file path correctly.
69
+
70
+ table = Jsoner.parse(open('table.html'))
71
+
72
+ # output json =>
73
+ #
74
+ # [ {"First Name"=>"Jill", "Last Name"=>"Smith", "Points"=>"50"},
75
+ # {"First Name"=>"Eve", "Last Name"=>"Jackson", "Points"=>"94"},
76
+ # {"First Name"=>"John", "Last Name"=>"Doe", "Points"=>"80"},
77
+ # {"First Name"=>"Adam", "Last Name"=>"Johnson", "Points"=>"67"} ]
78
+
79
+ ```
80
+
81
+ Or you can open Link
82
+
83
+ ```ruby
84
+ require 'open-uri'
85
+
86
+ table = Jsoner.parse(open('http://www.w3school.com.cn/tiy/t.asp?f=html_table_header'))
87
+
88
+ # output json =>
89
+ #
90
+ # [{"姓名"=>"Bill Gates", "电话"=>"555 77 855"}]
91
+ ```
65
92
  ## THANKS
66
93
 
67
94
  [table-to-json](https://github.com/lightswitch05/table-to-json) written by [@lightswitch05](https://github.com/lightswitch05) in JavaScript.
@@ -7,14 +7,17 @@ require 'nokogiri'
7
7
  module Jsoner
8
8
 
9
9
  class NotFullTable < StandardError
10
+ def message
11
+ 'Incomplete HTML Table'
12
+ end
10
13
  end
11
14
 
12
15
  class << self
13
16
 
14
17
  def parse(html)
15
- html = filter(html)
16
- if factory = Jsoner::TableFactory.check(Nokogiri::HTML.parse(html))
17
- Jsoner::Table.new(factory).to_json
18
+ # html = filter(html)
19
+ if factory = TableFactory.check(Nokogiri::HTML.parse(html))
20
+ Table.new(factory).to_json
18
21
  end
19
22
  end
20
23
 
@@ -37,7 +37,7 @@ module Jsoner
37
37
  unless table.search('tr').empty? || table.search('td').empty? || table.search('th').empty?
38
38
  TableFactory.new doc
39
39
  else
40
- raise Jsoner::NotFullTable
40
+ raise Jsoner::NotFullTable
41
41
  end
42
42
  end
43
43
 
@@ -1,3 +1,3 @@
1
1
  module Jsoner
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  end
@@ -32,3 +32,49 @@ def table_extend_str
32
32
  </body>
33
33
  eohtml
34
34
  end
35
+
36
+ def no_td_table
37
+ <<-eohtml
38
+ <table id='example-table'>
39
+ <thead>
40
+ <tr>
41
+ <th>First Name</th>
42
+ <th>Last Name</th>
43
+ <th data-override="Score">Points</th></tr>
44
+ </thead>
45
+ </table>
46
+ eohtml
47
+ end
48
+
49
+ def no_tr_table
50
+ <<-eohtml
51
+ <table id='example-table'>
52
+ </table>
53
+ eohtml
54
+ end
55
+
56
+ def no_th_table
57
+ <<-eohtml
58
+ <table id='example-table'>
59
+ <tbody>
60
+ <tr>
61
+ <td>Jill</td>
62
+ <td>Smith</td>
63
+ <td data-override="disqualified">50</td></tr>
64
+ <tr>
65
+ <td>Eve</td>
66
+ <td>Jackson</td>
67
+ <td>94</td></tr>
68
+ <tr>
69
+ <td>John</td>
70
+ <td>Doe</td>
71
+ <td>80</td></tr>
72
+ <tr>
73
+ <td>Adam</td>
74
+ <td>Johnson</td>
75
+ <td>67</td></tr>
76
+ </tbody>
77
+ </table>
78
+ eohtml
79
+ end
80
+
@@ -52,6 +52,29 @@ describe 'build Hash below from doc parsed by Nokogiki' do
52
52
  # TODO testing when having no header in table
53
53
  end
54
54
 
55
+ context "check integrity of HTML table" do
56
+
57
+ it "when having no tr element" do
58
+ doc = Nokogiri::HTML.parse(no_tr_table)
59
+ expect{ Jsoner::TableFactory.check(doc) }.to raise_error Jsoner::NotFullTable
60
+ end
61
+
62
+ it "when having no td element" do
63
+ doc = Nokogiri::HTML.parse(no_td_table)
64
+ expect{ Jsoner::TableFactory.check(doc) }.to raise_error Jsoner::NotFullTable
65
+ end
66
+
67
+ it "when having no th element" do
68
+ doc = Nokogiri::HTML.parse(no_th_table)
69
+ expect{ Jsoner::TableFactory.check(doc) }.to raise_error Jsoner::NotFullTable
70
+ end
71
+
72
+ it "should return factory if integrity" do
73
+ doc = Nokogiri::HTML.parse(table_str)
74
+ Jsoner::TableFactory.check(doc).should be_instance_of Jsoner::TableFactory
75
+ end
76
+ end
77
+
55
78
  context "filter HTML" do
56
79
 
57
80
  before :each do
@@ -1,6 +1,10 @@
1
+ # encoding: utf-8
1
2
  Dir["#{File.dirname(__FILE__)}/fixtures/*.rb"].each {|file| require file }
2
3
  require "#{File.dirname(__FILE__)}/../lib/jsoner"
3
4
 
5
+ require 'open-uri'
6
+ require 'json'
7
+
4
8
  describe Jsoner do
5
9
 
6
10
  it "should match data from json of fixtures" do
@@ -8,10 +12,26 @@ describe Jsoner do
8
12
  end
9
13
 
10
14
  it "should parse file including table" do
11
- Jsoner.parse("#{File.dirname(__FILE__)}/fixtures/table.html").should == json
15
+ Jsoner.parse(open("#{File.dirname(__FILE__)}/fixtures/table.html")).should == json
12
16
  end
13
17
 
14
18
  it "should raise error when having no full table in HTML file" do
15
- expect{ Jsoner.parse("#{File.dirname(__FILE__)}/fixtures/table_extend.html")}.to raise_error Jsoner::NotFullTable
19
+ expect{ Jsoner.parse(open("#{File.dirname(__FILE__)}/fixtures/table_extend.html"))}.to raise_error Jsoner::NotFullTable
20
+ end
21
+
22
+ # http://www.w3school.com.cn/tiy/t.asp?f=html_table_headers
23
+ it "should parse Link include table" do
24
+ json = Jsoner.parse(open("http://www.w3school.com.cn/tiy/t.asp?f=html_table_headers"))
25
+ JSON.parse(json).should == [{"姓名"=>"Bill Gates", "电话"=>"555 77 855"}]
26
+ end
27
+
28
+ context "data parsed" do
29
+ it "it is HTML file" do
30
+ Jsoner.filter(open("#{File.dirname(__FILE__)}/fixtures/table.html")).should == table_str
31
+ end
32
+
33
+ it "it is String" do
34
+ Jsoner.filter("<table></table>").should == "<table></table>"
35
+ end
16
36
  end
17
37
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jsoner
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - simlegate
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-07-29 00:00:00.000000000 Z
11
+ date: 2013-08-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler