Module: Eaternet::Agencies::MultcoLib::Misc
- Defined in:
- lib/eaternet/agencies/multco_lib/misc.rb
Class Method Summary collapse
- .better_strip(a_string) ⇒ Object
- .blacklisted?(name:) ⇒ Boolean
- .clean_inner_text(elem) ⇒ Object
- .courtesy_delay ⇒ Object
- .inspection_pages(business_id) ⇒ Object
- .latest_inspection_page(id) ⇒ Object
- .parse_inspection(page:) ⇒ Object
- .parse_violation_row(tr) ⇒ Object
- .parse_violations(page:) ⇒ Object
- .parse_violations_from_html(a_string) ⇒ Object
- .valid_code_number?(n) ⇒ Boolean
- .valid_result?(parsed_data:) ⇒ Boolean
Class Method Details
.better_strip(a_string) ⇒ Object
96 97 98 |
# File 'lib/eaternet/agencies/multco_lib/misc.rb', line 96 def self.better_strip(a_string) a_string.sub(/\p{Blank}+\z/, '').sub(/^\p{Blank}+/, '').strip end |
.blacklisted?(name:) ⇒ Boolean
7 8 9 10 11 12 |
# File 'lib/eaternet/agencies/multco_lib/misc.rb', line 7 def self.blacklisted?(name:) return true if name =~ /Chartwells/ # Apparently bad data return true if name =~ /Doubletree/ # Apparently bad data return true if name =~ /Providence Park/ # Yelp's model mismatch false end |
.clean_inner_text(elem) ⇒ Object
88 89 90 |
# File 'lib/eaternet/agencies/multco_lib/misc.rb', line 88 def self.clean_inner_text(elem) elem.nil? ? '' : better_strip(elem.inner_text) end |
.courtesy_delay ⇒ Object
100 101 102 |
# File 'lib/eaternet/agencies/multco_lib/misc.rb', line 100 def self.courtesy_delay # sleep 0.25 end |
.inspection_pages(business_id) ⇒ Object
23 24 25 26 27 28 29 30 31 32 33 34 35 |
# File 'lib/eaternet/agencies/multco_lib/misc.rb', line 23 def self.inspection_pages(business_id) results = [] page = latest_inspection_page(business_id) loop do results << page form = page.forms.first = form.(id: 'NextInspection') break if .nil? courtesy_delay page = form.submit() end results end |
.latest_inspection_page(id) ⇒ Object
37 38 39 40 41 42 43 |
# File 'lib/eaternet/agencies/multco_lib/misc.rb', line 37 def self.latest_inspection_page(id) agent = Mechanize.new courtesy_delay url = "http://www3.multco.us/MCHealthInspect/ListSearch.aspx?id=#{id}" agent.get(url) agent.page end |
.parse_inspection(page:) ⇒ Object
45 46 47 48 49 50 51 52 53 54 55 56 |
# File 'lib/eaternet/agencies/multco_lib/misc.rb', line 45 def self.parse_inspection(page:) result = {} cells = page.search('td.DetailsTD') return nil if cells.size == 0 result['inspection_number'] = cells[0].inner_text.gsub(/[^0-9]/, '') date_text = cells[2].inner_text.strip.gsub(/[^0-9\/]/, '') date_text =~ %r{(\d\d)/(\d\d)/(\d\d\d\d)} result['date'] = Date.parse "#{Regexp.last_match(3)}-#{Regexp.last_match(1)}-#{Regexp.last_match(2)}" result['score'] = cells[3].inner_text.gsub(/[^0-9]/, '').to_i return nil if result['score'] == 0 result end |
.parse_violation_row(tr) ⇒ Object
72 73 74 75 76 77 78 79 80 |
# File 'lib/eaternet/agencies/multco_lib/misc.rb', line 72 def self.parse_violation_row(tr) cells = tr.search('td.DetailsTD') result = { code_number: clean_inner_text(cells[0]), facts: clean_inner_text(cells[2]), code_description: clean_inner_text(cells[1]) } valid_result?(parsed_data: result) ? result : nil end |
.parse_violations(page:) ⇒ Object
58 59 60 61 62 63 64 65 66 67 68 69 70 |
# File 'lib/eaternet/agencies/multco_lib/misc.rb', line 58 def self.parse_violations(page:) next_is_a_violation = false page.search('tr').map do |tr| if tr.inner_text =~ /Law\/Rule/ next_is_a_violation = true next end next unless next_is_a_violation next_is_a_violation = false parse_violation_row(tr) end.compact end |
.parse_violations_from_html(a_string) ⇒ Object
14 15 16 17 18 19 20 21 |
# File 'lib/eaternet/agencies/multco_lib/misc.rb', line 14 def self.parse_violations_from_html(a_string) page = Mechanize::Page.new(nil, { 'content-type' => 'text/html' }, a_string, nil, Mechanize.new) parse_violations(page: page) end |
.valid_code_number?(n) ⇒ Boolean
92 93 94 |
# File 'lib/eaternet/agencies/multco_lib/misc.rb', line 92 def self.valid_code_number?(n) !(n =~ /^(99.*|98[A-Z])$/) end |
.valid_result?(parsed_data:) ⇒ Boolean
82 83 84 85 86 |
# File 'lib/eaternet/agencies/multco_lib/misc.rb', line 82 def self.valid_result?(parsed_data:) valid_code_number?(parsed_data[:code_number]) && !parsed_data[:facts].start_with?('INFORMATIONAL') && !parsed_data.values.reduce(:+).blank? end |