rsqoot 0.5.2 → 0.5.3
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile.lock +17 -6
- data/README.md +25 -27
- data/Rakefile +4 -0
- data/lib/generators/rsqoot/templates/rsqoot_config.rb +0 -2
- data/lib/rsqoot/client.rb +14 -1
- data/lib/rsqoot/helper.rb +3 -1
- data/lib/rsqoot/logger.rb +5 -0
- data/lib/rsqoot/request.rb +11 -0
- data/lib/rsqoot/version.rb +1 -1
- data/lib/rsqoot.rb +8 -0
- data/rsqoot.gemspec +3 -0
- metadata +40 -2
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
rsqoot (0.5.
|
4
|
+
rsqoot (0.5.3)
|
5
5
|
activesupport (>= 3.0.0)
|
6
6
|
hashie (>= 2.0.0)
|
7
7
|
json (>= 1.6.0)
|
@@ -9,16 +9,27 @@ PATH
|
|
9
9
|
GEM
|
10
10
|
remote: https://rubygems.org/
|
11
11
|
specs:
|
12
|
-
activesupport (
|
13
|
-
i18n (
|
14
|
-
|
12
|
+
activesupport (4.0.3)
|
13
|
+
i18n (~> 0.6, >= 0.6.4)
|
14
|
+
minitest (~> 4.2)
|
15
|
+
multi_json (~> 1.3)
|
16
|
+
thread_safe (~> 0.1)
|
17
|
+
tzinfo (~> 0.3.37)
|
18
|
+
atomic (1.1.14)
|
15
19
|
hashie (2.0.5)
|
16
|
-
i18n (0.6.
|
20
|
+
i18n (0.6.9)
|
17
21
|
json (1.8.1)
|
18
|
-
|
22
|
+
minitest (4.7.5)
|
23
|
+
multi_json (1.8.4)
|
24
|
+
rake (10.1.1)
|
25
|
+
thread_safe (0.1.3)
|
26
|
+
atomic
|
27
|
+
tzinfo (0.3.38)
|
19
28
|
|
20
29
|
PLATFORMS
|
21
30
|
ruby
|
22
31
|
|
23
32
|
DEPENDENCIES
|
33
|
+
bundler (>= 1.0.0)
|
34
|
+
rake
|
24
35
|
rsqoot!
|
data/README.md
CHANGED
@@ -45,56 +45,54 @@ SqootClient.deals(query: 'Home')
|
|
45
45
|
You can also change your configuration in your own instance, such as below:
|
46
46
|
|
47
47
|
```ruby
|
48
|
-
|
48
|
+
SqootClient.reload!(public_api_key: "YOUR PUBLIC API KEY", private_api_key: 'YOUR PRIVATE API KEY')
|
49
49
|
```
|
50
50
|
|
51
51
|
#### Basic Usages
|
52
52
|
|
53
53
|
```ruby
|
54
|
-
|
55
|
-
|
56
|
-
sqoot.deals
|
54
|
+
SqootClient.deals
|
57
55
|
#=> returns a list of deals
|
58
56
|
|
59
|
-
|
57
|
+
SqootClient.deals(query: 'travel')
|
60
58
|
|
61
|
-
|
59
|
+
SqootClient.deals(location: 'Chicago')
|
62
60
|
|
63
|
-
|
61
|
+
SqootClient.deals(location: 'Chicago', per_page: 10)
|
64
62
|
|
65
|
-
|
63
|
+
SqootClient.deals(location: 'Chicago', per_page: 10, categories: 'health-beauty', page: 2)
|
66
64
|
|
67
|
-
|
65
|
+
SqootClient.deals(price_at_least: 10, order: :commission_desc)
|
68
66
|
|
69
|
-
|
67
|
+
SqootClient.impression(1555288, geometry: '250x250C')
|
70
68
|
# => return deal_id 1555288's image url which size is 250x250
|
71
69
|
|
72
|
-
|
70
|
+
SqootClient.deal(1555288).url
|
73
71
|
# => return a click url which will redirect to another url
|
74
72
|
|
75
|
-
|
73
|
+
SqootClient.providers
|
76
74
|
# => returns a list of providers
|
77
75
|
|
78
|
-
|
76
|
+
SqootClient.providers(query: 'Groupon')
|
79
77
|
|
80
|
-
|
78
|
+
SqootClient.categories
|
81
79
|
# => returns a list of categories
|
82
80
|
|
83
|
-
|
84
|
-
|
85
|
-
|
81
|
+
SqootClient.categories(query: 'home')
|
82
|
+
SqootClient.categories(query: 'home&health')
|
83
|
+
SqootClient.categories(query: 'home,health')
|
86
84
|
|
87
|
-
|
85
|
+
SqootClient.commissions
|
88
86
|
# => returns current month commissions
|
89
87
|
|
90
|
-
|
91
|
-
# => returns commissions using date_range :
|
88
|
+
SqootClient.commissions(from: '2012-01-01', to: '2012-01-20')
|
89
|
+
# => returns commissions using date_range :from & :to
|
92
90
|
|
93
|
-
|
91
|
+
SqootClient.clicks
|
94
92
|
# => returns real-time clicks from the event request limit of 1000
|
95
93
|
|
96
|
-
|
97
|
-
# => returns clicks using date_range :
|
94
|
+
SqootClient.clicks(from: '2012-01-01', to: '2012-01-20')
|
95
|
+
# => returns clicks using date_range :from & :to
|
98
96
|
```
|
99
97
|
|
100
98
|
#### Auto Cache
|
@@ -104,7 +102,7 @@ Please notice that each query with above methods will automaticlly cache the res
|
|
104
102
|
If you want to fetch the newest records each time, you can do as below:
|
105
103
|
|
106
104
|
```ruby
|
107
|
-
|
105
|
+
SqootClient.deals(location: 'Chicago', expired_in: 1.second)
|
108
106
|
```
|
109
107
|
|
110
108
|
By this, it will update the cache by each query.
|
@@ -112,13 +110,13 @@ By this, it will update the cache by each query.
|
|
112
110
|
#### Auto increment for deals
|
113
111
|
|
114
112
|
```ruby
|
115
|
-
|
113
|
+
SqootClient.total_sqoot_deals(query: 'Home', page: 2, category_slugs: 'US')
|
116
114
|
# 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.
|
117
115
|
|
118
116
|
# For example:
|
119
|
-
|
117
|
+
SqootClient.total_sqoot_deals(query: 'Home', page: 1, per_page: 20, category_slugs: 'US').count
|
120
118
|
# => 20 records
|
121
|
-
|
119
|
+
SqootClient.total_sqoot_deals(query: 'Home', page: 2, per_page: 20, category_slugs: 'US').count
|
122
120
|
# => 40 records
|
123
121
|
|
124
122
|
# But once you change your query options, it will re-cache the records.
|
data/Rakefile
CHANGED
data/lib/rsqoot/client.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
require "singleton"
|
1
2
|
require "rsqoot/helper"
|
2
3
|
require "rsqoot/merchant"
|
3
4
|
require "rsqoot/category"
|
@@ -10,6 +11,7 @@ require "rsqoot/logger"
|
|
10
11
|
|
11
12
|
module RSqoot
|
12
13
|
class Client
|
14
|
+
include Singleton
|
13
15
|
include Helper
|
14
16
|
include Category
|
15
17
|
include Click
|
@@ -20,7 +22,14 @@ module RSqoot
|
|
20
22
|
include Request
|
21
23
|
include Logger
|
22
24
|
|
23
|
-
|
25
|
+
attr_accessor :public_api_key,
|
26
|
+
:private_api_key,
|
27
|
+
:base_api_url,
|
28
|
+
:authentication_method,
|
29
|
+
:read_timeout,
|
30
|
+
:query_options,
|
31
|
+
:expired_in,
|
32
|
+
:sqoot_query_uri
|
24
33
|
|
25
34
|
def initialize(options={})
|
26
35
|
@public_api_key = options[:public_api_key] || RSqoot.public_api_key
|
@@ -31,5 +40,9 @@ module RSqoot
|
|
31
40
|
@expired_in = options[:expired_in] || RSqoot.expired_in
|
32
41
|
end
|
33
42
|
|
43
|
+
def reload!(options={})
|
44
|
+
initialize(options)
|
45
|
+
self.class.instance
|
46
|
+
end
|
34
47
|
end
|
35
48
|
end
|
data/lib/rsqoot/helper.rb
CHANGED
@@ -32,7 +32,7 @@ module RSqoot
|
|
32
32
|
queries = q.downcase.scan(/[A-Za-z]+|\d+/)
|
33
33
|
if queries.present?
|
34
34
|
queries.map do |q|
|
35
|
-
instance_variable_get('@rsqoot_'+name).dup.keep_if do |c|
|
35
|
+
instance_variable_get('@rsqoot_' + name).dup.keep_if do |c|
|
36
36
|
c.slug =~ Regexp.new(q)
|
37
37
|
end
|
38
38
|
end.flatten.compact.uniq
|
@@ -42,6 +42,8 @@ module RSqoot
|
|
42
42
|
end
|
43
43
|
|
44
44
|
# Add Wrappers: Deal, Category, Commission, Merchant, Provider, Click
|
45
|
+
# All records should return as RSqoot::Sqoot* object
|
46
|
+
#
|
45
47
|
[ 'SqootDeal',
|
46
48
|
'SqootCategory',
|
47
49
|
'SqootCommission',
|
data/lib/rsqoot/logger.rb
CHANGED
@@ -1,5 +1,10 @@
|
|
1
1
|
module RSqoot
|
2
2
|
module Logger
|
3
|
+
|
4
|
+
# Add logger support, easy for log monitor when running your app
|
5
|
+
# Output errors and valid records count
|
6
|
+
# TODO add color support
|
7
|
+
#
|
3
8
|
def logger(options = {records: [], uri: '', error: '', type: '', opts: {}})
|
4
9
|
records = options[:records].nil? ? [] : options[:records]
|
5
10
|
error = options[:error]
|
data/lib/rsqoot/request.rb
CHANGED
@@ -4,6 +4,9 @@ require 'json'
|
|
4
4
|
module RSqoot
|
5
5
|
module Request
|
6
6
|
|
7
|
+
# Get method, use by all other API qeury methods, fetch records
|
8
|
+
# from the Sqoot API V2 url, and provide wrapper functionality
|
9
|
+
#
|
7
10
|
def get(path, opts = {}, wrapper = ::Hashie::Mash)
|
8
11
|
uri, headers = url_generator(path, opts)
|
9
12
|
begin
|
@@ -17,6 +20,9 @@ module RSqoot
|
|
17
20
|
end
|
18
21
|
end
|
19
22
|
|
23
|
+
# Generate valid Sqoot API V2 url and provide two different way of
|
24
|
+
# authentication: :header, :parameter
|
25
|
+
#
|
20
26
|
def url_generator(path, opts = {}, require_key = false)
|
21
27
|
uri = URI.parse base_api_url
|
22
28
|
headers = {read_timeout: read_timeout}
|
@@ -37,14 +43,19 @@ module RSqoot
|
|
37
43
|
|
38
44
|
private
|
39
45
|
|
46
|
+
# Endpoints that needs private key
|
47
|
+
#
|
40
48
|
def private_endpoints
|
41
49
|
%w(clicks commissions)
|
42
50
|
end
|
43
51
|
|
52
|
+
# Endpoints that both public or private key will work
|
53
|
+
#
|
44
54
|
def public_endpoints
|
45
55
|
%w(categories deals merchants providers)
|
46
56
|
end
|
47
57
|
|
58
|
+
# Decide which api key should be used: private, public
|
48
59
|
def api_key(endpoint='')
|
49
60
|
if private_endpoints.include? endpoint
|
50
61
|
private_api_key
|
data/lib/rsqoot/version.rb
CHANGED
data/lib/rsqoot.rb
CHANGED
@@ -15,6 +15,7 @@ module RSqoot
|
|
15
15
|
raise "You must add your own public api key to initializer ." if self.public_api_key.nil?
|
16
16
|
raise "You must add your own private api key to initializer ." if self.private_api_key.nil?
|
17
17
|
raise "Authentication method must be :header or :parameter ." if !AUTHENTICATION_METHODS.include? self.authentication_method
|
18
|
+
SqootClient.reload!
|
18
19
|
true
|
19
20
|
end
|
20
21
|
|
@@ -32,3 +33,10 @@ module RSqoot
|
|
32
33
|
end
|
33
34
|
|
34
35
|
end
|
36
|
+
|
37
|
+
begin
|
38
|
+
RSqoot.load_defaults
|
39
|
+
SqootClient ||= RSqoot::Client.instance
|
40
|
+
rescue => e
|
41
|
+
raise e
|
42
|
+
end
|
data/rsqoot.gemspec
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rsqoot
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2014-03-03 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: hashie
|
@@ -59,6 +59,38 @@ dependencies:
|
|
59
59
|
- - ! '>='
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: 3.0.0
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: bundler
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: 1.0.0
|
70
|
+
type: :development
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: 1.0.0
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: rake
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
82
|
+
requirements:
|
83
|
+
- - ! '>='
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: '0'
|
86
|
+
type: :development
|
87
|
+
prerelease: false
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ! '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '0'
|
62
94
|
description: A Ruby Wrapper for Sqoot API V2.
|
63
95
|
email:
|
64
96
|
- lyfeyaj@gmail.com
|
@@ -101,12 +133,18 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
101
133
|
- - ! '>='
|
102
134
|
- !ruby/object:Gem::Version
|
103
135
|
version: '0'
|
136
|
+
segments:
|
137
|
+
- 0
|
138
|
+
hash: 309329620517368495
|
104
139
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
105
140
|
none: false
|
106
141
|
requirements:
|
107
142
|
- - ! '>='
|
108
143
|
- !ruby/object:Gem::Version
|
109
144
|
version: '0'
|
145
|
+
segments:
|
146
|
+
- 0
|
147
|
+
hash: 309329620517368495
|
110
148
|
requirements: []
|
111
149
|
rubyforge_project:
|
112
150
|
rubygems_version: 1.8.26
|