mp_weixin 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (52) hide show
  1. checksums.yaml +15 -0
  2. data/.gitignore +22 -0
  3. data/.rspec +7 -0
  4. data/.travis.yml +20 -0
  5. data/CHANGELOG.md +17 -0
  6. data/Gemfile +5 -0
  7. data/LICENSE.txt +22 -0
  8. data/README.md +308 -0
  9. data/Rakefile +31 -0
  10. data/lib/config/mp_weixin_error.yml +82 -0
  11. data/lib/mp_weixin.rb +59 -0
  12. data/lib/mp_weixin/access_token.rb +172 -0
  13. data/lib/mp_weixin/client.rb +199 -0
  14. data/lib/mp_weixin/config.rb +36 -0
  15. data/lib/mp_weixin/error.rb +27 -0
  16. data/lib/mp_weixin/interface/base.rb +43 -0
  17. data/lib/mp_weixin/interface/group.rb +92 -0
  18. data/lib/mp_weixin/interface/menu.rb +73 -0
  19. data/lib/mp_weixin/interface/message.rb +38 -0
  20. data/lib/mp_weixin/interface/promotion.rb +48 -0
  21. data/lib/mp_weixin/interface/user.rb +39 -0
  22. data/lib/mp_weixin/models/event.rb +123 -0
  23. data/lib/mp_weixin/models/message.rb +227 -0
  24. data/lib/mp_weixin/models/reply_message.rb +180 -0
  25. data/lib/mp_weixin/response.rb +93 -0
  26. data/lib/mp_weixin/response_rule.rb +46 -0
  27. data/lib/mp_weixin/server.rb +39 -0
  28. data/lib/mp_weixin/server_helper.rb +94 -0
  29. data/lib/mp_weixin/version.rb +3 -0
  30. data/lib/support/active_model.rb +3 -0
  31. data/lib/support/active_model/model.rb +99 -0
  32. data/mp_weixin.gemspec +44 -0
  33. data/spec/client_spec.rb +87 -0
  34. data/spec/mp_weixin/access_token_spec.rb +140 -0
  35. data/spec/mp_weixin/client_spec.rb +111 -0
  36. data/spec/mp_weixin/config_spec.rb +24 -0
  37. data/spec/mp_weixin/interface/base_spec.rb +16 -0
  38. data/spec/mp_weixin/interface/group_spec.rb +133 -0
  39. data/spec/mp_weixin/interface/menu_spec.rb +72 -0
  40. data/spec/mp_weixin/interface/message_spec.rb +36 -0
  41. data/spec/mp_weixin/interface/promotion_spec.rb +48 -0
  42. data/spec/mp_weixin/interface/user_spec.rb +76 -0
  43. data/spec/mp_weixin/models/event_spec.rb +94 -0
  44. data/spec/mp_weixin/models/message_spec.rb +300 -0
  45. data/spec/mp_weixin/models/reply_message_spec.rb +365 -0
  46. data/spec/mp_weixin/server_helper_spec.rb +165 -0
  47. data/spec/mp_weixin/server_spec.rb +56 -0
  48. data/spec/spec_helper.rb +51 -0
  49. data/spec/support/mp_weixin.rb +7 -0
  50. data/spec/support/rspec_mixin.rb +8 -0
  51. data/spec/support/weixin.yml +12 -0
  52. metadata +363 -0
@@ -0,0 +1,56 @@
1
+ require "spec_helper"
2
+
3
+ describe MpWeixin::Server do
4
+
5
+ let(:timestamp) { "1388028695" } #{ "#{Time.now.to_i}" }
6
+ let(:nonce) { "121212121" }
7
+ let(:signature) { "9dc548e8c7fe32ac53f887e834a8c719a73cafc3" }# { generate_signature(token, timestamp, nonce) }
8
+ let(:incorrent_signature) { SecureRandom.hex(64) }
9
+ let(:echostr) { "22222222222222222" } #{ "#{Time.now.to_i}" }
10
+
11
+ let(:text_message_xml) {
12
+ %(
13
+ <xml>
14
+ <ToUserName><![CDATA[toUser]]></ToUserName>
15
+ <FromUserName><![CDATA[fromUser]]></FromUserName>
16
+ <CreateTime>1348831860</CreateTime>
17
+ <MsgType><![CDATA[text]]></MsgType>
18
+ <Content><![CDATA[this is a test]]></Content>
19
+ <MsgId>1234567890123456</MsgId>
20
+ </xml>
21
+ )
22
+ }
23
+
24
+ let(:validated_request_params) { {signature: signature, timestamp: timestamp, nonce: nonce, echostr: echostr} }
25
+
26
+ context "get '/'" do
27
+ it "should return when all are well" do
28
+ get '/', validated_request_params
29
+ last_response.body.should eq(echostr)
30
+ end
31
+
32
+ it "should return with unauthorized 401" do
33
+ get '/', signature: incorrent_signature, timestamp: timestamp, nonce: nonce, echostr: echostr
34
+ last_response.status.should eq(401)
35
+ end
36
+ end
37
+
38
+ context "#post '/'" do
39
+ let(:post_uri) {
40
+ uri = URI("/")
41
+ uri.query = validated_request_params.to_param
42
+ # could not use instance of URI
43
+ uri.to_s
44
+ }
45
+
46
+ it "should return empty string when post invalide data" do
47
+ post post_uri, "invalide data"
48
+ last_response.status.should eq(400)
49
+ end
50
+
51
+ it "should return status 200 when post corrent data" do
52
+ post post_uri, text_message_xml
53
+ last_response.status.should eq(200)
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,51 @@
1
+ # This file was generated by the `rspec --init` command. Conventionally, all
2
+ # specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
3
+ # Require this file using `require "spec_helper"` to ensure that it is only
4
+ # loaded once.
5
+ #
6
+ # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
7
+
8
+ # require 'bundler'
9
+ # if defined?(Bundler)
10
+ # Bundler.setup
11
+ # end
12
+
13
+ #load the files
14
+ $:.push File.expand_path("../lib", __FILE__)
15
+
16
+ require 'mp_weixin'
17
+
18
+ require 'webmock/rspec'
19
+
20
+
21
+ require 'simplecov'
22
+ require 'coveralls'
23
+ require 'debugger'
24
+
25
+ SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
26
+ SimpleCov::Formatter::HTMLFormatter,
27
+ Coveralls::SimpleCov::Formatter
28
+ ]
29
+
30
+ SimpleCov.start
31
+
32
+ # Requires supporting ruby files with custom matchers and macros, etc,
33
+ # in spec/support/ and its subdirectories.
34
+ Dir['./spec/support/**/*.rb'].each {|f| require f}
35
+
36
+ RSpec.configure do |config|
37
+ config.treat_symbols_as_metadata_keys_with_true_values = true
38
+ config.run_all_when_everything_filtered = true
39
+ config.filter_run :focus
40
+
41
+ config.include RSpecMixin
42
+
43
+ # include MpWeixin
44
+ # Run specs in random order to surface order dependencies. If you find an
45
+ # order dependency and want to debug it, you can fix the order by providing
46
+ # the seed, which is printed after each run.
47
+ # --seed 1234
48
+ config.order = 'random'
49
+ end
50
+
51
+ Faraday.default_adapter = :test
@@ -0,0 +1,7 @@
1
+ # encoding: utf-8
2
+ #bellow code to initialize the mp_weixin
3
+ MpWeixinConfig = YAML.load_file("./spec/support/weixin.yml")["test"].symbolize_keys
4
+ MpWeixin::Config.app_id = MpWeixinConfig[:app_id]
5
+ MpWeixin::Config.app_secret = MpWeixinConfig[:app_secret]
6
+ MpWeixin::Config.url = MpWeixinConfig[:url]
7
+ MpWeixin::Config.token = MpWeixinConfig[:token]
@@ -0,0 +1,8 @@
1
+ require 'rack/test'
2
+ module RSpecMixin
3
+ include Rack::Test::Methods
4
+
5
+ def app
6
+ MpWeixin::Server
7
+ end
8
+ end
@@ -0,0 +1,12 @@
1
+ defaults: &defaults
2
+ app_id: "12341432134"
3
+ app_secret: "app_secret"
4
+ url: "http://www.example.com"
5
+ token: "secret"
6
+
7
+ development:
8
+ <<: *defaults
9
+ production:
10
+ <<: *defaults
11
+ test:
12
+ <<: *defaults
metadata ADDED
@@ -0,0 +1,363 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: mp_weixin
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - jhjguxin
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-01-08 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: oauth2
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ! '>='
18
+ - !ruby/object:Gem::Version
19
+ version: '0.5'
20
+ - - <=
21
+ - !ruby/object:Gem::Version
22
+ version: '0.9'
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0.5'
30
+ - - <=
31
+ - !ruby/object:Gem::Version
32
+ version: '0.9'
33
+ - !ruby/object:Gem::Dependency
34
+ name: sinatra
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ~>
38
+ - !ruby/object:Gem::Version
39
+ version: 1.4.4
40
+ type: :runtime
41
+ prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ~>
45
+ - !ruby/object:Gem::Version
46
+ version: 1.4.4
47
+ - !ruby/object:Gem::Dependency
48
+ name: activemodel
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '3.0'
54
+ - - <=
55
+ - !ruby/object:Gem::Version
56
+ version: '4'
57
+ type: :runtime
58
+ prerelease: false
59
+ version_requirements: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - ! '>='
62
+ - !ruby/object:Gem::Version
63
+ version: '3.0'
64
+ - - <=
65
+ - !ruby/object:Gem::Version
66
+ version: '4'
67
+ - !ruby/object:Gem::Dependency
68
+ name: multi_json
69
+ requirement: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - ! '>='
72
+ - !ruby/object:Gem::Version
73
+ version: 1.7.9
74
+ type: :runtime
75
+ prerelease: false
76
+ version_requirements: !ruby/object:Gem::Requirement
77
+ requirements:
78
+ - - ! '>='
79
+ - !ruby/object:Gem::Version
80
+ version: 1.7.9
81
+ - !ruby/object:Gem::Dependency
82
+ name: multi_xml
83
+ requirement: !ruby/object:Gem::Requirement
84
+ requirements:
85
+ - - ! '>='
86
+ - !ruby/object:Gem::Version
87
+ version: 0.5.2
88
+ type: :runtime
89
+ prerelease: false
90
+ version_requirements: !ruby/object:Gem::Requirement
91
+ requirements:
92
+ - - ! '>='
93
+ - !ruby/object:Gem::Version
94
+ version: 0.5.2
95
+ - !ruby/object:Gem::Dependency
96
+ name: roxml
97
+ requirement: !ruby/object:Gem::Requirement
98
+ requirements:
99
+ - - ! '>='
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
102
+ type: :runtime
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ requirements:
106
+ - - ! '>='
107
+ - !ruby/object:Gem::Version
108
+ version: '0'
109
+ - !ruby/object:Gem::Dependency
110
+ name: nestful
111
+ requirement: !ruby/object:Gem::Requirement
112
+ requirements:
113
+ - - ! '>='
114
+ - !ruby/object:Gem::Version
115
+ version: '0'
116
+ type: :runtime
117
+ prerelease: false
118
+ version_requirements: !ruby/object:Gem::Requirement
119
+ requirements:
120
+ - - ! '>='
121
+ - !ruby/object:Gem::Version
122
+ version: '0'
123
+ - !ruby/object:Gem::Dependency
124
+ name: thin
125
+ requirement: !ruby/object:Gem::Requirement
126
+ requirements:
127
+ - - ! '>='
128
+ - !ruby/object:Gem::Version
129
+ version: '0'
130
+ type: :development
131
+ prerelease: false
132
+ version_requirements: !ruby/object:Gem::Requirement
133
+ requirements:
134
+ - - ! '>='
135
+ - !ruby/object:Gem::Version
136
+ version: '0'
137
+ - !ruby/object:Gem::Dependency
138
+ name: debugger
139
+ requirement: !ruby/object:Gem::Requirement
140
+ requirements:
141
+ - - ! '>='
142
+ - !ruby/object:Gem::Version
143
+ version: '0'
144
+ type: :development
145
+ prerelease: false
146
+ version_requirements: !ruby/object:Gem::Requirement
147
+ requirements:
148
+ - - ! '>='
149
+ - !ruby/object:Gem::Version
150
+ version: '0'
151
+ - !ruby/object:Gem::Dependency
152
+ name: bundler
153
+ requirement: !ruby/object:Gem::Requirement
154
+ requirements:
155
+ - - ! '>='
156
+ - !ruby/object:Gem::Version
157
+ version: '0'
158
+ type: :development
159
+ prerelease: false
160
+ version_requirements: !ruby/object:Gem::Requirement
161
+ requirements:
162
+ - - ! '>='
163
+ - !ruby/object:Gem::Version
164
+ version: '0'
165
+ - !ruby/object:Gem::Dependency
166
+ name: rake
167
+ requirement: !ruby/object:Gem::Requirement
168
+ requirements:
169
+ - - ! '>='
170
+ - !ruby/object:Gem::Version
171
+ version: '0'
172
+ type: :development
173
+ prerelease: false
174
+ version_requirements: !ruby/object:Gem::Requirement
175
+ requirements:
176
+ - - ! '>='
177
+ - !ruby/object:Gem::Version
178
+ version: '0'
179
+ - !ruby/object:Gem::Dependency
180
+ name: rspec
181
+ requirement: !ruby/object:Gem::Requirement
182
+ requirements:
183
+ - - ! '>='
184
+ - !ruby/object:Gem::Version
185
+ version: '0'
186
+ type: :development
187
+ prerelease: false
188
+ version_requirements: !ruby/object:Gem::Requirement
189
+ requirements:
190
+ - - ! '>='
191
+ - !ruby/object:Gem::Version
192
+ version: '0'
193
+ - !ruby/object:Gem::Dependency
194
+ name: rack-test
195
+ requirement: !ruby/object:Gem::Requirement
196
+ requirements:
197
+ - - ! '>='
198
+ - !ruby/object:Gem::Version
199
+ version: '0'
200
+ type: :development
201
+ prerelease: false
202
+ version_requirements: !ruby/object:Gem::Requirement
203
+ requirements:
204
+ - - ! '>='
205
+ - !ruby/object:Gem::Version
206
+ version: '0'
207
+ - !ruby/object:Gem::Dependency
208
+ name: simplecov
209
+ requirement: !ruby/object:Gem::Requirement
210
+ requirements:
211
+ - - ! '>='
212
+ - !ruby/object:Gem::Version
213
+ version: '0'
214
+ type: :development
215
+ prerelease: false
216
+ version_requirements: !ruby/object:Gem::Requirement
217
+ requirements:
218
+ - - ! '>='
219
+ - !ruby/object:Gem::Version
220
+ version: '0'
221
+ - !ruby/object:Gem::Dependency
222
+ name: webmock
223
+ requirement: !ruby/object:Gem::Requirement
224
+ requirements:
225
+ - - ! '>='
226
+ - !ruby/object:Gem::Version
227
+ version: '0'
228
+ type: :development
229
+ prerelease: false
230
+ version_requirements: !ruby/object:Gem::Requirement
231
+ requirements:
232
+ - - ! '>='
233
+ - !ruby/object:Gem::Version
234
+ version: '0'
235
+ - !ruby/object:Gem::Dependency
236
+ name: coveralls
237
+ requirement: !ruby/object:Gem::Requirement
238
+ requirements:
239
+ - - ! '>='
240
+ - !ruby/object:Gem::Version
241
+ version: '0'
242
+ type: :development
243
+ prerelease: false
244
+ version_requirements: !ruby/object:Gem::Requirement
245
+ requirements:
246
+ - - ! '>='
247
+ - !ruby/object:Gem::Version
248
+ version: '0'
249
+ - !ruby/object:Gem::Dependency
250
+ name: travis-lint
251
+ requirement: !ruby/object:Gem::Requirement
252
+ requirements:
253
+ - - ! '>='
254
+ - !ruby/object:Gem::Version
255
+ version: '0'
256
+ type: :development
257
+ prerelease: false
258
+ version_requirements: !ruby/object:Gem::Requirement
259
+ requirements:
260
+ - - ! '>='
261
+ - !ruby/object:Gem::Version
262
+ version: '0'
263
+ description: A wrapper for weiXin MP platform
264
+ email:
265
+ - 864248765@qq.com
266
+ executables: []
267
+ extensions: []
268
+ extra_rdoc_files: []
269
+ files:
270
+ - .gitignore
271
+ - .rspec
272
+ - .travis.yml
273
+ - CHANGELOG.md
274
+ - Gemfile
275
+ - LICENSE.txt
276
+ - README.md
277
+ - Rakefile
278
+ - lib/config/mp_weixin_error.yml
279
+ - lib/mp_weixin.rb
280
+ - lib/mp_weixin/access_token.rb
281
+ - lib/mp_weixin/client.rb
282
+ - lib/mp_weixin/config.rb
283
+ - lib/mp_weixin/error.rb
284
+ - lib/mp_weixin/interface/base.rb
285
+ - lib/mp_weixin/interface/group.rb
286
+ - lib/mp_weixin/interface/menu.rb
287
+ - lib/mp_weixin/interface/message.rb
288
+ - lib/mp_weixin/interface/promotion.rb
289
+ - lib/mp_weixin/interface/user.rb
290
+ - lib/mp_weixin/models/event.rb
291
+ - lib/mp_weixin/models/message.rb
292
+ - lib/mp_weixin/models/reply_message.rb
293
+ - lib/mp_weixin/response.rb
294
+ - lib/mp_weixin/response_rule.rb
295
+ - lib/mp_weixin/server.rb
296
+ - lib/mp_weixin/server_helper.rb
297
+ - lib/mp_weixin/version.rb
298
+ - lib/support/active_model.rb
299
+ - lib/support/active_model/model.rb
300
+ - mp_weixin.gemspec
301
+ - spec/client_spec.rb
302
+ - spec/mp_weixin/access_token_spec.rb
303
+ - spec/mp_weixin/client_spec.rb
304
+ - spec/mp_weixin/config_spec.rb
305
+ - spec/mp_weixin/interface/base_spec.rb
306
+ - spec/mp_weixin/interface/group_spec.rb
307
+ - spec/mp_weixin/interface/menu_spec.rb
308
+ - spec/mp_weixin/interface/message_spec.rb
309
+ - spec/mp_weixin/interface/promotion_spec.rb
310
+ - spec/mp_weixin/interface/user_spec.rb
311
+ - spec/mp_weixin/models/event_spec.rb
312
+ - spec/mp_weixin/models/message_spec.rb
313
+ - spec/mp_weixin/models/reply_message_spec.rb
314
+ - spec/mp_weixin/server_helper_spec.rb
315
+ - spec/mp_weixin/server_spec.rb
316
+ - spec/spec_helper.rb
317
+ - spec/support/mp_weixin.rb
318
+ - spec/support/rspec_mixin.rb
319
+ - spec/support/weixin.yml
320
+ homepage: https://github.com/jhjguxin/mp_weixin
321
+ licenses:
322
+ - MIT
323
+ metadata: {}
324
+ post_install_message:
325
+ rdoc_options: []
326
+ require_paths:
327
+ - lib
328
+ required_ruby_version: !ruby/object:Gem::Requirement
329
+ requirements:
330
+ - - ! '>='
331
+ - !ruby/object:Gem::Version
332
+ version: '0'
333
+ required_rubygems_version: !ruby/object:Gem::Requirement
334
+ requirements:
335
+ - - ! '>='
336
+ - !ruby/object:Gem::Version
337
+ version: '0'
338
+ requirements: []
339
+ rubyforge_project:
340
+ rubygems_version: 2.1.11
341
+ signing_key:
342
+ specification_version: 4
343
+ summary: A Ruby wrapper for weixin MP platform
344
+ test_files:
345
+ - spec/client_spec.rb
346
+ - spec/mp_weixin/access_token_spec.rb
347
+ - spec/mp_weixin/client_spec.rb
348
+ - spec/mp_weixin/config_spec.rb
349
+ - spec/mp_weixin/interface/base_spec.rb
350
+ - spec/mp_weixin/interface/group_spec.rb
351
+ - spec/mp_weixin/interface/menu_spec.rb
352
+ - spec/mp_weixin/interface/message_spec.rb
353
+ - spec/mp_weixin/interface/promotion_spec.rb
354
+ - spec/mp_weixin/interface/user_spec.rb
355
+ - spec/mp_weixin/models/event_spec.rb
356
+ - spec/mp_weixin/models/message_spec.rb
357
+ - spec/mp_weixin/models/reply_message_spec.rb
358
+ - spec/mp_weixin/server_helper_spec.rb
359
+ - spec/mp_weixin/server_spec.rb
360
+ - spec/spec_helper.rb
361
+ - spec/support/mp_weixin.rb
362
+ - spec/support/rspec_mixin.rb
363
+ - spec/support/weixin.yml