Class: Blastengine::Client

Inherits:
Object
  • Object
show all
Includes:
Blastengine
Defined in:
lib/blastengine/client.rb

Overview

Blastengine SDKクライアント基本的に各メール機能から呼ばれる

Constant Summary

Constants included from Blastengine

BASE_PATH, DOMAIN, VERSION

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Blastengine

#email, initialize

Constructor Details

#initialize(api_key, user_name) ⇒ Client

コンストラクターAPIキー、ユーザー名の設定とトークンの生成を行う



47
48
49
50
51
# File 'lib/blastengine/client.rb', line 47

def initialize(api_key, user_name)
  self.api_key = api_key
  self.user_name = user_name
  self.generate_token
end

Instance Attribute Details

#api_keyObject

アクセッサー



53
54
55
# File 'lib/blastengine/client.rb', line 53

def api_key
  @api_key
end

#tokenObject

アクセッサー



53
54
55
# File 'lib/blastengine/client.rb', line 53

def token
  @token
end

#user_nameObject

アクセッサー



53
54
55
# File 'lib/blastengine/client.rb', line 53

def user_name
  @user_name
end

Instance Method Details

#conn(attachment_count = 0) ⇒ Object

APIリクエストを行うFaradayのインスタンスを返す添付ファイルの有無によって返すオブジェクトが異なる



68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
# File 'lib/blastengine/client.rb', line 68

def conn(attachment_count = 0)
  # 共通の設定
  url = "https://#{DOMAIN}"
  headers = {
    "Authorization": "Bearer #{@token}"
  }
  # 添付ファイルがある場合
  if attachment_count > 0
    # MultiPartの設定をして返す
    Faraday.new(
      url: url,
      headers: headers
    ) do |faraday|
      faraday.request :multipart, flat_encode: true
    end
  else
    # 添付ファイルがない場合
    # JSONの設定をして返す
    headers["Content-Type"] = "application/json"
    Faraday.new(
      url: url,
      headers: headers
    )
  end
end

#delete(path) ⇒ Object



153
154
155
156
157
158
# File 'lib/blastengine/client.rb', line 153

def delete(path)
  # リクエスト実行
  res = self.conn.delete("#{BASE_PATH}#{path}")
  # レスポンスを処理
  return self.handle_response res
end

#generate_tokenObject

トークンを生成する



58
59
60
61
62
# File 'lib/blastengine/client.rb', line 58

def generate_token
  return @token unless @token.nil?
  str = "#{@user_name}#{@api_key}";
  @token = Base64.urlsafe_encode64 Digest::SHA256.hexdigest(str).downcase
end

#get(path, binary = false) ⇒ Object

GETリクエストを行う



114
115
116
117
118
119
# File 'lib/blastengine/client.rb', line 114

def get(path, binary = false)
  # リクエスト実行
  res = self.conn.get("#{BASE_PATH}#{path}")
  # レスポンスを処理
  return self.handle_response res, binary
end

#handle_response(res, binary = false) ⇒ Object

レスポンスのハンドリング用

Raises:

  • (@@last_error)


163
164
165
166
167
168
169
170
171
172
# File 'lib/blastengine/client.rb', line 163

def handle_response(res, binary = false)
  # レスポンスをJSONパース
  body = binary ? res.body : JSON.parse(res.body)
  # 200または201なら、レスポンスを返す
  return body if res.status == 200 or res.status == 201
  # それ以外はエラーを生成して例外処理
  message = body["error_messages"].map{|key, value| "Error in #{key} (#{value})"}.join("\n")
  @@last_error = Blastengine::Error.new message
  raise @@last_error
end

#patch(path, data) ⇒ Object

PATCHリクエストを行う



146
147
148
149
150
151
# File 'lib/blastengine/client.rb', line 146

def patch(path, data)
  # リクエスト実行
  res = self.conn.patch("#{BASE_PATH}#{path}", data.to_json)
  # レスポンスを処理
  return self.handle_response res
end

#post(path, data = {}, attachments = []) ⇒ Object

POSTリクエストを行う



124
125
126
127
128
129
130
131
# File 'lib/blastengine/client.rb', line 124

def post(path, data = {}, attachments = [])
  # リクエストボディの生成
  params = self.post_data data, attachments
  # リクエスト実行
  res = self.conn(attachments.size).post("#{BASE_PATH}#{path}", params)
  # レスポンスを処理
  return self.handle_response res
end

#post_data(data, attachments = []) ⇒ Object

POSTリクエスト用のデータを生成する



97
98
99
100
101
102
103
104
105
106
107
108
109
# File 'lib/blastengine/client.rb', line 97

def post_data(data, attachments = [])
  # 添付ファイルがない場合は、データをJSONに変換して返す
  return data.to_json if attachments.length == 0
  # 添付ファイルがある場合はファイルを読み込んで返す
  return {
    data: Faraday::Multipart::ParamPart.new(data.to_json, "application/json"),
    file: attachments.map{|a| Faraday::Multipart::FilePart.new(
      File.open(a),
      MiniMime.lookup_by_filename(a) ? MiniMime.lookup_by_filename(a).content_type : "application/octet-stream",
      File.basename(a)
    )}
  }
end

#put(path, data) ⇒ Object

PUTリクエストを行う



136
137
138
139
140
141
# File 'lib/blastengine/client.rb', line 136

def put(path, data)
  # リクエスト実行
  res = self.conn.put("#{BASE_PATH}#{path}", data.to_json)
  # レスポンスを処理
  return self.handle_response res
end