umeng_push 0.0.1
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 +7 -0
- data/.gitignore +3 -0
- data/.rspec +2 -0
- data/Gemfile +4 -0
- data/LICENSE +21 -0
- data/README.md +47 -0
- data/Rakefile +1 -0
- data/bin/console +14 -0
- data/bin/setup +7 -0
- data/lib/generators/umeng_push/install_generator.rb +11 -0
- data/lib/generators/umeng_push/templates/umeng_push.rb +17 -0
- data/lib/umeng_push/client.rb +130 -0
- data/lib/umeng_push/configuration.rb +13 -0
- data/lib/umeng_push/response_error.rb +121 -0
- data/lib/umeng_push/version.rb +3 -0
- data/lib/umeng_push.rb +16 -0
- data/umeng_push.gemspec +28 -0
- metadata +130 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: ec75725da1a80dd8525417c31f0a1f7cb626d70b
|
4
|
+
data.tar.gz: 195ffb32fd8984c1a5623c043d222274206dea17
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 7749517290d6563f197a7db2c964b0f067b11620d22fd3b443bdfb384e13a8e33d53151a9f58c817c0e08d246dceaefadb7ea607f021f6f10c60799a5ccac37d
|
7
|
+
data.tar.gz: af14130cdab8f5e1fb946818612e2df0f21ca1c82981af60ce9026f13e5a4b62d45ef44343be267aeb5a76ce0901396ccee4a4ce4c7c7f423f7012333cb9b8a4
|
data/.gitignore
ADDED
data/.rspec
ADDED
data/Gemfile
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
The MIT License (MIT)
|
2
|
+
|
3
|
+
Copyright (c) 2016 zhanglinjie
|
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
|
+
The above copyright notice and this permission notice shall be included in
|
13
|
+
all copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
21
|
+
THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
# UmengPush
|
2
|
+
|
3
|
+
此gem是对友盟推送的api封装,支持推送 查询任务 删除任务
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
Add this line to your application's Gemfile:
|
8
|
+
|
9
|
+
```ruby
|
10
|
+
gem 'umeng_push'
|
11
|
+
```
|
12
|
+
|
13
|
+
And then execute:
|
14
|
+
|
15
|
+
$ bundle
|
16
|
+
|
17
|
+
Or install it yourself as:
|
18
|
+
|
19
|
+
$ gem install umeng_push
|
20
|
+
|
21
|
+
## Usage
|
22
|
+
rails generate umeng_push:install
|
23
|
+
UmengPush::Client.iOS.send_message(options)
|
24
|
+
UmengPush::Client.android.send_message(options)
|
25
|
+
UmengPush::Client.iOS.unicast(device_token, options)
|
26
|
+
UmengPush::Client.iOS.listcast(device_tokens, options)
|
27
|
+
UmengPush::Client.iOS.broadcast(options)
|
28
|
+
UmengPush::Client.iOS.groupcast(filter, options)
|
29
|
+
UmengPush::Client.iOS.check_task(task_id)
|
30
|
+
UmengPush::Client.iOS.cancel_task(task_id)
|
31
|
+
推送相关options参数请参看官方文档
|
32
|
+
返回结果失败 则抛出错误UmengPush::ResponseError
|
33
|
+
默认请求超时是3秒
|
34
|
+
|
35
|
+
## Development
|
36
|
+
|
37
|
+
After checking out the repo, run `bin/setup` to install dependencies. Then, run `bin/console` for an interactive prompt that will allow you to experiment.
|
38
|
+
|
39
|
+
To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release` to create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
40
|
+
|
41
|
+
## Contributing
|
42
|
+
|
43
|
+
1. Fork it ( https://github.com/[my-github-username]/umeng_push/fork )
|
44
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
45
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
46
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
47
|
+
5. Create a new Pull Request
|
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 "umeng_push"
|
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,11 @@
|
|
1
|
+
module UmengPush
|
2
|
+
module Generators
|
3
|
+
class InstallGenerator < Rails::Generators::Base
|
4
|
+
desc "This generator creates a umeng_push configuratio file at config/initializers"
|
5
|
+
source_root File.expand_path("../templates", __FILE__)
|
6
|
+
def copy_initializer
|
7
|
+
template '../templates/umeng_push.rb', 'config/initializers/umeng_push.rb'
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
if Rails.env.production?
|
2
|
+
UmengPush.configure do |config|
|
3
|
+
config.ios_appkey = 'ios_appkey'
|
4
|
+
config.ios_app_master_secret = 'ios_app_master_secret'
|
5
|
+
config.android_appkey = 'android_appkey'
|
6
|
+
config.android_app_master_secret = 'android_app_master_secret'
|
7
|
+
config.production_mode = 'true'
|
8
|
+
end
|
9
|
+
else
|
10
|
+
UmengPush.configure do |config|
|
11
|
+
config.ios_appkey = 'ios_appkey'
|
12
|
+
config.ios_app_master_secret = 'ios_app_master_secret'
|
13
|
+
config.android_appkey = 'android_appkey'
|
14
|
+
config.android_app_master_secret = 'android_app_master_secret'
|
15
|
+
config.production_mode = 'false'
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,130 @@
|
|
1
|
+
require 'digest/md5'
|
2
|
+
require 'httpi'
|
3
|
+
require 'json'
|
4
|
+
|
5
|
+
module UmengPush
|
6
|
+
class Client
|
7
|
+
attr_accessor :platform, :appkey, :app_master_secret, :production_mode
|
8
|
+
def initialize(platform, appkey, app_master_secret, production_mode=false)
|
9
|
+
@platform = platform
|
10
|
+
@appkey = appkey
|
11
|
+
@app_master_secret = app_master_secret
|
12
|
+
@production_mode = production_mode
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.iOS
|
16
|
+
Client.new(
|
17
|
+
"iOS",
|
18
|
+
UmengPush.configuration.ios_appkey,
|
19
|
+
UmengPush.configuration.ios_app_master_secret,
|
20
|
+
UmengPush.configuration.production_mode
|
21
|
+
)
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.android
|
25
|
+
Client.new(
|
26
|
+
"android",
|
27
|
+
UmengPush.configuration.android_appkey,
|
28
|
+
UmengPush.configuration.android_app_master_secret,
|
29
|
+
UmengPush.configuration.production_mode
|
30
|
+
)
|
31
|
+
end
|
32
|
+
|
33
|
+
# 消息发送
|
34
|
+
def send_message(params={})
|
35
|
+
post("/api/send", params.merge({
|
36
|
+
appkey: appkey,
|
37
|
+
timestamp: timestamp,
|
38
|
+
production_mode: production_mode
|
39
|
+
}))
|
40
|
+
end
|
41
|
+
|
42
|
+
# 单播
|
43
|
+
def unicast(device_token, params={})
|
44
|
+
send_message(params.merge({
|
45
|
+
type: "unicast",
|
46
|
+
device_tokens: device_token
|
47
|
+
}))
|
48
|
+
end
|
49
|
+
|
50
|
+
# 组播
|
51
|
+
def listcast(device_tokens=[], params={})
|
52
|
+
send_message(params.merge({
|
53
|
+
type: "listcast",
|
54
|
+
device_tokens: device_tokens.join(",")
|
55
|
+
}))
|
56
|
+
end
|
57
|
+
|
58
|
+
# 广播
|
59
|
+
def broadcast(params={})
|
60
|
+
send_message(params.merge({
|
61
|
+
type: "broadcast"
|
62
|
+
}))
|
63
|
+
end
|
64
|
+
|
65
|
+
# 组播
|
66
|
+
def groupcast(filter={}, params={})
|
67
|
+
send_message(params.merge({
|
68
|
+
type: "groupcast",
|
69
|
+
filter: filter
|
70
|
+
}))
|
71
|
+
end
|
72
|
+
|
73
|
+
# 查询任务
|
74
|
+
def check_task(task_id)
|
75
|
+
post("/api/status", {
|
76
|
+
appkey: appkey,
|
77
|
+
timestamp: timestamp,
|
78
|
+
task_id: task_id
|
79
|
+
})
|
80
|
+
end
|
81
|
+
|
82
|
+
# 取消任务
|
83
|
+
def cancel_task(task_id)
|
84
|
+
post("/api/cancel", {
|
85
|
+
appkey: appkey,
|
86
|
+
timestamp: timestamp,
|
87
|
+
task_id: task_id
|
88
|
+
})
|
89
|
+
end
|
90
|
+
|
91
|
+
private
|
92
|
+
def post(url, payload)
|
93
|
+
params = compact_params(payload)
|
94
|
+
sign = sign(url, params)
|
95
|
+
response = nil
|
96
|
+
begin
|
97
|
+
request = HTTPI::Request.new
|
98
|
+
request.url = "#{UmengPush::HOST}#{url}?sign=#{sign}"
|
99
|
+
request.open_timeout = 3
|
100
|
+
request.read_timeout = 3
|
101
|
+
request.body = params.to_json
|
102
|
+
response = HTTPI.post(request)
|
103
|
+
rescue => e
|
104
|
+
raise ResponseError.new("0", data: {}, message: e.message)
|
105
|
+
end
|
106
|
+
response_body_json = JSON.load(response.body)
|
107
|
+
check_response!(response_body_json)
|
108
|
+
response_body_json
|
109
|
+
end
|
110
|
+
|
111
|
+
def check_response!(response_body_json)
|
112
|
+
if response_body_json['ret'] != 'SUCCESS'
|
113
|
+
raise ResponseError.new(response_body_json['data']['error_code'], data: response_body_json['data'])
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
def sign(url, payload)
|
118
|
+
Digest::MD5.hexdigest('POST' + UmengPush::HOST + url + payload.to_json + app_master_secret)
|
119
|
+
end
|
120
|
+
|
121
|
+
def timestamp
|
122
|
+
Time.now.to_i.to_s
|
123
|
+
end
|
124
|
+
|
125
|
+
def compact_params(params)
|
126
|
+
custom_compact = Proc.new { |k, v| v.delete_if(&custom_compact) if v.kind_of?(Hash); v.nil? }
|
127
|
+
params.delete_if &custom_compact
|
128
|
+
end
|
129
|
+
end
|
130
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module UmengPush
|
2
|
+
class Configuration
|
3
|
+
attr_accessor :ios_appkey, :ios_app_master_secret, :android_appkey, :android_app_master_secret, :production_mode
|
4
|
+
|
5
|
+
def initialize
|
6
|
+
@ios_appkey = 'ios_appkey'
|
7
|
+
@ios_app_master_secret = 'ios_secret'
|
8
|
+
@android_appkey = 'android_appkey'
|
9
|
+
@android_app_master_secret = 'android_secret'
|
10
|
+
@production_mode = 'false'
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,121 @@
|
|
1
|
+
module UmengPush
|
2
|
+
class ResponseError < StandardError
|
3
|
+
attr_accessor :error_code, :data, :message
|
4
|
+
def initialize(error_code, data: {}, message: nil)
|
5
|
+
@error_code = error_code
|
6
|
+
@data = data
|
7
|
+
@message = message || error_code_message
|
8
|
+
super(@message)
|
9
|
+
end
|
10
|
+
|
11
|
+
private
|
12
|
+
def error_code_message
|
13
|
+
{
|
14
|
+
"1000" => "请求参数没有appkey",
|
15
|
+
"1001" => "请求参数没有payload",
|
16
|
+
"1002" => "请求参数payload中没有body",
|
17
|
+
"1003" => "display_type为message时,请求参数没有custom",
|
18
|
+
"1004" => "请求参数没有display_type",
|
19
|
+
"1005" => "img url格式不对,请以https或者http开始",
|
20
|
+
"1006" => "sound url格式不对,请以https或者http开始",
|
21
|
+
"1007" => "url格式不对,请以https或者http开始",
|
22
|
+
"1008" => "display_type为notification时,body中ticker不能为空",
|
23
|
+
"1009" => "display_type为notification时,body中title不能为空",
|
24
|
+
"1010" => "display_type为notification时,body中text不能为空",
|
25
|
+
"1011" => "play_vibrate的值只能为true或者false",
|
26
|
+
"1012" => "play_lights的值只能为true或者false",
|
27
|
+
"1013" => "play_sound的值只能为true或者false",
|
28
|
+
"1014" => "task-id没有找到",
|
29
|
+
"1015" => "请求参数中没有device_tokens",
|
30
|
+
"1016" => "请求参数没有type",
|
31
|
+
"1017" => "production_mode只能为true或者false",
|
32
|
+
"1018" => "appkey错误:指定的appkey尚未开通推送服务",
|
33
|
+
"1019" => "display_type填写错误",
|
34
|
+
"1020" => "应用组中尚未添加应用",
|
35
|
+
"2000" => "该应用已被禁用",
|
36
|
+
"2001" => "过期时间必须大于当前时间",
|
37
|
+
"2002" => "定时发送时间必须大于当前时间",
|
38
|
+
"2003" => "过期时间必须大于定时发送时间",
|
39
|
+
"2004" => "IP白名单尚未添加, 请到网站后台添加您的服务器IP白名单。",
|
40
|
+
"2005" => "该消息不存在",
|
41
|
+
"2006" => "validation token错误",
|
42
|
+
"2007" => "未对请求进行签名",
|
43
|
+
"2008" => "json解析错误",
|
44
|
+
"2009" => "请填写alias或者file_id",
|
45
|
+
"2010" => "与alias对应的device_tokens为空",
|
46
|
+
"2011" => "alias个数已超过50",
|
47
|
+
"2012" => "此appkey今天的广播数已超过3次",
|
48
|
+
"2013" => "消息还在排队,请稍候再查询",
|
49
|
+
"2014" => "消息取消失败,请稍候再试",
|
50
|
+
"2015" => "device_tokens个数已超过50",
|
51
|
+
"2016" => "请填写filter",
|
52
|
+
"2017" => "添加tag失败",
|
53
|
+
"2018" => "请填写file_id",
|
54
|
+
"2019" => "与此file_id对应的文件不存在",
|
55
|
+
"2020" => "服务正在升级中,请稍候再试",
|
56
|
+
"2021" => "appkey不存在",
|
57
|
+
"2022" => "payload长度过长",
|
58
|
+
"2023" => "文件上传失败,请重试",
|
59
|
+
"2024" => "限速值必须为正整数",
|
60
|
+
"2025" => "aps字段不能为空",
|
61
|
+
"2026" => "1分钟内发送任务次数超出3次",
|
62
|
+
"2027" => "签名不正确",
|
63
|
+
"2028" => "时间戳已过期",
|
64
|
+
"2029" => "content内容不能为空",
|
65
|
+
"2030" => "launch_from/not_launch_from条件中的日期须小于发送日期",
|
66
|
+
"2031" => "filter格式不正确",
|
67
|
+
"2032" => "未上传生产证书,请到Web后台上传",
|
68
|
+
"2033" => "未上传开发证书,请到Web后台上传",
|
69
|
+
"2034" => "证书已过期",
|
70
|
+
"2035" => "定时任务证书过期",
|
71
|
+
"2036" => "时间戳格式错误",
|
72
|
+
"2038" => "文件上传失败",
|
73
|
+
"2039" => "时间格式必须是yyyy-MM-dd HH:mm:ss",
|
74
|
+
"2040" => "过期时间不能超过7天",
|
75
|
+
"3000" => "数据库错误",
|
76
|
+
"3001" => "数据库错误",
|
77
|
+
"3002" => "数据库错误",
|
78
|
+
"3003" => "数据库错误",
|
79
|
+
"3004" => "数据库错误",
|
80
|
+
"4000" => "系统错误",
|
81
|
+
"4001" => "系统忙",
|
82
|
+
"4002" => "操作失败",
|
83
|
+
"4003" => "appkey格式错误",
|
84
|
+
"4004" => "消息类型格式错误",
|
85
|
+
"4005" => "msg格式错误",
|
86
|
+
"4006" => "body格式错误",
|
87
|
+
"4007" => "deliverPolicy格式错误",
|
88
|
+
"4008" => "失效时间格式错误",
|
89
|
+
"4009" => "单个服务器队列已满",
|
90
|
+
"4010" => "设备号格式错误",
|
91
|
+
"4011" => "消息扩展字段无效",
|
92
|
+
"4012" => "没有权限访问",
|
93
|
+
"4013" => "异步发送消息失败",
|
94
|
+
"4014" => "appkey和device_tokens不对应",
|
95
|
+
"4015" => "没有找到应用信息",
|
96
|
+
"4016" => "文件编码有误",
|
97
|
+
"4017" => "文件类型有误",
|
98
|
+
"4018" => "文件远程地址有误",
|
99
|
+
"4019" => "文件描述信息有误",
|
100
|
+
"4020" => "device_token有误(注意,友盟的device_token是严格的44位字符串)",
|
101
|
+
"4021" => "HSF异步服务超时",
|
102
|
+
"4022" => "appkey已经注册",
|
103
|
+
"4023" => "服务器网络异常",
|
104
|
+
"4024" => "非法访问",
|
105
|
+
"4025" => "device-token全部失败",
|
106
|
+
"4026" => "device-token部分失败",
|
107
|
+
"4027" => "拉取文件失败",
|
108
|
+
"5000" => "device_token错误",
|
109
|
+
"5001" => "证书不存在",
|
110
|
+
"5002" => "p,d是umeng保留字段",
|
111
|
+
"5003" => "alert字段不能为空",
|
112
|
+
"5004" => "alert只能是String类型",
|
113
|
+
"5005" => "device_token格式错误",
|
114
|
+
"5006" => "创建socket错误",
|
115
|
+
"5007" => "certificate_revoked错误",
|
116
|
+
"5008" => "certificate_unkown错误",
|
117
|
+
"5009" => "handshake_failure错误",
|
118
|
+
}[error_code]
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|
data/lib/umeng_push.rb
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
require "umeng_push/version"
|
2
|
+
require "umeng_push/configuration"
|
3
|
+
require 'umeng_push/response_error'
|
4
|
+
require "umeng_push/client"
|
5
|
+
|
6
|
+
module UmengPush
|
7
|
+
HOST = "http://msg.umeng.com"
|
8
|
+
|
9
|
+
def self.configuration
|
10
|
+
@configuration ||= Configuration.new
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.configure
|
14
|
+
yield configuration
|
15
|
+
end
|
16
|
+
end
|
data/umeng_push.gemspec
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'umeng_push/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "umeng_push"
|
8
|
+
spec.version = UmengPush::VERSION
|
9
|
+
spec.authors = ["zhanglinjie"]
|
10
|
+
spec.email = ["zhanglinjie412@gmail.com"]
|
11
|
+
spec.license = "MIT"
|
12
|
+
|
13
|
+
spec.summary = "The encapsulation of umeng push api."
|
14
|
+
spec.description = spec.summary
|
15
|
+
spec.homepage = "https://github.com/zhanglinjie/umeng_push"
|
16
|
+
|
17
|
+
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
18
|
+
spec.bindir = "exe"
|
19
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
20
|
+
spec.require_paths = ["lib"]
|
21
|
+
|
22
|
+
spec.add_runtime_dependency "httpi"
|
23
|
+
|
24
|
+
spec.add_development_dependency "bundler", "~> 1.9"
|
25
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
26
|
+
spec.add_development_dependency "rspec"
|
27
|
+
spec.add_development_dependency "pry-byebug"
|
28
|
+
end
|
metadata
ADDED
@@ -0,0 +1,130 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: umeng_push
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- zhanglinjie
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-11-24 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: httpi
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: bundler
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.9'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.9'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rake
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '10.0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '10.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rspec
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: pry-byebug
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
description: The encapsulation of umeng push api.
|
84
|
+
email:
|
85
|
+
- zhanglinjie412@gmail.com
|
86
|
+
executables: []
|
87
|
+
extensions: []
|
88
|
+
extra_rdoc_files: []
|
89
|
+
files:
|
90
|
+
- ".gitignore"
|
91
|
+
- ".rspec"
|
92
|
+
- Gemfile
|
93
|
+
- LICENSE
|
94
|
+
- README.md
|
95
|
+
- Rakefile
|
96
|
+
- bin/console
|
97
|
+
- bin/setup
|
98
|
+
- lib/generators/umeng_push/install_generator.rb
|
99
|
+
- lib/generators/umeng_push/templates/umeng_push.rb
|
100
|
+
- lib/umeng_push.rb
|
101
|
+
- lib/umeng_push/client.rb
|
102
|
+
- lib/umeng_push/configuration.rb
|
103
|
+
- lib/umeng_push/response_error.rb
|
104
|
+
- lib/umeng_push/version.rb
|
105
|
+
- umeng_push.gemspec
|
106
|
+
homepage: https://github.com/zhanglinjie/umeng_push
|
107
|
+
licenses:
|
108
|
+
- MIT
|
109
|
+
metadata: {}
|
110
|
+
post_install_message:
|
111
|
+
rdoc_options: []
|
112
|
+
require_paths:
|
113
|
+
- lib
|
114
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
115
|
+
requirements:
|
116
|
+
- - ">="
|
117
|
+
- !ruby/object:Gem::Version
|
118
|
+
version: '0'
|
119
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
120
|
+
requirements:
|
121
|
+
- - ">="
|
122
|
+
- !ruby/object:Gem::Version
|
123
|
+
version: '0'
|
124
|
+
requirements: []
|
125
|
+
rubyforge_project:
|
126
|
+
rubygems_version: 2.5.1
|
127
|
+
signing_key:
|
128
|
+
specification_version: 4
|
129
|
+
summary: The encapsulation of umeng push api.
|
130
|
+
test_files: []
|