heap 1.0.0 → 1.0.1

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: b7f4270c4f06512b348491c08a91e7e44c293337
4
- data.tar.gz: d7f95a6e3e4dbb399ee899dca956690eec30aef6
3
+ metadata.gz: d13ef266e73536e3f334d975408393051f3240f4
4
+ data.tar.gz: fd288e976a5ac65d67495377491c2dfc493c658d
5
5
  SHA512:
6
- metadata.gz: d873b49995396816be5c824b3dc47848a69ee614fd3228b9c3e62208e24a65e884303bd31c72e648597207289ef8b5e614e98bb0f9ca6f7591421c18ef3e0584
7
- data.tar.gz: 8b27c441c8c46d0e2c15260006818dab9eed08f83f79567fd4564232e2fb73c33ff23aa918f575d11080f6fa71d7bcc194349b6b1938d49598ff27cdaa555911
6
+ metadata.gz: a9b4129ae78fcd15b1a75bd045464671b79ebb9856924f088ff2926e1f69eb228bff0d5e9c529fb782aac39fb55c1dac34b3c23ce27a381222894d8396944b1e
7
+ data.tar.gz: 2eeee128759cd9438df09755827576264e7766e4bbd8308394aee20280b45bc886bec4b2861411bb79c908aed4206249e32953fb7e17366c9ede2d2f25505d7f
@@ -14,3 +14,4 @@ matrix:
14
14
  gemfile: Gemfile
15
15
  - rvm: 2.3.0
16
16
  gemfile: Gemfile
17
+ env: COVERAGE=1
data/Gemfile CHANGED
@@ -7,9 +7,11 @@ gem 'faraday_middleware', '>= 0.8.0'
7
7
  # Add dependencies to develop your gem here.
8
8
  # Include everything needed to run rake, tests, features, etc.
9
9
  group :development do
10
- gem 'minitest', '>= 0'
11
- gem 'yard', '>= 0.8.7.6'
12
- gem 'rdoc', '>= 3.12'
13
10
  gem 'bundler', '>= 1.0'
11
+ gem 'coveralls', '>= 0.8.10'
14
12
  gem 'jeweler', '>= 2.0.1'
13
+ gem 'minitest', '>= 5.8.4'
14
+ gem 'rdoc', '>= 3.12'
15
+ gem 'simplecov', '>= 0.11.2'
16
+ gem 'yard', '>= 0.8.7.6'
15
17
  end
data/Gemfile187 CHANGED
@@ -7,10 +7,10 @@ gem 'faraday_middleware', '~> 0.8.0'
7
7
  # Add dependencies to develop your gem here.
8
8
  # Include everything needed to run rake, tests, features, etc.
9
9
  group :development do
10
- gem 'minitest', '>= 0'
11
- gem 'yard', '>= 0.8.7.6'
12
- gem 'rdoc', '>= 3.12'
13
10
  gem 'bundler', '>= 1.0'
11
+ gem 'minitest', '>= 5.8.4'
12
+ gem 'rdoc', '>= 4.2.2'
13
+ gem 'yard', '>= 0.8.7.6'
14
14
 
15
15
  # NOTE: The latest versions of these dependencies do not support Ruby 1.8.7.
16
16
  gem 'jeweler', '~> 1.8.8'
data/README.md CHANGED
@@ -1,10 +1,13 @@
1
1
  # Heap Server-Side API Client for Ruby
2
2
 
