Module: Protip::Resource
  
  
  
  
  
  
  
      - Extended by:
- ActiveSupport::Concern
      - Includes:
- ActiveModel::Conversion, ActiveModel::Dirty, ActiveModel::Validations
    - Defined in:
- lib/protip/resource.rb,
 lib/protip/resource/creatable.rb,
 lib/protip/resource/updateable.rb,
 lib/protip/resource/destroyable.rb,
 lib/protip/resource/extra_methods.rb,
 lib/protip/resource/search_methods.rb,
 lib/protip/resource/associations/association.rb,
 lib/protip/resource/associations/belongs_to_association.rb,
 lib/protip/resource/associations/belongs_to_polymorphic_association.rb
 
Defined Under Namespace
  
    
      Modules: Associations, ClassMethods, Creatable, Destroyable, ExtraMethods, SearchMethods, Updatable
    
  
    
  
  
    
      Instance Method Summary
      collapse
    
    
  
  
  
  
  
  
    Instance Method Details
    
      
  
  
    #assign_attributes(attributes)  ⇒ Object 
  
  
  
  
    | 
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312 | # File 'lib/protip/resource.rb', line 290
def assign_attributes(attributes)
  old_attributes = {}
  descriptor = message.class.descriptor
  keys = attributes.keys.map(&:to_s)
  keys.each do |key|
    field = descriptor.lookup(key)
    value = message[key]
            old_attributes[key] = field && field.type == :message && value ? value.clone : value
  end
  @decorator.assign_attributes attributes
  keys.each do |key|
    old_value = old_attributes[key]
    new_value = message[key]
    changed = !(old_value.class == new_value.class && old_value == new_value)
    if changed
      send "#{key}_will_change!"
    end
  end
  nil end | 
 
    
      
  
  
    #attributes  ⇒ Object 
  
  
  
  
    | 
345
346
347
348
349
350
351 | # File 'lib/protip/resource.rb', line 345
def attributes
    self.class.message.descriptor.map{|field| field.name}.inject({}) do |hash, attribute_name|
    hash[attribute_name] = public_send(attribute_name)
    hash
  end
end | 
 
    
      
  
  
    #errors  ⇒ Object 
  
  
  
  
    | 
353
354
355 | # File 'lib/protip/resource.rb', line 353
def errors
  @errors ||= ActiveModel::Errors.new(self)
end | 
 
    
      
  
  
    #initialize(message_or_attributes = {})  ⇒ Object 
  
  
  
  
    | 
276
277
278
279
280
281
282
283
284
285
286
287
288 | # File 'lib/protip/resource.rb', line 276
def initialize(message_or_attributes = {})
  if self.class.message == nil
    raise RuntimeError.new('Must define a message class using `resource`')
  end
  if message_or_attributes.is_a?(self.class.message)
    self.message = message_or_attributes
  else
    self.message = self.class.message.new
    assign_attributes message_or_attributes
  end
  super()
end | 
 
    
      
  
  
    #message=(message)  ⇒ Object 
  
  
  
  
    | 
314
315
316
317 | # File 'lib/protip/resource.rb', line 314
def message=(message)
  @decorator = Protip::Decorator.new(message,
    self.class.transformer, self.class.nested_resources)
end | 
 
    
      
  
  
    #persisted?  ⇒ Boolean 
  
  
  
  
    | 
341
342
343 | # File 'lib/protip/resource.rb', line 341
def persisted?
  id != nil
end | 
 
    
      
  
  
    #save  ⇒ Object 
  
  
  
  
    | 
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339 | # File 'lib/protip/resource.rb', line 319
def save
  success = true
  begin
    if persisted?
            update!
    else
      create!
    end
    changes_applied
  rescue Protip::UnprocessableEntityError => error
    success = false
    error.errors.messages.each do |message|
      errors.add :base, message
    end
    error.errors.field_errors.each do |field_error|
      errors.add field_error.field, field_error.message
    end
  end
  success
end |