From a453d287ce818635c3fa6dba50bb35c3f141f294 Mon Sep 17 00:00:00 2001 From: Chris Lowis Date: Fri, 9 Nov 2018 20:58:42 +0000 Subject: [PATCH] Extract Coop class into its own file --- scripts/coop.rb | 132 +++++++++++++++++++++++++++++++++ scripts/migrate_coop_pages.rb | 134 +--------------------------------- 2 files changed, 133 insertions(+), 133 deletions(-) create mode 100644 scripts/coop.rb diff --git a/scripts/coop.rb b/scripts/coop.rb new file mode 100644 index 0000000..f1fed46 --- /dev/null +++ b/scripts/coop.rb @@ -0,0 +1,132 @@ +require 'nokogiri' +require 'active_support/inflector' + +class Coop + attr_reader :doc + + def initialize(fn) + html = File.read(fn) + @fn = fn + @doc = Nokogiri::HTML(html) + end + + def slug + File.basename(@fn, '.html') + end + + def name + doc.xpath('//*[@id="page-banner"]/div/div/h2').text + end + + alias title name + + def website + doc.xpath('//*[@id="page-banner"]/div/div/a[2]').text.strip + end + + def email + doc.xpath('/html/body/div/div[2]/div/div/div[1]/section/div[2]/p/a').text.strip + end + + def twitter + url = doc.xpath('/html/body/div/div[2]/div/div/div[1]/section/div[1]/ul/li[2]/a/@href').text + URI.parse(url).path.split('/').last + end + + def github + url = doc.xpath('/html/body/div/div[2]/div/div/div[1]/section/div[1]/ul/li[3]/a/@href').text + URI.parse(url).path.split('/').last + end + + def telephone + doc.xpath('/html/body/div/div[2]/div/div/div[1]/section/div[3]/p').text + end + + def address + doc.xpath('/html/body/div/div[2]/div/div/div[1]/section/div[4]/p').text + end + + def latitude + script = doc.xpath('/html/body/div/section/script').text + match = /var latitude = '(.+)';/.match(script) + match[1] if match + end + + def longitude + script = doc.xpath('/html/body/div/section/script').text + match = /var longitude = '(.+)';/.match(script) + match[1] if match + end + + def services + doc.css('a.service-thumb').map do |node| + url = node.xpath('@href').text + url.split('/')[2] + end + end + + def clients + doc.css('div.client-thumb-container').map do |node| + node.xpath('h5').text&.parameterize + end + end + + def technologies + doc.css('a.technology-thumb').map do |node| + url = node.xpath('@href').text + url.split('/')[2] + end + end + + def body + doc.xpath('/html/body/div/div[2]/div/div/div[2]/section[1]').text.strip + end + + def erb_binding + binding + end + + def self.all + %w( + agile-collective.html + alpha-communication.html + animorph.html + aptivate.html + autonomic.html + blake-house-filmmakers-co-op.html + calverts.html + cbn.html + cetis-llp.html + chapel-street-studio.html + co-operative-web.html + creative-coop.html + dev-the-developers-society.html + digital-liberties.html + dtc-innovation.html + fairmondo-uk.html + founders-and-coders.html + gildedsplinters.html + glowbox-design.html + go-free-range.html + graphics-coop.html + mc3.html + media-coop.html + mediablaze-hosts.html + netuxo.html + open-data-services.html + open-ecommerce.html + outlandish.html + secure-active-c-i-c.html + small-axe.html + tableflip.html + the-dot-project.html + wave.html + we-are-open.html + webarchitects.html + ).map do |page| + + fn = File.join(File.dirname(__FILE__), 'mirror', 'coops.tech.archived.website', 'co-op', page) + new(fn) + end + end +end diff --git a/scripts/migrate_coop_pages.rb b/scripts/migrate_coop_pages.rb index 3654a83..41c9764 100644 --- a/scripts/migrate_coop_pages.rb +++ b/scripts/migrate_coop_pages.rb @@ -1,136 +1,4 @@ -require 'nokogiri' -require 'active_support/inflector' - -class Coop - attr_reader :doc - - def initialize(fn) - html = File.read(fn) - @fn = fn - @doc = Nokogiri::HTML(html) - end - - def slug - File.basename(@fn, '.html') - end - - def name - doc.xpath('//*[@id="page-banner"]/div/div/h2').text - end - - alias title name - - def website - doc.xpath('//*[@id="page-banner"]/div/div/a[2]').text.strip - end - - def email - doc.xpath('/html/body/div/div[2]/div/div/div[1]/section/div[2]/p/a').text.strip - end - - def twitter - url = doc.xpath('/html/body/div/div[2]/div/div/div[1]/section/div[1]/ul/li[2]/a/@href').text - URI.parse(url).path.split('/').last - end - - def github - url = doc.xpath('/html/body/div/div[2]/div/div/div[1]/section/div[1]/ul/li[3]/a/@href').text - URI.parse(url).path.split('/').last - end - - def telephone - doc.xpath('/html/body/div/div[2]/div/div/div[1]/section/div[3]/p').text - end - - def address - doc.xpath('/html/body/div/div[2]/div/div/div[1]/section/div[4]/p').text - end - - def latitude - script = doc.xpath('/html/body/div/section/script').text - match = /var latitude = '(.+)';/.match(script) - match[1] if match - end - - def longitude - script = doc.xpath('/html/body/div/section/script').text - match = /var longitude = '(.+)';/.match(script) - match[1] if match - end - - def services - doc.css('a.service-thumb').map do |node| - url = node.xpath('@href').text - url.split('/')[2] - end - end - - def clients - doc.css('div.client-thumb-container').map do |node| - node.xpath('h5').text&.parameterize - end - end - - def technologies - doc.css('a.technology-thumb').map do |node| - url = node.xpath('@href').text - url.split('/')[2] - end - end - - def body - doc.xpath('/html/body/div/div[2]/div/div/div[2]/section[1]').text.strip - end - - def erb_binding - binding - end - - def self.all - %w( - agile-collective.html - alpha-communication.html - animorph.html - aptivate.html - autonomic.html - blake-house-filmmakers-co-op.html - calverts.html - cbn.html - cetis-llp.html - chapel-street-studio.html - co-operative-web.html - creative-coop.html - dev-the-developers-society.html - digital-liberties.html - dtc-innovation.html - fairmondo-uk.html - founders-and-coders.html - gildedsplinters.html - glowbox-design.html - go-free-range.html - graphics-coop.html - mc3.html - media-coop.html - mediablaze-hosts.html - netuxo.html - open-data-services.html - open-ecommerce.html - outlandish.html - secure-active-c-i-c.html - small-axe.html - tableflip.html - the-dot-project.html - wave.html - we-are-open.html - webarchitects.html - ).map do |page| - - fn = File.join(File.dirname(__FILE__), 'mirror', 'coops.tech.archived.website', 'co-op', page) - new(fn) - end - end -end - +require_relative 'coop' require 'erb' Coop.all.each do |coop|