onesignal-ruby 0.3.0 → 0.4.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.
@@ -27,6 +27,31 @@ module OneSignal
27
27
  Responses::Notification.from_json fetched.body
28
28
  end
29
29
 
30
+ def fetch_notifications(page_limit: 50, page_offset: 0, kind: nil)
31
+ return unless OneSignal.config.active
32
+
33
+ Enumerator.new() do |yielder|
34
+ limit = page_limit
35
+ offset = page_offset
36
+
37
+ fetched = Commands::FetchNotifications.call limit, offset, kind
38
+ parsed = JSON.parse(fetched.body)
39
+
40
+ total_count = parsed["total_count"]
41
+ max_pages = (total_count / limit.to_f).ceil
42
+
43
+ loop do
44
+ parsed['notifications'].each do |notification|
45
+ yielder << Responses::Notification.from_json(notification)
46
+ end
47
+ offset += 1
48
+ break if offset >= max_pages
49
+ fetched = Commands::FetchNotifications.call limit, offset*limit, kind
50
+ parsed = JSON.parse(fetched.body)
51
+ end
52
+ end
53
+ end
54
+
30
55
  def fetch_player player_id
31
56
  return unless OneSignal.config.active
32
57
 
@@ -41,6 +66,13 @@ module OneSignal
41
66
  JSON.parse(fetched.body)['players'].map { |player| Responses::Player.from_json player }
42
67
  end
43
68
 
69
+ def csv_export params = {}
70
+ return unless OneSignal.config.active
71
+
72
+ fetched = Commands::CsvExport.call params
73
+ Responses::CsvExport.from_json fetched.body
74
+ end
75
+
44
76
  def config
45
77
  @config ||= Configuration.new
46
78
  end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module OneSignal
4
+ class Buttons
5
+ attr_reader :buttons
6
+
7
+ def initialize buttons: nil
8
+ @buttons = buttons
9
+ end
10
+
11
+ def as_json options = nil
12
+ {
13
+ 'buttons' => @buttons.as_json(options),
14
+ }
15
+ end
16
+ end
17
+ end
@@ -27,6 +27,12 @@ module OneSignal
27
27
  get "notifications/#{notification_id}"
28
28
  end
29
29
 
30
+ def fetch_notifications page_limit: 50, page_offset: 0, kind: nil
31
+ url = "notifications?limit=#{page_limit}&offset=#{page_offset}"
32
+ url = kind ? "#{url}&kind=#{kind}" : url
33
+ get url
34
+ end
35
+
30
36
  def fetch_players
31
37
  get 'players'
32
38
  end
@@ -35,10 +41,17 @@ module OneSignal
35
41
  get "players/#{player_id}"
36
42
  end
37
43
 
44
+ def csv_export extra_fields: nil, last_active_since: nil, segment_name: nil
45
+ post "players/csv_export?app_id=#{@app_id}",
46
+ extra_fields: extra_fields,
47
+ last_active_since: last_active_since&.to_i&.to_s,
48
+ segment_name: segment_name
49
+ end
50
+
38
51
  private
39
52
 
40
53
  def create_body payload
41
- body = payload.as_json
54
+ body = payload.as_json.delete_if { |_, v| v.nil? }
42
55
  body['app_id'] = @app_id
43
56
  body
44
57
  end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module OneSignal
4
+ module Commands
5
+ class CsvExport < BaseCommand
6
+ def initialize params
7
+ @params = params || {}
8
+ end
9
+
10
+ def call
11
+ client.csv_export @params
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module OneSignal
4
+ module Commands
5
+ class FetchNotifications < BaseCommand
6
+ def initialize page_limit, page_offset, kind
7
+ @page_limit = page_limit
8
+ @page_offset = page_offset
9
+ @kind = kind
10
+ end
11
+
12
+ def call
13
+ client.fetch_notifications page_limit: @page_limit, page_offset: @page_offset, kind: @kind
14
+ end
15
+ end
16
+ end
17
+ end
@@ -6,7 +6,7 @@ require 'onesignal/notification/headings'
6
6
  module OneSignal
7
7
  class Notification
8
8
  attr_reader :contents, :headings, :template_id, :included_segments, :excluded_segments,
9
- :included_targets, :send_after, :attachments, :sounds
9
+ :included_targets, :send_after, :attachments, :sounds, :buttons
10
10
 
11
11
  def initialize **params
12
12
  unless params.include?(:contents) || params.include?(:template_id)
@@ -23,6 +23,7 @@ module OneSignal
23
23
  @attachments = params[:attachments]
24
24
  @filters = params[:filters]
25
25
  @sounds = params[:sounds]
26
+ @buttons = params[:buttons]
26
27
  end
27
28
 
28
29
  def as_json options = {}
@@ -30,6 +31,7 @@ module OneSignal
30
31
  .except('attachments', 'sounds', 'included_targets')
31
32
  .merge(@attachments&.as_json(options) || {})
32
33
  .merge(@sounds&.as_json(options) || {})
34
+ .merge(@buttons&.as_json(options) || {})
33
35
  .merge(@included_targets&.as_json(options) || {})
34
36
  .select { |_k, v| v.present? }
35
37
  end
@@ -10,7 +10,7 @@ module OneSignal
10
10
 
11
11
  def initialize en:, **content
12
12
  @content = content.merge(en: en)
13
- create_readers @content
13
+ create_readers **@content
14
14
  end
15
15
  end
16
16
  end
@@ -10,7 +10,7 @@ module OneSignal
10
10
 
11
11
  def initialize en:, **headings
12
12
  @headings = headings.merge(en: en)
13
- create_readers @headings
13
+ create_readers **@headings
14
14
  end
15
15
  end
16
16
  end
@@ -6,7 +6,12 @@ module OneSignal
6
6
  def initialize attributes = {}
7
7
  @attributes = attributes.deep_symbolize_keys
8
8
  .keep_if { |k, _v| self.class::ATTRIBUTES_WHITELIST.include?(k.to_sym) }
9
- self.class.attr_reader(*self.class::ATTRIBUTES_WHITELIST)
9
+
10
+ self.class::ATTRIBUTES_WHITELIST.each do |attribute|
11
+ self.class.send(:define_method, attribute) do
12
+ @attributes[attribute]
13
+ end
14
+ end
10
15
  end
11
16
  end
12
17
  end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ module OneSignal
4
+ module Responses
5
+ # Example JSON
6
+ # {
7
+ # "csv_file_url": "https://onesignal.s3.amazonaws.com/csv_exports/test/users_abc123.csv.gz"
8
+ # }
9
+ class CsvExport < BaseResponse
10
+ ATTRIBUTES_WHITELIST = %i[csv_file_url].freeze
11
+
12
+ def self.from_json json
13
+ body = json.is_a?(String) ? JSON.parse(json) : json
14
+ new(body)
15
+ end
16
+ end
17
+ end
18
+ end
@@ -6,6 +6,7 @@ module OneSignal
6
6
  ACTIVE_USERS = 'Active Users'
7
7
  ENGAGED_USERS = 'Engaged Users'
8
8
  INACTIVE_USERS = 'Inactive Users'
9
+ SUBSCRIBED_USERS = 'Subscribed Users'
9
10
 
10
11
  def initialize name:
11
12
  @name = name
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module OneSignal
4
- VERSION = '0.3.0'
4
+ VERSION = '0.4.0'
5
5
  API_VERSION = 'v1'
6
6
  end
@@ -33,16 +33,16 @@ Gem::Specification.new do |spec|
33
33
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
34
34
  spec.require_paths = ['lib']
35
35
 
36
- spec.add_development_dependency 'bundler', '~> 1.16'
36
+ spec.add_development_dependency 'bundler', '~> 2.0'
37
37
  spec.add_development_dependency 'dotenv', '~> 2.5'
38
38
  spec.add_development_dependency 'factory_bot', '~> 4.11'
39
- spec.add_development_dependency 'rake', '~> 10.0'
39
+ spec.add_development_dependency 'rake', '~> 13.0'
40
40
  spec.add_development_dependency 'rspec', '~> 3.0'
41
41
  spec.add_development_dependency 'rspec_junit_formatter', '~> 0.4'
42
42
  spec.add_development_dependency 'vcr', '~> 4.0', '>= 4.0.0'
43
43
  spec.add_development_dependency 'webmock', '~> 3.4'
44
44
 
45
- spec.add_runtime_dependency 'activesupport', '~> 5.0', '>= 5.0.0'
45
+ spec.add_runtime_dependency 'activesupport', '>= 5.0.0', '< 7'
46
46
  spec.add_runtime_dependency 'faraday', '~> 0.15', '>= 0.15.4'
47
47
  spec.add_runtime_dependency 'simple_command', '~> 0', '>= 0.0.9'
48
48
  end
@@ -0,0 +1,7 @@
1
+ with import <nixpkgs> {};
2
+
3
+ pkgs.mkShell {
4
+ buildInputs = [
5
+ ruby_2_7
6
+ ];
7
+ }
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: onesignal-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matteo Joliveau
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-01-08 00:00:00.000000000 Z
11
+ date: 2021-01-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.16'
19
+ version: '2.0'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '1.16'
26
+ version: '2.0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: dotenv
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -58,14 +58,14 @@ dependencies:
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '10.0'
61
+ version: '13.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
- version: '10.0'
68
+ version: '13.0'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rspec
71
71
  requirement: !ruby/object:Gem::Requirement
@@ -132,22 +132,22 @@ dependencies:
132
132
  name: activesupport
133
133
  requirement: !ruby/object:Gem::Requirement
134
134
  requirements:
135
- - - "~>"
136
- - !ruby/object:Gem::Version
137
- version: '5.0'
138
135
  - - ">="
139
136
  - !ruby/object:Gem::Version
140
137
  version: 5.0.0
138
+ - - "<"
139
+ - !ruby/object:Gem::Version
140
+ version: '7'
141
141
  type: :runtime
142
142
  prerelease: false
143
143
  version_requirements: !ruby/object:Gem::Requirement
144
144
  requirements:
145
- - - "~>"
146
- - !ruby/object:Gem::Version
147
- version: '5.0'
148
145
  - - ">="
149
146
  - !ruby/object:Gem::Version
150
147
  version: 5.0.0
148
+ - - "<"
149
+ - !ruby/object:Gem::Version
150
+ version: '7'
151
151
  - !ruby/object:Gem::Dependency
152
152
  name: faraday
153
153
  requirement: !ruby/object:Gem::Requirement
@@ -197,18 +197,22 @@ extra_rdoc_files: []
197
197
  files:
198
198
  - ".circleci/config.yml"
199
199
  - ".editorconfig"
200
+ - ".envrc"
200
201
  - ".gitignore"
201
202
  - ".rspec"
202
203
  - ".rubocop.yml"
204
+ - ".ruby-version"
205
+ - CODEOWNERS
203
206
  - CODE_OF_CONDUCT.md
204
207
  - Gemfile
205
- - Gemfile.lock
206
208
  - LICENSE.txt
207
209
  - README.md
208
210
  - Rakefile
209
211
  - bin/console
210
212
  - bin/setup
213
+ - fixtures/vcr_cassettes/os-csv-export.yml
211
214
  - fixtures/vcr_cassettes/os-fetch-noti.yml
215
+ - fixtures/vcr_cassettes/os-fetch-notifications.yml
212
216
  - fixtures/vcr_cassettes/os-fetch-player.yml
213
217
  - fixtures/vcr_cassettes/os-fetch-players.yml
214
218
  - fixtures/vcr_cassettes/os-send-noti.yml
@@ -216,12 +220,15 @@ files:
216
220
  - lib/onesignal/attachments.rb
217
221
  - lib/onesignal/auto_map.rb
218
222
  - lib/onesignal/autoloader.rb
223
+ - lib/onesignal/buttons.rb
219
224
  - lib/onesignal/client.rb
220
225
  - lib/onesignal/commands.rb
221
226
  - lib/onesignal/commands/autoloader.rb
222
227
  - lib/onesignal/commands/base_command.rb
223
228
  - lib/onesignal/commands/create_notification.rb
229
+ - lib/onesignal/commands/csv_export.rb
224
230
  - lib/onesignal/commands/fetch_notification.rb
231
+ - lib/onesignal/commands/fetch_notifications.rb
225
232
  - lib/onesignal/commands/fetch_player.rb
226
233
  - lib/onesignal/commands/fetch_players.rb
227
234
  - lib/onesignal/configuration.rb
@@ -233,12 +240,14 @@ files:
233
240
  - lib/onesignal/responses.rb
234
241
  - lib/onesignal/responses/autoloader.rb
235
242
  - lib/onesignal/responses/base_response.rb
