rsqoot 0.4.1 → 0.4.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/README.md +21 -3
- data/lib/generators/rsqoot/templates/rsqoot_config.rb +3 -1
- data/lib/rsqoot/category.rb +1 -1
- data/lib/rsqoot/click.rb +1 -1
- data/lib/rsqoot/commission.rb +1 -1
- data/lib/rsqoot/deal.rb +24 -6
- data/lib/rsqoot/helper.rb +12 -2
- data/lib/rsqoot/merchant.rb +1 -1
- data/lib/rsqoot/provider.rb +1 -1
- data/lib/rsqoot/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
NjMzNmUyNTgxOTMwOWMxYTEwZjgxMjI2ODZjNDcwYjE1NzFkNDdlYw==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
NzUyOWVhMzQ5ZWYyZWVhZGIzNTZhODQ2OTg4ODAwY2Y0ZmQ0NzdhOQ==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
YTBjNzA4MDY5ZWQ4M2FmNjNjODg2YzAxMjBhMTA4OWMxZjViMzUxZDgzYmMw
|
10
|
+
ZDEwNjQwNTJiMmQwYjcwOTQ5Y2M4OGZiYzgyMmIzNTI2Yjg5OTEzMGMwZmRj
|
11
|
+
ZmJkYWNkN2FjMzJiNDI1OWI0M2JkODM0N2E4ODA4N2NjYWM0YzY=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
MTM0ZjBiN2VhOTIzMGMyYmJlMzUwZTQxMGM3ZWUxMDBiZjdlMzg3ODIyOTU4
|
14
|
+
MjY4ZjczNzY4NjE5YmQxYTFiZjk1MzcwYzk1ZjU0MWM2MTcwN2YzMDVlZDFh
|
15
|
+
NDM4YjUzYzZkNmFiMWRkYzkyNzU3NWUyZjNkYzBiM2Q4M2QxZjQ=
|
data/README.md
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
RSqoot
|
2
2
|
======
|
3
3
|
|
4
|
-
A Ruby Wrapper for [Sqoot](http://www.sqoot.com) [API V2](http://docs.sqoot.com/v2/overview.html).
|
4
|
+
A Ruby Wrapper for [Sqoot](http://www.sqoot.com) [API V2](http://docs.sqoot.com/v2/overview.html). With Auto-caching for all APIS, and Auto-increment for deals.
|
5
5
|
|
6
6
|
To get the list of available parameters kindly check out [API V2](http://docs.sqoot.com/v2/overview.html)
|
7
7
|
|
@@ -34,9 +34,13 @@ There’s a handy generator that generates the default configuration file into c
|
|
34
34
|
|
35
35
|
rails g rsqoot:config
|
36
36
|
|
37
|
-
|
37
|
+
Then, you should be able to use `SqootClient` to search deals. For example:
|
38
38
|
|
39
|
-
|
39
|
+
SqootClient.deals(query: 'Home')
|
40
|
+
|
41
|
+
You can also change your configuration in your own instance, such as below:
|
42
|
+
|
43
|
+
sqoot ||= RSqoot::Client.new(public_api_key: "YOUR PUBLIC API KEY", private_api_key: 'YOUR PRIVATE API KEY')
|
40
44
|
|
41
45
|
#### Basic Usages
|
42
46
|
|
@@ -95,6 +99,20 @@ If you want to fetch the newest records each time, you can do as below:
|
|
95
99
|
|
96
100
|
By this, it will update the cache by each query.
|
97
101
|
|
102
|
+
#### Auto increment for deals
|
103
|
+
|
104
|
+
sqoot.total_sqoot_deals(query: 'Home', page: 2, category_slugs: 'US')
|
105
|
+
# For this method, it will cache all the pages for current query options, the more you query the more it will store until reach the end.
|
106
|
+
|
107
|
+
# For example:
|
108
|
+
sqoot.total_sqoot_deals(query: 'Home', page: 1, per_page: 20, category_slugs: 'US').count
|
109
|
+
# => 20 records
|
110
|
+
sqoot.total_sqoot_deals(query: 'Home', page: 2, per_page: 20, category_slugs: 'US').count
|
111
|
+
# => 40 records
|
112
|
+
|
113
|
+
# But once you change your query options, it will re-cache the records.
|
114
|
+
|
115
|
+
|
98
116
|
## Contributing
|
99
117
|
|
100
118
|
1. Fork it
|
data/lib/rsqoot/category.rb
CHANGED
@@ -5,7 +5,7 @@ module RSqoot
|
|
5
5
|
#
|
6
6
|
# @return [Hashie::Mash] category list
|
7
7
|
def categories(options={})
|
8
|
-
|
8
|
+
options = update_by_expire_time options
|
9
9
|
query = options.delete(:query)
|
10
10
|
if categories_not_latest?(options)
|
11
11
|
@rsqoot_categories = get('categories', options)
|
data/lib/rsqoot/click.rb
CHANGED
@@ -8,7 +8,7 @@ module RSqoot
|
|
8
8
|
#
|
9
9
|
# @return [Hashie::Mash]
|
10
10
|
def clicks(options={})
|
11
|
-
|
11
|
+
options = update_by_expire_time options
|
12
12
|
if clicks_not_latest?(options)
|
13
13
|
@rsqoot_clicks = get('clicks', options)
|
14
14
|
@rsqoot_clicks = @rsqoot_clicks.clicks if @rsqoot_clicks
|
data/lib/rsqoot/commission.rb
CHANGED
@@ -8,7 +8,7 @@ module RSqoot
|
|
8
8
|
#
|
9
9
|
# @return [Hashie::Mash]
|
10
10
|
def commissions(options={})
|
11
|
-
|
11
|
+
options = update_by_expire_time options
|
12
12
|
if commissions_not_latest?(options)
|
13
13
|
@rsqoot_commissions = get('commissions', options)
|
14
14
|
@rsqoot_commissions = @rsqoot_commissions.commissions if @rsqoot_commissions
|
data/lib/rsqoot/deal.rb
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
module RSqoot
|
2
2
|
module Deal
|
3
|
-
|
4
3
|
# Retrieve a list of deals based on the following parameters
|
5
4
|
#
|
6
5
|
# @param [String] query (Search deals by title, description, fine print, merchant name, provider, and category.)
|
@@ -8,8 +7,9 @@ module RSqoot
|
|
8
7
|
# @param [Integer] radius (Measured in miles. Defaults to 10.)
|
9
8
|
# @param [Integer] page (Which page of result to return. Default to 1.)
|
10
9
|
# @param [Integer] per_page (Number of results to return at once. Defaults to 10.)
|
10
|
+
#
|
11
11
|
def deals(options={})
|
12
|
-
|
12
|
+
options = update_by_expire_time options
|
13
13
|
if deals_not_latest?(options)
|
14
14
|
uniq = !!options.delete(:uniq)
|
15
15
|
@rsqoot_deals = get('deals', options) || []
|
@@ -22,7 +22,7 @@ module RSqoot
|
|
22
22
|
# Retrieve a deal by id
|
23
23
|
#
|
24
24
|
def deal(id, options={})
|
25
|
-
|
25
|
+
options = update_by_expire_time options
|
26
26
|
if deal_not_latest?(id)
|
27
27
|
@rsqoot_deal = get("deals/#{id}", options)
|
28
28
|
@rsqoot_deal = @rsqoot_deal.deal if @rsqoot_deal
|
@@ -34,8 +34,9 @@ module RSqoot
|
|
34
34
|
url_generator("deals/#{deal_id}/image", options, require_key = true).first.to_s
|
35
35
|
end
|
36
36
|
|
37
|
+
# Auto Increment for deals query.
|
37
38
|
def total_sqoot_deals(options = {})
|
38
|
-
@total_deals
|
39
|
+
@total_deals ||= []
|
39
40
|
@cached_pages ||= []
|
40
41
|
page = options[:page] || 1
|
41
42
|
check_query_change options
|
@@ -52,6 +53,10 @@ module RSqoot
|
|
52
53
|
|
53
54
|
attr_reader :cached_pages, :total_deals, :last_deals_query
|
54
55
|
|
56
|
+
# Uniq deals from Sqoot, because there are some many duplicated deals
|
57
|
+
# with different ids
|
58
|
+
# Simplely distinguish them by their titles
|
59
|
+
#
|
55
60
|
def uniq_deals(deals = [])
|
56
61
|
titles = deals.map(&:title).uniq
|
57
62
|
titles.map do |title|
|
@@ -63,16 +68,29 @@ module RSqoot
|
|
63
68
|
end.flatten
|
64
69
|
end
|
65
70
|
|
71
|
+
# A status checker for method :total_sqoot_deals
|
72
|
+
# If the query parameters changed, this will reset the cache
|
73
|
+
# else it will do nothing
|
74
|
+
#
|
66
75
|
def check_query_change(options = {})
|
76
|
+
options = update_by_expire_time options
|
67
77
|
@last_deals_query ||= ''
|
68
|
-
current_query = options[:query].to_s
|
78
|
+
current_query = options[:query].to_s
|
79
|
+
current_query += options[:category_slugs].to_s
|
80
|
+
current_query += options[:location].to_s
|
81
|
+
current_query += options[:radius].to_s
|
82
|
+
current_query += options[:online].to_s
|
83
|
+
current_query += options[:expired_in].to_s
|
84
|
+
current_query += options[:per_page].to_s
|
69
85
|
if @last_deals_query != current_query
|
70
86
|
@last_deals_query = current_query
|
71
|
-
@total_deals
|
87
|
+
@total_deals = []
|
72
88
|
@cached_pages = []
|
73
89
|
end
|
74
90
|
end
|
75
91
|
|
92
|
+
# Helper methods to detect which page is cached
|
93
|
+
#
|
76
94
|
def page_cached?(page = 1)
|
77
95
|
cached_pages.include? page.to_s
|
78
96
|
end
|
data/lib/rsqoot/helper.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
module RSqoot
|
2
2
|
module Helper
|
3
3
|
|
4
|
+
# Add auto-cache helper methods, instances to save the latest query
|
5
|
+
#
|
4
6
|
def self.included(base)
|
5
7
|
[ 'deals',
|
6
8
|
'deal',
|
@@ -18,6 +20,11 @@ module RSqoot
|
|
18
20
|
end
|
19
21
|
end
|
20
22
|
|
23
|
+
# Add categories and providers query helpers
|
24
|
+
# Search categories and providers will be very easy
|
25
|
+
# Such as: query_categories('home&_visiter,friends')
|
26
|
+
# => search records like: home, visiter, friends
|
27
|
+
#
|
21
28
|
[ 'categories',
|
22
29
|
'providers' ].each do |name|
|
23
30
|
base.send :define_method, ('query_' + name).to_sym do |q|
|
@@ -34,10 +41,13 @@ module RSqoot
|
|
34
41
|
end
|
35
42
|
end
|
36
43
|
|
37
|
-
|
44
|
+
# Add expired time functionality to this gem
|
45
|
+
# By default is 1.hour, and can be replaced anywhere
|
46
|
+
#
|
47
|
+
def update_by_expire_time(options = {})
|
38
48
|
@expired_in = options[:expired_in] if options[:expired_in].present?
|
39
49
|
time = Time.now.to_i / expired_in.to_i
|
40
|
-
options.merge
|
50
|
+
options.merge({expired_in: time})
|
41
51
|
end
|
42
52
|
|
43
53
|
end
|
data/lib/rsqoot/merchant.rb
CHANGED
@@ -7,7 +7,7 @@ module RSqoot
|
|
7
7
|
# @param [String] namespace (One of the supported namespaces. Factual, Foursquare, Facebook, Google, CitySearch, Yelp.)
|
8
8
|
|
9
9
|
def merchant(id, options={})
|
10
|
-
|
10
|
+
options = update_by_expire_time options
|
11
11
|
if merchant_not_latest?(id)
|
12
12
|
@rsqoot_merchant = get("merchants/#{id}", options)
|
13
13
|
@rsqoot_merchant = @rsqoot_merchant.merchant if @rsqoot_merchant
|
data/lib/rsqoot/provider.rb
CHANGED
data/lib/rsqoot/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rsqoot
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Felix Liu
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-11-
|
11
|
+
date: 2013-11-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: hashie
|