hsquare 0.0.1 → 0.0.2
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 +4 -4
- data/README.md +26 -5
- data/lib/hsquare.rb +16 -2
- data/lib/hsquare/application.rb +40 -0
- data/lib/hsquare/configuration.rb +41 -3
- data/lib/hsquare/device.rb +16 -4
- data/lib/hsquare/notification.rb +3 -1
- data/lib/hsquare/version.rb +1 -1
- data/spec/lib/hsquare/application_spec.rb +25 -0
- data/spec/lib/hsquare/client_spec.rb +2 -0
- data/spec/lib/hsquare/configuration_spec.rb +24 -0
- data/spec/lib/hsquare/device_spec.rb +5 -3
- data/spec/lib/hsquare/notification_spec.rb +7 -1
- data/spec/lib/hsquare_spec.rb +20 -2
- metadata +7 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a6accecebc76281dd41587f399dcbbf5da0a7716
|
4
|
+
data.tar.gz: 76d95e3e9a90d33098b110812b735a97365e7351
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b3ec2cb67d65ea50ee6e4a3cfc90a0fc5de57595729d8a75abc40ef3dd95ddc37c40be588052eacf3c21180f69e2c9f7100d2fc7bdd67ad77b96a60f0cc3f93b
|
7
|
+
data.tar.gz: f719ef6fab4063965563dbf9b9a453895caadd65f7e3c8d5f4a8bbf567b372ed240e6fa9c1e3bc36c12117ab5f6a60366e9dfa2fcf4ac5662465751ee1a2f224
|
data/README.md
CHANGED
@@ -41,6 +41,26 @@ end
|
|
41
41
|
Admin 키는 외부에 노출되지 않도록 보안에 주의를 기울여야 합니다. 환경 변수
|
42
42
|
등으로 소스 컨트롤에서 분리하여 설정하도록 처리하는 것을 추천합니다.
|
43
43
|
|
44
|
+
#### 여러 애플리케이션 동시에 사용하기
|
45
|
+
|
46
|
+
어떤 클라이언트 애플리케이션의 패키징이 여러 가지로 달라질 수 있는 경우에
|
47
|
+
여러 애플리케이션을 등록하고 사용할 수 있습니다. 이러한 경우 아래와 같이
|
48
|
+
해당 애플리케이션들의 Admin key를 설정합니다.
|
49
|
+
|
50
|
+
```ruby
|
51
|
+
# In config/initializers/hsquare.rb
|
52
|
+
|
53
|
+
Hsquare.config do |config|
|
54
|
+
config.application(:main) do |application|
|
55
|
+
application.admin_key = 'Main 애플리케이션의 Admin 키'
|
56
|
+
end
|
57
|
+
|
58
|
+
config.application(:beta) do |application|
|
59
|
+
application.admin_key = 'Beta 애플리케이션의 Admin 키'
|
60
|
+
end
|
61
|
+
end
|
62
|
+
```
|
63
|
+
|
44
64
|
### 푸시 알림
|
45
65
|
|
46
66
|
#### 기기의 푸시 토큰 등록
|
@@ -50,10 +70,11 @@ Admin 키는 외부에 노출되지 않도록 보안에 주의를 기울여야
|
|
50
70
|
|
51
71
|
```ruby
|
52
72
|
device = Hsquare::Device.new(
|
53
|
-
id:
|
54
|
-
user_id:
|
55
|
-
token: '푸시 토큰
|
56
|
-
type: '
|
73
|
+
id: 'device-1', # 애플리케이션 내 기기 ID
|
74
|
+
user_id: 1, # 애플리케이션 사용자 ID
|
75
|
+
token: 'apns-push-token', # 푸시 토큰
|
76
|
+
type: 'apns' # apns 또는 gcm
|
77
|
+
application: nil # 애플리케이션 종류, 주어지지 않은 경우 첫 (혹은 default) 애플리케이션
|
57
78
|
)
|
58
79
|
```
|
59
80
|
|
@@ -61,7 +82,7 @@ device = Hsquare::Device.new(
|
|
61
82
|
있습니다.
|
62
83
|
|
63
84
|
```ruby
|
64
|
-
device.register # Open Platform API
|
85
|
+
device.register # 기기를 등록하는 Open Platform API를 호출합니다.
|
65
86
|
```
|
66
87
|
|
67
88
|
클라이언트에서 푸시 토큰을 등록하도록 처리되어 있다면 이 과정은 거치지 않아도
|
data/lib/hsquare.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'httparty'
|
2
2
|
|
3
3
|
require 'hsquare/version'
|
4
|
+
require 'hsquare/application'
|
4
5
|
require 'hsquare/configuration'
|
5
6
|
require 'hsquare/client'
|
6
7
|
require 'hsquare/device'
|
@@ -31,14 +32,27 @@ module Hsquare
|
|
31
32
|
#
|
32
33
|
# Returns nothing.
|
33
34
|
def self.apply(configuration)
|
34
|
-
Hsquare::Client::Admin.admin_key = configuration.admin_key if configuration.admin_key
|
35
|
-
|
36
35
|
if configuration.http_proxy
|
37
36
|
http_proxy_uri = URI.parse(configuration.http_proxy)
|
38
37
|
|
39
38
|
Hsquare::Client.http_proxy http_proxy_uri.host, http_proxy_uri.port
|
40
39
|
end
|
41
40
|
|
41
|
+
configuration.applications.each(&:refresh_admin_client)
|
42
|
+
|
42
43
|
@configuration = configuration
|
43
44
|
end
|
45
|
+
|
46
|
+
# Public: Finds application with given label.
|
47
|
+
#
|
48
|
+
# label - Label of the applcation.
|
49
|
+
#
|
50
|
+
# Returns registered Hsquare::Application object.
|
51
|
+
def self.application(label = nil)
|
52
|
+
if label
|
53
|
+
@configuration.applications.detect { |application| application.label == label.to_sym }
|
54
|
+
else
|
55
|
+
@configuration.default_application
|
56
|
+
end
|
57
|
+
end
|
44
58
|
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
module Hsquare
|
2
|
+
# Public: Application registered on developers.kakao.com
|
3
|
+
class Application
|
4
|
+
# Public: Distinctive label of the application.
|
5
|
+
attr_accessor :label
|
6
|
+
|
7
|
+
# Public: Admin access key of the application.
|
8
|
+
attr_accessor :admin_key
|
9
|
+
|
10
|
+
# Public: Initializes new application object.
|
11
|
+
#
|
12
|
+
# attributes - Attributes for the new application.
|
13
|
+
# :label - Label of the application.
|
14
|
+
# :admin_key - Admin API key for the application.
|
15
|
+
#
|
16
|
+
# Returns newly initialized application object.
|
17
|
+
def initialize(attributes = {})
|
18
|
+
@label = attributes[:label]
|
19
|
+
@admin_key = attributes[:admin_key]
|
20
|
+
end
|
21
|
+
|
22
|
+
# Public: Client with admin key associated with the application.
|
23
|
+
#
|
24
|
+
# Returns client class for the application inherits Hsquare::Client.
|
25
|
+
def admin_client
|
26
|
+
@admin_client ||= Class.new(Hsquare::Client::Admin).tap do |klass|
|
27
|
+
klass.admin_key = admin_key if admin_key
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
# Public: Clears previously cached admin client.
|
32
|
+
#
|
33
|
+
# Returns newly created admin client.
|
34
|
+
def refresh_admin_client
|
35
|
+
@admin_client = nil
|
36
|
+
|
37
|
+
admin_client
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -1,10 +1,48 @@
|
|
1
1
|
module Hsquare
|
2
2
|
# Public: Configuration object for Hsquare.
|
3
3
|
class Configuration
|
4
|
-
# Public: Admin access key of Kakao application.
|
5
|
-
attr_accessor :admin_key
|
6
|
-
|
7
4
|
# Public: HTTP proxy URI.
|
8
5
|
attr_accessor :http_proxy
|
6
|
+
|
7
|
+
# Public: Sets admin key for default application.
|
8
|
+
#
|
9
|
+
# admin_key - Admin key to set.
|
10
|
+
#
|
11
|
+
# Returns newly set admin key.
|
12
|
+
def admin_key=(admin_key)
|
13
|
+
default_application.admin_key = admin_key
|
14
|
+
end
|
15
|
+
|
16
|
+
# Public: Retrieves default application.
|
17
|
+
#
|
18
|
+
# Returns Hsquare::Application object for default application.
|
19
|
+
def default_application
|
20
|
+
if @default_application
|
21
|
+
@default_application
|
22
|
+
elsif @applications && !@applications.empty?
|
23
|
+
@default_application ||= @applications.first
|
24
|
+
else
|
25
|
+
@default_application ||= Hsquare::Application.new
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
# Public: Retrieves list of registered applications.
|
30
|
+
#
|
31
|
+
# Returns Array of registered applications.
|
32
|
+
def applications
|
33
|
+
@applications ||= [default_application]
|
34
|
+
end
|
35
|
+
|
36
|
+
# Public: Adds a new application.
|
37
|
+
#
|
38
|
+
# Returns nothing.
|
39
|
+
def application(label = nil, &block)
|
40
|
+
new_application = Hsquare::Application.new(label: label)
|
41
|
+
|
42
|
+
@default_application ||= new_application
|
43
|
+
applications.push(new_application) unless applications.include?(new_application)
|
44
|
+
|
45
|
+
yield new_application
|
46
|
+
end
|
9
47
|
end
|
10
48
|
end
|
data/lib/hsquare/device.rb
CHANGED
@@ -16,11 +16,13 @@ module Hsquare
|
|
16
16
|
# Public: Fetch devices for given user.
|
17
17
|
#
|
18
18
|
# user_or_user_id - User or ID of user.
|
19
|
+
# options - Further options
|
20
|
+
# :application - Label of the application.
|
19
21
|
#
|
20
22
|
# Returns Array of HSquare::Device objects retrieved from the server.
|
21
|
-
def self.find_by_user_id(user_or_user_id)
|
23
|
+
def self.find_by_user_id(user_or_user_id, options = {})
|
22
24
|
user_id = user_or_user_id.respond_to?(:id) ? user_or_user_id.id : user_or_user_id
|
23
|
-
response = Hsquare
|
25
|
+
response = Hsquare.application(options[:application]).admin_client.get('/v1/push/tokens', query: { uuid: user_id })
|
24
26
|
|
25
27
|
response.parsed_response.map do |device_response|
|
26
28
|
new(device_response.symbolize_keys)
|
@@ -65,13 +67,14 @@ module Hsquare
|
|
65
67
|
@user_id = attributes[:user_id] || attributes[:uuid]
|
66
68
|
@token = attributes[:token] || attributes[:push_token]
|
67
69
|
@type = attributes[:type] || attributes[:push_type]
|
70
|
+
@application = attributes[:application]
|
68
71
|
end
|
69
72
|
|
70
73
|
# Public: Registers the device via Kakao API.
|
71
74
|
#
|
72
75
|
# Returns Number of days before invalidation.
|
73
76
|
def register
|
74
|
-
|
77
|
+
client.post('/v1/push/register', body: {
|
75
78
|
uuid: user_id, device_id: id, push_type: type, push_token: token.gsub(/\s/, '')
|
76
79
|
})
|
77
80
|
end
|
@@ -80,9 +83,18 @@ module Hsquare
|
|
80
83
|
#
|
81
84
|
# Returns Number of days before invalidation.
|
82
85
|
def unregister
|
83
|
-
|
86
|
+
client.post('/v1/push/deregister', body: {
|
84
87
|
uuid: user_id, device_id: id, push_type: type
|
85
88
|
})
|
86
89
|
end
|
90
|
+
|
91
|
+
protected
|
92
|
+
|
93
|
+
# Internal: Client to use for API request.
|
94
|
+
#
|
95
|
+
# Returns Hsquare::Client class for associated application.
|
96
|
+
def client
|
97
|
+
Hsquare.application(@application).admin_client
|
98
|
+
end
|
87
99
|
end
|
88
100
|
end
|
data/lib/hsquare/notification.rb
CHANGED
@@ -65,7 +65,9 @@ module Hsquare
|
|
65
65
|
#
|
66
66
|
# Returns nothing.
|
67
67
|
def deliver
|
68
|
-
Hsquare
|
68
|
+
Hsquare.config.applications.each do |application|
|
69
|
+
application.admin_client.post('/v1/push/send', body: payload)
|
70
|
+
end
|
69
71
|
end
|
70
72
|
|
71
73
|
protected
|
data/lib/hsquare/version.rb
CHANGED
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
RSpec.describe Hsquare::Application do
|
4
|
+
describe '#admin_client' do
|
5
|
+
let(:application) { Hsquare::Application.new }
|
6
|
+
|
7
|
+
context 'when admin key is set' do
|
8
|
+
let(:admin_key) { 'admin-key' }
|
9
|
+
let(:application) { Hsquare::Application.new admin_key: admin_key }
|
10
|
+
|
11
|
+
it { expect(application.admin_client.default_options).not_to be_empty }
|
12
|
+
it { expect(application.admin_client.default_options[:headers]).not_to be_empty }
|
13
|
+
it { expect(application.admin_client.default_options[:headers]['Authorization']).to eq("KakaoAK #{admin_key}") }
|
14
|
+
end
|
15
|
+
|
16
|
+
context 'when proxy is set' do
|
17
|
+
let(:configuration) { Hsquare::Configuration.new.tap { |c| c.http_proxy = 'http://proxy.com:80' } }
|
18
|
+
|
19
|
+
before { Hsquare.apply(configuration) }
|
20
|
+
|
21
|
+
it { expect(application.admin_client.default_options).not_to be_empty }
|
22
|
+
it { expect(application.admin_client.default_options[:http_proxyaddr]).to eq('proxy.com') }
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -5,6 +5,8 @@ RSpec.describe Hsquare::Client do
|
|
5
5
|
describe '#admin_key=' do
|
6
6
|
let(:admin_key) { 'admin-key' }
|
7
7
|
|
8
|
+
before { Hsquare::Client::Admin.admin_key = nil }
|
9
|
+
|
8
10
|
it { expect { Hsquare::Client::Admin.admin_key = admin_key }.to change { Hsquare::Client::Admin.default_options } }
|
9
11
|
it { expect { Hsquare::Client::Admin.admin_key = admin_key }.not_to change { Hsquare::Client.default_options } }
|
10
12
|
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
RSpec.describe Hsquare::Configuration do
|
4
|
+
describe '#application' do
|
5
|
+
let(:configuration) { Hsquare::Configuration.new }
|
6
|
+
|
7
|
+
context 'when it is first invocation' do
|
8
|
+
let(:admin_key) { 'adminkey' }
|
9
|
+
|
10
|
+
it { configuration.application { |a| a.admin_key = admin_key }; expect(configuration.default_application.admin_key).to eq(admin_key) }
|
11
|
+
end
|
12
|
+
|
13
|
+
context 'when it is second invocation' do
|
14
|
+
before { configuration.application { |a| a.admin_key = 'first' } }
|
15
|
+
|
16
|
+
let(:label) { :second_application }
|
17
|
+
let(:admin_key) { 'adminkey' }
|
18
|
+
|
19
|
+
it { configuration.application(label) { |a| a.admin_key = admin_key }; expect(configuration.default_application.admin_key).not_to eq(admin_key) }
|
20
|
+
it { configuration.application(label) { |a| a.admin_key = admin_key }; expect(configuration.applications.last.admin_key).to eq(admin_key) }
|
21
|
+
it { configuration.application(label) { |a| a.admin_key = admin_key }; expect(configuration.applications.last.label).to eq(label) }
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -1,11 +1,13 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
RSpec.describe Hsquare::Device do
|
4
|
+
let(:client) { Hsquare.config.default_application.admin_client }
|
5
|
+
|
4
6
|
describe '.find_by_user_id' do
|
5
7
|
let(:user_id) { 123 }
|
6
8
|
let(:mock_response) { double(parsed_response: []) }
|
7
9
|
|
8
|
-
it { expect(
|
10
|
+
it { expect(client).to receive(:get).with('/v1/push/tokens', query: { uuid: user_id }).and_return(mock_response); Hsquare::Device.find_by_user_id(user_id) }
|
9
11
|
end
|
10
12
|
|
11
13
|
describe '#initialize' do
|
@@ -35,13 +37,13 @@ RSpec.describe Hsquare::Device do
|
|
35
37
|
let(:attributes) { { id: 1, user_id: 2, type: 'apns', token: 'token' } }
|
36
38
|
let(:device) { Hsquare::Device.new(attributes) }
|
37
39
|
|
38
|
-
it { expect(
|
40
|
+
it { expect(client).to receive(:post).with('/v1/push/register', body: { uuid: device.user_id, device_id: device.id, push_type: device.type, push_token: device.token }); device.register }
|
39
41
|
end
|
40
42
|
|
41
43
|
describe '#unregister' do
|
42
44
|
let(:attributes) { { id: 1, user_id: 2, type: 'apns', token: 'token' } }
|
43
45
|
let(:device) { Hsquare::Device.new(attributes) }
|
44
46
|
|
45
|
-
it { expect(
|
47
|
+
it { expect(client).to receive(:post).with('/v1/push/deregister', body: { uuid: device.user_id, device_id: device.id, push_type: device.type }); device.unregister }
|
46
48
|
end
|
47
49
|
end
|
@@ -6,7 +6,13 @@ RSpec.describe Hsquare::Notification do
|
|
6
6
|
let(:message) { 'message' }
|
7
7
|
let(:notification) { Hsquare::Notification.new(recipient_id: recipient_id, message: message) }
|
8
8
|
|
9
|
-
it
|
9
|
+
it do
|
10
|
+
Hsquare.config.applications.each do |application|
|
11
|
+
expect(application.admin_client).to receive(:post).with('/v1/push/send', body: { uuids: [recipient_id].to_json, push_message: { for_apns: { push_alert: true, message: message }, for_gcm: { delay_while_idle: false, custom_field: { message: message } } }.to_json })
|
12
|
+
end
|
13
|
+
|
14
|
+
notification.deliver
|
15
|
+
end
|
10
16
|
end
|
11
17
|
|
12
18
|
describe '#recipient_id=' do
|
data/spec/lib/hsquare_spec.rb
CHANGED
@@ -15,11 +15,29 @@ RSpec.describe Hsquare do
|
|
15
15
|
end
|
16
16
|
|
17
17
|
context 'when admin_key is set' do
|
18
|
+
before { Hsquare.apply(configuration) }
|
18
19
|
before { configuration.admin_key = 'admin-key' }
|
19
20
|
|
20
21
|
it { expect { Hsquare.apply(configuration) }.not_to change { Hsquare::Client.default_options } }
|
21
|
-
it { expect { Hsquare.apply(configuration) }.
|
22
|
-
it { expect { Hsquare.apply(configuration) }.to change { Hsquare
|
22
|
+
it { expect { Hsquare.apply(configuration) }.not_to change { Hsquare::Client::Admin.default_options } }
|
23
|
+
it { expect { Hsquare.apply(configuration) }.to change { Hsquare.config.default_application.admin_client.default_options } }
|
23
24
|
end
|
24
25
|
end
|
26
|
+
|
27
|
+
describe '.application' do
|
28
|
+
let(:configuration) { Hsquare::Configuration.new }
|
29
|
+
|
30
|
+
before { configuration.application(:first) { |a| a.admin_key = 'firstkey' } }
|
31
|
+
before { configuration.application(:second) { |a| a.admin_key = 'secondkey' } }
|
32
|
+
before { Hsquare.apply(configuration) }
|
33
|
+
|
34
|
+
it { expect(Hsquare.application(:first)).not_to be_nil }
|
35
|
+
it { expect(Hsquare.application(:first).admin_key).to eq('firstkey') }
|
36
|
+
it { expect(Hsquare.application(:second)).not_to be_nil }
|
37
|
+
it { expect(Hsquare.application(:second).admin_key).to eq('secondkey') }
|
38
|
+
it { expect(Hsquare.application(:third)).to be_nil }
|
39
|
+
it { expect(Hsquare.application).not_to be_nil }
|
40
|
+
it { expect(Hsquare.application.label).to eq(:first) }
|
41
|
+
it { expect(Hsquare.application.admin_key).to eq('firstkey') }
|
42
|
+
end
|
25
43
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hsquare
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Inbeom Hwang
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-09-
|
11
|
+
date: 2014-09-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: httparty
|
@@ -81,12 +81,15 @@ files:
|
|
81
81
|
- Rakefile
|
82
82
|
- hsquare.gemspec
|
83
83
|
- lib/hsquare.rb
|
84
|
+
- lib/hsquare/application.rb
|
84
85
|
- lib/hsquare/client.rb
|
85
86
|
- lib/hsquare/configuration.rb
|
86
87
|
- lib/hsquare/device.rb
|
87
88
|
- lib/hsquare/notification.rb
|
88
89
|
- lib/hsquare/version.rb
|
90
|
+
- spec/lib/hsquare/application_spec.rb
|
89
91
|
- spec/lib/hsquare/client_spec.rb
|
92
|
+
- spec/lib/hsquare/configuration_spec.rb
|
90
93
|
- spec/lib/hsquare/device_spec.rb
|
91
94
|
- spec/lib/hsquare/notification_spec.rb
|
92
95
|
- spec/lib/hsquare_spec.rb
|
@@ -117,7 +120,9 @@ signing_key:
|
|
117
120
|
specification_version: 4
|
118
121
|
summary: Client library for Kakao Developers Open Platform API
|
119
122
|
test_files:
|
123
|
+
- spec/lib/hsquare/application_spec.rb
|
120
124
|
- spec/lib/hsquare/client_spec.rb
|
125
|
+
- spec/lib/hsquare/configuration_spec.rb
|
121
126
|
- spec/lib/hsquare/device_spec.rb
|
122
127
|
- spec/lib/hsquare/notification_spec.rb
|
123
128
|
- spec/lib/hsquare_spec.rb
|