blastengine 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a32c93429a747fae165318a2078c7e39750469c07f4fe8e974adc162d4ab0db8
4
- data.tar.gz: 7eaa9bf6dc06fd82269c860307a870a18a369bc7a8189372ff6d672164b812be
3
+ metadata.gz: b5f2374200e5fe2ca4fda4eb5440c4d443252cf87c771edf80ebd67e65408f6d
4
+ data.tar.gz: 238f73b30b0786fdb7376dc9ebdf10c854c7539093acf1a07db3d7bcbd2ae55d
5
5
  SHA512:
6
- metadata.gz: 716f9265649718d4aa3a5d7895b3bc46c63bb920adceecb8ca650ee4a0a171788c8a7c574d934580d4db64a3c10d228732d026f95ddede1d7dc80725bb9c4fdb
7
- data.tar.gz: fdf904fea321762b809b43ef43ca534279189f16bf814aa7d47772bc1a24c8d106c40d24f0037a9a35c967179e7e03833dbcb00b20162f02e0876d47cc09520d
6
+ metadata.gz: f738c2aaa8efe12b219ff97b3189b17f163ae452c7a37d1aac5a7342f735c90a29659b43fc80cdf52ea0ca7b9181fe5bd40654b3b3fdbb44e5f363d842f76bf9
7
+ data.tar.gz: 481c6708c05f9b4d6d3273574fb5b8c2700bc2bdebb53cec9e67fcb04b1295509282ccae09f392a5b4d3c6b4fcc13b2d227d98e0e6a518ff88a6d24e977ea801
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "lib/blastengine/version"
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = "blastengine"
7
+ spec.version = Blastengine::VERSION
8
+ spec.authors = ["Atsushi Nakatsugawa"]
9
+ spec.email = ["atsushi@moongift.jp"]
10
+
11
+ spec.summary = "SDK for sending email by blastengine"
12
+ spec.description = "This is a SDK for sending email by blastengine."
13
+ spec.homepage = "https://blastengine.jp/"
14
+ spec.license = "MIT"
15
+ spec.required_ruby_version = ">= 2.6.0"
16
+
17
+ # spec.metadata["allowed_push_host"] = "TODO: Set to your gem server 'https://example.com'"
18
+
19
+ spec.metadata["homepage_uri"] = spec.homepage
20
+ spec.metadata["source_code_uri"] = "https://github.com/blastengineMania/blastengine-ruby"
21
+ spec.metadata["changelog_uri"] = "https://github.com/blastengineMania/blastengine-ruby/CHANGELOG.md"
22
+
23
+ # Specify which files should be added to the gem when it is released.
24
+ # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
25
+ spec.files = Dir.chdir(File.expand_path(__dir__)) do
26
+ `git ls-files -z`.split("\x0").reject do |f|
27
+ (f == __FILE__) || f.match(%r{\A(?:(?:bin|test|spec|features)/|\.(?:git|travis|circleci)|appveyor)})
28
+ end
29
+ end
30
+ spec.bindir = "exe"
31
+ spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
32
+ spec.require_paths = ["lib"]
33
+
34
+ # Uncomment to register a new dependency of your gem
35
+ # spec.add_dependency "example-gem", "~> 1.0"
36
+
37
+ # For more information and examples about making a new gem, check out our
38
+ # guide at: https://bundler.io/guides/creating_gem.html
39
+ end
@@ -0,0 +1,98 @@
1
+ require "time"
2
+
3
+ module Blastengine
4
+ class Bulk
5
+ include Blastengine
6
+ attr_accessor :subject, :text_part, :encode, :html_part, :attachments, :delivery_id
7
+ def initialize
8
+ @to = []
9
+ @attachments = []
10
+ @encode = "UTF-8"
11
+ end
12
+
13
+ #
14
+ # 送信主の追加
15
+ #
16
+ def from(email, name = "")
17
+ @_from = {email: email, name: name}
18
+ end
19
+
20
+ #
21
+ # バルクメールの登録
22
+ #
23
+ def register
24
+ # APIリクエスト用のパス
25
+ path = "/deliveries/bulk/begin"
26
+ data = {
27
+ from: @_from,
28
+ subject: @subject,
29
+ encode: @encode,
30
+ text_part: @text_part,
31
+ }
32
+ # HTMLパートがある場合は追加
33
+ data[:html_part] = @html_part unless @html_part.nil?
34
+ # API実行
35
+ res = @@client.post path, data, @attachments
36
+ @delivery_id = res["delivery_id"]
37
+ return res["delivery_id"]
38
+ end
39
+
40
+ #
41
+ # 受信者の追加
42
+ #
43
+ def add(email, params = {})
44
+ @to << {
45
+ email: email,
46
+ insert_code: params.map{|key, value| {
47
+ key: "__#{key}__",
48
+ value: value
49
+ }}
50
+ }
51
+ end
52
+
53
+ #
54
+ # バルクメールの更新
55
+ #
56
+ def update
57
+ # APIリクエスト用のパス
58
+ path = "/deliveries/bulk/update/#{@delivery_id}"
59
+ data = {
60
+ to: @to
61
+ }
62
+ # subject, text_part, from, html_partはあれば追加
63
+ data[:subject] = @subject unless @subject.nil?
64
+ data[:from] = @_from unless @_from.nil?
65
+ data[:text_part] = @text_part unless @text_part.nil?
66
+ data[:html_part] = @html_part unless @html_part.nil?
67
+ # API実行
68
+ res = @@client.put path, data
69
+ return res["delivery_id"]
70
+ end
71
+
72
+ #
73
+ # バルクメールの削除
74
+ #
75
+ def delete
76
+ path = "/deliveries/#{@delivery_id}"
77
+ # API実行
78
+ res = @@client.delete path
79
+ return res["delivery_id"]
80
+ end
81
+
82
+ #
83
+ # バルクメールの送信
84
+ #
85
+ def send(date = nil)
86
+ # APIリクエスト用のパス
87
+ path = date ?
88
+ "/deliveries/bulk/commit/#{@delivery_id}" :
89
+ "/deliveries/bulk/commit/#{@delivery_id}/immediate"
90
+ # APIリクエスト用のデータ
91
+ data = date ? {reservation_time: date.iso8601} : {}
92
+ # API実行
93
+ res = @@client.patch path, data
94
+ # エラーがあったら例外を投げるので、この場合は通常終了
95
+ return res["delivery_id"]
96
+ end
97
+ end
98
+ end
@@ -64,7 +64,7 @@ module Blastengine
64
64
  # APIリクエストを行うFaradayのインスタンスを返す
