analytics-psw 0.3.0 → 0.3.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c76464b815727cb3400f6bfbd23b2428617d8227
4
- data.tar.gz: 0f8917692695f60b4f3fd9ffd6da207e30397b37
3
+ metadata.gz: fc5f45c2fc5deddf6aaa8691267c0b9c35dc6dd1
4
+ data.tar.gz: 19c47b727954c89593d81699ae7e99abb12e7c6a
5
5
  SHA512:
6
- metadata.gz: 19412719111259a947b68218d18292b87105f57cb6b2d3118e5933ccccefd0d97cb53eef6ea22f932e8c904a594b48a61d566f9be883de4dc0a28a1ba9fd4f4b
7
- data.tar.gz: f59deb6b35004a6131bbeb0eef37fc69ec6deaa0a9feec450a43005ce88be2a6af224fde60775d6feff87634d2989a2ef87a41822f90f1bff5c10195fc261fcc
6
+ metadata.gz: 45d8663fca8091a4df8645a7a4924e7ff0a503453ac08aec9e2a1ad4912349604cbbf95b072e400c045471ddad5392ef5e43ba6dca21c73d7ead6059a36f2c8a
7
+ data.tar.gz: b5768b05c9382ca82351331b86a2edc42afdff7189f76b28c2323da7b580fecb3ba3c79220931336bcafa4319e39b83cc21962bd19eef5b3cc7959cf3beab7da
data/README.md CHANGED
@@ -27,12 +27,15 @@ require 'yaml' #optional, for importing information used to connect to the Analy
27
27
  ``` ruby
28
28
  opts = {}
29
29
  opts['server_url'] = "http://my.server.url" #required No trailing slash needed
30
- opts['service'] = "MyServiceName" #required Calling AnalyticsPSW.new searches for your service, or if it isn't found, creates it.
31
- opts['proxy'] = "http://proxy.server.address" #optional Not required if you don't use a proxy server or if you set the http_proxy environment variable
30
+ opts['service'] = "MyServiceName" #required Calling AnalyticsPSW::Analytics.new searches for your service. It must exist prior to using the GEM.
31
+ opts['proxy'] = "http://proxy.server.address" #optional Not required if you don't use a proxy server or if you set the http_proxy environment variable.
32
+ #required for multi-get (run multiple get requests in parallel)
33
+ opts['client_id'] = "fjdksl98s2jkljf" #required for the GEM to manage your Oath2 token
34
+ opts['client_secret'] = "jkdsl89sf9s" #required for the GEM to manage your Oath2 token
32
35
  opts['event_types'] = ["event_one", "event_two", "event_three"] #optional Creates event types to associate with your service if they don't already exist
33
36
  opts['dimensions'] = [{"dimension_name" => "string"}, {"dimension_2" => "integer"}] #optional Creates dimensions to describe your events if they don't already exist
34
37
 
35
- ap = AnalyticsPSW.new(opts)
38
+ ap = AnalyticsPSW::Analytics.new(opts)
36
39
  ```
37
40
 
38
41
  ### Options in separate .yml file
@@ -46,6 +49,10 @@ ap = AnalyticsPSW.new(YAML.load_file(analytics_settings.yml))
46
49
  ---
47
50
  server_url: http://127.0.0.1:3000
48
51
  service: my_service
52
+
53
+ client_id=fjdksl98s2jkljf
54
+ client_secret=jkdsl89sf9s
55
+
49
56
  event_types:
50
57
  - event_one
51
58
  - event_two
@@ -58,37 +65,34 @@ dimensions:
58
65
  ## Available Methods
59
66
 
60
67
  ``` ruby
61
- ap.record_event(event_type, metadata = {}, token=nil) # Send an event to the Analytics service. The event_type must already exist in the Analytics system. 'event_type' can either be a string or symbol
62
-
63
- ap.query_analytics(query_parameters, token=nil) # Send a hashmap query to the Analytics service and return an AnalyticsReport object. Required keys for query_parameters include one or more of :sum, :avg, :stddev, :fields. Optional keys are :customer, :where, :group_by, :order_by, :iterate_by, :limit. Use comma-separated strings for multiple values. The keys :sum, :avg, and :stddev return aggregates that prepend and append the key name with two underscores. For example, the sum aggregate would return as "__SUM__<field_name>".
64
- ap.create_report(name, query_parameters, token=nil) # Create a report query to run later. Required keys for query_parameters include one or more of :sum, :avg, :stddev, :fields. Optional keys are :customer, :where, :group_by, :order_by, :iterate_by, :limit. Use comma-separated strings for multiple values.
65
- ap.list_reports(token=nil) # List all reports for a service
66
- ap.report_criteria(report_name, token=nil) # List the properties for a report. 'report_name' can either be a string or symbol
67
- ap.run_report(report_name, where_criteria, token=nil) # Run a stored report and return an AnalyticsReport object. The 'where_criteria' are options 'where' parameters to replace in the stored report when running. 'report_name' can either be a string or symbol
68
- ap.delete_report(report_name, token=nil) # Delete a stored report. 'report_name' can either be a string or symbol
69
-
70
- ap.multi_query_analytics(query_parameters_array, token=nil) # Run multiple simultaneous queries. Send an array of hashmaps of query parameters to return an array of AnalyticsReport objects.
71
-
72
- ap.create_service(name, token=nil) # Create a new service. 'name' can either be a string or symbol
73
- ap.list_service(token=nil) # List all available services
74
- ap.show_service_resource(service_name, token=nil) # List available resources for a service. 'service_name' can either be a string or symbol
75
- ap.show_service_metadata(service_name, token=nil) # List the metadata for a service. 'service_name' can either be a string or symbol
76
- ap.delete_service(service_name, token=nil) # Delete a service. 'service_name' can either be a string or symbol
77
-
78
- ap.create_event_type(name, description = "", token=nil) # Create an event type for a service. 'name' can either be a string or symbol
79
- ap.list_event_types(token=nil) # List all event types for a service
80
- ap.show_event_type(event_type_name, token=nil) # List the metadata for an event type. 'event_type_name' can either be a string or symbol
81
-
82
- ap.create_dimension(name, data_type, units = "", description = "", token=nil) # Create a new dimension. Only name and data_type are required. 'name' can either be a string or symbol
83
- ap.list_dimensions(token=nil) # List all dimensions for a service
84
- ap.show_dimension_resources(dimension_name, token=nil) # List available resources for a dimension. 'dimension_name' can either be a string or symbol
85
- ap.show_dimension_metadata(dimension_name, token=nil) # List metadata for a dimension. 'dimension_name' can either be a string or symbol
86
-
87
- ap.create_dimension_properties(dimension_name, dimension_value, property_hash, token=nil) # Add properties to a dimension value. This returns a 409 message if properties already exist. Use this method to add mutable string data to dimensions. For example, add a title to a video by adding a title property to the video's guid.
88
- ap.update_dimension_properties(dimension_name, dimension_value, property_hash, token=nil) # Update properties created for a dimension value. The hash replaces all properties currently set.
89
- ap.create_or_update_dimension_properties(dimension_name, dimension_value, property_hash, token=nil) # Add properties to a dimension value if they already exist. Updates the properties otherwise. Use this method to add mutable string data to dimensions. For example, add a title to a video by adding a title property to the video's guid.
90
- ap.show_dimension_properties(dimension_name, dimension_value, token=nil) # List the properties currently set for a dimension value. The body will be JSON.
91
- ap.list_dimension_properties(dimension_name, token=nil) # List all properties for a dimension. This returns a JSON object with an array of JSON/location pairs.
68
+ ap.record_event(event_type, metadata = {}) # Send an event to the Analytics service. The event_type must already exist in the Analytics system. 'event_type' can either be a string or symbol
69
+
70
+ ap.query_analytics(query_parameters) # Send a hashmap query to the Analytics service and return an AnalyticsReport object. Required keys for query_parameters include one or more of :sum, :avg, :stddev, :fields. Optional keys are :customer, :where, :group_by, :order_by, :iterate_by, :limit. Use comma-separated strings for multiple values. The keys :sum, :avg, and :stddev return aggregates that prepend and append the key name with two underscores. For example, the sum aggregate would return as "__SUM__<field_name>".
71
+ ap.create_report(name, query_parameters) # Create a report query to run later. Required keys for query_parameters include one or more of :sum, :avg, :stddev, :fields. Optional keys are :customer, :where, :group_by, :order_by, :iterate_by, :limit. Use comma-separated strings for multiple values.
72
+ ap.list_reports # List all reports for a service
73
+ ap.report_criteria(report_name) # List the properties for a report. 'report_name' can either be a string or symbol
74
+ ap.run_report(report_name, where_criteria) # Run a stored report and return an AnalyticsReport object. The 'where_criteria' are options 'where' parameters to replace in the stored report when running. 'report_name' can either be a string or symbol
75
+ ap.delete_report(report_name) # Delete a stored report. 'report_name' can either be a string or symbol
76
+
77
+ ap.multi_query_analytics(query_parameters_array) # Run multiple simultaneous queries. Send an array of hashmaps of query parameters to return an array of AnalyticsReport objects.
78
+
79
+ ap.show_service_resource(service_name) # List available resources for a service. 'service_name' can either be a string or symbol
80
+ ap.show_service_metadata(service_name) # List the metadata for a service. 'service_name' can either be a string or symbol
81
+
82
+ ap.create_event_type(name, description = "") # Create an event type for a service. 'name' can either be a string or symbol
83
+ ap.list_event_types # List all event types for a service
84
+ ap.show_event_type(event_type_name) # List the metadata for an event type. 'event_type_name' can either be a string or symbol
85
+
86
+ ap.create_dimension(name, data_type, units = "", description = "") # Create a new dimension. Only name and data_type are required. 'name' can either be a string or symbol
87
+ ap.list_dimensions # List all dimensions for a service
88
+ ap.show_dimension_resources(dimension_name) # List available resources for a dimension. 'dimension_name' can either be a string or symbol
89
+ ap.show_dimension_metadata(dimension_name) # List metadata for a dimension. 'dimension_name' can either be a string or symbol
90
+
91
+ ap.create_dimension_properties(dimension_name, dimension_value, property_hash) # Add properties to a dimension value. This returns a 409 message if properties already exist. Use this method to add mutable string data to dimensions. For example, add a title to a video by adding a title property to the video's guid.
92
+ ap.update_dimension_properties(dimension_name, dimension_value, property_hash) # Update properties created for a dimension value. The hash replaces all properties currently set.
93
+ ap.create_or_update_dimension_properties(dimension_name, dimension_value, property_hash) # Add properties to a dimension value if they already exist. Updates the properties otherwise. Use this method to add mutable string data to dimensions. For example, add a title to a video by adding a title property to the video's guid.
94
+ ap.show_dimension_properties(dimension_name, dimension_value) # List the properties currently set for a dimension value. The body will be JSON.
95
+ ap.list_dimension_properties(dimension_name) # List all properties for a dimension. This returns a JSON object with an array of JSON/location pairs.
92
96
  ```
