lawrencepit-remarkable_paperclip 0.6.2 → 0.6.3
Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,46 @@
|
|
1
|
+
module Remarkable
|
2
|
+
module Paperclip
|
3
|
+
module Matchers
|
4
|
+
class AllowAttachmentContentTypeForMatcher < Remarkable::ActiveRecord::Base
|
5
|
+
arguments :attribute
|
6
|
+
|
7
|
+
optional :in, :splat => true
|
8
|
+
|
9
|
+
assertions :is_valid?
|
10
|
+
|
11
|
+
protected
|
12
|
+
|
13
|
+
def is_valid?
|
14
|
+
@options[:in].each do |value|
|
15
|
+
return false, :value => value.inspect unless allow?(value)
|
16
|
+
end
|
17
|
+
true
|
18
|
+
end
|
19
|
+
|
20
|
+
def interpolation_options
|
21
|
+
{ :in => array_to_sentence(@options[:in].map{|i| i.inspect}) }
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
def allow?(content_types)
|
27
|
+
content_types.all? do |content_type|
|
28
|
+
file = StringIO.new
|
29
|
+
file.content_type = content_type
|
30
|
+
attachment = @subject.attachment_for(@attribute)
|
31
|
+
attachment.assign(file)
|
32
|
+
attachment.errors[:content_type].nil?
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
|
38
|
+
def allow_attachment_content_type_for(attribute, *args, &block)
|
39
|
+
options = args.extract_options!
|
40
|
+
AllowAttachmentContentTypeForMatcher.new(attribute, options.merge!(:in => args), &block).spec(self)
|
41
|
+
end
|
42
|
+
alias_method :validate_attachment_content_type, :allow_attachment_content_type_for
|
43
|
+
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -24,11 +24,11 @@ module Remarkable
|
|
24
24
|
actuals = attachment_definition[:styles].clone
|
25
25
|
match = @options[:styles].all? do |key, value|
|
26
26
|
actual = actuals.delete(key)
|
27
|
-
|
27
|
+
value == actual || value == case actual
|
28
28
|
when Hash then actual[:geometry]
|
29
29
|
when Array then actual[0]
|
30
30
|
else actual
|
31
|
-
end
|
31
|
+
end
|
32
32
|
end
|
33
33
|
return (match && actuals.size == 0),
|
34
34
|
:styles => @options[:styles].inspect, :actual => attachment_definition[:styles].inspect
|
data/lib/remarkable_paperclip.rb
CHANGED
@@ -2,7 +2,7 @@ require 'paperclip/extension'
|
|
2
2
|
require 'matchers/have_attached_file_matcher'
|
3
3
|
require 'matchers/validate_attachment_size_matcher'
|
4
4
|
require 'matchers/validate_attachment_presence_matcher'
|
5
|
-
require 'matchers/
|
5
|
+
require 'matchers/allow_attachment_content_type_for_matcher'
|
6
6
|
|
7
7
|
if defined?(Spec::Rails)
|
8
8
|
Remarkable.include_matchers!(Remarkable::Paperclip, Spec::Rails::Example::ModelExampleGroup)
|
data/locale/en.yml
CHANGED
@@ -31,13 +31,7 @@ en:
|
|
31
31
|
description: "validate attachment presence of attached file {{attribute}}"
|
32
32
|
expectations:
|
33
33
|
invalid_when_not_present: "{{subject_name}} to be invalid when attached file {{attribute}} is not present"
|
34
|
-
|
35
|
-
description: "
|
34
|
+
allow_attachment_content_type_for:
|
35
|
+
description: "allow {{in}} as content type for attachment {{attribute}}"
|
36
36
|
expectations:
|
37
|
-
|
38
|
-
rejects_match: "{{subject_name}} to reject content types {{rejects}} for attached file {{attribute}}"
|
39
|
-
optionals:
|
40
|
-
allows:
|
41
|
-
positive: "allowing {{inspect}}"
|
42
|
-
rejects:
|
43
|
-
positive: "rejecting {{inspect}}"
|
37
|
+
is_valid: "{{subject_name}} to be valid when content type for attachment {{attribute}} is set to {{value}}"
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lawrencepit-remarkable_paperclip
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.6.
|
4
|
+
version: 0.6.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Lawrence Pit
|
@@ -30,7 +30,7 @@ files:
|
|
30
30
|
- lib/matchers/have_attached_file_matcher.rb
|
31
31
|
- lib/matchers/validate_attachment_presence_matcher.rb
|
32
32
|
- lib/matchers/validate_attachment_size_matcher.rb
|
33
|
-
- lib/matchers/
|
33
|
+
- lib/matchers/allow_attachment_content_type_for_matcher.rb
|
34
34
|
has_rdoc: false
|
35
35
|
homepage: http://github.com/lawrencepit/remarkable_paperclip
|
36
36
|
post_install_message:
|
@@ -1,47 +0,0 @@
|
|
1
|
-
module Remarkable
|
2
|
-
module Paperclip
|
3
|
-
module Matchers
|
4
|
-
class ValidateAttachmentContentTypeMatcher < Remarkable::ActiveRecord::Base
|
5
|
-
arguments :attribute
|
6
|
-
|
7
|
-
optionals :allows, :rejects
|
8
|
-
|
9
|
-
assertions :allows_match?, :rejects_match?
|
10
|
-
|
11
|
-
protected
|
12
|
-
|
13
|
-
def allows_match?
|
14
|
-
return true unless @options.key?(:allows)
|
15
|
-
allow?(@options[:allows])
|
16
|
-
end
|
17
|
-
|
18
|
-
def rejects_match?
|
19
|
-
return true unless @options.key?(:rejects)
|
20
|
-
!allow?(@options[:rejects])
|
21
|
-
end
|
22
|
-
|
23
|
-
def interpolation_options
|
24
|
-
{ :allows => @options[:allows].inspect, :rejects => @options[:rejects].inspect }
|
25
|
-
end
|
26
|
-
|
27
|
-
private
|
28
|
-
|
29
|
-
def allow?(content_types)
|
30
|
-
content_types.all? do |content_type|
|
31
|
-
file = StringIO.new
|
32
|
-
file.content_type = content_type
|
33
|
-
attachment = @subject.attachment_for(@attribute)
|
34
|
-
attachment.assign(file)
|
35
|
-
attachment.errors[:content_type].nil?
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
end
|
40
|
-
|
41
|
-
def validate_attachment_content_type(*args)
|
42
|
-
ValidateAttachmentContentTypeMatcher.new(*args).spec(self)
|
43
|
-
end
|
44
|
-
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|