Sha256: c8e6e6a4820466b2832c824208956dd598cceebe91f190d40f7ff9c1f996f834

Contents?: true

Size: 1.6 KB

Versions: 1

Compression:

Stored size: 1.6 KB

Contents

module StaleFish
  class Fixture
    attr_accessor :name, :file, :last_updated_at
    attr_accessor :update_interval, :update_string, :check_against, :request_type

    def initialize(attributes={})
      attributes.each do |key, value|
        self.send("#{key}=", value)
      end
    end

    def is_stale?
      if (last_updated_at + update_interval) < Time.now
        return true
      else
        return false
      end
    end

    def update!
      uri, type = URI.parse(check_against), request_type.downcase.to_sym
      Net::HTTP.start(uri.host) { |http|
        response = if type == :post
                 http.post(uri.path, uri.query)
               else
                 http.get(uri.path)
               end
        write_response_to_file(response.body)
      }

      self.last_updated_at = Time.now
    end

    def register_lock!
      uri, type = build_uri, request_type.downcase.to_sym
      FakeWeb.register_uri(type, uri, :body => file)

      return FakeWeb.registered_uri?(type, uri)
    end

    def to_yaml
      # update_interval.inspect trick is to prevent Fixnum being written
      yaml = <<-EOF
#{name}:
  file: '#{file}'
  update_interval: #{update_interval.inspect.gsub(/ /, '.')}
  check_against: #{check_against}
  request_type: #{request_type}
  last_updated_at: #{last_updated_at}
EOF
      return yaml
    end

    protected

      def build_uri
        if check_against =~ /:\d+/
          Regexp.new(check_against, true)
        else
          check_against
        end
      end

      def write_response_to_file(body)
        File.open(file, "w") { |file| file.write(body) }
      end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
stale_fish-1.3.0.pre lib/stale_fish/fixture.rb