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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6cbdf9678aebebaa528663485d031f2ac625080bd727e11da0a81321fe608391
4
- data.tar.gz: 65f5626fb8199e82121d3e8a6d3da03462c815de316c4326a904c9d257841ea5
3
+ metadata.gz: 051bd3f64bac36e0344335c8d977aad2cbb7fc339bc0aa38bd6602718faaff74
4
+ data.tar.gz: 56f242af8d6fa59be8a800a977ede487cab6e511fbf7fada1a105096c8a996e6
5
5
  SHA512:
6
- metadata.gz: d3e27bf821044a933dbd84e9b590cb9d6066926e8a1b8b9a92c9d3514a426147b4b79eae3f15f4671d9f834180a6b3da3e035de8ac1b68814bc3e16c09ef1236
7
- data.tar.gz: d50d68a85ba7994b50887077aebbe9947bf8c68ffb51dd9be23e5ff4bd27a2896b77d640ebdff526174c857b509dfcc7c6ca0b3549ef4ef25b2373fe84d61486
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.111)
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-universal-darwin)
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-universal-darwin)
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 "istox/version"
3
+ require 'istox/version'
5
4
 
6
5
  Gem::Specification.new do |spec|
7
- spec.name = "istox"
6
+ spec.name = 'istox'
8
7
  spec.version = Istox::VERSION
9
- spec.authors = ["Siong Leng"]
10
- spec.email = ["siongleng@ich-group.com"]
8
+ spec.authors = ['Siong Leng']
9
+ spec.email = ['siongleng@ich-group.com']
11
10
 
12
- spec.summary = "istox backend shared gem"
13
- spec.description = "istox backend shared gem"
14
- spec.homepage = "http://www.abc.com"
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('..', __FILE__)) do
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 = "exe"
29
+ spec.bindir = 'exe'
31
30
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
32
- spec.require_paths = ["lib"]
31
+ spec.require_paths = ['lib']
33
32
 
34
- spec.add_dependency "bunny", ">= 2.12.0"
35
- spec.add_dependency "istox_gruf"
36
- spec.add_dependency "gruf"
37
- spec.add_dependency 'vault', '~> 0.1'
38
- spec.add_dependency "paranoia", "~> 2.2"
39
- spec.add_dependency "graphlient"
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 "binding_of_caller"
42
- spec.add_dependency "ougai"
43
- spec.add_dependency "awesome_print"
44
- spec.add_development_dependency "bundler", "~> 1.16"
45
- spec.add_development_dependency "rake", "~> 10.0"
46
- spec.add_development_dependency "rspec", "~> 3.0"
47
- spec.add_development_dependency "rspec-rails", "~> 3.8.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 "bullet", "~> 5.7.5"
51
- spec.add_development_dependency "rails", "~> 5.2.1"
52
- spec.add_development_dependency "sqlite3", "~> 1.3.6"
53
- spec.add_development_dependency "database_cleaner", "~> 1.6.0"
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
@@ -1,3 +1,3 @@
1
1
  module Istox
2
- VERSION = '0.1.112'.freeze
2
+ VERSION = '0.1.113'.freeze
3
3
  end
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.112
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-02 00:00:00.000000000 Z
11
+ date: 2020-01-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: bunny
14
+ name: awesome_print
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 2.12.0
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: 2.12.0
26
+ version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
- name: istox_gruf
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: gruf
42
+ name: bunny
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: '0'
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: '0'
54
+ version: 2.12.0
55
55
  - !ruby/object:Gem::Dependency
56
- name: vault
56
+ name: graphlient
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - "~>"
59
+ - - ">="
60
60
  - !ruby/object:Gem::Version
61
- version: '0.1'
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.1'
68
+ version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
- name: paranoia
70
+ name: gruf
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - "~>"
73
+ - - ">="
74
74
  - !ruby/object:Gem::Version
75
- version: '2.2'
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: '2.2'
82
+ version: '0'
83
83
  - !ruby/object:Gem::Dependency
84
- name: graphlient
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: binding_of_caller
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: ougai
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: '0'
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: '0'
152
+ version: 2.0.0
139
153
  - !ruby/object:Gem::Dependency
140
- name: awesome_print
154
+ name: redis-namespace
141
155
  requirement: !ruby/object:Gem::Requirement
142
156
  requirements:
143
157
  - - ">="
144
158
  - !ruby/object:Gem::Version
145
- version: '0'
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: '0'
166
+ version: 1.0.0
153
167
  - !ruby/object:Gem::Dependency
154
- name: bundler
168
+ name: vault
155
169
  requirement: !ruby/object:Gem::Requirement
156
170
  requirements:
157
171
  - - "~>"
158
172
  - !ruby/object:Gem::Version
159
- version: '1.16'
160
- type: :development
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.16'
180
+ version: '0.1'
167
181
  - !ruby/object:Gem::Dependency
168
- name: rake
182
+ name: bullet
169
183
  requirement: !ruby/object:Gem::Requirement
170
184
  requirements:
171
185
  - - "~>"
172
186
  - !ruby/object:Gem::Version
173
- version: '10.0'
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: '10.0'
194
+ version: 5.7.5
181
195
  - !ruby/object:Gem::Dependency
182
- name: rspec
196
+ name: bundler
183
197
  requirement: !ruby/object:Gem::Requirement
184
198
  requirements:
185
199
  - - "~>"
186
200
  - !ruby/object:Gem::Version
187
- version: '3.0'
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: '3.0'
208
+ version: '1.16'
195
209
  - !ruby/object:Gem::Dependency
196
- name: rspec-rails
210
+ name: database_cleaner
197
211
  requirement: !ruby/object:Gem::Requirement
198
212
  requirements:
199
213
  - - "~>"
200
214
  - !ruby/object:Gem::Version
201
- version: 3.8.0
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: 3.8.0
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: bullet
252
+ name: fakeredis
239
253
  requirement: !ruby/object:Gem::Requirement
240
254
  requirements:
241
- - - "~>"
255
+ - - ">="
242
256
  - !ruby/object:Gem::Version
243
- version: 5.7.5
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: 5.7.5
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: database_cleaner
336
+ name: timecop
281
337
  requirement: !ruby/object:Gem::Requirement
282
338
  requirements:
283
- - - "~>"
339
+ - - ">="
284
340
  - !ruby/object:Gem::Version
285
- version: 1.6.0
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: 1.6.0
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