Class: Ldp::Resource
- Inherits:
-
Object
- Object
- Ldp::Resource
- Defined in:
- lib/ldp/resource.rb
Direct Known Subclasses
Defined Under Namespace
Classes: BinarySource, RdfSource
Instance Attribute Summary collapse
-
#client ⇒ Object
readonly
Returns the value of attribute client.
-
#content ⇒ Object
Returns the value of attribute content.
-
#subject ⇒ Object
readonly
Returns the value of attribute subject.
Instance Method Summary collapse
-
#create(&block) ⇒ RdfSource
Create a new resource at the URI.
- #current?(response = nil) ⇒ Boolean
-
#delete ⇒ Object
Delete the resource.
-
#get ⇒ Object
Get the resource.
- #head ⇒ Object
-
#initialize(client, subject, response = nil, base_path = '') ⇒ Resource
constructor
A new instance of Resource.
-
#new? ⇒ Boolean
Is the resource new, or does it exist in the LDP server?.
-
#reload ⇒ Object
Reload the LDP resource.
-
#retrieved_content? ⇒ Boolean
Have we retrieved the content already?.
- #save ⇒ Object
-
#subject_uri ⇒ Object
Get the graph subject as a URI.
-
#update(new_content = nil) ⇒ Object
Update the stored graph.
- #update_cached_get(response) ⇒ Object
Constructor Details
#initialize(client, subject, response = nil, base_path = '') ⇒ Resource
Returns a new instance of Resource.
9 10 11 12 13 14 |
# File 'lib/ldp/resource.rb', line 9 def initialize client, subject, response = nil, base_path = '' @client = client @subject = subject @get = response if response.is_a? Faraday::Response and current? response @base_path = base_path end |
Instance Attribute Details
#client ⇒ Object (readonly)
Returns the value of attribute client.
6 7 8 |
# File 'lib/ldp/resource.rb', line 6 def client @client end |
#content ⇒ Object
Returns the value of attribute content.
7 8 9 |
# File 'lib/ldp/resource.rb', line 7 def content @content end |
#subject ⇒ Object (readonly)
Returns the value of attribute subject.
6 7 8 |
# File 'lib/ldp/resource.rb', line 6 def subject @subject end |
Instance Method Details
#create(&block) ⇒ RdfSource
Create a new resource at the URI
67 68 69 70 71 72 73 74 75 76 77 78 |
# File 'lib/ldp/resource.rb', line 67 def create &block raise "Can't call create on an existing resource" unless new? verb = subject.nil? ? :post : :put resp = client.send(verb, (subject || @base_path), content) do |req| yield req if block_given? end @subject = resp.headers['Location'] @subject_uri = nil reload end |
#current?(response = nil) ⇒ Boolean
91 92 93 94 95 96 97 98 99 100 101 |
# File 'lib/ldp/resource.rb', line 91 def current? response = nil response ||= @get return true if new? and subject.nil? new_response = client.head(subject) response.headers['ETag'] && response.headers['Last-Modified'] && new_response.headers['ETag'] == response.headers['ETag'] && new_response.headers['Last-Modified'] == response.headers['Last-Modified'] end |
#delete ⇒ Object
Delete the resource
54 55 56 57 58 |
# File 'lib/ldp/resource.rb', line 54 def delete client.delete subject do |req| req.headers['If-Match'] = get.etag if retrieved_content? end end |
#get ⇒ Object
Get the resource
44 45 46 |
# File 'lib/ldp/resource.rb', line 44 def get @get ||= client.get(subject) end |
#head ⇒ Object
48 49 50 |
# File 'lib/ldp/resource.rb', line 48 def head @head ||= @get || client.head(subject) end |
#new? ⇒ Boolean
Is the resource new, or does it exist in the LDP server?
30 31 32 33 34 |
# File 'lib/ldp/resource.rb', line 30 def new? subject.nil? || !head rescue Ldp::NotFound true end |
#reload ⇒ Object
Reload the LDP resource
24 25 26 |
# File 'lib/ldp/resource.rb', line 24 def reload self.class.new client, subject, @get end |
#retrieved_content? ⇒ Boolean
Have we retrieved the content already?
38 39 40 |
# File 'lib/ldp/resource.rb', line 38 def retrieved_content? @get end |
#save ⇒ Object
60 61 62 |
# File 'lib/ldp/resource.rb', line 60 def save new? ? create : update end |
#subject_uri ⇒ Object
Get the graph subject as a URI
18 19 20 |
# File 'lib/ldp/resource.rb', line 18 def subject_uri @subject_uri ||= RDF::URI.new subject end |
#update(new_content = nil) ⇒ Object
Update the stored graph
82 83 84 85 86 87 88 89 |
# File 'lib/ldp/resource.rb', line 82 def update new_content = nil new_content ||= content resp = client.put subject, new_content do |req| req.headers['If-Match'] = get.etag if retrieved_content? end update_cached_get(resp) if retrieved_content? resp end |
#update_cached_get(response) ⇒ Object
103 104 105 106 107 108 109 110 |
# File 'lib/ldp/resource.rb', line 103 def update_cached_get response Response.wrap(client, response) if response.etag.nil? || response.last_modified.nil? response = Response.wrap(client, client.head(subject)) end @get.etag = response.etag @get.last_modified = response.last_modified end |