tamber 0.1.11 → 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.travis.yml +1 -1
- data/LICENSE +1 -1
- data/README.md +25 -22
- data/VERSION +1 -1
- data/lib/tamber.rb +1 -0
- data/lib/tamber/api_operations/remove.rb +1 -1
- data/lib/tamber/api_operations/save.rb +10 -0
- data/lib/tamber/api_resource.rb +8 -1
- data/lib/tamber/discover.rb +77 -13
- data/lib/tamber/item.rb +11 -0
- data/lib/tamber/user.rb +16 -2
- data/lib/tamber/version.rb +1 -1
- data/tamber.gemspec +2 -2
- data/test/discover_test.rb +18 -9
- data/test/event_test.rb +1 -2
- data/test/test_helper.rb +1 -1
- data/test/user_test.rb +13 -13
- metadata +24 -23
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 386811e51c48053427b2b7b8c59cc12e9972a8a7dc0fb48145a23080bce2a4a3
|
4
|
+
data.tar.gz: 5a4f8cd6e01e90d8d0e228c94ff2cfedf48354d3a818247070d8d63c8f50ba1b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5e1b4bf102c02bfbf685b576c2ada433b1d7504e0aee02783d9f9feb1ae3f851e99a688ab8c68b87ad4b61a42acde0f5ea7dd962176529ca5213a87a73e43bc1
|
7
|
+
data.tar.gz: 65c236ddc5305c46b2f6022a16a37bb9d8984f7835aaaa5489abcd3535ffb53cc4f540e7af19cd01b85bc6f3e35ccd4f8ff237fdba18f593ba913283c665af2e
|
data/.travis.yml
CHANGED
data/LICENSE
CHANGED
data/README.md
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
Recommendation engines for developers, easy as π. Build blazing fast, head-scratchingly accurate hosted recommendation engines in minutes.
|
4
4
|
|
5
|
-
The Tamber iOS SDK makes it easy to track events (user-item interactions) and get recommendations for your users
|
5
|
+
The Tamber iOS SDK makes it easy to track events (user-item interactions) and get recommendations for your users in real time.
|
6
6
|
|
7
7
|
[Get a free api key][homepage] to get started.
|
8
8
|
|
@@ -48,7 +48,10 @@ begin
|
|
48
48
|
user: 'user_rlox8k927z7p',
|
49
49
|
behavior: 'like'
|
50
50
|
item: 'item_wmt4fn6o4zlk',
|
51
|
-
context:
|
51
|
+
context: {
|
52
|
+
"page": "homepage",
|
53
|
+
"section": "featured_section"
|
54
|
+
}
|
52
55
|
)
|
53
56
|
rescue TamberError => error
|
54
57
|
puts error.message
|
@@ -60,19 +63,18 @@ end
|
|
60
63
|
|
61
64
|
Once you have tracked enough events and created your engine, it's time to put personalized recommendations in your app.
|
62
65
|
|
63
|
-
The primary
|
66
|
+
The primary methods of discovery in Tamber are the `Discover.next` and `Discover.recommended` methods, which returns the optimal set of items that the user should be shown next on a given item page, and in a personalized recommendations section, respectively.
|
64
67
|
|
65
|
-
####
|
68
|
+
#### Up Next
|
66
69
|
|
67
|
-
|
70
|
+
Don't make an item page a dead-end. Keep users engaged by creating paths of discovery as they navigate from item to item, always showing the right mix of items they should check out next. Just supply the user and the item that they are navigating to / looking at.
|
68
71
|
|
69
72
|
```rb
|
70
|
-
Tamber.project_key = 'your_project_key'
|
71
|
-
|
72
73
|
begin
|
73
74
|
d = Tamber::Discover.next(
|
74
75
|
user: 'user_rlox8k927z7p',
|
75
|
-
|
76
|
+
item: 'item_wmt4fn6o4zlk',
|
77
|
+
number: 14
|
76
78
|
)
|
77
79
|
d.each { |rec| puts "item: #{rec.item}, score: #{rec.score}"}
|
78
80
|
rescue TamberError => error
|
@@ -80,16 +82,17 @@ rescue TamberError => error
|
|
80
82
|
end
|
81
83
|
```
|
82
84
|
|
83
|
-
####
|
85
|
+
#### For You
|
84
86
|
|
85
|
-
|
87
|
+
To put personalized recommendations on your homepage, or in any recommended section, just call `Discover.recommended` with the given user's id and the number of recommendations you want to display.
|
86
88
|
|
87
89
|
```rb
|
90
|
+
Tamber.project_key = 'your_project_key'
|
91
|
+
|
88
92
|
begin
|
89
|
-
d = Tamber::Discover.
|
93
|
+
d = Tamber::Discover.recommended(
|
90
94
|
user: 'user_rlox8k927z7p',
|
91
|
-
|
92
|
-
number: 14
|
95
|
+
number: 10
|
93
96
|
)
|
94
97
|
d.each { |rec| puts "item: #{rec.item}, score: #{rec.score}"}
|
95
98
|
rescue TamberError => error
|
@@ -100,9 +103,9 @@ end
|
|
100
103
|
|
101
104
|
##### `continuation`
|
102
105
|
|
103
|
-
|
106
|
+
Recommendations are optimized for the exact moment and context of the user at the time of request, but sometimes a user wants to see more recommended items than are shown by default. In order to 'Show More', Tamber supports automatic continuation.
|
104
107
|
|
105
|
-
When you want to add more recommendations to those currently displayed to the user, just set the `continuation` field to `true`. Tamber will automatically generate the set of items that should be appended to the current user-session's list. The
|
108
|
+
When you want to add more recommendations to those currently displayed to the user, just set the `continuation` field to `true`. Tamber will automatically generate the set of items that should be appended to the current user-session's list. The user-session is reset when `Discover.recommended` or `Discover.next` is called without `continuation`.
|
106
109
|
|
107
110
|
```rb
|
108
111
|
Tamber.project_key = 'your_project_key'
|
@@ -126,21 +129,21 @@ Help your users keep their fingers on the pulse of your platform by showing them
|
|
126
129
|
|
127
130
|
```rb
|
128
131
|
begin
|
129
|
-
d = Tamber::Discover.hot
|
132
|
+
d = Tamber::Discover.hot # the hottest (trending) items
|
130
133
|
d.each { |rec| puts "item: #{rec.item}, score: #{rec.score}"}
|
131
134
|
end
|
132
135
|
|
133
136
|
begin
|
134
|
-
d = Tamber::Discover.popular
|
137
|
+
d = Tamber::Discover.popular # the most popular items
|
135
138
|
end
|
136
139
|
|
137
140
|
# BETA endpoints
|
138
141
|
begin
|
139
|
-
d = Tamber::Discover.uac
|
142
|
+
d = Tamber::Discover.uac # the most up-and-coming items
|
140
143
|
end
|
141
144
|
|
142
145
|
begin
|
143
|
-
d = Tamber::Discover.new
|
146
|
+
d = Tamber::Discover.new # the newest items
|
144
147
|
end
|
145
148
|
```
|
146
149
|
|
@@ -150,19 +153,19 @@ Tamber allows you to use lower-level methods to get lists of recommended items,
|
|
150
153
|
|
151
154
|
```rb
|
152
155
|
begin
|
153
|
-
Tamber::Discover.recommended(user: 'user_rlox8k927z7p').each { |rec| puts "item: #{rec.item}, score: #{rec.score}"}
|
156
|
+
Tamber::Discover::Basic.recommended(user: 'user_rlox8k927z7p').each { |rec| puts "item: #{rec.item}, score: #{rec.score}"}
|
154
157
|
rescue TamberError => error
|
155
158
|
puts error.message
|
156
159
|
end
|
157
160
|
|
158
161
|
begin
|
159
|
-
Tamber::Discover.
|
162
|
+
Tamber::Discover::Basic.Similar(item: 'item_wmt4fn6o4zlk').each { |rec| puts "item: #{rec.item}, score: #{rec.score}"}
|
160
163
|
rescue TamberError => error
|
161
164
|
puts error.message
|
162
165
|
end
|
163
166
|
|
164
167
|
begin
|
165
|
-
Tamber::Discover.
|
168
|
+
Tamber::Discover::Basic.RecommendedSimilar(
|
166
169
|
user: 'user_rlox8k927z7p',
|
167
170
|
item: 'item_wmt4fn6o4zlk'
|
168
171
|
).each { |rec| puts "item: #{rec.item}, score: #{rec.score}"}
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1
|
1
|
+
0.2.1
|
data/lib/tamber.rb
CHANGED
data/lib/tamber/api_resource.rb
CHANGED
@@ -10,7 +10,14 @@ module Tamber
|
|
10
10
|
if self == APIResource
|
11
11
|
raise TamberError.new('APIResource is an abstract class. You should perform actions on its subclasses (Event, Discover, etc.)')
|
12
12
|
end
|
13
|
-
|
13
|
+
|
14
|
+
if class_name.downcase == "basic"
|
15
|
+
"/discover/#{CGI.escape(class_name.downcase)}"
|
16
|
+
elsif class_name.downcase == "usertrend"
|
17
|
+
"/discover/user_trend"
|
18
|
+
else
|
19
|
+
"/#{CGI.escape(class_name.downcase)}"
|
20
|
+
end
|
14
21
|
end
|
15
22
|
|
16
23
|
def url
|
data/lib/tamber/discover.rb
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
module Tamber
|
2
2
|
class Discover < APIResource
|
3
|
-
|
4
3
|
def self.next(params={})
|
5
4
|
response = request(:get, self.next_url, params)
|
6
5
|
Util.convert_to_tamber_object(response)
|
@@ -11,15 +10,15 @@ module Tamber
|
|
11
10
|
Util.convert_to_tamber_object(response)
|
12
11
|
end
|
13
12
|
|
14
|
-
def self.
|
15
|
-
response = request(:get, self.
|
13
|
+
def self.weekly(params={})
|
14
|
+
response = request(:get, self.weekly_url, params)
|
16
15
|
Util.convert_to_tamber_object(response)
|
17
|
-
end
|
16
|
+
end
|
18
17
|
|
19
|
-
def self.
|
20
|
-
response = request(:get, self.
|
18
|
+
def self.daily(params={})
|
19
|
+
response = request(:get, self.daily_url, params)
|
21
20
|
Util.convert_to_tamber_object(response)
|
22
|
-
end
|
21
|
+
end
|
23
22
|
|
24
23
|
def self.meta(params={})
|
25
24
|
response = request(:get, self.meta_url, params)
|
@@ -46,20 +45,25 @@ module Tamber
|
|
46
45
|
Util.convert_to_tamber_object(response)
|
47
46
|
end
|
48
47
|
|
48
|
+
def self.uac(params={})
|
49
|
+
response = request(:get, self.uac_url, params)
|
50
|
+
Util.convert_to_tamber_object(response)
|
51
|
+
end
|
52
|
+
|
49
53
|
def self.recommended_url
|
50
54
|
url + '/recommended'
|
51
55
|
end
|
52
56
|
|
53
|
-
def self.
|
54
|
-
url + '/
|
57
|
+
def self.next_url
|
58
|
+
url + '/next'
|
55
59
|
end
|
56
60
|
|
57
|
-
def self.
|
58
|
-
url + '/
|
61
|
+
def self.weekly_url
|
62
|
+
url + '/weekly'
|
59
63
|
end
|
60
64
|
|
61
|
-
def self.
|
62
|
-
url + '/
|
65
|
+
def self.daily_url
|
66
|
+
url + '/daily'
|
63
67
|
end
|
64
68
|
|
65
69
|
def self.meta_url
|
@@ -82,6 +86,66 @@ module Tamber
|
|
82
86
|
url + '/new'
|
83
87
|
end
|
84
88
|
|
89
|
+
class UserTrend < APIResource
|
90
|
+
def self.popular(params={})
|
91
|
+
response = request(:get, self.popular_url, params)
|
92
|
+
Util.convert_to_tamber_object(response)
|
93
|
+
end
|
94
|
+
|
95
|
+
def self.hot(params={})
|
96
|
+
response = request(:get, self.hot_url, params)
|
97
|
+
Util.convert_to_tamber_object(response)
|
98
|
+
end
|
99
|
+
|
100
|
+
def self.uac(params={})
|
101
|
+
response = request(:get, self.uac_url, params)
|
102
|
+
Util.convert_to_tamber_object(response)
|
103
|
+
end
|
104
|
+
|
105
|
+
def self.popular_url
|
106
|
+
url + '/popular'
|
107
|
+
end
|
108
|
+
|
109
|
+
def self.hot_url
|
110
|
+
url + '/hot'
|
111
|
+
end
|
112
|
+
|
113
|
+
def self.uac_url
|
114
|
+
url + '/uac'
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
# deprecated
|
119
|
+
class Basic < APIResource
|
120
|
+
def self.recommended(params={})
|
121
|
+
warn "[DEPRECATION] `Discover.Basic.recommended` is deprecated. Please use `Discover.recommended` instead."
|
122
|
+
response = request(:get, self.recommended_url, params)
|
123
|
+
Util.convert_to_tamber_object(response)
|
124
|
+
end
|
125
|
+
|
126
|
+
def self.similar(params={})
|
127
|
+
warn "[DEPRECATION] `Discover.Basic.similar` is deprecated. Please use `Discover.next` instead."
|
128
|
+
response = request(:get, self.similar_url, params)
|
129
|
+
Util.convert_to_tamber_object(response)
|
130
|
+
end
|
131
|
+
|
132
|
+
def self.recommendedSimilar(params={})
|
133
|
+
warn "[DEPRECATION] `Discover.Basic.recommendedSimilar` is deprecated. Please use `Discover.next` instead."
|
134
|
+
response = request(:get, self.recommendedSimilar_url, params)
|
135
|
+
Util.convert_to_tamber_object(response)
|
136
|
+
end
|
137
|
+
def self.recommended_url
|
138
|
+
url + '/recommended'
|
139
|
+
end
|
140
|
+
|
141
|
+
def self.similar_url
|
142
|
+
url + '/similar'
|
143
|
+
end
|
144
|
+
|
145
|
+
def self.recommendedSimilar_url
|
146
|
+
url + '/recommended_similar'
|
147
|
+
end
|
148
|
+
end
|
85
149
|
end
|
86
150
|
|
87
151
|
# Discover requests return an array of 'discovery' objects
|
data/lib/tamber/item.rb
CHANGED
@@ -1,10 +1,17 @@
|
|
1
1
|
module Tamber
|
2
2
|
class Item < APIResource
|
3
3
|
extend Tamber::APIOperations::Create
|
4
|
+
extend Tamber::APIOperations::Save
|
4
5
|
extend Tamber::APIOperations::Update
|
5
6
|
extend Tamber::APIOperations::Retrieve
|
6
7
|
extend Tamber::APIOperations::List
|
7
8
|
|
9
|
+
# hide an item from all Discover results
|
10
|
+
def self.batch(params={})
|
11
|
+
response = request(:post, self.batch_url, params)
|
12
|
+
Util.convert_to_tamber_object(response)
|
13
|
+
end
|
14
|
+
|
8
15
|
# hide an item from all Discover results
|
9
16
|
def self.hide(params={})
|
10
17
|
response = request(:post, self.hide_url, params)
|
@@ -23,6 +30,10 @@ module Tamber
|
|
23
30
|
Util.convert_to_tamber_object(response)
|
24
31
|
end
|
25
32
|
|
33
|
+
def self.batch_url
|
34
|
+
url + '/batch'
|
35
|
+
end
|
36
|
+
|
26
37
|
def self.hide_url
|
27
38
|
url + '/hide'
|
28
39
|
end
|
data/lib/tamber/user.rb
CHANGED
@@ -1,12 +1,19 @@
|
|
1
1
|
module Tamber
|
2
2
|
class User < APIResource
|
3
3
|
extend Tamber::APIOperations::Create
|
4
|
-
extend Tamber::APIOperations::
|
4
|
+
extend Tamber::APIOperations::Save
|
5
5
|
extend Tamber::APIOperations::Retrieve
|
6
6
|
extend Tamber::APIOperations::List
|
7
7
|
|
8
|
+
def self.update(params={})
|
9
|
+
warn "[DEPRECATION] `User.update` is deprecated. Please use `User.save` instead."
|
10
|
+
response = request(:post, url + '/update', params)
|
11
|
+
Util.convert_to_tamber_object(response)
|
12
|
+
end
|
13
|
+
|
8
14
|
def self.search(params={})
|
9
|
-
|
15
|
+
warn "[DEPRECATION] `User.search` is deprecated. Please use `User.list` instead."
|
16
|
+
response = request(:post, url + '/list', params)
|
10
17
|
Util.convert_to_tamber_object(response)
|
11
18
|
end
|
12
19
|
|
@@ -14,6 +21,13 @@ module Tamber
|
|
14
21
|
response = request(:post, url + '/merge', params)
|
15
22
|
Util.convert_to_tamber_object(response)
|
16
23
|
end
|
24
|
+
|
25
|
+
# Deprecated in api version 2020-6-11
|
26
|
+
def self.update(params={})
|
27
|
+
warn "[DEPRECATION] `User.update` is deprecated. Please use `User.save` instead."
|
28
|
+
response = request(:post, url + '/save', params)
|
29
|
+
Util.convert_to_tamber_object(response)
|
30
|
+
end
|
17
31
|
|
18
32
|
end
|
19
33
|
end
|
data/lib/tamber/version.rb
CHANGED
data/tamber.gemspec
CHANGED
@@ -13,8 +13,8 @@ spec = Gem::Specification.new do |s|
|
|
13
13
|
s.authors = ['Alexi Robbins', 'Mark Canning']
|
14
14
|
s.email = ['alexi@tamber.com', 'argusdusty@tamber.com']
|
15
15
|
|
16
|
-
s.add_dependency('rest-client', '~>
|
17
|
-
s.add_dependency('json', '
|
16
|
+
s.add_dependency('rest-client', '~> 2.0')
|
17
|
+
s.add_dependency('json', '>= 1.8.1')
|
18
18
|
s.add_dependency('activesupport', '>= 4.2.4')
|
19
19
|
|
20
20
|
s.add_development_dependency('mocha', '~> 0.13.2')
|
data/test/discover_test.rb
CHANGED
@@ -29,6 +29,13 @@ module Tamber
|
|
29
29
|
# d.each { |rec| puts "item: #{rec.item}, score: #{rec.score}"}
|
30
30
|
# end
|
31
31
|
# end
|
32
|
+
|
33
|
+
# should "return new" do
|
34
|
+
# begin
|
35
|
+
# d = Tamber::Discover.new()
|
36
|
+
# d.each { |rec| puts "item: #{rec.item}, score: #{rec.score}"}
|
37
|
+
# end
|
38
|
+
# end
|
32
39
|
|
33
40
|
should "return hot" do
|
34
41
|
begin
|
@@ -51,13 +58,6 @@ module Tamber
|
|
51
58
|
end
|
52
59
|
end
|
53
60
|
|
54
|
-
should "return new" do
|
55
|
-
begin
|
56
|
-
d = Tamber::Discover.new()
|
57
|
-
d.each { |rec| puts "item: #{rec.item}, score: #{rec.score}"}
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
61
|
should "return recommendations" do
|
62
62
|
begin
|
63
63
|
d = Tamber::Discover.recommended(
|
@@ -76,7 +76,7 @@ module Tamber
|
|
76
76
|
|
77
77
|
should "return similar" do
|
78
78
|
begin
|
79
|
-
d = Tamber::Discover.similar(
|
79
|
+
d = Tamber::Discover::Basic.similar(
|
80
80
|
:item => 'item_i5gq90scc1'
|
81
81
|
)
|
82
82
|
d.each { |rec| puts "item: #{rec.item}, score: #{rec.score}"}
|
@@ -85,7 +85,7 @@ module Tamber
|
|
85
85
|
|
86
86
|
should "return recommendedSimilar" do
|
87
87
|
begin
|
88
|
-
d = Tamber::Discover.recommendedSimilar(
|
88
|
+
d = Tamber::Discover::Basic.recommendedSimilar(
|
89
89
|
:user => 'user_jctzgisbru',
|
90
90
|
:item => 'item_i5gq90scc1'
|
91
91
|
)
|
@@ -93,5 +93,14 @@ module Tamber
|
|
93
93
|
end
|
94
94
|
end
|
95
95
|
|
96
|
+
should "return user hot" do
|
97
|
+
begin
|
98
|
+
d = Tamber::Discover::UserTrend.hot(
|
99
|
+
:user => 'user_jctzgisbru'
|
100
|
+
)
|
101
|
+
d.each { |rec| puts "item: #{rec.item}, score: #{rec.score}"}
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
96
105
|
end
|
97
106
|
end
|
data/test/event_test.rb
CHANGED
data/test/test_helper.rb
CHANGED
data/test/user_test.rb
CHANGED
@@ -59,19 +59,19 @@ module Tamber
|
|
59
59
|
end
|
60
60
|
end
|
61
61
|
|
62
|
-
should "search user" do
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
end
|
62
|
+
# should "search user" do
|
63
|
+
# begin
|
64
|
+
# users = Tamber::User.search(
|
65
|
+
# :filter => {
|
66
|
+
# 'city' => 'Mountain View, CA'
|
67
|
+
# }
|
68
|
+
# )
|
69
|
+
# puts users.inspect
|
70
|
+
# # assert users.length >= 1
|
71
|
+
# rescue TamberError => error
|
72
|
+
# puts error.message
|
73
|
+
# end
|
74
|
+
# end
|
75
75
|
|
76
76
|
# Breaks production test
|
77
77
|
# should "merge user" do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tamber
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alexi Robbins
|
@@ -9,104 +9,104 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2020-06-23 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rest-client
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
17
|
requirements:
|
18
|
-
- - ~>
|
18
|
+
- - "~>"
|
19
19
|
- !ruby/object:Gem::Version
|
20
|
-
version: '
|
20
|
+
version: '2.0'
|
21
21
|
type: :runtime
|
22
22
|
prerelease: false
|
23
23
|
version_requirements: !ruby/object:Gem::Requirement
|
24
24
|
requirements:
|
25
|
-
- - ~>
|
25
|
+
- - "~>"
|
26
26
|
- !ruby/object:Gem::Version
|
27
|
-
version: '
|
27
|
+
version: '2.0'
|
28
28
|
- !ruby/object:Gem::Dependency
|
29
29
|
name: json
|
30
30
|
requirement: !ruby/object:Gem::Requirement
|
31
31
|
requirements:
|
32
|
-
- -
|
32
|
+
- - ">="
|
33
33
|
- !ruby/object:Gem::Version
|
34
34
|
version: 1.8.1
|
35
35
|
type: :runtime
|
36
36
|
prerelease: false
|
37
37
|
version_requirements: !ruby/object:Gem::Requirement
|
38
38
|
requirements:
|
39
|
-
- -
|
39
|
+
- - ">="
|
40
40
|
- !ruby/object:Gem::Version
|
41
41
|
version: 1.8.1
|
42
42
|
- !ruby/object:Gem::Dependency
|
43
43
|
name: activesupport
|
44
44
|
requirement: !ruby/object:Gem::Requirement
|
45
45
|
requirements:
|
46
|
-
- -
|
46
|
+
- - ">="
|
47
47
|
- !ruby/object:Gem::Version
|
48
48
|
version: 4.2.4
|
49
49
|
type: :runtime
|
50
50
|
prerelease: false
|
51
51
|
version_requirements: !ruby/object:Gem::Requirement
|
52
52
|
requirements:
|
53
|
-
- -
|
53
|
+
- - ">="
|
54
54
|
- !ruby/object:Gem::Version
|
55
55
|
version: 4.2.4
|
56
56
|
- !ruby/object:Gem::Dependency
|
57
57
|
name: mocha
|
58
58
|
requirement: !ruby/object:Gem::Requirement
|
59
59
|
requirements:
|
60
|
-
- - ~>
|
60
|
+
- - "~>"
|
61
61
|
- !ruby/object:Gem::Version
|
62
62
|
version: 0.13.2
|
63
63
|
type: :development
|
64
64
|
prerelease: false
|
65
65
|
version_requirements: !ruby/object:Gem::Requirement
|
66
66
|
requirements:
|
67
|
-
- - ~>
|
67
|
+
- - "~>"
|
68
68
|
- !ruby/object:Gem::Version
|
69
69
|
version: 0.13.2
|
70
70
|
- !ruby/object:Gem::Dependency
|
71
71
|
name: shoulda
|
72
72
|
requirement: !ruby/object:Gem::Requirement
|
73
73
|
requirements:
|
74
|
-
- - ~>
|
74
|
+
- - "~>"
|
75
75
|
- !ruby/object:Gem::Version
|
76
76
|
version: 3.4.0
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
79
|
version_requirements: !ruby/object:Gem::Requirement
|
80
80
|
requirements:
|
81
|
-
- - ~>
|
81
|
+
- - "~>"
|
82
82
|
- !ruby/object:Gem::Version
|
83
83
|
version: 3.4.0
|
84
84
|
- !ruby/object:Gem::Dependency
|
85
85
|
name: test-unit
|
86
86
|
requirement: !ruby/object:Gem::Requirement
|
87
87
|
requirements:
|
88
|
-
- -
|
88
|
+
- - ">="
|
89
89
|
- !ruby/object:Gem::Version
|
90
90
|
version: '0'
|
91
91
|
type: :development
|
92
92
|
prerelease: false
|
93
93
|
version_requirements: !ruby/object:Gem::Requirement
|
94
94
|
requirements:
|
95
|
-
- -
|
95
|
+
- - ">="
|
96
96
|
- !ruby/object:Gem::Version
|
97
97
|
version: '0'
|
98
98
|
- !ruby/object:Gem::Dependency
|
99
99
|
name: rake
|
100
100
|
requirement: !ruby/object:Gem::Requirement
|
101
101
|
requirements:
|
102
|
-
- -
|
102
|
+
- - ">="
|
103
103
|
- !ruby/object:Gem::Version
|
104
104
|
version: '0'
|
105
105
|
type: :development
|
106
106
|
prerelease: false
|
107
107
|
version_requirements: !ruby/object:Gem::Requirement
|
108
108
|
requirements:
|
109
|
-
- -
|
109
|
+
- - ">="
|
110
110
|
- !ruby/object:Gem::Version
|
111
111
|
version: '0'
|
112
112
|
description: Tamber is the easiest way to put head-scratchingly accurate, real time
|
@@ -118,8 +118,8 @@ executables: []
|
|
118
118
|
extensions: []
|
119
119
|
extra_rdoc_files: []
|
120
120
|
files:
|
121
|
-
- .gitignore
|
122
|
-
- .travis.yml
|
121
|
+
- ".gitignore"
|
122
|
+
- ".travis.yml"
|
123
123
|
- Gemfile
|
124
124
|
- LICENSE
|
125
125
|
- README.md
|
@@ -133,6 +133,7 @@ files:
|
|
133
133
|
- lib/tamber/api_operations/remove.rb
|
134
134
|
- lib/tamber/api_operations/request.rb
|
135
135
|
- lib/tamber/api_operations/retrieve.rb
|
136
|
+
- lib/tamber/api_operations/save.rb
|
136
137
|
- lib/tamber/api_operations/update.rb
|
137
138
|
- lib/tamber/api_resource.rb
|
138
139
|
- lib/tamber/behavior.rb
|
@@ -161,17 +162,17 @@ require_paths:
|
|
161
162
|
- lib
|
162
163
|
required_ruby_version: !ruby/object:Gem::Requirement
|
163
164
|
requirements:
|
164
|
-
- -
|
165
|
+
- - ">="
|
165
166
|
- !ruby/object:Gem::Version
|
166
167
|
version: 1.9.3
|
167
168
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
168
169
|
requirements:
|
169
|
-
- -
|
170
|
+
- - ">="
|
170
171
|
- !ruby/object:Gem::Version
|
171
172
|
version: '0'
|
172
173
|
requirements: []
|
173
174
|
rubyforge_project:
|
174
|
-
rubygems_version: 2.
|
175
|
+
rubygems_version: 2.7.3
|
175
176
|
signing_key:
|
176
177
|
specification_version: 4
|
177
178
|
summary: Ruby bindings for the Tamber API
|