rjmetrics-client 0.4.0 → 0.5.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,15 +1,7 @@
1
1
  ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- NjliNDE1YjI2NzUwMDc3Y2IzNGVhNmRhMjkwZDk0ZjMwZjk4NzVhMg==
5
- data.tar.gz: !binary |-
6
- ZGRhNjNjMTUzNTk3MDJkOGVkZjlhNDkzZWNhNzU5ZjA4YjRkOTlhMg==
2
+ SHA1:
3
+ metadata.gz: 17d4ec2cdea59b39c5945c6e960a6cf20f50609a
4
+ data.tar.gz: 31942dc32da373d613f89d9166fc46a16003dea5
7
5
  SHA512:
8
- metadata.gz: !binary |-
9
- ZmNmYWVkZGU1MTRjMTZiMTI3ZmJkY2MxMDBmZjY2MWQ3MjU4MDZmZjA3MDdl
10
- YmRiOTkyYjY2YzJiOGFhODczOTc0ODM3MTJiNTAxZmRlNWEwMTkzN2MzMzUz
11
- YTY0NzQ5YmE1ZDcwZjIxZjFjNjQyNGQ3NWVjNzQxNDc0Y2JiNzU=
12
- data.tar.gz: !binary |-
13
- YTUyMGZjNTYyOGQ0MTE3YmU4YzNiMTM3NDI4NTJhOGQ4OTQyNDYxN2ExMmMy
14
- Nzk2ODQyMTYyNzY0ZDE0NWI3MjI0OTgyZjk1NzA1N2RjZDU3NjFlNzVjYzRh
15
- MzNiM2YyM2NhNWZkYTc4ZmRkN2RkNWMyZjY5MTE4Y2I0ZmRmYjE=
6
+ metadata.gz: b1d848013b20153c79260f14bf0588cbc9c61a90c07297d240ded14da18eeaceb9d966cfdb9d5eaade0a6e9b4eb45d5a6065546f8b6a519869c3b7a63f2dcf79
7
+ data.tar.gz: 94c14efb7709725ab6470e027c86a9dfb2d8e80f5f70734090888d55ec9724fd49a8cfda3de8f38499d767bb44e638b61a0a882a31562db47e16a590bfeb0214
@@ -4,119 +4,125 @@ require 'rest_client'
4
4
  require 'json'
5
5
  require 'enumerator'
6
6
 
7
- class Client
8
-
9
- # default RJMetrics Data Import API url
10
- API_BASE = "https://connect.rjmetrics.com/v2"
11
- # RJMetrics Sandbox API url
12
- SANDBOX_BASE = "https://sandbox-connect.rjmetrics.com/v2"
13
- # Datapoints to push at a time
14
- BATCH_SIZE = 100
15
-
16
- # Constructs a Client instance if it receives valid arguments or will raise an ArgumentError.
17
- #
18
- # @param client_id [Integer] your RJMetrics Client ID
19
- # @param api_key [String] your RJMetrics API Key
20
- # @param timeout_in_seconds [Integer] seconds to wait for API responses or nil
21
- def initialize(client_id, api_key, timeout_in_seconds = 10)
22
- validateConstructorArgs(client_id, api_key, timeout_in_seconds)
23
- @client_id = client_id
24
- @api_key = api_key
25
- @timeout_in_seconds = timeout_in_seconds
26
- end
7
+ module RJMetrics
8
+
9
+ class Client
10
+
11
+
12
+ # default RJMetrics Data Import API url
13
+ API_BASE = "https://connect.rjmetrics.com/v2"
14
+ # RJMetrics Sandbox API url
15
+ SANDBOX_BASE = "https://sandbox-connect.rjmetrics.com/v2"
16
+ # Datapoints to push at a time
17
+ BATCH_SIZE = 100
18
+ # Timout Seconds
19
+ DEFAULT_TIMEOUT_SECONDS = 10
20
+
21
+ # Constructs a Client instance if it receives valid arguments or will raise an ArgumentError.
22
+ #
23
+ # @param client_id [Integer] your RJMetrics Client ID
24
+ # @param api_key [String] your RJMetrics API Key
25
+ # @param timeout_in_seconds [Integer] seconds to wait for API responses
26
+ def initialize(client_id, api_key, timeout_in_seconds = DEFAULT_TIMEOUT_SECONDS)
27
+ validateConstructorArgs(client_id, api_key, timeout_in_seconds)
28
+ @client_id = client_id
29
+ @api_key = api_key
30
+ @timeout_in_seconds = timeout_in_seconds
31
+ end
27
32
 
