rjmetrics-client 0.4.0 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
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: