t-1000 0.1.1 → 0.2.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: eb7f12c66f16fdc2ff67954e4a830b3a389ee610
4
- data.tar.gz: 6ad5038942a255aaa9f2e17ed72156916df58ffd
3
+ metadata.gz: 679c7af15f2b693f48013cfe9243a7fec52e1608
4
+ data.tar.gz: 06f237d96b5839a6f00bff7c99e77a4d621cd76a
5
5
  SHA512:
6
- metadata.gz: 3576757290c804782e34442f181e49cb198cf147f6392b866720d4fbc13cd132534b7f7c923e8b2786e5f2c5c11b4d2701e57af1eda729e933992dac23adcd1c
7
- data.tar.gz: 9b84f4a56a3373e667d985f5da122948bd5f05cfc7fab338869ca1239be8b4ada0deffe7269ed5dc5caf69919643aaac69b402037306d66243ba7042f729f36c
6
+ metadata.gz: 58b68040942c6220c67ce393689515b57181db2910a02cc58cc282bfcf4f64a768b16ac8862b1fcdab64eda16f7cec6155856ee77eb3e712f07c6afe06957f04
7
+ data.tar.gz: cf417c864221f132d1e97f284bf1e95cc765a7e2b1d5f452cc524698e9c0079de33a4b09ef02ce83d1c061b30e3eb14753e12f28d30c0ba2aa2b027255e4f970
@@ -1,28 +1,27 @@
1
+ require 'enumerable_observer'
1
2
  require 'active_support/cache'
2
3
 
3
4
  module T1000
4
5
  class TransactionList < Array
6
+ include EnumerableObserver
5
7
 
6
8
  alias_method :track_before, :dup
7
9
 
8
- Array.instance_methods(false).each do |meth|
9
- old = instance_method(meth)
10
- define_method(meth) do |*args, &block|
11
- before = to_a
12
- old.bind(self).call(*args, &block).tap do
13
- changed if before != to_a
14
- end
15
- end unless %i{to_a}.include? meth
16
- end
17
-
18
10
  def self.for_ip(ip, timeout: 3600)
19
11
  new(ip, timeout: timeout)
20
12
  end
21
13
 
22
14
  def initialize(ip, timeout: 3600)
23
15
  @timeout = timeout
24
- @key = ActiveSupport::Cache.expand_cache_key [ip], :ip_request_tracker
25
- replace T1000.cache.store.read(@key) || []
16
+ @key = ActiveSupport::Cache.expand_cache_key [ip], :ip_request_tracker
17
+ value = T1000.cache.store.read(@key)
18
+ replace Marshal.load value if value
19
+ observe.added do
20
+ T1000.cache.store.write @key, Marshal.dump(dup), expires_in: @timeout
21
+ end
22
+ rescue Exception => e
23
+ T1000.cache.store.delete @key
24
+ raise e
26
25
  end
27
26
 
28
27
  def within(time)
@@ -33,8 +32,5 @@ module T1000
33
32
  dup.replace select { |t| t.response.status >= 400 }
34
33
  end
35
34
 
36
- def changed
37
- T1000.cache.store.write @key, self, expires_in: @timeout
38
- end
39
35
  end
40
36
  end
@@ -1,3 +1,3 @@
1
1
  module T1000
2
- VERSION = "0.1.1"
2
+ VERSION = "0.2.0"
3
3
  end
@@ -22,6 +22,7 @@ Gem::Specification.new do |spec|
22
22
  spec.add_dependency 'rack-attack', '~> 4.3'
23
23
  spec.add_dependency 'activesupport', ['>= 3.2', '< 5']
24
24
  spec.add_dependency 'colorize', '~> 0.7'
25
+ spec.add_dependency 'enumerable_observer'
25
26
 
26
27
  spec.add_development_dependency "bundler", "~> 1.9"
27
28
  spec.add_development_dependency "rake", "~> 10.0"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: t-1000
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jason Waldrip
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-07-20 00:00:00.000000000 Z
11
+ date: 2015-12-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rack-attack
@@ -58,6 +58,20 @@ dependencies:
58
58
  - - "~>"
59
59
  - !ruby/object:Gem::Version
60
60
  version: '0.7'
61
+ - !ruby/object:Gem::Dependency
62
+ name: enumerable_observer
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: '0'
68
+ type: :runtime
69
+ prerelease: false
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: '0'
61
75
  - !ruby/object:Gem::Dependency
62
76
  name: bundler
63
77
  requirement: !ruby/object:Gem::Requirement
@@ -134,9 +148,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
134
148
  version: '0'
135
149
  requirements: []
136
150
  rubyforge_project:
137
- rubygems_version: 2.4.5
151
+ rubygems_version: 2.4.8
138
152
  signing_key:
139
153
  specification_version: 4
140
154
  summary: Rack::Attack + Common attack vectors
141
155
  test_files: []
142
- has_rdoc: