wework 0.3.4 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (69) hide show
  1. checksums.yaml +5 -5
  2. data/.gitignore +0 -1
  3. data/README.md +7 -0
  4. data/lib/wework.rb +15 -10
  5. data/lib/wework/api/agent.rb +15 -79
  6. data/lib/wework/api/base.rb +24 -32
  7. data/lib/wework/api/contact.rb +1 -75
  8. data/lib/wework/api/corp.rb +29 -0
  9. data/lib/wework/api/methods/agent.rb +49 -0
  10. data/lib/wework/api/methods/approval.rb +16 -0
  11. data/lib/wework/api/methods/batch.rb +34 -0
  12. data/lib/wework/api/methods/checkin.rb +19 -0
  13. data/lib/wework/api/methods/department.rb +27 -0
  14. data/lib/wework/api/methods/media.rb +20 -0
  15. data/lib/wework/api/methods/menu.rb +21 -0
  16. data/lib/wework/api/methods/message.rb +52 -0
  17. data/lib/wework/api/methods/provider.rb +16 -0
  18. data/lib/wework/api/methods/suite.rb +53 -0
  19. data/lib/wework/api/methods/user.rb +35 -0
  20. data/lib/wework/api/provider.rb +13 -0
  21. data/lib/wework/api/suite.rb +72 -0
  22. data/lib/wework/cipher.rb +3 -0
  23. data/lib/wework/mock_api.rb +34 -0
  24. data/lib/wework/request.rb +3 -1
  25. data/lib/wework/token/app_token.rb +21 -0
  26. data/lib/wework/token/base.rb +59 -0
  27. data/lib/wework/token/corp_token.rb +20 -0
  28. data/lib/wework/token/js_ticket.rb +25 -0
  29. data/lib/wework/token/provider_token.rb +21 -0
  30. data/lib/wework/token/suite_token.rb +21 -0
  31. data/lib/wework/version.rb +1 -1
  32. data/mock_responses/agent/get.json +29 -0
  33. data/mock_responses/agent/list.json +16 -0
  34. data/mock_responses/agent/set.json +4 -0
  35. data/mock_responses/batch/getresult.json +8 -0
  36. data/mock_responses/department/list.json +24 -0
  37. data/mock_responses/error.json +4 -0
  38. data/mock_responses/files/party.csv +12 -0
  39. data/mock_responses/files/sample.amr +0 -0
  40. data/mock_responses/files/sample.mp4 +0 -0
  41. data/mock_responses/files/sample.txt +1 -0
  42. data/mock_responses/files/user.csv +2 -0
  43. data/mock_responses/files/zhiren.png +0 -0
  44. data/mock_responses/get_jsapi_ticket.json +6 -0
  45. data/mock_responses/gettoken.json +6 -0
  46. data/mock_responses/menu/get.json +24 -0
  47. data/mock_responses/service/get.json +0 -0
  48. data/mock_responses/service/get_corp_token.json +4 -0
  49. data/mock_responses/service/get_login_info.json +34 -0
  50. data/mock_responses/service/get_permanent_code.json +54 -0
  51. data/mock_responses/service/get_pre_auth_code.json +6 -0
  52. data/mock_responses/service/get_provider_token.json +4 -0
  53. data/mock_responses/service/get_suite_token.json +4 -0
  54. data/mock_responses/success.json +4 -0
  55. data/mock_responses/user/convert_to_openid.json +6 -0
  56. data/mock_responses/user/convert_to_userid.json +5 -0
  57. data/mock_responses/user/get.json +18 -0
  58. data/mock_responses/user/getuserdetail.json +10 -0
  59. data/mock_responses/user/getuserinfo.json +8 -0
  60. data/mock_responses/user/list.json +22 -0
  61. data/mock_responses/user/simplelist.json +11 -0
  62. data/wework.gemspec +6 -2
  63. metadata +114 -19
  64. data/lib/wework/engine.rb +0 -31
  65. data/lib/wework/js_ticket/redis_store.rb +0 -41
  66. data/lib/wework/js_ticket/store.rb +0 -36
  67. data/lib/wework/provider.rb +0 -39
  68. data/lib/wework/token/redis_store.rb +0 -41
  69. data/lib/wework/token/store.rb +0 -36
@@ -0,0 +1,6 @@
1
+ {
2
+ "errcode":0 ,
3
+ "errmsg":"ok" ,
4
+ "pre_auth_code":"xxxx",
5
+ "expires_in":1200
6
+ }
@@ -0,0 +1,4 @@
1
+ {
2
+ "provider_access_token":"enLSZ5xxxxxxJRL",
3
+ "expires_in":7200
4
+ }
@@ -0,0 +1,4 @@
1
+ {
2
+ "suite_access_token":"61W3mEpU66027wgNZ_MhGHNQDHnFATkDa9-2llqrMBjUwxRSNPbVsMmyD-yq8wZETSoE5NQgecigDrSHkPtIYA",
3
+ "expires_in":7200
4
+ }
@@ -0,0 +1,4 @@
1
+ {
2
+ "errcode": 0,
3
+ "errmsg": "ok"
4
+ }
@@ -0,0 +1,6 @@
1
+ {
2
+ "errcode": 0,
3
+ "errmsg": "ok",
4
+ "openid": "oDOGms-6yCnGrRovBj2yHij5JL6E",
5
+ "appid":"wxf874e15f78cc84a7"
6
+ }
@@ -0,0 +1,5 @@
1
+ {
2
+ "errcode": 0,
3
+ "errmsg": "ok",
4
+ "userid": "zhangsan"
5
+ }
@@ -0,0 +1,18 @@
1
+ {
2
+ "errcode": 0,
3
+ "errmsg": "ok",
4
+ "userid": "zhangsan",
5
+ "name": "李四",
6
+ "department": [1, 2],
7
+ "order": [1, 2],
8
+ "position": "后台工程师",
9
+ "mobile": "15913215421",
10
+ "gender": "1",
11
+ "email": "zhangsan@gzdev.com",
12
+ "isleader": 1,
13
+ "avatar": "http://wx.qlogo.cn/mmopen/ajNVdqHZLLA3WJ6DSZUfiakYe37PKnQhBIeOQBO4czqrnZDS79FH5Wm5m4X69TBicnHFlhiafvDwklOpZeXYQQ2icg/0",
14
+ "telephone": "020-123456",
15
+ "english_name": "jackzhang",
16
+ "extattr": {"attrs":[{"name":"爱好","value":"旅游"},{"name":"卡号","value":"1234567234"}]},
17
+ "status": 1
18
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "userid":"lisi",
3
+ "name":"李四",
4
+ "department":[3],
5
+ "position": "后台工程师",
6
+ "mobile":"15050495892",
7
+ "gender":1,
8
+ "email":"xxx@xx.com",
9
+ "avatar":"http://shp.qpic.cn/bizmp/xxxxxxxxxxx/0"
10
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "errcode": 0,
3
+ "errmsg": "ok",
4
+ "UserId":"USERID",
5
+ "DeviceId":"DEVICEID",
6
+ "user_ticket": "USER_TICKET",
7
+ "expires_in":7200
8
+ }
@@ -0,0 +1,22 @@
1
+ {
2
+ "errcode": 0,
3
+ "errmsg": "ok",
4
+ "userlist": [
5
+ {
6
+ "userid": "zhangsan",
7
+ "name": "李四",
8
+ "department": [1, 2],
9
+ "order": [1, 2],
10
+ "position": "后台工程师",
11
+ "mobile": "15913215421",
12
+ "gender": "1",
13
+ "email": "zhangsan@gzdev.com",
14
+ "isleader": 0,
15
+ "avatar": "http://wx.qlogo.cn/mmopen/ajNVdqHZLLA3WJ6DSZUfiakYe37PKnQhBIeOQBO4czqrnZDS79FH5Wm5m4X69TBicnHFlhiafvDwklOpZeXYQQ2icg/0",
16
+ "telephone": "020-123456",
17
+ "english_name": "jackzhang",
18
+ "status": 1,
19
+ "extattr": {"attrs":[{"name":"爱好","value":"旅游"},{"name":"卡号","value":"1234567234"}]}
20
+ }
21
+ ]
22
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "errcode": 0,
3
+ "errmsg": "ok",
4
+ "userlist": [
5
+ {
6
+ "userid": "zhangsan",
7
+ "name": "李四",
8
+ "department": [1, 2]
9
+ }
10
+ ]
11
+ }
data/wework.gemspec CHANGED
@@ -20,11 +20,15 @@ Gem::Specification.new do |spec|
20
20
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
21
21
  spec.require_paths = ["lib"]
22
22
 
23
- spec.add_dependency 'http', '>= 1.0.4', '< 3'
23
+ spec.add_dependency 'http', '>= 2.2'
24
24
  spec.add_dependency 'activesupport', '~> 5.0'
25
- spec.add_dependency 'redis', '~>3.2'
25
+ spec.add_dependency 'redis', '~>3.3'
26
+ spec.add_dependency 'builder', '~> 3.2.2'
27
+ spec.add_dependency 'sinatra', '~>2.0.0'
26
28
 
27
29
  spec.add_development_dependency "bundler", "~> 1.13"
28
30
  spec.add_development_dependency "rake", "~> 10.0"
29
31
  spec.add_development_dependency "minitest", "~> 5.10"
32
+ spec.add_development_dependency 'webmock', '~> 3.4.1'
33
+ spec.add_development_dependency 'mock_redis', '~>0.18.0'
30
34
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wework
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.4
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - seandong
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-06-24 00:00:00.000000000 Z
11
+ date: 2018-07-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: http
@@ -16,20 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 1.0.4
20
- - - "<"
21
- - !ruby/object:Gem::Version
22
- version: '3'
19
+ version: '2.2'
23
20
  type: :runtime
24
21
  prerelease: false
25
22
  version_requirements: !ruby/object:Gem::Requirement
26
23
  requirements:
27
24
  - - ">="
28
25
  - !ruby/object:Gem::Version
29
- version: 1.0.4
30
- - - "<"
31
- - !ruby/object:Gem::Version
32
- version: '3'
26
+ version: '2.2'
33
27
  - !ruby/object:Gem::Dependency
34
28
  name: activesupport
35
29
  requirement: !ruby/object:Gem::Requirement
@@ -50,14 +44,42 @@ dependencies:
50
44
  requirements:
51
45
  - - "~>"
52
46
  - !ruby/object:Gem::Version
53
- version: '3.2'
47
+ version: '3.3'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '3.3'
55
+ - !ruby/object:Gem::Dependency
56
+ name: builder
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: 3.2.2
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: 3.2.2
69
+ - !ruby/object:Gem::Dependency
70
+ name: sinatra
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: 2.0.0
54
76
  type: :runtime
55
77
  prerelease: false
56
78
  version_requirements: !ruby/object:Gem::Requirement
57
79
  requirements:
58
80
  - - "~>"
59
81
  - !ruby/object:Gem::Version
60
- version: '3.2'
82
+ version: 2.0.0
61
83
  - !ruby/object:Gem::Dependency
62
84
  name: bundler
63
85
  requirement: !ruby/object:Gem::Requirement
@@ -100,6 +122,34 @@ dependencies:
100
122
  - - "~>"
101
123
  - !ruby/object:Gem::Version
102
124
  version: '5.10'
125
+ - !ruby/object:Gem::Dependency
126
+ name: webmock
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: 3.4.1
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: 3.4.1
139
+ - !ruby/object:Gem::Dependency
140
+ name: mock_redis
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - "~>"
144
+ - !ruby/object:Gem::Version
145
+ version: 0.18.0
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - "~>"
151
+ - !ruby/object:Gem::Version
152
+ version: 0.18.0
103
153
  description: Ruby API wrapper for work wechat.
104
154
  email:
105
155
  - sindon@gmail.com
@@ -120,17 +170,62 @@ files:
120
170
  - lib/wework/api/agent.rb
121
171
  - lib/wework/api/base.rb
122
172
  - lib/wework/api/contact.rb
173
+ - lib/wework/api/corp.rb
174
+ - lib/wework/api/methods/agent.rb
175
+ - lib/wework/api/methods/approval.rb
176
+ - lib/wework/api/methods/batch.rb
177
+ - lib/wework/api/methods/checkin.rb
178
+ - lib/wework/api/methods/department.rb
179
+ - lib/wework/api/methods/media.rb
180
+ - lib/wework/api/methods/menu.rb
181
+ - lib/wework/api/methods/message.rb
182
+ - lib/wework/api/methods/provider.rb
183
+ - lib/wework/api/methods/suite.rb
184
+ - lib/wework/api/methods/user.rb
185
+ - lib/wework/api/provider.rb
186
+ - lib/wework/api/suite.rb
123
187
  - lib/wework/cipher.rb
124
188
  - lib/wework/config.rb
125
- - lib/wework/engine.rb
126
189
  - lib/wework/global_code.rb
127
- - lib/wework/js_ticket/redis_store.rb
128
- - lib/wework/js_ticket/store.rb
129
- - lib/wework/provider.rb
190
+ - lib/wework/mock_api.rb
130
191
  - lib/wework/request.rb
131
- - lib/wework/token/redis_store.rb
132
- - lib/wework/token/store.rb
192
+ - lib/wework/token/app_token.rb
193
+ - lib/wework/token/base.rb
194
+ - lib/wework/token/corp_token.rb
195
+ - lib/wework/token/js_ticket.rb
196
+ - lib/wework/token/provider_token.rb
197
+ - lib/wework/token/suite_token.rb
133
198
  - lib/wework/version.rb
199
+ - mock_responses/agent/get.json
200
+ - mock_responses/agent/list.json
201
+ - mock_responses/agent/set.json
202
+ - mock_responses/batch/getresult.json
203
+ - mock_responses/department/list.json
204
+ - mock_responses/error.json
205
+ - mock_responses/files/party.csv
206
+ - mock_responses/files/sample.amr
207
+ - mock_responses/files/sample.mp4
208
+ - mock_responses/files/sample.txt
209
+ - mock_responses/files/user.csv
210
+ - mock_responses/files/zhiren.png
211
+ - mock_responses/get_jsapi_ticket.json
212
+ - mock_responses/gettoken.json
213
+ - mock_responses/menu/get.json
214
+ - mock_responses/service/get.json
215
+ - mock_responses/service/get_corp_token.json
216
+ - mock_responses/service/get_login_info.json
217
+ - mock_responses/service/get_permanent_code.json
218
+ - mock_responses/service/get_pre_auth_code.json
219
+ - mock_responses/service/get_provider_token.json
220
+ - mock_responses/service/get_suite_token.json
221
+ - mock_responses/success.json
222
+ - mock_responses/user/convert_to_openid.json
223
+ - mock_responses/user/convert_to_userid.json
224
+ - mock_responses/user/get.json
225
+ - mock_responses/user/getuserdetail.json
226
+ - mock_responses/user/getuserinfo.json
227
+ - mock_responses/user/list.json
228
+ - mock_responses/user/simplelist.json
134
229
  - wework.gemspec
135
230
  homepage: https://github.com/mycolorway/wework
136
231
  licenses:
@@ -152,7 +247,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
152
247
  version: '0'
153
248
  requirements: []
154
249
  rubyforge_project:
155
- rubygems_version: 2.4.5.1
250
+ rubygems_version: 2.7.6
156
251
  signing_key:
157
252
  specification_version: 4
158
253
  summary: Ruby API wrapper for work wechat.
data/lib/wework/engine.rb DELETED
@@ -1,31 +0,0 @@
1
- module Wework
2
- class Engine
3
-
4
- attr_reader :corp_id, :corp_secret, :app_id, :app_secret
5
-
6
- def initialize(options={})
7
- @corp_id = options[:corp_id]
8
- @corp_secret = options[:corp_secret]
9
- @app_id = options[:app_id]
10
- @app_secret = options[:app_secret]
11
- end
12
-
13
- def contact
14
- @contact ||= Wework::Api::Contact.new(corp_id, corp_secret) if contact?
15
- end
16
-
17
- def agent
18
- @agent ||= Wework::Api::Agent.new(corp_id, app_id, app_secret) if agent?
19
- end
20
-
21
- private
22
-
23
- def agent?
24
- corp_id.present? && app_id.present? && app_secret.present?
25
- end
26
-
27
- def contact?
28
- corp_id.present? && corp_secret.present?
29
- end
30
- end
31
- end
@@ -1,41 +0,0 @@
1
- module Wework
2
- module JsTicket
3
- class RedisStore < Store
4
-
5
- def initialize(agent)
6
- raise RedisNotConfigException if redis.nil?
7
- super
8
- end
9
-
10
- def jsapi_ticket
11
- super
12
- redis.hget(key, "ticket")
13
- end
14
-
15
- def expired?
16
- redis.hvals(key).empty? || redis.hget(key, "expires_at").to_i <= Time.now.to_i
17
- end
18
-
19
- def refresh_token
20
- result = super
21
- unless result.ticket.nil?
22
- expires_at = Time.now.to_i + result.expires_in.to_i - Wework.expired_shift_seconds
23
- redis.hmset(
24
- key,
25
- "ticket", result.ticket,
26
- "expires_at", expires_at
27
- )
28
-
29
- redis.expireat(key, expires_at)
30
- end
31
- end
32
-
33
- private
34
-
35
- def redis
36
- Wework.redis
37
- end
38
-
39
- end
40
- end
41
- end
@@ -1,36 +0,0 @@
1
- module Wework
2
- module JsTicket
3
- class Store
4
-
5
- attr_accessor :app
6
-
7
- def initialize(app)
8
- @app = app
9
- end
10
-
11
- def jsapi_ticket
12
- refresh_token if expired?
13
- end
14
-
15
- def expired?
16
- raise NotImplementedError, "Subclasses must implement a token_expired? method"
17
- end
18
-
19
- def refresh_token
20
- result = app.get 'get_jsapi_ticket'
21
- if defined?(Rails)
22
- Rails.logger.warn "[WEWORK] refresh JsTicket(#{app.corp_id}): #{result.inspect}"
23
- end
24
-
25
- result
26
- end
27
-
28
- private
29
-
30
- def key
31
- @key ||= Digest::MD5.hexdigest("#{JSAPI_TOKEN_PREFIX}_#{app.app_id}_#{app.app_secret}")
32
- end
33
-
34
- end
35
- end
36
- end