epns_client 0.1.0

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: bec014fc61af1d80e16b28984d424c223c4ff23a
4
+ data.tar.gz: 2e016b2507e8aa2dd154ff1037e733b7b692223f
5
+ SHA512:
6
+ metadata.gz: cc28945f4dfcfb7f47e64e179ee59f29c0c7c3ec3c74903dd181db73a46797388409961b334660f18eb0cd407c30b7bf83282de32e9bc2935fe9a7337ed2b3ee
7
+ data.tar.gz: ef135f7ae7af4aaaa837c43e8b503593d1bb92bc16cd06297d94a96e429a503e2519da5b7bce12dd8d518b95bdfc607fc9b7794d16f65f4027488298a4e06222
data/.gitignore ADDED
@@ -0,0 +1,9 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
data/.project ADDED
@@ -0,0 +1,12 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <projectDescription>
3
+ <name>epns_client</name>
4
+ <comment></comment>
5
+ <projects>
6
+ </projects>
7
+ <buildSpec>
8
+ </buildSpec>
9
+ <natures>
10
+ <nature>com.aptana.ruby.core.rubynature</nature>
11
+ </natures>
12
+ </projectDescription>
data/.travis.yml ADDED
@@ -0,0 +1,3 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.0.0
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in epns_client.gemspec
4
+ gemspec
data/README.md ADDED
@@ -0,0 +1,30 @@
1
+ EPNs-client
2
+ ===========
3
+
4
+ ##What is it?
5
+
6
+ EPNs用のrubyクライアントです。詳細は[EPNs](http://epns.flum.pw)
7
+
8
+ 動作確認はruby 2.0.0p481及びruby 2.1.0ですがruby 1.9.3でも動くと思います。
9
+
10
+ ##How to Use
11
+ Rubyのインストールは省きます。
12
+ 準備として
13
+ ```
14
+ gem install epns_client
15
+ ```
16
+ を実行してください
17
+  
18
+ まず、[EPNsのトップページ](http://epns.flum.pw/)でユーザー登録をし、api_keyを取得してください。
19
+ 必要なデータをクライアントに指定すれば接続できます。
20
+ example/にデモ用のclient.rbと説明が書いてるので参考にしてください。
21
+   
22
+
23
+ 質問等ありましたらTwitter:[@flum_](https://twitter.com/flum_)までお願いします。
24
+
25
+ ##License
26
+
27
+ The MIT License
28
+
29
+ -------
30
+ (c) @2015 flum_
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
data/bin/console ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "epns_client"
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require "pry"
11
+ # Pry.start
12
+
13
+ require "irb"
14
+ IRB.start
data/bin/setup ADDED
@@ -0,0 +1,7 @@
1
+ #!/bin/bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+
5
+ bundle install
6
+
7
+ # Do any other automated setup that you need to do here
@@ -0,0 +1,26 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'epns_client/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "epns_client"
8
+ spec.version = EpnsClient::VERSION
9
+ spec.authors = ["flum1025"]
10
+ spec.email = ["flum.1025@gmail.com"]
11
+
12
+ spec.summary = %q{EPNs API Library}
13
+ spec.description = %q{This Library connects to EPNs Server and provides websocket connection.}
14
+ spec.homepage = "https://github.com/flum1025/EPNs-client"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
17
+ spec.bindir = "exe"
18
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_development_dependency "bundler", "~> 1.9"
22
+ spec.add_development_dependency "rake", "~> 10.0"
23
+
24
+ spec.add_dependency 'json'
25
+ spec.add_dependency 'websocket-client-simple'
26
+ end
data/example/client.rb ADDED
@@ -0,0 +1,27 @@
1
+ require 'epns_client'
2
+
3
+ #$host = "http://localhost:3000"
4
+
5
+ #api_keyの指定
6
+ api_key = "3WqjXzfcw8yUea02BNrKA154YvItsn6LipCJSukDTxoHM9hEF" #ダミー
7
+
8
+ #registration_idの指定 EpnsClient.sendする場合は必須
9
+ #registration_id = "HkKTJrZCLlGFYMcAqtR7fg2u5dUnz1wBIO6vQN4xm9i0bey38PaDXESVsopjhW" #ダミー
10
+
11
+ #新しいregistration_idの取得
12
+ registration_id = EpnsClient.register(api_key)
13
+
14
+ #サーバー側から新しいpushがあった場合にブロック内が実行される
15
+ EpnsClient.connect(api_key, registration_id) do |object|
16
+ puts object
17
+ end
18
+
19
+ #クライアントにデータをpushする
20
+ sleep(3) #connect直後だとsendしてもfailureになる
21
+ p EpnsClient.send([registration_id], api_key, {:test=>123})
22
+
23
+ #Threadで動いているので終わらない処理を書かないと終了する
24
+ loop do
25
+ STDIN.gets.strip
26
+ end
27
+
@@ -0,0 +1,99 @@
1
+ require "epns_client/version"
2
+
3
+ require 'websocket-client-simple'
4
+ require 'open-uri'
5
+ require 'json'
6
+ require 'net/http'
7
+
8
+ $host = "http://epns.flum.pw"
9
+ $ssl = false
10
+
11
+ module EpnsClient
12
+ class EpnsClientError < StandardError; end
13
+
14
+ def self.connect(api_key, registration_id, &blk)
15
+ ::EpnsClient::Client.new(Connection.builder(api_key, registration_id), blk)
16
+ end
17
+
18
+ def self.register(api_key)
19
+ ::EpnsClient::Connection.register(api_key)
20
+ end
21
+
22
+ def self.send(ids, api_key, options={})
23
+ ::EpnsClient::Connection.send_notification(ids, api_key, options)
24
+ end
25
+
26
+ class Connection
27
+ def self.builder(api_key, reg_id)
28
+ params = Hash.new
29
+ params.store('api_key', api_key)
30
+ params.store('registration_id', reg_id)
31
+ json = post(params, File.join($host, 'weset/websocket/connect'))
32
+ error?(json)
33
+ return json
34
+ end
35
+
36
+ def self.register(api_key)
37
+ params = Hash.new
38
+ params.store('api_key', api_key)
39
+ json = post(params, File.join($host, 'weset/websocket/regist'))
40
+ error?(json)
41
+ return json['data']['registration_id']
42
+ end
43
+
44
+ def self.send_notification(ids, api_key, options)
45
+ params = Hash.new
46
+ params.store('api_key', api_key)
47
+ params.store('registration_ids', ids)
48
+ params.store('options', options.to_json)
49
+ json = post(params, File.join($host, 'weset/websocket/send_notification'))
50
+ error?(json)
51
+ return json
52
+ end
53
+
54
+ def self.error?(json)
55
+ return if json['error'].nil?
56
+ raise EpnsClientError, "#{json['error']['message']}:#{json['error']['code']}"
57
+ end
58
+
59
+ def self.post(params, url)
60
+ uri = URI.parse(url)
61
+ http = Net::HTTP.new(uri.host, uri.port)
62
+ http.use_ssl = $ssl
63
+ request = Net::HTTP::Post.new(uri.request_uri)
64
+ request.set_form_data(params)
65
+ response = nil
66
+ http.start do |h|
67
+ response = h.request(request).body
68
+ end
69
+ json = JSON.parse(response)
70
+ return json
71
+ end
72
+ end
73
+
74
+ class Client
75
+ def initialize(opt, blk)
76
+ connect("#{opt['data']['url']}:#{opt['data']['port']}", opt['data']['req_body'], blk)
77
+ end
78
+
79
+ def connect(url, req_body, blk)
80
+ ws = WebSocket::Client::Simple.connect url
81
+
82
+ ws.on :message do |msg|
83
+ blk.call(msg.data)
84
+ end
85
+
86
+ ws.on :open do
87
+ ws.send req_body.to_json
88
+ end
89
+
90
+ ws.on :close do |e|
91
+ puts e
92
+ end
93
+
94
+ ws.on :error do |e|
95
+ puts e
96
+ end
97
+ end
98
+ end
99
+ end
@@ -0,0 +1,3 @@
1
+ module EpnsClient
2
+ VERSION = "0.1.0"
3
+ end
metadata ADDED
@@ -0,0 +1,111 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: epns_client
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - flum1025
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2016-03-11 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '1.9'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '1.9'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: json
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: websocket-client-simple
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ description: This Library connects to EPNs Server and provides websocket connection.
70
+ email:
71
+ - flum.1025@gmail.com
72
+ executables: []
73
+ extensions: []
74
+ extra_rdoc_files: []
75
+ files:
76
+ - .gitignore
77
+ - .project
78
+ - .travis.yml
79
+ - Gemfile
80
+ - README.md
81
+ - Rakefile
82
+ - bin/console
83
+ - bin/setup
84
+ - epns_client.gemspec
85
+ - example/client.rb
86
+ - lib/epns_client.rb
87
+ - lib/epns_client/version.rb
88
+ homepage: https://github.com/flum1025/EPNs-client
89
+ licenses: []
90
+ metadata: {}
91
+ post_install_message:
92
+ rdoc_options: []
93
+ require_paths:
94
+ - lib
95
+ required_ruby_version: !ruby/object:Gem::Requirement
96
+ requirements:
97
+ - - '>='
98
+ - !ruby/object:Gem::Version
99
+ version: '0'
100
+ required_rubygems_version: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - '>='
103
+ - !ruby/object:Gem::Version
104
+ version: '0'
105
+ requirements: []
106
+ rubyforge_project:
107
+ rubygems_version: 2.5.2
108
+ signing_key:
109
+ specification_version: 4
110
+ summary: EPNs API Library
111
+ test_files: []