lakes 0.4.1 → 0.4.2

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