natero 1.0.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0c0d7d9f1d088d627aa867e91872c97fd5d834f7
4
- data.tar.gz: 1af789490d4a356b2d26d8cd696ecc17d078d00c
3
+ metadata.gz: 396f35850e555410d1c47b49834076e468cb59e1
4
+ data.tar.gz: 5a8b869c6b8201089924184cacabd40ca16ea10b
5
5
  SHA512:
6
- metadata.gz: 6fc72ddc852e37269934cdf7f8cdb4e0b415a3fd7844f30f06c585b980057f1d76e7e9806dc29721c3794418667cc3c081cb061e779a51b486b36a657dff0bf0
7
- data.tar.gz: e10eb2a505704421142bbe7eaf7bdcb7f17109e497a057c76a456ca970c5815feaa7a133bfbccdfef7803e130c118a4261332ed6a9bec37fcdeb7c2b33fe24e3
6
+ metadata.gz: e05aeab33aa8d0f9c03ba3b19e762b6c8929358a5263ac01831072c346e0cd05146f4298d4dc2d04ce260deeff2a2922dcf5352d39f9bdf0fd087d6410311c5f
7
+ data.tar.gz: b41c24bb70354f386277f1b76df2e209e5dc1c3e9fc9297e08b2e2ff48faceeeb1651f6c342a54569e6cdaccec26bcbd5d3a9b104437b38482132d86b2b38d01
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- natero (0.1.0)
4
+ natero (1.0.0)
5
5
  httparty (~> 0.13)
6
6
 
7
7
  GEM
@@ -3,15 +3,10 @@ require 'json'
3
3
  require 'pry'
4
4
 
5
5
  module Natero
6
- PRODUCTION_URI = 'https://api.natero.com'
7
-
8
- API_VERSION_URI = '/api/v2'
9
-
10
6
  class Configuration
11
7
  attr_accessor :base_uri, :account_api_key, :event_api_key, :event_auth_key
12
8
 
13
9
  def initialize
14
- self.base_uri = PRODUCTION_URI
15
10
  self.account_api_key = nil
16
11
  self.event_api_key = nil
17
12
  self.event_auth_key = nil
@@ -26,16 +21,17 @@ module Natero
26
21
  yield(configuration) if block_given?
27
22
  end
28
23
 
29
- def self.full_endpoint_uri(endpoint, *params)
30
- base = self.uri + '/' + endpoint
24
+ def self.full_endpoint_uri(base_uri, version_uri, *params)
25
+ base = self.uri(base_uri, version_uri)
31
26
 
32
- params.each { |param| base << '/' + param } unless params.flatten.empty?
27
+ params.flatten!
28
+ params.each { |param| base << '/' + param } unless params.empty?
33
29
 
34
- base + self.api_key_uri
30
+ base
35
31
  end
36
32
 
37
- def self.uri
38
- Natero.configuration.base_uri + API_VERSION_URI
33
+ def self.uri(base_uri, version_uri)
34
+ base_uri + version_uri
39
35
  end
40
36
 
41
37
  def self.api_key_uri
@@ -49,4 +45,5 @@ end
49
45
 
50
46
  require_relative 'natero/serializable'
51
47
  require_relative 'natero/account'
48
+ require_relative 'natero/event'
52
49
  require_relative 'natero/response'
@@ -2,6 +2,9 @@ class Natero::Account
2
2
  include HTTParty
3
3
  include Serializable
4
4
 
5
+ BASE_URI = 'https://api.natero.com'
6
+ VERSION_URI = '/api/v2'
7
+
5
8
  attr_reader :account_id, :name, :join_date, :renewal_date,
6
9
  :billing_account_id, :support_account_id, :crm_account_id,
7
10
  :billing_street, :billing_city, :billing_postal_code,
@@ -24,13 +27,13 @@ class Natero::Account
24
27
  # http://apidocs.natero.com/apidoc.html#Accounts_Bulk%20insert%2Fmodify%20accounts
25
28
  def self.bulk_insert_modify(accounts)
26
29
  body = Natero.to_records_json(accounts)
27
- Natero::Response.new(post(endpoint, { :body => body }))
30
+ Natero::Response.new(post(endpoint, { :body => body, :headers => { 'Content-Type' => 'application/json' } }))
28
31
  end
29
32
 
30
33
  # http://apidocs.natero.com/apidoc.html#Accounts_Modify%20an%20account
31
34
  def self.modify(id, account)
32
35
  body = account.to_json
33
- Natero::Response.new(put(endpoint(id), { :body => body }))
36
+ Natero::Response.new(put(endpoint(id), { :body => body, :headers => { 'Content-Type' => 'application/json'} }))
34
37
  end
35
38
 
