Class: Archaeo::Snapshot
- Inherits:
-
Object
- Object
- Archaeo::Snapshot
- Defined in:
- lib/archaeo/snapshot.rb
Overview
A single CDX Server API record representing an archived document.
Maps the seven standard CDX fields and provides the computed archive URL via the ArchiveUrl model.
Constant Summary collapse
- FIELDS =
%i[urlkey timestamp original_url mimetype status_code digest length].freeze
- BLOCKED_STATUS =
-1
Instance Method Summary collapse
- #==(other) ⇒ Object (also: #eql?)
- #age ⇒ Object
- #archive_url ⇒ Object
- #as_json ⇒ Object
- #blocked? ⇒ Boolean
- #client_error? ⇒ Boolean
- #error? ⇒ Boolean
- #fetch(client: HttpClient.new, identity: false) ⇒ Object
- #fetch_with_assets(client: HttpClient.new) ⇒ Object
- #hash ⇒ Object
- #identity_url ⇒ Object
-
#initialize(urlkey:, timestamp:, original_url:, mimetype: nil, status_code: nil, digest: nil, length: nil) ⇒ Snapshot
constructor
A new instance of Snapshot.
- #inspect ⇒ Object
- #newer_than?(seconds) ⇒ Boolean
- #older_than?(seconds) ⇒ Boolean
- #redirect? ⇒ Boolean
- #server_error? ⇒ Boolean
- #success? ⇒ Boolean
- #to_a ⇒ Object
- #to_h ⇒ Object
Constructor Details
#initialize(urlkey:, timestamp:, original_url:, mimetype: nil, status_code: nil, digest: nil, length: nil) ⇒ Snapshot
Returns a new instance of Snapshot.
16 17 18 19 20 21 22 23 24 25 26 |
# File 'lib/archaeo/snapshot.rb', line 16 def initialize(urlkey:, timestamp:, original_url:, mimetype: nil, status_code: nil, digest: nil, length: nil) @urlkey = urlkey.to_s @timestamp = Timestamp.coerce() @original_url = original_url.to_s @mimetype = mimetype.to_s @status_code = status_code.to_i @digest = digest.to_s @length = length.to_i end |
Instance Method Details
#==(other) ⇒ Object Also known as: eql?
114 115 116 |
# File 'lib/archaeo/snapshot.rb', line 114 def ==(other) other.is_a?(self.class) && to_a == other.to_a end |
#age ⇒ Object
61 62 63 |
# File 'lib/archaeo/snapshot.rb', line 61 def age Time.now - @timestamp.to_time end |
#archive_url ⇒ Object
28 29 30 |
# File 'lib/archaeo/snapshot.rb', line 28 def archive_url ArchiveUrl.new(original_url, timestamp: @timestamp).to_s end |
#as_json ⇒ Object
102 103 104 105 106 107 108 109 110 111 112 |
# File 'lib/archaeo/snapshot.rb', line 102 def as_json(*) { urlkey: @urlkey, timestamp: @timestamp.to_s, original_url: @original_url, mimetype: @mimetype, status_code: @status_code, digest: @digest, length: @length, } end |
#blocked? ⇒ Boolean
37 38 39 |
# File 'lib/archaeo/snapshot.rb', line 37 def blocked? @status_code == BLOCKED_STATUS end |
#client_error? ⇒ Boolean
49 50 51 |
# File 'lib/archaeo/snapshot.rb', line 49 def client_error? @status_code.between?(400, 499) end |
#error? ⇒ Boolean
57 58 59 |
# File 'lib/archaeo/snapshot.rb', line 57 def error? client_error? || server_error? end |
#fetch(client: HttpClient.new, identity: false) ⇒ Object
73 74 75 76 77 |
# File 'lib/archaeo/snapshot.rb', line 73 def fetch(client: HttpClient.new, identity: false) Fetcher.new(client: client).fetch( original_url, timestamp: @timestamp, identity: identity ) end |
#fetch_with_assets(client: HttpClient.new) ⇒ Object
79 80 81 82 83 |
# File 'lib/archaeo/snapshot.rb', line 79 def fetch_with_assets(client: HttpClient.new) Fetcher.new(client: client).fetch_page_with_assets( original_url, timestamp: @timestamp ) end |
#hash ⇒ Object
119 120 121 |
# File 'lib/archaeo/snapshot.rb', line 119 def hash to_a.hash end |
#identity_url ⇒ Object
32 33 34 35 |
# File 'lib/archaeo/snapshot.rb', line 32 def identity_url ArchiveUrl.new(original_url, timestamp: @timestamp, identity: true).to_s end |
#inspect ⇒ Object
123 124 125 126 |
# File 'lib/archaeo/snapshot.rb', line 123 def inspect "#<#{self.class.name} #{} " \ "#{original_url} status=#{status_code}>" end |
#newer_than?(seconds) ⇒ Boolean
69 70 71 |
# File 'lib/archaeo/snapshot.rb', line 69 def newer_than?(seconds) age <= seconds end |
#older_than?(seconds) ⇒ Boolean
65 66 67 |
# File 'lib/archaeo/snapshot.rb', line 65 def older_than?(seconds) age > seconds end |
#redirect? ⇒ Boolean
45 46 47 |
# File 'lib/archaeo/snapshot.rb', line 45 def redirect? @status_code.between?(300, 399) end |
#server_error? ⇒ Boolean
53 54 55 |
# File 'lib/archaeo/snapshot.rb', line 53 def server_error? @status_code.between?(500, 599) end |
#success? ⇒ Boolean
41 42 43 |
# File 'lib/archaeo/snapshot.rb', line 41 def success? @status_code == 200 end |
#to_a ⇒ Object
85 86 87 88 |
# File 'lib/archaeo/snapshot.rb', line 85 def to_a [@urlkey, @timestamp, @original_url, @mimetype, @status_code, @digest, @length] end |
#to_h ⇒ Object
90 91 92 93 94 95 96 97 98 99 100 |
# File 'lib/archaeo/snapshot.rb', line 90 def to_h { urlkey: @urlkey, timestamp: @timestamp, original_url: @original_url, mimetype: @mimetype, status_code: @status_code, digest: @digest, length: @length, } end |