jsoner 0.0.2 → 0.0.3

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
- ZWU0NTgzMGIxYmIwMzU0ZmRiNGFiZjIwMTFiNjI2ODFhNmZlNjJiYw==
4
+ NjZiMGZjNWIxMzhjMmFkMzRlYTJiYTIyYjdiMjY5ZTc5YzM2MDI4MA==
5
5
  data.tar.gz: !binary |-
6
- ZDczZTFiODkyM2RjZjIwMzIwZGY5YzEzN2ZiNDU4MzYyMGEyZmZlYg==
6
+ YWMyZjYzNzNkZGYzNDA3NjkwMDlkNTMzNmJkMTYwMmU1NGNkNWQ0OQ==
7
7
  !binary "U0hBNTEy":
8
8
  metadata.gz: !binary |-
9
- YzY5ODk0ZDhkMDcwNDgwYzFmMTJiNmM3NmViY2I3NDExYWM2NTY1ZmQwMzE0
10
- MjJhMmQxMjVjZjhmZTgzMDJmMDEwNDE0MzM3YWEyYmM5NzIzOTUxNjQ4MGRm
11
- YmNjNzUzNTJmZWY3ODcyNmNiN2QyNTI1NWFjMjNiOGU2MzI1ZGQ=
9
+ ZTMxNGU2NjU2NzA4YzRiN2RlYTcyOWIxMGQyMDlhYzNkY2I4YzJjYmEwMzhj
10
+ ZWZhM2FhODg1MTc1NWY4OGEyZjg5NTgyMGVlMmM2YzUxZjdhMjE5YTA3YmU0
11
+ NGM4NzQ3ZTU4YTljNzYzZmY0MGFkMWZmNDk2ZTYxNzg1NmRkMjE=
12
12
  data.tar.gz: !binary |-
13
- ZDczYTliYzA2NTc0MjAwZDExMWIwOWEyYjdjNTA3M2FiZjUwODc1MTYxNmZi
14
- MDJkNDIwM2I2Y2FjM2M3ZDBkYjMyYjkyNjFjZjU4NDQ1ZTZjNGNlYjY4YzVh
15
- MTEzZjQwOTI2YTBiYWUwZDA1N2UzYzVmNDIyODhiNzYxZjBmMmU=
13
+ NWMxNjkyMjQ1Y2YwZTkwODhhYTgyNmQwM2UxMzMxM2Y4Y2EzYTIyNjgxNGM3
14
+ MDIzZDdkODliNDY4ZjQwYzE0NmJiMzQ4YTUyMWFkYzAzOTM3ZjYzNDI2NDUw
15
+ YTQwM2Y0YjQ0MTAzNTE3YTFiZTgyNDZjZDY1NTJhMGY2MjQyZTg=
@@ -1,3 +1,7 @@
1
1
  ## v0.0.2
2
2
  * Filter other elements beyond table element
3
3
  * Get first table element when having more than two in parsed HTML
4
+
5
+ ## v0.0.3
6
+ * parse HTML file including HTML Table
7
+ * fixing file is empty or have no table element
@@ -5,10 +5,26 @@ require "jsoner/table_factory"
5
5
  require 'nokogiri'
6
6
 
7
7
  module Jsoner
8
+
9
+ class NotFullTable < StandardError
10
+ end
11
+
8
12
  class << self
9
13
 
10
14
  def parse(html)
11
- Jsoner::Table.new(Jsoner::TableFactory.new(Nokogiri::HTML.parse(html))).to_json
15
+ html = filter(html)
16
+ if factory = Jsoner::TableFactory.check(Nokogiri::HTML.parse(html))
17
+ Jsoner::Table.new(factory).to_json
18
+ end
19
+ end
20
+
21
+ def filter html
22
+ if File.file? html
23
+ File.open(html) { |file| file.read }
24
+ else
25
+ html
26
+ end
12
27
  end
28
+
13
29
  end
14
30
  end
@@ -29,6 +29,18 @@ module Jsoner
29
29
  end
30
30
  end
31
31
 
32
+ #
33
+ # check whether table is full
34
+ # a full table should include +th+, +td+, +tr+ elements
35
+ def self.check doc
36
+ table = doc.search('table').first
37
+ unless table.search('tr').empty? || table.search('td').empty? || table.search('th').empty?
38
+ TableFactory.new doc
39
+ else
40
+ raise Jsoner::NotFullTable
41
+ end
42
+ end
43
+
32
44
  private
33
45
 
34
46
  #
@@ -1,3 +1,3 @@
1
1
  module Jsoner
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
@@ -0,0 +1,26 @@
1
+ <table id='example-table'>
2
+ <thead>
3
+ <tr>
4
+ <th>First Name</th>
5
+ <th>Last Name</th>
6
+ <th data-override="Score">Points</th></tr>
7
+ </thead>
8
+ <tbody>
9
+ <tr>
10
+ <td>Jill</td>
11
+ <td>Smith</td>
12
+ <td data-override="disqualified">50</td></tr>
13
+ <tr>
14
+ <td>Eve</td>
15
+ <td>Jackson</td>
16
+ <td>94</td></tr>
17
+ <tr>
18
+ <td>John</td>
19
+ <td>Doe</td>
20
+ <td>80</td></tr>
21
+ <tr>
22
+ <td>Adam</td>
23
+ <td>Johnson</td>
24
+ <td>67</td></tr>
25
+ </tbody>
26
+ </table>
@@ -0,0 +1,20 @@
1
+ <table id='example-table'>
2
+ <tbody>
3
+ <tr>
4
+ <td>Jill</td>
5
+ <td>Smith</td>
6
+ <td data-override="disqualified">50</td></tr>
7
+ <tr>
8
+ <td>Eve</td>
9
+ <td>Jackson</td>
10
+ <td>94</td></tr>
11
+ <tr>
12
+ <td>John</td>
13
+ <td>Doe</td>
14
+ <td>80</td></tr>
15
+ <tr>
16
+ <td>Adam</td>
17
+ <td>Johnson</td>
18
+ <td>67</td></tr>
19
+ </tbody>
20
+ </table>
@@ -6,4 +6,12 @@ describe Jsoner do
6
6
  it "should match data from json of fixtures" do
7
7
  Jsoner.parse(table_str).should == json
8
8
  end
9
+
10
+ it "should parse file including table" do
11
+ Jsoner.parse("#{File.dirname(__FILE__)}/fixtures/table.html").should == json
12
+ end
13
+
14
+ 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
16
+ end
9
17
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jsoner
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - simlegate
@@ -86,7 +86,9 @@ files:
86
86
  - lib/jsoner/table_factory.rb
87
87
  - lib/jsoner/version.rb
88
88
  - spec/fixtures/json.rb
89
+ - spec/fixtures/table.html
89
90
  - spec/fixtures/table.rb
91
+ - spec/fixtures/table_extend.html
90
92
  - spec/fixtures/table_extend.rb
91
93
  - spec/jsoner/table_factory_spec.rb
92
94
  - spec/jsoner/table_spec.rb
@@ -117,7 +119,9 @@ specification_version: 4
117
119
  summary: Serialize HTML tables into JSON in Ruby
118
120
  test_files:
119
121
  - spec/fixtures/json.rb
122
+ - spec/fixtures/table.html
120
123
  - spec/fixtures/table.rb
124
+ - spec/fixtures/table_extend.html
121
125
  - spec/fixtures/table_extend.rb
122
126
  - spec/jsoner/table_factory_spec.rb
123
127
  - spec/jsoner/table_spec.rb