Class: APICall

Inherits:
Record show all
Defined in:
lib/yodel/models/api/api_call.rb

Constant Summary

Constants inherited from AbstractRecord

AbstractRecord::CALLBACKS, AbstractRecord::FIELD_CALLBACKS, AbstractRecord::ORDERS

Instance Attribute Summary

Attributes inherited from Record

#mixins, #model, #model_record, #real_record

Attributes inherited from SiteRecord

#site

Attributes inherited from AbstractRecord

#changed, #errors, #stash, #typecast, #values

Instance Method Summary collapse

Methods inherited from Record

#all_children, #append_to_siblings, #children_and_self, #collection, #create_eigenmodel, #create_mixin_instances, #default_values, #delegate_mixins, #destroy_children, #field_sections, #fields, #first_non_blank_response_to, #first_parent, #first_response_to, #has_eigenmodel?, #initialize, #insert_in_siblings, #inspect_hash, #load_model, #model_name, #parent?, #parents, #perform_reload, #prepare_reload_params, #remove_eigenmodel, #remove_from_siblings, #root?, #run_record_after_create_callbacks, #run_record_after_destroy_callbacks, #run_record_after_save_callbacks, #run_record_after_update_callbacks, #run_record_after_validation_callbacks, #run_record_before_create_callbacks, #run_record_before_destroy_callbacks, #run_record_before_save_callbacks, #run_record_before_update_callbacks, #run_record_before_validation_callbacks, #siblings, #to_str, #update_search_keywords, #user_allowed_to?, #user_allowed_to_create?, #user_allowed_to_delete?, #user_allowed_to_update?, #user_allowed_to_view?

Methods inherited from SiteRecord

#default_values, #initialize, #inspect_hash, #perform_reload, #prepare_reload_params, #site_id

Methods included from SiteModel

#load, #scoped, #scoped_for

Methods included from MongoModel

#collection, #load, #scoped

Methods included from AbstractModel

#embed_many, #embed_one, #field, #fields, #many, #modify_field, #one, #remove_field

Methods inherited from MongoRecord

#collection, #default_values, #fields, #id, #increment!, #inspect_hash, #load_from_mongo, #load_mongo_document, #perform_destroy, #perform_reload, #perform_save, #set_id

Methods inherited from AbstractRecord

#changed!, #changed?, #clear_key, #default_values, #destroy, #destroyed?, #eql?, #errors?, #field, #field?, #field_was, #fields, #from_json, #get, #get_meta, #get_raw, #hash, #id, #increment!, inherited, #initialize, #inspect, #inspect_hash, #inspect_value, #method_missing, #new?, #prepare_reload_params, #present?, #reload, #save, #save_without_validation, #search_terms, #set, #set_meta, #set_raw, #to_json, #to_str, #trigger_field_callback, #update, #valid?

Constructor Details

This class inherits a constructor from Record

Dynamic Method Handling

This class handles dynamic methods through the method_missing method in the class AbstractRecord

Instance Method Details

#call(data) ⇒ Object



2
3
4
# File 'lib/yodel/models/api/api_call.rb', line 2

def call(data)
  Task.add_task(:call_api, encode_data_hash(data), site)
end

#contentObject



36
37
38
# File 'lib/yodel/models/api/api_call.rb', line 36

def content
  @content
end

#dataObject



52
53
54
# File 'lib/yodel/models/api/api_call.rb', line 52

def data
  @data
end

#get_bindingObject



44
45
46
# File 'lib/yodel/models/api/api_call.rb', line 44

def get_binding
  @binding
end

#perform_call(data) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/yodel/models/api/api_call.rb', line 6

def perform_call(data)
  data    = decode_data_hash(data)
  mime    = Yodel.mime_types[mime_type.to_sym]
  headers = {'Content-Type' => mime.default_mime_type}
  
  # FIXME: reloading should be done elsewhere, not a concern of APICall
  #Layout.reload_layouts(site) if Yodel.env.development?
  if body_layout && layout = site.layouts.where(name: body_layout, mime_type: mime_type).first
    @data = data
    set_content(body)
    set_binding(binding)
    payload = mime.process(layout.render(self))
  else
    payload = body
  end
  
  Net::HTTP.start(domain, port) do |http|
    request = request_class.new(path, headers)
    case authentication
    when 'basic'
      request.basic_auth username, password
    when 'digest'
      # FIXME: implement
    end
    response = http.request(request, payload)
    Function.new(function).execute(binding)
  end
end

#set_binding(binding) ⇒ Object



48
49
50
# File 'lib/yodel/models/api/api_call.rb', line 48

def set_binding(binding)
  @binding = binding
end

#set_content(content) ⇒ Object



40
41
42
# File 'lib/yodel/models/api/api_call.rb', line 40

def set_content(content)
  @content = content
end