Class: Deploy::Resource

Inherits:
Object
  • Object
show all
Defined in:
lib/deploy/resource.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(method, *params) ⇒ Object

Pass any methods via. the attributes hash to see if they exist before resuming normal method_missing behaviour



9
10
11
12
13
14
15
16
17
18
# File 'lib/deploy/resource.rb', line 9

def method_missing(method, *params)
  set = method.to_s.include?('=')
  key = method.to_s.sub('=', '')
  self.attributes = Hash.new unless self.attributes.is_a?(Hash)
  if set
    self.attributes[key] = params.first
  else
    self.attributes[key]
  end
end

Instance Attribute Details

#attributesObject

Store all attributes for the model we’re working with.



5
6
7
# File 'lib/deploy/resource.rb', line 5

def attributes
  @attributes
end

#errorsObject

Store all attributes for the model we’re working with.



5
6
7
# File 'lib/deploy/resource.rb', line 5

def errors
  @errors
end

#idObject

Store all attributes for the model we’re working with.



5
6
7
# File 'lib/deploy/resource.rb', line 5

def id
  @id
end

Class Method Details

.class_nameObject

Return the deploy class name



71
72
73
# File 'lib/deploy/resource.rb', line 71

def class_name
  self.name.to_s.split('::').last.downcase
end

.collection_path(params = {}) ⇒ Object

Return the collection path for this model. Very lazy pluralizion here at the moment, nothing in Deploy needs to be pluralized with anything other than just adding an ‘s’.



61
62
63
# File 'lib/deploy/resource.rb', line 61

def collection_path(params = {})
  class_name.downcase + 's'
end

.find(type, params = {}) ⇒ Object

Find a record or set of records. Passing :all will return all records and passing an integer will return the individual record for the ID passed.



24
25
26
27
28
29
# File 'lib/deploy/resource.rb', line 24

def find(type, params = {})
  case type
  when :all then find_all(params)
  else find_single(type, params)
  end
end

.find_all(params) ⇒ Object

Find all objects and return an array of objects with the attributes set.



32
33
34
35
36
37
38
39
40
41
# File 'lib/deploy/resource.rb', line 32

def find_all(params)
  output = JSON.parse(Request.new(collection_path(params)).make.output)
  if output.is_a?(Hash) && output['records'] && output['pagination']
    output = output['records']
  end
  return [] unless output.is_a?(Array)
  output.map do |o|
    create_object(o, params)
  end
end

.find_single(id, params = {}) ⇒ Object

Find a single object and return an object for it.



44
45
46
47
48
49
50
51
# File 'lib/deploy/resource.rb', line 44

def find_single(id, params = {})
  o = JSON.parse(Request.new(member_path(id, params)).make.output)
  if o.is_a?(Hash)
    create_object(o, params)
  else
    raise Deploy::Errors::NotFound, "Record not found"
  end
end

.member_path(id, params = {}) ⇒ Object

Return the member path for the passed ID & attributes



66
67
68
# File 'lib/deploy/resource.rb', line 66

def member_path(id, params = {})
  [collection_path, id].join('/')
end

.post(path) ⇒ Object

Post to the specified object on the collection path



54
55
56
# File 'lib/deploy/resource.rb', line 54

def post(path)
  Request.new(path.to_s, :post).make
end

Instance Method Details

#createObject



113
114
115
116
117
118
119
120
121
122
123
124
125
# File 'lib/deploy/resource.rb', line 113

def create
  request = Request.new(self.class.collection_path(default_params), :post)
  request.data = {self.class.class_name.downcase.to_sym => attributes_to_post}
  if request.make && request.success?
    new_record = JSON.parse(request.output)
    self.attributes = new_record
    self.identifier = new_record['identifier']
    true
  else
    populate_errors(request.output)
    false
  end
end

#destroyObject

Delete this record from the remote service. Returns true or false depending on the success status of the destruction.



101
102
103
# File 'lib/deploy/resource.rb', line 101

def destroy
  Request.new(self.class.member_path(self.id, default_params), :delete).make.success?
end

#new_record?Boolean

Returns:

  • (Boolean)


105
106
107
# File 'lib/deploy/resource.rb', line 105

def new_record?
  self.id.nil?
end

#post(action, data = nil) ⇒ Object

Run a post on the member path. Returns the ouput from the post, false if a conflict or raises a Deploy::Error. Optionally, pass a second ‘data’ parameter to send data to the post action.



92
93
94
95
96
97
# File 'lib/deploy/resource.rb', line 92

def post(action, data = nil)
  path = self.class.member_path(self.id, default_params) + "/" + action.to_s
  request = Request.new(path, :post)
  request.data = data
  request.make
end

#saveObject



109
110
111
# File 'lib/deploy/resource.rb', line 109

def save
  new_record? ? create : update
end

#updateObject

Push the updated attributes to the remote. Returns true if the record was saved successfully other false if not. If not saved successfully, the errors hash will be updated with an array of all errors with the submission.



130
131
132
133
134
135
136
137
138
139
# File 'lib/deploy/resource.rb', line 130

def update
  request = Request.new(self.class.member_path(self.id, default_params), :put)
  request.data = {self.class.class_name.downcase.to_sym => attributes_to_post}
  if request.make && request.success?
    true
  else
    populate_errors(request.output)
    false
  end
end