65
65
  # 添付ファイルの有無によって返すオブジェクトが異なる
66
66
  #
67
- def conn(attachment_count)
67
+ def conn(attachment_count = 0)
68
68
  # 共通の設定
69
69
  url = "https://#{DOMAIN}"
70
70
  headers = {
@@ -93,7 +93,7 @@ module Blastengine
93
93
  #
94
94
  # POSTリクエスト用のデータを生成する
95
95
  #
96
- def post_data(data, attachments)
96
+ def post_data(data, attachments = [])
97
97
  # 添付ファイルがない場合は、データをJSONに変換して返す
98
98
  return data.to_json if attachments.length == 0
99
99
  # 添付ファイルがある場合はファイルを読み込んで返す
@@ -115,6 +115,41 @@ module Blastengine
115
115
  params = self.post_data data, attachments
116
116
  # リクエスト実行
117
117
  res = self.conn(attachments.size).post("#{BASE_PATH}#{path}", params)
118
+ # レスポンスを処理
119
+ return self.handle_response res
120
+ end
121
+
122
+ #
123
+ # PUTリクエストを行う
124
+ #
125
+ def put(path, data)
126
+ # リクエスト実行
127
+ res = self.conn.put("#{BASE_PATH}#{path}", data.to_json)
128
+ # レスポンスを処理
129
+ return self.handle_response res
130
+ end
131
+
132
+ #
133
+ # PATCHリクエストを行う
134
+ #
135
+ def patch(path, data)
136
+ # リクエスト実行
137
+ res = self.conn.patch("#{BASE_PATH}#{path}", data.to_json)
138
+ # レスポンスを処理
139
+ return self.handle_response res
140
+ end
141
+
142
+ def delete(path)
143
+ # リクエスト実行
144
+ res = self.conn.delete("#{BASE_PATH}#{path}")
145
+ # レスポンスを処理
146
+ return self.handle_response res
147
+ end
148
+
149
+ #
150
+ # レスポンスのハンドリング用
151
+ #
152
+ def handle_response(res)
118
153
  # レスポンスをJSONパース
119
154
  json = JSON.parse res.body
120
155
  # 200または201なら、レスポンスを返す
@@ -124,6 +159,5 @@ module Blastengine
124
159
  @@last_error = Blastengine::Error.new message
125
160
  raise @@last_error
126
161
  end
127
-
128
162
  end
129
163
  end
@@ -8,6 +8,9 @@ module Blastengine
8
8
  @encode = "UTF-8"
9
9
  end
10
10
 
11
+ #
12
+ # 送信主の追加
13
+ #
11
14
  def from(email, name = "")
12
15
  @_from = {email: email, name: name}
13
16
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Blastengine
4
- VERSION = "0.1.0"
4
+ VERSION = "0.2.0"
5
5
  end
data/lib/blastengine.rb CHANGED
@@ -3,6 +3,7 @@
3
3
  require_relative "blastengine/version"
4
4
  require "blastengine/client"
5
5
  require "blastengine/transaction"
6
+ require "blastengine/bulk"
6
7
 
7
8
  module Blastengine
8
9
  class Error < StandardError; end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: blastengine
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Atsushi Nakatsugawa
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-09-23 00:00:00.000000000 Z
11
+ date: 2022-09-24 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: This is a SDK for sending email by blastengine.
14
14
  email:
@@ -25,7 +25,9 @@ files:
25
25
  - LICENSE
26
26
  - README.md
27
27
  - Rakefile
28
+ - blastengine.gemspec
28
29
  - lib/blastengine.rb
30
+ - lib/blastengine/bulk.rb
29
31
  - lib/blastengine/client.rb
30
32
  - lib/blastengine/transaction.rb
31
33
  - lib/blastengine/version.rb