moromi-aws-sns 0.6.0 → 0.7.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: fd0178ffca367a9cf72dd93d1e3349345e75b9b0
4
- data.tar.gz: 7814bea3bf93d29b8bec1a7254bca7e145914d02
3
+ metadata.gz: b9be304eada55a17272c684d5700ca9778241c95
4
+ data.tar.gz: ef097f330567a35a4c65d863095164833e77faf8
5
5
  SHA512:
6
- metadata.gz: 2f397cb91c7c5a5518efdcb93360c5033cf0e6526e73d1d2ca2e9d09dca95dd4983a364ebe1c4f846345c3620c6169c400b8d6cafacc5303c55009304ce6a485
7
- data.tar.gz: dd6d0c8f1f8076c33628ff350eecf9b911f2a6f53a252f5af0d95709401e75d4ff03646f356fa64ed0122117aef35718cfe1c67b87ca9bed05f2b2e38d130c30
6
+ metadata.gz: e06da11f8bde51e9e3e35c83be4b95fade05b1f127dcef6f794fa4ba0b36708e35eb390811b3100f402e74b9336053253ccf044e65094245637ee34bab7eed44
7
+ data.tar.gz: f8b1502822a12a9bc9819fc1d73d09ec2471d03c0ba0b36079c6a1719cae7cc2c9a3fa3df9000cd7dac06cbacb5679f29ff08a196f873a9dc766d0580afef80d
@@ -56,30 +56,25 @@ module Moromi
56
56
  end
57
57
 
58
58
  # @param [String] arn
59
- # @param [Moromi::Aws::Sns::Message::Base] message
60
- def send_message(arn, message)
59
+ # @param [Moromi::Aws::Sns::Message::Parameter] parameter
60
+ def publish(arn, parameter)
61
61
  options = {
62
62
  target_arn: arn,
63
- message: message.to_parameter.to_json,
63
+ message: parameter.to_json,
64
64
  message_structure: 'json'
65
65
  }
66
- publish(options)
66
+ call_publish(options)
67
67
  end
68
68
 
69
69
  # @param [String] topic_arn
70
- # @param [Moromi::Aws::Sns::Message::Base] message
71
- def send_message_to_topic(topic_arn, message)
70
+ # @param [Moromi::Aws::Sns::Message::Parameter] parameter
71
+ def publish_to_topic(topic_arn, parameter)
72
72
  options = {
73
73
  topic_arn: topic_arn,
74
- message: message.to_parameter.to_json,
74
+ message: parameter.to_json,
75
75
  message_structure: 'json'
76
76
  }
77
- publish(options)
78
- end
79
-
80
- def publish(options)
81
- response = client.publish(options)
82
- response.message_id
77
+ call_publish(options)
83
78
  end
84
79
 
85
80
  def get_endpoint_attributes(endpoint_arn)
@@ -99,6 +94,11 @@ module Moromi
99
94
  def client
100
95
  @client ||= ::Aws::SNS::Client.new(region: @region, credentials: credentials)
101
96
  end
97
+
98
+ def call_publish(options)
99
+ response = client.publish(options)
100
+ response.message_id
101
+ end
102
102
  end
103
103
  end
104
104
  end
@@ -0,0 +1,64 @@
1
+ module Moromi
2
+ module Aws
3
+ module Sns
4
+ module Message
5
+ class Apns < Base
6
+ attr_reader :alert
7
+ attr_reader :badge
8
+ attr_reader :sound
9
+ attr_reader :content_available
10
+ attr_reader :mutable_content
11
+ attr_reader :category
12
+ attr_reader :priority
13
+ attr_reader :type
14
+ attr_reader :custom_data
15
+
16
+ def initialize(alert:, badge:, sound: 'default', content_available: 1, mutable_content: 0, category: nil,
17
+ priority: 10, type: nil, custom_data: {})
18
+ @alert = alert
19
+ @badge = badge
20
+ @sound = sound
21
+ @content_available = content_available
22
+ @mutable_content = mutable_content
23
+ @category = category
24
+ @priority = priority
25
+ @type = type || self.class.name
26
+ @custom_data = setup_initial_custom_data({type: @type}.merge(custom_data))
27
+ end
28
+
29
+ def to_hash
30
+ {
31
+ alert: @alert,
32
+ badge: @badge,
33
+ sound: @sound,
34
+ content_available: @content_available,
35
+ mutable_content: @mutable_content,
36
+ category: @category,
37
+ priority: @priority,
38
+ type: @type,
39
+ custom_data: @custom_data
40
+ }
41
+ end
42
+
43
+ def to_message_json
44
+ aps = to_hash
45
+ %i[custom_data type].each { |k| aps.delete(k) }
46
+ @custom_data.merge({aps: aps}).to_json
47
+ end
48
+
49
+ private
50
+
51
+ def setup_initial_custom_data(custom_data)
52
+ custom_data
53
+ end
54
+
55
+ class << self
56
+ def build_silent_push_message(priority: 10, custom_data: {})
57
+ new('', nil, sound: nil, content_available: 1, priority: priority, custom_data: custom_data)
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end
63
+ end
64
+ end
@@ -1,20 +1,26 @@
1
+ require 'json'
2
+
1
3
  module Moromi
