witch_doctor 0.1.2 → 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: 0e488255c1787360c0530fa7db20210960c9e40d
4
- data.tar.gz: 2fd9f892ad7f38f8af98d45aa6db85c33b44511d
3
+ metadata.gz: 62a6d2446df132b40062054df4cefaa444b038a2
4
+ data.tar.gz: 7a73956f5b7ec02a248628b5d2189297d7637854
5
5
  SHA512:
6
- metadata.gz: 0da25a445b251b6d7a648b8c5b4e3da8d31c4b1559047987e4a97c82a975abd316f2acf9bb0dc1df910bed73d08c9afa5ab0484dc93aece4a42f85d8c90a7bab
7
- data.tar.gz: 2691da3d55694e2690127890c885547c8982c04ff5e7057ca69aa5bc287f6b295906bb2611d15056dceff4d027223f8d4c79d77fa1b8140541d86b92ea8aad38
6
+ metadata.gz: 8bdcbfc8f4ad8ef68d392f243ea1d7a9e58ddd2d938a46ba276cf01fb24507386463860b813206791343fd7f8d1667fc7996d8fb773fe687a91e8bfb93d324c1
7
+ data.tar.gz: 06078977ef998a31963d69287397148eea095d5ec014fc8b06c50daffbed48ce23b172a2aa218b129e1d9fdc8a162a502cd7b68d61af0be9ab7abf7f6e8cda3a
data/README.md CHANGED
@@ -53,7 +53,7 @@ end
53
53
  ```ruby
54
54
  # /config/initializers/witch_doctor.rb
55
55
 
56
- VirusScan.token = Rails
56
+ WitchDoctor.token = Rails
57
57
  .application
58
58
  .secrets
59
59
  .fetch('antivirus_scan')
@@ -125,8 +125,33 @@ end
125
125
 
126
126
  # Testing
127
127
 
128
- The gem/engine is pretty well tested but I recomend everyone to write
129
- interation test for every application it's introduced to.
128
+ Make sure you turn of `virus_scan_scheduling_on` option so that gem wont
129
+ create extra records when your tests are running
130
+
131
+ ```
132
+ # config/initializers/witch_doctor.rb
133
+ WitchDoctor.skip_virus_scan_scheduling = true
134
+ ```
135
+
136
+ turn it on only when needed
137
+
138
+ ```ruby
139
+ # spec/request/virus_scan.rb
140
+
141
+ # ...
142
+ before do
143
+ WitchDoctor.skip_virus_scan_scheduling = false
144
+ end
145
+
146
+ after do
147
+ WitchDoctor.skip_virus_scan_scheduling = true
148
+ end
149
+
150
+ # ...
151
+ ```
152
+
153
+ The gem/engine is pretty well tested but I recomend to write
154
+ interation test for every application it is introduced to.
130
155
 
131
156
  Example with RSpec request test:
132
157
 
@@ -53,7 +53,7 @@ module WitchDoctor
53
53
  def authenticate!
54
54
  if provided_token == nil
55
55
  render json: { errors: { request: ['Not Authenticated'] } }, status: 401
56
- elsif provided_token.to_s == VirusScan.token
56
+ elsif provided_token.to_s == WitchDoctor.token
57
57
  yield
58
58
  else
59
59
  render json: { errors: { request: ['Not Authorized'] } }, status: 403
@@ -61,12 +61,18 @@ module WitchDoctor
61
61
  end
62
62
 
63
63
  def provided_token
64
- (request.headers['HTTP_AUTHORIZATION'] || request.headers['rack.session']['Authorization'])
64
+ authorization
65
65
  .to_s
66
66
  .match(/Token\s+(.*)/) { |m| m[1] } \
67
67
  || params[:token]
68
68
  end
69
69
 
70
+ def authorization
71
+ (rails4 = request.headers['HTTP_AUTHORIZATION']) \
72
+ || (rails3 = request.headers['Authorization']) \
73
+ || (rspec = request.headers['rack.session']['Authorization'])
74
+ end
75
+
70
76
  def virus_scan_params
71
77
  VirusScanPermitter.new.attributes(params)
72
78
  end
@@ -1,39 +1 @@
1
- class VirusScan < ActiveRecord::Base
2
- TokenNotSpecified = Class.new(StandardError)
3
-
4
- class << self
5
- attr_writer :token
6
-
7
- def token
8
- @token || raise(TokenNotSpecified)
9
- end
10
- end
11
-
12
- belongs_to :resource, polymorphic: true
13
- scope :not_scanned, -> { where scan_result: nil }
14
- validates_inclusion_of :scan_result, in: WitchDoctor::Antivirus::RESULTS, allow_nil: true
15
-
16
- before_update :set_scanned_at, if: :scan_updated?
17
-
18
- def as_json(options={})
19
- attributes
20
- .slice('id', 'scan_result')
21
- .tap { |hash|
22
- hash.merge!('file_url' => file_url,
23
- 'scanned_at' => scanned_at.try(:utc).try(:iso8601))
24
- }
25
- end
26
-
27
- # S3 will give url, file wil show mount point, we care just about s3
28
- def file_url
29
- resource.send(mount_point).url
30
- end
31
-
32
- def set_scanned_at
33
- self.scanned_at = WitchDoctor.time_stamper.call
34
- end
35
-
36
- def scan_updated?
37
- scan_result.in? WitchDoctor::Antivirus::RESULTS
38
- end
39
- end
1
+ VirusScan = Class.new(WitchDoctor::VirusScan)
@@ -0,0 +1,33 @@
1
+ module WitchDoctor
2
+ class VirusScan < ActiveRecord::Base
3
+ self.table_name = "virus_scans"
4
+
5
+ belongs_to :resource, polymorphic: true
6
+ scope :not_scanned, -> { where scan_result: nil }
7
+ validates_inclusion_of :scan_result, in: WitchDoctor::Antivirus::RESULTS, allow_nil: true
8
+
9
+ before_update :set_scanned_at, if: :scan_updated?
10
+
11
+ def as_json(options={})
12
+ attributes
13
+ .slice('id', 'scan_result')
14
+ .tap { |hash|
15
+ hash.merge!('file_url' => file_url,
16
+ 'scanned_at' => scanned_at.try(:utc).try(:iso8601))
17
+ }
18
+ end
19
+
20
+ # S3 will give url, file wil show mount point, we care just about s3
21
+ def file_url
22
+ resource.send(mount_point).url
23
+ end
24
+
25
+ def set_scanned_at
26
+ self.scanned_at = WitchDoctor.time_stamper.call
27
+ end
28
+
29
+ def scan_updated?
30
+ scan_result.in? WitchDoctor::Antivirus::RESULTS
31
+ end
32
+ end
33
+ end
@@ -2,6 +2,6 @@ class VirusScanPermitter
2
2
  def attributes(params)
3
3
  params
4
4
  .require(:virus_scan)
5
- .permit [:scan_result]
5
+ .permit(:scan_result)
6
6
  end
7
7
  end
@@ -6,11 +6,15 @@ module WitchDoctor
6
6
  has_many :virus_scans, as: :resource
7
7
  end
8
8
 
9
+ def virus_scan_scheduling_on?
10
+ !WitchDoctor.skip_virus_scan_scheduling
11
+ end
12
+
9
13
  module ClassMethods
10
14
  def schedule_virus_scan(options)
11
15
  mount_point = options.fetch(:on)
12
16
 
13
- after_save "schedule_#{mount_point}_virus_scan", if: "schedule_#{mount_point}_virus_scan?"
17
+ after_save "schedule_#{mount_point}_virus_scan", if: ["schedule_#{mount_point}_virus_scan?", :virus_scan_scheduling_on?]
14
18
 
15
19
  define_method("schedule_#{mount_point}_virus_scan") do
16
20
  virus_scans.create! do |vs|
@@ -1,3 +1,3 @@
1
1
  module WitchDoctor
2
- VERSION = "0.1.2"
2
+ VERSION = "0.2.0"
3
3
  end
data/lib/witch_doctor.rb CHANGED
@@ -3,8 +3,10 @@ require "witch_doctor/antivirus"
3
3
  require "witch_doctor/antivirus_concern"
4
4
 
5
5
  module WitchDoctor
6
+ TokenNotSpecified = Class.new(StandardError)
7
+
6
8
  class << self
7
- attr_writer :time_stamper, :virus_scan_limit
9
+ attr_writer :time_stamper, :virus_scan_limit, :token, :skip_virus_scan_scheduling
8
10
 
9
11
  def time_stamper
10
12
  @time_stamper ||= -> { Time.now }
@@ -13,5 +15,13 @@ module WitchDoctor
13
15
  def virus_scan_limit
14
16
  @virus_scan_limit ||= 10
15
17
  end
18
+
19
+ def token
20
+ @token || raise(TokenNotSpecified)
21
+ end
22
+
23
+ def skip_virus_scan_scheduling
24
+ !!@skip_virus_scan_scheduling
25
+ end
16
26
  end
17
27
  end
@@ -1 +1 @@
1
- VirusScan.token = '1234'
1
+ WitchDoctor.token = '1234'
@@ -279,3 +279,5 @@ Migrating to CreateWitchDoctorVirusScans (20150209121818)
279
279
  ActiveRecord::SchemaMigration Load (0.3ms) SELECT "schema_migrations".* FROM "schema_migrations"
280
280
  ActiveRecord::SchemaMigration Load (0.2ms) SELECT "schema_migrations".* FROM "schema_migrations"
281
281
  ActiveRecord::SchemaMigration Load (0.1ms) SELECT "schema_migrations".* FROM "schema_migrations"
282
+ ActiveRecord::SchemaMigration Load (0.1ms) SELECT "schema_migrations".* FROM "schema_migrations"
283
+ ActiveRecord::SchemaMigration Load (0.1ms) SELECT "schema_migrations".* FROM "schema_migrations"