93
97
  ### AnalyticReport object
94
98
 
@@ -129,6 +133,7 @@ end
129
133
 
130
134
  ## Query Parameters
131
135
 
136
+
132
137
  | Parameter | Values | Examples |
133
138
  | -------------------| ---------------------------------------------- | ------------------------------------------------------------------------------------------------------------------ |
134
139
  | ` sum ` |` any event or number dimension ` | ` { "sum" => "plays" } or { "sum" => "plays,process_time" } ` |
@@ -173,4 +178,4 @@ Note: `iterate_by` always uses the global `event_time` dimension.
173
178
 
174
179
  ## License
175
180
 
176
- 2013 Lexmark International Technology S.A. All rights reserved.
181
+ 2014 Lexmark International Technology S.A. All rights reserved.
data/lib/analytics-psw.rb CHANGED
@@ -1,31 +1,19 @@
1
- require "faraday"
2
- require "json"
1
+ require 'faraday'
2
+ require 'json'
3
3
  require 'eventmachine'
4
4
  require 'em-http'
5
5
 
6
- require "analytics-psw/reports"
7
- require "analytics-psw/services"
8
- require "analytics-psw/event_types"
9
- require "analytics-psw/events"
10
- require "analytics-psw/dimension_properties"
11
- require "analytics-psw/dimensions"
12
- require "analytics-psw/customers"
6
+ require 'analytics-psw/reports'
7
+ require 'analytics-psw/services'
8
+ require 'analytics-psw/event_types'
9
+ require 'analytics-psw/events'
10
+ require 'analytics-psw/dimension_properties'
11
+ require 'analytics-psw/dimensions'
12
+ require 'analytics-psw/customers'
13
13
 
14
14
  module AnalyticsPSW
15
15
  class Analytics
16
16
 
17
- API_URL = "/services"
18
- JSON_CONTENT_TYPE = "application/json"
19
- SUM_CRITERIA_PARAM = "sum"
20
- AVG_CRITERIA_PARAM = "avg"
21
-
22
- PARSED_RESPONSE = {
23
- body: 'body',
24
- location: 'location',
25
- status: 'status',
26
- error_message: 'error_message'
27
- }
28
-
29
17
  include AnalyticsPSW::Customers,
30
18
  AnalyticsPSW::Reports,
31
19
  AnalyticsPSW::Services,
@@ -35,62 +23,44 @@ module AnalyticsPSW
35
23
  AnalyticsPSW::DimensionProperties
36
24
 
37
25
  attr_accessor :service_location
38
- attr_reader :conn
39
26
 
40
27
  def initialize(opts = {})
41
28
  set_vars_from_opts(opts)
42
- @conn = faraday_connection
43
- @token = get_token unless @client_id.nil?
44
- @service_location = "#{@server_url}#{API_URL}/#{@service_name}"
45
- find_or_create_event_types(@event_types) if @event_types
29
+ @conn = faraday_connection
30
+ update_token if @client_id
31
+ @service_location = "#{@server_url}/services/#{@service_name}"
32
+ find_or_create_event_types
46
33
  find_or_create_dimensions(@dimensions) if @dimensions
