analytics-psw 0.1.1 → 0.1.2

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.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/analytics-psw.rb +156 -146
  3. metadata +13 -13
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6b6e9f607285d3b857b09d8184d0574ec5342da1
4
- data.tar.gz: e6836265df1b2cf10d85ae9882a41807071179d2
3
+ metadata.gz: 9690e2147d8783257c8dac2434b4aaeefc43e685
4
+ data.tar.gz: ac1356c8a0a8eda726162ee4140d48a3a143c570
5
5
  SHA512:
6
- metadata.gz: a7046c2495b68a33f354575f2c14fac7e48812355dabb92b07119bca74a3bf02a3dbcdb03414d8deadc0b263a07f34d3ad512cd710d9e3d497d19523890b1a8c
7
- data.tar.gz: 1472c13dc9ed25b8799b50f0a4087a48d4bb1dc88c2506d56ed0a003d83f69924b34d53bf115d044cf106b4c6d3b8ef370df771a3f045bc03612787bb129e03b
6
+ metadata.gz: 4910eea5494ffd59db4dbb55df02172ed2b8fc366116d576b60fda4de474401be469cafb189fe4a6b4c9094bb176b6b2605bd5a727d727e126d64e6faec9bc63
7
+ data.tar.gz: 14776571c8758a048240c65d56025638ee1807a67e73d035eb99de42cd4c885cc003dd2b360c1a7706d0fd82768e66f4fd1d97e65aee603a48741ad5aed90f53
data/lib/analytics-psw.rb CHANGED
@@ -1,147 +1,157 @@
1
- require "faraday"
2
- require "json"
3
-
4
- class AnalyticsPSW
5
-
6
- API_URL = "/services"
7
- JSON_CONTENT_TYPE = "application/json"
8
-
9
- attr_accessor :service_location
10
-
11
- def initialize(opts = {})
12
- set_vars_from_opts(opts)
13
- @conn = faraday_connection
14
- service = find_or_create_service(@service_name)
15
- @service_location = service["location"] if service
16
- find_or_create_event_types(@event_types) if @event_types
17
- find_or_create_dimensions(@dimensions) if @dimensions
18
- end
19
-
20
- def record_event(event_type, metadata = {})
21
- metadata[:event_type] = event_type
22
- resp = post_json("#{@service_location}/events", "event", metadata)
23
- parse_json_response(resp)
24
- end
25
-
26
- def query_analytics(query_parameters)
27
- resp = get_with_hash("#{@service_location}/reports/query.json", query_parameters)
28
- raise "Problem with your query. Please check the required parameters and try again" if resp.status == 400
29
- parse_json_response(resp)
30
- end
31
-
32
- def create_event_type(name, description = "")
33
- metadata = create_metadata({:name => name, :description => description})
34
- resp = post_json("#{@service_location}/event_types", "event_type", metadata)
35
- parse_json_response(resp)
36
- end
37
-
38
- def create_dimension(name, data_type, units = "", description = "")
39
- metadata = create_metadata({:name => name, :description => description, :data_type => data_type, :units => units})
40
- resp = post_json("#{@service_location}/dimensions", "dimension", metadata)
41
- parse_json_response(resp)
42
- end
43
-
44
- private
45
-
46
- def set_vars_from_opts(opts)
47
- @server_url = opts["server_url"]
48
- @service_name = opts["service"].strip if opts["service"]
49
- raise "Please ensure you have provided the appropriate server url and service name" unless @server_url && @service_name && @service_name != ""
50
- @server_url = @server_url.chomp("/")
51
- @proxy = opts["proxy"]
52
- @proxy = "" if @server_url.start_with?("http://127.0.0.1") or @server_url.start_with?("http://localhost")
53
- @event_types = opts["event_types"]
54
- @dimensions = opts["dimensions"]
55
- end
56
-
57
- def post_json(url, object_type, metadata)
58
- json_object = create_json_object(object_type, metadata)
59
- @conn.post do |req|
60
- req.url url
61
- req.headers["Content-Type"] = JSON_CONTENT_TYPE
62
- req.body = json_object
63
- end
64
- end
65
-
66
- def get_with_hash(url, hash_object = {})
67
- @conn.get url, hash_object
68
- end
69
-
70
- def create_json_object(object_type, metadata = {})
71
- json_object= {object_type => metadata}
72
- json_object.to_json
73
- end
74
-
75
- def create_metadata(hashmap)
76
- metadata = {}
77
- hashmap.each do |key, value|
78
- metadata[key] = value unless value == ""
79
- end
80
- metadata
81
- end
82
-
83
- def find_or_create_event_types(event_types)
84
- all_event_types = JSON.parse(get_with_hash("#{@service_location}/event_types.json").body)
85
- all_event_types["event_types"].each do |event_type|
86
- event_types.delete(event_type["name"]) if event_types.include?(event_type["name"])
87
- end
88
- event_types.each do |event_type|
89
- create_event_type(event_type)
90
- end
91
- event_types
92
- end
93
-
94
- def find_or_create_dimensions(dimensions)
95
- all_dimensions = get_all_dimensions
96
- dimensions.each do |dimension|
97
- dimension.each do |name, data_type|
98
- create_dimension(name, data_type) unless all_dimensions.include?(name)
99
- end
100
- end
101
- end
102
-
103
- def get_all_dimensions
104
- all_dimensions = []
105
- dimensions = JSON.parse(get_with_hash("#{@service_location}/dimensions.json").body)
106
- dimensions["dimensions"].each do |one_dimension|
107
- all_dimensions << one_dimension["name"]
108
- end
109
- all_dimensions
110
- end
111
-
112
- def find_or_create_service(service_name)
113
- service_location = find_service_location(service_name)
114
- if !service_location
115
- service_location = create_service(service_name)
116
- end
117
- service_location
118
- end
119
-
120
- def find_service_location(service_name)
121
- service_location = nil
122
- all_services = JSON.parse(get_with_hash("#{API_URL}.json").body)
123
- all_services["services"].each do |service|
124
- service_location = service if service["name"] == service_name
125
- end
126
- service_location
127
- end
128
-
129
- def create_service(name, description = "")
130
- metadata = create_metadata({:name => name, :description => description})
131
- post_json(API_URL, "service", metadata)
132
- end
133
-
134
- def parse_json_response(json_response)
135
- parsed_response = {}
136
- parsed_response["status"] = json_response.status if json_response.status
137
- parsed_response["body"] = json_response.body if json_response.body && json_response.body.strip != ""
138
- parsed_response["location"] = json_response.headers["location"] if json_response.headers && json_response.headers["location"]
139
- parsed_response
140
- end
141
-
142
- def faraday_connection
143
- return Faraday.new(@server_url) if @proxy == nil
144
- Faraday.new(@server_url, {:proxy => {:uri => @proxy}})
145
- end
146
-
1
+ require "faraday"
2
+ require "json"
3
+ require "analytics_reports"
4
+ require "analytics_services"
5
+ require "analytics_event_types"
6
+ require "analytics_dimension_properties"
7
+ require "analytics_dimensions"
8
+
9
+ class AnalyticsPSW
10
+
11
+ API_URL = "/services"
12
+ JSON_CONTENT_TYPE = "application/json"
13
+ SUM_CRITERIA_PARAM = "sum"
14
+ AVG_CRITERIA_PARAM = "avg"
15
+
16
+ PARSED_RESPONSE_STATUS = 'status'
17
+ PARSED_RESPONSE_BODY = 'body'
18
+ PARSED_RESPONSE_LOCATION = 'location'
19
+
20
+ include AnalyticsReports, AnalyticsServices, AnalyticsEventTypes, AnalyticsDimensions, AnalyticsDimensionProperties
21
+
22
+ attr_accessor :service_location
23
+
24
+ def initialize(opts = {})
25
+ set_vars_from_opts(opts)
26
+ @conn = faraday_connection
27
+ service = find_or_create_service(@service_name)
28
+ @service_location = service["location"] if service
29
+ find_or_create_event_types(@event_types) if @event_types
30
+ find_or_create_dimensions(@dimensions) if @dimensions
31
+ end
32
+
33
+ def record_event(event_type, metadata = {})
34
+ metadata[:event_type] = event_type
35
+ resp = post_json("#{@service_location}/events", "event", metadata)
36
+ parse_json_response(resp)
37
+ end
38
+
39
+
40
+ private
41
+
42
+ def set_vars_from_opts(opts)
43
+ @server_url = opts["server_url"]
44
+ @service_name = opts["service"].strip if opts["service"]
45
+ raise "Please ensure you have provided the appropriate server url and service name" unless @server_url && @service_name && @service_name != ""
46
+ @server_url = @server_url.chomp("/")
47
+ @proxy = opts["proxy"]
48
+ @proxy = "" if @server_url.start_with?("http://127.0.0.1") or @server_url.start_with?("http://localhost")
49
+ @event_types = opts["event_types"]
50
+ @dimensions = opts["dimensions"]
51
+ end
52
+
53
+ def post_json(url, object_type, metadata)
54
+ json_object = create_json_object(object_type, metadata)
55
+ @conn.post do |req|
56
+ req.url url
57
+ req.headers["Content-Type"] = JSON_CONTENT_TYPE
58
+ req.body = json_object
59
+ end
60
+ end
61
+
62
+ def put_json(url, object_type, metadata)
63
+ json_object = create_json_object(object_type, metadata)
64
+ @conn.put do |req|
65
+ req.url url
66
+ req.headers["Content-Type"] = JSON_CONTENT_TYPE
67
+ req.body = json_object
68
+ end
69
+ end
70
+
71
+ def get_with_hash(url, hash_object = {})
72
+ @conn.get url, hash_object
73
+ end
74
+
75
+ def create_json_object(object_type, metadata = {})
76
+ json_object= {object_type => metadata}
77
+ json_object.to_json
78
+ end
79
+
80
+ def create_metadata(hashmap)
81
+ metadata = {}
82
+ hashmap.each do |key, value|
83
+ metadata[key] = value unless value == ""
84
+ end
85
+ metadata
86
+ end
87
+
88
+ def find_or_create_event_types(event_types)
89
+ all_event_types = JSON.parse(get_with_hash("#{@service_location}/event_types.json").body)
90
+ all_event_types["event_types"].each do |event_type|
91
+ event_types.delete(event_type["name"]) if event_types.include?(event_type["name"])
92
+ end
93
+ event_types.each do |event_type|
94
+ create_event_type(event_type)
95
+ end
96
+ event_types
97
+ end
98
+
99
+ def find_or_create_dimensions(dimensions)
100
+ all_dimensions = get_all_dimension_names
101
+ dimensions.each do |dimension|
102
+ dimension.each do |name, data_type|
103
+ create_dimension(name, data_type) unless all_dimensions.include?(name)
104
+ end
105
+ end
106
+ end
107
+
108
+ def get_all_dimension_names
109
+ dimension_names = []
110
+ dimensions = JSON.parse(get_with_hash("#{@service_location}/dimensions.json").body)
111
+ dimensions["dimensions"].each do |one_dimension|
112
+ dimension_names << one_dimension["name"]
113
+ end
114
+ dimension_names
115
+ end
116
+
117
+ def find_or_create_service(service_name)
118
+ service_location = find_service_location(service_name)
119
+ if !service_location
120
+ service_location = create_service_private(service_name)
121
+ end
122
+ service_location
123
+ end
124
+
125
+ def find_service_location(service_name)
126
+ service_location = nil
127
+ all_services = JSON.parse(get_with_hash("#{API_URL}.json").body)
128
+ all_services["services"].each do |service|
129
+ service_location = service if service["name"] == service_name
130
+ end
131
+ service_location
132
+ end
133
+
134
+ def create_service_private(name, description = "")
135
+ metadata = create_metadata({:name => name, :description => description})
136
+ post_json(API_URL, "service", metadata)
137
+ end
138
+
139
+ def parse_json_response(json_response)
140
+ parsed_response = {}
141
+ parsed_response[PARSED_RESPONSE_STATUS] = json_response.status if json_response.status
142
+ parsed_response[PARSED_RESPONSE_BODY] = json_response.body if json_response.body && json_response.body.strip != ""
143
+ parsed_response[PARSED_RESPONSE_LOCATION] = json_response.headers["location"] if json_response.headers && json_response.headers["location"]
144
+ parsed_response
145
+ end
146
+
147
+ def delete_resource(url)
148
+ @conn.delete url
149
+ end
150
+
151
+ def faraday_connection
152
+ return Faraday.new(@server_url) if @proxy == nil
153
+ Faraday.new(@server_url, {:proxy => {:uri => @proxy}})
154
+ end
155
+
156
+
147
157
  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.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jordan Keyes
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-02-13 00:00:00.000000000 Z
11
+ date: 2014-03-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -28,56 +28,56 @@ dependencies:
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - '>='
31
+ - - ! '>='
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - '>='
38
+ - - ! '>='
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rspec
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - '>='
45
+ - - ! '>='
46
46
  - !ruby/object:Gem::Version
