analytics-psw 0.3.2 → 0.3.3

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: 96c6d8dedbbe05d08979926ec65355ec8135db01
4
- data.tar.gz: ae99b561a809b3e975d3507fb92c8dc717ec9e77
3
+ metadata.gz: c5bd2ac49dc5a4f6a747f7ee132c50bc7d5f7fdb
4
+ data.tar.gz: cecfcc3fb2835f8ec0063208699444d3a323a7bc
5
5
  SHA512:
6
- metadata.gz: ea389b6047349284da4c4926f891a36f75b345779302c16ec48055561246f3a41b96afb62e53cb9af381856f556aacfb3f1f0e048fbec4f57c968f83ec1d1838
7
- data.tar.gz: 979d7eefcf976b5b20a0f9e1bd23dcfad0948f0dd729262a85b0eec3ef2d8d6bfc18233546eb794d077d3e5dede1fa5633287bf198c88aca0e92421d5a114b39
6
+ metadata.gz: 3ba8d918d1c2bd5d55afd34f23b1f707aa10560500c798db71905c51fcf9ec3e44820a4b8f40781f54525c235132def794cbf8c5ed0d637155e36308054478cf
7
+ data.tar.gz: e837e674a81bee0d9768d43d65f8a78d8be9b7e525feb27b3d52c406333313800198e7ba99e81348090cdd104be23052b47e32c0858ffb83ec265b216ee0cadc
data/lib/analytics-psw.rb CHANGED
@@ -10,6 +10,7 @@ require 'analytics-psw/events'
10
10
  require 'analytics-psw/dimension_properties'
11
11
  require 'analytics-psw/dimensions'
12
12
  require 'analytics-psw/customers'
13
+ require 'analytics-psw/utilities'
13
14
 
14
15
  module AnalyticsPSW
15
16
  class Analytics
@@ -20,15 +21,18 @@ module AnalyticsPSW
20
21
  AnalyticsPSW::EventTypes,
21
22
  AnalyticsPSW::Events,
22
23
  AnalyticsPSW::Dimensions,
23
- AnalyticsPSW::DimensionProperties
24
+ AnalyticsPSW::DimensionProperties,
25
+ AnalyticsPSW::Utilities
24
26
 
25
27
  attr_accessor :service_location
26
28
 
27
29
  def initialize(opts = {})
28
30
  set_vars_from_opts(opts)
29
31
  @conn = faraday_connection
30
- update_token if @client_id
32
+ update_token if @client_id && @client_secret
31
33
  @service_location = "#{@server_url}/services/#{@service_name}"
34
+ resp = http_request(:get, @service_location)
35
+ raise 'The service name provided does not appear to be valid' unless resp.status == 200
32
36
  find_or_create_event_types
33
37
  find_or_create_dimensions(@dimensions) if @dimensions
34
38
  end
@@ -46,144 +50,5 @@ module AnalyticsPSW
46
50
  @client_id = opts['client_id']
47
51
  @client_secret = opts['client_secret']
48
52
  end
49
-
50
- def update_token
51
- url = "#{@server_url}/oauth/token?client_id=#{@client_id}&client_secret=#{@client_secret}"
52
- raw = post_json(url, 'token', {})
53
- parse_raw = parse_json_response(raw)
54
- resp = parse_raw['body']
55
- @token = resp['access_token']
56
- end
57
-
58
- def get_json(url, params = {})
59
- headers = @token ? {'Authorization' => "Bearer #{@token}"} : nil
60
- @conn.get(url, params, headers)
61
- end
62
-
63
- def multi_get_json(service_location, query_parameters)
64
- results = []
65
-
66
- EventMachine.run do
67
- multi = EventMachine::MultiRequest.new
68
-
69
- connection_opts = {}
70
- connection_opts = {proxy: {host: @proxy.sub(/^https?\:\/\//, ''), port: 80}} if @proxy.present?
71
-
72
- query_parameters.each_with_index do |param, idx|
73
- http = EventMachine::HttpRequest.new(service_location, connection_opts)
74
- req = http.get query: param, head: {'Authorization' => "Bearer #{@token}"}
75
- multi.add idx, req
76
- end
77
-
78
- multi.callback do
79
- response = multi.responses[:callback]
80
- error = multi.responses[:errback]
81
- EventMachine.stop
82
-
83
- (0..query_parameters.size-1).each do |idx|
84
- results += [multi_parse_json_response(response[idx])] if response[idx].present?
85
- results += [multi_parse_json_response(error[idx])] if error[idx].present?
86
- end
87
- end
88
- end
89
-
90
- results
91
- end
92
-
93
- def post_json(url, object_type, metadata)
94
- http_json(:post, url, object_type, metadata)
95
- end
96
-
97
- def put_json(url, object_type, metadata)
98
- http_json(:put, url, object_type, metadata)
99
- end
100
-
101
- def http_json(http_method, url, object_type, metadata)
102
- json_object = create_json_object(object_type, metadata)
103
- json_block = ->(req) do
104
- req.url url
105
- req.headers['Content-Type'] = 'application/json'
106
- req.headers['Authorization']= "Bearer #{@token}" if @token
107
- req.body = json_object
108
- end
109
- @conn.send(http_method, &json_block)
110
- end
111
-
112
- def create_json_object(object_type, metadata = {})
113
- {object_type => metadata}.to_json
114
- end
115
-
116
- def create_metadata(hashmap)
117
- hashmap.reject { |k,v| v == '' }
118
- end
119
-
120
- def find_or_create_event_types
121
- all_event_types = get_all_events
122
- new_events = @event_types - all_event_types
123
- new_events.each do |event_type|
124
- create_event_type(event_type)
125
- end
126
- @event_types |= all_event_types
127
- end
128
-
129
- def find_or_create_dimensions(dimensions)
130
- all_dimensions = get_all_dimension_names
131
- dimensions.each do |dimension|
132
- dimension.each do |name, data_type|
133
- unless all_dimensions.include?(name)
134
- create_dimension(name, data_type)
135
- all_dimensions << name
136
- end
137
- end
138
- end
139
- @dimensions = all_dimensions
140
- end
141
-
142
- def get_all_events
143
- event_types = list_event_types['body']['event_types']
144
- event_types ? event_types.map{|e| e['name']} : []
145
- end
146
-
147
- def get_all_dimension_names
148
- dimensions = list_dimensions['body']['dimensions']
149
- dimensions ? dimensions.map { |d| d['name']} : []
150
- end
151
-
152
- def parse_json_response(json_response)
153
- parsed_response = {}
154
- parsed_response['status'] = json_response.status if json_response.status.present?
155
-
156
- if [200, 201, 202].include?(json_response.status)
157
- parsed_response['body'] = JSON.parse(json_response.body) if json_response.body.present?
158
- parsed_response['location'] = json_response.headers['location'] if json_response.headers.present? && json_response.headers['location']
159
- else
160
- parsed_response['body'] = {}
161
- parsed_response['error_message'] = json_response.body
162
- end
163
-
164
- parsed_response
165
- end
166
-
167
- def multi_parse_json_response(response)
168
- parsed_response = {}
169
- parsed_response['status'] = response.response_header.present? ? response.response_header.status : 500
170
-
171
- if [200, 201, 202].include?(parsed_response['status'])
172
- parsed_response['body'] = JSON.parse response.response if response.response.present?
173
- parsed_response['location'] = response.headers.location if response.headers.present? && response.headers.location.present?
174
- else
175
- parsed_response['body'] = {}
176
- parsed_response['error_message'] = response.error if response.error.present?
177
- end
178
- parsed_response
179
- end
180
-
181
- def delete_resource(url)
182
- @conn.delete (url + "?access_token=#{@token}")
183
- end
184
-
185
- def faraday_connection
186
- @proxy ? Faraday.new(@server_url, {proxy: {uri: @proxy}}) : Faraday.new(@server_url)
187
- end
188
53
  end
189
54
  end
@@ -1,7 +1,7 @@
1
1
  module AnalyticsPSW
2
2
  module Customers
3
3
  def list_customers
4
- resp = get_json("#{@service_location}/customers")
4
+ resp = http_request(:get, "#{@service_location}/customers")
5
5
  parse_json_response(resp)
6
6
  end
7
7
  end
@@ -1,24 +1,26 @@
1
1
  module AnalyticsPSW
2
2
  module DimensionProperties
3
3
  def list_dimension_properties(dimension_name)
4
- resp = get_json("#{@service_location}/dimensions/#{dimension_name}/properties")
4
+ resp = http_request(:get, "#{@service_location}/dimensions/#{dimension_name}/properties")
5
5
  parse_json_response(resp)
6
6
  end
7
7
 
8
8
  def show_dimension_properties(dimension_name, dimension_value)
9
- resp = get_json("#{@service_location}/dimensions/#{dimension_name}/properties/#{dimension_value}")
9
+ resp = http_request(:get, "#{@service_location}/dimensions/#{dimension_name}/properties/#{dimension_value}")
10
10
  parse_json_response(resp)
11
11
  end
12
12
 
13
13
  def create_dimension_properties(dimension_name, dimension_value, properties = {})
14
14
  metadata = create_dimension_properties_metadata(dimension_value, properties)
15
- response = post_json("#{@service_location}/dimensions/#{dimension_name}/properties/#{dimension_value}", 'dimension_property', metadata)
15
+ body = create_json_body('dimension_property', metadata)
16
+ response = http_request(:post, "#{@service_location}/dimensions/#{dimension_name}/properties/#{dimension_value}", nil, body)
16
17
  parse_json_response(response)
17
18
  end
18
19
 
19
20
  def update_dimension_properties(dimension_name, dimension_value, properties = {})
20
21
  metadata = create_dimension_properties_metadata(dimension_value, properties)
21
- response = put_json("#{@service_location}/dimensions/#{dimension_name}/properties/#{dimension_value}", 'dimension_property', metadata)
22
+ body = create_json_body('dimension_property', metadata)
23
+ response = http_request(:put, "#{@service_location}/dimensions/#{dimension_name}/properties/#{dimension_value}", nil, body)
22
24
  parse_json_response(response)
23
25
  end
24
26
 
@@ -2,26 +2,45 @@ module AnalyticsPSW
2
2
  module Dimensions
3
3
 
4
4
  def create_dimension(name, data_type, units = '', description = '')
5
- metadata = create_metadata({:name => name.to_s, :description => description, :data_type => data_type, :units => units})
6
- resp = post_json("#{@service_location}/dimensions", "dimension", metadata)
5
+ body = create_json_body('dimension', {:name => name.to_s, :description => description, :data_type => data_type, :units => units})
6
+ resp = http_request(:post, "#{@service_location}/dimensions", nil, body)
7
7
  @dimensions |= [name.to_s] if resp.status && [200, 201, 202].include?(resp.status)
8
8
  parse_json_response(resp)
9
9
  end
10
10
 
11
11
  def list_dimensions
12
- resp = get_json("#{@service_location}/dimensions")
12
+ resp = http_request(:get, "#{@service_location}/dimensions")
13
13
  parse_json_response(resp)
14
14
  end
15
15
 
16
16
  def show_dimension_resources(dimension_name)
17
- resp = get_json("#{@service_location}/dimensions/#{dimension_name}")
17
+ resp = http_request(:get, "#{@service_location}/dimensions/#{dimension_name}")
18
18
  parse_json_response(resp)
19
19
  end
20
20
 
21
21
  def show_dimension_metadata(dimension_name)
22
- resp = get_json("#{@service_location}/dimensions/#{dimension_name}/metadata")
22
+ resp = http_request(:get, "#{@service_location}/dimensions/#{dimension_name}/metadata")
23
23
  parse_json_response(resp)
24
24
  end
25
25
 
26
+ private
27
+
28
+ def find_or_create_dimensions(dimensions)
29
+ all_dimensions = get_dimension_names
30
+ dimensions.each do |dimension|
31
+ dimension.each do |name, data_type|
32
+ unless all_dimensions.include?(name)
33
+ create_dimension(name, data_type)
34
+ all_dimensions << name
35
+ end
36
+ end
37
+ end
38
+ @dimensions = all_dimensions
39
+ end
40
+
41
+ def get_dimension_names
42
+ dimensions = list_dimensions['body']['dimensions']
43
+ dimensions ? dimensions.map { |d| d['name']} : []
44
+ end
26
45
  end
27
46
  end
@@ -2,21 +2,37 @@ module AnalyticsPSW
2
2
  module EventTypes
3
3
 
4
4
  def create_event_type(name, description = "")
5
- metadata = create_metadata({:name => name.to_s, :description => description})
6
- resp = post_json("#{@service_location}/event_types", "event_type", metadata)
5
+ body = create_json_body('event_type', {:name => name.to_s, :description => description})
6
+ resp = http_request(:post, "#{@service_location}/event_types", nil, body)
7
7
  @event_types |= [name.to_s] if resp.status && [200, 201, 202].include?(resp.status)
8
8
  parse_json_response(resp)
9
9
  end
10
10
 
11
11
  def list_event_types
12
- resp = get_json("#{@service_location}/event_types")
12
+ resp = http_request(:get, "#{@service_location}/event_types")
13
13
  parse_json_response(resp)
14
14
  end
15
15
 
16
16
  def show_event_type(event_name)
17
- resp = get_json("#{@service_location}/event_types/#{event_name.to_s}")
17
+ resp = http_request(:get, "#{@service_location}/event_types/#{event_name.to_s}")
18
18
  parse_json_response(resp)
19
19
  end
20
20
 
21
+ private
22
+
23
+ def find_or_create_event_types
24
+ all_event_types = get_event_names
25
+ new_events = @event_types - all_event_types
26
+ new_events.each do |event_type|
27
+ create_event_type(event_type)
28
+ end
29
+ @event_types |= all_event_types
30
+ end
31
+
32
+ def get_event_names
33
+ event_types = list_event_types['body']['event_types']
34
+ event_types ? event_types.map{|e| e['name']} : []
35
+ end
36
+
21
37
  end
22
38
  end
@@ -5,7 +5,8 @@ module AnalyticsPSW
5
5
  return invalid_event_type_response unless event_type_exists? event_type
6
6
  return invalid_metadata_response unless dimensions_exist? metadata
7
7
  metadata[:event_type] = event_type.to_s
8
- parse_json_response(post_json("#{@service_location}/events", 'event', metadata))
8
+ body = create_json_body('event', metadata)
9
+ parse_json_response(http_request(:post, "#{@service_location}/events", nil, body))
9
10
  end
10
11
 
11
12
  private
@@ -5,7 +5,7 @@ module AnalyticsPSW
5
5
  module Reports
6
6
 
7
7
  def query_analytics(query_parameters)
8
- raw_report = get_json("#{@service_location}/reports/query.json", query_parameters)
8
+ raw_report = http_request(:get, "#{@service_location}/reports/query.json", query_parameters)
9
9
  parsed_report = parse_json_response(raw_report)
10
10
  create_analytics_report(parsed_report)
11
11
  end
@@ -20,28 +20,29 @@ module AnalyticsPSW
20
20
 
21
21
  def create_report(name, query_parameters)
22
22
  query_parameters[:name] = name.to_s
23
- resp = post_json("#{@service_location}/reports", 'report', query_parameters )
23
+ body = create_json_body('report', query_parameters)
24
+ resp = http_request(:post, "#{@service_location}/reports", nil, body)
24
25
  parse_json_response(resp)
25
26
  end
26
27
 
27
28
  def list_reports
28
- resp = get_json("#{@service_location}/reports")
29
+ resp = http_request(:get, "#{@service_location}/reports")
29
30
  parse_json_response(resp)
30
31
  end
31
32
 
32
33
  def report_criteria(report_name)
33
- resp = get_json("#{@service_location}/reports/#{report_name.to_s}/criteria")
34
+ resp = http_request(:get, "#{@service_location}/reports/#{report_name}/criteria")
34
35
  parse_json_response(resp)
35
36
  end
36
37
 
37
38
  def run_report(report_name, where_criteria = {})
38
- raw_report = get_json("#{@service_location}/reports/#{report_name.to_s}/results", where_criteria)
39
+ raw_report = http_request(:get, "#{@service_location}/reports/#{report_name}/results", where_criteria)
39
40
  parsed_report = parse_json_response(raw_report)
40
41
  create_analytics_report(parsed_report)
41
42
  end
42
43
 
43
44
  def delete_report(report_name)
44
- resp = delete_resource("#{@service_location}/reports/#{report_name.to_s}")
45
+ resp = http_request(:delete, "#{@service_location}/reports/#{report_name}")
45
46
  parse_json_response(resp)
46
47
  end
47
48
 
@@ -1,12 +1,12 @@
1
1
  module AnalyticsPSW
2
2
  module Services
3
3
  def show_service_resources(service_name)
4
- resp = get_json("/services/#{service_name.to_s}")
4
+ resp = http_request(:get, "/services/#{service_name.to_s}")
5
5
  parse_json_response(resp)
6
6
  end
7
7
 
8
8
  def show_service_metadata(service_name)
9
- resp = get_json("/services/#{service_name.to_s}/metadata")
9
+ resp = http_request(:get, "/services/#{service_name.to_s}/metadata")
10
10
  parse_json_response(resp)
11
11
  end
12
12
  end
@@ -0,0 +1,85 @@
1
+ module AnalyticsPSW
2
+ module Utilities
3
+ private
4
+
5
+ def update_token
6
+ url = "#{@server_url}/oauth/token?client_id=#{@client_id}&client_secret=#{@client_secret}"
7
+ raw = http_request(:post, url)
8
+ resp = parse_json_response(raw)
9
+ @token = resp['body']['access_token']
10
+ end
11
+
12
+ def faraday_connection
13
+ @proxy ? Faraday.new(@server_url, {proxy: {uri: @proxy}}) : Faraday.new(@server_url)
14
+ end
15
+
16
+ def http_request(http_method, url, params = nil, body = nil)
17
+ json_block = ->(req) do
18
+ req.url url
19
+ req.headers['Content-Type'] = 'application/json'
20
+ req.headers['Authorization']= "Bearer #{@token}" if @token
21
+ req.params = params if params
22
+ req.body = body if body
23
+ end
24
+ @conn.send(http_method, &json_block)
25
+ end
26
+
27
+ def multi_get_json(service_location, query_parameters)
28
+ results = []
29
+ EventMachine.run do
30
+ multi = EventMachine::MultiRequest.new
31
+ connection_opts = {}
32
+ connection_opts = {proxy: {host: @proxy.sub(/^https?\:\/\//, ''), port: 80}} if @proxy.present?
33
+ query_parameters.each_with_index do |param, idx|
34
+ http = EventMachine::HttpRequest.new(service_location, connection_opts)
35
+ req = http.get query: param, head: {'Authorization' => "Bearer #{@token}"}
36
+ multi.add idx, req
37
+ end
38
+ multi.callback do
39
+ response = multi.responses[:callback]
40
+ error = multi.responses[:errback]
41
+ EventMachine.stop
42
+ (0..query_parameters.size-1).each do |idx|
43
+ results += [multi_parse_json_response(response[idx])] if response[idx].present?
44
+ results += [multi_parse_json_response(error[idx])] if error[idx].present?
45
+ end
46
+ end
47
+ end
48
+ results
49
+ end
50
+
51
+ def create_json_body(type, metadata = {})
52
+ {type => metadata.reject { |k,v| v == '' }}.to_json
53
+ end
54
+
55
+ def parse_json_response(json_response)
56
+ parsed_response = {}
57
+ parsed_response['status'] = json_response.status if json_response.status.present?
58
+
59
+ if [200, 201, 202].include?(json_response.status)
60
+ parsed_response['body'] = JSON.parse(json_response.body) if json_response.body.present?
61
+ parsed_response['location'] = json_response.headers['location'] if json_response.headers.present? && json_response.headers['location']
62
+ else
63
+ parsed_response['body'] = {}
64
+ parsed_response['error_message'] = json_response.body
65
+ end
66
+
67
+ parsed_response
68
+ end
69
+
70
+ def multi_parse_json_response(response)
71
+ parsed_response = {}
72
+ parsed_response['status'] = response.response_header.present? ? response.response_header.status : 500
73
+
74
+ if [200, 201, 202].include?(parsed_response['status'])
75
+ parsed_response['body'] = JSON.parse response.response if response.response.present?
76
+ parsed_response['location'] = response.headers.location if response.headers.present? && response.headers.location.present?
77
+ else
78
+ parsed_response['body'] = {}
79
+ parsed_response['error_message'] = response.error if response.error.present?
80
+ end
81
+ parsed_response
82
+ end
83
+
84
+ end
85
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: analytics-psw
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2
4
+ version: 0.3.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lexmark International Technology S.A
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-08-12 00:00:00.000000000 Z
11
+ date: 2014-08-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -154,6 +154,7 @@ files:
154
154
  - lib/analytics-psw/events.rb
155
155
  - lib/analytics-psw/reports.rb
156
156
  - lib/analytics-psw/services.rb
157
+ - lib/analytics-psw/utilities.rb
157
158
  - lib/analytics_report.rb
158
159
  - lib/analytics_report_field.rb
159
160
  homepage: