Class: VastApi::Listings::Entry
- Inherits:
-
Object
- Object
- VastApi::Listings::Entry
- Defined in:
- lib/vast_api/listings/entry.rb
Instance Attribute Summary collapse
-
#_post_response ⇒ Object
readonly
Returns the value of attribute _post_response.
-
#doc ⇒ Object
readonly
Returns the value of attribute doc.
-
#vast ⇒ Object
readonly
Returns the value of attribute vast.
Instance Method Summary collapse
- #[](var_name) ⇒ Object
- #attributes ⇒ Object
- #author ⇒ Object
- #id ⇒ Object
-
#initialize(vast, doc) ⇒ Entry
constructor
A new instance of Entry.
- #link ⇒ Object
- #post_leads(params) ⇒ Object
- #post_response ⇒ Object
- #published ⇒ Object
- #req_fields ⇒ Object
- #updated ⇒ Object
- #vast_links ⇒ Object
Constructor Details
#initialize(vast, doc) ⇒ Entry
Returns a new instance of Entry.
5 6 7 8 9 |
# File 'lib/vast_api/listings/entry.rb', line 5 def initialize(vast, doc) @doc = doc @attributes = {} @vast = vast end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(sym, *args, &block) ⇒ Object (private)
141 142 143 |
# File 'lib/vast_api/listings/entry.rb', line 141 def method_missing(sym, *args, &block) self[sym.to_s] end |
Instance Attribute Details
#_post_response ⇒ Object (readonly)
Returns the value of attribute _post_response.
4 5 6 |
# File 'lib/vast_api/listings/entry.rb', line 4 def _post_response @_post_response end |
#doc ⇒ Object (readonly)
Returns the value of attribute doc.
4 5 6 |
# File 'lib/vast_api/listings/entry.rb', line 4 def doc @doc end |
#vast ⇒ Object (readonly)
Returns the value of attribute vast.
4 5 6 |
# File 'lib/vast_api/listings/entry.rb', line 4 def vast @vast end |
Instance Method Details
#[](var_name) ⇒ Object
11 12 13 14 15 16 17 18 19 20 |
# File 'lib/vast_api/listings/entry.rb', line 11 def [](var_name) @attributes[var_name] ||= if %W{id author link feeds updated published}.index(var_name) self.send(var_name) elsif %W{ title }.index(var_name) get_var('xmlns:'+var_name) else get_var("v:#{var_name}") end end |
#attributes ⇒ Object
22 23 24 25 26 27 28 29 30 31 32 33 |
# File 'lib/vast_api/listings/entry.rb', line 22 def attributes vast_links @doc.children.each do |item| next if item.name == 'links' if %W{id author link feeds updated published}.index(item.name) self.send(item.name) else @attributes[item.name] ||= item.content end end @attributes end |
#author ⇒ Object
43 44 45 |
# File 'lib/vast_api/listings/entry.rb', line 43 def @attributes['author'] ||= get_children(@doc.at_xpath('xmlns:author')) end |
#id ⇒ Object
35 36 37 |
# File 'lib/vast_api/listings/entry.rb', line 35 def id @attributes['id'] ||= get_var('v:item_id') end |
#link ⇒ Object
39 40 41 |
# File 'lib/vast_api/listings/entry.rb', line 39 def link @attributes['link'] ||= get_var('xmlns:id') end |
#post_leads(params) ⇒ Object
84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 |
# File 'lib/vast_api/listings/entry.rb', line 84 def post_leads(params) entry = { "record_id" => "#{@vast.api_url}listings/#{self.id}/-/#{@vast.category}?apikey=#{@vast.api_key}", "adf" => { "customer" => { "comments" => params["comments"] || "", "contact" => { "phone" => params["phone"] || "", "address" => { "street_1" => params["street_1"] || "", "regioncode" => params["regioncode"] || "", "postalcode" => params["postalcode"] || "", "city" => params["city"]} || "", "email" => params["email"] || "", "name_last" => params["name_last"] || "", "name_first" => params["name_first"] || "" } } } } @_post_response = Typhoeus::Request.post("http://leads.vast.com/leads/-/#{@vast.category}?apikey=#{@vast.api_key}&apihost=common.cars.data.vast.com", :headers => {'Content-Type' => "application/atom+xml"}, :body => entry.to_xml(:root => 'entry', :dasherize => false)) post_response end |
#post_response ⇒ Object
112 113 114 115 116 117 118 119 120 121 122 |
# File 'lib/vast_api/listings/entry.rb', line 112 def post_response doc = Nokogiri::XML(@_post_response.body) impressions = doc.at_css('impressions') similar = doc.at_css('similar') { :status => doc.at_css("status")["code"], :message => doc.at_css('message').text, :similar => (similar) ? similar.text : '', :impressions => ((impressions) ? impressions.text : "") } end |
#published ⇒ Object
51 52 53 |
# File 'lib/vast_api/listings/entry.rb', line 51 def published @attributes["published"] ||= DateTime.strptime(@doc.at_xpath('xmlns:published').content) end |
#req_fields ⇒ Object
69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
# File 'lib/vast_api/listings/entry.rb', line 69 def req_fields res = Typhoeus::Request.get("http://leads.vast.com/leads/schema/#{self.id}/-/#{@vast.category}?apikey=#{@vast.api_key}&apihost=common.cars.data.vast.com") req = {'name_first' => true, 'name_last' => true, 'email' => true} doc = Nokogiri::XML(res.body) %W{street city regioncode postalcode}.each do |a| if (doc.at_css(a) && doc.at_css(a).attributes['required']) req.merge!(a => true) else req.merge!(a => false) end end req end |
#updated ⇒ Object
47 48 49 |
# File 'lib/vast_api/listings/entry.rb', line 47 def updated @attributes["updated"] ||= DateTime.strptime(@doc.at_xpath('xmlns:updated').content) end |
#vast_links ⇒ Object
55 56 57 58 59 60 61 62 63 64 65 66 67 |
# File 'lib/vast_api/listings/entry.rb', line 55 def vast_links if @attributes["vast_links"].nil? @attributes["vast_links"] = {} @doc.xpath('xmlns:link').each do |ln| attributes = ln.attributes @attributes["vast_links"][attributes['rel'].content] = {} attributes.each do |key, node| @attributes["vast_links"][attributes['rel'].content][key] = node.content end end end @attributes["vast_links"] end |