simple_wx 0.0.1 → 0.0.3

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: 3f8a0580dcce6366b7315aa47f817a17bb08575e
4
- data.tar.gz: d1ed84101d6c927a4f3d725dd03a8c02c87e3301
3
+ metadata.gz: 14016b04930e8e82a6567edf4e861aa1eaca0c4a
4
+ data.tar.gz: a5a501f857ad54af51b08c5702abd877ec61c86a
5
5
  SHA512:
6
- metadata.gz: f3e235604798c5c294a1851117e6081073f190ed975ac4bcad93cfac191e408b42f1de3270f8e41ef1b12945cee6ed302ad1b6dc52e67ebc90f9d0804af1b27f
7
- data.tar.gz: 70e64ad17c949e5c0490b90ccd2c88735ceb16e6f1e2af2467cd0611f4cb5c1fe8a0c2f4f43d83c1019713bb3ef2c6a37b7a8c72c0695f27888de67abcf2f487
6
+ metadata.gz: 8c75e4bd577a24851e7f3e100a482fa6eb359c3b8cf6a8e3e6c40c6ebeadabe315c494cc61ed5f30eafaa720a9365f4fb68ef9efd0d1f80e3525f5aff7cc8693
7
+ data.tar.gz: 1f02bd359dc7233884eed0b72d8b6f7deb504954fb6c1c120c7bbb9b582e5a5803844f4f0168bf68b25e0b363d20bc2385454274faedf25f7d4812d3327efd03
data/README.md CHANGED
@@ -1,16 +1,48 @@
1
- ## initializers/simple_wx.rb:
1
+
2
+ # SimpleWx
3
+
4
+ Ruby Api for Micro Message(WeiXin 微信)Public(公众)Platform.
5
+
6
+ [微信公众平台开发文档](http://mp.weixin.qq.com/wiki/home/index.html)
7
+
8
+ ------
9
+
10
+ ## Installation
11
+
12
+ ### Step 1
13
+
14
+ Add this line to your application's Gemfile:
15
+
16
+ ```ruby
17
+ gem 'simple_wx'
2
18
  ```
3
- WeixinSetting = YAML.load_file(File.join "#{Rails.root}", "config", "weixin.yml")[Rails.env || "development"]
4
19
 
20
+ ### Step 2
21
+
22
+ 在 `config/initailizers/` 目录下添加文件 `simple_wx.rb`:
23
+
24
+ ```ruby
5
25
  module SimpleWx
6
- @@weixin_config = YAML.load_file(File.join "#{Rails.root}", "config", "weixin.yml")[Rails.env || "development"]
26
+ # 配置微信参数
27
+ # 配置日志对象
28
+ # 配置 Redis,用来存放 access_token 和 jsapi_ticket
29
+
30
+ # @@weixin_config = YAML.load_file(File.join "#{Rails.root}", "config", "weixin.yml")
31
+ @@weixin_config = { "app_id"=>"app_id",
32
+ "app_secret"=>"app_secret",
33
+ "serial_no"=>"gh_xxxxxxxx(微信号)",
34
+ "token"=>"verify_token"
35
+ }
7
36
  @@logger = Rails.logger
8
37
  @@redis = Redis::Objects.redis
9
38
  end
10
39
  ```
11
40
 
12
- ## config/weixin.yml:
13
- ```
41
+ ### Optional
42
+
43
+ 选择配置 `config/weixin.yml`:
44
+
45
+ ```ruby
14
46
  development:
15
47
  app_id: app_id
16
48
  app_secret: app_secret
@@ -19,4 +51,255 @@
19
51
 
20
52
  production:
21
53
  # ...
22
- ```
54
+ ```
55
+
56
+ 配置 helper 方法,生成 jsapi 签名参数 `application_helper.rb`:
57
+
58
+ ```ruby
59
+ def weixin_jsapi_signature_params
60
+ SimpleWx::Signaturer.jsapi_signature_gen url: url
61
+ end
62
+ ```
63
+
64
+ ------
65
+
66
+ ## Usage
67
+
68
+ ### Signaturer
69
+
70
+ 验证微信消息签名
71
+
72
+ ```ruby
73
+ signer = SimpleWx::Signaturer.new timestamp: params[:timestamp], nonce: params[:nonce]
74
+ if signer.sign params[:signature]
75
+ render text: params[:echostr]
76
+ else
77
+ # ...
78
+ end
79
+ ```
80
+
81
+ 生成 jsapi 签名参数
82
+
83
+ ```ruby
84
+ SimpleWx::Signaturer.jsapi_signature_gen url: url
85
+ ```
86
+
87
+ ------
88
+
89
+ ### AccessToken
90
+
91
+ 保存在 Redis 中,保存 30 mins
92
+
93
+ get access_token
94
+
95
+ ```ruby
96
+ SimpleWx::AccessToken.access_token
97
+ ```
98
+
99
+ get 微信服务器ip
100
+
101
+ ```ruby
102
+ SimpleWx::AccessToken.server_ip
103
+ ```
104
+
105
+ get jsapi_ticket
106
+
107
+ ```ruby
108
+ SimpleWx::AccessToken.jsapi_ticket
109
+ ```
110
+
111
+ ------
112
+
113
+ ### Menu
114
+
115
+ 查看、生成、删除菜单,buttons 参数为 hash,格式参照微信文档
116
+
117
+ ```ruby
118
+ SimpleWx::Menu.show
119
+ SimpleWx::Menu.create(buttons) # 返回 true/false
120
+ SimpleWx::Menu.create!(buttons) # 强制报错
121
+ SimpleWx::Menu.delete # 返回 true/false
122
+ SimpleWx::Menu.delete!
123
+ ```
124
+
125
+ ------
126
+
127
+ ### OAuth
128
+
129
+ 生成微信回调链接
130
+
131
+ ```ruby
132
+ SimpleWx::OAuth.generate_auth_link "url", "state", "snsapi_userinfo/snsapi_base"
133
+ ```
134
+
135
+ 获取 `OAuth` 的 `access_token` 及相关参数
136
+
137
+ ```ruby
138
+ auth = SimpleWx::OAuth.new(code: "code")
139
+ result_json = auth.get_access_token
140
+ ```
141
+
142
+ `access_token` 返回的基本参数会赋值给实例属性
143
+
144
+ ```ruby
145
+ auth.access_token == result_json["access_token"]
146
+ # => true
147
+ ```
148
+
149
+ 检查 `access_token` 是否过期
150
+
151
+ ```ruby
152
+ auth.access_token_valid?
153
+ => true/false
154
+ ```
155
+
156
+ 查看 `access_token` 过期时间
157
+
158
+ ```ruby
159
+ auth.expires_in
160
+ # => 7200
161
+ ```
162
+
163
+ 刷新 `access_token`
164
+
165
+ ```ruby
166
+ result_json = auth.refresh_token
167
+ auth.access_token == result_json["access_token"]
168
+ auth.access_token_valid?
169
+ # => true
170
+ ```
171
+
172
+ 通过 OAuth 信息获取用户信息,返回信息格式见微信文档
173
+
174
+ ```ruby
175
+ auth.get_user_info
176
+ ```
177
+
178
+ ------
179
+
180
+ ### UserInfo
181
+
182
+ 获取用户信息一般接口
183
+
184
+ ```ruby
185
+ @user_info = SimpleWx::UserInfo.new(access_token: "token", openid: "openid")
186
+ ```
187
+
188
+ 获取用户信息 OAuth 接口
189
+
190
+ ```ruby
191
+ o_auth = SimpleWx::OAuth.new("code")
192
+ o_auth.get_access_token
193
+ SimpleWx::UserInfo.get_auth_info(o_auth: o_auth)
194
+ ```
195
+
196
+ ------
197
+
198
+ ### Message
199
+
200
+ 通过客服接口发送
201
+
202
+ ```ruby
203
+ message_params = {openid: "to_user", content: "content"}
204
+ SimpleWx::Messages::TextMessage.send_json!(message_params)
205
+ SimpleWx::Messages::TextMessage.send_json(message_params)
206
+ ```
207
+
208
+ 直接返回给微信
209
+
210
+ ```ruby
211
+ message_params = {openid: "to_user", content: "content"}
212
+ render xml: SimpleWx::Messages::TextMessage.to_xml(message_params)
213
+ ```
214
+
215
+ 使用对象方式
216
+
217
+ ```ruby
218
+ msg = SimpleWx::Messages::TextMessage.new openid: "to_user", content: "content"
219
+ msg.send_json
220
+ msg.to_xml
221
+ ```
222
+
223
+ 信息对象列举:
224
+
225
+ ```ruby
226
+ msg = SimpleWx::Messages::TextMessage.new openid: "to_user", content: "content"
227
+ msg = SimpleWx::Messages::ImageMessage.new openid: "to_user", media_id: "media_id"
228
+ msg = SimpleWx::Messages::VoiceMessage.new openid: "to_user", media_id: "media_id"
229
+ video = { title: 'title', media_id: 'media_id', description: 'desc' }
230
+ msg = SimpleWx::Messages::VideoMessage.new openid: "to_user", video: video
231
+
232
+ music = { title: 'title', description: 'desc', music_url: 'url', hq_music_url: 'hq_url', thumb_media_id: 'thumb_media_id' }
233
+ msg = SimpleWx::Messages::MusicMessage.new openid: "to_user", music: music
234
+
235
+ # 图文信息必须使用数组包围
236
+ articles = [{title: 'title1', description: 'desc1', url: 'url1', picurl: 'picurl1'}, {title: 'title2', ..., picurl: 'picurl2'}, ...]
237
+ msg = SimpleWx::Messages::NewsMessage.new openid: "to_user", articles: articles
238
+ ```
239
+
240
+ ------
241
+
242
+ ### Template
243
+
244
+ 改变行业id
245
+
246
+ ```ruby
247
+ SimpleWx::Template.set_industry id1, id2
248
+ ```
249
+
250
+ 获取模板id
251
+
252
+ ```ruby
253
+ SimpleWx::Template.get_template_id(template_id_short: "TM00015")
254
+ ```
255
+
256
+ 发送模板信息
257
+
258
+ ```ruby
259
+ params = {
260
+ openid: openid,
261
+ template_id: "JrneF1SO3wo1K3qG1GL-zplmJpvxFsrIeBWPFYKIBB4",
262
+ url: open_url,
263
+ topcolor: "#FF0000",
264
+ data: {
265
+ ...
266
+ }
267
+ }
268
+ SimpleWx::Template.send_json(params)
269
+ ```
270
+
271
+ ------
272
+
273
+ ### Media
274
+
275
+ 获取临时素材
276
+
277
+ ```ruby
278
+ SimpleWx::Media.get_media(media_id: "media_id")
279
+ ```
280
+
281
+ 获取永久素材
282
+
283
+ ```ruby
284
+ SimpleWx::Media.get_material(media_id: "media_id")
285
+ ```
286
+
287
+ ------
288
+
289
+ ### Base
290
+
291
+ 上面所有的方法都能使用__类方法__和__实例方法__实现。
292
+ 使用实例的方式,能获得一个 error 参数,检查微信接口是否有错误码返回。
293
+ error 在每次请求微信API时都会刷新.
294
+
295
+ eg.
296
+
297
+ ```ruby
298
+ at = SimpleWx::AccessToken.new
299
+ at.access_token
300
+ if at.error.present?
301
+ ...
302
+ end
303
+ ```
304
+
305
+ ------
@@ -1,6 +1,7 @@
1
1
  # encoding: utf-8
2
2
  require 'redis'
3
3
  require 'yell'
4
+ require 'nokogiri'
4
5
 
5
6
  module SimpleWx
6
7
  @@weixin_config = {}
@@ -26,6 +27,7 @@ require 'simple_wx/o_auth'
26
27
  require 'simple_wx/access_token'
27
28
  require 'simple_wx/menu'
28
29
  require 'simple_wx/user_info'
30
+ require 'simple_wx/media'
29
31
  require 'simple_wx/message'
30
32
  require 'simple_wx/messages/text_message'
31
33
  require 'simple_wx/messages/image_message'
@@ -33,4 +35,4 @@ require 'simple_wx/messages/news_message'
33
35
  require 'simple_wx/messages/video_message'
34
36
  require 'simple_wx/messages/voice_message'
35
37
  require 'simple_wx/messages/music_message'
36
-
38
+ require 'simple_wx/template'
@@ -66,14 +66,5 @@ module SimpleWx
66
66
  end
67
67
  access_token
68
68
  end
69
-
70
- def self.method_missing m
71
- instance = self.new
72
- if instance.public_methods(false).include? m.to_sym
73
- return instance.send(m)
74
- else
75
- super
76
- end
77
- end
78
69
  end
79
70
  end
@@ -9,6 +9,14 @@ module SimpleWx
9
9
  @error = {}
10
10
  end
11
11
 
12
+ def self.method_missing m, *args
13
+ if public_instance_methods(false).include? m.to_sym
14
+ self.new(*args).send(m)
15
+ else
16
+ super
17
+ end
18
+ end
19
+
12
20
  protected
13
21
 
14
22
  def errcode_check json, log_flag = nil
@@ -0,0 +1,19 @@
1
+ module SimpleWx
2
+ class Media < Base
3
+ def initialize options
4
+ @access_token = options[:access_token] || AccessToken.access_token
5
+ @media_id = options[:media_id]
6
+ end
7
+
8
+ def get_media
9
+ url = "https://api.weixin.qq.com/cgi-bin/media/get?access_token=#{@access_token}&media_id=#{@media_id}"
10
+ RestClient.get url
11
+ end
12
+
13
+ def get_material
14
+ url = "https://api.weixin.qq.com/cgi-bin/material/get_material?access_token=#{@access_token}"
15
+ response = RestClient.post(url, JSON.generate(media_id: @media_id))
16
+ errcode_check(JSON.parse(response))
17
+ end
18
+ end
19
+ end
@@ -34,8 +34,7 @@ module SimpleWx
34
34
  def show
35
35
  url = "https://api.weixin.qq.com/cgi-bin/menu/get?access_token=#{@access_token}"
36
36
  response = RestClient.get url
37
- response_json = errcode_check(JSON.parse(response))
38
- @menus = response_json["menu"]
37
+ errcode_check(JSON.parse(response))
39
38
  end
40
39
 
41
40
  def create menu_hash
@@ -61,13 +60,5 @@ module SimpleWx
61
60
  @raise_flag ||= true
62
61
  delete
63
62
  end
64
-
65
- def self.method_missing m, *args
66
- if instance_methods.include? m.to_sym
67
- self.new.send(m, *args)
68
- else
69
- super
70
- end
71
- end
72
63
  end
73
64
  end
@@ -2,8 +2,8 @@ module SimpleWx
2
2
  class Message < Base
3
3
  attr_accessor :openid, :json, :xml
4
4
  def initialize options
5
- @openid = options.delete(:openid)
6
- @access_token = options.delete(:access_token) || AccessToken.access_token
5
+ @openid = options[:openid]
6
+ @access_token = options[:access_token] || AccessToken.access_token
7
7
  @custom_msg_url = "https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=#{@access_token}"
8
8
  @json = {}
9
9
  @xml = {}
@@ -50,10 +50,16 @@ module SimpleWx
50
50
  builder.send(k) do
51
51
  recursively_xml(builder, v)
52
52
  end
53
+ elsif v.is_a? Array
54
+ builder.send(k) do
55
+ v.each do |item|
56
+ recursively_xml(builder, item)
57
+ end
58
+ end
53
59
  else
54
60
  builder.send(k, v)
55
61
  end
56
62
  end
57
63
  end
58
64
  end
59
- end
65
+ end
@@ -0,0 +1,30 @@
1
+ module SimpleWx
2
+ module Messages
3
+ class MusicMessage < Message
4
+ def initialize options
5
+ super
6
+ @music = options[:music]
7
+ end
8
+
9
+ def send_json
10
+ @json[:msgtype] = "music"
11
+ @json[:music] = @music
12
+ SimpleWx.logger.info("SimpleWxLog:#{self.class.name} -- #{@openid} -- #{json}")
13
+ super
14
+ end
15
+
16
+ def to_xml
17
+ @xml["MsgType"] = "music"
18
+ @xml["Music"] = {
19
+ "Title" => @music[:title],
20
+ "Description" => @music[:description],
21
+ "MusicUrl" => @music[:music_url],
22
+ "HQMusicUrl" => @music[:hq_music_url],
23
+ "ThumbMediaId" => @music[:thumb_media_id]
24
+ }
25
+ super
26
+ end
27
+ end
28
+ end
29
+ end
30
+
@@ -0,0 +1,34 @@
1
+ module SimpleWx
2
+ module Messages
3
+ class NewsMessage < Message
4
+ def initialize options
5
+ super
6
+ @articles = options[:articles]
7
+ end
8
+
9
+ def send_json
10
+ @json[:msgtype] = "news"
11
+ @json[:news] = { articles: @articles }
12
+ SimpleWx.logger.info("SimpleWxLog:#{self.class.name} -- #{@openid} -- #{json}")
13
+ super
14
+ end
15
+
16
+ def to_xml
17
+ @xml["MsgType"] = "news"
18
+ @xml["ArticleCount"] = @articles.size
19
+ @xml["Articles"] = @articles.map do |item|
20
+ {
21
+ "item" =>
22
+ {
23
+ "Title" => item[:title],
24
+ "Description" => item[:description],
25
+ "PicUrl" => item[:picurl],
26
+ "Url" => item[:url]
27
+ }
28
+ }
29
+ end
30
+ super
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,28 @@
1
+ module SimpleWx
2
+ module Messages
3
+ class VideoMessage < Message
4
+ def initialize options
5
+ super
6
+ @video = options[:video]
7
+ end
8
+
9
+ def send_json
10
+ @json[:msgtype] = "video"
11
+ @json[:video] = @video
12
+ SimpleWx.logger.info("SimpleWxLog:#{self.class.name} -- #{@openid} -- #{json}")
13
+ super
14
+ end
15
+
16
+ def to_xml
17
+ @xml["MsgType"] = "video"
18
+ @xml["Video"] = {
19
+ "MediaId" => @video[:media_id],
20
+ "Title" => @video[:title],
21
+ "Description" => @video[:description],
22
+ }
23
+ super
24
+ end
25
+ end
26
+ end
27
+ end
28
+
@@ -0,0 +1,23 @@
1
+ module SimpleWx
2
+ module Messages
3
+ class VoiceMessage < Message
4
+ def initialize options
5
+ super
6
+ @media_id = options[:media_id]
7
+ end
8
+
9
+ def send_json
10
+ @json[:msgtype] = "voice"
11
+ @json[:voice] = { media_id: @media_id }
12
+ SimpleWx.logger.info("SimpleWxLog:#{self.class.name} -- #{@openid} -- #{json}")
13
+ super
14
+ end
15
+
16
+ def to_xml
17
+ @xml["MsgType"] = "voice"
18
+ @xml["Voice"] = { "MediaId" => @media_id }
19
+ super
20
+ end
21
+ end
22
+ end
23
+ end
@@ -43,7 +43,11 @@ module SimpleWx
43
43
  end
44
44
 
45
45
  def get_user_info
46
- UserInfo.get_auth_info(o_auth: self)
46
+ if @scope == "snsapi_base"
47
+ UserInfo.get_base_info(openid: @openid)
48
+ else
49
+ UserInfo.get_auth_info(o_auth: self)
50
+ end
47
51
  end
48
52
 
49
53
  def access_token_valid?
@@ -1,3 +1,4 @@
1
+ require 'securerandom'
1
2
  module SimpleWx
2
3
  class Signaturer < Base
3
4
 
@@ -11,20 +12,43 @@ module SimpleWx
11
12
  # end
12
13
 
13
14
  def initialize options = {}
14
- @timestamp = options.fetch :timestamp
15
- @nonce = options.fetch :nonce
15
+ @timestamp = options[:timestamp] || Time.now.to_i
16
+ @nonce = options[:nonce] || SecureRandom.urlsafe_base64
16
17
  @token = SimpleWx.weixin_config["token"] #TODO 没有就raise错误,用method_missing
17
18
  end
18
19
 
19
20
  def sign signture
20
21
  @sort_array = [@timestamp, @nonce, @token].sort
21
- signture == sha1_encrypt
22
+ encrypt_str = @sort_array.join
23
+ signture == sha1_encrypt(encrypt_str)
24
+ end
25
+
26
+ def jsapi_signature_gen url
27
+ params = {
28
+ 'jsapi_ticket' => AccessToken.jsapi_ticket,
29
+ 'noncestr' => @nonce,
30
+ 'timestamp' => @timestamp,
31
+ 'url' => url.split('#', 2).first
32
+ }
33
+ params = Hash[params.sort]
34
+ encrypt_str = params.to_a.map { |a, b| "#{a}=#{b}" }.join('&')
35
+ signature = sha1_encrypt(encrypt_str)
36
+ {
37
+ 'appId' => SimpleWx.weixin_config["app_id"],
38
+ 'timestamp' => @timestamp,
39
+ 'nonceStr' => @nonce,
40
+ 'signature' => signature
41
+ }
42
+ end
43
+
44
+ def self.jsapi_signature_gen options
45
+ url = options.delete(:url)
46
+ self.new(options).jsapi_signature_gen url
22
47
  end
23
48
 
24
49
  private
25
50
 
26
- def sha1_encrypt
27
- encrypt_str = @sort_array.join
51
+ def sha1_encrypt encrypt_str
28
52
  Digest::SHA1.hexdigest(encrypt_str)
29
53
  end
30
54
  end
@@ -0,0 +1,43 @@
1
+ module SimpleWx
2
+ class Template < Message
3
+ attr_reader :template_id
4
+
5
+ def initialize options
6
+ super
7
+ @access_token = options[:access_token] || AccessToken.access_token
8
+ @template_id_short = options[:template_id_short]
9
+ @template_id = options[:template_id]
10
+ @url = options[:url]
11
+ @topcolor = options[:topcolor]
12
+ @data = options[:data]
13
+ end
14
+
15
+ undef_method :to_xml
16
+
17
+ def get_template_id
18
+ url = "https://api.weixin.qq.com/cgi-bin/template/api_add_template?access_token=#{@access_token}"
19
+ response = RestClient.post(url, JSON.generate({template_id_short: @template_id_short}))
20
+ response_json = errcode_check(JSON.parse(response))
21
+ @template_id = response_json["template_id"]
22
+ end
23
+
24
+ def send_json
25
+ set_json
26
+ @json["template_id"] = @template_id
27
+ @json["url"] = @url
28
+ @json["topcolor"] = @topcolor
29
+ @json["data"] = @data
30
+ url = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=#{@access_token}"
31
+ response = RestClient.post(url, JSON.generate(@json))
32
+ errcode_check(JSON.parse(response))
33
+ end
34
+
35
+ def self.set_industry id1 ,id2
36
+ url = "https://api.weixin.qq.com/cgi-bin/template/api_set_industry?access_token=#{@access_token}"
37
+ response = RestClient.post(url, JSON.generate({industry_id1: id1, industry_id2: id2}))
38
+ errcode_check(JSON.parse(response))
39
+ end
40
+ end
41
+ end
42
+
43
+
@@ -9,12 +9,12 @@ module SimpleWx
9
9
  # instance_of_oauth.get_access_token
10
10
  # user_info_hsh = SimpleWx::UserInfo.get_auth_info(o_auth: instance_of_oauth)
11
11
  #
12
- # user_info_hsh = SimpleWx::UserInfo.get_basic_info(access_token: "token", openid: "openid")
12
+ # user_info_hsh = SimpleWx::UserInfo.get_base_info(access_token: "token", openid: "openid")
13
13
  #
14
14
  # ---------- instance-methods -----------
15
15
  #
16
16
  # @user_info = SimpleWx::UserInfo.new(access_token: "token", openid: "openid")
17
- # user_info_hsh = @user_info.get_basic_info
17
+ # user_info_hsh = @user_info.get_base_info
18
18
  # if @user_info.error.present?
19
19
  # ...
20
20
  # end
@@ -26,7 +26,7 @@ module SimpleWx
26
26
  @access_token = options[:access_token] || AccessToken.access_token
27
27
  end
28
28
 
29
- def get_basic_info
29
+ def get_base_info
30
30
  url = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=#{@access_token}&openid=#{@openid}&lang=zh_CN"
31
31
  response = RestClient.get url
32
32
  errcode_check(JSON.parse(response))
@@ -1,3 +1,3 @@
1
1
  module SimpleWx
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.3"
3
3
  end
@@ -17,8 +17,10 @@ Gem::Specification.new do |spec|
17
17
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
18
18
  spec.require_paths = ["lib"]
19
19
 
20
- spec.add_dependency 'redis', '~> 3.2.1'
21
- spec.add_dependency 'yell', '~> 2.0.0'
20
+ spec.add_dependency 'rest-client', '>= 1.6.1'
21
+ spec.add_dependency 'redis', '>= 2.0.0'
22
+ spec.add_dependency 'yell', '>= 1.2.0'
23
+ spec.add_dependency 'nokogiri', '>= 1.4.4'
22
24
 
23
25
  spec.add_development_dependency "bundler", "~> 1.6"
24
26
 
metadata CHANGED
@@ -1,43 +1,71 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: simple_wx
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Scott1743
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-11-12 00:00:00.000000000 Z
11
+ date: 2015-11-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: redis
14
+ name: rest-client
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 3.2.1
19
+ version: 1.6.1
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: 3.2.1
26
+ version: 1.6.1
27
27
  - !ruby/object:Gem::Dependency
28
- name: yell
28
+ name: redis
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: 2.0.0
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - "~>"
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: 2.0.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: yell
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: 1.2.0
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: 1.2.0
55
+ - !ruby/object:Gem::Dependency
56
+ name: nokogiri
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: 1.4.4
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: 1.4.4
41
69
  - !ruby/object:Gem::Dependency
42
70
  name: bundler
43
71
  requirement: !ruby/object:Gem::Requirement
@@ -65,12 +93,18 @@ files:
65
93
  - lib/simple_wx.rb
66
94
  - lib/simple_wx/access_token.rb
67
95
  - lib/simple_wx/base.rb
96
+ - lib/simple_wx/media.rb
68
97
  - lib/simple_wx/menu.rb
69
98
  - lib/simple_wx/message.rb
70
99
  - lib/simple_wx/messages/image_message.rb
100
+ - lib/simple_wx/messages/music_message.rb
101
+ - lib/simple_wx/messages/news_message.rb
71
102
  - lib/simple_wx/messages/text_message.rb
103
+ - lib/simple_wx/messages/video_message.rb
104
+ - lib/simple_wx/messages/voice_message.rb
72
105
  - lib/simple_wx/o_auth.rb
73
106
  - lib/simple_wx/signaturer.rb
107
+ - lib/simple_wx/template.rb
74
108
  - lib/simple_wx/user_info.rb
75
109
  - lib/simple_wx/version.rb
76
110
  - simple_wx.gemspec