amplitude-api 0.0.4 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a052a8eba1f08e0c286851d27a6bf2ce7e93cabe
4
- data.tar.gz: 420237d4d92990243c11fce24998ba314178258d
3
+ metadata.gz: 9fa498ab2765d7b0e14d78aacd3caf34d212abde
4
+ data.tar.gz: c2cf793047298e2d0679c2ec748eae6d9ae46727
5
5
  SHA512:
6
- metadata.gz: 19691aa9910e89f15bab32bf9ea73a3f051a8a50d6340cee1ab7e6e0d6fef1874c7cc23f80fb838773b32b6072479b9843813655875ed77d9fb2c0d2198a72cb
7
- data.tar.gz: 36882567908c18fba0cd0b1a2f4a60b389bf84a7c2c9610b89bd7622674e79437687f7c52f25bd3841659412a0e761b794e5deaddc9e2ddb22f27025e8f66d95
6
+ metadata.gz: b73383081f15f0bca95841663f0d58b9bcf863c5a183b18b52400a3148d406721ba21dd8fc6ffaf3ff1debfffe86475d25eee9b623766ac31052579526536416
7
+ data.tar.gz: 9bada553602d018841b12bbd6836f338971359316d3852fe4147e08f4b9d8f35918f221e8bfa59cedc877c673b76714c43c9dd3b98ffa9cf9adc82d60ab9fd76
data/.gitignore CHANGED
@@ -33,3 +33,5 @@ build/
33
33
 
34
34
  # unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
35
35
  .rvmrc
36
+
37
+ .idea
data/.rubocop.yml ADDED
@@ -0,0 +1,2 @@
1
+ Metrics/LineLength:
2
+ Max: 120
data/Gemfile CHANGED
@@ -1,9 +1,11 @@
1
1
  # Generated from /Users/alex/development/amplitude-api/amplitude-api.gemspec
2
2
  source 'https://rubygems.org'
3
- gem "typhoeus", "~> 0.7.1"
4
3
 
5
- group :development do
6
- gem "rspec", ">= 2.99.0"
7
- gem "rake", ">= 10.0"
8
- gem "pry", "~> 0.9.12.6"
4
+ gem 'typhoeus', '~> 0.7.1'
5
+
6
+ group :development, :test do
7
+ gem 'pry', '~> 0.9.12.6'
8
+ gem 'rake', '>= 10.0'
9
+ gem 'rspec', '>= 2.99.0'
10
+ gem 'rubocop', '~> 0.37.2', require: false
9
11
  end
data/Gemfile.lock CHANGED
@@ -1,16 +1,21 @@
1
1
  GEM
2
2
  remote: https://rubygems.org/
3
3
  specs:
4
+ ast (2.2.0)
4
5
  coderay (1.1.0)
5
6
  diff-lcs (1.2.5)
6
7
  ethon (0.7.3)
7
8
  ffi (>= 1.3.0)
8
9
  ffi (1.9.8)
9
10
  method_source (0.8.2)
11
+ parser (2.3.0.6)
12
+ ast (~> 2.2)
13
+ powerpack (0.1.1)
10
14
  pry (0.9.12.6)
11
15
  coderay (~> 1.0)
12
16
  method_source (~> 0.8)
13
17
  slop (~> 3.4)
18
+ rainbow (2.1.0)
14
19
  rake (10.4.2)
15
20
  rspec (2.99.0)
16
21
  rspec-core (~> 2.99.0)
@@ -20,9 +25,17 @@ GEM
20
25
  rspec-expectations (2.99.2)
21
26
  diff-lcs (>= 1.1.3, < 2.0)
22
27
  rspec-mocks (2.99.3)
28
+ rubocop (0.37.2)
29
+ parser (>= 2.3.0.4, < 3.0)
30
+ powerpack (~> 0.1)
31
+ rainbow (>= 1.99.1, < 3.0)
32
+ ruby-progressbar (~> 1.7)
33
+ unicode-display_width (~> 0.3)
34
+ ruby-progressbar (1.7.5)
23
35
  slop (3.5.0)
24
36
  typhoeus (0.7.1)
25
37
  ethon (>= 0.7.1)
38
+ unicode-display_width (0.3.1)
26
39
 
27
40
  PLATFORMS
28
41
  ruby
@@ -31,4 +44,8 @@ DEPENDENCIES
31
44
  pry (~> 0.9.12.6)
32
45
  rake (>= 10.0)
33
46
  rspec (>= 2.99.0)
47
+ rubocop (~> 0.37.2)
34
48
  typhoeus (~> 0.7.1)
49
+
50
+ BUNDLED WITH
51
+ 1.10.6
data/Rakefile CHANGED
@@ -1,10 +1,14 @@
1
- require "bundler/gem_tasks"
1
+ require 'bundler/gem_tasks'
2
+ require 'rubocop/rake_task'
3
+
4
+ RuboCop::RakeTask.new
2
5
 
3
6
  begin
4
7
  require 'rspec/core/rake_task'
5
8
  RSpec::Core::RakeTask.new(:spec)
6
9
  rescue LoadError
10
+ puts 'Unable to load rspec. Have you run `bundle install`?'
7
11
  end
8
12
 
9
13
  task(:default).clear
10
- task :default => :spec
14
+ task default: ['rubocop:auto_correct', :spec]
@@ -1,26 +1,26 @@
1
1
  # coding: utf-8
2
2
  lib = File.expand_path('../lib', __FILE__)
3
3
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require 'amplitude-api/version'
4
+ require 'amplitude_api/version'
5
5
 
6
6
  Gem::Specification.new do |spec|
7
- spec.name = "amplitude-api"
7
+ spec.name = 'amplitude-api'
8
8
  spec.version = AmplitudeAPI::VERSION
9
- spec.authors = ["Alex Rakoczy"]
10
- spec.email = ["arakoczy@gmail.com"]
11
- spec.summary = %q{Send events to the Amplitude API}
12
- spec.description = %q{Provides an integration for sending events to Amplitude}
13
- spec.homepage = "https://github.com/toothrot/amplitude-api"
14
- spec.license = "MIT"
9
+ spec.authors = ['Alex Rakoczy']
10
+ spec.email = ['arakoczy@gmail.com']
11
+ spec.summary = 'Send events to the Amplitude API'
12
+ spec.description = 'Provides an integration for sending events to Amplitude'
13
+ spec.homepage = 'https://github.com/toothrot/amplitude-api'
14
+ spec.license = 'MIT'
15
15
 
16
16
  spec.files = `git ls-files -z`.split("\x0")
17
17
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
- spec.require_paths = ["lib"]
19
+ spec.require_paths = ['lib']
20
20
 
21
- spec.add_development_dependency "rspec", "~> 2.99", '>= 2.99.0'
22
- spec.add_development_dependency "rake", "~> 10.0", '>= 10.0'
23
- spec.add_development_dependency "pry", "~> 0.9.12.6"
24
- spec.add_dependency "typhoeus", "~> 0.7.1"
21
+ spec.add_development_dependency 'rspec', '~> 2.99', '>= 2.99.0'
22
+ spec.add_development_dependency 'rake', '~> 10.0', '>= 10.0'
23
+ spec.add_development_dependency 'pry', '~> 0.9.12.6'
24
+ spec.add_dependency 'typhoeus', '~> 0.7.1'
25
25
  spec.required_ruby_version = '~> 2.0'
26
26
  end
data/lib/amplitude-api.rb CHANGED
@@ -1,109 +1,4 @@
1
- require 'json'
2
- require 'bundler/setup'
3
- require 'typhoeus'
4
- require 'amplitude-api/event'
5
- require 'amplitude-api/identification'
6
-
7
- class AmplitudeAPI
8
- TRACK_URI_STRING = "https://api.amplitude.com/httpapi"
9
- IDENTIFY_URI_STRING = "https://api.amplitude.com/identify"
10
-
11
- USER_WITH_NO_ACCOUNT = "user who doesn't have an account"
12
-
13
- class << self
14
- # @!attribute [ rw ] api_key
15
- # @return [ String ] an Amplitude API Key
16
- attr_accessor :api_key
17
-
18
- # ==== Event Tracking related methods
19
-
20
- # Send a single event immediately to the AmplitudeAPI
21
- #
22
- # @param [ String ] event_name a string that describes the event, e.g. "clicked on Home"
23
- # @param [ String ] user a string or integer that uniquely identifies a user.
24
- # @param [ Hash ] properties a hash that is serialized to JSON, and can contain any other property to be stored on the Event
25
- #
26
- # @return [ Typhoeus::Response ]
27
- def send_event(event_name, user, properties = {})
28
- event = AmplitudeAPI::Event.new(user_id: user, event_type: event_name, event_properties: properties)
29
- track(event)
30
- end
31
-
32
-
33
- # @overload track_body(event)
34
- # @param [ AmplitudeAPI::Event ]
35
- #
36
- # @overload track_body([events])
37
- # @param [ Array<AmplitudeAPI::Event> ]
38
- #
39
- # @return [ Hash ]
40
- #
41
- # Converts a series of AmplitudeAPI::Event objects into a body
42
- # suitable for the Amplitude API
43
- def track_body(*events)
44
- event_body = events.flatten.map do |event|
45
- event.to_hash
46
- end
47
-
48
- {
49
- api_key: self.api_key,
50
- event: JSON.generate(event_body)
51
- }
52
- end
53
-
54
-
55
- # @overload track(event)
56
- # @param [ AmplitudeAPI::Event ] Send a single event to the Amplitude API
57
- #
58
- # @overload track([events])
59
- # @param [ Array<AmplitudeAPI::Event> ] Send an array of events in a single request to Amplitude
60
- #
61
- # @return [ Typhoeus::Response ]
62
- #
63
- # Send one or more Events to the Amplitude API
64
- def track(*events)
65
- Typhoeus.post(TRACK_URI_STRING, body: track_body(events))
66
- end
67
-
68
- # ==== Identification related methods
69
-
70
- def send_identify(user_id, user_properties = {})
71
- identification = AmplitudeAPI::Identification.new(user_id: user_id, user_properties: user_properties)
72
- identify(identification)
73
- end
74
-
75
- # @overload identify_body(identification)
76
- # @param [ AmplitudeAPI::Identification ]
77
- #
78
- # @overload identify_body([identifications])
79
- # @param [ Array<AmplitudeAPI::Identification> ]
80
- #
81
- # @return [ Hash ]
82
- #
83
- # Converts a series of AmplitudeAPI::Identification objects into a body
84
- # suitable for the Amplitude Identify API
85
- def identify_body(*identifications)
86
- identification_body = identifications.flatten.map do |identification|
87
- identification.to_hash
88
- end
89
-
90
- {
91
- api_key: self.api_key,
92
- identification: JSON.generate(identification_body)
93
- }
94
- end
95
-
96
- # @overload identify(identification)
97
- # @param [ AmplitudeAPI::Identify ] Send a single identify to the Amplitude API
98
- #
99
- # @overload identify([identifications])
100
- # @param [ Array<AmplitudeAPI::Identify> ] Send an array of identifications in a single request to Amplitude
101
- #
102
- # @return [ Typhoeus::Response ]
103
- #
104
- # Send one or more Identifications to the Amplitude Identify API
105
- def identify(*identifications)
106
- Typhoeus.post(IDENTIFY_URI_STRING, body: identify_body(identifications))
107
- end
108
- end
109
- end
1
+ # rubocop:disable Style/FileName
2
+ require_relative 'amplitude_api'
3
+ # rubocop:enable Style/FileName
4
+ # Whoops.
@@ -0,0 +1,109 @@
1
+ require 'json'
2
+ require 'bundler/setup'
3
+ require 'typhoeus'
4
+ require_relative 'amplitude_api/event'
5
+ require_relative 'amplitude_api/identification'
6
+
7
+ # AmplitudeAPI
8
+ class AmplitudeAPI
9
+ TRACK_URI_STRING = 'https://api.amplitude.com/httpapi'.freeze
10
+ IDENTIFY_URI_STRING = 'https://api.amplitude.com/identify'.freeze
11
+
12
+ USER_WITH_NO_ACCOUNT = "user who doesn't have an account".freeze
13
+
14
+ class << self
15
+ # @!attribute [ rw ] api_key
16
+ # @return [ String ] an Amplitude API Key
17
+ attr_accessor :api_key
18
+
19
+ # ==== Event Tracking related methods
20
+
21
+ # Send a single event immediately to the AmplitudeAPI
22
+ #
23
+ # @param [ String ] event_name a string that describes the event, e.g. "clicked on Home"
24
+ # @param [ String ] user a string or integer that uniquely identifies a user.
25
+ # @param [ Hash ] properties a hash that is serialized to JSON,
26
+ # and can contain any other property to be stored on the Event
27
+ #
28
+ # @return [ Typhoeus::Response ]
29
+ def send_event(event_name, user, properties = {})
30
+ event = AmplitudeAPI::Event.new(
31
+ user_id: user,
32
+ event_type: event_name,
33
+ event_properties: properties
34
+ )
35
+ track(event)
36
+ end
37
+
38
+ # @overload track_body(event)
39
+ # @param [ AmplitudeAPI::Event ]
40
+ #
41
+ # @overload track_body([events])
42
+ # @param [ Array<AmplitudeAPI::Event> ]
43
+ #
44
+ # @return [ Hash ]
45
+ #
46
+ # Converts a series of AmplitudeAPI::Event objects into a body
47
+ # suitable for the Amplitude API
48
+ def track_body(*events)
49
+ event_body = events.flatten.map(&:to_hash)
50
+
51
+ {
52
+ api_key: api_key,
53
+ event: JSON.generate(event_body)
54
+ }
55
+ end
56
+
57
+ # @overload track(event)
58
+ # @param [ AmplitudeAPI::Event ] Send a single event to the Amplitude API
59
+ #
60
+ # @overload track([events])
61
+ # @param [ Array<AmplitudeAPI::Event> ] Send an array of events in a single request to Amplitude
62
+ #
63
+ # @return [ Typhoeus::Response ]
64
+ #
65
+ # Send one or more Events to the Amplitude API
66
+ def track(*events)
67
+ Typhoeus.post(TRACK_URI_STRING, body: track_body(events))
68
+ end
69
+
70
+ # ==== Identification related methods
71
+
72
+ def send_identify(user_id, user_properties = {})
73
+ identification = AmplitudeAPI::Identification.new(user_id: user_id, user_properties: user_properties)
74
+ identify(identification)
75
+ end
76
+
77
+ # @overload identify_body(identification)
78
+ # @param [ AmplitudeAPI::Identification ]
79
+ #
80
+ # @overload identify_body([identifications])
81
+ # @param [ Array<AmplitudeAPI::Identification> ]
82
+ #
83
+ # @return [ Hash ]
84
+ #
85
+ # Converts a series of AmplitudeAPI::Identification objects into a body
86
+ # suitable for the Amplitude Identify API
87
+ def identify_body(*identifications)
88
+ identification_body = identifications.flatten.map(&:to_hash)
89
+
90
+ {
91
+ api_key: api_key,
92
+ identification: JSON.generate(identification_body)
93
+ }
94
+ end
95
+
96
+ # @overload identify(identification)
97
+ # @param [ AmplitudeAPI::Identify ] Send a single identify to the Amplitude API
98
+ #
99
+ # @overload identify([identifications])
100
+ # @param [ Array<AmplitudeAPI::Identify> ] Send an array of identifications in a single request to Amplitude
101
+ #
102
+ # @return [ Typhoeus::Response ]
103
+ #
104
+ # Send one or more Identifications to the Amplitude Identify API
105
+ def identify(*identifications)
106
+ Typhoeus.post(IDENTIFY_URI_STRING, body: identify_body(identifications))
107
+ end
108
+ end
109
+ end
@@ -1,4 +1,5 @@
1
1
  class AmplitudeAPI
2
+ # AmplitudeAPI::Event
2
3
  class Event
3
4
  # @!attribute [ rw ] user_id
4
5
  # @return [ String ] the user_id to be sent to Amplitude
@@ -9,16 +10,21 @@ class AmplitudeAPI
9
10
  # @!attribute [ rw ] event_properties
10
11
  # @return [ String ] the event_properties to be attached to the Amplitude Event
11
12
  attr_accessor :event_properties
13
+ # @!attribute [ rw ] time
14
+ # @return [ Time ] Time that the event occurred (defaults to now)
15
+ attr_accessor :time
12
16
 
13
17
  # Create a new Event
14
18
  #
15
19
  # @param [ String ] user_id a user_id to associate with the event
16
20
  # @param [ String ] event_type a name for the event
17
21
  # @param [ Hash ] event_properties various properties to attach to the event
18
- def initialize(user_id: "" , event_type: "", event_properties: {})
22
+ # @param [ Time ] Time that the event occurred (defaults to now)
23
+ def initialize(user_id: '', event_type: '', event_properties: {}, time: nil)
19
24
  self.user_id = user_id
20
25
  self.event_type = event_type
21
26
  self.event_properties = event_properties
27
+ self.time = time
22
28
  end
23
29
 
24
30
  def user_id=(value)
@@ -34,11 +40,12 @@ class AmplitudeAPI
34
40
  #
35
41
  # Used for serialization and comparison
36
42
  def to_hash
37
- {
38
- event_type: self.event_type,
39
- user_id: self.user_id,
40
- event_properties: self.event_properties
41
- }
43
+ serialized_event = {}
44
+ serialized_event[:event_type] = event_type
45
+ serialized_event[:user_id] = user_id
46
+ serialized_event[:event_properties] = event_properties
47
+ serialized_event[:time] = formatted_time if time
48
+ serialized_event
42
49
  end
43
50
 
44
51
  # @return [ true, false ]
@@ -46,10 +53,16 @@ class AmplitudeAPI
46
53
  # Compares +to_hash+ for equality
47
54
  def ==(other)
48
55
  if other.respond_to?(:to_hash)
49
- self.to_hash == other.to_hash
56
+ to_hash == other.to_hash
50
57
  else
51
58
  false
52
59
  end
53
60
  end
61
+
62
+ private
63
+
64
+ def formatted_time
65
+ time.to_i * 1_000
66
+ end
54
67
  end
55
68
  end
@@ -1,4 +1,5 @@
1
1
  class AmplitudeAPI
2
+ # AmplitudeAPI::Identification
2
3
  class Identification
3
4
  # @!attribute [ rw ] user_id
4
5
  # @return [ String ] the user_id to be sent to Amplitude
@@ -11,7 +12,7 @@ class AmplitudeAPI
11
12
  #
12
13
  # @param [ String ] user_id a user_id to associate with the identification
13
14
  # @param [ Hash ] user_properties various properties to attach to the user identification
14
- def initialize(user_id: "", user_properties: {})
15
+ def initialize(user_id: '', user_properties: {})
15
16
  self.user_id = user_id
16
17
  self.user_properties = user_properties
17
18
  end
@@ -30,8 +31,8 @@ class AmplitudeAPI
30
31
  # Used for serialization and comparison
31
32
  def to_hash
32
33
  {
33
- user_id: self.user_id,
34
- user_properties: self.user_properties
34
+ user_id: user_id,
35
+ user_properties: user_properties
35
36
  }
36
37
  end
37
38
 
@@ -40,7 +41,7 @@ class AmplitudeAPI
40
41
  # Compares +to_hash+ for equality
41
42
  def ==(other)
42
43
  if other.respond_to?(:to_hash)
43
- self.to_hash == other.to_hash
44
+ to_hash == other.to_hash
44
45
  else
45
46
  false
46
47
  end
@@ -0,0 +1,3 @@
1
+ class AmplitudeAPI
2
+ VERSION = '0.0.5'.freeze
3
+ end
data/readme.md CHANGED
@@ -18,7 +18,7 @@ AmplitudeAPI.api_key = "abcdef123456"
18
18
 
