projector 1.0.3 → 1.0.4

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: e5207d8f41bed6a38021ab35f4593d04b30e3acc
4
- data.tar.gz: b1c1928c82e355a58e2bb3c1b30b93dd4f0a45d5
3
+ metadata.gz: f9985ae1b3561b3b85f5f7f7c403949c60e10736
4
+ data.tar.gz: c702dfc38afa37a3cdce2e02980b2ca9fe6eff7b
5
5
  SHA512:
6
- metadata.gz: e498f9b613d6562a6fe07d39ce8d5070c58c3a762f687fddc431af3e87e709b1cd9c792977b1fda040b54b61dd0fda72fe020e353085202de78225f95c8c776f
7
- data.tar.gz: 8568bd726be3187241a39508af57f23707a21d792ff758d1a7542295581c519825666ea90ec7ef6138090ee5dfee2f4060785fb0789035392140256f4f5b197a
6
+ metadata.gz: 75b9287b4b13a0d375ea9859c34f16c45c8be31689509a14ec3807759588cf84d3a48d05c2dafa17ae91671934c7cdaaeb4dd2e251a3678fad7782e95dc7339f
7
+ data.tar.gz: 954a2044bfdd3579d5fd3260c651f7dd65d8e9733962c76b71b46f50f53ac0817088f91e9c0c7e941ea7eacfb80011c0b48f63cabb6281069946472d3c951d81
@@ -25,14 +25,14 @@ If an error occurs, an exception will be thrown which the user can catch and ins
25
25
  The Projector SDK can encounter two types of errors when communicating with Projector's systems - Internal Server and Client Errors. All errors subclass from {Projector::Error}.
26
26
 
27
27
  ### Client Errors
28
- The Projector SDK has two types of Client Errors - {Projector::Unauthorized} and {Projector::BadRequest}. Making a request with safeguards for both can be done as follows:
28
+ The Projector SDK has two types of Client Errors - {Projector::Error::Unauthorized} and {Projector::Error::BadRequest}. Making a request with safeguards for both can be done as follows:
29
29
 
30
30
  ```
31
31
  begin
32
32
  Projector.register_end_user(end_user)
33
- rescue Projector::Unauthorized => auth_error
33
+ rescue Projector::Error::Unauthorized => auth_error
34
34
  puts auth_error.response_body
35
- rescue Projector::BadRequest => bad_request_error
35
+ rescue Projector::Error::BadRequest => bad_request_error
36
36
  puts bad_request_error.response_body
37
37
  else
38
38
  puts 'Unknown error'
@@ -45,7 +45,7 @@ These type of errors can happen for a number of reasons; our servers might be at
45
45
  ```
46
46
  begin
47
47
  Projector.register_end_user(end_user)
48
- rescue Projector::InternalServerError => server_error
48
+ rescue Projector::Error::InternalServerError => server_error
49
49
  if server_error.retry_after
50
50
  sleep server_error.retry_after
51
51
  else