243
+ - lib/onesignal/responses/csv_export.rb
236
244
  - lib/onesignal/responses/notification.rb
237
245
  - lib/onesignal/responses/player.rb
238
246
  - lib/onesignal/segment.rb
239
247
  - lib/onesignal/sounds.rb
240
248
  - lib/onesignal/version.rb
241
249
  - onesignal-ruby.gemspec
250
+ - shell.nix
242
251
  homepage: https://github.com/mikamai/onesignal-ruby
243
252
  licenses:
244
253
  - MIT
@@ -259,8 +268,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
259
268
  - !ruby/object:Gem::Version
260
269
  version: '0'
261
270
  requirements: []
262
- rubyforge_project:
263
- rubygems_version: 2.7.7
271
+ rubygems_version: 3.1.2
264
272
  signing_key:
265
273
  specification_version: 4
266
274
  summary: Ruby wrapper to OneSignal API
@@ -1,85 +0,0 @@
1
- GIT
2
- remote: https://github.com/stympy/faker.git
3
- revision: 14599cc0f7a8bdf7b842714f776477061abda6e4
4
- branch: master
5
- specs:
6
- faker (1.9.1)
7
- i18n (>= 0.7)
8
-
9
- PATH
10
- remote: .
11
- specs:
12
- onesignal-ruby (0.2.0)
13
- activesupport (~> 5.0, >= 5.0.0)
14
- faraday (~> 0.15, >= 0.15.4)
15
- simple_command (~> 0, >= 0.0.9)
16
-
17
- GEM
18
- remote: https://rubygems.org/
19
- specs:
20
- activesupport (5.2.2)
21
- concurrent-ruby (~> 1.0, >= 1.0.2)
22
- i18n (>= 0.7, < 2)
23
- minitest (~> 5.1)
24
- tzinfo (~> 1.1)
25
- addressable (2.5.2)
26
- public_suffix (>= 2.0.2, < 4.0)
27
- concurrent-ruby (1.1.4)
28
- crack (0.4.3)
29
- safe_yaml (~> 1.0.0)
30
- diff-lcs (1.3)
31
- dotenv (2.6.0)
32
- factory_bot (4.11.1)
33
- activesupport (>= 3.0.0)
34
- faraday (0.15.4)
35
- multipart-post (>= 1.2, < 3)
36
- hashdiff (0.3.8)
37
- i18n (1.5.1)
38
- concurrent-ruby (~> 1.0)
39
- minitest (5.11.3)
40
- multipart-post (2.0.0)
41
- public_suffix (3.0.3)
42
- rake (10.5.0)
43
- rspec (3.8.0)
44
- rspec-core (~> 3.8.0)
45
- rspec-expectations (~> 3.8.0)
46
- rspec-mocks (~> 3.8.0)
47
- rspec-core (3.8.0)
48
- rspec-support (~> 3.8.0)
49
- rspec-expectations (3.8.2)
50
- diff-lcs (>= 1.2.0, < 2.0)
51
- rspec-support (~> 3.8.0)
52
- rspec-mocks (3.8.0)
53
- diff-lcs (>= 1.2.0, < 2.0)
54
- rspec-support (~> 3.8.0)
55
- rspec-support (3.8.0)
56
- rspec_junit_formatter (0.4.1)
57
- rspec-core (>= 2, < 4, != 2.12.0)
58
- safe_yaml (1.0.4)
59
- simple_command (0.0.9)
60
- thread_safe (0.3.6)
61
- tzinfo (1.2.5)
62
- thread_safe (~> 0.1)
63
- vcr (4.0.0)
64
- webmock (3.5.1)
65
- addressable (>= 2.3.6)
66
- crack (>= 0.3.2)
67
- hashdiff
68
-
69
- PLATFORMS
70
- ruby
71
-
72
- DEPENDENCIES
73
- bundler (~> 1.16)
74
- dotenv (~> 2.5)
75
- factory_bot (~> 4.11)
76
- faker!
77
- onesignal-ruby!
78
- rake (~> 10.0)
79
- rspec (~> 3.0)
80
- rspec_junit_formatter (~> 0.4)
81
- vcr (~> 4.0, >= 4.0.0)
82
- webmock (~> 3.4)
83
-
84
- BUNDLED WITH
85
- 1.16.2