tamber 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ module Tamber
2
+ class User < APIResource
3
+ extend Tamber::APIOperations::Create
4
+ extend Tamber::APIOperations::Update
5
+ extend Tamber::APIOperations::Retrieve
6
+ end
7
+ end
@@ -0,0 +1,90 @@
1
+ require "cgi"
2
+ require "json"
3
+
4
+ module Tamber
5
+ module Util
6
+
7
+ def self.encode_parameters(params)
8
+ Util.flatten_params(params).
9
+ map { |k,v| "#{url_encode(k)}=#{url_encode(v)}" }.join('&')
10
+ end
11
+
12
+ def self.url_encode(key)
13
+ CGI.escape(key.to_s).
14
+ gsub('%5B', '[').gsub('%5D', ']')
15
+ end
16
+
17
+ def self.flatten_params(params, parent_key=nil)
18
+ result = []
19
+
20
+ params.sort_by { |(k, v)| k.to_s }.each do |key, value|
21
+ calculated_key = parent_key ? "#{parent_key}[#{key}]" : "#{key}"
22
+ if value.is_a?(Hash) || value.is_a?(Array) || value.is_a?(APIResource)
23
+ result << [calculated_key, value.to_json]
24
+ else
25
+ result << [calculated_key, value]
26
+ end
27
+ end
28
+
29
+ result
30
+ end
31
+
32
+ def self.object_classes
33
+ @object_classes ||= {
34
+ # Core
35
+ 'event' => Event,
36
+ 'discovery' => Discovery,
37
+
38
+ # Expanded
39
+ 'user' => User,
40
+ 'item' => Item,
41
+ 'behavior' => Behavior,
42
+ 'property' => Property,
43
+ }
44
+ end
45
+
46
+ def self.convert_full(resp)
47
+ case resp
48
+ when Hash
49
+ object_classes.fetch(resp[:object],TamberObject).construct_from(resp)
50
+ when Array
51
+ resp.map { |i| convert_full(i) }
52
+ else
53
+ resp
54
+ end
55
+ end
56
+
57
+ def self.convert_to_tamber_object(resp)
58
+ case resp
59
+ when Hash
60
+ object_classes.fetch(resp[:object],TamberObject).construct_from(resp)
61
+ when Array
62
+ if resp.size == 1
63
+ resp = resp[0]
64
+ self.convert_full(resp)
65
+ else
66
+ resp.map { |i| convert_full(i) }
67
+ end
68
+ else
69
+ resp
70
+ end
71
+ end
72
+
73
+ def self.symbolize_names(object)
74
+ case object
75
+ when Hash
76
+ new_hash = {}
77
+ object.each do |key, value|
78
+ key = (key.to_sym rescue key) || key
79
+ new_hash[key] = symbolize_names(value)
80
+ end
81
+ new_hash
82
+ when Array
83
+ object.map { |value| symbolize_names(value) }
84
+ else
85
+ object
86
+ end
87
+ end
88
+
89
+ end
90
+ end
@@ -0,0 +1,3 @@
1
+ module Tamber
2
+ VERSION = '0.1.0'
3
+ end
@@ -0,0 +1,34 @@
1
+ $:.unshift(File.join(File.dirname(__FILE__), 'lib'))
2
+
3
+ require 'tamber/version'
4
+
5
+ spec = Gem::Specification.new do |s|
6
+ s.name = 'tamber'
7
+ s.version = Tamber::VERSION
8
+ s.required_ruby_version = '>= 1.9.3'
9
+ s.summary = 'Ruby bindings for the Tamber API'
10
+ s.description = 'Tamber is the easiest way to put head-scratchingly accurate, real time recommendations in your app. See https://tamber.com for details.'
11
+ s.homepage = 'https://tamber.com/docs/api'
12
+ s.license = 'MIT'
13
+ s.authors = ['Alexi Robbins', 'Mark Canning']
14
+ s.email = ['alexi@tamber.com', 'argusdusty@tamber.com']
15
+
16
+ s.add_dependency('rest-client', '~> 1.4')
17
+ s.add_dependency('json', '~> 1.8.1')
18
+
19
+ s.add_development_dependency('mocha', '~> 0.13.2')
20
+ s.add_development_dependency('shoulda', '~> 3.4.0')
21
+ s.add_development_dependency('test-unit')
22
+ s.add_development_dependency('rake')
23
+
24
+ if Gem::Version.new(RUBY_VERSION.dup) > Gem::Version.new('2.0.0')
25
+ s.add_development_dependency("byebug")
26
+ s.add_development_dependency("pry")
27
+ s.add_development_dependency("pry-byebug")
28
+ end
29
+
30
+ s.files = `git ls-files`.split("\n")
31
+ s.test_files = `git ls-files -- test/*`.split("\n")
32
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
33
+ s.require_paths = ['lib']
34
+ end
@@ -0,0 +1,40 @@
1
+ require File.expand_path('../test_helper', __FILE__)
2
+
3
+ module Tamber
4
+ class DiscoverTest < Test::Unit::TestCase
5
+ # should "return recommendations" do
6
+ # begin
7
+ # d = Tamber::Discover.recommended(
8
+ # :user => 'user_jctzgisbru'
9
+ # )
10
+ # d.each { |rec| puts "item: #{rec.item}, score: #{rec.score}"}
11
+ # rescue TamberError => error
12
+ # puts error.message
13
+ # end
14
+ # end
15
+
16
+ # should "return similar" do
17
+ # begin
18
+ # d = Tamber::Discover.similar(
19
+ # :item => 'item_i5gq90scc1'
20
+ # )
21
+ # puts d
22
+ # rescue TamberError => error
23
+ # puts error.message
24
+ # end
25
+ # end
26
+
27
+ # should "return recommendedSimilar" do
28
+ # begin
29
+ # d = Tamber::Discover.recommendedSimilar(
30
+ # :user => 'user_jctzgisbru',
31
+ # :item => 'item_i5gq90scc1'
32
+ # )
33
+ # puts d
34
+ # rescue TamberError => error
35
+ # puts error.message
36
+ # end
37
+ # end
38
+
39
+ end
40
+ end
@@ -0,0 +1,53 @@
1
+ require File.expand_path('../test_helper', __FILE__)
2
+
3
+ module Tamber
4
+ class EventTest < Test::Unit::TestCase
5
+ # should "be trackable" do
6
+ # begin
7
+ # e = Tamber::Event.track(
8
+ # :user => 'user_jctzgisbru',
9
+ # :item => 'item_i5gq90scc1',
10
+ # :behavior => 'mention',
11
+ # :getRecs => {}
12
+ # )
13
+ # e.recommended.each { |rec| puts "item: #{rec.item}, score: #{rec.score}"}
14
+ # rescue TamberError => error
15
+ # puts error.message
16
+ # end
17
+ # end
18
+
19
+ should "be retrievable" do
20
+ begin
21
+ e = Tamber::Event.retrieve(
22
+ :user => 'user_jctzgisbru',
23
+ )
24
+ puts e
25
+ rescue TamberError => error
26
+ puts error.message
27
+ end
28
+ end
29
+
30
+ # should "be batchable" do
31
+ # begin
32
+ # e = Tamber::Event.batch(
33
+ # :events => [
34
+ # {
35
+ # :user => 'user_y7u9sv6we0',
36
+ # :item => 'item_u9nlytt3w5',
37
+ # :behavior => 'like'
38
+ # },
39
+ # {
40
+ # :user => 'user_y7u9sv6we0',
41
+ # :item => 'item_i5gq90scc1',
42
+ # :behavior => 'like'
43
+ # }
44
+ # ]
45
+ # )
46
+ # puts e
47
+ # rescue TamberError => error
48
+ # puts error.message
49
+ # end
50
+ # end
51
+
52
+ end
53
+ end
@@ -0,0 +1,17 @@
1
+ require 'tamber'
2
+ require 'test/unit'
3
+ require 'mocha/setup'
4
+ require 'stringio'
5
+ require 'shoulda'
6
+
7
+ class Test::Unit::TestCase
8
+ include Mocha
9
+
10
+ setup do
11
+ Tamber.api_key = "IVRiX25dr5rsJ0TDdVOD"
12
+ end
13
+
14
+ teardown do
15
+ Tamber.api_key = nil
16
+ end
17
+ end
@@ -0,0 +1,64 @@
1
+ require File.expand_path('../test_helper', __FILE__)
2
+
3
+ module Tamber
4
+ class UserTest < Test::Unit::TestCase
5
+
6
+ # should "create user" do
7
+ # begin
8
+ # u = Tamber::User.create(
9
+ # :id => 'user_rubytestA',
10
+ # :events => [
11
+ # {
12
+ # :item => 'item_u9nlytt3w5',
13
+ # :behavior => 'like'
14
+ # },
15
+ # {
16
+ # :item => 'item_i5gq90scc1',
17
+ # :behavior => 'like'
18
+ # }
19
+ # ]
20
+ # )
21
+ # puts u
22
+ # rescue TamberError => error
23
+ # puts error.message
24
+ # end
25
+ # end
26
+
27
+ # should "users should be able to be updated" do
28
+ # begin
29
+ # id = 'user_rubytestA'
30
+ # metadata = {
31
+ # 'name' => 'Rob Pike',
32
+ # 'city' => 'Mountain View, CA'
33
+ # }
34
+ # u = Tamber::User.update(
35
+ # :id => id,
36
+ # :metadata => metadata
37
+ # )
38
+ # assert u.id == id
39
+ # rescue TamberError => error
40
+ # puts error.message
41
+ # end
42
+ # end
43
+
44
+
45
+ should "retrieve user" do
46
+ begin
47
+ id = 'user_rubytestA'
48
+ u = Tamber::User.retrieve(
49
+ :id => id,
50
+ :getRecs => {
51
+ :number => 10
52
+ }
53
+ )
54
+ puts u.inspect
55
+ puts u.metadata
56
+ puts u.metadata[:name]
57
+ assert u.id == id
58
+ rescue TamberError => error
59
+ puts error.message
60
+ end
61
+ end
62
+
63
+ end
64
+ end
metadata ADDED
@@ -0,0 +1,165 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: tamber
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Alexi Robbins
8
+ - Mark Canning
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2016-02-10 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rest-client
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - "~>"
19
+ - !ruby/object:Gem::Version
20
+ version: '1.4'
21
+ type: :runtime
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - "~>"
26
+ - !ruby/object:Gem::Version
27
+ version: '1.4'
28
+ - !ruby/object:Gem::Dependency
29
+ name: json
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - "~>"
33
+ - !ruby/object:Gem::Version
34
+ version: 1.8.1
35
+ type: :runtime
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - "~>"
40
+ - !ruby/object:Gem::Version
41
+ version: 1.8.1
42
+ - !ruby/object:Gem::Dependency
43
+ name: mocha
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - "~>"
47
+ - !ruby/object:Gem::Version
48
+ version: 0.13.2
49
+ type: :development
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - "~>"
54
+ - !ruby/object:Gem::Version
55
+ version: 0.13.2
56
+ - !ruby/object:Gem::Dependency
57
+ name: shoulda
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - "~>"
61
+ - !ruby/object:Gem::Version
62
+ version: 3.4.0
63
+ type: :development
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - "~>"
68
+ - !ruby/object:Gem::Version
69
+ version: 3.4.0
70
+ - !ruby/object:Gem::Dependency
71
+ name: test-unit
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - ">="
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ version: '0'
84
+ - !ruby/object:Gem::Dependency
85
+ name: rake
86
+ requirement: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - ">="
89
+ - !ruby/object:Gem::Version
90
+ version: '0'
91
+ type: :development
92
+ prerelease: false
93
+ version_requirements: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - ">="
96
+ - !ruby/object:Gem::Version
97
+ version: '0'
98
+ description: Tamber is the easiest way to put head-scratchingly accurate, real time
99
+ recommendations in your app. See https://tamber.com for details.
100
+ email:
101
+ - alexi@tamber.com
102
+ - argusdusty@tamber.com
103
+ executables: []
104
+ extensions: []
105
+ extra_rdoc_files: []
106
+ files:
107
+ - ".gitignore"
108
+ - ".travis.yml"
109
+ - Gemfile
110
+ - LICENSE
111
+ - README.rdoc
112
+ - Rakefile
113
+ - VERSION
114
+ - lib/security/ca-bundle.crt
115
+ - lib/tamber.rb
116
+ - lib/tamber/api_operations/create.rb
117
+ - lib/tamber/api_operations/remove.rb
118
+ - lib/tamber/api_operations/request.rb
119
+ - lib/tamber/api_operations/retrieve.rb
120
+ - lib/tamber/api_operations/update.rb
121
+ - lib/tamber/api_resource.rb
122
+ - lib/tamber/behavior.rb
123
+ - lib/tamber/discover.rb
124
+ - lib/tamber/event.rb
125
+ - lib/tamber/item.rb
126
+ - lib/tamber/property.rb
127
+ - lib/tamber/tamber_error.rb
128
+ - lib/tamber/tamber_object.rb
129
+ - lib/tamber/user.rb
130
+ - lib/tamber/util.rb
131
+ - lib/tamber/version.rb
132
+ - tamber.gemspec
133
+ - test/discover_test.rb
134
+ - test/event_test.rb
135
+ - test/test_helper.rb
136
+ - test/user_test.rb
137
+ homepage: https://tamber.com/docs/api
138
+ licenses:
139
+ - MIT
140
+ metadata: {}
141
+ post_install_message:
142
+ rdoc_options: []
143
+ require_paths:
144
+ - lib
145
+ required_ruby_version: !ruby/object:Gem::Requirement
146
+ requirements:
147
+ - - ">="
148
+ - !ruby/object:Gem::Version
149
+ version: 1.9.3
150
+ required_rubygems_version: !ruby/object:Gem::Requirement
151
+ requirements:
152
+ - - ">="
153
+ - !ruby/object:Gem::Version
154
+ version: '0'
155
+ requirements: []
156
+ rubyforge_project:
157
+ rubygems_version: 2.4.8
158
+ signing_key:
159
+ specification_version: 4
160
+ summary: Ruby bindings for the Tamber API
161
+ test_files:
162
+ - test/discover_test.rb
163
+ - test/event_test.rb
164
+ - test/test_helper.rb
165
+ - test/user_test.rb