vin_exploder 0.3.1 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- vin_exploder (0.3.0)
4
+ vin_exploder (0.4.0)
5
5
 
6
6
  GEM
7
7
  remote: http://rubygems.org/
@@ -19,9 +19,8 @@ module Cache
19
19
  def read(vin)
20
20
  key = make_vin_cache_key(vin)
21
21
  result = @db.get(key)['data'] rescue nil
22
- hash = {}
23
- result.each{|k,v| hash[k.to_sym] = v} unless result.nil?
24
- hash.empty? ? nil : hash
22
+ hash = symbolize_result_hash(result) unless result.nil?
23
+ hash
25
24
  end
26
25
 
27
26
  def write(vin, hash)
@@ -33,15 +33,14 @@ module VinExploder
33
33
  # cache.fetch("VIN_NUMBER_2") # => {:make => 'Dodge', :model => '1500'}
34
34
  #
35
35
  def fetch(vin)
36
+ hash = read(vin)
36
37
  if block_given?
37
- hash = read(vin)
38
38
  if hash.nil?
39
39
  hash = yield
40
- write(vin, hash)
40
+ write(vin, hash) unless hash.empty? || (hash[:errors] && !hash[:errors].empty?)
41
41
  end
42
- else
43
- hash = read(vin)
44
42
  end
43
+ hash
45
44
  end
46
45
 
47
46
  # Fetches VIN data from the cache, using the given key. If VIN has
@@ -67,7 +66,13 @@ module VinExploder
67
66
  # Position 9 is a checksum value and should not be used in the key.
68
67
  def make_vin_cache_key(vin)
69
68
  key = vin.slice(0,8)
70
- key << vin.slice(10,2)
69
+ key << vin.slice(9,2)
70
+ end
71
+
72
+ def symbolize_result_hash(hash)
73
+ new_hash = {}
74
+ hash.each{|k,v| new_hash[k.to_sym] = v}
75
+ new_hash
71
76
  end
72
77
 
73
78
  end
@@ -16,7 +16,7 @@ module VinExploder
16
16
  if args.empty?
17
17
  case @cache_store
18
18
  when Symbol
19
- VinExploder::Cache.const_get(@cache_store.to_s.split('_').map{|s| s.capitalize }.join)
19
+ @cache_store = VinExploder::Cache.const_get(@cache_store.to_s.split('_').map{|s| s.capitalize }.join)
20
20
  else
21
21
  @cache_store
22
22
  end
@@ -30,7 +30,7 @@ module VinExploder
30
30
  if args.empty?
31
31
  case @adapter
32
32
  when Symbol
33
- VinExploder::Decode.const_get(@adapter.to_s.split('_').map{|s| s.capitalize }.join)
33
+ @adapter = VinExploder::Decode.const_get(@adapter.to_s.split('_').map{|s| s.capitalize }.join)
34
34
  else
35
35
  @adapter
36
36
  end
@@ -20,10 +20,11 @@ module VinExploder
20
20
  # An Explosion object containing the decoded vin attributes
21
21
  def get(vin)
22
22
  hash = @cache.fetch(vin) do
23
- # get from vender adapter
24
23
  @adapter.explode(vin)
25
24
  end
26
- Explosion.new vin, hash, hash.delete(:errors)
25
+ errors = hash ? hash.delete(:errors) : []
26
+ data = hash ? hash : {}
27
+ Explosion.new vin, data, errors
27
28
  end
28
29
 
29
30
  end
@@ -4,7 +4,7 @@ module VinExploder
4
4
 
5
5
  class Explosion
6
6
 
7
- attr_reader :vin, :success, :errors, :make, :model, :year, :driveline, :body_style, :fuel_type, :all
7
+ attr_reader :vin, :success, :errors, :make, :model, :year, :driveline, :body_style, :fuel_type, :number_of_doors, :all
8
8
 
9
9
  def initialize(vin, vin_hash, errors={})
10
10
  @vin = vin
@@ -15,8 +15,9 @@ module VinExploder
15
15
  @driveline = @all[:driveline]
16
16
  @body_style = @all[:body_style]
17
17
  @fuel_type = @all[:fuel_type]
18
+ @number_of_doors = @all[:number_of_doors]
18
19
  @trim_level = @all[:trim_level]
19
- @errors = errors.nil? ? {} : errors
20
+ @errors = errors.nil? ? [] : errors
20
21
  @success = @errors.empty?
21
22
  end
22
23
 
@@ -1,3 +1,3 @@
1
1
  module VinExploder
2
- VERSION = '0.3.1'
2
+ VERSION = '0.4.0'
3
3
  end
data/lib/vin_exploder.rb CHANGED
@@ -21,3 +21,4 @@ require 'vin_exploder/configuration'
21
21
  require 'vin_exploder/cache'
22
22
  require 'vin_exploder/explosion'
23
23
  require 'vin_exploder/exploder'
24
+ require 'vin_exploder/abstract_adapter'
@@ -25,7 +25,7 @@ describe ActiveRecordCacheStore do
25
25
  create_table :test_ar_cache_stores, :force => true do |t|
26
26
  t.column :key, :string
27
27
  t.column :vin, :string
28
- t.column :make, :string
28
+ t.column :make, :string
29
29
  t.column :data, :text
30
30
  end
31
31
  end
@@ -23,11 +23,12 @@ describe Store do
23
23
 
24
24
  describe '#fetch' do
25
25
  it 'should execute the block and pass through #write' do
26
+ result = {'vin' => 'EXPLODED_VIN'}
26
27
  store = Store.new
27
- store.should_receive(:write).with('VIN', 'EXPLODED_VIN').exactly(1).times { 'EXPLODED_VIN' }
28
+ store.should_not_receive(:write).exactly(1).times
28
29
  store.fetch('VIN') do
29
- 'EXPLODED_VIN'
30
- end.should == 'EXPLODED_VIN'
30
+ result
31
+ end.should == result
31
32
  end
32
33
 
33
34
  it 'should return nil with no block' do
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: vin_exploder
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.3.1
5
+ version: 0.4.0
6
6
  platform: ruby
7
7
  authors:
8
8
  - Jake Mallory
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-06-24 00:00:00 Z
13
+ date: 2011-06-28 00:00:00 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rspec