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
- actual == value || case actual
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 == value
31
+ end
32
32
  end
33
33
  return (match && actuals.size == 0),
34
34
  :styles => @options[:styles].inspect, :actual => attachment_definition[:styles].inspect
@@ -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/validate_attachment_content_type_matcher'
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
- validate_attachment_content_type:
35
- description: "validate attachment content type of attached file {{attribute}}"
34
+ allow_attachment_content_type_for:
35
+ description: "allow {{in}} as content type for attachment {{attribute}}"
36
36
  expectations:
37
- allows_match: "{{subject_name}} to accept content types {{allows}} for attached file {{attribute}}"
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.2
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/validate_attachment_content_type_matcher.rb
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