urbanairship 3.0.2 → 3.1.0

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.
@@ -1,5 +1,6 @@
1
1
  require 'logger'
2
2
 
3
+
3
4
  module Urbanairship
4
5
  module Loggable
5
6
 
@@ -1,6 +1,7 @@
1
1
  require 'urbanairship/util'
2
2
  require 'urbanairship/common'
3
3
 
4
+
4
5
  module Urbanairship
5
6
  module Push
6
7
  module Audience
@@ -1,8 +1,8 @@
1
1
  require 'json'
2
-
3
2
  require 'urbanairship/common'
4
3
  require 'urbanairship/loggable'
5
4
 
5
+
6
6
  module Urbanairship
7
7
  module Push
8
8
 
@@ -42,8 +42,7 @@ module Urbanairship
42
42
  method: 'POST',
43
43
  body: JSON.dump(payload),
44
44
  url: PUSH_URL,
45
- content_type: 'application/json',
46
- version: 3
45
+ content_type: 'application/json'
47
46
  )
48
47
  pr = PushResponse.new(http_response_body: response['body'], http_response_code: response['code'].to_s)
49
48
  logger.info { pr.format }
@@ -84,8 +83,7 @@ module Urbanairship
84
83
  method: 'POST',
85
84
  body: JSON.dump(payload),
86
85
  url: SCHEDULES_URL,
87
- content_type: 'application/json',
88
- version: 3
86
+ content_type: 'application/json'
89
87
  )
90
88
  pr = PushResponse.new(http_response_body: response['body'], http_response_code: response['code'].to_s)
91
89
  logger.info { pr.format }
@@ -103,8 +101,7 @@ module Urbanairship
103
101
  response_body = client.send_request(
104
102
  method: 'GET',
105
103
  body: nil,
106
- url: url,
107
- version: 3
104
+ url: url
108
105
  )
109
106
  payload = JSON.load(response_body)
110
107
 
@@ -133,8 +130,7 @@ module Urbanairship
133
130
  method: 'DELETE',
134
131
  body: nil,
135
132
  url: @url,
136
- content_type: 'application/json',
137
- version: 3
133
+ content_type: 'application/json'
138
134
  )
139
135
  pr = PushResponse.new(http_response_body: response['body'], http_response_code: response['code'].to_s)
140
136
  logger.info { "Result of canceling scheduled push: #{@url} was a: [#{pr.status_code}]" }
@@ -151,8 +147,7 @@ module Urbanairship
151
147
  method: 'PUT',
152
148
  body: JSON.dump(self.payload),
153
149
  url: @url,
154
- content_type: 'application/json',
155
- version: 3
150
+ content_type: 'application/json'
156
151
  )
157
152
  pr = PushResponse.new(http_response_body: response['body'], http_response_code: response['code'].to_s)
158
153
  logger.info { pr.format }
@@ -167,11 +162,11 @@ module Urbanairship
167
162
  include Urbanairship::Common
168
163
 
169
164
  def initialize(http_response_body: nil, http_response_code: nil)
170
- @payload = http_response_body || "No Content"
171
- @ok = @payload['ok'] || "None"
172
- @push_ids = @payload['push_ids'] || "None"
173
- @schedule_url = try_helper(:first, @payload['schedule_urls']) || "None"
174
- @operation_id = @payload['operation_id'] || "None"
165
+ @payload = ((http_response_body.nil? || http_response_body.empty?) ? {} : http_response_body)
166
+ @ok = @payload['ok']
167
+ @push_ids = @payload['push_ids']
168
+ @schedule_url = try_helper(:first, @payload['schedule_urls'])
169
+ @operation_id = @payload['operation_id']
175
170
  @status_code = http_response_code
176
171
  end
177
172
 
@@ -181,12 +176,11 @@ module Urbanairship
181
176
  def format
182
177
  base = "Received [#{@status_code}] response code. \nHeaders: \tBody:\n"
183
178
  payload.each do |key, value|
184
- safe_value = value.to_s || "None"
179
+ safe_value = value.to_s || 'None'
185
180
  base << "#{key}:\t#{safe_value}\n"
186
181
  end
187
182
  base
188
183
  end
189
-
190
184
  end
191
185
  end
192
186
  end
@@ -1,5 +1,6 @@
1
1
  require 'urbanairship/util'
2
2
 
3
+
3
4
  module Urbanairship
4
5
  module Push
5
6
  module Schedule
@@ -0,0 +1,97 @@
1
+ require 'urbanairship'
2
+ require 'time'
3
+
4
+
5
+ module Urbanairship
6
+ module Reports
7
+ class PerPushDetail
8
+ include Urbanairship::Common
9
+ include Urbanairship::Loggable
10
+
11
+ def initialize(client: required('client'))
12
+ @client = client
13
+ end
14
+
15
+ def get_single(push_id: required('push_id'))
16
+ fail ArgumentError,
17
+ 'push_id cannot be empty' if push_id.nil?
18
+ url = REPORTS_URL + 'perpush/detail/' + push_id
19
+ response = @client.send_request(
20
+ method: 'GET',
21
+ url: url
22
+ )
23
+ logger.info("Requested per-push details for #{push_id}")
24
+ response
25
+ end
26
+
27
+ def get_batch(push_ids: required('push_ids'))
28
+ fail ArgumentError,
29
+ 'push_ids must be an array' unless push_ids.kind_of?(Array)
30
+ fail ArgumentError,
31
+ 'push_ids cannot be empty' if push_ids.empty?
32
+ fail ArgumentError,
33
+ 'push_ids cannot contain more than 100 IDs' if push_ids.count > 100
34
+
35
+ response = @client.send_request(
36
+ method: 'POST',
37
+ body: JSON.dump('push_ids' => push_ids),
38
+ url: REPORTS_URL + 'perpush/detail/',
39
+ content_type: 'application/json'
40
+ )
41
+ logger.info("Requested info for push ids: #{push_ids}")
42
+ response
43
+ end
44
+ end
45
+
46
+ class PerPushSeries
47
+ include Urbanairship::Common
48
+ include Urbanairship::Loggable
49
+
50
+ def initialize(client: required)
51
+ @client = client
52
+ end
53
+
54
+ def get(push_id: required('push_id'), precision:nil, start_date:nil, end_date:nil)
55
+ fail ArgumentError,
56
+ 'push_id cannot be empty' if push_id.nil?
57
+ url = REPORTS_URL + 'perpush/series/' + push_id
58
+
59
+ if precision
60
+ precision_array = %w(HOURLY DAILY MONTHLY)
61
+ fail ArgumentError,
62
+ "Precision must be 'HOURLY', 'DAILY', or 'MONTHLY'" unless precision_array.include?(precision)
63
+ url += '?precision=' + precision
64
+ end
65
+
66
+ if start_date
67
+ fail ArgumentError,
68
+ 'Precision must be included with start date' if precision.nil?
69
+ start_parsed = nil
70
+ end_parsed = nil
71
+
72
+ begin
73
+ start_parsed = Time.parse(start_date)
74
+ end_parsed = Time.parse(end_date) unless end_date.nil?
75
+ rescue ArgumentError
76
+ fail ArgumentError,
77
+ 'start_date and end_date must be valid date strings'
78
+ end
79
+
80
+ fail ArgumentError,
81
+ 'End date must be after start date' if !end_date.nil? and end_parsed <= start_parsed
82
+ url += '&start=' + start_parsed.iso8601
83
+ url += '&end=' + end_parsed.iso8601 unless end_parsed.nil?
84
+ end
85
+
86
+ response = @client.send_request(
87
+ method: 'GET',
88
+ url: url
89
+ )
90
+ logger.info("Send per push series request for push_id #{push_id} and url #{url}")
91
+ response
92
+ end
93
+ end
94
+ end
95
+ end
96
+
97
+
@@ -0,0 +1,157 @@
1
+ require 'urbanairship'
2
+ require 'time'
3
+
4
+ module Urbanairship
5
+ module Reports
6
+ class Helper
7
+ def get_url(start_date, end_date, precision)
8
+ fail ArgumentError,
9
+ 'the parameters cannot be set to nil' if start_date.nil? or end_date.nil? or precision.nil?
10
+ precision_array = %w(HOURLY DAILY MONTHLY)
11
+ fail ArgumentError,
12
+ "Precision must be 'HOURLY', 'DAILY', or 'MONTHLY'" unless precision_array.include?(precision)
13
+
14
+ begin
15
+ start_parsed = Time.parse(start_date)
16
+ end_parsed = Time.parse(end_date)
17
+ rescue ArgumentError
18
+ fail ArgumentError,
19
+ 'start_date and end_date must be valid date strings'
20
+ end
21
+ url = '?start=' + start_parsed.iso8601 + '&end=' + end_parsed.iso8601
22
+ url += '&precision=' + precision
23
+ end
24
+ end
25
+
26
+ class IndividualResponseStats
27
+ include Urbanairship::Common
28
+ include Urbanairship::Loggable
29
+
30
+ def initialize(client: required('client'))
31
+ @client = client
32
+ end
33
+
34
+ def get(push_id: required('push_id'))
35
+ fail ArgumentError,
36
+ 'push_id cannot be nil' if push_id.nil?
37
+
38
+ url = REPORTS_URL + 'responses/' + push_id
39
+ response = @client.send_request(method: 'GET', url: url)
40
+ logger.info("Retrieved info on push_id: #{push_id}")
41
+ response
42
+ end
43
+ end
44
+
45
+ class ResponseList < Urbanairship::Common::PageIterator
46
+ def initialize(client: required('client'), start_date: required('start_date'),
47
+ end_date: required('end_date'), limit: nil, push_id_start: nil)
48
+ super(client: client)
49
+ fail ArgumentError,
50
+ 'start_date and end_date are required fields' if start_date.nil? or end_date.nil?
51
+ fail ArgumentError,
52
+ 'limit must be a number' if !limit.nil? and !limit.is_a? Numeric
53
+ fail ArgumentError,
54
+ 'push_id_start must be a string' if !push_id_start.nil? and !push_id_start.is_a? String
55
+
56
+ begin
57
+ start_parsed = Time.parse(start_date)
58
+ end_parsed = Time.parse(end_date)
59
+ rescue ArgumentError
60
+ fail ArgumentError,
61
+ 'start_date and end_date must be valid date strings'
62
+ end
63
+ url = REPORTS_URL + 'responses/list?start=' + start_parsed.iso8601 + '&end=' + end_parsed.iso8601
64
+ url += '&limit' + limit.to_s unless limit.nil?
65
+ url += '&push_id_start&' + push_id_start unless push_id_start.nil?
66
+ @next_page = url
67
+ @data_attribute = 'pushes'
68
+ end
69
+ end
70
+
71
+ class DevicesReport
72
+ include Urbanairship::Common
73
+ include Urbanairship::Loggable
74
+
75
+ def initialize(client: required('client'))
76
+ @client = client
77
+ end
78
+
79
+ def get(date: required('date'))
80
+ fail ArgumentError,
81
+ 'date cannot be set to nil' if date.nil?
82
+ begin
83
+ date_parsed = Time.parse(date)
84
+ rescue ArgumentError
85
+ fail ArgumentError,
86
+ 'date must be a valid date string'
87
+ end
88
+ response = @client.send_request(
89
+ method: 'GET',
90
+ url: REPORTS_URL + 'devices/?date=' + date_parsed.iso8601
91
+ )
92
+ logger.info("Retrieved device report for date #{date}")
93
+ response
94
+ end
95
+ end
96
+
97
+ class OptInList < Urbanairship::Common::PageIterator
98
+ def initialize(client: required('client'), start_date: required('start_date'),
99
+ end_date: required('end_date'), precision: required('precision'))
100
+ super(client: client)
101
+ url = Helper.new.get_url(start_date, end_date, precision)
102
+ @next_page = REPORTS_URL + 'optins/' + url
103
+ @data_attribute = 'optins'
104
+ end
105
+ end
106
+
107
+ class OptOutList < Urbanairship::Common::PageIterator
108
+ def initialize(client: required('client'), start_date: required('start_date'),
109
+ end_date: required('end_date'), precision: required('precision'))
110
+ super(client: client)
111
+ url = Helper.new.get_url(start_date, end_date, precision)
112
+ @next_page = REPORTS_URL + 'optouts/' + url
113
+ @data_attribute = 'optouts'
114
+ end
115
+ end
116
+
117
+ class PushList < Urbanairship::Common::PageIterator
118
+ def initialize(client: required('client'), start_date: required('start_date'),
119
+ end_date: required('end_date'), precision: required('precision'))
120
+ super(client: client)
121
+ url = Helper.new.get_url(start_date, end_date, precision)
122
+ @next_page = REPORTS_URL + 'sends/' + url
123
+ @data_attribute = 'sends'
124
+ end
125
+ end
126
+
127
+ class ResponseReportList < Urbanairship::Common::PageIterator
128
+ def initialize(client: required('client'), start_date: required('start_date'),
129
+ end_date: required('end_date'), precision: required('precision'))
130
+ super(client: client)
131
+ url = Helper.new.get_url(start_date, end_date, precision)
132
+ @next_page = REPORTS_URL + 'responses/' + url
133
+ @data_attribute = 'responses'
134
+ end
135
+ end
136
+
137
+ class AppOpensList < Urbanairship::Common::PageIterator
138
+ def initialize(client: required('client'), start_date: required('start_date'),
139
+ end_date: required('end_date'), precision: required('precision'))
140
+ super(client: client)
141
+ url = Helper.new.get_url(start_date, end_date, precision)
142
+ @next_page = REPORTS_URL + 'opens/' + url
143
+ @data_attribute = 'opens'
144
+ end
145
+ end
146
+
147
+ class TimeInAppList < Urbanairship::Common::PageIterator
148
+ def initialize(client: required('client'), start_date: required('start_date'),
149
+ end_date: required('end_date'), precision: required('precision'))
150
+ super(client: client)
151
+ url = Helper.new.get_url(start_date, end_date, precision)
152
+ @next_page = REPORTS_URL + 'timeinapp/' + url
153
+ @data_attribute = 'timeinapp'
154
+ end
155
+ end
156
+ end
157
+ end
@@ -1,3 +1,3 @@
1
1
  module Urbanairship
2
- VERSION = '3.0.2'
2
+ VERSION = '3.1.0'
3
3
  end
data/lib/urbanairship.rb CHANGED
@@ -2,19 +2,24 @@ require 'urbanairship/push/audience'
2
2
  require 'urbanairship/push/payload'
3
3
  require 'urbanairship/push/schedule'
4
4
  require 'urbanairship/push/push'
5
+ require 'urbanairship/devices/segment'
6
+ require 'urbanairship/devices/channel_uninstall'
5
7
  require 'urbanairship/client'
6
8
  require 'urbanairship/common'
7
9
  require 'urbanairship/loggable'
8
10
  require 'urbanairship/util'
9
11
  require 'urbanairship/version'
12
+ require 'urbanairship/devices/devicelist'
13
+ require 'urbanairship/devices/channel_tags'
14
+ require 'urbanairship/devices/named_user'
15
+ require 'urbanairship/reports/per_push'
16
+ require 'urbanairship/reports/response_statistics'
10
17
 
11
18
  module Urbanairship
12
- # Make these functions available in the
13
- # `Urbanairship` namespace, as in the Python
14
- # library.
15
19
  extend Urbanairship::Push::Audience
16
20
  extend Urbanairship::Push::Payload
17
21
  extend Urbanairship::Push::Schedule
18
22
  extend Urbanairship::Push
19
-
23
+ include Urbanairship::Devices
24
+ include Urbanairship::Reports
20
25
  end
data/urbanairship.gemspec CHANGED
@@ -12,12 +12,12 @@ Gem::Specification.new do |spec|
12
12
 
13
13
  spec.summary = 'Ruby Gem for using the Urban Airship API'
14
14
  spec.description = 'A Ruby Library for using the Urban Airship web service API for push notifications and rich app pages.'
15
- spec.homepage = "https://github.com/urbanairship/ruby-library"
15
+ spec.homepage = 'https://github.com/urbanairship/ruby-library'
16
16
 
17
17
  spec.required_ruby_version = '>= 2.0.0'
18
18
 
19
19
  if spec.respond_to?(:metadata)
20
- spec.metadata['allowed_push_host'] = "https://rubygems.org"
20
+ spec.metadata['allowed_push_host'] = 'https://rubygems.org'
21
21
  else
22
22
  fail 'RubyGems 2.0 or newer is required to protect against public gem pushes.'
23
23
  end
metadata CHANGED
@@ -1,117 +1,117 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: urbanairship
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.2
4
+ version: 3.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Urban Airship
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-07-29 00:00:00.000000000 Z
11
+ date: 2015-09-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: unirest
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ~>
18
18
  - !ruby/object:Gem::Version
