vinquery 0.3.0 → 0.3.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- vinquery (0.2.0)
4
+ vinquery (0.3.5)
5
5
  nokogiri (>= 1.4.4)
6
6
 
7
7
  GEM
@@ -10,18 +10,18 @@ GEM
10
10
  addressable (2.2.6)
11
11
  crack (0.1.8)
12
12
  diff-lcs (1.1.2)
13
- nokogiri (1.4.4)
13
+ nokogiri (1.4.6)
14
14
  rspec (2.6.0)
15
15
  rspec-core (~> 2.6.0)
16
16
  rspec-expectations (~> 2.6.0)
17
17
  rspec-mocks (~> 2.6.0)
18
- rspec-core (2.6.3)
18
+ rspec-core (2.6.4)
19
19
  rspec-expectations (2.6.0)
20
20
  diff-lcs (~> 1.1.2)
21
21
  rspec-mocks (2.6.0)
22
- vin_exploder (0.2.0)
22
+ vin_exploder (0.3.0)
23
23
  webmock (1.6.4)
24
- addressable (~> 2.2, > 2.2.5)
24
+ addressable (> 2.2.5, ~> 2.2)
25
25
  crack (>= 0.1.7)
26
26
 
27
27
  PLATFORMS
@@ -5,7 +5,7 @@ class Vinquery
5
5
  attr_reader :attributes, :errors, :result
6
6
 
7
7
  def self.get(vin, options={})
8
- request = Vinquery.new options[:url], options[:access_code], options[:report_type]
8
+ request = Vinquery.new(options[:url], options[:access_code], options[:report_type])
9
9
  doc = request.fetch vin
10
10
  result = request.parse doc
11
11
  request
@@ -19,8 +19,9 @@ class Vinquery
19
19
 
20
20
  def fetch(vin)
21
21
  # use reducable=FALSE to get additional fields like fuel_type
22
- url_s = "#{@url}?accessCode=#{@access_code}&vin=#{vin}&reportType=#{@report_type}&reducable=FALSE"
23
- url = URI.parse(URI.escape(url_s))
22
+ @uri ||= "#{@url}?accessCode=#{@access_code}&reportType=#{@report_type}&reducable=FALSE"
23
+ url_s = @uri + "&vin=#{vin}"
24
+ url = URI.parse(url_s)
24
25
  begin
25
26
  @result = Net::HTTP.get url
26
27
  rescue Exception => e
@@ -41,11 +42,14 @@ class Vinquery
41
42
  end
42
43
 
43
44
  def set_attributes(doc)
44
- attributes = {:vendor_result => @result}
45
+ attributes = {}
45
46
  doc.xpath('//vehicle[1]/item').each do |item|
46
- attributes[item.attributes['key'].value.downcase.gsub(/ /, '_').intern] = item.attributes['value'].value
47
+ attributes[item.attributes['key'].value.downcase.gsub('.', '').gsub(/ /, '_').to_sym] = item.attributes['value'].value
48
+ end
49
+ if attributes.size > 0
50
+ attributes[:vin] = doc.css('vin').first.attributes['number'].value
51
+ attributes[:vendor_result] = doc.to_xml
47
52
  end
48
-
49
53
  @attributes = attributes
50
54
  end
51
55
 
@@ -1,3 +1,3 @@
1
1
  class Vinquery
2
- VERSION = '0.3.0'
2
+ VERSION = '0.3.5'
3
3
  end
@@ -8,6 +8,10 @@ module VinExploder
8
8
 
9
9
  class VinqueryAdapter < AbstractAdapter
10
10
 
11
+ # Create new vinquery adapter
12
+ #
13
+ # == Parameters
14
+ # options:: access_code, report_type, url
11
15
  def initialize(options)
12
16
  super
13
17
  end
@@ -26,7 +30,9 @@ module VinExploder
26
30
 
27
31
  def normalize(vq_hash)
28
32
  # fuel_type = vq_hash[:engine_type].match(/(GAS|DIESEL|HYBRID)/)[0]
29
- {:year => vq_hash.delete(:model_year)}.merge(vq_hash)
33
+ # driveline_type = vq_hash[:driveline].match(/(FWD|4WD|2WD)/)[0]
34
+ door_number = vq_hash[:body_style].match(/(\d)-DR/)[1] unless vq_hash.empty?
35
+ {:year => vq_hash.delete(:model_year), :number_of_doors => door_number}.merge(vq_hash)
30
36
  end
31
37
 
32
38
  end
@@ -22,10 +22,10 @@ describe Vinquery do
22
22
  @query.set_attributes(doc)
23
23
  # @query.attributes.each_pair{|k,v| puts "#{k} - #{v}"}
24
24
  @query.attributes[:body_style].should == "CREW CAB PICKUP 4-DR"
25
- @query.attributes.count.should == 169
25
+ @query.attributes.count.should == 171
26
26
  end
27
27
 
28
- it 'should recover from poorly or unexpected xml document' do
28
+ it 'should recover from poorly formatted or unexpected xml document' do
29
29
  xml_s = '<?xml version="1.0"?>\\n<blah status="FAILED" number="vin"\\n'
30
30
  doc = Nokogiri::HTML(xml_s)
31
31
  @query.set_attributes(doc).should == {}
@@ -55,7 +55,7 @@ describe Vinquery do
55
55
  doc = @query.fetch('')
56
56
  doc.css('vin').first.attributes['status'].value.should == "FAILED"
57
57
  doc.css('message').first.attributes['key'].value.should == "VinQuery unavailable"
58
- doc.css('message').first.attributes['value'].value.should == "Oops, it looks like our VIN decoding database is down right now. Please try again later."
58
+ doc.css('message').first.attributes['value'].value.should == "Oops, it looks like our VIN decoder is unavailable at the moment. Please try again later."
59
59
  end
60
60
  end
61
61
 
@@ -78,13 +78,15 @@ describe Vinquery do
78
78
  query.valid?.should == true
79
79
  query.errors.empty?.should == true
80
80
  query.attributes.class.should equal(Hash)
81
+ query.attributes[:make].should == 'Dodge'
81
82
  end
82
83
 
83
- it 'should return an errors hash with an invalid vin number' do
84
+ it 'should return an errors array with an invalid vin number' do
84
85
  res = '<?xml version="1.0" encoding="utf-8" standalone="yes"?>\r\n<VINquery Version="1.0.0" Report_Type="BASIC" Date="2/19/2011">\r\n <VIN Number="ABCDEFGHIJKLMNOPQ" Status="FAILED">\r\n <Message Key="5" Value="Invalid VIN number: This VIN number contains invalid letters: I,O or Q." />\r\n </VIN>\r\n</VINquery>'
85
86
  stub_request(:any, /.*invalidvin.*/).to_return(:body => res, :status => 200, :headers => { 'Content-Length' => res.length})
86
87
  results = Vinquery.get('BADVIN', {:url => 'http://www.invalidvin.com', :access_code => 'access_code', :report_type => 'report_type_2'})
87
88
  results.valid?.should == false
89
+ results.errors.class.should == Array
88
90
  end
89
91
  end
90
92
 
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: vinquery
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.3.0
5
+ version: 0.3.5
6
6
  platform: ruby
7
7
  authors:
8
8
  - Jake Mallory
@@ -11,7 +11,7 @@ autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
13
 
14
- date: 2011-06-24 00:00:00 Z
14
+ date: 2011-06-28 00:00:00 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: nokogiri