lakes 0.4.1 → 0.4.2

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,7 +1,7 @@
1
1
  ---
2
- SHA256:
3
- metadata.gz: d715fcb7ee6e872c00d366c0a1d4f603de76a5e9380d7f02041c6d9745e3e619
4
- data.tar.gz: e8e4955be7f0480f76e73d13e75e200a23b1112113aeee84eb97e71251a43e69
2
+ SHA1:
3
+ metadata.gz: bb5405a6f87376435d2c48c39cf5b7eba4a8dcfa
4
+ data.tar.gz: 359f1231edc11c4beaf58331dbfa0ecdc86b7d57
5
5
  SHA512:
6
- metadata.gz: e0b3fe98905c5a3cef4a4ce629c8c15be85fb32ecaacd0f157c460164bb090fbc0417b01814f7725c2b2dbfb2657d97a2658f3a41643a9be5edc3f57751d2efc
7
- data.tar.gz: 4c0c9aa02c2392ec3b216621481ab00a3f9bc71b1e4730fc54947e8cf9d3e16d058fe0cd7ad88bd677c031f09996cdad850a3ded129992097f4d29f1c97fb900
6
+ metadata.gz: '0390ee61eba90d6ad65454f6ddec96f74b5c0a0c33de32e0adfadca583ea69937d5dbb0de78316458b42406eebb45fc5b12e560411900876a69ff2ea7f8c75e9'
7
+ data.tar.gz: 9831a247e4c11c9b952d1776c9b835b2d470e5e29a1441febb9723e4c60defaeccca452f0d45676dac8be9e309b473d055590904c293a7984255c6813fd5cd41
data/lakes.gemspec CHANGED
@@ -22,5 +22,5 @@ Gem::Specification.new do |spec|
22
22
  spec.add_development_dependency "rake", "~> 12.3"
23
23
  spec.add_development_dependency "minitest", "~> 5.11"
24
24
  spec.add_development_dependency "mocha", "~> 1.2"
25
- spec.add_dependency 'nokogiri', "~> 1.8"
25
+ spec.add_dependency 'nokogiri', "~> 1.10"
26
26
  end
data/lib/lakes.rb CHANGED
@@ -4,3 +4,4 @@ require 'lakes/texas/water_conditions_parser'
4
4
  require 'lakes/texas/water_data_parser'
5
5
  require 'lakes/texas/fishing_report_parser'
6
6
  require 'lakes/texas/share_lunker'
7
+ require 'lakes/texas/lake_records_parser'
data/lib/lakes/helper.rb CHANGED
@@ -19,6 +19,28 @@ module Lakes
19
19
  v == "" ? nil : v
20
20
  end
21
21
 
22
+ # converts a html table with headers and rows into
23
+ # an array of hashes with header => value
24
+ def process_data_table(headers, rows)
25
+ data = []
26
+ header_count = headers.length
27
+ row_count = rows.count / header_count
28
+
29
+ row_data_index = 0
30
+ row_count.times do |row_index|
31
+
32
+ entry = {}
33
+ header_count.times do |header_index|
34
+ header = cleanup_data(headers[header_index])
35
+ table_data = cleanup_data(rows[row_data_index])
36
+ row_data_index += 1
37
+ entry[header] = table_data
38
+ end
39
+ data << entry
40
+ end
41
+ data
42
+ end
43
+
22
44
  # converts this:
23
45
  # ../../../action/waterecords.php?WB_code=0001
24
46
  # into this:
data/lib/lakes/texas.rb CHANGED
@@ -234,62 +234,8 @@ module Lakes
234
234
  lake_data[:fishing_records_uri] = convert_relative_href(uri, lake_data[:details_uri])
235
235
 
236
236
  content = http_get(lake_data[:fishing_records_uri])
237
- lake_records_doc = Nokogiri::HTML(content)
238
- lake_records_main_div = lake_records_doc.at('div#maincontent')
239
-
240
- # H2's are record types like:
241
- # - weight records
242
- # - catch and release records (by length)
243
-
244
- element = lake_records_main_div.children.first
245
- current_record_type = nil # Weight or Length
246
- current_age_group = nil # all ages, youth, etc
247
- fishing_records_data = {}
248
- while element = element.next_element
249
- case element.name
250
- when 'h2'
251
- current_record_type = cleanup_data(element.text)
252
- fishing_records_data[current_record_type] = {}
253
- when 'h3'
254
- current_age_group = cleanup_data(element.text)
255
- fishing_records_data[current_record_type][current_age_group] = {}
256
- when 'table'
257
- fishing_method = cleanup_data(element.xpath('caption/big').text)
258
-
259
- if fishing_records_data[current_record_type][current_age_group][fishing_method].nil?
260
- fishing_records_data[current_record_type][current_age_group][fishing_method] = []
261
- end
262
-
263
- headers = element.xpath('tr/th').map{ |r| r.text }
264
- rows = element.xpath('tr/td').map{ |r| r.text }
265
-
266
- table_data = process_data_table(headers, rows)
267
- fishing_records_data[current_record_type][current_age_group][fishing_method] = table_data
268
- end
269
- end
270
- lake_data[:fishing_records] = fishing_records_data
271
- end
272
-
273
- # converts a html table with headers and rows into
274
- # an array of hashes with header => value
275
- def process_data_table(headers, rows)
276
- data = []
277
- header_count = headers.length
278
- row_count = rows.count / header_count
279
-
280
- row_data_index = 0
281
- row_count.times do |row_index|
282
-
283
- entry = {}
284
- header_count.times do |header_index|
285
- header = cleanup_data(headers[header_index])
286
- table_data = cleanup_data(rows[row_data_index])
287
- row_data_index += 1
288
- entry[header] = table_data
289
- end
290
- data << entry
291
- end
292
- data
237
+ parser = LakeRecordsParser.new(content)
238
+ lake_data[:fishing_records] = parser.records
293
239
  end
294
240
 
295
241
  def process_simple_section(main_div, lake_data, section_title, data_name, html)
@@ -0,0 +1,53 @@
1
+ require 'nokogiri'
2
+ module Lakes
3
+ class Texas
4
+ class LakeRecordsParser
5
+ include Lakes::Helper
6
+
7
+ attr_reader :raw_text
8
+ attr_reader :records
9
+
10
+ def initialize(text)
11
+ @raw_text = text
12
+ @records = {}
13
+ parse
14
+ end
15
+
16
+ def parse
17
+ lake_records_doc = Nokogiri::HTML(@raw_text)
18
+ lake_records_main_div = lake_records_doc.at('div#maincontent')
19
+
20
+ # H2's are record types like:
21
+ # - weight records
22
+ # - catch and release records (by length)
23
+
24
+ element = lake_records_main_div.children.first
25
+ current_record_type = nil # Weight or Length
26
+ current_age_group = nil # all ages, youth, etc
27
+ while element = element.next_element
28
+ case element.name
29
+ when 'h2'
30
+ current_record_type = cleanup_data(element.text)
31
+ @records[current_record_type] = {}
32
+ when 'h3'
33
+ current_age_group = cleanup_data(element.text)
34
+ @records[current_record_type][current_age_group] = {}
35
+ when 'table'
36
+ fishing_method = cleanup_data(element.xpath('caption/big').text)
37
+
38
+ if @records[current_record_type][current_age_group][fishing_method].nil?
39
+ @records[current_record_type][current_age_group][fishing_method] = []
40
+ end
41
+
42
+ headers = element.xpath('tr/th').map{ |r| r.text }
43
+ rows = element.xpath('tr/td').map{ |r| r.text }
44
+
45
+ table_data = process_data_table(headers, rows)
46
+ @records[current_record_type][current_age_group][fishing_method] = table_data
47
+ end
48
+ end
49
+
50
+ end
51
+ end
52
+ end
53
+ end
data/lib/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Lakes
2
- VERSION = '0.4.1'.freeze
2
+ VERSION = '0.4.2'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lakes
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ version: 0.4.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Shane Sherman
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-04-30 00:00:00.000000000 Z
11
+ date: 2019-04-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -72,14 +72,14 @@ dependencies:
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '1.8'
75
+ version: '1.10'
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: '1.8'
82
+ version: '1.10'
83
83
  description: I wrote this gem to originally parse texas lake data
84
84
  email:
85
85
  - shane.sherman@gmail.com
@@ -102,6 +102,7 @@ files:
102
102
  - lib/lakes/texas.rb
103
103
  - lib/lakes/texas/fishing_report_parser.rb
104
104
  - lib/lakes/texas/lake_characteristics_parser.rb
105
+ - lib/lakes/texas/lake_records_parser.rb
105
106
  - lib/lakes/texas/share_lunker.rb
106
107
  - lib/lakes/texas/water_conditions_parser.rb
107
108
  - lib/lakes/texas/water_data_parser.rb
@@ -127,7 +128,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
127
128
  version: '0'
128
129
  requirements: []
129
130
  rubyforge_project:
130
- rubygems_version: 2.7.6
131
+ rubygems_version: 2.6.12
131
132
  signing_key:
132
133
  specification_version: 4
133
134
  summary: This gem parses lake details from various government websites