istox 0.1.112 → 0.1.113
Sign up to get free protection for your applications and to get access to all the features.
- 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
|