umeng_msg 0.1.0 → 0.2.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 919287fad5c9975364d033e065d22d79b58d6b4a
4
- data.tar.gz: 0f8a8cf8eaa52d3dfbbefb1ebf9030e0939196e5
3
+ metadata.gz: 416ff86f4b0879074f320006544565a366888f5f
4
+ data.tar.gz: 702c92ae3d94f423702c0103444538816a6b7439
5
5
  SHA512:
6
- metadata.gz: 5f5f3b4c50583a37a9f392d9d6061a7c823facc96257e9946ad641e7e320a70d21f7d59e95dd3611d230e83236a6e3f696b56864c2f344e62f224b5f77459992
7
- data.tar.gz: 8bead2b2bf288c219eb5c72bfe21258a9435d905d53403b3fdf9ee2f0b0902e5945773fcb0fc31372891fc1ca8e15e9115f7f67389816eac784857bafe3c4883
6
+ metadata.gz: e92008fec996c1dfb3e5fc1f9b2a91dd32c905d7e3cc8f3a81b724ac8e26dec19cf576ba48a333b3db753e6c8b534ec6ad1f3e319198db528e4c34d3491ee468
7
+ data.tar.gz: 6acd68399a169365f65f82d967ab0980ccc0c564b17f789c6a68ab4e4c03452e52e46b08c640c55313f8ea7c91a9f6ec6da8eb33c12b58710522b94e2198afd7
data/LICENSE ADDED
@@ -0,0 +1,25 @@
1
+ copyright (c) <year> <copyright holders>
2
+
3
+
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+
13
+
14
+ The above copyright notice and this permission notice shall be included in
15
+ all copies or substantial portions of the Software.
16
+
17
+
18
+
19
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
22
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
23
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
24
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
25
+ THE SOFTWARE.
data/README.md CHANGED
@@ -1,6 +1,7 @@
1
1
  # UmengMsg
2
2
 
3
- Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/umeng_msg`. To experiment with that code, run `bin/console` for an interactive prompt.
3
+ gem是对友盟推送的api封装,支持推送 查询 删除 以及上传文件
4
+ 推送部分功能待实施 再todo中
4
5
 
5
6
  TODO: Delete this and the text above, and describe your gem
6
7
 
@@ -21,8 +22,13 @@ Or install it yourself as:
21
22
  $ gem install umeng_msg
22
23
 
23
24
  ## Usage
24
-
25
- TODO: Write usage instructions here
25
+ 1. rails generate umeng_msg:install
26
+ 2. UmengMsg::Subject.new('ios', options).push #or upload check cancel
27
+ 3. options 示例: {'task_id': 'xxxxx'}
28
+ 4. 推送相关options参数请参看官方文档, check 与 cancel 只需要 task_id参数, upload 只需要content 参数
29
+ 5. 返回结果以error_code 为nil 表示发送成功, error_code 为999 时为网络等错误与友盟无关
30
+ 6. 拓展或自定义功能请自行拓展
31
+ 7. 默认请求超时是3秒
26
32
 
27
33
  ## Development
28
34
 
@@ -3,13 +3,14 @@ module UmengMsg
3
3
  module Params
4
4
  extend self
5
5
 
6
- def push_params(platform, **options)
6
+ def push_params(platform, options)
7
7
  params = {
8
8
  'appkey' => UmengMsg.appkey(platform),
9
9
  'timestamp' => Time.now.to_i.to_s,
10
10
  'type' => options['type'],
11
11
  'device_tokens' => options['device_tokens'],
12
12
  'alias_type' => options['alias_type'],
13
+ 'alias' => options['alias'],
13
14
  'file_id' => options['file_id'],
14
15
  'policy' => {
15
16
  'start_time' => options['start_time'],
@@ -31,6 +32,8 @@ module UmengMsg
31
32
  'content-available' => options['content-available'],
32
33
  'category' => options['category']
33
34
  },
35
+ 'title' => options['title'],
36
+ 'extra' => options['extra'] || {}
34
37
  }
35
38
  }
36
39
  android_payload = {
@@ -53,8 +56,7 @@ module UmengMsg
53
56
  'activity' => options['activity'],
54
57
  'custom' => options['custom']
55
58
  },
56
- 'extra' => {
57
- }
59
+ 'extra' => options['extra'] || {}
58
60
  }
59
61
 
60
62
  }
@@ -72,7 +74,8 @@ module UmengMsg
72
74
  # }.merge(params)
73
75
  # end
74
76
 
75
- platform.downcase == 'ios' ? params.merge(ios_payload) : params.merge(android_payload)
77
+ platform.downcase == 'ios' ? params.merge!(ios_payload) : params.merge!(android_payload)
78
+ params = compact_params(params)
76
79
  end
77
80
 
78
81
  def check_params(platform, task_id)
@@ -97,6 +100,12 @@ module UmengMsg
97
100
  'content' => content
98
101
  }
99
102
  end
103
+
104
+ private
105
+ #取出nil的key 不然友盟解析json出错
106
+ def compact_params(params)
107
+ custom_compact = Proc.new { |k, v| v.delete_if(&custom_compact) if v.kind_of?(Hash); v.blank? }
108
+ params.delete_if &custom_compact
109
+ end
100
110
  end
101
111
  end
102
-
@@ -10,82 +10,45 @@ module UmengMsg
10
10
  CANCEL_URL = 'http://msg.umeng.com/api/cancel'
11
11
  UPLOAD_URL = 'http://msg.umeng.com/upload'
12
12
 
13
- def initialize(platform, **options)
13
+ def initialize(platform, options)
14
14
  @platform = platform
15
- @payload = Params.push_params(platform, **options)
16
- @content = options['content']
17
- @file_id, @task_id = nil
18
- @ret = { push: nil, check: nil, cancel: nil, upload: nil }
19
- @error_code = { push: nil, check: nil, cancel: nil, upload: nil }
15
+ @options = options
20
16
  end
21
17
 
22
18
  def push
23
- sign = Sign.generate @platform, PUSH_URL, @payload
24
- begin
25
- parse_res RestClient.post("#{PUSH_URL}?sign=#{sign}", @payload.to_json, content_type: :json, accept: :json)
26
- rescue => e
27
- parse_res e.response
28
- end
19
+ post_youmeng(CANCEL_URL, Params.push_params(@platform, @options))
29
20
  end
30
21
 
31
22
  def check
32
- @check_payload = Params.check_params(@platform, @task_id)
33
- sign = Sign.generate @platform, CHECK_URL, @check_payload
34
- begin
35
- parse_res RestClient.post("#{CHECK_URL}?sign=#{sign}", @check_payload.to_json, content_type: :json, accept: :json)
36
- rescue => e
37
- parse_res e.response
38
- end
23
+ post_youmeng(CANCEL_URL, Params.check_params(@platform, @options['task_id']))
39
24
  end
40
25
 
41
26
  def cancel
42
- @cancel_payload = Params.cancel_params(@platform, @task_id)
43
- sign = Sign.generate @platform, CANCEL_URL, @cancel_payload
44
- begin
45
- parse_res RestClient.post("#{CANCEL_URL}?sign=#{sign}", @cancel_payload.to_json, content_type: :json, accept: :json)
46
- rescue => e
47
- parse_res e.response
48
- end
27
+ post_youmeng(CANCEL_URL, Params.cancel_params(@platform, @options['task_id']))
49
28
  end
50
29
 
51
30
  def upload
52
- @upload_payload = Params.upload_params(@platform, @content)
53
- sign = Sign.generate @platform, CANCEL_URL, @upload_payload
31
+ post_youmeng(UPLOAD_URL, Params.upload_params(@platform, @options['content']))
32
+ end
33
+
34
+ private
35
+ def post_youmeng(url, payload)
36
+ sign = Sign.generate @platform, url, payload
54
37
  begin
55
- parse_res RestClient.post("#{UPLOAD_URL}?sign=#{sign}", @upload_payload.to_json, content_type: :json, accept: :json)
38
+ parse_res RestClient.post("#{url}?sign=#{sign}", payload.to_json, timeout: 3, open_timeout: 3, content_type: :json, accept: :json)
56
39
  rescue => e
57
- parse_res e.response
40
+ error_result e.message
58
41
  end
59
42
  end
60
43
 
61
- private
62
-
63
44
  def parse_res response
64
- res_hsh = JSON.parse(response)
65
- @ret[:push] = res_hsh['ret']
66
- @error_code[:push] = res_hsh['data']['error_code']
67
- @task_id = res_hsh['data']['task_id']
45
+ result = JSON.parse(response)
46
+ {result: result['ret'], error_code: result['data']['error_code'], data: result['data']}
68
47
  end
69
48
 
70
- def check_parse
71
- res_hsh = JSON.parse(response)
72
- @ret[:check] = res_hsh['ret']
73
- @error_code[:check] = res_hsh['data']['error_code']
74
- @check_data = res_hsh['data']
49
+ def error_result(error_message)
50
+ {result: error_message, error_code: '999', data: {}}
75
51
  end
76
52
 
77
- def cancel_parse
78
- res_hsh = JSON.parse(response)
79
- @ret[:cancel] = res_hsh['ret']
80
- @error_code[:cancel] = res_hsh['data']['error_code']
81
- end
82
-
83
- def upload_parse response
84
- res_hsh = JSON.parse(response)
85
- @ret[:upload] = res_hsh['ret']
86
- @error_code[:upload] = res_hsh['data']['error_code']
87
- @file_id = res_hsh['data']['file_id']
88
- end
89
53
  end
90
54
  end
91
-
@@ -1,3 +1,3 @@
1
1
  module UmengMsg
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.0"
3
3
  end
data/lib/umeng_msg.rb CHANGED
@@ -1,10 +1,9 @@
1
1
  # coding: utf-8
2
2
  require "umeng_msg/version"
3
3
  require "umeng_msg/configuration"
4
- require "umeng_msg/subject"
5
- require 'umeng_msg/logger'
6
4
  require 'umeng_msg/params'
7
5
  require 'umeng_msg/sign'
6
+ require "umeng_msg/subject"
8
7
 
9
8
  module UmengMsg
10
9
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: umeng_msg
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - hzlu
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-12-04 00:00:00.000000000 Z
11
+ date: 2016-07-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rest-client
@@ -91,6 +91,7 @@ files:
91
91
  - ".rspec"
92
92
  - ".travis.yml"
93
93
  - Gemfile
94
+ - LICENSE
94
95
  - README.md
95
96
  - Rakefile
96
97
  - bin/console
@@ -99,7 +100,6 @@ files:
99
100
  - lib/generators/umeng_msg/templates/umeng_msg.rb
100
101
  - lib/umeng_msg.rb
101
102
  - lib/umeng_msg/configuration.rb
102
- - lib/umeng_msg/logger.rb
103
103
  - lib/umeng_msg/params.rb
104
104
  - lib/umeng_msg/sign.rb
105
105
  - lib/umeng_msg/subject.rb
@@ -124,9 +124,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
124
124
  version: '0'
125
125
  requirements: []
126
126
  rubyforge_project:
127
- rubygems_version: 2.4.6
127
+ rubygems_version: 2.5.1
128
128
  signing_key:
129
129
  specification_version: 4
130
130
  summary: The encapsulation of umeng message.
131
131
  test_files: []
132
- has_rdoc:
@@ -1,20 +0,0 @@
1
- module UmengMsg
2
- module Logger
3
- def logger_file
4
- Rails.root.join("log", "umeng_push.log")
5
- end
6
-
7
- def error_file
8
- Rails.root.join("log", "error.log")
9
- end
10
-
11
- def umeng_logger
12
- @logger ||= Yell.new do |l|
13
- l.level = 'gte.info'
14
-
15
- l.adapter :datefile, logger_file, level: 'lte.error', keep: 5
16
- l.adapter :datefile, error_file, level: 'gte.error', keep:5
17
- end
18
- end
19
- end
20
- end