3
3
  [![Build Status](https://travis-ci.org/heap/heap-ruby.svg?branch=master)](https://travis-ci.org/heap/heap-ruby)
4
+ [![Coverage Status](https://coveralls.io/repos/github/heap/heap-ruby/badge.svg?branch=master)](https://coveralls.io/github/heap/heap-ruby?branch=master)
5
+ [![Dependency Status](https://gemnasium.com/heap/heap-ruby.svg)](https://gemnasium.com/heap/heap-ruby)
4
6
  [![Yard Docs](http://img.shields.io/badge/yard-docs-blue.svg)](http://rubydoc.info/github/heap/heap-ruby/master/frames)
5
7
  [![Gem Version](https://badge.fury.io/rb/heap.svg)](https://badge.fury.io/rb/heap)
6
8
 
7
- This is a Ruby client for the [Heap](https://heapanalytics.com/)
9
+ This is a [Ruby](https://www.ruby-lang.org/) client for the
10
+ [Heap](https://heapanalytics.com/)
8
11
  [server-side API](https://heapanalytics.com/docs/server-side).
9
12
 
10
13
 
@@ -79,14 +82,14 @@ end
79
82
  The properties are optional.
80
83
 
81
84
  ```ruby
82
- Heap.track 'user-handle', 'event-name', property: 'value'
85
+ Heap.track 'event-name', 'user-identity', property: 'value'
83
86
  ```
84
87
 
85
88
  [Add properties](https://heapanalytics.com/docs/server-side#identify) to a
86
89
  user.
87
90
 
88
91
  ```ruby
89
- Heap.add_user_properties 'user-handle', plan: 'premium1'
92
+ Heap.add_user_properties 'user-identity', plan: 'premium1'
90
93
  ```
91
94
 
92
95
  If the global API client instance stored in `Heap` is not a good fit for your
@@ -94,7 +97,7 @@ application's architecture, create your own client instances.
94
97
 
95
98
  ```ruby
96
99
  heap_client = Heap.new app_id: 'YOUR_APP_ID'
97
- heap_client.track 'user-handle', 'event-name', property: 'value'
100
+ heap_client.track 'user-identity', 'event-name', property: 'value'
98
101
  ```
99
102
 
100
103
 
data/Rakefile CHANGED
@@ -32,6 +32,12 @@ Rake::TestTask.new(:test) do |test|
32
32
  test.verbose = true
33
33
  end
34
34
 
35
+ desc 'Code coverage detail'
36
+ task :simplecov do
37
+ ENV['COVERAGE'] = 'true'
38
+ Rake::Task['test'].execute
39
+ end
40
+
35
41
  task :default => :test
36
42
 
37
43
  require 'yard'
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.0.0
1
+ 1.0.1
@@ -2,16 +2,16 @@
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
3
  # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
- # stub: heap 1.0.0 ruby lib
5
+ # stub: heap 1.0.1 ruby lib
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "heap"
9
- s.version = "1.0.0"
9
+ s.version = "1.0.1"
10
10
 
11
11
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
12
12
  s.require_paths = ["lib"]
13
13
  s.authors = ["Victor Costan"]
14
- s.date = "2016-02-29"
14
+ s.date = "2016-03-08"
15
15
  s.description = "Implements Heap's server-side API"
16
16
  s.email = "victor@heapanalytics.com"
17
17
  s.extra_rdoc_files = [
@@ -49,28 +49,34 @@ Gem::Specification.new do |s|
49
49
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
50
50
  s.add_runtime_dependency(%q<faraday>, [">= 0.8.11"])
51
51
  s.add_runtime_dependency(%q<faraday_middleware>, [">= 0.8.0"])
52
- s.add_development_dependency(%q<minitest>, [">= 0"])
53
- s.add_development_dependency(%q<yard>, [">= 0.8.7.6"])
54
- s.add_development_dependency(%q<rdoc>, [">= 3.12"])
55
52
  s.add_development_dependency(%q<bundler>, [">= 1.0"])
53
+ s.add_development_dependency(%q<coveralls>, [">= 0.8.10"])
56
54
  s.add_development_dependency(%q<jeweler>, [">= 2.0.1"])
55
+ s.add_development_dependency(%q<minitest>, [">= 5.8.4"])
56
+ s.add_development_dependency(%q<rdoc>, [">= 3.12"])
57
+ s.add_development_dependency(%q<simplecov>, [">= 0.11.2"])
58
+ s.add_development_dependency(%q<yard>, [">= 0.8.7.6"])
57
59
  else
58
60
  s.add_dependency(%q<faraday>, [">= 0.8.11"])
59
61
  s.add_dependency(%q<faraday_middleware>, [">= 0.8.0"])
60
- s.add_dependency(%q<minitest>, [">= 0"])
61
- s.add_dependency(%q<yard>, [">= 0.8.7.6"])
62
- s.add_dependency(%q<rdoc>, [">= 3.12"])
63
62
  s.add_dependency(%q<bundler>, [">= 1.0"])
63
+ s.add_dependency(%q<coveralls>, [">= 0.8.10"])
64
64
  s.add_dependency(%q<jeweler>, [">= 2.0.1"])
65
+ s.add_dependency(%q<minitest>, [">= 5.8.4"])
66
+ s.add_dependency(%q<rdoc>, [">= 3.12"])
67
+ s.add_dependency(%q<simplecov>, [">= 0.11.2"])
68
+ s.add_dependency(%q<yard>, [">= 0.8.7.6"])
65
69
  end
66
70
  else
67
71
  s.add_dependency(%q<faraday>, [">= 0.8.11"])
68
72
  s.add_dependency(%q<faraday_middleware>, [">= 0.8.0"])
69
- s.add_dependency(%q<minitest>, [">= 0"])
70
- s.add_dependency(%q<yard>, [">= 0.8.7.6"])
71
- s.add_dependency(%q<rdoc>, [">= 3.12"])
72
73
  s.add_dependency(%q<bundler>, [">= 1.0"])
74
+ s.add_dependency(%q<coveralls>, [">= 0.8.10"])
73
75
  s.add_dependency(%q<jeweler>, [">= 2.0.1"])
76
+ s.add_dependency(%q<minitest>, [">= 5.8.4"])
77
+ s.add_dependency(%q<rdoc>, [">= 3.12"])
78
+ s.add_dependency(%q<simplecov>, [">= 0.11.2"])
79
+ s.add_dependency(%q<yard>, [">= 0.8.7.6"])
74
80
  end
75
81
  end
76
82
 
@@ -29,6 +29,7 @@ class HeapAPI::Client
29
29
  #
30
30
  # @param [Hash<Symbol, Object>] options initial values for attributes
31
31
  # @option options [String] app_id the Heap application ID from
32
+ # https://heapanalytics.com/app/install
32
33
  # @option options [Hash<Symbol, Object>] js_options default heap.js advanced
33
34
  # options
34
35
  # @option options [Boolean] stubbed if true, all the requests to the Heap API
@@ -66,12 +67,12 @@ class HeapAPI::Client
66
67
  def faraday_adapter_args=(new_args)
67
68
  raise RuntimeError, 'Faraday connection already initialized' if @connection
68
69
  unless new_args.instance_of? Array
69
- raise ArgumentErrorm, "Arguments must be an array"
70
+ raise ArgumentError, "Arguments must be an Array"
70
71
  end
71
72
  @faraday_adapter_args = new_args
72
73
  end
73
74
 
74
- # Assign custom properties to an existing user.
75
+ # Assigns custom properties to an existing user.
75
76
  #
76
77
  # @param [String] identity an e-mail, handle, or Heap-generated user ID
77
78
  # @param [Hash<String, String|Number>] properties key-value properties
@@ -81,6 +82,7 @@ class HeapAPI::Client
81
82
  # @see https://heapanalytics.com/docs/server-side#identify
82
83
  def add_user_properties(identity, properties)
83
84
  ensure_valid_app_id!
85
+ ensure_valid_identity! identity
84
86
  ensure_valid_properties! properties
85
87
 
86
88
  body = {
@@ -109,6 +111,7 @@ class HeapAPI::Client
109
111
 
110
112
  event_name = event.to_s
111
113
  ensure_valid_event_name! event_name
114
+ ensure_valid_identity! identity
112
115
 
113
116
  body = {
114
117
  :app_id => @app_id,
@@ -23,6 +23,26 @@ class HeapAPI::Client
23
23
  end
24
24
  private :ensure_valid_event_name!
25
25
 
26
+ # Validates identity, making sure it is a valid string or integer.
27
+ #
28
+ # @param [String|Integer] identity
29
+ # @raise ArgumentError if identity is of an invalid type or too long.
30
+ # @return [HeapAPI::Client] self
31
+ def ensure_valid_identity!(identity)
32
+ identity = identity.to_s if identity.kind_of?(Integer)
33
+
34
+ if identity.kind_of?(String) || identity.kind_of?(Symbol)
35
+ if identity.to_s.length > 255
36
+ raise ArgumentError, "Identity field too long; " +
37
+ "#{identity.to_s.length} is above the 255-character limit"
38
+ end
39
+ else
40
+ raise ArgumentError,
41
+ "Unsupported type for identity value #{identity.inspect}"
42
+ end
43
+ end
44
+ private :ensure_valid_identity!
45
+
26
46
  # Validates a bag of properties sent to a Heap server-side API.
27
47
  #
28
48
  # @param [Hash<String, String|Number>] properties key-value property bag;
@@ -16,17 +16,57 @@ class ClientAddUserPropertiesTest < MiniTest::Test
16
16
  def test_add_user_properties_without_app_id
17
17
  @heap.app_id = nil
18
18
  exception = assert_raises RuntimeError do
19
- @heap.add_user_properties 'test-handle', 'key' => 'value'
19
+ @heap.add_user_properties 'test-identity', 'key' => 'value'
20
20
  end
21
21
  assert_equal RuntimeError, exception.class
22
22
  assert_equal 'Heap app_id not set', exception.message
23
23
  end
24
24
 
25
+ def test_add_user_properties_with_invalid_property_object
26
+ exception = assert_raises ArgumentError do
27
+ @heap.add_user_properties 'test-identity', false
28
+ end
29
+ assert_equal ArgumentError, exception.class
30
+ assert_equal 'Properties object does not implement #each',
31
+ exception.message
32
+ end
33
+
34
+ def test_add_user_properties_with_long_string_identity
35
+ long_identity = 'A' * 256
36
+
37
+ exception = assert_raises ArgumentError do
38
+ @heap.add_user_properties long_identity, 'key' => 'value'
39
+ end
40
+ assert_equal ArgumentError, exception.class
41
+ assert_equal "Identity field too long; " +
42
+ '256 is above the 255-character limit', exception.message
43
+ end
44
+
45
+ def test_add_user_properties_with_long_symbol_identity
46
+ long_identity = ('A' * 256).to_sym
47
+
48
+ exception = assert_raises ArgumentError do
49
+ @heap.add_user_properties long_identity, 'key' => 'value'
50
+ end
51
+ assert_equal ArgumentError, exception.class
52
+ assert_equal "Identity field too long; " +
53
+ '256 is above the 255-character limit', exception.message
54
+ end
55
+
56
+ def test_add_user_properties_with_array_identity
57
+ exception = assert_raises ArgumentError do
58
+ @heap.add_user_properties([], 'key' => 'value')
59
+ end
60
+ assert_equal ArgumentError, exception.class
61
+ assert_equal 'Unsupported type for identity value []', exception.message
62
+ end
63
+
64
+
25
65
  def test_add_user_properties_with_long_property_name
26
66
  long_name = 'A' * 1025
27
67
 
28
68
  exception = assert_raises ArgumentError do
29
- @heap.add_user_properties 'test-handle', long_name => 'value'
69
+ @heap.add_user_properties 'test-identity', long_name => 'value'
30
70
  end
31
71
  assert_equal ArgumentError, exception.class
32
72
  assert_equal "Property name #{long_name} too long; " +
@@ -36,7 +76,8 @@ class ClientAddUserPropertiesTest < MiniTest::Test
36
76
  def test_add_user_properties_with_long_string_property_value
37
77
  long_value = 'A' * 1025
38
78
  exception = assert_raises ArgumentError do
39
- @heap.add_user_properties 'test-handle', 'long_value_name' => long_value
79
+ @heap.add_user_properties 'test-identity',
80
+ 'long_value_name' => long_value
40
81
  end
41
82
  assert_equal ArgumentError, exception.class
42
83
  assert_equal "Property long_value_name value \"#{long_value}\" too " +
@@ -46,7 +87,8 @@ class ClientAddUserPropertiesTest < MiniTest::Test
46
87
  def test_add_user_properties_with_long_symbol_property_value
47
88
  long_value = ('A' * 1025).to_sym
48
89
  exception = assert_raises ArgumentError do
49
- @heap.add_user_properties 'test-handle', 'long_value_name' => long_value
90
+ @heap.add_user_properties 'test-identity',
91
+ 'long_value_name' => long_value
50
92
  end
51
93
  assert_equal ArgumentError, exception.class
52
94
  assert_equal "Property long_value_name value :#{long_value} too long; " +
@@ -55,19 +97,18 @@ class ClientAddUserPropertiesTest < MiniTest::Test
55
97
 
56
98
  def test_add_user_properties_with_array_property_value
57
99
  exception = assert_raises ArgumentError do
58
- @heap.add_user_properties 'test-handle', 'array_value_name' => []
100
+ @heap.add_user_properties 'test-identity', 'array_value_name' => []
59
101
  end
60
102
  assert_equal ArgumentError, exception.class
61
103
  assert_equal 'Unsupported type for property array_value_name value []',
62
104
  exception.message
63
105
  end
64
106
 
65
-
66
107
  def test_add_user_properties
67
108
  @stubs.post '/api/identify' do |env|
68
109
  golden_body = {
69
110
  'app_id' => 'test-app-id',
70
- 'identity' => 'test-handle',
111
+ 'identity' => 'test-identity',
71
112
  'properties' => { 'foo' => 'bar', 'heap' => 'hurray' }
72
113
  }
73
114
  assert_equal 'application/json', env[:request_headers]['Content-Type']
@@ -77,17 +118,34 @@ class ClientAddUserPropertiesTest < MiniTest::Test
77
118
  [200, { 'Content-Type' => 'text/plain; encoding=utf8' }, '']
78
119
  end
79
120
 
80
- assert_equal @heap, @heap.add_user_properties('test-handle',
121
+ assert_equal @heap, @heap.add_user_properties('test-identity',
81
122
  'foo' => 'bar', :heap => :hurray)
82
123
  end
83
124
 
125
+ def test_add_user_properties_with_integer_identity
126
+ @stubs.post '/api/identify' do |env|
127
+ golden_body = {
128
+ 'app_id' => 'test-app-id',
129
+ 'identity' => '123456789',
130
+ 'properties' => { 'foo' => 'bar' }
131
+ }
132
+ assert_equal 'application/json', env[:request_headers]['Content-Type']
133
+ assert_equal @heap.user_agent, env[:request_headers]['User-Agent']
134
+ assert_equal golden_body, JSON.parse(env[:body])
135
+
136
+ [200, { 'Content-Type' => 'text/plain; encoding=utf8' }, '']
137
+ end
138
+
139
+ assert_equal @heap, @heap.add_user_properties(123456789, 'foo' => 'bar')
140
+ end
141
+
84
142
  def test_add_user_properties_error
85
143
  @stubs.post '/api/identify' do |env|
86
144
  [400, { 'Content-Type' => 'text/plain; encoding=utf8' }, 'Bad request']
87
145
  end
88
146
 
89
147
  exception = assert_raises HeapAPI::Error do
90
- @heap.add_user_properties 'test-handle', 'foo' => 'bar'
148
+ @heap.add_user_properties 'test-identity', 'foo' => 'bar'
91
149
  end
92
150
 
93
151
  assert_equal HeapAPI::ApiError, exception.class
@@ -101,7 +159,7 @@ class ClientAddUserPropertiesTest < MiniTest::Test
101
159
  @heap.faraday_adapter = :net_http
102
160
  @heap.faraday_adapter_args = []
103
161
 
104
- assert_equal @heap, @heap.add_user_properties('test-handle',
162
+ assert_equal @heap, @heap.add_user_properties('test-identity',
105
163
  'language/ruby' => 1, 'heap/heap-ruby' => 1)
106
164
  end
107
165
 
@@ -110,7 +168,7 @@ class ClientAddUserPropertiesTest < MiniTest::Test
110
168
  @heap.faraday_adapter_args = []
111
169
 
112
170
  assert_raises HeapAPI::Error do
113
- @heap.add_user_properties 'test-handle',
171
+ @heap.add_user_properties 'test-identity',
114
172
  'language/ruby' => 1, 'heap/heap-ruby' => 1
115
173
  end
116
174
  end
@@ -118,7 +176,7 @@ class ClientAddUserPropertiesTest < MiniTest::Test
118
176
  def test_add_user_properties_with_stubbed_connection
119
177
  @heap.stubbed = true
120
178
 
121
- assert_equal @heap, @heap.add_user_properties('test-handle',
179
+ assert_equal @heap, @heap.add_user_properties('test-identity',
122
180
  'foo' => 'bar', :heap => :hurray)
123
181
  end
124
182
  end
@@ -36,18 +36,26 @@ class ClientTest < MiniTest::Test
36
36
  assert_equal [stubs], @heap.faraday_adapter_args
37
37
  end
38
38
 
39
+ def test_faraday_adapter_args_setter_with_invalid_value
40
+ exception = assert_raises ArgumentError do
41
+ @heap.faraday_adapter_args = false
42
+ end
43
+ assert_equal ArgumentError, exception.class
44
+ assert_equal 'Arguments must be an Array', exception.message
45
+ end
46
+
39
47
  def test_stubbed_setter
40
48
  @heap.app_id = 'test-app-id'
41
49
  @heap.faraday_adapter = :net_http
42
50
 
43
51
  @heap.stubbed = true
44
- assert_equal @heap, @heap.track('test_stubbed_setter', 'test-handle',
52
+ assert_equal @heap, @heap.track('test_stubbed_setter', 'test-identity',
45
53
  'language' => 'ruby', 'project' => 'heap/heap-ruby')
46
54
  stubbed_connection = @heap.connection
47
55
 
48
56
  @heap.stubbed = false
49
57
  assert_raises HeapAPI::Error do
50
- @heap.track 'test_stubbed_setter', 'test-handle',
58
+ @heap.track 'test_stubbed_setter', 'test-identity',
51
59
  'language' => 'ruby', 'project' => 'heap/heap-ruby'
52
60
  end
53
61
  live_connection = @heap.connection
@@ -17,7 +17,7 @@ class ClientTrackTest < MiniTest::Test
17
17
  def test_track_without_app_id
18
18
  @heap.app_id = nil
19
19
  exception = assert_raises RuntimeError do
20
- @heap.track 'test_track_without_app_id', 'test-handle'
20
+ @heap.track 'test_track_without_app_id', 'test-identity'
21
21
  end
22
22
  assert_equal RuntimeError, exception.class
23
23
  assert_equal 'Heap app_id not set', exception.message
@@ -25,7 +25,7 @@ class ClientTrackTest < MiniTest::Test
25
25
 
26
26
  def test_track_without_event_name
27
27
  exception = assert_raises ArgumentError do
28
- @heap.track '', 'test-handle'
28
+ @heap.track '', 'test-identity'
29
29
  end
30
30
  assert_equal ArgumentError, exception.class
31
31
  assert_equal 'Missing or empty event name', exception.message
@@ -33,16 +33,55 @@ class ClientTrackTest < MiniTest::Test
33
33
 
34
34
  def test_track_with_long_event_name
35
35
  exception = assert_raises ArgumentError do
36
- @heap.track 'A' * 1025, 'test-handle'
36
+ @heap.track 'A' * 1025, 'test-identity'
37
37
  end
38
38
  assert_equal ArgumentError, exception.class
39
39
  assert_equal 'Event name too long', exception.message
40
40
  end
41
41
 
42
+ def test_track_with_long_string_identity
43
+ long_identity = 'A' * 256
44
+
45
+ exception = assert_raises ArgumentError do
46
+ @heap.track 'some-event', long_identity
47
+ end
48
+ assert_equal ArgumentError, exception.class
49
+ assert_equal "Identity field too long; " +
50
+ '256 is above the 255-character limit', exception.message
51
+ end
52
+
53
+ def test_track_with_long_symbol_identity
54
+ long_identity = ('A' * 256).to_sym
55
+
56
+ exception = assert_raises ArgumentError do
57
+ @heap.track 'some-event', long_identity
58
+ end
59
+ assert_equal ArgumentError, exception.class
60
+ assert_equal "Identity field too long; " +
61
+ '256 is above the 255-character limit', exception.message
62
+ end
63
+
64
+ def test_track_with_array_identity
65
+ exception = assert_raises ArgumentError do
66
+ @heap.track 'test_track_with_array_property_value', []
67
+ end
68
+ assert_equal ArgumentError, exception.class
69
+ assert_equal 'Unsupported type for identity value []', exception.message
70
+ end
71
+
72
+ def test_track_with_invalid_property_object
73
+ exception = assert_raises ArgumentError do
74
+ @heap.track 'test_track_with_long_property_name', 'test-identity', false
75
+ end
76
+ assert_equal ArgumentError, exception.class
77
+ assert_equal 'Properties object does not implement #each',
78
+ exception.message
79
+ end
80
+
42
81
  def test_track_with_long_property_name
43
82
  long_name = 'A' * 1025
44
83
  exception = assert_raises ArgumentError do
45
- @heap.track 'test_track_with_long_property_name', 'test-handle',
84
+ @heap.track 'test_track_with_long_property_name', 'test-identity',
46
85
  long_name => 'value'
47
86
  end
48
87
  assert_equal ArgumentError, exception.class
@@ -53,8 +92,8 @@ class ClientTrackTest < MiniTest::Test
53
92
  def test_track_with_long_string_property_value
54
93
  long_value = 'A' * 1025
55
94
  exception = assert_raises ArgumentError do
56
- @heap.track 'test_track_with_long_string_property_value', 'test-handle',
57
- 'long_value_name' => long_value
95
+ @heap.track 'test_track_with_long_string_property_value',
96
+ 'test-identity', 'long_value_name' => long_value
58
97
  end
59
98
  assert_equal ArgumentError, exception.class
60
99
  assert_equal "Property long_value_name value \"#{long_value}\" too " +
@@ -64,19 +103,46 @@ class ClientTrackTest < MiniTest::Test
64
103
  def test_track_with_long_symbol_property_value
65
104
  long_value = ('A' * 1025).to_sym
66
105
  exception = assert_raises ArgumentError do
67
- @heap.track 'test_track_with_long_symbol_property_value', 'test-handle',
68
- 'long_value_name' => long_value
106
+ @heap.track 'test_track_with_long_symbol_property_value',
107
+ 'test-identity', 'long_value_name' => long_value
69
108
  end
70
109
  assert_equal ArgumentError, exception.class
71
110
  assert_equal "Property long_value_name value :#{long_value} too long; " +
72
111
  '1025 is above the 1024-character limit', exception.message
73
112
  end
74
113
 
114
+ def test_track_with_array_property_value
115
+ exception = assert_raises ArgumentError do
116
+ @heap.track 'test_track_with_array_property_value', 'test-identity',
117
+ 'array_value_name' => []
118
+ end
119
+ assert_equal ArgumentError, exception.class
120
+ assert_equal 'Unsupported type for property array_value_name value []',
121
+ exception.message
122
+ end
123
+
75
124
  def test_track
76
125
  @stubs.post '/api/track' do |env|
77
126
  golden_body = {
78
127
  'app_id' => 'test-app-id',
79
- 'identity' => 'test-handle',
128
+ 'identity' => 'test-identity',
129
+ 'event' => 'test_track',
130
+ }
131
+ assert_equal 'application/json', env[:request_headers]['Content-Type']
132
+ assert_equal @heap.user_agent, env[:request_headers]['User-Agent']
133
+ assert_equal golden_body, JSON.parse(env[:body])
134
+
135
+ [200, { 'Content-Type' => 'text/plain; encoding=utf8' }, '']
136
+ end
137
+
138
+ assert_equal @heap, @heap.track('test_track', 'test-identity')
139
+ end
140
+
141
+ def test_track_with_integer_identity
142
+ @stubs.post '/api/track' do |env|
143
+ golden_body = {
144
+ 'app_id' => 'test-app-id',
145
+ 'identity' => '123456789',
80
146
  'event' => 'test_track',
81
147
  }
82
148
  assert_equal 'application/json', env[:request_headers]['Content-Type']
@@ -86,14 +152,14 @@ class ClientTrackTest < MiniTest::Test
86
152
  [200, { 'Content-Type' => 'text/plain; encoding=utf8' }, '']
87
153
  end
88
154
 
89
- assert_equal @heap, @heap.track('test_track', 'test-handle')
155
+ assert_equal @heap, @heap.track('test_track', 123456789)
90
156
  end
91
157
 
92
158
  def test_track_with_properties
93
159
  @stubs.post '/api/track' do |env|
94
160
  golden_body = {
95
161
  'app_id' => 'test-app-id',
96
- 'identity' => 'test-handle',
162
+ 'identity' => 'test-identity',
97
163
  'event' => 'test_track_with_properties',
98
164
  'properties' => { 'foo' => 'bar', 'heap' => 'hurray' }
99
165
  }
@@ -105,7 +171,7 @@ class ClientTrackTest < MiniTest::Test
105
171
  end
106
172
 
107
173
  assert_equal @heap, @heap.track('test_track_with_properties',
108
- 'test-handle','foo' => 'bar', :heap => :hurray)
174
+ 'test-identity','foo' => 'bar', :heap => :hurray)
109
175
  end
110
176
 
111
177
  def test_track_error
@@ -114,7 +180,7 @@ class ClientTrackTest < MiniTest::Test
114
180
  end
115
181
 
116
182
  exception = assert_raises HeapAPI::Error do
117
- @heap.track('test-handle', 'test_track')
183
+ @heap.track('test-identity', 'test_track')
118
184
  end
119
185
  assert_equal HeapAPI::ApiError, exception.class
120
186
  assert_equal 'Heap API server error: 400 Bad request', exception.message
@@ -127,7 +193,7 @@ class ClientTrackTest < MiniTest::Test
127
193
  @heap.faraday_adapter = :net_http
128
194
  @heap.faraday_adapter_args = []
129
195
 
130
- assert_equal @heap, @heap.track('test_track_integration', 'test-handle',
196
+ assert_equal @heap, @heap.track('test_track_integration', 'test-identity',
131
197
  'language' => 'ruby', 'project' => 'heap/heap-ruby')
132
198
  end
133
199
 
@@ -136,7 +202,7 @@ class ClientTrackTest < MiniTest::Test
136
202
  @heap.faraday_adapter_args = []
137
203
 
138
204
  assert_raises HeapAPI::Error do
139
- @heap.track('test_track_integration', 'test-handle',
205
+ @heap.track('test_track_integration', 'test-identity',
140
206
  'language' => 'ruby', 'project' => 'heap/heap-ruby')
141
207
  end
142
208
  end
@@ -145,7 +211,7 @@ class ClientTrackTest < MiniTest::Test
145
211
  def test_track_with_stubbed_connection
146
212
  @heap.stubbed = true
147
213
 
148
- assert_equal @heap, @heap.add_user_properties('test-handle',
214
+ assert_equal @heap, @heap.add_user_properties('test-identity',
149
215
  'foo' => 'bar', :heap => :hurray)
150
216
  end
151
217
  end
@@ -1,3 +1,29 @@
1
+ if RUBY_VERSION >= '1.9' # simplecov only works on MRI 1.9+
2
+ require 'simplecov'
3
+ require 'coveralls'
4
+
5
+ module SimpleCov::Configuration
6
+ def clean_filters
7
+ @filters = []
8
+ end
9
+ end
10
+
11
+ SimpleCov.configure do
12
+ clean_filters
13
+ load_adapter 'test_frameworks'
14
+ end
15
+
16
+ SimpleCov.formatters = [
17
+ SimpleCov::Formatter::HTMLFormatter,
18
+ Coveralls::SimpleCov::Formatter,
19
+ ]
20
+
21
+ ENV["COVERAGE"] && SimpleCov.start do
22
+ add_filter "/.rvm/"
23
+ add_filter "/.rbenv/"
24
+ end
25
+ end
26
+
1
27
  require 'rubygems'
2
28
  require 'bundler'
3
29
  begin
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: heap
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Victor Costan
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-02-29 00:00:00.000000000 Z
11
+ date: 2016-03-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -39,33 +39,61 @@ dependencies:
39
39
  - !ruby/object:Gem::Version
40
40
  version: 0.8.0
41
41
  - !ruby/object:Gem::Dependency
42
- name: minitest
42
+ name: bundler
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: '0'
47
+ version: '1.0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
- version: '0'
54
+ version: '1.0'
55
55
  - !ruby/object:Gem::Dependency
56
- name: yard
56
+ name: coveralls
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - ">="
60
60
  - !ruby/object:Gem::Version
61
- version: 0.8.7.6
61
+ version: 0.8.10
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - ">="
67
67
  - !ruby/object:Gem::Version
68
- version: 0.8.7.6
68
+ version: 0.8.10
69
+ - !ruby/object:Gem::Dependency
70
+ name: jeweler
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: 2.0.1
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: 2.0.1
83
+ - !ruby/object:Gem::Dependency
84
+ name: minitest
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: 5.8.4
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: 5.8.4
69
97
  - !ruby/object:Gem::Dependency
70
98
  name: rdoc
71
99
  requirement: !ruby/object:Gem::Requirement
@@ -81,33 +109,33 @@ dependencies:
81
109
  - !ruby/object:Gem::Version
82
110
  version: '3.12'
83
111
  - !ruby/object:Gem::Dependency
84
- name: bundler
112
+ name: simplecov
85
113
  requirement: !ruby/object:Gem::Requirement
86
114
  requirements:
87
115
  - - ">="
88
116
  - !ruby/object:Gem::Version
89
- version: '1.0'
117
+ version: 0.11.2
90
118
  type: :development
91
119
  prerelease: false
92
120
  version_requirements: !ruby/object:Gem::Requirement
93
121
  requirements:
94
122
  - - ">="
95
123
  - !ruby/object:Gem::Version
96
- version: '1.0'
124
+ version: 0.11.2
97
125
  - !ruby/object:Gem::Dependency
98
- name: jeweler
126
+ name: yard
99
127
  requirement: !ruby/object:Gem::Requirement
100
128
  requirements:
101
129
  - - ">="
102
130
  - !ruby/object:Gem::Version
103
- version: 2.0.1
131
+ version: 0.8.7.6
104
132
  type: :development
105
133
  prerelease: false
106
134
  version_requirements: !ruby/object:Gem::Requirement
107
135
  requirements:
108
136
  - - ">="
109
137
  - !ruby/object:Gem::Version
110
- version: 2.0.1
138
+ version: 0.8.7.6
111
139
  description: Implements Heap's server-side API
112
140
  email: victor@heapanalytics.com
113
141
  executables: []