youtu 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.
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: []