28
- # Checks if the provided Client ID and API Key are valid credentials by requesting from the RJMetrics API Sandbox.
29
- def authenticated?
30
- test_data = {:keys => [:id], :id => 1}
31
- begin
32
- pushData("test", test_data, SANDBOX_BASE)
33
- rescue InvalidRequestException
34
- return false
33
+ # Checks if the provided Client ID and API Key are valid credentials by requesting from the RJMetrics API Sandbox.
34
+ def authenticated?
35
+ test_data = {:keys => [:id], :id => 1}
36
+ begin
37
+ pushData("test", test_data, SANDBOX_BASE)
38
+ rescue InvalidRequestException
39
+ return false
40
+ end
41
+ return true
35
42
  end
36
- return true
37
- end
38
43
 
39
- # Sends data to RJMetrics Data Import API in batches of 100.
40
- #
41
- # @param table_name [String] the table name you wish to store the data
42
- # @param data [Hashamp] or Array of Hashmaps of data points that will get sent
43
- # @param url [String] Import API url or nil
44
- # @return [Array] results of each request to RJMetrics Data Import API
45
- def pushData(table_name, data, url = API_BASE)
46
- responses = Array.new
47
- validatePushDataArgs(table_name, data, url)
48
-
49
- if not data.is_a? Array
50
- data = Array.[](data)
44
+ # Sends data to RJMetrics Data Import API in batches of 100.
45
+ #
46
+ # @param table_name [String] the table name you wish to store the data
47
+ # @param data [Hashamp] or Array of Hashmaps of data points that will get sent
48
+ # @param url [String] Import API url
49
+ # @return [Array] results of each request to RJMetrics Data Import API
50
+ def pushData(table_name, data, url = API_BASE)
51
+ responses = Array.new
52
+ validatePushDataArgs(table_name, data, url)
53
+
54
+ if not data.is_a? Array
55
+ data = Array.[](data)
56
+ end
57
+
58
+ data.each_slice(BATCH_SIZE) {|batch_data|
59
+ responses << makePushDataAPICall(table_name, batch_data, url)
60
+ }
61
+ return responses
51
62
  end
52
63
 
53
- data.each_slice(BATCH_SIZE) {|batch_data|
54
- puts "pushing batch of #{batch_data.count} data points"
55
- responses << makePushDataAPICall(table_name, batch_data, url)
56
- }
57
- return responses
58
- end
64
+ private
59
65
 
60
- private
66
+ def validateConstructorArgs(client_id, api_key, timeout_in_seconds)
67
+ if not client_id.is_a? Integer or client_id <= 0
68
+ raise ArgumentError, "Invalid client ID: #{client_id} -- must be a positive integer."
69
+ end
61
70
 
62
- def validateConstructorArgs(client_id, api_key, timeout_in_seconds)
63
- if not client_id.is_a? Integer or client_id <= 0
64
- raise ArgumentError, "Invalid client ID: #{client_id} -- must be a positive integer."
65
- end
71
+ if not timeout_in_seconds.is_a? Integer or timeout_in_seconds <= 0
72
+ raise ArgumentError, "Invalid timeout: #{timeout_in_seconds} -- must be a positive integer."
73
+ end
66
74
 