@@ -59,7 +59,7 @@ You can retry repeatedly but if the error does not eventually clear up reach out
59
59
  ```
60
60
  begin
61
61
  Projector.register_end_user(end_user)
62
- rescue Projector::InternalServerError => server_error
62
+ rescue Projector::Error::InternalServerError => server_error
63
63
  # If the error does not recover, notify Projector including the Request Id
64
64
  puts server_error.request_id
65
65
  end
data/Rakefile CHANGED
@@ -23,10 +23,12 @@ desc "Publish SDK docs to GitHub Pages"
23
23
  task :publish_docs do
24
24
  system("set -x; bundle exec yardoc") or abort
25
25
  system("set -x; mv -v ./doc /tmp ") or abort
26
+ system("set -x; mv ./vendor /tmp") or abort # move the vendor directory to tmp for the moment
26
27
  system("set -x; git checkout gh-pages ") or abort
27
28
  system("set -x; cp -r /tmp/doc/* . ") or abort
28
29
  system("set -x; git add . ") or abort
29
30
  system("set -x; git commit --all -m 'Update docs' ") or abort
30
31
  system("set -x; git checkout master ") or abort
32
+ system("set -x; mv /tmp/vendor .") or abort # move the vendor directory back after we're done
31
33
  system("git push origin gh-pages")
32
34
  end
data/circle.yml CHANGED
@@ -1,6 +1,6 @@
1
1
  machine:
2
2
  ruby:
3
- version: 2.2.3
3
+ version: 2.3.1
4
4
 
5
5
  dependencies:
6
6
  pre:
@@ -42,6 +42,7 @@ module Projector
42
42
  end
43
43
 
44
44
  # Sets the logger instance for the Projector SDK
45
+ # @return [Logger]
45
46
  def logger=(x)
46
47
  @logger = x
47
48
  end
@@ -14,8 +14,8 @@ module Projector
14
14
  # tags: ['likes_dogs']
15
15
  # }
16
16
  # Projector.register_end_user(end_user)
17
- # @raise {Projector::Unauthorized}
18
- # @raise {Projector::BadRequest}
17
+ # @raise {Projector::Error::Unauthorized}
18
+ # @raise {Projector::Error::BadRequest}
19
19
  def register_end_user(end_user)
20
20
  # If a hash is passed, use it to populate a user object
21
21
  if end_user.instance_of?(Hash)
@@ -34,8 +34,8 @@ module Projector
34
34
  # @param [Array] tags an array of tags to apply to the user
35
35
  # @example Update a user's tags
36
36
  # Projector.set_end_user_tags('51', ['likes_dogs', 'has_dog'])
37
- # @raise {Projector::Unauthorized}
38
- # @raise {Projector::BadRequest}
37
+ # @raise {Projector::Error::Unauthorized}
38
+ # @raise {Projector::Error::BadRequest}
39
39
  # @return [Hash]
40
40
  def set_end_user_tags(id, tags)
41
41
  user = Projector::EndUser.new(id: id, tags: tags)
@@ -47,7 +47,7 @@ module Projector
47
47
  # @param [Hash] event a hash of the event object
48
48
  # @option event [String] :id (SecureRandom.uuid) the ID the event
49
49
  # @option event [String] :event_key the event key for this type of event
50
- # @option event [String] :event_time (Time.now) the event time in ms from epoch for this event
50
+ # @option event [Number] :event_time ((Time.now.to_f * 1000).to_i) the event time in ms from epoch for this event
51
51
  # @option event [Hash] :target the recipient or recipients of the event
52
52
  # @option event [Hash] :event_context data for use in delivery rules and notification alert templates at Projector
53
53
  # @option event [Hash] :payload JSON data properties to be delivered on the event (deep links, metadata, etc)
@@ -67,9 +67,9 @@ module Projector
67
67
  # target: {tags: ['likes_dogs']}
68
68
  # }
69
69
  # Projector.deliver_event(event)
70
- # @raise {Projector::InvalidEvent}
71
- # @raise {Projector::Unauthorized}
72
- # @raise {Projector::BadRequest}
70
+ # @raise {Projector::Error::InvalidEvent}
71
+ # @raise {Projector::Error::Unauthorized}
72
+ # @raise {Projector::Error::BadRequest}
73
73
  # @return [Hash]
74
74
  def deliver_event(event)
75
75
  # Create an Event instance if the parameter is a Hash.
@@ -15,7 +15,7 @@ module Projector
15
15
  # If you wish to manually configure the client, create an initializer and use the {Projector::Client.configure}
16
16
  # block to set properties as needed.
17
17
  #
18
- # @example Manually configuring the Proejctor Client
18
+ # @example Manually configuring the Projector Client
19
19
  # require 'projector'
20
20
  # Projector::Client.configure do |client|
21
21
  # client[:host] = 'https://api.projector.com'
@@ -25,9 +25,11 @@ module Projector
25
25
  include Projector::ApiMethods
26
26
  include Projector::Transport::HTTP
27
27
 
28
- attr_accessor :token, :result_format
28
+ # @return [String] The API token for your application
29
+ attr_accessor :token
29
30
 
30
31
  # The current configuration parameters for all clients
32
+ # @return [Hash]
31
33
  def self.options
32
34
  @options ||= {
33
35
  host: ENV['PROJECTOR_API_HOST'] || 'https://api.projector.com'
@@ -37,6 +39,7 @@ module Projector
37
39
  # Replaces the global Projector client options
38
40
  #
39
41
  # @param [Hash] val the parameters to store
42
+ # @return [Hash]
40
43
  def self.options=(val)
41
44
  @options = val
42
45
  end
@@ -44,6 +47,7 @@ module Projector
44
47
  # Configure the global Projector client options using a block
45
48
  #
46
49
  # @yield [Hash] a hash of configuration values for the Projector Client
50
+ # @return [Hash]
47
51
  def self.configure
48
52
  yield options
49
53
  end
@@ -51,7 +55,7 @@ module Projector
51
55
  # Initialize a new client.
52
56
  #
53
57
  # @param [Hash] options
54
- # @option options [String] :access_token The API access token
58
+ # @option options [String] :token The API access token
55
59
  # @option options [String] :host The API host
56
60
  def initialize(options = {})
57
61
  options = self.class.options.merge(options)
@@ -61,6 +65,7 @@ module Projector
61
65
  end
62
66
 
63
67
  # The Projector API Host
68
+ # @return [String]
64
69
  def host
65
70
  @options[:host]
66
71
  end
@@ -1,13 +1,17 @@
1
1
  module Projector
2
2
  # Internally represents an End User in your application.
3
+ # @api private
3
4
  class EndUser
4
- attr_accessor :id, :tags
5
+ # @return [String] The user's ID in your application
6
+ attr_accessor :id
7
+ # @return [Array] an array of tags to apply to the user
8
+ attr_accessor :tags
5
9
 
6
10
  # @param [Hash] params Properties for a user
7
11
  # @option params [String] :id the id of the user in your application
8
12
  # @option params [Array] :tags an array of tags to apply to the user
9
13
  def initialize(params = {})
10
- raise Projector::InvalidEndUser.new("Invalid end user, id missing") if params[:id].nil?
14
+ raise Projector::Error::InvalidEndUser.new("Invalid end user, id missing") if params[:id].nil?
11
15
  if params.instance_of?(Hash)
12
16
  params.each do |k, v|
13
17
  self.send("#{k}=", v) if self.respond_to?("#{k}=")
@@ -1,7 +1,9 @@
1
1
  module Projector
2
2
  # Wraps all requests to the Projector API in an envelope specifying data as an explicit parameter.
3
+ # @api private
3
4
  class Envelope
4
- attr_accessor :schema, :data
5
+ # @return [Hash] data to be delivered to the Projector API
6
+ attr_accessor :data
5
7
 
6
8
  # @param [Object] data the data hash or array containing parameters for the API call
7
9
  def initialize(data)
@@ -15,8 +17,9 @@ module Projector
15
17
  end
16
18
 
17
19
  # Serializes the envelope to the correct Projector-defined envelope hash format
20
+ # @return [Hash]
18
21
  def to_hash(params = {})
19
- raise Projector::InvalidEnvelope unless @data
22
+ raise Projector::Error::InvalidEnvelope unless @data
20
23
  {
21
24
  data: payload
22
25
  }
@@ -5,53 +5,60 @@ module Projector
5
5
  attr_accessor :request
6
6
  # The response object (if present)
7
7
  attr_accessor :response
8
- # The http response body, if present
8
+ # @return [Hash] The http JSON response body, if present
9
9
  attr_accessor :response_body
10
- # The Projector API request id
10
+ # @return [String] The Projector API request ID
11
11
  attr_accessor :request_id
12
- end
13
12
 
14
- # Raised when Projector returns a 400 HTTP status code.
15
- class BadRequest < Error; end
13
+ # Raised when Projector returns a 400 HTTP status code.
14
+ class BadRequest < Error; end
16
15
 
17
- # Raised when Projector returns a 401 HTTP status code.
18
- class Unauthorized < Error; end
16
+ # Raised when Projector returns a 401 HTTP status code.
17
+ class Unauthorized < Error; end
19
18
 
20
- # Raised when Projector returns a 403 HTTP status code.
21
- class Forbidden < Error; end
19
+ # Raised when Projector returns a 403 HTTP status code.
20
+ class Forbidden < Error; end
22
21
 
23
- # Raised when Projector returns a 404 HTTP status code.
24
- class NotFound < Error; end
22
+ # Raised when Projector returns a 404 HTTP status code.
23
+ class NotFound < Error; end
25
24
 
26
- # Raised when Projector returns a 406 HTTP status code.
27
- class NotAcceptable < Error; end
25
+ # Raised when Projector returns a 406 HTTP status code.
26
+ class NotAcceptable < Error; end
28
27
 
29
- # Raised when Projector returns a 422 HTTP status code.
30
- class UnprocessableEntity < Error; end
28
+ # Raised when Projector returns a 422 HTTP status code.
29
+ class UnprocessableEntity < Error; end
31
30
 
32
- # Raised when Projector returns a 500 HTTP status code.
33
- class InternalServerError < Error;
34
- attr_accessor :retry_after
35
- end
31
+ # Raised when Projector returns a 500 HTTP status code.
32
+ class InternalServerError < Error;
33
+ # @return [Number] The time in seconds to wait before retrying this request
34
+ attr_accessor :retry_after
35
+ end
36
36
 
37
- # Raised when Projector returns a 501 HTTP status code.
38
- class NotImplemented < Error; end
37
+ # Raised when Projector returns a 501 HTTP status code.
38
+ class NotImplemented < Error; end
39
39
 
40
- # Raised when Projector returns a 502 HTTP status code.
41
- class BadGateway < Error; end
40
+ # Raised when Projector returns a 502 HTTP status code.
41
+ class BadGateway < Error; end
42
42
 
43
- # Raised when Projector returns a 503 HTTP status code.
44
- class ServiceUnavailable < Error; end
43
+ # Raised when Projector returns a 503 HTTP status code.
44
+ class ServiceUnavailable < Error; end
45
45
 
46
- # Raised when a unique ID is required but not provided.
47
- class UniqueIDRequired < Error; end
46
+ # Raised when a unique ID is required but not provided.
47
+ class UniqueIDRequired < Error; end
48
48
 
49
- # Raised when an invalid End User is sumbitted to the Projector API.
50
- class InvalidEndUser < StandardError; end
49
+ # Raised when an invalid End User is sumbitted to the Projector API.
50
+ class InvalidEndUser < Error; end
51
51
 
52
- # Raised when an invalid event is submitted to the Projector API.
53
- class InvalidEvent < StandardError; end
52
+ # Raised when an invalid event is submitted to the Projector API.
53
+ class InvalidEvent < Error; end
54
54
 
55
- # Raised when an invalid envelope is submitted to the Projector API.
56
- class InvalidEnvelope < StandardError; end
55
+ # Raised when an invalid envelope is submitted to the Projector API.
56
+ class InvalidEnvelope < Error; end
57
+
58
+ # Raised when the HTTP client follows too many HTTP redirects.
59
+ class TooManyRedirects < Error
60
+ # @return [Number] The redirect count that caused this error
61
+ attr_accessor :redirect_count
62
+ end
63
+ end
57
64
  end
@@ -2,11 +2,12 @@ module Projector
2
2
  require 'securerandom'
3
3
 
4
4
  # Internally represents an event being sent to the Projector API.
5
+ # @api private
5
6
  class Event
6
7
 
7
8
  # @param [Hash] params a hash of properties to send with the event
8
9
  # @option params [String] id (SecureRandom.uuid) the unique identifier for this event in your system
9
- # @option params [Number] event_time (Time.now) the ms since epoch for this event
10
+ # @option params [Number] event_time ((Time.now.to_f * 1000).to_i) the ms since epoch for this event
10
11
  # @option params [Hash] event_context data providing context for the event. Used in delivery rules, templates, and more at Projector.
11
12
  # @option params [Hash] target containing either an *end_users* or *tags* key and a corresponding hash of values.
12
13
  def initialize(params)
@@ -9,30 +9,30 @@ module Projector
9
9
  require 'json'
10
10
  require 'projector/error'
11
11
 
12
- # Maximum URI redrects to follow before failing.
13
- MAX_REDIRECTS = 2
14
-
15
- # Status code to exception map.
16
- ERROR_MAP = {
17
- 400 => Projector::BadRequest,
18
- 401 => Projector::Unauthorized,
19
- 403 => Projector::Forbidden,
20
- 404 => Projector::NotFound,
21
- 406 => Projector::NotAcceptable,
22
- 422 => Projector::UnprocessableEntity,
23
- 500 => Projector::InternalServerError,
24
- 501 => Projector::InternalServerError,
25
- 502 => Projector::InternalServerError,
26
- 503 => Projector::InternalServerError
27
- }
28
-
29
12
  [:get, :post, :put, :delete, :patch].each do |method|
30
13
  define_method method do |*args|
31
14
  json_request(method, *args)
32
15
  end
33
16
  end
34
17
 
35
- protected
18
+ private
19
+
20
+ # Maximum URI redrects to follow before failing.
21
+ MAX_REDIRECTS = 2
22
+
23
+ # Status code to exception map.
24
+ ERROR_MAP = {
25
+ 400 => Projector::Error::BadRequest,
26
+ 401 => Projector::Error::Unauthorized,
27
+ 403 => Projector::Error::Forbidden,
28
+ 404 => Projector::Error::NotFound,
29
+ 406 => Projector::Error::NotAcceptable,
30
+ 422 => Projector::Error::UnprocessableEntity,
31
+ 500 => Projector::Error::InternalServerError,
32
+ 501 => Projector::Error::InternalServerError,
33
+ 502 => Projector::Error::InternalServerError,
34
+ 503 => Projector::Error::InternalServerError
35
+ }
36
36
 
37
37
  # Makes an HTTP Request
38
38
  #
@@ -76,7 +76,7 @@ module Projector
76
76
 
77
77
  # Make sure we aren't in a giant redirect loop
78
78
  if redirect_count >= MAX_REDIRECTS
79
- err = TooManyRedirectsError.new
79
+ err = Projector::Error::TooManyRedirects.new
80
80
  err.request = request
81
81
  err.response = response
82
82
  err.redirect_count = redirect_count
@@ -238,12 +238,7 @@ module Projector
238
238
  end
239
239
  end
240
240
  end
241
-
242
- # Raised when the HTTP client follows too many HTTP redirects
243
- class TooManyRedirectsError < Projector::Error
244
- # The redirect count that caused this error
245
- attr_accessor :redirect_count
246
- end
241
+ private_constant :Response
247
242
  end
248
243
  end
249
244
  end
@@ -1,6 +1,6 @@
1
1
  module Projector
2
2
  # Current SDK Version
3
- VERSION = "1.0.3"
3
+ VERSION = "1.0.4"
4
4
 
5
5
  # Current API Version
6
6
  API_VERSION = 1
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: projector
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.3
4
+ version: 1.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Projector
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-07-12 00:00:00.000000000 Z
11
+ date: 2016-07-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: net-http-persistent
@@ -88,3 +88,4 @@ signing_key:
88
88
  specification_version: 4
89
89
  summary: Ruby SDK for interacting with the Projector SDK
90
90
  test_files: []
91
+ has_rdoc: