Class: Springnote::Resource

Inherits:
RestClient::Resource show all
Defined in:
lib/springnote_client/base.rb

Direct Known Subclasses

Attachment, Page

Constant Summary collapse

XML =
'application/xml'

Instance Attribute Summary collapse

Attributes inherited from RestClient::Resource

#url

Class Method Summary collapse

Instance Method Summary collapse

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(method, *args) ⇒ Object



89
90
91
92
93
94
# File 'lib/springnote_client/base.rb', line 89

def method_missing(method, *args)
  str = method.to_s
  (str[-1,1].to_s == "=") ?
    @hash[str[0..-2]] = args[0] : 
    @hash[str]
end

Instance Attribute Details

#hashObject

Returns the value of attribute hash.



21
22
23
# File 'lib/springnote_client/base.rb', line 21

def hash
  @hash
end

#holderObject

Returns the value of attribute holder.



21
22
23
# File 'lib/springnote_client/base.rb', line 21

def holder
  @holder
end

Class Method Details

.build(hsh, holder) ⇒ Object



24
25
26
# File 'lib/springnote_client/base.rb', line 24

def build(hsh, holder)
  new_resource(collection_url(holder), holder, hsh)
end

.collection_url(holder, params = {}) ⇒ Object



47
48
49
# File 'lib/springnote_client/base.rb', line 47

def collection_url(holder, params = {})
  holder.make_url("/#{collection_name}", params)
end

.element_url(holder, id, params = {}) ⇒ Object



43
44
45
# File 'lib/springnote_client/base.rb', line 43

def element_url(holder, id, params = {})
  holder.make_url("/#{collection_name}/#{id}", params)
end

.find(*args) ⇒ Object



51
52
53
54
55
56
57
# File 'lib/springnote_client/base.rb', line 51

def find(*args)
  holder = args.pop

  args.length == 1 ? 
    find_one(args[0], holder) : 
    find_some(args, holder)
end

.find_all(holder) ⇒ Object



65
66
67
# File 'lib/springnote_client/base.rb', line 65

def find_all(holder)
  find_multi(holder)
end

.find_multi(holder, params = {}) ⇒ Object



73
74
75
76
77
78
79
80
81
82
# File 'lib/springnote_client/base.rb', line 73

def find_multi(holder, params = {})
  target = collection_url(holder, params)
  ret = new_resource(target, holder).get(:accept => 'application/xml')

  Hash.from_xml(ret)[collection_name].map do |item|
    new_resource(element_url(holder, item['identifier']), holder, item)
  end
rescue RuntimeError
  []  
end

.find_one(id, holder) ⇒ Object



59
60
61
62
63
# File 'lib/springnote_client/base.rb', line 59

def find_one(id, holder)
  new_resource(element_url(holder, id), holder) do |ret| 
    Hash.from_xml(ret.get(:accept => XML))[ret.singular_name]
  end
end

.find_some(ids, holder) ⇒ Object



69
70
71
# File 'lib/springnote_client/base.rb', line 69

def find_some(ids, holder)
  find_multi(holder, :identifiers => ids.join(','), :detail => true)
end

.new_resource(url, holder, hash = nil) ⇒ Object



28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/springnote_client/base.rb', line 28

def new_resource(url, holder, hash = nil)
  ret = new(url, holder.username, holder.password)
  ret.holder = holder
  
  if block_given?
    ret.hash = yield(ret)
  elsif hash
    identifier = hash.delete('identifier')
    ret.hash = hash
    ret.identifier = identifier if identifier
  end

  ret
end

.search(query, holder) ⇒ Object



84
85
86
# File 'lib/springnote_client/base.rb', line 84

def search(query, holder)
  find_multi(holder, :q => query)
end

Instance Method Details

#deleteObject



110
111
112
113
# File 'lib/springnote_client/base.rb', line 110

def delete
  super
  self.identifier = nil
end

#element_urlObject



121
122
123
# File 'lib/springnote_client/base.rb', line 121

def element_url
  self.class.element_url(holder, @hash['identifier'])
end

#identifier=(newval) ⇒ Object



115
116
117
118
119
# File 'lib/springnote_client/base.rb', line 115

def identifier=(newval)
  @hash['identifier'] = newval
  self.url = element_url
  newval
end

#inspectObject



129
130
131
# File 'lib/springnote_client/base.rb', line 129

def inspect
  @hash.inspect
end

#saveObject



96
97
98
99
100
101
102
103
104
105
106
107
108
# File 'lib/springnote_client/base.rb', line 96

def save
  xml = @hash.to_xml(:root => singular_name)
  
  if @hash['identifier']
    put xml, :content_type => XML
  else
    ret = post(xml, :content_type => XML)
    @hash = Hash.from_xml(ret)[singular_name]
    self.url = element_url
  end
  
  self
end

#singular_nameObject



125
126
127
# File 'lib/springnote_client/base.rb', line 125

def singular_name
  self.class.singular_name
end

#to_sObject



133
134
135
# File 'lib/springnote_client/base.rb', line 133

def to_s
  @hash.to_s
end