mp_weixin 0.1.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.
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