analytics-psw 0.3.0 → 0.3.1

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: 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: