qqpush 0.0.3 → 0.0.4
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/.gitignore +1 -0
- data/Rakefile +11 -0
- data/lib/qqpush/general.rb +27 -15
- data/qqpush.gemspec +2 -2
- data/spec/general_spec.rb +10 -3
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2f7719143373f6a0a0ae05ddcb3e2324c20b8806
|
4
|
+
data.tar.gz: fa23865351048a738c09d677b6fa28de09063176
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 543dbf2ce721bd3b7f47dadeeed12d7994b4c1c5dda422bb4bb383e887b9f288ef7b51e2950fa4cb2692ba881ee65d341511705b8f78a615e5ac79a3f1401e7a
|
7
|
+
data.tar.gz: 50602f46e6e659aff3687d0362552780aec688d8e5b7334e22bf677de66ed2fa6ab83b55b8e72dfe3f0a98b2a67068b4e8dcd957202732e01c0375c5c1114b46
|
data/.gitignore
CHANGED
data/Rakefile
CHANGED
@@ -21,6 +21,17 @@ task :spec, :spec_name, :examples do |_t, args|
|
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
24
|
+
desc 'generate settings.yml'
|
25
|
+
task :init do
|
26
|
+
require 'yaml'
|
27
|
+
file = File.open('settings.yml', 'w+')
|
28
|
+
settings = { access_id: nil, secret_key: nil }.to_yaml
|
29
|
+
file.puts '# http://developer.xg.qq.com/index.php/Rest_API'
|
30
|
+
file.puts settings
|
31
|
+
file.close
|
32
|
+
puts './settings.yml created.'
|
33
|
+
end
|
34
|
+
|
24
35
|
desc 'build gem'
|
25
36
|
task :build do
|
26
37
|
Dir.glob('*push-*.gem').each { |f| File.delete(f) }
|
data/lib/qqpush/general.rb
CHANGED
@@ -1,37 +1,46 @@
|
|
1
1
|
require 'uri'
|
2
2
|
require 'openssl'
|
3
3
|
require 'rest-client'
|
4
|
+
require 'json'
|
5
|
+
require 'yaml'
|
4
6
|
|
5
7
|
module QQpush
|
6
8
|
class General
|
7
9
|
attr_accessor :settings
|
8
10
|
|
9
|
-
ROOT_URL = 'openapi.xg.qq.com'
|
10
11
|
PROTOCAL = 'http'
|
12
|
+
ROOT_URL = 'openapi.xg.qq.com'
|
11
13
|
VERSION = 'v2'
|
12
|
-
SERVICES =
|
13
|
-
|
14
|
-
account_list all_device tags_device) }
|
14
|
+
SERVICES = { push: %w(single_device single_account
|
15
|
+
account_list all_device tags_device) }
|
15
16
|
|
16
17
|
SERVICES.each do |param_class, param_methods|
|
17
18
|
param_methods.each do |param_method|
|
18
19
|
define_method("#{param_class}_#{param_method}") do |params = {}|
|
19
|
-
|
20
|
+
params[:param_request] = 'get'
|
21
|
+
request(
|
22
|
+
params.merge(param_class: param_class,
|
23
|
+
param_method: param_method))
|
20
24
|
end
|
21
25
|
end
|
22
26
|
end
|
23
27
|
|
28
|
+
def initialize
|
29
|
+
@settings =
|
30
|
+
File.exist?('settings.yml') ? YAML.load_file('settings.yml') : {}
|
31
|
+
end
|
32
|
+
|
24
33
|
def request(params = {})
|
25
|
-
RestClient.
|
26
|
-
request_url(params)
|
27
|
-
|
28
|
-
content_type: 'application/x-www-form-urlencoded')
|
34
|
+
response = RestClient.send(
|
35
|
+
params[:param_request], request_url(params))
|
36
|
+
JSON.parse response
|
29
37
|
end
|
30
38
|
|
31
39
|
def request_url(params)
|
32
40
|
params[:param_encode] = true
|
41
|
+
all_params = params.merge(general_params(params))
|
33
42
|
"#{PROTOCAL}://#{ROOT_URL}/#{VERSION}/#{params[:param_class]}/" \
|
34
|
-
"#{params[:param_method]}
|
43
|
+
"#{params[:param_method]}?#{params_string(all_params).gsub(/\&$/, '')}"
|
35
44
|
end
|
36
45
|
|
37
46
|
def general_params(params)
|
@@ -44,16 +53,18 @@ module QQpush
|
|
44
53
|
end
|
45
54
|
|
46
55
|
def param_sign(params)
|
47
|
-
|
48
|
-
|
49
|
-
"#{params[:
|
56
|
+
params.delete(:param_encode)
|
57
|
+
sign_string = "#{params[:param_request].upcase}" \
|
58
|
+
"#{ROOT_URL}/#{VERSION}/#{params[:param_class]}/" \
|
59
|
+
"#{params[:param_method]}#{params_string(params)}" \
|
60
|
+
"#{settings[:secret_key]}"
|
50
61
|
OpenSSL::Digest::MD5.new(sign_string).to_s
|
51
62
|
end
|
52
63
|
|
53
64
|
private
|
54
65
|
|
55
66
|
def business_params(params)
|
56
|
-
params.reject { |k, _v| k.to_s =~ /param_.*/
|
67
|
+
params.reject { |k, _v| k.to_s =~ /param_.*/ }
|
57
68
|
end
|
58
69
|
|
59
70
|
def params_string(params)
|
@@ -61,8 +72,9 @@ module QQpush
|
|
61
72
|
business_params(params).keys.map(&:to_s).sort.each do |key|
|
62
73
|
next unless params[key] || params[key.to_sym]
|
63
74
|
value = [params[key], params[key.to_sym]].compact.first
|
75
|
+
value = value.is_a?(Hash) ? value.to_json : value.to_s
|
64
76
|
new_value =
|
65
|
-
params[:param_encode] ? URI.encode(value) :
|
77
|
+
params[:param_encode] ? "#{URI.encode(value)}&" : value
|
66
78
|
new_string += "#{key}=#{new_value}" if new_value
|
67
79
|
end
|
68
80
|
new_string
|
data/qqpush.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = 'qqpush'
|
3
|
-
s.version = '0.0.
|
3
|
+
s.version = '0.0.4'
|
4
4
|
s.date = '2015-08-31'
|
5
5
|
s.summary = 'Tencent XG Push'
|
6
6
|
s.description = 'App push service by Tencent XG'
|
@@ -11,6 +11,6 @@ Gem::Specification.new do |s|
|
|
11
11
|
s.license = 'MIT'
|
12
12
|
|
13
13
|
s.require_paths = ['lib']
|
14
|
-
s.add_runtime_dependency 'rest-client', '~> 1.
|
14
|
+
s.add_runtime_dependency 'rest-client', '~> 1.7'
|
15
15
|
s.add_development_dependency 'rspec', '~> 3.3'
|
16
16
|
end
|
data/spec/general_spec.rb
CHANGED
@@ -4,15 +4,22 @@ require 'qqpush/general'
|
|
4
4
|
describe 'General methods' do
|
5
5
|
before do
|
6
6
|
@request = QQpush::General.new
|
7
|
-
@request.settings = { access_id: '123' }
|
8
7
|
end
|
9
8
|
|
10
9
|
it 'can generate sign by params' do
|
11
10
|
# http://developer.xg.qq.com/index.php/Rest_API
|
12
|
-
|
13
|
-
|
11
|
+
@request.settings = { access_id: '123', secret_key: 'abcde' }
|
12
|
+
new_params = { timestamp: 1386691200, param_request: 'post',
|
13
|
+
param_class: 'push', param_method: 'single_device',
|
14
14
|
'Param1' => 'Value1', 'Param2' => 'Value2' }
|
15
15
|
params = @request.general_params(new_params)
|
16
16
|
expect(params[:sign]).to eq('ccafecaef6be07493cfe75ebc43b7d53')
|
17
17
|
end
|
18
|
+
|
19
|
+
it 'can push to single device' do
|
20
|
+
response = @request.push_single_device(
|
21
|
+
message_type: 1, message: { content: 'content', title: 'title' })
|
22
|
+
expect(response['ret_code']).to eq(-1)
|
23
|
+
expect(response['err_msg']).to eq('param device_token error!')
|
24
|
+
end
|
18
25
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: qqpush
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Chao Li
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '1.
|
19
|
+
version: '1.7'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '1.
|
26
|
+
version: '1.7'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rspec
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|