Przeglądaj źródła

Handle tags through methods not directly on the instance variable

tags/v0.4.5
Adrian Short 6 lat temu
rodzic
commit
44764bd5a8
1 zmienionych plików z 25 dodań i 14 usunięć
  1. +25
    -14
      lib/uk_planning_scraper/authority.rb

+ 25
- 14
lib/uk_planning_scraper/authority.rb Wyświetl plik

@@ -2,13 +2,13 @@ require 'csv'

module UKPlanningScraper
class Authority
attr_reader :name, :tags, :url
attr_reader :name, :url
@@authorities = []

def initialize(name, url, tags)
@name = name
@url = url
@tags = tags
def initialize(name, url)
@name = name.strip
@url = url.strip
@tags = [] # Strings in arbitrary order
@applications = [] # Application objects
end

@@ -61,6 +61,21 @@ module UKPlanningScraper
output # Single point of successful exit
end
def tags
@tags.sort
end
# Add multiple tags to existing tags
def add_tags(tags)
tags.each { |t| add_tag(t) }
end
# Add a single tag to existing tags
def add_tag(tag)
clean_tag = tag.strip.downcase.gsub(' ', '')
@tags << clean_tag unless tagged?(clean_tag) # prevent duplicates
end
def tagged?(tag)
@tags.include?(tag)
end
@@ -99,14 +114,14 @@ module UKPlanningScraper
# Tagged x
def self.tagged(tag)
found = []
@@authorities.each { |a| found << a if a.tags.include?(tag) }
@@authorities.each { |a| found << a if a.tagged?(tag) }
found
end

# Not tagged x
def self.not_tagged(tag)
found = []
@@authorities.each { |a| found << a unless a.tags.include?(tag) }
@@authorities.each { |a| found << a unless a.tagged?(tag) }
found
end

@@ -120,14 +135,10 @@ module UKPlanningScraper
def self.load
# Don't run this method more than once
return unless @@authorities.empty?
# FIXME hardcoded file path
CSV.foreach(File.join(File.dirname(__dir__), 'uk_planning_scraper', 'authorities.csv')) do |line|
auth = Authority.new(
line[0].strip,
line[1].strip,
line[2..-1].map { |e| e.strip })
auth.tags << auth.system unless auth.tagged?(auth.system)
auth.tags.sort!
auth = Authority.new(line[0], line[1])
auth.add_tags(line[2..-1])
auth.add_tag(auth.system)
@@authorities << auth
end
end


Ładowanie…
Anuluj
Zapisz