67
- if not timeout_in_seconds.is_a? Integer or timeout_in_seconds <= 0
68
- raise ArgumentError, "Invalid timeout: #{timeout_in_seconds} -- must be a positive integer."
75
+ if not api_key.is_a? String
76
+ raise ArgumentError, "Invalid API key: #{api_key} -- must be a string."
77
+ end
69
78
  end
70
79
 
71
- if not api_key.is_a? String
72
- raise ArgumentError, "Invalid API key: #{api_key} -- must be a string."
73
- end
74
- end
80
+ def validatePushDataArgs(table_name, data, url)
81
+ if not data.is_a? Hash and not data.is_a? Array
82
+ raise ArgumentError, "Invalid data -- must be a valid Ruby Hash or Array."
83
+ end
75
84
 
76
- def validatePushDataArgs(table_name, data, url)
77
- if not data.is_a? Hash and not data.is_a? Array
78
- raise ArgumentError, "Invalid data -- must be a valid Ruby Hash or Array."
79
- end
85
+ if not table_name.is_a? String
86
+ raise ArgumentError, "Invalid table name: '#{table_name}' -- must be a string."
87
+ end
80
88
 
81
- if not table_name.is_a? String
82
- raise ArgumentError, "Invalid table name: '#{table_name}' -- must be a string."
89
+ if not url.is_a? String
90
+ raise ArgumentError, "Invalid url: '#{url}' -- must be a string."
91
+ end
83
92
  end
84
93
 
85
- if not url.is_a? String
86
- raise ArgumentError, "Invalid url: '#{url}' -- must be a string."
87
- end
88
- end
94
+ def makePushDataAPICall(table_name, data, url = API_BASE)
95
+ request_url = "#{url}/client/#{@client_id}/table/#{table_name}/data?apikey=#{@api_key}"
89
96
 
90
- def makePushDataAPICall(table_name, data, url = API_BASE)
91
- request_url = "#{url}/client/#{@client_id}/table/#{table_name}/data?apikey=#{@api_key}"
92
-
93
- begin
94
- response = RestClient.post(
95
- request_url,
96
- data.to_json,
97
- {
98
- :content_type => :json,
99
- :accept => :json,
100
- :timeout => @timeout_in_seconds
101
- }
102
- )
103
- return response
104
- rescue RestClient::Exception => error
105
97
  begin
106
- response = JSON.parse(error.response)
107
- raise InvalidRequestException,
108
- "The Import API returned: #{response['code']} #{response['message']}. Reasons: #{response['reasons']}"
109
- rescue JSON::ParserError, TypeError => e
110
- raise InvalidResponseException,
111
- "RestClientError: #{error.class}, With response: #{error.response}"
98
+ response = RestClient.post(
99
+ request_url,
100
+ data.to_json,
101
+ {
102
+ :content_type => :json,
103
+ :accept => :json,
104
+ :timeout => @timeout_in_seconds
105
+ }
106
+ )
107
+ return response
108
+ rescue RestClient::Exception => error
109
+ begin
110
+ response = JSON.parse(error.response)
111
+ raise InvalidRequestException,
112
+ "The Import API returned: #{response['code']} #{response['message']}. Reasons: #{response['reasons']}"
113
+ rescue JSON::ParserError, TypeError => json_parse_error
114
+ raise InvalidResponseException,
115
+ "RestClientError: #{error.class}, With response: #{error.response}"
116
+ end
112
117
  end
113
118
  end
114
- end
115
119
 
116
- class UnableToConnectException < RuntimeError
117
- end
118
- class InvalidRequestException < RuntimeError
119
- end
120
- class InvalidResponseException < RuntimeError
120
+ class UnableToConnectException < RuntimeError
121
+ end
122
+ class InvalidRequestException < RuntimeError
123
+ end
124
+ class InvalidResponseException < RuntimeError
125
+ end
126
+
121
127
  end
122
128
  end
@@ -1,10 +1,17 @@
1
+ require_relative 'rjmetrics-client/client'
2
+
1
3
  class RJMetricsClient
2
4
 
5
+ # Constructs a RJMetricsClient instance if it receives valid arguments or will raise an ArgumentError.
6
+ #
7
+ # @param client_id [Integer] your RJMetrics Client ID
8
+ # @param api_key [String] your RJMetrics API Key
9
+ # @param timeout_in_seconds [Integer] seconds to wait for API responses
3
10
  def initialize(client_id, api_key, timeout_in_seconds = 10)
4
- @client = Client.new(client_id, api_key, timeout_in_seconds)
11
+ @client = RJMetrics::Client.new(client_id, api_key, timeout_in_seconds)
5
12
 
6
13
  if not authenticated?
7
- raise Client::UnableToConnectException, "Connection failed. Please double check your credentials."
14
+ raise RJMetrics::Client::UnableToConnectException, "Connection failed. Please double check your credentials."
8
15
  end
9
16
  end
10
17
 
@@ -17,10 +24,9 @@ class RJMetricsClient
17
24
  #
18
25
  # @param table_name [String] the table name you wish to store the data
19
26
  # @param data [Hashamp] or Array of Hashmaps of data points that will get sent
27
+ # @param url [String] Import API url
20
28
  # @return [Array] results of each request to RJMetrics Data Import API
21
- def pushData(table_name, data)
22
- @client.pushData(table_name, data)
29
+ def pushData(table_name, data, url = RJMetrics::Client::API_BASE)
30
+ @client.pushData(table_name, data, url)
23
31
  end
24
32
  end
25
-
26
- require 'rjmetrics-client/client'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rjmetrics-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Owen Jones
@@ -14,56 +14,56 @@ dependencies:
14
14
  name: rest-client
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ! '>='
17
+ - - '>='
18
18
  - !ruby/object:Gem::Version
19
19
  version: 1.6.7
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ! '>='
24
+ - - '>='
25
25
  - !ruby/object:Gem::Version
26
26
  version: 1.6.7
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: json
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ! '>='
31
+ - - '>='
32
32
  - !ruby/object:Gem::Version
33
33
  version: 1.7.7
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ! '>='
38
+ - - '>='
39
39
  - !ruby/object:Gem::Version
40
40
  version: 1.7.7
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rspec
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ! '>'
45
+ - - '>'
46
46
  - !ruby/object:Gem::Version
47
47
  version: '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
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: yard
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ! '>'
59
+ - - '>'
60
60
  - !ruby/object:Gem::Version
61
61
  version: '0'
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
68
  version: '0'
69
69
  description: RJMetrics Data Import API Client Library
@@ -72,8 +72,8 @@ executables: []
72
72
  extensions: []
73
73
  extra_rdoc_files: []
74
74
  files:
75
- - lib/rjmetrics-client/client.rb
76
75
  - lib/rjmetrics_client.rb
76
+ - lib/rjmetrics-client/client.rb
77
77
  homepage: http://rjmetrics.com
78
78
  licenses:
79
79
  - Apache-2.0
@@ -84,18 +84,19 @@ require_paths:
84
84
  - lib
85
85
  required_ruby_version: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - ! '>='
87
+ - - '>='
88
88
  - !ruby/object:Gem::Version
89
89
  version: '0'
90
90
  required_rubygems_version: !ruby/object:Gem::Requirement
91
91
  requirements:
92
- - - ! '>='
92
+ - - '>='
93
93
  - !ruby/object:Gem::Version
94
94
  version: '0'
95
95
  requirements: []
96
96
  rubyforge_project:
97
- rubygems_version: 2.2.1
97
+ rubygems_version: 2.0.3
98
98
  signing_key:
99
99
  specification_version: 4
100
100
  summary: RJMetrics Data Import API Client Library
101
101
  test_files: []
102
+ has_rdoc: