hey-you-fcm-push 0.1.1 → 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
  SHA256:
3
- metadata.gz: e4446d65f49ee45b68fede479347bb61f3594fc5b80c68fe57ca9022f73843fa
4
- data.tar.gz: a69ba74aa8a1171ae14a446d38a5f6ffaf625c8df6e667e409849ce1d7f12b93
3
+ metadata.gz: 259c1bf26f492d3cad9f8d45e6bbd7ff2fe666d02439df2cf4dc4be2e8e8c4a5
4
+ data.tar.gz: d87c689e4f8015bc7b3ba105e8fce174833f5e0b7fd015c16418f0cbcd396490
5
5
  SHA512:
6
- metadata.gz: 4e6de378549a211f5355e35753ed31ab4f786547b9fd6eb4779a5744776f1fe0df6a9be88bbf74e439fb7f97dcf0b4be6f07607502859bffcf60be3962036824
7
- data.tar.gz: fe7e04b2d6997a4ef83a2bcfa6f3698861733f4e2020ffed2314ef32ee1aa1c6fb842c9eccf9b1d10a4c9fe2c368578362d61c5dad3bd09d03f325ed53731b26
6
+ metadata.gz: 3c8bb04bff1801c817287bc13fb77345b1ea3560398296551ea0a16b55e974a29dedfe80069cbc75ce64fa7918231196407df2db8cedb8cf55bdfdcfb1b1e6e0
7
+ data.tar.gz: f18759556a4dba3a8f720c89e5d9e7523a1f888e3b6e8d3e6cd7109968b070fa655dc52c49918c2770238d07f444531c48405f48e9a8150efbee377e9ca31929
data/bin/console CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  require "bundler/setup"
4
- require "hey_you_fcm_push"
4
+ require "hey-you-fcm-push"
5
5
 
6
6
  # You can add fixtures and/or initialization code here to make experimenting
7
7
  # with your gem easier. You can also use a different console, if you like.
@@ -26,9 +26,10 @@ Gem::Specification.new do |spec|
26
26
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
27
27
  spec.require_paths = ["lib"]
28
28
 
29
- spec.add_runtime_dependency "hey-you", '>= 1.4'
30
- spec.add_runtime_dependency "googleauth", '~> 0.10.0'
31
- spec.add_runtime_dependency "httparty", '~> 0.18.0'
29
+ spec.add_runtime_dependency "hey-you", '>= 1.4.2'
30
+ spec.add_runtime_dependency "googleauth", '~> 0.14'
31
+ spec.add_runtime_dependency "httparty", '~> 0.18'
32
+ spec.add_runtime_dependency "activesupport", '>= 5'
32
33
 
33
34
  spec.add_development_dependency "rake", "~> 13.0"
34
35
  spec.add_development_dependency "rspec", "~> 3.0"
@@ -1,4 +1,5 @@
1
1
  require 'hey_you_fcm_push/message_object'
2
+ require 'active_support/core_ext/object/deep_dup'
2
3
 
3
4
  module HeyYou
4
5
  class Builder
@@ -12,15 +13,17 @@ module HeyYou
12
13
  @condition = ch_data.fetch('condition', nil)
13
14
  @name = ch_data.fetch('name', nil)
14
15
 
15
- @notification = interpolate_notification(ch_data.fetch('notification', nil))
16
+ @notification = interpolate_notification(ch_data.fetch('notification', nil)&.deep_dup)
16
17
 
17
- @android = interpolate_notification(ch_data.fetch('android', nil))
18
- @webpush = interpolate_notification(ch_data.fetch('webpush', nil))
19
- @apns = interpolate_notification(ch_data.fetch('apns', nil))
20
- @fcm_options = interpolate_notification(ch_data.fetch('fcm_options', nil))
21
- @push_data = ch_data.fetch('push_data', nil)
18
+ @android = interpolate_notification(ch_data.fetch('android', nil)&.deep_dup)
19
+ @webpush = interpolate_notification(ch_data.fetch('webpush', nil)&.deep_dup)
20
+ @apns = interpolate_notification(ch_data.fetch('apns', nil)&.deep_dup)
21
+ @fcm_options = interpolate_notification(ch_data.fetch('fcm_options', nil)&.deep_dup)
22
+ @push_data = ch_data.fetch('push_data', nil)&.deep_dup
22
23
  end
23
24
 
25
+ private
26
+
24
27
  def interpolate_notification(data)
25
28
  return unless data
26
29
 
@@ -10,6 +10,7 @@ module HeyYou
10
10
  # @param [HeyYou::Builder] builder - builder with notifications texts and settings
11
11
  # @option [String] name - Output Only. The identifier of the message sent
12
12
  # @option [String] token - Registration token to send a message to.
13
+ # @option [String] to - Alias for `token`. `token` in high priority.
13
14
  # @option [String] topic - Topic name to send a message to, e.g. "weather".
14
15
  # @option [String] condition - Condition to send a message to, e.g. "'foo' in topics && 'bar' in topics".
15
16
  # @option [Hash] notification - Basic notification template to use across all platforms.
@@ -19,12 +20,24 @@ module HeyYou
19
20
  # @option [Hash] fcm_options - Platform independent options for features provided by the FCM SDKs.
20
21
  # @option [Hash] push_data - Input only. Arbitrary key/value payload. The key should not be a reserved word ("from", "message_type", or any word starting with "google" or "gcm").
21
22
  #
22
- # @return [Hash] - FCM response
23
+ # @return [Array{Hash}] - FCM responses
23
24
  #
24
25
  # @see: https://firebase.google.com/docs/reference/fcm/rest/v1/projects.messages#resource:-message
25
26
  def send!(builder, **options)
26
- message = build_message(builder, **options)
27
- HeyYouFcmPush::Connection.instance.send_notification(message, validate_only: options[:validate_only])
27
+ options[:token] ||= options[:to]
28
+
29
+ if options[:token].is_a?(Array)
30
+ messages = options[:token].map { |token| build_message(builder, **options.merge(token: token)) }
31
+ end
32
+
33
+ messages ||= [build_message(builder, **options)]
34
+
35
+ messages.map do |message|
36
+ {
37
+ receiver: message.receiver_hash,
38
+ response: HeyYouFcmPush::Connection.instance.send_notification(message.to_h, validate_only: options[:validate_only])
39
+ }
40
+ end
28
41
  end
29
42
 
30
43
  private
@@ -41,7 +54,7 @@ module HeyYou
41
54
  apns: options[:apns] || builder.fcm_push.apns,
42
55
  fcm_options: options[:fcm_options]|| builder.fcm_push.fcm_options,
43
56
  data: options[:push_data] || builder.fcm_push.push_data
44
- ).to_h
57
+ )
45
58
  end
46
59
  end
47
60
  end
@@ -10,7 +10,7 @@ module HeyYouFcmPush
10
10
  RETRY_COUNT = 1
11
11
  HTTP_CODES = {
12
12
  not_auth: 401,
13
- success: 200
13
+ server_error: 500
14
14
  }
15
15
 
16
16
  attr_reader :authorization, :options, :project_id, :uri
@@ -44,13 +44,15 @@ module HeyYouFcmPush
44
44
  private
45
45
 
46
46
  def make_request(request_options)
47
+ HeyYou::Config.instance.logger&.debug("Send request to #{uri} with options #{request_options}")
47
48
  response = HTTParty.post(uri, request_options)
49
+ HeyYou::Config.instance.logger&.debug("Response: #{response}")
48
50
  process_response(response)
49
51
  end
50
52
 
51
53
  def process_response(response)
52
54
  raise AuthError if response.code == HTTP_CODES[:not_auth]
53
- return response.to_hash if response.code == HTTP_CODES[:success]
55
+ return response.to_hash if response.code <= HTTP_CODES[:server_error]
54
56
 
55
57
  raise ResponseError, "response code: #{response.code}"
56
58
  end
@@ -34,7 +34,7 @@ module HeyYouFcmPush
34
34
  @web_push_config = WebPushConfig.new(options[:webpush].transform_keys(&:to_sym)) if options[:web_push_config]
35
35
  @apns_config = ApnsConfig.new(options[:apns].transform_keys(&:to_sym)) if options[:apns_config]
36
36
  @fcm_options = FcmOptions.new(**options[:fcm_options].transform_keys(&:to_sym)) if options[:fcm_options]
37
- @push_data = options[:data]
37
+ @push_data = { data: options[:data].to_json }
38
38
  end
39
39
 
40
40
  def to_h
@@ -1,3 +1,3 @@
1
1
  module HeyYouFcmPush
2
- VERSION = "0.1.1"
2
+ VERSION = "0.3.1"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hey-you-fcm-push
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sergey Nesterov
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-12-26 00:00:00.000000000 Z
11
+ date: 2021-02-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: hey-you
@@ -16,42 +16,56 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '1.4'
19
+ version: 1.4.2
20
20
  type: :runtime
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.4'
26
+ version: 1.4.2
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: googleauth
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 0.10.0
33
+ version: '0.14'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 0.10.0
40
+ version: '0.14'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: httparty
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 0.18.0
47
+ version: '0.18'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: 0.18.0
54
+ version: '0.18'
55
+ - !ruby/object:Gem::Dependency
56
+ name: activesupport
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '5'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '5'
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: rake
57
71
  requirement: !ruby/object:Gem::Requirement