36
39
  # http://apidocs.natero.com/apidoc.html#Accounts_Retrieve%20custom%20metrics
@@ -94,7 +97,8 @@ class Natero::Account
94
97
  end
95
98
 
96
99
  def self.endpoint(*params)
97
- Natero.full_endpoint_uri('accounts', params)
100
+ params = ['accounts'] + params + [Natero.api_key_uri]
101
+ Natero.full_endpoint_uri(BASE_URI, VERSION_URI, params)
98
102
  end
99
103
 
100
104
  def initialize(params, raw_response = nil)
@@ -0,0 +1,106 @@
1
+ class Natero::Event
2
+ include HTTParty
3
+ include Serializable
4
+
5
+ BASE_URI = 'https://events.natero.com'
6
+ VERSION_URI = '/v1'
7
+
8
+ attr_reader :account_id, :user_id, :created_at, :session_id, :raw_response
9
+
10
+ ##############################################
11
+ ### Documentation for all endpoints ###
12
+ ### http://apidocs.natero.com/restapi.html ###
13
+ ##############################################
14
+
15
+ REQUIRED_PARAMS = %w{
16
+ account_id
17
+ user_id
18
+ created_at
19
+ session_id
20
+ }
21
+
22
+ private_class_method def self.post_event(body)
23
+ Natero::Response.new(post(endpoint, { :body => body.to_json, :headers => { 'Content-Type' => 'application/json' } }))
24
+ end
25
+
26
+ def self.identify_user(event, details)
27
+ action = 'identifyUser'
28
+
29
+ body = event.to_h
30
+ body.merge!({ 'action' => action })
31
+ body.merge!({ 'details' => details })
32
+
33
+ post_event(body)
34
+ end
35
+
36
+ def self.identify_account(event, details)
37
+ action = 'identifyAccount'
38
+
39
+ body = event.to_h
40
+ body.merge!({ 'action' => action })
41
+ body.merge!({ 'details' => details })
42
+
43
+ post_event(body)
44
+ end
45
+
46
+ def self.session_sync(event, active_duration)
47
+ action = 'sessionSync'
48
+
49
+ body = event.to_h
50
+ body.merge!({ 'action' => action })
51
+ body.merge!({ 'active_duration' => active_duration })
52
+
53
+ post_event(body)
54
+ end
55
+
56
+ def self.module_end(event, module_name, time_spent)
57
+ action = 'moduleEnd'
58
+
59
+ body = event.to_h
60
+ body.merge!({ 'action' => action })
61
+ body.merge!({ 'module' => module_name })
62
+ body.merge!({ 'time_spent' => time_spent })
63
+
64
+ post_event(body)
65
+ end
66
+
67
+ def self.feature(event, feature, module_name, total)
68
+ action = 'feature'
69
+
70
+ body = event.to_h
71
+ body.merge!({ 'action' => action })
72
+ body.merge!({ 'feature' => feature })
73
+ body.merge!({ 'module' => module_name })
74
+ body.merge!({ 'total' => total })
75
+
76
+ post_event(body)
77
+ end
78
+
79
+ def self.endpoint
80
+ Natero.full_endpoint_uri(
81
+ BASE_URI,
82
+ VERSION_URI,
83
+ Natero.configuration.event_auth_key,
84
+ Natero.configuration.event_api_key
85
+ )
86
+ end
87
+
88
+ def initialize(params, raw_response = nil)
89
+ missing = REQUIRED_PARAMS - params.keys
90
+
91
+ unless missing.empty?
92
+ raise ArgumentError.new("Missing required params #{missing.join(', ')}")
93
+ end
94
+
95
+ # Base properties - required
96
+ @account_id = params['account_id']
97
+ @user_id = params['user_id']
98
+ @created_at = params['created_at']
99
+ @session_id = params['session_id']
100
+ @raw_response = raw_response
101
+ end
102
+
103
+ def to_json
104
+ serialize
105
+ end
106
+ end
@@ -17,4 +17,8 @@ module Serializable
17
17
  instance_variable_set(key, obj[key])
18
18
  end
19
19
  end
20
+
21
+ def to_h
22
+ @@serializer.parse serialize
23
+ end
20
24
  end
@@ -1,3 +1,3 @@
1
1
  module Natero
2
- VERSION = "1.0.0"
2
+ VERSION = "1.1.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: natero
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Brown
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-06-06 00:00:00.000000000 Z
11
+ date: 2016-06-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: httparty
@@ -84,6 +84,7 @@ files:
84
84
  - bin/setup
85
85
  - lib/natero.rb
86
86
  - lib/natero/account.rb
87
+ - lib/natero/event.rb
87
88
  - lib/natero/response.rb
88
89
  - lib/natero/serializable.rb
89
90
  - lib/natero/version.rb