19
19
  event = AmplitudeAPI::Event.new({
20
20
  user_id: "123",
21
- event_type: "clicked on Home",
21
+ event_type: "clicked on home",
22
22
  event_properties: {
23
23
  cause: "button",
24
24
  arbitrary: "properties"
@@ -3,42 +3,76 @@ require 'spec_helper'
3
3
  describe AmplitudeAPI::Event do
4
4
  User = Struct.new(:id)
5
5
 
6
- context "with a user object" do
7
- describe "#body" do
6
+ context 'with a user object' do
7
+ describe '#body' do
8
8
  it "populates with the user's id" do
9
- event = AmplitudeAPI::Event.new(user_id: User.new(123), event_type: 'clicked on home')
9
+ event = AmplitudeAPI::Event.new(
10
+ user_id: User.new(123),
11
+ event_type: 'clicked on home'
12
+ )
10
13
  expect(event.to_hash[:user_id]).to eq(123)
11
14
  end
12
15
  end
13
16
  end
14
17
 
15
- context "with a user id" do
16
- describe "#body" do
18
+ context 'with a user id' do
19
+ describe '#body' do
17
20
  it "populates with the user's id" do
18
- event = AmplitudeAPI::Event.new(user_id: 123, event_type: 'clicked on home')
21
+ event = AmplitudeAPI::Event.new(
22
+ user_id: 123,
23
+ event_type: 'clicked on home'
24
+ )
19
25
  expect(event.to_hash[:user_id]).to eq(123)
20
26
  end
21
27
  end
22
28
  end
23
29
 
24
- context "without a user" do
25
- describe "#body" do
26
- it "populates with the unknown user" do
27
- event = AmplitudeAPI::Event.new(user_id: nil, event_type: 'clicked on home')
30
+ context 'without a user' do
31
+ describe '#body' do
32
+ it 'populates with the unknown user' do
33
+ event = AmplitudeAPI::Event.new(
34
+ user_id: nil,
35
+ event_type: 'clicked on home'
36
+ )
28
37
  expect(event.to_hash[:user_id]).to eq(AmplitudeAPI::USER_WITH_NO_ACCOUNT)
29
38
  end
30
39
  end
31
40
  end
32
41
 
33
42
  describe '#body' do
34
- it "includes the event type" do
35
- event = AmplitudeAPI::Event.new(user_id: 123, event_type: 'clicked on home')
43
+ it 'includes the event type' do
44
+ event = AmplitudeAPI::Event.new(
45
+ user_id: 123,
46
+ event_type: 'clicked on home'
47
+ )
36
48
  expect(event.to_hash[:event_type]).to eq('clicked on home')
37
49
  end
38
50
 
39
- it "includes arbitrary properties" do
40
- event = AmplitudeAPI::Event.new(user_id: 123, event_type: 'clicked on home', event_properties: {abc: :def})
51
+ it 'includes arbitrary properties' do
52
+ event = AmplitudeAPI::Event.new(
53
+ user_id: 123,
54
+ event_type: 'clicked on home',
55
+ event_properties: { abc: :def }
56
+ )
41
57
  expect(event.to_hash[:event_properties]).to eq(abc: :def)
42
58
  end
59
+
60
+ it 'includes a time for the event' do
61
+ time = Time.parse('2016-01-01 00:00:00 -0000')
62
+ event = AmplitudeAPI::Event.new(
63
+ user_id: 123,
64
+ event_type: 'clicked on home',
65
+ time: time
66
+ )
67
+ expect(event.to_hash[:time]).to eq(1_451_606_400_000)
68
+ end
69
+
70
+ it 'does not include time if it is not set' do
71
+ event = AmplitudeAPI::Event.new(
72
+ user_id: 123,
73
+ event_type: 'clicked on home'
74
+ )
75
+ expect(event.to_hash).not_to have_key(:time)
76
+ end
43
77
  end
44
78
  end
@@ -3,8 +3,8 @@ require 'spec_helper'
3
3
  describe AmplitudeAPI::Identification do
4
4
  User = Struct.new(:id)
5
5
 
6
- context "with a user object" do
7
- describe "#body" do
6
+ context 'with a user object' do
7
+ describe '#body' do
8
8
  it "populates with the user's id" do
9
9
  identification = AmplitudeAPI::Identification.new(user_id: User.new(123))
10
10
  expect(identification.to_hash[:user_id]).to eq(123)
@@ -12,8 +12,8 @@ describe AmplitudeAPI::Identification do
12
12
  end
13
13
  end
14
14
 
15
- context "with a user id" do
16
- describe "#body" do
15
+ context 'with a user id' do
16
+ describe '#body' do
17
17
  it "populates with the user's id" do
18
18
  identification = AmplitudeAPI::Identification.new(user_id: 123)
19
19
  expect(identification.to_hash[:user_id]).to eq(123)
@@ -21,9 +21,9 @@ describe AmplitudeAPI::Identification do
21
21
  end
22
22
  end
23
23
 
24
- context "without a user" do
25
- describe "#body" do
26
- it "populates with the unknown user" do
24
+ context 'without a user' do
25
+ describe '#body' do
26
+ it 'populates with the unknown user' do
27
27
  identification = AmplitudeAPI::Identification.new(user_id: nil)
28
28
  expect(identification.to_hash[:user_id]).to eq(AmplitudeAPI::USER_WITH_NO_ACCOUNT)
29
29
  end
@@ -31,13 +31,19 @@ describe AmplitudeAPI::Identification do
31
31
  end
32
32
 
33
33
  describe '#body' do
34
- it "includes the user id" do
34
+ it 'includes the user id' do
35
35
  identification = AmplitudeAPI::Identification.new(user_id: 123)
36
36
  expect(identification.to_hash[:user_id]).to eq(123)
37
37
  end
38
38
 
39
- it "includes arbitrary user properties" do
40
- identification = AmplitudeAPI::Identification.new(user_id: 123, user_properties: {first_name: 'John', last_name: 'Doe'})
39
+ it 'includes arbitrary user properties' do
40
+ identification = AmplitudeAPI::Identification.new(
41
+ user_id: 123,
42
+ user_properties: {
43
+ first_name: 'John',
44
+ last_name: 'Doe'
45
+ }
46
+ )
41
47
  expect(identification.to_hash[:user_properties]).to eq(first_name: 'John', last_name: 'Doe')
42
48
  end
43
49
  end
@@ -5,11 +5,17 @@ describe AmplitudeAPI do
5
5
  @user = Struct.new(:id).new(123)
6
6
  end
7
7
 
8
- describe ".track" do
9
- context "with a single event" do
10
- it "sends the event to Amplitude" do
11
- event = AmplitudeAPI::Event.new(user_id: 123, event_type: 'clicked on sign up')
12
- body = {api_key: AmplitudeAPI.api_key, event: JSON.generate([event.to_hash])}
8
+ describe '.track' do
9
+ context 'with a single event' do
10
+ it 'sends the event to Amplitude' do
11
+ event = AmplitudeAPI::Event.new(
12
+ user_id: 123,
13
+ event_type: 'clicked on sign up'
14
+ )
15
+ body = {
16
+ api_key: AmplitudeAPI.api_key,
17
+ event: JSON.generate([event.to_hash])
18
+ }
13
19
 
14
20
  expect(Typhoeus).to receive(:post).with(AmplitudeAPI::TRACK_URI_STRING, body: body)
15
21
 
@@ -17,11 +23,20 @@ describe AmplitudeAPI do
17
23
  end
18
24
  end
19
25
 
20
- context "with multiple events" do
21
- it "sends all events in a single request" do
22
- event = AmplitudeAPI::Event.new(user_id: 123, event_type: 'clicked on sign up')
23
- event2 = AmplitudeAPI::Event.new(user_id: 456, event_type: 'liked a widget')
24
- body = {api_key: AmplitudeAPI.api_key, event: JSON.generate([event.to_hash, event2.to_hash])}
26
+ context 'with multiple events' do
27
+ it 'sends all events in a single request' do
28
+ event = AmplitudeAPI::Event.new(
29
+ user_id: 123,
30
+ event_type: 'clicked on sign up'
31
+ )
32
+ event2 = AmplitudeAPI::Event.new(
33
+ user_id: 456,
34
+ event_type: 'liked a widget'
35
+ )
36
+ body = {
37
+ api_key: AmplitudeAPI.api_key,
38
+ event: JSON.generate([event.to_hash, event2.to_hash])
39
+ }
25
40
 
26
41
  expect(Typhoeus).to receive(:post).with(AmplitudeAPI::TRACK_URI_STRING, body: body)
27
42
 
@@ -30,11 +45,20 @@ describe AmplitudeAPI do
30
45
  end
31
46
  end
32
47
 
33
- describe ".identify" do
34
- context "with a single identification" do
35
- it "sends the identification to Amplitude" do
36
- identification = AmplitudeAPI::Identification.new(user_id: 123, user_properties: {first_name: 'John', last_name: 'Doe'})
37
- body = {api_key: AmplitudeAPI.api_key, identification: JSON.generate([identification.to_hash])}
48
+ describe '.identify' do
49
+ context 'with a single identification' do
50
+ it 'sends the identification to Amplitude' do
51
+ identification = AmplitudeAPI::Identification.new(
52
+ user_id: 123,
53
+ user_properties: {
54
+ first_name: 'John',
55
+ last_name: 'Doe'
56
+ }
57
+ )
58
+ body = {
59
+ api_key: AmplitudeAPI.api_key,
60
+ identification: JSON.generate([identification.to_hash])
61
+ }
38
62
 
39
63
  expect(Typhoeus).to receive(:post).with(AmplitudeAPI::IDENTIFY_URI_STRING, body: body)
40
64
 
@@ -42,11 +66,26 @@ describe AmplitudeAPI do
42
66
  end
43
67
  end
44
68
 
45
- context "with multiple identifications" do
46
- it "sends all identifications in a single request" do
47
- identification = AmplitudeAPI::Identification.new(user_id: 123, user_properties: {first_name: 'Julian', last_name: 'Ponce'})
48
- identification2 = AmplitudeAPI::Identification.new(user_id: 456, user_properties: {first_name: 'John', last_name: 'Doe'})
49
- body = {api_key: AmplitudeAPI.api_key, identification: JSON.generate([identification.to_hash, identification2.to_hash])}
69
+ context 'with multiple identifications' do
70
+ it 'sends all identifications in a single request' do
71
+ identification = AmplitudeAPI::Identification.new(
72
+ user_id: 123,
73
+ user_properties: {
74
+ first_name: 'Julian',
75
+ last_name: 'Ponce'
76
+ }
77
+ )
78
+ identification2 = AmplitudeAPI::Identification.new(
79
+ user_id: 456,
80
+ user_properties: {
81
+ first_name: 'John',
82
+ last_name: 'Doe'
83
+ }
84
+ )
85
+ body = {
86
+ api_key: AmplitudeAPI.api_key,
87
+ identification: JSON.generate([identification.to_hash, identification2.to_hash])
88
+ }
50
89
 
51
90
  expect(Typhoeus).to receive(:post).with(AmplitudeAPI::IDENTIFY_URI_STRING, body: body)
52
91
 
@@ -55,92 +94,150 @@ describe AmplitudeAPI do
55
94
  end
56
95
  end
57
96
 
58
- describe ".initializer " do
59
- it "initializes event without parameter" do
60
- event = AmplitudeAPI::Event.new()
61
- expect(event.to_hash).to eq({
62
- event_type: "",
63
- user_id: "",
97
+ describe '.initializer ' do
98
+ it 'initializes event without parameter' do
99
+ event = AmplitudeAPI::Event.new
100
+ expect(event.to_hash).to eq(
101
+ event_type: '',
102
+ user_id: '',
64
103
  event_properties: {}
65
- })
104
+ )
66
105
  end
67
106
 
68
- it "initializes event with parameter" do
69
- event = AmplitudeAPI::Event.new(user_id: 123, event_type: "test_event", event_properties: {test_property: 1})
70
- expect(event.to_hash).to eq({
71
- event_type: "test_event",
107
+ it 'initializes event with parameter' do
108
+ event = AmplitudeAPI::Event.new(
72
109
  user_id: 123,
73
- event_properties: {test_property: 1}
74
- })
110
+ event_type: 'test_event',
111
+ event_properties: {
112
+ test_property: 1
113
+ }
114
+ )
115
+ expect(event.to_hash).to eq(
116
+ event_type: 'test_event',
117
+ user_id: 123,
118
+ event_properties: { test_property: 1 }
119
+ )
75
120
  end
76
121
  end
77
122
 
78
- describe ".send_event" do
79
- it "sends an event to AmplitudeAPI" do
80
- event = AmplitudeAPI::Event.new(user_id: @user, event_type: "test_event", event_properties: {test_property: 1})
123
+ describe '.send_event' do
124
+ it 'sends an event to AmplitudeAPI' do
125
+ event = AmplitudeAPI::Event.new(
126
+ user_id: @user,
127
+ event_type: 'test_event',
128
+ event_properties: { test_property: 1 }
129
+ )
81
130
  expect(AmplitudeAPI).to receive(:track).with(event)
82
131
 
83
- AmplitudeAPI.send_event("test_event", @user, test_property: 1)
132
+ AmplitudeAPI.send_event('test_event', @user, test_property: 1)
84
133
  end
85
134
 
86
- context "the user is nil" do
87
- it "sends an event with the no account user" do
88
- event = AmplitudeAPI::Event.new(user_id: nil, event_type: "test_event", event_properties: {test_property: 1})
135
+ context 'the user is nil' do
136
+ it 'sends an event with the no account user' do
137
+ event = AmplitudeAPI::Event.new(
138
+ user_id: nil,
139
+ event_type: 'test_event',
140
+ event_properties: { test_property: 1 }
141
+ )
89
142
  expect(AmplitudeAPI).to receive(:track).with(event)
90
143
 
91
- AmplitudeAPI.send_event("test_event", nil, test_property: 1)
144
+ AmplitudeAPI.send_event('test_event', nil, test_property: 1)
92
145
  end
93
146
  end
94
147
 
95
- context "the user is a user_id" do
96
- it "sends an event to AmplitudeAPI" do
97
- event = AmplitudeAPI::Event.new(user_id: 123, event_type: "test_event", event_properties: {test_property: 1})
148
+ context 'the user is a user_id' do
149
+ it 'sends an event to AmplitudeAPI' do
150
+ event = AmplitudeAPI::Event.new(
151
+ user_id: 123,
152
+ event_type: 'test_event',
153
+ event_properties: { test_property: 1 }
154
+ )
98
155
  expect(AmplitudeAPI).to receive(:track).with(event)
99
156
 
100
- AmplitudeAPI.send_event("test_event", @user.id, test_property: 1)
157
+ AmplitudeAPI.send_event('test_event', @user.id, test_property: 1)
101
158
  end
102
159
  end
103
160
  end
104
161
 
105
- describe ".send_identify" do
106
- it "sends an identify to AmplitudeAPI" do
107
- identification = AmplitudeAPI::Identification.new(user_id: @user, user_properties: {first_name: 'John', last_name: 'Doe'})
162
+ describe '.send_identify' do
163
+ it 'sends an identify to AmplitudeAPI' do
164
+ identification = AmplitudeAPI::Identification.new(
165
+ user_id: @user,
166
+ user_properties: {
167
+ first_name: 'John',
168
+ last_name: 'Doe'
169
+ }
170
+ )
108
171
  expect(AmplitudeAPI).to receive(:identify).with(identification)
109
172
 
110
- AmplitudeAPI.send_identify(@user, {first_name: 'John', last_name: 'Doe'})
173
+ AmplitudeAPI.send_identify(@user, first_name: 'John', last_name: 'Doe')
111
174
  end
112
175
 
113
- context "the user is nil" do
114
- it "sends an identify with the no account user" do
115
- identification = AmplitudeAPI::Identification.new(user_id: nil, user_properties: {first_name: 'John', last_name: 'Doe'})
176
+ context 'the user is nil' do
177
+ it 'sends an identify with the no account user' do
178
+ identification = AmplitudeAPI::Identification.new(
179
+ user_id: nil,
180
+ user_properties: {
181
+ first_name: 'John',
182
+ last_name: 'Doe'
183
+ }
184
+ )
116
185
  expect(AmplitudeAPI).to receive(:identify).with(identification)
117
186
 
118
- AmplitudeAPI.send_identify(nil, {first_name: 'John', last_name: 'Doe'})
187
+ AmplitudeAPI.send_identify(nil, first_name: 'John', last_name: 'Doe')
119
188
  end
120
189
  end
121
190
 
122
- context "the user is a user_id" do
123
- it "sends an identify to AmplitudeAPI" do
124
- identification = AmplitudeAPI::Identification.new(user_id: 123, user_properties: {first_name: 'John', last_name: 'Doe'})
191
+ context 'the user is a user_id' do
192
+ it 'sends an identify to AmplitudeAPI' do
193
+ identification = AmplitudeAPI::Identification.new(
194
+ user_id: 123,
195
+ user_properties: {
196
+ first_name: 'John',
197
+ last_name: 'Doe'
198
+ }
199
+ )
125
200
  expect(AmplitudeAPI).to receive(:identify).with(identification)
126
201
 
127
- AmplitudeAPI.send_identify(@user.id, {first_name: 'John', last_name: 'Doe'})
202
+ AmplitudeAPI.send_identify(@user.id, first_name: 'John', last_name: 'Doe')
128
203
  end
129
204
  end
130
205
  end
131
206
 
132
- describe "#body" do
133
- it "should add an api key" do
134
- event = AmplitudeAPI::Event.new(user_id: @user, event_type: "test_event", event_properties: {test_property: 1})
207
+ describe '#body' do
208
+ it 'should add an api key' do
209
+ event = AmplitudeAPI::Event.new(
210
+ user_id: @user,
211
+ event_type: 'test_event',
212
+ event_properties: {
213
+ test_property: 1
214
+ }
215
+ )
135
216
  body = AmplitudeAPI.track_body(event)
136
217
  expect(body[:api_key]).to eq('stub api key')
137
218
  end
138
219
 
139
- it "should create an event" do
140
- event = AmplitudeAPI::Event.new(user_id: 23, event_type: "test_event", event_properties: {foo: "bar"})
220
+ it 'should create an event' do
221
+ event = AmplitudeAPI::Event.new(
222
+ user_id: 23,
223
+ event_type: 'test_event',
224
+ event_properties: {
225
+ foo: 'bar'
226
+ }
227
+ )
141
228
  body = AmplitudeAPI.track_body(event)
142
229
 
143
- expected = JSON.generate([{event_type: "test_event", user_id: 23, event_properties: {foo: "bar"}}])
230
+ expected = JSON.generate(
231
+ [
232
+ {
233
+ event_type: 'test_event',
234
+ user_id: 23,
235
+ event_properties: {
236
+ foo: 'bar'
237
+ }
238
+ }
239
+ ]
240
+ )
144
241
  expect(body[:event]).to eq(expected)
145
242
  end
146
243
  end
data/spec/spec_helper.rb CHANGED
@@ -1,4 +1,4 @@
1
- require File.expand_path(File.join('..', '..', 'lib', 'amplitude-api'), __FILE__)
1
+ require File.expand_path(File.join('..', '..', 'lib', 'amplitude_api'), __FILE__)
2
2
  require 'pry'
3
3
  # This file was generated by the `rspec --init` command. Conventionally, all
4
4
  # specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: amplitude-api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alex Rakoczy
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-02-08 00:00:00.000000000 Z
11
+ date: 2016-02-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec
@@ -87,6 +87,7 @@ extra_rdoc_files: []
87
87
  files:
88
88
  - ".gitignore"
89
89
  - ".rspec"
90
+ - ".rubocop.yml"
90
91
  - ".travis.yml"
91
92
  - ".yardopts"
92
93
  - Gemfile
@@ -95,9 +96,10 @@ files:
95
96
  - Rakefile
96
97
  - amplitude-api.gemspec
97
98
  - lib/amplitude-api.rb
98
- - lib/amplitude-api/event.rb
99
- - lib/amplitude-api/identification.rb
100
- - lib/amplitude-api/version.rb
99
+ - lib/amplitude_api.rb
100
+ - lib/amplitude_api/event.rb
101
+ - lib/amplitude_api/identification.rb
102
+ - lib/amplitude_api/version.rb
101
103
  - readme.md
102
104
  - spec/lib/amplitude-api/event_spec.rb
103
105
  - spec/lib/amplitude-api/identification_spec.rb
@@ -1,3 +0,0 @@
1
- class AmplitudeAPI
2
- VERSION = '0.0.4'
3
- end