lib/stale_fish.rb in jsmestad-stale_fish-1.1.3 vs lib/stale_fish.rb in jsmestad-stale_fish-1.2.1

- old
+ new

@@ -2,129 +2,56 @@ require 'ftools' require 'yaml' require 'rubygems' require 'activesupport' # only used for time helpers require 'resourceful' -begin - require "fakeweb" -rescue LoadError -end +require 'stale_fish/utility' +require 'stale_fish/fixture_definition' +begin + require 'fakeweb' + require 'stale_fish/fakeweb' +rescue LoadError; end + module StaleFish # no one likes stale fish. class FixtureUpdateFailure < StandardError; end class MalformedSourceURL < StandardError; end class << self - attr_accessor :use_fakeweb - attr_accessor :config_path - attr_accessor :yaml attr_accessor :configuration attr_accessor :http + attr_accessor :fixtures + attr_accessor :force_flag end - self.use_fakeweb = false - self.config_path = 'stale_fish.yml' + self.fixtures = [] + Utility.config_path = 'stale_fish.yml' self.http = Resourceful::HttpAccessor.new - def self.valid_path? - !config_path.nil? ? File.exist?(config_path) : false - end - def self.update_stale(*args) - # check each file for update - load_yaml if self.yaml.nil? - stale = flag_stale(args) - process(stale) - write_yaml - return stale.size - end + # TODO move this to its own spot + Utility.loader if self.fixtures.empty? + self.force_flag = args.pop[:force] if args.last.is_a?(Hash) - def self.register_uri(source_uri, response) - FakeWeb.register_uri(:any, source_uri, :body => response) if use_fakeweb && !FakeWeb.registered_uri?(source_uri) - end - - def self.load_yaml - raise Errno::ENOENT, 'invalid path, please set StaleFish.config_path than ensure StaleFish.valid_path? is true' unless valid_path? - - self.yaml = YAML.load_file(config_path) - raise YAML::Error, 'missing stale root element' unless self.yaml['stale'] - - # Grab Configuration from YAML - self.configuration = self.yaml['stale'].delete('configuration') - use_fakeweb = (configuration['use_fakeweb'] || false) unless configuration.nil? - - # Process remaining nodes as items - self.yaml['stale'].each do |key, value| - %w{ filepath frequency source }.each { |field| raise YAML::Error, "missing #{field} node for #{key}" unless value[field] } - end - end - -protected - - def self.flag_stale(args) - force = args.pop[:force] if args.last.is_a?(Hash) - stale, scope = {}, self.yaml['stale'] - scope.each do |key, value| - if args.empty? - if value['updated'].blank? - stale.merge!({key => value}) - else - last_modified = value['updated'] - update_on = DateTime.now + eval(value['frequency']) - if last_modified > update_on - stale.merge!({key => value}) - else - register_uri(value['source'], value['filepath']) - end + if args.empty? + stale = fixtures.select { |f| f.is_stale? } + fixtures.each do |fixture| + fixture.update! if fixture.is_stale? + fixture.register_uri if StaleFish.use_fakeweb + end + else + stale = fixtures.select { |f| f.is_stale? && args.include?(f.tag) } + fixtures.each do |fixture| + if args.include?(fixture.tag) + fixture.update! if fixture.is_stale? + fixture.register_uri if StaleFish.use_fakeweb end - else - last_modified = value['updated'] - update_on = DateTime.now + eval(value['frequency']) - if force == true - stale.merge!({key => value}) if args.include?(key) - else - if args.include?(key) && (value['updated'].blank? || last_modified > update_on) - stale.merge!({key => value}) - else - register_uri(value['source'], value['filepath']) - end - end end end - return stale - end - - def self.process(fixtures) - FakeWeb.allow_net_connect = true if use_fakeweb - - fixtures.each do |key, value| - - begin - @response = http.resource(value['source']).get - File.open(value['filepath'], 'w') { |f| f.write @response.body.to_s } - update_fixture(key) - rescue Resourceful::UnsuccessfulHttpRequestError - raise FixtureUpdateFailure, "#{key}'s source: #{value['source']} returned unsuccessfully." - rescue ArgumentError - raise MalformedSourceURL, "#{key}'s source: #{value['source']} is not a valid URL path. Most likely it's missing a trailing slash." - end - - register_uri(value['source'], value['filepath']) - end - - FakeWeb.allow_net_connect = false if use_fakeweb - end - - def self.update_fixture(key) - self.yaml['stale'][key]['updated'] = DateTime.now - end - - def self.write_yaml - File.open(config_path, "w+") do |f| - f.write(self.yaml.to_yaml) - end + Utility.writer + return stale.size end end