2
4
  module Aws
3
5
  module Sns
4
6
  module Message
5
- module Base
6
- # @return Moromi::Aws::Sns::Message::Parameter
7
- def to_parameter
7
+ class Base
8
+ def to_hash
8
9
  raise NotImplementedError
9
10
  end
10
11
 
11
- def serialize
12
+ def to_message_json
12
13
  raise NotImplementedError
13
14
  end
14
15
 
15
- # @return Moromi::Aws::Sns::Message::Base
16
- def self.unserialize(data)
17
- raise NotImplementedError
16
+ def ==(other)
17
+ to_hash == other.to_hash
18
+ end
19
+
20
+ class << self
21
+ def build_from_hash(hash)
22
+ new(hash)
23
+ end
18
24
  end
19
25
  end
20
26
  end
@@ -0,0 +1,75 @@
1
+ module Moromi
2
+ module Aws
3
+ module Sns
4
+ module Message
5
+ class Fcm < Base
6
+ # https://firebase.google.com/docs/cloud-messaging/http-server-ref?hl=ja#notification-payload-support
7
+ attr_reader :title
8
+ attr_reader :body
9
+ attr_reader :android_channel_id
10
+ attr_reader :icon
11
+ attr_reader :sound
12
+ attr_reader :tag
13
+ attr_reader :color
14
+ attr_reader :click_action
15
+ attr_reader :body_loc_key
16
+ attr_reader :body_loc_args
17
+ attr_reader :title_loc_key
18
+ attr_reader :title_loc_args
19
+
20
+ def initialize(title: nil, body: nil, android_channel_id: nil, icon: nil, sound: nil, tag: nil, color: nil,
21
+ click_action: nil,
22
+ body_loc_key: nil, body_loc_args: nil,
23
+ title_loc_key: nil, title_loc_args: nil,
24
+ type: nil, custom_data: {})
25
+ @title = title
26
+ @body = body
27
+ @android_channel_id = android_channel_id
28
+ @icon = icon
29
+ @sound = sound
30
+ @tag = tag
31
+ @color = color
32
+ @click_action = click_action
33
+ @body_loc_key = body_loc_key
34
+ @body_loc_args = body_loc_args
35
+ @title_loc_key = title_loc_key
36
+ @title_loc_args = title_loc_args
37
+ @type = type || self.class.name
38
+ @custom_data = setup_initial_custom_data({type: @type}.merge(custom_data))
39
+ end
40
+
41
+ def to_hash
42
+ {
43
+ title: @title,
44
+ body: @body,
45
+ android_channel_id: @android_channel_id,
46
+ icon: @icon,
47
+ sound: @sound,
48
+ tag: @tag,
49
+ color: @color,
50
+ click_action: @click_action,
51
+ body_loc_key: @body_loc_key,
52
+ body_loc_args: @body_loc_args,
53
+ title_loc_key: @title_loc_key,
54
+ title_loc_args: @title_loc_args,
55
+ type: @type,
56
+ custom_data: @custom_data
57
+ }
58
+ end
59
+
60
+ def to_message_json
61
+ notification = to_hash
62
+ %i[custom_data type].each { |k| notification.delete(k) }
63
+ {notification: notification, data: @custom_data}.to_json
64
+ end
65
+
66
+ private
67
+
68
+ def setup_initial_custom_data(custom_data)
69
+ custom_data
70
+ end
71
+ end
72
+ end
73
+ end
74
+ end
75
+ end
@@ -5,19 +5,39 @@ module Moromi
5
5
  module Sns
6
6
  module Message
7
7
  class Parameter
8
+ # @param [Moromi::Aws::Sns::Message::Apns] apns
9
+ # @param [Moromi::Aws::Sns::Message::Fcm] gcm
8
10
  def initialize(apns: nil, gcm: nil)
9
11
  @apns = apns
10
12
  @gcm = gcm
11
13
  end
12
14
 
15
+ def to_hash
16
+ {
17
+ klass_name: self.class.name,
18
+ apns: {name: @apns&.class&.name, data: @apns&.to_hash},
19
+ gcm: {name: @gcm&.class&.name, data: @gcm&.to_hash}
20
+ }
21
+ end
22
+
13
23
  def to_json
14
24
  {
15
25
  'default': '',
16
- 'APNS_SANDBOX': @apns&.to_json,
17
- 'APNS': @apns&.to_json,
18
- 'GCM': @gcm&.to_json
26
+ 'APNS_SANDBOX': @apns&.to_message_json,
27
+ 'APNS': @apns&.to_message_json,
28
+ 'GCM': @gcm&.to_message_json
19
29
  }.compact.to_json
20
30
  end
31
+
32
+ def self.build_from_hash(hash)
33
+ apns_klass = hash.dig(:apns, :name)&.safe_constantize
34
+ apns = apns_klass&.build_from_hash(hash.dig(:apns, :data))
35
+
36
+ gcm_klass = hash.dig(:gcm, :name)&.safe_constantize
37
+ gcm = gcm_klass&.build_from_hash(hash.dig(:gcm, :data))
38
+
39
+ new(apns: apns, gcm: gcm)
40
+ end
21
41
  end
22
42
  end
23
43
  end
@@ -1,7 +1,7 @@
1
1
  module Moromi
2
2
  module Aws
3
3
  module Sns
4
- VERSION = '0.6.0'
4
+ VERSION = '0.7.0'
5
5
  end
6
6
  end
7
7
  end
@@ -1,5 +1,7 @@
1
1
  require "moromi/aws/sns/version"
2
2
  require "moromi/aws/sns/message/base"
3
+ require "moromi/aws/sns/message/apns"
4
+ require "moromi/aws/sns/message/fcm"
3
5
  require "moromi/aws/sns/message/parameter"
4
6
  require "moromi/aws/sns/client"
5
7
 
@@ -19,7 +19,10 @@ Gem::Specification.new do |spec|
19
19
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
20
20
  spec.require_paths = ["lib"]
21
21
 
22
+ spec.required_ruby_version = '>= 2.2'
23
+
22
24
  spec.add_dependency 'aws-sdk', '~> 2'
25
+ spec.add_dependency 'activesupport', ['>= 4.2']
23
26
 
24
27
  spec.add_development_dependency "bundler", "~> 1.12"
25
28
  spec.add_development_dependency "rake", "~> 10.0"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: moromi-aws-sns
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Takahiro Ooishi
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-09-01 00:00:00.000000000 Z
11
+ date: 2017-09-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aws-sdk
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '2'
27
+ - !ruby/object:Gem::Dependency
28
+ name: activesupport
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '4.2'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '4.2'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: bundler
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -84,7 +98,9 @@ files:
84
98
  - circle.yml
85
99
  - lib/moromi/aws/sns.rb
86
100
  - lib/moromi/aws/sns/client.rb
101
+ - lib/moromi/aws/sns/message/apns.rb
87
102
  - lib/moromi/aws/sns/message/base.rb
103
+ - lib/moromi/aws/sns/message/fcm.rb
88
104
  - lib/moromi/aws/sns/message/parameter.rb
89
105
  - lib/moromi/aws/sns/version.rb
90
106
  - moromi-aws-sns.gemspec
@@ -100,7 +116,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
100
116
  requirements:
101
117
  - - ">="
102
118
  - !ruby/object:Gem::Version
103
- version: '0'
119
+ version: '2.2'
104
120
  required_rubygems_version: !ruby/object:Gem::Requirement
105
121
  requirements:
106
122
  - - ">="