19
19
  version: '1.1'
20
- - - ">="
20
+ - - '>='
21
21
  - !ruby/object:Gem::Version
22
22
  version: 1.1.2
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
26
26
  requirements:
27
- - - "~>"
27
+ - - ~>
28
28
  - !ruby/object:Gem::Version
29
29
  version: '1.1'
30
- - - ">="
30
+ - - '>='
31
31
  - !ruby/object:Gem::Version
32
32
  version: 1.1.2
33
33
  - !ruby/object:Gem::Dependency
34
34
  name: bundler
35
35
  requirement: !ruby/object:Gem::Requirement
36
36
  requirements:
37
- - - "~>"
37
+ - - ~>
38
38
  - !ruby/object:Gem::Version
39
39
  version: '1'
40
40
  type: :development
41
41
  prerelease: false
42
42
  version_requirements: !ruby/object:Gem::Requirement
43
43
  requirements:
44
- - - "~>"
44
+ - - ~>
45
45
  - !ruby/object:Gem::Version
46
46
  version: '1'
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: guard-rspec
49
49
  requirement: !ruby/object:Gem::Requirement
50
50
  requirements:
51
- - - ">="
51
+ - - '>='
52
52
  - !ruby/object:Gem::Version
53
53
  version: '0'
54
54
  type: :development
55
55
  prerelease: false
56
56
  version_requirements: !ruby/object:Gem::Requirement
57
57
  requirements:
58
- - - ">="
58
+ - - '>='
59
59
  - !ruby/object:Gem::Version
60
60
  version: '0'
61
61
  - !ruby/object:Gem::Dependency
62
62
  name: pry
63
63
  requirement: !ruby/object:Gem::Requirement
64
64
  requirements:
65
- - - "~>"
65
+ - - ~>
66
66
  - !ruby/object:Gem::Version
67
67
  version: '0'
68
68
  type: :development
69
69
  prerelease: false
70
70
  version_requirements: !ruby/object:Gem::Requirement
71
71
  requirements:
72
- - - "~>"
72
+ - - ~>
73
73
  - !ruby/object:Gem::Version
74
74
  version: '0'
75
75
  - !ruby/object:Gem::Dependency
76
76
  name: rake
77
77
  requirement: !ruby/object:Gem::Requirement
78
78
  requirements:
79
- - - "~>"
79
+ - - ~>
80
80
  - !ruby/object:Gem::Version
81
81
  version: '10.0'
82
82
  type: :development
83
83
  prerelease: false
84
84
  version_requirements: !ruby/object:Gem::Requirement
85
85
  requirements:
86
- - - "~>"
86
+ - - ~>
87
87
  - !ruby/object:Gem::Version
88
88
  version: '10.0'
89
89
  - !ruby/object:Gem::Dependency
90
90
  name: rspec
91
91
  requirement: !ruby/object:Gem::Requirement
92
92
  requirements:
93
- - - "~>"
93
+ - - ~>
94
94
  - !ruby/object:Gem::Version
95
95
  version: '3'
96
96
  type: :development
97
97
  prerelease: false
98
98
  version_requirements: !ruby/object:Gem::Requirement
99
99
  requirements:
100
- - - "~>"
100
+ - - ~>
101
101
  - !ruby/object:Gem::Version
102
102
  version: '3'
103
103
  - !ruby/object:Gem::Dependency
104
104
  name: terminal-notifier-guard
105
105
  requirement: !ruby/object:Gem::Requirement
106
106
  requirements:
107
- - - "~>"
107
+ - - ~>
108
108
  - !ruby/object:Gem::Version
109
109
  version: '1'
110
110
  type: :development
111
111
  prerelease: false
112
112
  version_requirements: !ruby/object:Gem::Requirement
113
113
  requirements:
114
- - - "~>"
114
+ - - ~>
115
115
  - !ruby/object:Gem::Version
116
116
  version: '1'
117
117
  description: A Ruby Library for using the Urban Airship web service API for push notifications
@@ -122,25 +122,44 @@ executables: []
122
122
  extensions: []
123
123
  extra_rdoc_files: []
124
124
  files:
125
- - ".gitignore"
126
- - ".rspec"
127
- - ".travis.yml"
125
+ - .gitignore
126
+ - .rspec
127
+ - .travis.yml
128
128
  - CHANGELOG
129
129
  - Gemfile
130
130
  - Guardfile
131
131
  - LICENSE
132
- - README.md
132
+ - README.rst
133
133
  - Rakefile
134
134
  - bin/console
135
135
  - bin/setup
136
+ - docs/Makefile
137
+ - docs/channel_uninstall.rst
138
+ - docs/conf.py
139
+ - docs/devices.rst
140
+ - docs/examples.rst
141
+ - docs/exceptions.rst
142
+ - docs/index.rst
143
+ - docs/named_user.rst
144
+ - docs/push.rst
145
+ - docs/reports.rst
146
+ - docs/segment.rst
147
+ - docs/tags.rst
136
148
  - lib/urbanairship.rb
137
149
  - lib/urbanairship/client.rb
138
150
  - lib/urbanairship/common.rb
151
+ - lib/urbanairship/devices/channel_tags.rb
152
+ - lib/urbanairship/devices/channel_uninstall.rb
153
+ - lib/urbanairship/devices/devicelist.rb
154
+ - lib/urbanairship/devices/named_user.rb
155
+ - lib/urbanairship/devices/segment.rb
139
156
  - lib/urbanairship/loggable.rb
140
157
  - lib/urbanairship/push/audience.rb
141
158
  - lib/urbanairship/push/payload.rb
142
159
  - lib/urbanairship/push/push.rb
143
160
  - lib/urbanairship/push/schedule.rb
161
+ - lib/urbanairship/reports/per_push.rb
162
+ - lib/urbanairship/reports/response_statistics.rb
144
163
  - lib/urbanairship/util.rb
145
164
  - lib/urbanairship/version.rb
146
165
  - urbanairship.gemspec
@@ -155,17 +174,17 @@ require_paths:
155
174
  - lib
156
175
  required_ruby_version: !ruby/object:Gem::Requirement
157
176
  requirements:
158
- - - ">="
177
+ - - '>='
159
178
  - !ruby/object:Gem::Version
160
179
  version: 2.0.0
161
180
  required_rubygems_version: !ruby/object:Gem::Requirement
162
181
  requirements:
163
- - - ">="
182
+ - - '>='
164
183
  - !ruby/object:Gem::Version
165
184
  version: '0'
166
185
  requirements: []
167
186
  rubyforge_project:
168
- rubygems_version: 2.2.2
187
+ rubygems_version: 2.4.8
169
188
  signing_key:
170
189
  specification_version: 4
171
190
  summary: Ruby Gem for using the Urban Airship API