line-social 0.1.2 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +11 -0
- data/Gemfile.lock +1 -1
- data/README.md +36 -3
- data/lib/line/social/client.rb +4 -8
- data/lib/line/social/friendship.rb +9 -0
- data/lib/line/social/oauth.rb +34 -3
- data/lib/line/social/profile.rb +2 -2
- data/lib/line/social/request/base.rb +1 -1
- data/lib/line/social/request/friendship.rb +17 -5
- data/lib/line/social/request/oauth.rb +54 -12
- data/lib/line/social/request/profile.rb +5 -9
- data/lib/line/social/version.rb +1 -1
- data/lib/line/social.rb +1 -0
- data/line-social.gemspec +2 -2
- metadata +5 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bddb24a7a0f87bbfb1c0da8cace65bc2fbeff831aeeed14302b36475d7b740ac
|
4
|
+
data.tar.gz: 97cc163c482394a8dfb20742dcf712c289637f50e9c4a3489f03cf699c9da485
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d3a14f639e1731790ebcc7943132575e202aea638c57d938264bf364eb2191e0a35538963e994719909fe0ec230ccc932764eb345fa876059ab7574881ef9b66
|
7
|
+
data.tar.gz: 7e9aaf92b9c30dcb75a041f176f52a6b6083f9980b00d212e07fd8364ca3e05a3a56ea8f9a6cd1e07479ad9b9bdf69072501fb5ca8cd5375016176d25c1d465e
|
data/.travis.yml
CHANGED
@@ -1,7 +1,18 @@
|
|
1
1
|
---
|
2
|
+
env:
|
3
|
+
global:
|
4
|
+
- CC_TEST_REPORTER_ID=0ab187cf7121ad5639538a6149e230fc8a176c58f1932a123eb877c8775c8e84
|
2
5
|
sudo: false
|
3
6
|
language: ruby
|
4
7
|
cache: bundler
|
5
8
|
rvm:
|
6
9
|
- 2.6.2
|
7
10
|
before_install: gem install bundler -v 2.0.1
|
11
|
+
before_script:
|
12
|
+
- curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
|
13
|
+
- chmod +x ./cc-test-reporter
|
14
|
+
- ./cc-test-reporter before-build
|
15
|
+
script:
|
16
|
+
- bundle exec rspec
|
17
|
+
after_script:
|
18
|
+
- ./cc-test-reporter after-build --exit-code $TRAVIS_TEST_RESULT
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -1,8 +1,10 @@
|
|
1
1
|
# Line::Social
|
2
2
|
|
3
|
-
|
3
|
+
[![Build Status](https://travis-ci.org/camelmasa/line-social.png)](https://travis-ci.org/camelmasa/line-social)
|
4
|
+
[![Maintainability](https://api.codeclimate.com/v1/badges/c74659829afe420dd9e0/maintainability)](https://codeclimate.com/github/camelmasa/line-social/maintainability)
|
5
|
+
[![Test Coverage](https://api.codeclimate.com/v1/badges/c74659829afe420dd9e0/test_coverage)](https://codeclimate.com/github/camelmasa/line-social/test_coverage)
|
4
6
|
|
5
|
-
|
7
|
+
Ruby client for [LINE Social API](https://developers.line.biz/en/reference/social-api/).
|
6
8
|
|
7
9
|
## Installation
|
8
10
|
|
@@ -22,7 +24,38 @@ Or install it yourself as:
|
|
22
24
|
|
23
25
|
## Usage
|
24
26
|
|
25
|
-
|
27
|
+
```ruby
|
28
|
+
require "line/social"
|
29
|
+
client = Line::Social::Client.new
|
30
|
+
|
31
|
+
|
32
|
+
# Oauth
|
33
|
+
|
34
|
+
## issue
|
35
|
+
oauth_client = client.oauth(client_id: "YOUR_CLIENT_ID", client_secret: "YOUR_CLIENT_SECRET")
|
36
|
+
oauth = oauth_client.issue(code: "YOUR_CODE", redirect_uri: "YOUR_REDIRECT_URI")
|
37
|
+
|
38
|
+
## verify
|
39
|
+
oauth_client.verify(oauth.access_token) # or oauth.verify!
|
40
|
+
|
41
|
+
## refresh
|
42
|
+
oauth_client.refresh(oauth.refresh_token) # or oauth.refresh!
|
43
|
+
|
44
|
+
## revoke
|
45
|
+
oauth_client.revoke(oauth.access_token) # or oauth.revoke!
|
46
|
+
|
47
|
+
|
48
|
+
# Friendship
|
49
|
+
|
50
|
+
## get
|
51
|
+
client.friendship.get(oauth.access_token)
|
52
|
+
|
53
|
+
|
54
|
+
# Profile
|
55
|
+
|
56
|
+
## get
|
57
|
+
client.profile.get(oauth.access_token)
|
58
|
+
```
|
26
59
|
|
27
60
|
## Development
|
28
61
|
|
data/lib/line/social/client.rb
CHANGED
@@ -1,20 +1,16 @@
|
|
1
1
|
module Line
|
2
2
|
module Social
|
3
3
|
class Client
|
4
|
-
def initialize(access_token)
|
5
|
-
@access_token = access_token
|
6
|
-
end
|
7
|
-
|
8
4
|
def friendship
|
9
|
-
Request::Friendship.new
|
5
|
+
Request::Friendship.new
|
10
6
|
end
|
11
7
|
|
12
|
-
def oauth
|
13
|
-
Request::Oauth.new(
|
8
|
+
def oauth(client_id:, client_secret:)
|
9
|
+
Request::Oauth.new(client_id: client_id, client_secret: client_secret)
|
14
10
|
end
|
15
11
|
|
16
12
|
def profile
|
17
|
-
Request::Profile.new
|
13
|
+
Request::Profile.new
|
18
14
|
end
|
19
15
|
end
|
20
16
|
end
|
data/lib/line/social/oauth.rb
CHANGED
@@ -3,9 +3,40 @@ module Line
|
|
3
3
|
class Oauth
|
4
4
|
include Virtus.model(strict: true)
|
5
5
|
|
6
|
-
attribute :
|
7
|
-
attribute :client_id,
|
8
|
-
attribute :
|
6
|
+
attribute :access_token, String, required: false
|
7
|
+
attribute :client_id, String
|
8
|
+
attribute :client_secret, String
|
9
|
+
attribute :expires_in, Integer
|
10
|
+
attribute :id_token, String, required: false
|
11
|
+
attribute :refresh_token, String, required: false
|
12
|
+
attribute :scope, String
|
13
|
+
attribute :token_type, String, required: false
|
14
|
+
|
15
|
+
def verify!
|
16
|
+
oauth = client.verify(access_token)
|
17
|
+
self.expires_in = oauth.expires_in
|
18
|
+
self
|
19
|
+
end
|
20
|
+
|
21
|
+
def refresh!
|
22
|
+
oauth = client.refresh(refresh_token)
|
23
|
+
self.access_token = oauth.access_token
|
24
|
+
self.expires_in = oauth.expires_in
|
25
|
+
self.id_token = oauth.id_token
|
26
|
+
self.refresh_token = oauth.refresh_token
|
27
|
+
self
|
28
|
+
end
|
29
|
+
|
30
|
+
def revoke!
|
31
|
+
client.revoke(access_token)
|
32
|
+
self
|
33
|
+
end
|
34
|
+
|
35
|
+
private
|
36
|
+
|
37
|
+
def client
|
38
|
+
Request::Oauth.new(client_id: client_id, client_secret: client_secret)
|
39
|
+
end
|
9
40
|
end
|
10
41
|
end
|
11
42
|
end
|
data/lib/line/social/profile.rb
CHANGED
@@ -2,12 +2,24 @@ module Line
|
|
2
2
|
module Social
|
3
3
|
module Request
|
4
4
|
class Friendship < Base
|
5
|
-
|
6
|
-
|
7
|
-
|
5
|
+
API_URI = URI.parse("https://api.line.me/friendship/v1")
|
6
|
+
|
7
|
+
def get(access_token)
|
8
|
+
response = http_client.get do |request|
|
9
|
+
request.url "#{API_URI}/status"
|
10
|
+
request.headers["Authorization"] = "Bearer #{access_token}"
|
11
|
+
end
|
12
|
+
|
13
|
+
if response.body["error"]
|
14
|
+
raise Line::Social::Error.new(response.body["error_description"])
|
15
|
+
end
|
16
|
+
|
17
|
+
# Case of "{"message"=>"There is no login bot linked to this channel."}"
|
18
|
+
if response.body["message"]
|
19
|
+
raise Line::Social::Error.new(response.body["message"])
|
20
|
+
end
|
8
21
|
|
9
|
-
|
10
|
-
raise Line::Social::NotImplementedError
|
22
|
+
Line::Social::Friendship.new(response.body)
|
11
23
|
end
|
12
24
|
end
|
13
25
|
end
|
@@ -4,30 +4,72 @@ module Line
|
|
4
4
|
class Oauth < Base
|
5
5
|
API_URI = URI.parse("https://api.line.me/oauth2/v2.1")
|
6
6
|
|
7
|
-
def initialize(
|
8
|
-
@
|
7
|
+
def initialize(client_id:, client_secret:)
|
8
|
+
@client_id = client_id
|
9
|
+
@client_secret = client_secret
|
9
10
|
end
|
10
11
|
|
11
|
-
def issue
|
12
|
-
|
12
|
+
def issue(code:, redirect_uri:)
|
13
|
+
response = http_client.post do |request|
|
14
|
+
request.url "#{API_URI}/token"
|
15
|
+
request.headers['Content-Type'] = 'application/x-www-form-urlencoded'
|
16
|
+
request.body = URI.encode_www_form(
|
17
|
+
client_id: @client_id,
|
18
|
+
client_secret: @client_secret,
|
19
|
+
code: code,
|
20
|
+
grant_type: "authorization_code",
|
21
|
+
redirect_uri: redirect_uri,
|
22
|
+
)
|
23
|
+
end
|
24
|
+
|
25
|
+
if response.body["error"]
|
26
|
+
raise Line::Social::Error.new(response.body["error_description"])
|
27
|
+
end
|
28
|
+
|
29
|
+
Line::Social::Oauth.new(response.body.merge(client_id: @client_id, client_secret: @client_secret))
|
13
30
|
end
|
14
31
|
|
15
|
-
def verify
|
16
|
-
response =
|
32
|
+
def verify(access_token)
|
33
|
+
response = http_client.get("#{API_URI}/verify", access_token: access_token)
|
17
34
|
|
18
35
|
if response.body["error"]
|
19
36
|
raise Line::Social::Error.new(response.body["error_description"])
|
20
|
-
else
|
21
|
-
Line::Social::Oauth.new(response.body)
|
22
37
|
end
|
38
|
+
|
39
|
+
Line::Social::Oauth.new(response.body.merge(client_id: @client_id, client_secret: @client_secret))
|
23
40
|
end
|
24
41
|
|
25
|
-
def refresh
|
26
|
-
|
42
|
+
def refresh(refresh_token)
|
43
|
+
response = http_client.post do |request|
|
44
|
+
request.url "#{API_URI}/token"
|
45
|
+
request.headers['Content-Type'] = 'application/x-www-form-urlencoded'
|
46
|
+
request.body = URI.encode_www_form(
|
47
|
+
client_id: @client_id,
|
48
|
+
client_secret: @client_secret,
|
49
|
+
grant_type: "refresh_token",
|
50
|
+
refresh_token: refresh_token,
|
51
|
+
)
|
52
|
+
end
|
53
|
+
|
54
|
+
if response.body["error"]
|
55
|
+
raise Line::Social::Error.new(response.body["error_description"])
|
56
|
+
end
|
57
|
+
|
58
|
+
Line::Social::Oauth.new(response.body.merge(client_id: @client_id, client_secret: @client_secret))
|
27
59
|
end
|
28
60
|
|
29
|
-
def revoke
|
30
|
-
|
61
|
+
def revoke(access_token)
|
62
|
+
response = http_client.post do |request|
|
63
|
+
request.url "#{API_URI}/revoke"
|
64
|
+
request.headers['Content-Type'] = 'application/x-www-form-urlencoded'
|
65
|
+
request.body = URI.encode_www_form(
|
66
|
+
access_token: access_token,
|
67
|
+
client_id: @client_id,
|
68
|
+
client_secret: @client_secret
|
69
|
+
)
|
70
|
+
end
|
71
|
+
|
72
|
+
response.status == 200
|
31
73
|
end
|
32
74
|
end
|
33
75
|
end
|
@@ -4,21 +4,17 @@ module Line
|
|
4
4
|
class Profile < Base
|
5
5
|
API_URI = URI.parse("https://api.line.me/v2")
|
6
6
|
|
7
|
-
def
|
8
|
-
|
9
|
-
end
|
10
|
-
|
11
|
-
def get
|
12
|
-
response = request.get do |request|
|
7
|
+
def get(access_token)
|
8
|
+
response = http_client.get do |request|
|
13
9
|
request.url "#{API_URI}/profile"
|
14
|
-
request.headers["Authorization"] = "Bearer #{
|
10
|
+
request.headers["Authorization"] = "Bearer #{access_token}"
|
15
11
|
end
|
16
12
|
|
17
13
|
if response.body["error"]
|
18
14
|
raise Line::Social::Error.new(response.body["error_description"])
|
19
|
-
else
|
20
|
-
Line::Social::Profile.new(response.body)
|
21
15
|
end
|
16
|
+
|
17
|
+
Line::Social::Profile.new(response.body)
|
22
18
|
end
|
23
19
|
end
|
24
20
|
end
|
data/lib/line/social/version.rb
CHANGED
data/lib/line/social.rb
CHANGED
@@ -8,6 +8,7 @@ require "line/social/request/base"
|
|
8
8
|
require "line/social/request/oauth"
|
9
9
|
require "line/social/request/profile"
|
10
10
|
require "line/social/request/friendship"
|
11
|
+
require "line/social/friendship"
|
11
12
|
require "line/social/oauth"
|
12
13
|
require "line/social/profile"
|
13
14
|
require "line/social/error"
|
data/line-social.gemspec
CHANGED
@@ -9,8 +9,8 @@ Gem::Specification.new do |spec|
|
|
9
9
|
spec.authors = ["camelmasa"]
|
10
10
|
spec.email = ["camelmasa@gmail.com"]
|
11
11
|
|
12
|
-
spec.summary = %q{Ruby client for LINE
|
13
|
-
spec.description = %q{Ruby client for LINE
|
12
|
+
spec.summary = %q{Ruby client for LINE Social API}
|
13
|
+
spec.description = %q{Ruby client for LINE Social API}
|
14
14
|
spec.homepage = "https://github.com/camelmasa/line-social"
|
15
15
|
spec.license = "MIT"
|
16
16
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: line-social
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- camelmasa
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-04-
|
11
|
+
date: 2019-04-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: faraday
|
@@ -94,7 +94,7 @@ dependencies:
|
|
94
94
|
- - "~>"
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '3.0'
|
97
|
-
description: Ruby client for LINE
|
97
|
+
description: Ruby client for LINE Social API
|
98
98
|
email:
|
99
99
|
- camelmasa@gmail.com
|
100
100
|
executables: []
|
@@ -114,6 +114,7 @@ files:
|
|
114
114
|
- lib/line/social.rb
|
115
115
|
- lib/line/social/client.rb
|
116
116
|
- lib/line/social/error.rb
|
117
|
+
- lib/line/social/friendship.rb
|
117
118
|
- lib/line/social/oauth.rb
|
118
119
|
- lib/line/social/profile.rb
|
119
120
|
- lib/line/social/request/base.rb
|
@@ -144,5 +145,5 @@ requirements: []
|
|
144
145
|
rubygems_version: 3.0.3
|
145
146
|
signing_key:
|
146
147
|
specification_version: 4
|
147
|
-
summary: Ruby client for LINE
|
148
|
+
summary: Ruby client for LINE Social API
|
148
149
|
test_files: []
|