47
47
  version: '0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - '>='
52
+ - - ! '>='
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: simplecov
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - '>='
59
+ - - ! '>='
60
60
  - !ruby/object:Gem::Version
61
61
  version: '0'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - '>='
66
+ - - ! '>='
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: faraday
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - '>='
73
+ - - ! '>='
74
74
  - !ruby/object:Gem::Version
75
75
  version: '0'
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - '>='
80
+ - - ! '>='
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
83
  description: Analytics-psw is a wrapper providing access to the Perceptive Cloud Platform
@@ -99,17 +99,17 @@ require_paths:
99
99
  - lib
100
100
  required_ruby_version: !ruby/object:Gem::Requirement
101
101
  requirements:
102
- - - '>='
102
+ - - ! '>='
103
103
  - !ruby/object:Gem::Version
104
104
  version: '0'
105
105
  required_rubygems_version: !ruby/object:Gem::Requirement
106
106
  requirements:
107
- - - '>='
107
+ - - ! '>='
108
108
  - !ruby/object:Gem::Version
109
109
  version: '0'
110
110
  requirements: []
111
111
  rubyforge_project:
112
- rubygems_version: 2.0.14
112
+ rubygems_version: 2.1.4
113
113
  signing_key:
114
114
  specification_version: 4
115
115
  summary: Perceptive Cloud Platform Analytics Service Wrapper