47
34
  end
48
35
 
49
36
  private
50
37
 
51
38
  def set_vars_from_opts(opts)
52
- @server_url = opts["server_url"]
53
- @service_name = opts["service"].strip if opts["service"]
54
- raise "Please ensure you have provided the appropriate server url and service name" unless @server_url && @service_name && @service_name != ""
55
- @server_url = @server_url.chomp("/")
56
- @proxy = opts["proxy"]
57
- @proxy = "" if @server_url.start_with?("http://127.0.0.1") or @server_url.start_with?("http://localhost")
58
- @event_types = opts["event_types"]
59
- @dimensions = opts["dimensions"]
60
- @client_id = opts["client_id"]
61
- @client_secret = opts["client_secret"]
62
- end
63
-
64
- def get_token(token=nil)
65
- return token unless token.nil?
66
- return @token unless @token.nil?
67
- @client_id.nil? ? @token : update_token
39
+ @server_url = opts['server_url'] ? opts['server_url'].chomp('/') : nil
40
+ @service_name = opts['service']
41
+ raise 'Please ensure you have provided the appropriate server url and service name' unless @server_url && @service_name && @service_name != ''
42
+ @proxy = opts['proxy']
43
+ @proxy = '' if @server_url.start_with?('http://127.0.0.1') or @server_url.start_with?('http://localhost')
44
+ @event_types = opts['event_types'] || []
45
+ @dimensions = opts['dimensions'] || []
46
+ @client_id = opts['client_id']
47
+ @client_secret = opts['client_secret']
68
48
  end
69
49
 
70
50
  def update_token
71
51
  url = "#{@server_url}/oauth/token?client_id=#{@client_id}&client_secret=#{@client_secret}"
72
- raw = post_token(:post, url, "token", {})
52
+ raw = post_json(url, 'token', {})
73
53
  parse_raw = parse_json_response(raw)
74
54
  resp = parse_raw['body']
75
55
  @token = resp['access_token']
76
56
  end
77
57
 
78
- def post_token (http_method, url, object_type, metadata)
79
- json_object = create_json_object(object_type, metadata)
80
- json_block = ->(req) do
81
- req.url url
82
- req.headers["Content-Type"] = JSON_CONTENT_TYPE
83
- req.body = json_object
84
- end
85
- conn.send(http_method, &json_block)
58
+ def get_json(url, params = {})
59
+ headers = @token ? {'Authorization' => "Bearer #{@token}"} : nil
60
+ @conn.get(url, params, headers)
86
61
  end
87
62
 
88
- def get_json(url, token=nil, params = {})
89
- headers = {'Authorization' => "Bearer #{get_token(token)}"}
90
- conn.get(url, params, headers)
91
- end
92
-
93
- def multi_get_json(service_location, query_parameters, token=nil)
63
+ def multi_get_json(service_location, query_parameters)
94
64
  results = []
95
65
 
96
66
  EventMachine.run do
@@ -101,7 +71,7 @@ module AnalyticsPSW
101
71
 
102
72
  query_parameters.each_with_index do |param, idx|
103
73
  http = EventMachine::HttpRequest.new(service_location, connection_opts)
104
- req = http.get query: param, head: {'Authorization' => "Bearer #{get_token(token)}"}
74
+ req = http.get query: param, head: {'Authorization' => "Bearer #{@token}"}
105
75
  multi.add idx, req
106
76
  end
107
77
 
@@ -120,23 +90,23 @@ module AnalyticsPSW
120
90
  results
121
91
  end
122
92
 
123
- def post_json(url, object_type, metadata, token=nil)
124
- http_json(:post, url, object_type, metadata, token)
93
+ def post_json(url, object_type, metadata)
94
+ http_json(:post, url, object_type, metadata)
125
95
  end
126
96
 
127
- def put_json(url, object_type, metadata, token=nil)
128
- http_json(:put, url, object_type, metadata, token)
97
+ def put_json(url, object_type, metadata)
98
+ http_json(:put, url, object_type, metadata)
129
99
  end
130
100
 
131
- def http_json(http_method, url, object_type, metadata, token)
101
+ def http_json(http_method, url, object_type, metadata)
132
102
  json_object = create_json_object(object_type, metadata)
133
103
  json_block = ->(req) do
134
104
  req.url url
135
- req.headers["Content-Type"] = JSON_CONTENT_TYPE
136
- req.headers["Authorization"]= "Bearer #{get_token(token)}"
137
- req.body = json_object
105
+ req.headers['Content-Type'] = 'application/json'
106
+ req.headers['Authorization']= "Bearer #{@token}" if @token
107
+ req.body = json_object
138
108
  end
139
- conn.send(http_method, &json_block)
109
+ @conn.send(http_method, &json_block)
140
110
  end
141
111
 
142
112
  def create_json_object(object_type, metadata = {})
@@ -144,53 +114,51 @@ module AnalyticsPSW
144
114
  end
145
115
 
146
116
  def create_metadata(hashmap)
147
- hashmap.reject { |k,v| v == "" }
117
+ hashmap.reject { |k,v| v == '' }
148
118
  end
149
119
 
150
- def find_or_create_event_types(event_types)
151
- all_event_types = JSON.parse(get_json("#{@service_location}/event_types.json?access_token=#{get_token}").body)
152
- all_event_types["event_types"].each do |event_type|
153
- event_types.delete(event_type["name"]) if event_types.include?(event_type["name"])
154
- end
155
- event_types.each do |event_type|
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|
156
124
  create_event_type(event_type)
157
125
  end
158
- event_types
126
+ @event_types |= all_event_types
159
127
  end
160
128
 
161
129
  def find_or_create_dimensions(dimensions)
162
130
  all_dimensions = get_all_dimension_names
163
131
  dimensions.each do |dimension|
164
132
  dimension.each do |name, data_type|
165
- create_dimension(name, data_type) unless all_dimensions.include?(name)
133
+ unless all_dimensions.include?(name)
134
+ create_dimension(name, data_type)
135
+ all_dimensions << name
136
+ end
166
137
  end
167
138
  end
139
+ @dimensions = all_dimensions
168
140
  end
169
141
 
170
- def get_all_dimension_names
171
- dimension_names = []
172
- dimensions = JSON.parse(get_json("#{@service_location}/dimensions.json?access_token=#{get_token}").body)
173
- dimensions["dimensions"].each do |one_dimension|
174
- dimension_names << one_dimension["name"]
175
- end
176
- dimension_names
142
+ def get_all_events
143
+ event_types = list_event_types['body']['event_types']
144
+ event_types ? event_types.map{|e| e['name']} : []
177
145
  end
178
146
 
179
- def create_service_private(name, description = "")
180
- metadata = create_metadata({name: name, description: description})
181
- post_json(API_URL, "service", metadata)
147
+ def get_all_dimension_names
148
+ dimensions = list_dimensions['body']['dimensions']
149
+ dimensions ? dimensions.map { |d| d['name']} : []
182
150
  end
183
151
 
184
152
  def parse_json_response(json_response)
185
153
  parsed_response = {}
186
- parsed_response[PARSED_RESPONSE[:status]] = json_response.status if json_response.status.present?
154
+ parsed_response['status'] = json_response.status if json_response.status.present?
187
155
 
188
156
  if [200, 201, 202].include?(json_response.status)
189
- parsed_response[PARSED_RESPONSE[:body]] = JSON.parse(json_response.body) if json_response.body.present?
190
- parsed_response[PARSED_RESPONSE[:location]] = json_response.headers["location"] if json_response.headers.present? && json_response.headers["location"]
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']
191
159
  else
192
- parsed_response[PARSED_RESPONSE[:body]] = {}
193
- parsed_response[PARSED_RESPONSE[:error_message]] = json_response.body
160
+ parsed_response['body'] = {}
161
+ parsed_response['error_message'] = json_response.body
194
162
  end
195
163
 
196
164
  parsed_response
@@ -198,27 +166,24 @@ module AnalyticsPSW
198
166
 
199
167
  def multi_parse_json_response(response)
200
168
  parsed_response = {}
201
- parsed_response[PARSED_RESPONSE[:status]] = response.response_header.present? ? response.response_header.status : 500
169
+ parsed_response['status'] = response.response_header.present? ? response.response_header.status : 500
202
170
 
203
-
204
- if [200, 201, 202].include?(parsed_response[PARSED_RESPONSE[:status]])
205
- parsed_response[PARSED_RESPONSE[:body]] = JSON.parse response.response if response.response.present?
206
- parsed_response[PARSED_RESPONSE[:location]] = response.headers.location if response.headers.present? && response.headers.location.present?
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?
207
174
  else
208
- parsed_response[PARSED_RESPONSE[:body]] = {}
209
- parsed_response[PARSED_RESPONSE[:error_message]] = response.error if response.error.present?
175
+ parsed_response['body'] = {}
176
+ parsed_response['error_message'] = response.error if response.error.present?
210
177
  end
211
178
  parsed_response
212
179
  end
213
180
 
214
- def delete_resource(url, token=nil)
215
- conn.delete (url + "?access_token=#{get_token}")
181
+ def delete_resource(url)
182
+ @conn.delete (url + "?access_token=#{@token}")
216
183
  end
217
184
 
218
185
  def faraday_connection
219
- return Faraday.new(@server_url) if @proxy == nil
220
- Faraday.new(@server_url, {proxy: {uri: @proxy}})
186
+ @proxy ? Faraday.new(@server_url, {proxy: {uri: @proxy}}) : Faraday.new(@server_url)
221
187
  end
222
-
223
188
  end
224
189
  end
@@ -1,11 +1,9 @@
1
1
  module AnalyticsPSW
2
2
  module Customers
3
-
4
- def list_customers (token=nil)
5
- resp = get_json("#{@service_location}/customers", token)
3
+ def list_customers
4
+ resp = get_json("#{@service_location}/customers")
6
5
  parse_json_response(resp)
7
6
  end
8
-
9
7
  end
10
8
  end
11
9
 
@@ -1,30 +1,29 @@
1
1
  module AnalyticsPSW
2
2
  module DimensionProperties
3
-
4
- def list_dimension_properties(dimension_name, token=nil)
5
- resp = get_json("#{@service_location}/dimensions/#{dimension_name.to_s}/properties", token)
3
+ def list_dimension_properties(dimension_name)
4
+ resp = get_json("#{@service_location}/dimensions/#{dimension_name}/properties")
6
5
  parse_json_response(resp)
7
6
  end
8
7
 
9
- def show_dimension_properties(dimension_name, dimension_value, token=nil)
10
- resp = get_json("#{@service_location}/dimensions/#{dimension_name.to_s}/properties/#{dimension_value.to_s}", token)
8
+ def show_dimension_properties(dimension_name, dimension_value)
9
+ resp = get_json("#{@service_location}/dimensions/#{dimension_name}/properties/#{dimension_value}")
11
10
  parse_json_response(resp)
12
11
  end
13
12
 
14
- def create_dimension_properties(dimension_name, dimension_value, properties = {}, token=nil)
13
+ def create_dimension_properties(dimension_name, dimension_value, properties = {})
15
14
  metadata = create_dimension_properties_metadata(dimension_value, properties)
16
- response = post_json("#{@service_location}/dimensions/#{dimension_name.to_s}/properties/#{dimension_value.to_s}", "dimension_property", metadata, token)
15
+ response = post_json("#{@service_location}/dimensions/#{dimension_name}/properties/#{dimension_value}", 'dimension_property', metadata)
17
16
  parse_json_response(response)
18
17
  end
19
18
 
20
- def update_dimension_properties(dimension_name, dimension_value, properties = {}, token=nil)
19
+ def update_dimension_properties(dimension_name, dimension_value, properties = {})
21
20
  metadata = create_dimension_properties_metadata(dimension_value, properties)
22
- response = put_json("#{@service_location}/dimensions/#{dimension_name.to_s}/properties/#{dimension_value.to_s}", "dimension_property", metadata, token)
21
+ response = put_json("#{@service_location}/dimensions/#{dimension_name}/properties/#{dimension_value}", 'dimension_property', metadata)
23
22
  parse_json_response(response)
24
23
  end
25
24
 
26
- def create_or_update_dimension_properties(dimension_name, dimension_value, properties = {}, token=nil)
27
- dimension_property_exists?(dimension_name, dimension_value, token) ? update_dimension_properties(dimension_name, dimension_value, properties, token) : create_dimension_properties(dimension_name, dimension_value, properties, token)
25
+ def create_or_update_dimension_properties(dimension_name, dimension_value, properties = {})
26
+ dimension_property_exists?(dimension_name, dimension_value) ? update_dimension_properties(dimension_name, dimension_value, properties) : create_dimension_properties(dimension_name, dimension_value, properties)
28
27
  end
29
28
 
30
29
  private
@@ -32,15 +31,14 @@ module AnalyticsPSW
32
31
  def create_dimension_properties_metadata(dimension_value, properties)
33
32
  dimension_properties_body = {'value' => dimension_value, 'properties' => {}}
34
33
  properties.each do |key, value|
35
- dimension_properties_body['properties'][key] = value unless value == ""
34
+ dimension_properties_body['properties'][key] = value unless value == ''
36
35
  end
37
36
  dimension_properties_body
38
37
  end
39
38
 
40
- def dimension_property_exists? (dimension_name, dimension_value, token=nil)
41
- dim_properties = list_dimension_properties(dimension_name,token)['body']
39
+ def dimension_property_exists? (dimension_name, dimension_value)
40
+ dim_properties = list_dimension_properties(dimension_name)['body']
42
41
  dim_properties[dimension_name].present? && dim_properties[dimension_name] == dimension_value
43
42
  end
44
-
45
43
  end
46
44
  end
@@ -1,24 +1,25 @@
1
1
  module AnalyticsPSW
2
2
  module Dimensions
3
3
 
4
- def create_dimension(name, data_type, units = "", description = "", token=nil)
4
+ def create_dimension(name, data_type, units = '', description = '')
5
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, token)
6
+ resp = post_json("#{@service_location}/dimensions", "dimension", metadata)
7
+ @dimensions |= [name.to_s] if resp.status && [200, 201, 202].include?(resp.status)
7
8
  parse_json_response(resp)
8
9
  end
9
10
 
10
- def list_dimensions(token=nil)
11
- resp = get_json("#{@service_location}/dimensions", token)
11
+ def list_dimensions
12
+ resp = get_json("#{@service_location}/dimensions")
12
13
  parse_json_response(resp)
13
14
  end
14
15
 
15
- def show_dimension_resources(dimension_name, token=nil)
16
- resp = get_json("#{@service_location}/dimensions/#{dimension_name.to_s}", token)
16
+ def show_dimension_resources(dimension_name)
17
+ resp = get_json("#{@service_location}/dimensions/#{dimension_name}")
17
18
  parse_json_response(resp)
18
19
  end
19
20
 
20
- def show_dimension_metadata(dimension_name, token=nil)
21
- resp = get_json("#{@service_location}/dimensions/#{dimension_name.to_s}/metadata", token)
21
+ def show_dimension_metadata(dimension_name)
22
+ resp = get_json("#{@service_location}/dimensions/#{dimension_name}/metadata")
22
23
  parse_json_response(resp)
23
24
  end
24
25
 
@@ -1,19 +1,20 @@
1
1
  module AnalyticsPSW
2
2
  module EventTypes
3
3
 
4
- def create_event_type(name, description = "", token=nil)
4
+ def create_event_type(name, description = "")
5
5
  metadata = create_metadata({:name => name.to_s, :description => description})
6
- resp = post_json("#{@service_location}/event_types", "event_type", metadata, token)
6
+ resp = post_json("#{@service_location}/event_types", "event_type", metadata)
7
+ @event_types |= [name.to_s] if resp.status && [200, 201, 202].include?(resp.status)
7
8
  parse_json_response(resp)
8
9
  end
9
10
 
10
- def list_event_types(token=nil)
11
- resp = get_json("#{@service_location}/event_types", token)
11
+ def list_event_types
12
+ resp = get_json("#{@service_location}/event_types")
12
13
  parse_json_response(resp)
13
14
  end
14
15
 
15
- def show_event_type(event_name, token=nil)
16
- resp = get_json("#{@service_location}/event_types/#{event_name.to_s}", token)
16
+ def show_event_type(event_name)
17
+ resp = get_json("#{@service_location}/event_types/#{event_name.to_s}")
17
18
  parse_json_response(resp)
18
19
  end
19
20
 
@@ -1,45 +1,31 @@
1
1
  module AnalyticsPSW
2
2
  module Events
3
3
 
4
- def record_event(event_type, metadata = {}, token=nil)
5
-
6
- if valid_metadata_for_record_event?(event_type, metadata, token)
7
- metadata[:event_type] = event_type.to_s
8
- parse_json_response(post_json("#{@service_location}/events", "event", metadata, token))
9
- else
10
- invalid_metadata_response
11
- end
4
+ def record_event(event_type, metadata = {})
5
+ return invalid_event_type_response unless event_type_exists? event_type
6
+ return invalid_metadata_response unless dimensions_exist? metadata
7
+ metadata[:event_type] = event_type.to_s
8
+ parse_json_response(post_json("#{@service_location}/events", 'event', metadata))
12
9
  end
13
10
 
14
11
  private
15
12
 
16
- def valid_metadata_for_record_event?(event_type, metadata, token)
17
-
18
- event_type_exists?(event_type, token) && dimensions_exist?(metadata, token)
19
- end
20
-
21
- def event_type_exists?(current_event_type, token)
22
- get_list_of_event_types(token).map {|d| d['name']}.include?(current_event_type)
23
- end
24
-
25
- def get_list_of_event_types(token)
26
- event_types_response = list_event_types(token)
27
- event_types_body = event_types_response['body']
28
- event_types_body['event_types']
13
+ def event_type_exists?(current_event_type)
14
+ @event_types.include? current_event_type
29
15
  end
30
16
 
31
- def dimensions_exist?(metadata, token=nil)
32
- get_list_of_dimensions(token).map {|d| d['name'] }.to_set.subset?(metadata.keys.to_set)
17
+ def dimensions_exist?(metadata)
18
+ metadata.keys.each do |key|
19
+ return false unless @dimensions.include? key
20
+ end
33
21
  end
34
22
 
35
- def get_list_of_dimensions(token=nil)
36
- dimensions_response = list_dimensions(token)
37
- dimensions_body = dimensions_response['body']
38
- dimensions_body['dimensions']
23
+ def invalid_event_type_response
24
+ {'status' => 422, 'body' => {}, 'error_message' => 'Invalid event type for service.'}
39
25
  end
40
26
 
41
27
  def invalid_metadata_response
42
- {'status' => 422, 'body' => {}, 'error_message' => 'Invalid event type and/or dimensions for service.'}
28
+ {'status' => 422, 'body' => {}, 'error_message' => 'Invalid dimensions for service.'}
43
29
  end
44
30
 
45
31
  end
@@ -4,47 +4,44 @@ require 'analytics_report_field'
4
4
  module AnalyticsPSW
5
5
  module Reports
6
6
 
7
- def query_analytics(query_parameters, token=nil)
8
- raw_report = get_json("#{@service_location}/reports/query.json", token, query_parameters)
7
+ def query_analytics(query_parameters)
8
+ raw_report = get_json("#{@service_location}/reports/query.json", query_parameters)
9
9
  parsed_report = parse_json_response(raw_report)
10
-
11
10
  create_analytics_report(parsed_report)
12
11
  end
13
12
 
14
- def multi_query_analytics(query_parameters, token=nil)
15
- raw_reports = multi_get_json("#{@service_location}/reports/query.json", query_parameters, token)
16
-
13
+ def multi_query_analytics(query_parameters)
14
+ raw_reports = multi_get_json("#{@service_location}/reports/query.json", query_parameters)
17
15
  raw_reports.map do |raw_report|
18
16
  create_analytics_report(raw_report)
19
17
  end
20
18
 
21
19
  end
22
20
 
23
- def create_report(name, query_parameters, token=nil)
21
+ def create_report(name, query_parameters)
24
22
  query_parameters[:name] = name.to_s
25
- resp = post_json("#{@service_location}/reports", "report", query_parameters, token )
23
+ resp = post_json("#{@service_location}/reports", 'report', query_parameters )
26
24
  parse_json_response(resp)
27
25
  end
28
26
 
29
- def list_reports(token=nil)
30
- resp = get_json("#{@service_location}/reports", token)
27
+ def list_reports
28
+ resp = get_json("#{@service_location}/reports")
31
29
  parse_json_response(resp)
32
30
  end
33
31
 
34
- def report_criteria(report_name, token=nil)
35
- resp = get_json("#{@service_location}/reports/#{report_name.to_s}/criteria", token)
32
+ def report_criteria(report_name)
33
+ resp = get_json("#{@service_location}/reports/#{report_name.to_s}/criteria")
36
34
  parse_json_response(resp)
37
35
  end
38
36
 
39
- def run_report(report_name, where_criteria = {}, token=nil)
40
- raw_report = get_json("#{@service_location}/reports/#{report_name.to_s}/results", token, where_criteria)
37
+ def run_report(report_name, where_criteria = {})
38
+ raw_report = get_json("#{@service_location}/reports/#{report_name.to_s}/results", where_criteria)
41
39
  parsed_report = parse_json_response(raw_report)
42
-
43
40
  create_analytics_report(parsed_report)
44
41
  end
45
42
 
46
- def delete_report(report_name, token=nil)
47
- resp = delete_resource("#{@service_location}/reports/#{report_name.to_s}", token)
43
+ def delete_report(report_name)
44
+ resp = delete_resource("#{@service_location}/reports/#{report_name.to_s}")
48
45
  parse_json_response(resp)
49
46
  end
50
47
 
@@ -1,29 +1,13 @@
1
1
  module AnalyticsPSW
2
2
  module Services
3
-
4
- def create_service(name, token=nil)
5
- create_service_private(name.to_s, token)
6
- end
7
-
8
- def list_services(token=nil)
9
- resp = get_json("/services", token)
10
- parse_json_response(resp)
11
- end
12
-
13
- def show_service_resources(service_name, token=nil)
14
- resp = get_json("/services/#{service_name.to_s}", token)
3
+ def show_service_resources(service_name)
4
+ resp = get_json("/services/#{service_name.to_s}")
15
5
  parse_json_response(resp)
16
6
  end
17
7
 
18
- def show_service_metadata(service_name, token=nil)
19
- resp = get_json("/services/#{service_name.to_s}/metadata", token)
8
+ def show_service_metadata(service_name)
9
+ resp = get_json("/services/#{service_name.to_s}/metadata")
20
10
  parse_json_response(resp)
21
11
  end
22
-
23
- def delete_service(service_name, token=nil)
24
- resp = delete_resource("/services/#{service_name.to_s}", token)
25
- parse_json_response(resp)
26
- end
27
-
28
12
  end
29
13
  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.0
4
+ version: 0.3.1
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-05 00:00:00.000000000 Z
11
+ date: 2014-08-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -122,6 +122,20 @@ dependencies:
122
122
  - - ">="
123
123
  - !ruby/object:Gem::Version
124
124
  version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: activemodel
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :runtime
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
125
139
  description: Analytics-psw is a wrapper providing access to the Perceptive Cloud Platform
126
140
  Analytics service
127
141
  email: