youtu 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 2cc8f4fbfb8390aa80d127e5dbfe54a27c22a35e
4
+ data.tar.gz: 77aeca66b2dba3e44c65b8bc1d32fb6536c998a9
5
+ SHA512:
6
+ metadata.gz: 43e5f638367307602c1e3279f300ae69972d3182953f8bd37a2a6ac545c8a8b9d773532d41f2d0502309a801b6811d429419c8d92c89cf4db5b5b84c9d9520ed
7
+ data.tar.gz: 9869f23291510ab045aad46083335e7700ac76e00cbf07c3e63809b49e8ead97540dc065704b6b6ee130cac51527decfd80179b389c8ca4f8d00e5a6909590ac
data/.byebug_history ADDED
@@ -0,0 +1,256 @@
1
+ exit
2
+ ap JSON.parse(response.body)
3
+ JSON.parse(response.body)["gender"]
4
+ JSON.parse(response.body)
5
+ response.body
6
+ response.methods
7
+ response
8
+ result
9
+ continue
10
+ result
11
+ request
12
+ exit
13
+ response
14
+ continue
15
+ _original
16
+ exit
17
+ _original
18
+ _time_stamp
19
+ _r
20
+ _time_stamp
21
+ _r
22
+ exit
23
+ response
24
+ exit
25
+ request.args
26
+ request
27
+ result
28
+ request.read
29
+ request
30
+ exit
31
+ request.payload.read
32
+ request.payload
33
+ exit
34
+ request.payload.read
35
+ request.payload
36
+ request
37
+ exit
38
+ request.args
39
+ request
40
+ config
41
+ exit
42
+ request.payload.length
43
+ request.payload.read
44
+ request.payload
45
+ request
46
+ continue
47
+ reqeust
48
+ request
49
+ reqeust
50
+ pay
51
+ continue
52
+ request.payload.length
53
+ request.payload
54
+ request.payload.read
55
+ request.payload
56
+ request.headers
57
+ request
58
+ continue
59
+ config
60
+ exit
61
+ request.payload
62
+ request
63
+ reuqest
64
+ continue
65
+ config[:payload]
66
+ config
67
+ exit
68
+ request.payload.read
69
+ request.payload.stub
70
+ request.payload.inspect
71
+ request.payload.methods
72
+ request.payload.stream
73
+ request.payload.read
74
+ request.payload
75
+ request
76
+ continue
77
+ config[:payload].read
78
+ config[:payload]
79
+ config
80
+ payload
81
+ exit
82
+ payload.class
83
+ payload
84
+ config[:payload]
85
+ config
86
+ exit
87
+ request.payload.read
88
+ request.payload
89
+ request
90
+ continue
91
+ next
92
+ payload.headers
93
+ payload
94
+ payload.read
95
+ exit
96
+ request.payload.read
97
+ request.payload.stream
98
+ request.payload.stram
99
+ request.payload.methods
100
+ request.payload
101
+ request.methods
102
+ request
103
+ request.payload.headers
104
+ request.payload
105
+ exit
106
+ request.payload.read
107
+ request.payload.methods
108
+ request.payload.headers
109
+ request.payload.headers={"d":"dd"}
110
+ request.payload.headers
111
+ request.payload
112
+ request.headers
113
+ request.payload.headers
114
+ request.payload.size
115
+ request.payload.length
116
+ request.payload.methods
117
+ request.payload.read
118
+ request.payload
119
+ response
120
+ request.body
121
+ request.log_request
122
+ request.headers
123
+ request.header
124
+ request
125
+ exit
126
+ request.payload
127
+ request
128
+ request.payload
129
+ request.payload.read
130
+ request.payload
131
+ request
132
+ reuqest
133
+ result
134
+ request.headers[:Authorization]
135
+ request.headers
136
+ request
137
+ exit
138
+ response
139
+ exit
140
+ request.args
141
+ response
142
+ exit
143
+ request.args
144
+ request~args
145
+ request
146
+ exit
147
+ response
148
+ continue
149
+ request.args
150
+ request.methods
151
+ request
152
+ continue
153
+ _r.length
154
+ _r
155
+ _time_stamp
156
+ _timt_stamp
157
+ _expired
158
+ _secret_id
159
+ _app_id
160
+ _user_id
161
+ exit
162
+ _signature == "V1fNuvOMjHkX1Q4IudaPsd7Ks691PTEwMDAwJmE9MjAxMTU0MTIyNCZrPUFLSUQyWmtPWEZ5RFJIWlJsYlBvOTNTTXR6Vlk3OWtwQWRHUCZlPTE0MzI5NzAwNjUmdD0xNDI3Nzg2MDY1JnI9MjcwNDk0NjQ3JmY9"
163
+ "V1fNuvOMjHkX1Q4IudaPsd7Ks691PTEwMDAwJmE9MjAxMTU0MTIyNCZrPUFLSUQyWmtPWEZ5RFJIWlJsYlBvOTNTTXR6Vlk3OWtwQWRHUCZlPTE0MzI5NzAwNjUmdD0xNDI3Nzg2MDY1JnI9MjcwNDk0NjQ3JmY9"
164
+ V1fNuvOMjHkX1Q4IudaPsd7Ks691PTEwMDAwJmE9MjAxMTU0MTIyNCZrPUFLSUQyWmtPWEZ5RFJIWlJsYlBvOTNTTXR6Vlk3OWtwQWRHUCZlPTE0MzI5NzAwNjUmdD0xNDI3Nzg2MDY1JnI9MjcwNDk0NjQ3JmY9
165
+ _signature==V1fNuvOMjHkX1Q4IudaPsd7Ks691PTEwMDAwJmE9MjAxMTU0MTIyNCZrPUFLSUQyWmtPWEZ5RFJIWlJsYlBvOTNTTXR6Vlk3OWtwQWRHUCZlPTE0MzI5NzAwNjUmdD0xNDI3Nzg2MDY1JnI9MjcwNDk0NjQ3JmY9"
166
+ _signature
167
+ exit
168
+ _signature
169
+ continue
170
+ _signature
171
+ continue
172
+ exit
173
+ _signature
174
+ exit
175
+ _signature
176
+ exit
177
+ _secret_key
178
+ _signature
179
+ exit
180
+ _original.encoding
181
+ _original
182
+ Math.pow(2,32)
183
+ Math
184
+ Random
185
+ Math::Random
186
+ Math.methods
187
+ Math
188
+ Math.random
189
+ _secret_key
190
+ _secret_id
191
+ _secret
192
+ _original
193
+ continue
194
+ _hmac
195
+ _signature
196
+ Base64.encode64(_original)
197
+ Base64.encode64("_orii")
198
+ Base64.encode64("gggg")
199
+ Base64.encode64("d")
200
+ Base64.encode64("#{_hmac}+#{_original}")
201
+ next
202
+ _hmac
203
+ hmac
204
+ exit
205
+ String.concat ["dd","s"]
206
+ String
207
+ [Buffer"dd","ss"]
208
+ ["dd","ss"].concat
209
+ s.update "a"
210
+ digest
211
+ s.update "a"
212
+ s=Digest::SHA1.new
213
+ Digest::SHA1.new
214
+ _sha1.update(_original).deDigest::SHA1.new
215
+ _sha1.update(_original)
216
+ _sha1
217
+ _sha1.update(_original)
218
+ _sha1.update(_original).digest
219
+ _sha1.update(_original)
220
+ _sha1
221
+ _sha1 = OpenSSL::HMAC.new(_secret_key,OpenSSL::Digest.new('sha1'))
222
+ _original
223
+ continue
224
+ exit
225
+ _res
226
+ _res.class
227
+ _res.to_s
228
+ _res
229
+ res+_original
230
+ _original
231
+ _res
232
+ continue
233
+ _signature
234
+ next
235
+ _original
236
+ _hmac
237
+ next
238
+ _original
239
+ exit
240
+ result
241
+ exit
242
+ result
243
+ exit
244
+ response
245
+ request
246
+ exit
247
+ Youtu.config.host.match(/^(?:([A-Za-z]+):)?(\/{0,3})([0-9.\-A-Za-z]+)(?::(\d+))?(?:\/([^?#]*))?(?:\?([^#]*))?(?:#(.*))?$/)[3]
248
+ Youtu.config.host.match(/^(?:([A-Za-z]+):)?(\/{0,3})([0-9.\-A-Za-z]+)(?::(\d+))?(?:\/([^?#]*))?(?:\?([^#]*))?(?:#(.*))?$/)
249
+ Youtu.config.host.match("/^(?:([A-Za-z]+):)?(\/{0,3})([0-9.\-A-Za-z]+)(?::(\d+))?(?:\/([^?#]*))?(?:\?([^#]*))?(?:#(.*))?$/")
250
+ Youtu.config.host.match("/^(?:([A-Za-z]+):)?(\/{0,3})([0-9.\-A-Za-z]+)(?::(\d+))?(?:\/([^?#]*))?(?:\?([^#]*))?(?:#(.*))?$/;")
251
+ Youtu.config.host.match("([0-9.\-A-Za-z]+)")
252
+ Youtu.config.host.match(/([0-9.\-A-Za-z]+)/)
253
+ Youtu.config.host.match("http://|https//(.*)")
254
+ Youtu.config.host.match("http://|https//(.)")
255
+ Youtu.config.host.match("http://|https")
256
+ Youtu.config.host
data/.gitignore ADDED
@@ -0,0 +1,12 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+
11
+ # rspec failure tracking
12
+ .rspec_status
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --format documentation
2
+ --color
data/.travis.yml ADDED
@@ -0,0 +1,5 @@
1
+ sudo: false
2
+ language: ruby
3
+ rvm:
4
+ - 2.4.0
5
+ before_install: gem install bundler -v 1.14.6
data/Gemfile ADDED
@@ -0,0 +1,6 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gem "byebug"
4
+
5
+ # Specify your gem's dependencies in youtu.gemspec
6
+ gemspec
data/README.md ADDED
@@ -0,0 +1,55 @@
1
+ # Youtu
2
+
3
+ http://open.youtu.qq.com/
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ ```ruby
10
+ gem 'youtu'
11
+ ```
12
+
13
+ And then execute:
14
+
15
+ $ bundle
16
+
17
+ Or install it yourself as:
18
+
19
+ $ gem install youtu
20
+
21
+ Run the generator
22
+
23
+ rails g youtu:install
24
+
25
+ `rails g youtu:install` will generated the youtu.rb intialize file in config/initialze/youtu.rb
26
+
27
+
28
+ Signature's default store is File storage,but you can using Redis to store signature(optional)
29
+
30
+ rails g youtu:redis_store
31
+
32
+ `rails g youtu:install` will generated the youtu.rb intialize file in config/initialze/youtu_redis_store.rb
33
+
34
+
35
+ ## Usage
36
+
37
+ And then you can refer to the following example to use it.
38
+ ```ruby
39
+ image_url_params = {
40
+ url: "imagePath"
41
+ mode: 1
42
+ }
43
+
44
+ Youtu::Request.post("/youtu/api/detectface",image_url_params) do |response,request,result|
45
+ data = JSON.parse(response.body)
46
+ end
47
+ ```
48
+
49
+ For more infomation, please read [https://open.youtu.qq.com/welcome/developer#/api-summary](https://open.youtu.qq.com/welcome/developer#/api-summary)
50
+
51
+
52
+ ## Contributing
53
+
54
+ Bug reports and pull requests are welcome on GitHub at https://github.com/gaogao1030/youtu.
55
+
data/Rakefile ADDED
@@ -0,0 +1,6 @@
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task :default => :spec
data/bin/console ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "youtu"
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(__FILE__)
data/bin/setup ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
@@ -0,0 +1,13 @@
1
+ module Youtu
2
+ module Generators
3
+ class InstallGenerator < Rails::Generators::Base
4
+ desc "Install Youtu Configure file"
5
+ source_root File.expand_path('../templates',__FILE__)
6
+
7
+ def copy_config
8
+ template 'config/initializers/youtu.rb'
9
+ end
10
+ end
11
+
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ module Youtu
2
+ module Generators
3
+ class RedisStoreGenerator < Rails::Generators::Base
4
+ desc "Using redis as signature store"
5
+ source_root File.expand_path('../templates',__FILE__)
6
+
7
+ def copy_config
8
+ template 'config/initializers/youtu_redis_store.rb'
9
+ end
10
+ end
11
+
12
+ end
13
+ end
@@ -0,0 +1,10 @@
1
+ Youtu.configure do |config|
2
+ config.app_id = ENV["YOUTU_APPID"]
3
+ config.secret_id = ENV["YOUTU_SECRETID"]
4
+ config.secret_key = ENV["YOUTU_SECRETKEY"]
5
+ config.user_id = ENV["YOUTU_USERID"]
6
+ #config.host = "http://api.youtu.qq.com"
7
+ #config.expired = 30.days
8
+ #config.random_length = 10
9
+ #config.signature_file = "/tmp/youtu_signature"
10
+ end
@@ -0,0 +1,29 @@
1
+ module Youtu
2
+ class << self
3
+ def redis
4
+ @redis ||= Redis.new
5
+ end
6
+ end
7
+
8
+ module Sign
9
+ class << self
10
+
11
+ protected
12
+
13
+ def read_signature
14
+ JSON.parse(Youtu.redis.get(redis_key)) || {}
15
+ end
16
+
17
+ def write_signature(sign_hash)
18
+ Youtu.redis.set(redis_key,sign_hash.to_json)
19
+ end
20
+
21
+ private
22
+
23
+ def redis_key
24
+ "youtu_sign_#{Youtu.config.app_id}"
25
+ end
26
+ end
27
+ end
28
+
29
+ end
data/lib/youtu.rb ADDED
@@ -0,0 +1,10 @@
1
+ require 'JSON'
2
+ require 'openssl'
3
+ require 'base64'
4
+ require "youtu/version"
5
+ require "youtu/configuration"
6
+ require "youtu/sign"
7
+ require "youtu/request"
8
+
9
+ module Youtu
10
+ end
@@ -0,0 +1,31 @@
1
+ require 'active_support/configurable'
2
+ require 'active_support/core_ext/numeric/time'
3
+
4
+ module Youtu
5
+ class << self
6
+ def configure
7
+ yield @_config ||= Youtu::Configuration.new
8
+ end
9
+
10
+ def config
11
+ @_config
12
+ end
13
+ end
14
+
15
+ class Configuration
16
+ include ActiveSupport::Configurable
17
+ config_accessor :app_id,:secret_id,:secret_key,:user_id,:expired,:random_length,:host,:signature_file
18
+ end
19
+
20
+ configure do |config|
21
+ config.host = "http://api.youtu.qq.com"
22
+ config.app_id = ''
23
+ config.secret_id = ''
24
+ config.secret_key = ''
25
+ config.user_id = ''
26
+ config.expired = 30.days
27
+ config.random_length = 10
28
+ config.signature_file = "/tmp/youtu_signature"
29
+ end
30
+
31
+ end
@@ -0,0 +1,43 @@
1
+ require 'rest-client'
2
+
3
+ module Youtu
4
+ module Request
5
+ class << self
6
+ def post(url,payload={},headers={},&block)
7
+ config = RequestConfig.new({
8
+ url: url,
9
+ method: :post,
10
+ payload: payload,
11
+ headers: headers
12
+ }).config
13
+ RestClient::Request.execute(config,&block)
14
+ end
15
+ end
16
+
17
+ class RequestConfig
18
+ def initialize(opts={})
19
+ parse_url = /^(?:([A-Za-z]+):)?(\/{0,3})([0-9.\-A-Za-z]+)(?::(\d+))?(?:\/([^?#]*))?(?:\?([^#]*))?(?:#(.*))?$/
20
+ opts[:payload].merge!({"app_id": Youtu.config.app_id})
21
+ payload = RestClient::Payload.generate(opts[:payload].to_json)
22
+ @_config = {
23
+ url: Youtu.config.host + opts[:url],
24
+ method: opts[:method],
25
+ payload: payload.read,
26
+ headers: {
27
+ authorization: Youtu::Sign.signature,
28
+ content_type: "text/json",
29
+ content_length: payload.size,
30
+ user_agent: "ua",
31
+ Host: Youtu.config.host.match(parse_url)[3]
32
+ }
33
+ }
34
+ @_config.merge({headers: opts[:headers]})
35
+ end
36
+
37
+ def config
38
+ @_config
39
+ end
40
+ end
41
+
42
+ end
43
+ end
data/lib/youtu/sign.rb ADDED
@@ -0,0 +1,62 @@
1
+ module Youtu
2
+ module Sign
3
+ class << self
4
+ def refresh_sign
5
+ _current_time = Time.now
6
+ _app_id = Youtu.config.app_id
7
+ _secret_id = Youtu.config.secret_id
8
+ _secret_key = Youtu.config.secret_key
9
+ _user_id = Youtu.config.user_id
10
+ _time_stamp = _current_time.to_i
11
+ _expired_at = (_current_time + Youtu.config.expired).to_i
12
+ _r = random(Youtu.config.random_length)
13
+ _original = "u=#{_user_id}&a=#{_app_id}&k=#{_secret_id}&e=#{_expired_at}&t=#{_time_stamp}&r=#{_r}&f="
14
+ _hmac = OpenSSL::HMAC.digest(OpenSSL::Digest.new('sha1'),_secret_key,_original)
15
+ _signature = Base64.strict_encode64(_hmac+_original)
16
+ sign_hash = {
17
+ signature: _signature,
18
+ expired_at: _expired_at,
19
+ got_signature_at: _current_time
20
+ }
21
+ write_signature_to_store(sign_hash)
22
+ read_signature_from_store
23
+ end
24
+
25
+ def signature
26
+ sign_json = read_signature_from_store
27
+ _expired_at = sign_json["expired_at"].to_i
28
+ sign_json = refresh_sign if Time.now.to_i - _expired_at > 0
29
+ sign_json["signature"]
30
+ end
31
+
32
+ def random(length)
33
+ length ||= 9
34
+ seed = "0123456789"
35
+ length.times.inject(''){ |acc, t|
36
+ acc + seed[Random.rand(seed.length)]
37
+ }
38
+ end
39
+
40
+ protected
41
+
42
+ def read_signature_from_store
43
+ _signature = read_signature
44
+ rescue JSON::ParserError, Errno::ENOENT, KeyError, TypeError
45
+ refresh_sign
46
+ end
47
+
48
+ def write_signature_to_store(sign_hash)
49
+ write_signature(sign_hash)
50
+ end
51
+
52
+ def read_signature
53
+ JSON.parse(File.read(Youtu.config.signature_file))
54
+ end
55
+
56
+ def write_signature(sign_hash)
57
+ File.write(Youtu.config.signature_file,sign_hash.to_json)
58
+ end
59
+
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,3 @@
1
+ module Youtu
2
+ VERSION = "0.1.0"
3
+ end
data/youtu.gemspec ADDED
@@ -0,0 +1,40 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'youtu/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "youtu"
8
+ spec.version = Youtu::VERSION
9
+ spec.authors = ["ガオガオ"]
10
+ spec.email = ["gaogao1130@gmail.com"]
11
+
12
+ spec.summary = "Tencent Youtu ruby SDK"
13
+ spec.description = "Tencent Youtu ruby SDK"
14
+ spec.homepage = "https://github.com/gaogao1030/youtu"
15
+
16
+ # Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
17
+ # to allow pushing to a single host or delete this section to allow pushing to any host.
18
+ if spec.respond_to?(:metadata)
19
+ spec.metadata['allowed_push_host'] = "https://rubygems.org"
20
+ else
21
+ raise "RubyGems 2.0 or newer is required to protect against " \
22
+ "public gem pushes."
23
+ end
24
+
25
+ spec.files = `git ls-files -z`.split("\x0").reject do |f|
26
+ f.match(%r{^(test|spec|features)/})
27
+ end
28
+ spec.bindir = "exe"
29
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
30
+ spec.require_paths = ["lib"]
31
+
32
+ spec.add_runtime_dependency "activesupport", ">= 4.2", '<=5.2'
33
+ spec.add_runtime_dependency "rest-client", "~> 2.0.2"
34
+ spec.add_runtime_dependency "thor"
35
+
36
+ spec.add_development_dependency "bundler", "~> 1.14"
37
+ spec.add_development_dependency "rake", "~> 10.0"
38
+ spec.add_development_dependency "rspec", "~> 3.0"
39
+ spec.add_development_dependency "rails", '>=5.1'
40
+ end
metadata ADDED
@@ -0,0 +1,167 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: youtu
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - ガオガオ
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2017-05-23 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: activesupport
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '4.2'
20
+ - - "<="
21
+ - !ruby/object:Gem::Version
22
+ version: '5.2'
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ version: '4.2'
30
+ - - "<="
31
+ - !ruby/object:Gem::Version
32
+ version: '5.2'
33
+ - !ruby/object:Gem::Dependency
34
+ name: rest-client
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: 2.0.2
40
+ type: :runtime
41
+ prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: 2.0.2
47
+ - !ruby/object:Gem::Dependency
48
+ name: thor
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: '0'
61
+ - !ruby/object:Gem::Dependency
62
+ name: bundler
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: '1.14'
68
+ type: :development
69
+ prerelease: false
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - "~>"
73
+ - !ruby/object:Gem::Version
74
+ version: '1.14'
75
+ - !ruby/object:Gem::Dependency
76
+ name: rake
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - "~>"
80
+ - !ruby/object:Gem::Version
81
+ version: '10.0'
82
+ type: :development
83
+ prerelease: false
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - "~>"
87
+ - !ruby/object:Gem::Version
88
+ version: '10.0'
89
+ - !ruby/object:Gem::Dependency
90
+ name: rspec
91
+ requirement: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - "~>"
94
+ - !ruby/object:Gem::Version
95
+ version: '3.0'
96
+ type: :development
97
+ prerelease: false
98
+ version_requirements: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - "~>"
101
+ - !ruby/object:Gem::Version
102
+ version: '3.0'
103
+ - !ruby/object:Gem::Dependency
104
+ name: rails
105
+ requirement: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - ">="
108
+ - !ruby/object:Gem::Version
109
+ version: '5.1'
110
+ type: :development
111
+ prerelease: false
112
+ version_requirements: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - ">="
115
+ - !ruby/object:Gem::Version
116
+ version: '5.1'
117
+ description: Tencent Youtu ruby SDK
118
+ email:
119
+ - gaogao1130@gmail.com
120
+ executables: []
121
+ extensions: []
122
+ extra_rdoc_files: []
123
+ files:
124
+ - ".byebug_history"
125
+ - ".gitignore"
126
+ - ".rspec"
127
+ - ".travis.yml"
128
+ - Gemfile
129
+ - README.md
130
+ - Rakefile
131
+ - bin/console
132
+ - bin/setup
133
+ - lib/generators/youtu/install_generator.rb
134
+ - lib/generators/youtu/redis_store_generator.rb
135
+ - lib/generators/youtu/templates/config/initializers/youtu.rb
136
+ - lib/generators/youtu/templates/config/initializers/youtu_redis_store.rb
137
+ - lib/youtu.rb
138
+ - lib/youtu/configuration.rb
139
+ - lib/youtu/request.rb
140
+ - lib/youtu/sign.rb
141
+ - lib/youtu/version.rb
142
+ - youtu.gemspec
143
+ homepage: https://github.com/gaogao1030/youtu
144
+ licenses: []
145
+ metadata:
146
+ allowed_push_host: https://rubygems.org
147
+ post_install_message:
148
+ rdoc_options: []
149
+ require_paths:
150
+ - lib
151
+ required_ruby_version: !ruby/object:Gem::Requirement
152
+ requirements:
153
+ - - ">="
154
+ - !ruby/object:Gem::Version
155
+ version: '0'
156
+ required_rubygems_version: !ruby/object:Gem::Requirement
157
+ requirements:
158
+ - - ">="
159
+ - !ruby/object:Gem::Version
160
+ version: '0'
161
+ requirements: []
162
+ rubyforge_project:
163
+ rubygems_version: 2.6.11
164
+ signing_key:
165
+ specification_version: 4
166
+ summary: Tencent Youtu ruby SDK
167
+ test_files: []