chatwork 0.6.0 → 0.6.1

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: 5c77e7a8ed9f1542d07d0a5358aee0f0a47df235629691a33824d48b743fb1c2
4
- data.tar.gz: d1ab0c06c73e6fc2adb820bedfbe81b7fdda3935d601d2084067dcaee3562aa8
3
+ metadata.gz: 59e4ff9379d4a6103a888096f95051bde6b365ad9e7a165f379563f95a14042d
4
+ data.tar.gz: 90709b0cd1ea756266fb6072cd656455bc929ed34870dcf3d889781cb29f740a
5
5
  SHA512:
6
- metadata.gz: c1e4a88d1c57069063ed23917bb9df6336f7ee8493c166083ebeb9feceb2e35c59af9e01d19c3b887506d869d4fa0a4c69b0d61f4be6e5b4b96dbedb0e51d2c0
7
- data.tar.gz: d12ffa27c12910c660d14f6c72b275d3a1a8fa656eac0c2c6a388ceb5d708424269a75ecee9d190c0009896f843e01c01e195e0e593a5d77e49ea1c47231f193
6
+ metadata.gz: ee3317f8e4afbf7d4c8a6384562202e8d8ce68226e7ccab6e6fc806446b0548df0a1192b5b712ed879a16de4d7bc2aca5dda15f87a596f4f479c62655787a945
7
+ data.tar.gz: 438dc9cec86531f6be5abb10f824d3a91c9bb0a22078027fb999e2ad19745fe6f67e4b039d14fa43680f4aa39ada8f9aacc71ebb701b980713fe9da51f3a066d
data/CHANGELOG.md CHANGED
@@ -1,6 +1,12 @@
1
1
  # Change Log
2
2
  ## Unreleased
3
- [Full Changelog](https://github.com/asonas/chatwork-ruby/compare/v0.6.0...master)
3
+ [Full Changelog](https://github.com/asonas/chatwork-ruby/compare/v0.6.1...master)
4
+
5
+ ## v0.6.1
6
+ [Full Changelog](https://github.com/asonas/chatwork-ruby/compare/v0.6.0...v0.6.1)
7
+
8
+ * Fixed: ArgumentError when ChatWork::Token.refresh_access_token
9
+ * https://github.com/asonas/chatwork-ruby/pull/39
4
10
 
5
11
  ## v0.6.0
6
12
  [Full Changelog](https://github.com/asonas/chatwork-ruby/compare/v0.5.0...v0.6.0)
data/README.md CHANGED
@@ -92,6 +92,9 @@ ChatWork::Message.create(room_id: 1234, body: "Hello, ChatWork!")
92
92
  $ CHATWORK_CLIENT_ID=xxx CHATWORK_CLIENT_SECRET=xxx REFRESH_TOKEN=xxx ruby refresh_access_token.rb
93
93
  ```
94
94
 
95
+ ## Reference
96
+ http://www.rubydoc.info/gems/chatwork
97
+
95
98
  ## Development
96
99
  ```bash
97
100
  cp .env.example .env
data/lib/chatwork.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  require "chatwork/version"
2
+ require "hashie"
2
3
 
3
4
  module ChatWork
4
5
  autoload :BaseClient, "chatwork/base_client"
@@ -1,6 +1,5 @@
1
1
  require "faraday"
2
2
  require "faraday_middleware"
3
- require "hashie"
4
3
 
5
4
  module ChatWork
6
5
  class BaseClient
@@ -1,15 +1,22 @@
1
1
  module ChatWork
2
2
  class ChatWorkError < StandardError
3
3
  def self.from_response(status, body, headers)
4
- unless body["errors"]
5
- return APIConnectionError.new("Invalid response #{body}")
4
+ if headers.has_key?("WWW-Authenticate")
5
+ return AuthenticateError.from_www_authenticate(
6
+ www_authenticate: headers["WWW-Authenticate"],
7
+ status: status,
8
+ error_response: body["errors"],
9
+ )
6
10
  end
7
11
 
8
- if headers.has_key?("WWW-Authenticate")
9
- return AuthenticateError.new(headers["WWW-Authenticate"], status, body["errors"])
12
+ return APIError.new(status, body["errors"]) if body["errors"]
13
+
14
+ if body["error"]
15
+ message = [body["error"], body["error_description"]].compact.join(" ")
16
+ return AuthenticateError.new(message, status, body, body["error"], body["error_description"])
10
17
  end
11
18
 
12
- APIError.new(status, body["errors"])
19
+ APIConnectionError.new("Invalid response #{body.to_hash} (status: #{status})")
13
20
  end
14
21
 
15
22
  attr_reader :status
@@ -29,7 +36,7 @@ module ChatWork
29
36
 
30
37
  attr_reader :original_error
31
38
 
32
- def initialize(message, original_error)
39
+ def initialize(message, original_error = nil)
33
40
  @original_error = original_error
34
41
  super(message)
35
42
  end
@@ -47,14 +54,27 @@ module ChatWork
47
54
  class AuthenticateError < ChatWorkError
48
55
  attr_reader :error, :error_description
49
56
 
50
- def initialize(message, status, error_response)
51
- message =~ /error="([^\"]+)"/
52
- @error = Regexp.last_match(1)
53
-
54
- message =~ /error_description="([^\"]+)"/
55
- @error_description = Regexp.last_match(1)
57
+ def initialize(message, status, error_response, error, error_description)
58
+ @error = error
59
+ @error_description = error_description
56
60
 
57
61
  super(message, status, error_response)
58
62
  end
63
+
64
+ def self.from_www_authenticate(www_authenticate:, status:, error_response:)
65
+ www_authenticate =~ /error="([^\"]+)"/
66
+ error = Regexp.last_match(1)
67
+
68
+ www_authenticate =~ /error_description="([^\"]+)"/
69
+ error_description = Regexp.last_match(1)
70
+
71
+ AuthenticateError.new(
72
+ www_authenticate,
73
+ status,
74
+ error_response,
75
+ error,
76
+ error_description,
77
+ )
78
+ end
59
79
  end
60
80
  end
data/lib/chatwork/file.rb CHANGED
@@ -41,7 +41,7 @@ module ChatWork
41
41
  # @param create_download_url [Boolean] whether or not to create a download link.
42
42
  # If set to true, download like will be created for 30 seconds
43
43
  #
44
- # @return [Array<Hashie::Mash>]
44
+ # @return [Hashie::Mash]
45
45
  #
46
46
  # @example response format
47
47
  # {
data/lib/chatwork/room.rb CHANGED
@@ -108,6 +108,13 @@ module ChatWork
108
108
  # @param icon_preset [String] Type of the group chat icon (group, check, document, meeting, event, project, business,
109
109
  # study, security, star, idea, heart, magcup, beer, music, sports, travel)
110
110
  # @param name [String] Title of the group chat.
111
+ #
112
+ # @return [Hashie::Mash]
113
+ #
114
+ # @example response format
115
+ # {
116
+ # "room_id": 1234
117
+ # }
111
118
  def self.update(room_id:, description: nil, icon_preset: nil, name: nil)
112
119
  _put("/rooms/#{room_id}", description: description, icon_preset: icon_preset, name: name)
113
120
  end
@@ -14,7 +14,6 @@ module ChatWork
14
14
  # "refresh_token" => "refresh_token",
15
15
  # "scope" => "users.all:read rooms.all:read_write contacts.all:read_write",
16
16
  # }
17
- # ["access_token", "token_type", "expires_in", "refresh_token", "scope"]
18
17
  def self.refresh_access_token(refresh_token, scope = [])
19
18
  params = {
20
19
  grant_type: "refresh_token",
@@ -22,9 +21,7 @@ module ChatWork
22
21
  }
23
22
  params[:scope] = scope.join(" ") unless scope.empty?
24
23
 
25
- response = ChatWork.oauth_client.post("/token", params)
26
- raise response if response.is_a?(Exception)
27
- response
24
+ ChatWork.oauth_client.post("/token", params)
28
25
  end
29
26
  end
30
27
  end
@@ -1,3 +1,3 @@
1
1
  module ChatWork
2
- VERSION = "0.6.0".freeze
2
+ VERSION = "0.6.1".freeze
3
3
  end
@@ -1,16 +1,14 @@
1
1
  describe ChatWork::ChatWorkError do
2
2
  describe ".from_response" do
3
- subject { ChatWork::ChatWorkError.from_response(status, body, headers) }
3
+ subject { ChatWork::ChatWorkError.from_response(status, Hashie::Mash.new(body), headers) }
4
4
 
5
5
  context "with WWW-Authenticate header" do
6
6
  let(:status) { 401 }
7
7
 
8
8
  let(:body) do
9
- json =
10
- <<-JSON
11
- {"errors":["Invalid API Token"]}
12
- JSON
13
- Hashie::Mash.new(JSON.parse(json))
9
+ {
10
+ errors: ["Invalid API Token"],
11
+ }
14
12
  end
15
13
 
16
14
  let(:headers) do
@@ -24,5 +22,46 @@ describe ChatWork::ChatWorkError do
24
22
  its(:error_description) { should eq "The access token expired" }
25
23
  its(:error_response) { should eq ["Invalid API Token"] }
26
24
  end
25
+
26
+ context "with error" do
27
+ let(:status) { 401 }
28
+
29
+ let(:body) do
30
+ {
31
+ error: "invalid_client",
32
+ error_description: "The client ID `client_id` is unknown.",
33
+ error_uri: nil,
34
+ }.stringify_keys
35
+ end
36
+
37
+ let(:headers) { {} }
38
+
39
+ it { should be_an_instance_of ChatWork::AuthenticateError }
40
+ its(:message) { should eq "invalid_client The client ID `client_id` is unknown." }
41
+ its(:error) { should eq "invalid_client" }
42
+ its(:error_description) { should eq "The client ID `client_id` is unknown." }
43
+ its(:error_response) { should eq body }
44
+ end
45
+ end
46
+
47
+ describe ChatWork::AuthenticateError do
48
+ describe ".from_www_authenticate" do
49
+ subject do
50
+ ChatWork::AuthenticateError.from_www_authenticate(
51
+ www_authenticate: www_authenticate,
52
+ status: status,
53
+ error_response: error_response,
54
+ )
55
+ end
56
+
57
+ let(:www_authenticate) { 'Bearer error="invalid_token", error_description="The access token expired"' }
58
+ let(:status) { 401 }
59
+ let(:error_response) { ["Invalid API Token"] }
60
+
61
+ it { should be_an_instance_of ChatWork::AuthenticateError }
62
+ its(:error) { should eq "invalid_token" }
63
+ its(:error_description) { should eq "The access token expired" }
64
+ its(:error_response) { should eq ["Invalid API Token"] }
65
+ end
27
66
  end
28
67
  end
@@ -5,11 +5,6 @@ describe ChatWork::Token do
5
5
  before do
6
6
  allow(ChatWork).to receive(:client_id) { client_id }
7
7
  allow(ChatWork).to receive(:client_secret) { client_secret }
8
-
9
- stub_request(:post, "https://oauth.chatwork.com/token").
10
- with(body: { "grant_type" => "refresh_token", "refresh_token" => refresh_token },
11
- headers: { "Authorization" => "Basic #{signature}", "Content-Type" => "application/x-www-form-urlencoded" }).
12
- to_return(status: 200, body: token.to_json, headers: { "Content-Type" => "application/json" })
13
8
  end
14
9
 
15
10
  let(:client_id) { "client_id" }
@@ -17,20 +12,49 @@ describe ChatWork::Token do
17
12
  let(:refresh_token) { "refresh_token" }
18
13
  let(:signature) { "Y2xpZW50X2lkOmNsaWVudF9zZWNyZXQ=" }
19
14
  let(:scope) { [] }
20
- let(:token) do
21
- {
22
- access_token: "new_access_token",
23
- token_type: "Bearer",
24
- expires_in: "1800",
25
- refresh_token: refresh_token,
26
- scope: "users.all:read rooms.all:read_write contacts.all:read_write",
27
- }
15
+
16
+ context "when successful" do
17
+ before do
18
+ stub_request(:post, "https://oauth.chatwork.com/token").
19
+ with(body: { "grant_type" => "refresh_token", "refresh_token" => refresh_token },
20
+ headers: { "Authorization" => "Basic #{signature}", "Content-Type" => "application/x-www-form-urlencoded" }).
21
+ to_return(status: 200, body: token.to_json, headers: { "Content-Type" => "application/json" })
22
+ end
23
+
24
+ let(:token) do
25
+ {
26
+ access_token: "new_access_token",
27
+ token_type: "Bearer",
28
+ expires_in: "1800",
29
+ refresh_token: refresh_token,
30
+ scope: "users.all:read rooms.all:read_write contacts.all:read_write",
31
+ }
32
+ end
33
+
34
+ its(["access_token"]) { should eq "new_access_token" }
35
+ its(["token_type"]) { should eq "Bearer" }
36
+ its(["expires_in"]) { should eq "1800" }
37
+ its(["refresh_token"]) { should eq refresh_token }
38
+ its(["scope"]) { should eq "users.all:read rooms.all:read_write contacts.all:read_write" }
28
39
  end
29
40
 
30
- its(["access_token"]) { should eq "new_access_token" }
31
- its(["token_type"]) { should eq "Bearer" }
32
- its(["expires_in"]) { should eq "1800" }
33
- its(["refresh_token"]) { should eq refresh_token }
34
- its(["scope"]) { should eq "users.all:read rooms.all:read_write contacts.all:read_write" }
41
+ context "when failure" do
42
+ before do
43
+ stub_request(:post, "https://oauth.chatwork.com/token").
44
+ with(body: { "grant_type" => "refresh_token", "refresh_token" => refresh_token },
45
+ headers: { "Authorization" => "Basic #{signature}", "Content-Type" => "application/x-www-form-urlencoded" }).
46
+ to_return(status: 401, body: body.to_json, headers: { "Content-Type" => "application/json" })
47
+ end
48
+
49
+ let(:body) do
50
+ {
51
+ error: "invalid_client",
52
+ error_description: "The client ID `client_id` is unknown.",
53
+ error_uri: nil,
54
+ }
55
+ end
56
+
57
+ it { expect { subject }.to raise_error ChatWork::AuthenticateError }
58
+ end
35
59
  end
36
60
  end
@@ -76,21 +76,4 @@ RSpec.describe RamlParser do
76
76
  its(["description"]) { should eq "group chat description" }
77
77
  its(["icon_preset"]) { should eq "meeting" }
78
78
  end
79
-
80
- describe ".raml" do
81
- subject { RamlParser.raml }
82
-
83
- before do
84
- RamlParser.instance_variable_set(:@raml, nil)
85
- end
86
-
87
- after do
88
- RamlParser.instance_variable_set(:@raml, nil)
89
- end
90
-
91
- it "3 digit number can be read as a string" do
92
- comma_separated_integer_list = subject["traits"][0]["room_members"]["queryParameters"]["members_admin_ids"]["example"]
93
- expect(comma_separated_integer_list).to eq "123,542,1001"
94
- end
95
- end
96
79
  end
@@ -32,7 +32,7 @@ RSpec.shared_context :api_context, type: :api do
32
32
  query_string = "?" + query_example.to_query
33
33
  when :post, :put
34
34
  request_options[:headers]["Content-Type"] = "application/x-www-form-urlencoded"
35
- request_options[:body] = query_example
35
+ request_options[:body] = query_example.transform_values(&:to_s)
36
36
  end
37
37
  end
38
38
 
@@ -67,15 +67,9 @@ module RamlParser
67
67
  private_class_method :find_node
68
68
 
69
69
  def self.raml
70
- return @raml if @raml
71
-
72
- yaml_data = schema_file.read
73
-
74
- # e.g. example: 123,542,1001 -> example: '123,542,1001'
75
- yaml_data.gsub!(/example: ([0-9,]+)/) { "example: '#{Regexp.last_match(1)}'" }
76
-
77
- @raml = YAML.safe_load(yaml_data)
70
+ @raml ||= YAML.load_file(schema_file)
78
71
  end
72
+ private_class_method :raml
79
73
 
80
74
  def self.parse_response(response_json)
81
75
  JSON.parse(response_json)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: chatwork
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.6.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - asonas
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2018-01-11 00:00:00.000000000 Z
12
+ date: 2018-01-12 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: faraday
@@ -331,7 +331,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
331
331
  version: '0'
332
332
  requirements: []
333
333
  rubyforge_project:
334
- rubygems_version: 2.7.4
334
+ rubygems_version: 2.7.3
335
335
  signing_key:
336
336
  specification_version: 4
337
337
  summary: Ruby bindings of ChatWork API