istox 0.1.112 → 0.1.113
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 +4 -4
- data/Gemfile.lock +13 -3
- data/istox.gemspec +34 -31
- data/lib/istox.rb +1 -0
- data/lib/istox/helpers/rate_limit.rb +119 -0
- data/lib/istox/version.rb +1 -1
- metadata +107 -50
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 051bd3f64bac36e0344335c8d977aad2cbb7fc339bc0aa38bd6602718faaff74
|
|
4
|
+
data.tar.gz: 56f242af8d6fa59be8a800a977ede487cab6e511fbf7fada1a105096c8a996e6
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: f0101e6728edd36b69ea6cdded9258feacc4f17fe79e0b7f5393c5210424b1925b8280a5a2289ba88a09020fb008a46477790171856ddfa046abc3d5a1a67af8
|
|
7
|
+
data.tar.gz: f49243acb52c4865c5541b10a1093ac88efc4bb9673ade9d7d56f198de6fea99d6f90db71992001f9b384228ae517534ab0a7c7caea49a5fcc14d2006a10e6cb
|
data/Gemfile.lock
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
istox (0.1.
|
|
4
|
+
istox (0.1.112)
|
|
5
5
|
awesome_print
|
|
6
6
|
binding_of_caller
|
|
7
7
|
bunny (>= 2.12.0)
|
|
@@ -11,6 +11,8 @@ PATH
|
|
|
11
11
|
listen (~> 3.0.5)
|
|
12
12
|
ougai
|
|
13
13
|
paranoia (~> 2.2)
|
|
14
|
+
redis (>= 2.0.0)
|
|
15
|
+
redis-namespace (>= 1.0.0)
|
|
14
16
|
vault (~> 0.1)
|
|
15
17
|
|
|
16
18
|
GEM
|
|
@@ -84,6 +86,8 @@ GEM
|
|
|
84
86
|
railties (>= 3.0.0)
|
|
85
87
|
faker (1.7.3)
|
|
86
88
|
i18n (~> 0.5)
|
|
89
|
+
fakeredis (0.7.0)
|
|
90
|
+
redis (>= 3.2, < 5.0)
|
|
87
91
|
faraday (0.17.3)
|
|
88
92
|
multipart-post (>= 1.2, < 3)
|
|
89
93
|
faraday_middleware (0.13.1)
|
|
@@ -91,7 +95,7 @@ GEM
|
|
|
91
95
|
ffi (1.11.3)
|
|
92
96
|
globalid (0.4.2)
|
|
93
97
|
activesupport (>= 4.2.0)
|
|
94
|
-
google-protobuf (3.11.2
|
|
98
|
+
google-protobuf (3.11.2)
|
|
95
99
|
googleapis-common-protos-types (1.0.4)
|
|
96
100
|
google-protobuf (~> 3.0)
|
|
97
101
|
graphlient (0.3.7)
|
|
@@ -102,7 +106,7 @@ GEM
|
|
|
102
106
|
graphql-client (0.16.0)
|
|
103
107
|
activesupport (>= 3.0)
|
|
104
108
|
graphql (~> 1.8)
|
|
105
|
-
grpc (1.26.0
|
|
109
|
+
grpc (1.26.0)
|
|
106
110
|
google-protobuf (~> 3.8)
|
|
107
111
|
googleapis-common-protos-types (~> 1.0)
|
|
108
112
|
grpc-tools (1.26.0)
|
|
@@ -175,6 +179,9 @@ GEM
|
|
|
175
179
|
rb-fsevent (0.10.3)
|
|
176
180
|
rb-inotify (0.10.1)
|
|
177
181
|
ffi (~> 1.0)
|
|
182
|
+
redis (4.1.3)
|
|
183
|
+
redis-namespace (1.7.0)
|
|
184
|
+
redis (>= 3.0.4)
|
|
178
185
|
rspec (3.8.0)
|
|
179
186
|
rspec-core (~> 3.8.0)
|
|
180
187
|
rspec-expectations (~> 3.8.0)
|
|
@@ -207,6 +214,7 @@ GEM
|
|
|
207
214
|
sqlite3 (1.3.13)
|
|
208
215
|
thor (0.20.3)
|
|
209
216
|
thread_safe (0.3.6)
|
|
217
|
+
timecop (0.9.1)
|
|
210
218
|
tzinfo (1.2.5)
|
|
211
219
|
thread_safe (~> 0.1)
|
|
212
220
|
uniform_notifier (1.11.0)
|
|
@@ -225,12 +233,14 @@ DEPENDENCIES
|
|
|
225
233
|
database_cleaner (~> 1.6.0)
|
|
226
234
|
factory_bot_rails (~> 4.8.2)
|
|
227
235
|
faker (~> 1.7.3)
|
|
236
|
+
fakeredis
|
|
228
237
|
istox!
|
|
229
238
|
rails (~> 5.2.1)
|
|
230
239
|
rake (~> 10.0)
|
|
231
240
|
rspec (~> 3.0)
|
|
232
241
|
rspec-rails (~> 3.8.0)
|
|
233
242
|
sqlite3 (~> 1.3.6)
|
|
243
|
+
timecop
|
|
234
244
|
|
|
235
245
|
BUNDLED WITH
|
|
236
246
|
1.17.3
|
data/istox.gemspec
CHANGED
|
@@ -1,17 +1,16 @@
|
|
|
1
|
-
|
|
2
|
-
lib = File.expand_path("../lib", __FILE__)
|
|
1
|
+
lib = File.expand_path('lib', __dir__)
|
|
3
2
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
|
-
require
|
|
3
|
+
require 'istox/version'
|
|
5
4
|
|
|
6
5
|
Gem::Specification.new do |spec|
|
|
7
|
-
spec.name =
|
|
6
|
+
spec.name = 'istox'
|
|
8
7
|
spec.version = Istox::VERSION
|
|
9
|
-
spec.authors = [
|
|
10
|
-
spec.email = [
|
|
8
|
+
spec.authors = ['Siong Leng']
|
|
9
|
+
spec.email = ['siongleng@ich-group.com']
|
|
11
10
|
|
|
12
|
-
spec.summary =
|
|
13
|
-
spec.description =
|
|
14
|
-
spec.homepage =
|
|
11
|
+
spec.summary = 'istox backend shared gem'
|
|
12
|
+
spec.description = 'istox backend shared gem'
|
|
13
|
+
spec.homepage = 'http://www.abc.com'
|
|
15
14
|
|
|
16
15
|
# Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
|
|
17
16
|
# to allow pushing to a single host or delete this section to allow pushing to any host.
|
|
@@ -24,31 +23,35 @@ Gem::Specification.new do |spec|
|
|
|
24
23
|
|
|
25
24
|
# Specify which files should be added to the gem when it is released.
|
|
26
25
|
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
|
27
|
-
spec.files = Dir.chdir(File.expand_path(
|
|
26
|
+
spec.files = Dir.chdir(File.expand_path(__dir__)) do
|
|
28
27
|
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
|
29
28
|
end
|
|
30
|
-
spec.bindir =
|
|
29
|
+
spec.bindir = 'exe'
|
|
31
30
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
|
32
|
-
spec.require_paths = [
|
|
31
|
+
spec.require_paths = ['lib']
|
|
33
32
|
|
|
34
|
-
spec.add_dependency
|
|
35
|
-
spec.add_dependency
|
|
36
|
-
spec.add_dependency
|
|
37
|
-
spec.add_dependency '
|
|
38
|
-
spec.add_dependency
|
|
39
|
-
spec.add_dependency
|
|
33
|
+
spec.add_dependency 'awesome_print'
|
|
34
|
+
spec.add_dependency 'binding_of_caller'
|
|
35
|
+
spec.add_dependency 'bunny', '>= 2.12.0'
|
|
36
|
+
spec.add_dependency 'graphlient'
|
|
37
|
+
spec.add_dependency 'gruf'
|
|
38
|
+
spec.add_dependency 'istox_gruf'
|
|
40
39
|
spec.add_dependency 'listen', '~> 3.0.5'
|
|
41
|
-
spec.add_dependency
|
|
42
|
-
spec.add_dependency
|
|
43
|
-
spec.add_dependency
|
|
44
|
-
spec.
|
|
45
|
-
spec.
|
|
46
|
-
spec.add_development_dependency
|
|
47
|
-
spec.add_development_dependency
|
|
48
|
-
spec.add_development_dependency
|
|
49
|
-
spec.add_development_dependency
|
|
50
|
-
spec.add_development_dependency
|
|
51
|
-
spec.add_development_dependency
|
|
52
|
-
spec.add_development_dependency
|
|
53
|
-
spec.add_development_dependency
|
|
40
|
+
spec.add_dependency 'ougai'
|
|
41
|
+
spec.add_dependency 'paranoia', '~> 2.2'
|
|
42
|
+
spec.add_dependency 'redis', '>= 2.0.0'
|
|
43
|
+
spec.add_dependency 'redis-namespace', '>= 1.0.0'
|
|
44
|
+
spec.add_dependency 'vault', '~> 0.1'
|
|
45
|
+
spec.add_development_dependency 'bullet', '~> 5.7.5'
|
|
46
|
+
spec.add_development_dependency 'bundler', '~> 1.16'
|
|
47
|
+
spec.add_development_dependency 'database_cleaner', '~> 1.6.0'
|
|
48
|
+
spec.add_development_dependency 'factory_bot_rails', '~> 4.8.2'
|
|
49
|
+
spec.add_development_dependency 'faker', '~> 1.7.3'
|
|
50
|
+
spec.add_development_dependency 'fakeredis'
|
|
51
|
+
spec.add_development_dependency 'rails', '~> 5.2.1'
|
|
52
|
+
spec.add_development_dependency 'rake', '~> 10.0'
|
|
53
|
+
spec.add_development_dependency 'rspec', '~> 3.0'
|
|
54
|
+
spec.add_development_dependency 'rspec-rails', '~> 3.8.0'
|
|
55
|
+
spec.add_development_dependency 'sqlite3', '~> 1.3.6'
|
|
56
|
+
spec.add_development_dependency 'timecop'
|
|
54
57
|
end
|
data/lib/istox.rb
CHANGED
|
@@ -16,6 +16,7 @@ module Istox
|
|
|
16
16
|
require 'istox/interfaces/chainhub/transaction'
|
|
17
17
|
require 'istox/helpers/publisher'
|
|
18
18
|
require 'istox/helpers/bunny_boot'
|
|
19
|
+
require 'istox/helpers/rate_limit'
|
|
19
20
|
require 'istox/helpers/vault'
|
|
20
21
|
require 'istox/helpers/order_book_price_time'
|
|
21
22
|
require 'istox/helpers/order_book_prorate'
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
require 'redis'
|
|
2
|
+
require 'redis-namespace'
|
|
3
|
+
|
|
4
|
+
# Documentation: https://github.com/ejfinneran/ratelimit
|
|
5
|
+
|
|
6
|
+
module Istox
|
|
7
|
+
class RateLimit
|
|
8
|
+
# Create a Ratelimit object.
|
|
9
|
+
#
|
|
10
|
+
# @param [String] key A name to uniquely identify this rate limit. For example, 'emails'
|
|
11
|
+
# @param [Hash] options Options hash
|
|
12
|
+
# @option options [Integer] :bucket_span (600) Time span to track in seconds
|
|
13
|
+
# @option options [Integer] :bucket_interval (5) How many seconds each bucket represents
|
|
14
|
+
# @option options [Integer] :bucket_expiry (@bucket_span) How long we keep data in each bucket before it is auto expired.
|
|
15
|
+
# Cannot be larger than the bucket_span.
|
|
16
|
+
# @option options [Redis] :redis (nil) Redis client if you need to customize connection options
|
|
17
|
+
#
|
|
18
|
+
# @return [Ratelimit] Ratelimit instance
|
|
19
|
+
#
|
|
20
|
+
def initialize(key, options = {})
|
|
21
|
+
@key = key
|
|
22
|
+
raise ArgumentError, 'Redis object is now passed in via the options hash - options[:redis]' unless options.is_a?(Hash)
|
|
23
|
+
|
|
24
|
+
@bucket_span = options[:bucket_span] || 600
|
|
25
|
+
@bucket_interval = options[:bucket_interval] || 5
|
|
26
|
+
@bucket_expiry = options[:bucket_expiry] || @bucket_span
|
|
27
|
+
raise ArgumentError, 'Bucket expiry cannot be larger than the bucket span' if @bucket_expiry > @bucket_span
|
|
28
|
+
|
|
29
|
+
@bucket_count = (@bucket_span / @bucket_interval).round
|
|
30
|
+
raise ArgumentError, 'Cannot have less than 3 buckets' if @bucket_count < 3
|
|
31
|
+
|
|
32
|
+
@raw_redis = options[:redis]
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
# Add to the counter for a given subject.
|
|
36
|
+
#
|
|
37
|
+
# @param [String] subject A unique key to identify the subject. For example, 'user@foo.com'
|
|
38
|
+
# @param [Integer] count The number by which to increase the counter
|
|
39
|
+
#
|
|
40
|
+
# @return [Integer] The counter value
|
|
41
|
+
def add(subject, count = 1)
|
|
42
|
+
bucket = get_bucket
|
|
43
|
+
subject = "#{@key}:#{subject}"
|
|
44
|
+
redis.multi do
|
|
45
|
+
redis.hincrby(subject, bucket, count)
|
|
46
|
+
redis.hdel(subject, (bucket + 1) % @bucket_count)
|
|
47
|
+
redis.hdel(subject, (bucket + 2) % @bucket_count)
|
|
48
|
+
redis.expire(subject, @bucket_expiry)
|
|
49
|
+
end.first
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
# Returns the count for a given subject and interval
|
|
53
|
+
#
|
|
54
|
+
# @param [String] subject Subject for the count
|
|
55
|
+
# @param [Integer] interval How far back (in seconds) to retrieve activity.
|
|
56
|
+
def count(subject, interval)
|
|
57
|
+
bucket = get_bucket
|
|
58
|
+
interval = [[interval, @bucket_interval].max, @bucket_span].min
|
|
59
|
+
count = (interval / @bucket_interval).floor
|
|
60
|
+
subject = "#{@key}:#{subject}"
|
|
61
|
+
|
|
62
|
+
keys = (0..count - 1).map do |i|
|
|
63
|
+
(bucket - i) % @bucket_count
|
|
64
|
+
end
|
|
65
|
+
redis.hmget(subject, *keys).inject(0) { |a, i| a + i.to_i }
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
# Check if the rate limit has been exceeded.
|
|
69
|
+
#
|
|
70
|
+
# @param [String] subject Subject to check
|
|
71
|
+
# @param [Hash] options Options hash
|
|
72
|
+
# @option options [Integer] :interval How far back to retrieve activity.
|
|
73
|
+
# @option options [Integer] :threshold Maximum number of actions
|
|
74
|
+
def exceeded?(subject, options = {})
|
|
75
|
+
count(subject, options[:interval]) >= options[:threshold]
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
# Check if the rate limit is within bounds
|
|
79
|
+
#
|
|
80
|
+
# @param [String] subject Subject to check
|
|
81
|
+
# @param [Hash] options Options hash
|
|
82
|
+
# @option options [Integer] :interval How far back to retrieve activity.
|
|
83
|
+
# @option options [Integer] :threshold Maximum number of actions
|
|
84
|
+
def within_bounds?(subject, options = {})
|
|
85
|
+
!exceeded?(subject, options)
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
# Execute a block once the rate limit is within bounds
|
|
89
|
+
# *WARNING* This will block the current thread until the rate limit is within bounds.
|
|
90
|
+
#
|
|
91
|
+
# @param [String] subject Subject for this rate limit
|
|
92
|
+
# @param [Hash] options Options hash
|
|
93
|
+
# @option options [Integer] :interval How far back to retrieve activity.
|
|
94
|
+
# @option options [Integer] :threshold Maximum number of actions
|
|
95
|
+
# @yield The block to be run
|
|
96
|
+
#
|
|
97
|
+
# @example Send an email as long as we haven't send 5 in the last 10 minutes
|
|
98
|
+
# ratelimit.exec_with_threshold(email, [:threshold => 5, :interval => 600]) do
|
|
99
|
+
# send_another_email
|
|
100
|
+
# ratelimit.add(email)
|
|
101
|
+
# end
|
|
102
|
+
def exec_within_threshold(subject, options = {})
|
|
103
|
+
options[:threshold] ||= 30
|
|
104
|
+
options[:interval] ||= 30
|
|
105
|
+
sleep @bucket_interval while exceeded?(subject, options)
|
|
106
|
+
yield(self)
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
private
|
|
110
|
+
|
|
111
|
+
def get_bucket(time = Time.now.to_i)
|
|
112
|
+
((time % @bucket_span) / @bucket_interval).floor
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
def redis
|
|
116
|
+
@redis ||= Redis::Namespace.new(:ratelimit, redis: @raw_redis || Redis.new)
|
|
117
|
+
end
|
|
118
|
+
end
|
|
119
|
+
end
|
data/lib/istox/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,31 +1,31 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: istox
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.1.
|
|
4
|
+
version: 0.1.113
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Siong Leng
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2020-01-
|
|
11
|
+
date: 2020-01-06 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
|
-
name:
|
|
14
|
+
name: awesome_print
|
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
|
16
16
|
requirements:
|
|
17
17
|
- - ">="
|
|
18
18
|
- !ruby/object:Gem::Version
|
|
19
|
-
version:
|
|
19
|
+
version: '0'
|
|
20
20
|
type: :runtime
|
|
21
21
|
prerelease: false
|
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
|
23
23
|
requirements:
|
|
24
24
|
- - ">="
|
|
25
25
|
- !ruby/object:Gem::Version
|
|
26
|
-
version:
|
|
26
|
+
version: '0'
|
|
27
27
|
- !ruby/object:Gem::Dependency
|
|
28
|
-
name:
|
|
28
|
+
name: binding_of_caller
|
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
|
30
30
|
requirements:
|
|
31
31
|
- - ">="
|
|
@@ -39,49 +39,49 @@ dependencies:
|
|
|
39
39
|
- !ruby/object:Gem::Version
|
|
40
40
|
version: '0'
|
|
41
41
|
- !ruby/object:Gem::Dependency
|
|
42
|
-
name:
|
|
42
|
+
name: bunny
|
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
|
44
44
|
requirements:
|
|
45
45
|
- - ">="
|
|
46
46
|
- !ruby/object:Gem::Version
|
|
47
|
-
version:
|
|
47
|
+
version: 2.12.0
|
|
48
48
|
type: :runtime
|
|
49
49
|
prerelease: false
|
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
|
51
51
|
requirements:
|
|
52
52
|
- - ">="
|
|
53
53
|
- !ruby/object:Gem::Version
|
|
54
|
-
version:
|
|
54
|
+
version: 2.12.0
|
|
55
55
|
- !ruby/object:Gem::Dependency
|
|
56
|
-
name:
|
|
56
|
+
name: graphlient
|
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
|
58
58
|
requirements:
|
|
59
|
-
- - "
|
|
59
|
+
- - ">="
|
|
60
60
|
- !ruby/object:Gem::Version
|
|
61
|
-
version: '0
|
|
61
|
+
version: '0'
|
|
62
62
|
type: :runtime
|
|
63
63
|
prerelease: false
|
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
|
65
65
|
requirements:
|
|
66
|
-
- - "
|
|
66
|
+
- - ">="
|
|
67
67
|
- !ruby/object:Gem::Version
|
|
68
|
-
version: '0
|
|
68
|
+
version: '0'
|
|
69
69
|
- !ruby/object:Gem::Dependency
|
|
70
|
-
name:
|
|
70
|
+
name: gruf
|
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
|
72
72
|
requirements:
|
|
73
|
-
- - "
|
|
73
|
+
- - ">="
|
|
74
74
|
- !ruby/object:Gem::Version
|
|
75
|
-
version: '
|
|
75
|
+
version: '0'
|
|
76
76
|
type: :runtime
|
|
77
77
|
prerelease: false
|
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
|
79
79
|
requirements:
|
|
80
|
-
- - "
|
|
80
|
+
- - ">="
|
|
81
81
|
- !ruby/object:Gem::Version
|
|
82
|
-
version: '
|
|
82
|
+
version: '0'
|
|
83
83
|
- !ruby/object:Gem::Dependency
|
|
84
|
-
name:
|
|
84
|
+
name: istox_gruf
|
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
|
86
86
|
requirements:
|
|
87
87
|
- - ">="
|
|
@@ -109,7 +109,7 @@ dependencies:
|
|
|
109
109
|
- !ruby/object:Gem::Version
|
|
110
110
|
version: 3.0.5
|
|
111
111
|
- !ruby/object:Gem::Dependency
|
|
112
|
-
name:
|
|
112
|
+
name: ougai
|
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
|
114
114
|
requirements:
|
|
115
115
|
- - ">="
|
|
@@ -123,89 +123,103 @@ dependencies:
|
|
|
123
123
|
- !ruby/object:Gem::Version
|
|
124
124
|
version: '0'
|
|
125
125
|
- !ruby/object:Gem::Dependency
|
|
126
|
-
name:
|
|
126
|
+
name: paranoia
|
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
|
128
|
+
requirements:
|
|
129
|
+
- - "~>"
|
|
130
|
+
- !ruby/object:Gem::Version
|
|
131
|
+
version: '2.2'
|
|
132
|
+
type: :runtime
|
|
133
|
+
prerelease: false
|
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
135
|
+
requirements:
|
|
136
|
+
- - "~>"
|
|
137
|
+
- !ruby/object:Gem::Version
|
|
138
|
+
version: '2.2'
|
|
139
|
+
- !ruby/object:Gem::Dependency
|
|
140
|
+
name: redis
|
|
127
141
|
requirement: !ruby/object:Gem::Requirement
|
|
128
142
|
requirements:
|
|
129
143
|
- - ">="
|
|
130
144
|
- !ruby/object:Gem::Version
|
|
131
|
-
version:
|
|
145
|
+
version: 2.0.0
|
|
132
146
|
type: :runtime
|
|
133
147
|
prerelease: false
|
|
134
148
|
version_requirements: !ruby/object:Gem::Requirement
|
|
135
149
|
requirements:
|
|
136
150
|
- - ">="
|
|
137
151
|
- !ruby/object:Gem::Version
|
|
138
|
-
version:
|
|
152
|
+
version: 2.0.0
|
|
139
153
|
- !ruby/object:Gem::Dependency
|
|
140
|
-
name:
|
|
154
|
+
name: redis-namespace
|
|
141
155
|
requirement: !ruby/object:Gem::Requirement
|
|
142
156
|
requirements:
|
|
143
157
|
- - ">="
|
|
144
158
|
- !ruby/object:Gem::Version
|
|
145
|
-
version:
|
|
159
|
+
version: 1.0.0
|
|
146
160
|
type: :runtime
|
|
147
161
|
prerelease: false
|
|
148
162
|
version_requirements: !ruby/object:Gem::Requirement
|
|
149
163
|
requirements:
|
|
150
164
|
- - ">="
|
|
151
165
|
- !ruby/object:Gem::Version
|
|
152
|
-
version:
|
|
166
|
+
version: 1.0.0
|
|
153
167
|
- !ruby/object:Gem::Dependency
|
|
154
|
-
name:
|
|
168
|
+
name: vault
|
|
155
169
|
requirement: !ruby/object:Gem::Requirement
|
|
156
170
|
requirements:
|
|
157
171
|
- - "~>"
|
|
158
172
|
- !ruby/object:Gem::Version
|
|
159
|
-
version: '1
|
|
160
|
-
type: :
|
|
173
|
+
version: '0.1'
|
|
174
|
+
type: :runtime
|
|
161
175
|
prerelease: false
|
|
162
176
|
version_requirements: !ruby/object:Gem::Requirement
|
|
163
177
|
requirements:
|
|
164
178
|
- - "~>"
|
|
165
179
|
- !ruby/object:Gem::Version
|
|
166
|
-
version: '1
|
|
180
|
+
version: '0.1'
|
|
167
181
|
- !ruby/object:Gem::Dependency
|
|
168
|
-
name:
|
|
182
|
+
name: bullet
|
|
169
183
|
requirement: !ruby/object:Gem::Requirement
|
|
170
184
|
requirements:
|
|
171
185
|
- - "~>"
|
|
172
186
|
- !ruby/object:Gem::Version
|
|
173
|
-
version:
|
|
187
|
+
version: 5.7.5
|
|
174
188
|
type: :development
|
|
175
189
|
prerelease: false
|
|
176
190
|
version_requirements: !ruby/object:Gem::Requirement
|
|
177
191
|
requirements:
|
|
178
192
|
- - "~>"
|
|
179
193
|
- !ruby/object:Gem::Version
|
|
180
|
-
version:
|
|
194
|
+
version: 5.7.5
|
|
181
195
|
- !ruby/object:Gem::Dependency
|
|
182
|
-
name:
|
|
196
|
+
name: bundler
|
|
183
197
|
requirement: !ruby/object:Gem::Requirement
|
|
184
198
|
requirements:
|
|
185
199
|
- - "~>"
|
|
186
200
|
- !ruby/object:Gem::Version
|
|
187
|
-
version: '
|
|
201
|
+
version: '1.16'
|
|
188
202
|
type: :development
|
|
189
203
|
prerelease: false
|
|
190
204
|
version_requirements: !ruby/object:Gem::Requirement
|
|
191
205
|
requirements:
|
|
192
206
|
- - "~>"
|
|
193
207
|
- !ruby/object:Gem::Version
|
|
194
|
-
version: '
|
|
208
|
+
version: '1.16'
|
|
195
209
|
- !ruby/object:Gem::Dependency
|
|
196
|
-
name:
|
|
210
|
+
name: database_cleaner
|
|
197
211
|
requirement: !ruby/object:Gem::Requirement
|
|
198
212
|
requirements:
|
|
199
213
|
- - "~>"
|
|
200
214
|
- !ruby/object:Gem::Version
|
|
201
|
-
version:
|
|
215
|
+
version: 1.6.0
|
|
202
216
|
type: :development
|
|
203
217
|
prerelease: false
|
|
204
218
|
version_requirements: !ruby/object:Gem::Requirement
|
|
205
219
|
requirements:
|
|
206
220
|
- - "~>"
|
|
207
221
|
- !ruby/object:Gem::Version
|
|
208
|
-
version:
|
|
222
|
+
version: 1.6.0
|
|
209
223
|
- !ruby/object:Gem::Dependency
|
|
210
224
|
name: factory_bot_rails
|
|
211
225
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -235,19 +249,19 @@ dependencies:
|
|
|
235
249
|
- !ruby/object:Gem::Version
|
|
236
250
|
version: 1.7.3
|
|
237
251
|
- !ruby/object:Gem::Dependency
|
|
238
|
-
name:
|
|
252
|
+
name: fakeredis
|
|
239
253
|
requirement: !ruby/object:Gem::Requirement
|
|
240
254
|
requirements:
|
|
241
|
-
- - "
|
|
255
|
+
- - ">="
|
|
242
256
|
- !ruby/object:Gem::Version
|
|
243
|
-
version:
|
|
257
|
+
version: '0'
|
|
244
258
|
type: :development
|
|
245
259
|
prerelease: false
|
|
246
260
|
version_requirements: !ruby/object:Gem::Requirement
|
|
247
261
|
requirements:
|
|
248
|
-
- - "
|
|
262
|
+
- - ">="
|
|
249
263
|
- !ruby/object:Gem::Version
|
|
250
|
-
version:
|
|
264
|
+
version: '0'
|
|
251
265
|
- !ruby/object:Gem::Dependency
|
|
252
266
|
name: rails
|
|
253
267
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -262,6 +276,48 @@ dependencies:
|
|
|
262
276
|
- - "~>"
|
|
263
277
|
- !ruby/object:Gem::Version
|
|
264
278
|
version: 5.2.1
|
|
279
|
+
- !ruby/object:Gem::Dependency
|
|
280
|
+
name: rake
|
|
281
|
+
requirement: !ruby/object:Gem::Requirement
|
|
282
|
+
requirements:
|
|
283
|
+
- - "~>"
|
|
284
|
+
- !ruby/object:Gem::Version
|
|
285
|
+
version: '10.0'
|
|
286
|
+
type: :development
|
|
287
|
+
prerelease: false
|
|
288
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
289
|
+
requirements:
|
|
290
|
+
- - "~>"
|
|
291
|
+
- !ruby/object:Gem::Version
|
|
292
|
+
version: '10.0'
|
|
293
|
+
- !ruby/object:Gem::Dependency
|
|
294
|
+
name: rspec
|
|
295
|
+
requirement: !ruby/object:Gem::Requirement
|
|
296
|
+
requirements:
|
|
297
|
+
- - "~>"
|
|
298
|
+
- !ruby/object:Gem::Version
|
|
299
|
+
version: '3.0'
|
|
300
|
+
type: :development
|
|
301
|
+
prerelease: false
|
|
302
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
303
|
+
requirements:
|
|
304
|
+
- - "~>"
|
|
305
|
+
- !ruby/object:Gem::Version
|
|
306
|
+
version: '3.0'
|
|
307
|
+
- !ruby/object:Gem::Dependency
|
|
308
|
+
name: rspec-rails
|
|
309
|
+
requirement: !ruby/object:Gem::Requirement
|
|
310
|
+
requirements:
|
|
311
|
+
- - "~>"
|
|
312
|
+
- !ruby/object:Gem::Version
|
|
313
|
+
version: 3.8.0
|
|
314
|
+
type: :development
|
|
315
|
+
prerelease: false
|
|
316
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
317
|
+
requirements:
|
|
318
|
+
- - "~>"
|
|
319
|
+
- !ruby/object:Gem::Version
|
|
320
|
+
version: 3.8.0
|
|
265
321
|
- !ruby/object:Gem::Dependency
|
|
266
322
|
name: sqlite3
|
|
267
323
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -277,19 +333,19 @@ dependencies:
|
|
|
277
333
|
- !ruby/object:Gem::Version
|
|
278
334
|
version: 1.3.6
|
|
279
335
|
- !ruby/object:Gem::Dependency
|
|
280
|
-
name:
|
|
336
|
+
name: timecop
|
|
281
337
|
requirement: !ruby/object:Gem::Requirement
|
|
282
338
|
requirements:
|
|
283
|
-
- - "
|
|
339
|
+
- - ">="
|
|
284
340
|
- !ruby/object:Gem::Version
|
|
285
|
-
version:
|
|
341
|
+
version: '0'
|
|
286
342
|
type: :development
|
|
287
343
|
prerelease: false
|
|
288
344
|
version_requirements: !ruby/object:Gem::Requirement
|
|
289
345
|
requirements:
|
|
290
|
-
- - "
|
|
346
|
+
- - ">="
|
|
291
347
|
- !ruby/object:Gem::Version
|
|
292
|
-
version:
|
|
348
|
+
version: '0'
|
|
293
349
|
description: istox backend shared gem
|
|
294
350
|
email:
|
|
295
351
|
- siongleng@ich-group.com
|
|
@@ -331,6 +387,7 @@ files:
|
|
|
331
387
|
- lib/istox/helpers/order_book_price_time.rb
|
|
332
388
|
- lib/istox/helpers/order_book_prorate.rb
|
|
333
389
|
- lib/istox/helpers/publisher.rb
|
|
390
|
+
- lib/istox/helpers/rate_limit.rb
|
|
334
391
|
- lib/istox/helpers/regex_helper.rb
|
|
335
392
|
- lib/istox/helpers/result_handler.rb
|
|
336
393
|
- lib/istox/helpers/vault.rb
|