vast_api 0.0.1 → 0.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Rakefile +1 -1
- data/VERSION +1 -1
- data/lib/vast_api/attributes/entry.rb +8 -8
- data/lib/vast_api/listings/entry.rb +16 -10
- data/lib/vast_api/listings.rb +34 -1
- data/lib/vast_api.rb +17 -2
- data/test/fixtures/vcr_cassettes/bike_listings.yml +159 -160
- data/test/fixtures/vcr_cassettes/filter_items.yml +129 -128
- data/test/fixtures/vcr_cassettes/find_bike_with_attribute.yml +61 -60
- data/test/fixtures/vcr_cassettes/find_bike_with_category.yml +66 -28
- data/test/test_vast_api.rb +5 -4
- data/vast_api.gemspec +3 -4
- metadata +4 -5
- data/lib/vast_api/base.rb +0 -43
data/Rakefile
CHANGED
@@ -13,7 +13,7 @@ require 'jeweler'
|
|
13
13
|
Jeweler::Tasks.new do |gem|
|
14
14
|
# gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
|
15
15
|
gem.name = "vast_api"
|
16
|
-
gem.homepage = "http://github.com/
|
16
|
+
gem.homepage = "http://github.com/carzen/vast_api"
|
17
17
|
gem.license = "MIT"
|
18
18
|
gem.summary = "A ruby wrapper for the http://www.vast.com/ api"
|
19
19
|
gem.description = "A ruby wrapper for the http://www.vast.com/ api"
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.4
|
@@ -10,29 +10,29 @@ class VastApi
|
|
10
10
|
end
|
11
11
|
end
|
12
12
|
|
13
|
-
def author
|
14
|
-
@attributes['author'] ||= get_children(@doc.at('author'))
|
15
|
-
end
|
16
|
-
|
17
13
|
def attribute(var_name)
|
18
14
|
@attributes[var_name] ||=
|
19
15
|
if %W{author updated}.index(var_name)
|
20
16
|
self.send(var_name)
|
21
17
|
elsif %W{ title id content }.index(var_name)
|
22
|
-
get_var(var_name)
|
18
|
+
get_var('xmlns:'+var_name)
|
23
19
|
else
|
24
|
-
get_var("
|
20
|
+
get_var("v:#{var_name}")
|
25
21
|
end
|
26
22
|
end
|
27
23
|
|
24
|
+
def author
|
25
|
+
@attributes['author'] ||= get_children(@doc.at_xpath('xmlns:author'))
|
26
|
+
end
|
27
|
+
|
28
28
|
def updated
|
29
|
-
@attributes["updated"] ||= DateTime.strptime(@doc.
|
29
|
+
@attributes["updated"] ||= DateTime.strptime(@doc.at_xpath('xmlns:updated').content)
|
30
30
|
end
|
31
31
|
|
32
32
|
private
|
33
33
|
|
34
34
|
def get_var(var_name)
|
35
|
-
if var = @doc.
|
35
|
+
if var = @doc.at_xpath(var_name)
|
36
36
|
var.text
|
37
37
|
else
|
38
38
|
nil
|
@@ -1,6 +1,7 @@
|
|
1
1
|
class VastApi
|
2
2
|
class Listings
|
3
3
|
class Entry
|
4
|
+
attr_reader :doc
|
4
5
|
def initialize(doc)
|
5
6
|
@doc = doc
|
6
7
|
@attributes = {}
|
@@ -11,9 +12,9 @@ class VastApi
|
|
11
12
|
if %W{id author link feeds updated published}.index(var_name)
|
12
13
|
self.send(var_name)
|
13
14
|
elsif %W{ title }.index(var_name)
|
14
|
-
get_var(var_name)
|
15
|
+
get_var('xmlns:'+var_name)
|
15
16
|
else
|
16
|
-
get_var("
|
17
|
+
get_var("v:#{var_name}")
|
17
18
|
end
|
18
19
|
end
|
19
20
|
|
@@ -31,34 +32,39 @@ class VastApi
|
|
31
32
|
end
|
32
33
|
|
33
34
|
def id
|
34
|
-
@attributes['id'] ||= get_var('
|
35
|
+
@attributes['id'] ||= get_var('v:item_id')
|
35
36
|
end
|
36
37
|
|
37
38
|
def link
|
38
|
-
@attributes['link'] ||= get_var('id')
|
39
|
+
@attributes['link'] ||= get_var('xmlns:id')
|
39
40
|
end
|
40
41
|
|
41
42
|
def author
|
42
|
-
@attributes['author'] ||= get_children(@doc.
|
43
|
+
@attributes['author'] ||= get_children(@doc.at_xpath('xmlns:author'))
|
43
44
|
end
|
44
45
|
|
45
46
|
def updated
|
46
|
-
@attributes["updated"] ||= DateTime.strptime(@doc.
|
47
|
+
@attributes["updated"] ||= DateTime.strptime(@doc.at_xpath('xmlns:updated').content)
|
47
48
|
end
|
48
49
|
|
49
50
|
def published
|
50
|
-
@attributes["published"] ||= DateTime.strptime(@doc.
|
51
|
+
@attributes["published"] ||= DateTime.strptime(@doc.at_xpath('xmlns:published').content)
|
51
52
|
end
|
52
53
|
|
53
54
|
def vast_links
|
54
|
-
@attributes["vast_links"]
|
55
|
-
|
55
|
+
if @attributes["vast_links"].nil?
|
56
|
+
@attributes["vast_links"] = {}
|
57
|
+
@doc.css('link').each do |ln|
|
58
|
+
attributes = ln.attributes
|
59
|
+
@attributes["vast_links"][attributes['rel']] = attributes
|
60
|
+
end
|
56
61
|
end
|
62
|
+
@attributes["vast_links"]
|
57
63
|
end
|
58
64
|
private
|
59
65
|
|
60
66
|
def get_var(var_name)
|
61
|
-
if var = @doc.
|
67
|
+
if var = @doc.at_xpath(var_name)
|
62
68
|
var.text
|
63
69
|
else
|
64
70
|
nil
|
data/lib/vast_api/listings.rb
CHANGED
@@ -1,5 +1,38 @@
|
|
1
1
|
class VastApi
|
2
|
-
class Listings <
|
2
|
+
class Listings < Array
|
3
|
+
attr_reader :xml, :url, :vast
|
4
|
+
|
5
|
+
def initialize(vast)
|
6
|
+
@vast = vast
|
7
|
+
@url = "#{API_URL}#{self.class.to_s.split('::')[1].downcase}/-/#{@vast.category}?#{@vast.query}"
|
8
|
+
@xml = Nokogiri::XML(open(@url))
|
9
|
+
populate
|
10
|
+
end
|
11
|
+
|
12
|
+
def attr(var_name)
|
13
|
+
if var = @xml.at(var_name)
|
14
|
+
var.text
|
15
|
+
elsif var = @xml.at('//v:'+var_name)
|
16
|
+
var.text
|
17
|
+
elsif var = @xml.at('//o:'+var_name)
|
18
|
+
var.text
|
19
|
+
else
|
20
|
+
nil
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def attributes
|
25
|
+
@vast.attributes
|
26
|
+
end
|
27
|
+
|
28
|
+
def listings
|
29
|
+
@vast.listings
|
30
|
+
end
|
31
|
+
|
32
|
+
def categories
|
33
|
+
@vast.categories
|
34
|
+
end
|
35
|
+
|
3
36
|
def query
|
4
37
|
if @query.nil?
|
5
38
|
@query = {}
|
data/lib/vast_api.rb
CHANGED
@@ -1,10 +1,11 @@
|
|
1
|
+
require 'open-uri'
|
2
|
+
require 'nokogiri'
|
1
3
|
require 'active_support'
|
2
4
|
begin
|
3
5
|
require 'active_support/core_ext/object/to_query'
|
4
6
|
rescue
|
5
7
|
end
|
6
8
|
|
7
|
-
require File.expand_path('../vast_api/base.rb', __FILE__)
|
8
9
|
require File.expand_path('../vast_api/attributes.rb', __FILE__)
|
9
10
|
require File.expand_path('../vast_api/attributes/entry.rb', __FILE__)
|
10
11
|
require File.expand_path('../vast_api/categories.rb', __FILE__)
|
@@ -67,7 +68,21 @@ class VastApi
|
|
67
68
|
@categories[@api_key] ||= Categories.new(self)
|
68
69
|
end
|
69
70
|
|
70
|
-
def find(id
|
71
|
+
def find(id)
|
72
|
+
raise ArgumentError, "No category was entered" if @category.nil? || @category.empty?
|
73
|
+
if id.nil? || id.empty?
|
74
|
+
nil
|
75
|
+
else
|
76
|
+
Listings.get("#{API_URL}listings/#{id}/-/#{@category}")
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
def find!(id)
|
81
|
+
raise ArgumentError, "No id was entered" if id.nil? || id.empty?
|
82
|
+
find(id)
|
83
|
+
end
|
84
|
+
|
85
|
+
def self.find(id, cat)
|
71
86
|
Listings.get("#{API_URL}listings/#{id}/-/#{cat}")
|
72
87
|
end
|
73
88
|
|