jsoner 0.0.2 → 0.0.3

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,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