carrierwave_direct 0.0.13 → 0.0.17
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 +4 -4
 - data/.gitignore +1 -0
 - data/.travis.yml +15 -1
 - data/Changelog.md +130 -0
 - data/Gemfile +1 -1
 - data/README.md +82 -45
 - data/carrierwave_direct.gemspec +3 -4
 - data/gemfiles/3.2.gemfile +13 -0
 - data/gemfiles/4.0.gemfile +13 -0
 - data/gemfiles/4.1.gemfile +13 -0
 - data/lib/carrierwave_direct/form_builder.rb +48 -11
 - data/lib/carrierwave_direct/locale/nl.yml +9 -0
 - data/lib/carrierwave_direct/mount.rb +16 -4
 - data/lib/carrierwave_direct/orm/activerecord.rb +4 -4
 - data/lib/carrierwave_direct/test/capybara_helpers.rb +7 -5
 - data/lib/carrierwave_direct/uploader/configuration.rb +4 -2
 - data/lib/carrierwave_direct/uploader/content_type.rb +28 -0
 - data/lib/carrierwave_direct/uploader/direct_url.rb +15 -0
 - data/lib/carrierwave_direct/uploader.rb +79 -68
 - data/lib/carrierwave_direct/validations/active_model.rb +5 -4
 - data/lib/carrierwave_direct/version.rb +1 -1
 - data/lib/carrierwave_direct.rb +6 -8
 - data/spec/action_view_extensions/form_helper_spec.rb +4 -5
 - data/spec/data/sample_data.rb +41 -0
 - data/spec/form_builder_spec.rb +139 -6
 - data/spec/mount_spec.rb +13 -26
 - data/spec/orm/activerecord_spec.rb +69 -19
 - data/spec/spec_helper.rb +16 -2
 - data/spec/support/form_builder_helpers.rb +1 -0
 - data/spec/support/model_helpers.rb +7 -7
 - data/spec/support/view_helpers.rb +12 -2
 - data/spec/test/capybara_helpers_spec.rb +28 -26
 - data/spec/test/helpers_spec.rb +9 -11
 - data/spec/uploader/configuration_spec.rb +46 -0
 - data/spec/uploader/content_type_spec.rb +40 -0
 - data/spec/uploader/direct_url_spec.rb +26 -0
 - data/spec/uploader_spec.rb +145 -184
 - metadata +40 -39
 
    
        data/spec/uploader_spec.rb
    CHANGED
    
    | 
         @@ -1,87 +1,25 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # encoding: utf-8
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
2 
     | 
    
         
             
            require 'spec_helper'
         
     | 
| 
      
 3 
     | 
    
         
            +
            require 'data/sample_data'
         
     | 
| 
       4 
4 
     | 
    
         | 
| 
       5 
5 
     | 
    
         
             
            describe CarrierWaveDirect::Uploader do
         
     | 
| 
       6 
6 
     | 
    
         
             
              include UploaderHelpers
         
     | 
| 
       7 
7 
     | 
    
         
             
              include ModelHelpers
         
     | 
| 
       8 
8 
     | 
    
         | 
| 
       9 
     | 
    
         
            -
              SAMPLE_DATA = {
         
     | 
| 
       10 
     | 
    
         
            -
                :path => "upload_dir/bliind.exe",
         
     | 
| 
       11 
     | 
    
         
            -
                :path_with_special_chars => "upload_dir/some file & blah.exe",
         
     | 
| 
       12 
     | 
    
         
            -
                :key => "some key",
         
     | 
| 
       13 
     | 
    
         
            -
                :guid => "guid",
         
     | 
| 
       14 
     | 
    
         
            -
                :store_dir => "store_dir",
         
     | 
| 
       15 
     | 
    
         
            -
                :extension_regexp => "(avi)",
         
     | 
| 
       16 
     | 
    
         
            -
                :url => "http://example.com/some_url",
         
     | 
| 
       17 
     | 
    
         
            -
                :expiration => 60,
         
     | 
| 
       18 
     | 
    
         
            -
                :min_file_size => 1024,
         
     | 
| 
       19 
     | 
    
         
            -
                :max_file_size => 10485760,
         
     | 
| 
       20 
     | 
    
         
            -
                :file_url => "http://anyurl.com/any_path/video_dir/filename.avi",
         
     | 
| 
       21 
     | 
    
         
            -
                :mounted_model_name => "Porno",
         
     | 
| 
       22 
     | 
    
         
            -
                :mounted_as => :video,
         
     | 
| 
       23 
     | 
    
         
            -
                :filename => "filename",
         
     | 
| 
       24 
     | 
    
         
            -
                :extension => ".avi",
         
     | 
| 
       25 
     | 
    
         
            -
                :version => :thumb,
         
     | 
| 
       26 
     | 
    
         
            -
                :s3_bucket_url => "https://s3-bucket.s3.amazonaws.com"
         
     | 
| 
       27 
     | 
    
         
            -
              }
         
     | 
| 
       28 
     | 
    
         
            -
             
     | 
| 
       29 
     | 
    
         
            -
              SAMPLE_DATA.merge!(
         
     | 
| 
       30 
     | 
    
         
            -
                :stored_filename_base => "#{sample(:guid)}/#{sample(:filename)}"
         
     | 
| 
       31 
     | 
    
         
            -
              )
         
     | 
| 
       32 
     | 
    
         
            -
             
     | 
| 
       33 
     | 
    
         
            -
              SAMPLE_DATA.merge!(
         
     | 
| 
       34 
     | 
    
         
            -
                :stored_filename => "#{sample(:stored_filename_base)}#{sample(:extension)}",
         
     | 
| 
       35 
     | 
    
         
            -
                :stored_version_filename => "#{sample(:stored_filename_base)}_#{sample(:version)}#{sample(:extension)}"
         
     | 
| 
       36 
     | 
    
         
            -
              )
         
     | 
| 
       37 
     | 
    
         
            -
             
     | 
| 
       38 
     | 
    
         
            -
              SAMPLE_DATA.merge!(
         
     | 
| 
       39 
     | 
    
         
            -
                :s3_key => "#{sample(:store_dir)}/#{sample(:stored_filename)}"
         
     | 
| 
       40 
     | 
    
         
            -
              )
         
     | 
| 
       41 
     | 
    
         
            -
             
     | 
| 
       42 
     | 
    
         
            -
              SAMPLE_DATA.merge!(
         
     | 
| 
       43 
     | 
    
         
            -
                :s3_file_url => "#{sample(:s3_bucket_url)}/#{sample(:s3_key)}"
         
     | 
| 
       44 
     | 
    
         
            -
              )
         
     | 
| 
       45 
     | 
    
         
            -
             
     | 
| 
       46 
     | 
    
         
            -
              SAMPLE_DATA.freeze
         
     | 
| 
       47 
     | 
    
         
            -
             
     | 
| 
       48 
9 
     | 
    
         
             
              let(:subject) { DirectUploader.new }
         
     | 
| 
       49 
     | 
    
         
            -
              let(:mounted_model) {  
     | 
| 
      
 10 
     | 
    
         
            +
              let(:mounted_model) { double(sample(:mounted_model_name), video_identifier: sample(:stored_filename)) }
         
     | 
| 
       50 
11 
     | 
    
         
             
              let(:mounted_subject) { DirectUploader.new(mounted_model, sample(:mounted_as)) }
         
     | 
| 
       51 
12 
     | 
    
         
             
              let(:direct_subject) { DirectUploader.new }
         
     | 
| 
       52 
13 
     | 
    
         | 
| 
       53 
     | 
    
         
            -
              describe ".upload_expiration" do
         
     | 
| 
       54 
     | 
    
         
            -
                it "should be 10 hours" do
         
     | 
| 
       55 
     | 
    
         
            -
                  subject.class.upload_expiration.should == 36000
         
     | 
| 
       56 
     | 
    
         
            -
                end
         
     | 
| 
       57 
     | 
    
         
            -
              end
         
     | 
| 
       58 
     | 
    
         
            -
             
     | 
| 
       59 
     | 
    
         
            -
              describe ".min_file_size" do
         
     | 
| 
       60 
     | 
    
         
            -
                it "should be 1 byte" do
         
     | 
| 
       61 
     | 
    
         
            -
                  subject.class.min_file_size.should == 1
         
     | 
| 
       62 
     | 
    
         
            -
                end
         
     | 
| 
       63 
     | 
    
         
            -
              end
         
     | 
| 
       64 
     | 
    
         
            -
             
     | 
| 
       65 
     | 
    
         
            -
              describe ".max_file_size" do
         
     | 
| 
       66 
     | 
    
         
            -
                it "should be 5 MB" do
         
     | 
| 
       67 
     | 
    
         
            -
                  subject.class.max_file_size.should == 5242880
         
     | 
| 
       68 
     | 
    
         
            -
                end
         
     | 
| 
       69 
     | 
    
         
            -
              end
         
     | 
| 
       70 
     | 
    
         
            -
             
     | 
| 
       71 
     | 
    
         
            -
              describe ".use_action_status" do
         
     | 
| 
       72 
     | 
    
         
            -
                it "should be false" do
         
     | 
| 
       73 
     | 
    
         
            -
                  subject.class.use_action_status.should be_false
         
     | 
| 
       74 
     | 
    
         
            -
                end
         
     | 
| 
       75 
     | 
    
         
            -
              end
         
     | 
| 
       76 
14 
     | 
    
         | 
| 
       77 
15 
     | 
    
         
             
              DirectUploader.fog_credentials.keys.each do |key|
         
     | 
| 
       78 
16 
     | 
    
         
             
                describe "##{key}" do
         
     | 
| 
       79 
17 
     | 
    
         
             
                  it "should return the #{key.to_s.capitalize}" do
         
     | 
| 
       80 
     | 
    
         
            -
                    subject.send(key). 
     | 
| 
      
 18 
     | 
    
         
            +
                    expect(subject.send(key)).to eq subject.class.fog_credentials[key]
         
     | 
| 
       81 
19 
     | 
    
         
             
                  end
         
     | 
| 
       82 
20 
     | 
    
         | 
| 
       83 
21 
     | 
    
         
             
                  it "should not be nil" do
         
     | 
| 
       84 
     | 
    
         
            -
                    subject.send(key). 
     | 
| 
      
 22 
     | 
    
         
            +
                    expect(subject.send(key)).to_not be_nil
         
     | 
| 
       85 
23 
     | 
    
         
             
                  end
         
     | 
| 
       86 
24 
     | 
    
         
             
                end
         
     | 
| 
       87 
25 
     | 
    
         
             
              end
         
     | 
| 
         @@ -93,13 +31,13 @@ describe CarrierWaveDirect::Uploader do 
     | 
|
| 
       93 
31 
     | 
    
         
             
                before { subject.key = sample(:key) }
         
     | 
| 
       94 
32 
     | 
    
         | 
| 
       95 
33 
     | 
    
         
             
                it "should set the key" do
         
     | 
| 
       96 
     | 
    
         
            -
                  subject.key. 
     | 
| 
      
 34 
     | 
    
         
            +
                  expect(subject.key).to eq sample(:key)
         
     | 
| 
       97 
35 
     | 
    
         
             
                end
         
     | 
| 
       98 
36 
     | 
    
         | 
| 
       99 
37 
     | 
    
         
             
                context "the versions keys" do
         
     | 
| 
       100 
38 
     | 
    
         
             
                  it "should == this subject's key" do
         
     | 
| 
       101 
39 
     | 
    
         
             
                    subject.versions.each do |name, version_subject|
         
     | 
| 
       102 
     | 
    
         
            -
                      version_subject.key. 
     | 
| 
      
 40 
     | 
    
         
            +
                      expect(version_subject.key).to eq subject.key
         
     | 
| 
       103 
41 
     | 
    
         
             
                    end
         
     | 
| 
       104 
42 
     | 
    
         
             
                  end
         
     | 
| 
       105 
43 
     | 
    
         
             
                end
         
     | 
| 
         @@ -112,39 +50,40 @@ describe CarrierWaveDirect::Uploader do 
     | 
|
| 
       112 
50 
     | 
    
         
             
                  end
         
     | 
| 
       113 
51 
     | 
    
         | 
| 
       114 
52 
     | 
    
         
             
                  it "should return '*/\#\{guid\}/${filename}'" do
         
     | 
| 
       115 
     | 
    
         
            -
                    mounted_subject.key. 
     | 
| 
      
 53 
     | 
    
         
            +
                    expect(mounted_subject.key).to match /#{GUID_REGEXP}\/\$\{filename\}$/
         
     | 
| 
       116 
54 
     | 
    
         
             
                  end
         
     | 
| 
       117 
55 
     | 
    
         | 
| 
       118 
56 
     | 
    
         
             
                  context "and #store_dir returns '#{sample(:store_dir)}'" do
         
     | 
| 
       119 
57 
     | 
    
         
             
                    before do
         
     | 
| 
       120 
     | 
    
         
            -
                      mounted_subject. 
     | 
| 
      
 58 
     | 
    
         
            +
                      allow(mounted_subject).to receive(:store_dir).and_return(sample(:store_dir))
         
     | 
| 
       121 
59 
     | 
    
         
             
                    end
         
     | 
| 
       122 
60 
     | 
    
         | 
| 
       123 
61 
     | 
    
         
             
                    it "should return '#{sample(:store_dir)}/\#\{guid\}/${filename}'" do
         
     | 
| 
       124 
     | 
    
         
            -
                      mounted_subject.key. 
     | 
| 
      
 62 
     | 
    
         
            +
                      expect(mounted_subject.key).to match /^#{sample(:store_dir)}\/#{GUID_REGEXP}\/\$\{filename\}$/
         
     | 
| 
       125 
63 
     | 
    
         
             
                    end
         
     | 
| 
       126 
64 
     | 
    
         
             
                  end
         
     | 
| 
       127 
65 
     | 
    
         | 
| 
       128 
66 
     | 
    
         
             
                  context "and the uploaders url is #default_url" do
         
     | 
| 
       129 
67 
     | 
    
         
             
                    it "should return '*/\#\{guid\}/${filename}'" do
         
     | 
| 
       130 
     | 
    
         
            -
                      mounted_subject. 
     | 
| 
       131 
     | 
    
         
            -
                      mounted_subject. 
     | 
| 
       132 
     | 
    
         
            -
                      mounted_subject.key. 
     | 
| 
      
 68 
     | 
    
         
            +
                      allow(mounted_subject).to receive(:url).and_return(sample(:s3_file_url))
         
     | 
| 
      
 69 
     | 
    
         
            +
                      allow(mounted_subject).to receive(:present?).and_return(false)
         
     | 
| 
      
 70 
     | 
    
         
            +
                      expect(mounted_subject.key).to match /#{GUID_REGEXP}\/\$\{filename\}$/
         
     | 
| 
       133 
71 
     | 
    
         
             
                    end
         
     | 
| 
       134 
72 
     | 
    
         
             
                  end
         
     | 
| 
       135 
73 
     | 
    
         | 
| 
       136 
74 
     | 
    
         
             
                  context "but the uploaders url is '#{sample(:s3_file_url)}'" do
         
     | 
| 
       137 
75 
     | 
    
         
             
                    before do
         
     | 
| 
       138 
     | 
    
         
            -
                      mounted_subject. 
     | 
| 
       139 
     | 
    
         
            -
                      mounted_subject. 
     | 
| 
      
 76 
     | 
    
         
            +
                      allow(mounted_subject).to receive(:store_dir).and_return(sample(:store_dir))
         
     | 
| 
      
 77 
     | 
    
         
            +
                      allow(mounted_subject).to receive(:url).and_return(sample(:s3_file_url))
         
     | 
| 
      
 78 
     | 
    
         
            +
                      allow(mounted_subject).to receive(:present?).and_return(true)
         
     | 
| 
       140 
79 
     | 
    
         
             
                    end
         
     | 
| 
       141 
80 
     | 
    
         | 
| 
       142 
81 
     | 
    
         
             
                    it "should return '#{sample(:s3_key)}'" do
         
     | 
| 
       143 
     | 
    
         
            -
                      mounted_subject.key. 
     | 
| 
      
 82 
     | 
    
         
            +
                      expect(mounted_subject.key).to eq sample(:s3_key)
         
     | 
| 
       144 
83 
     | 
    
         
             
                    end
         
     | 
| 
       145 
84 
     | 
    
         | 
| 
       146 
85 
     | 
    
         
             
                    it "should set the key explicitly in order to update the version keys" do
         
     | 
| 
       147 
     | 
    
         
            -
                      mounted_subject. 
     | 
| 
      
 86 
     | 
    
         
            +
                      expect(mounted_subject).to receive("key=").with(sample(:s3_key))
         
     | 
| 
       148 
87 
     | 
    
         
             
                      mounted_subject.key
         
     | 
| 
       149 
88 
     | 
    
         
             
                    end
         
     | 
| 
       150 
89 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -154,34 +93,35 @@ describe CarrierWaveDirect::Uploader do 
     | 
|
| 
       154 
93 
     | 
    
         
             
                  before { subject.key = sample(:key) }
         
     | 
| 
       155 
94 
     | 
    
         | 
| 
       156 
95 
     | 
    
         
             
                  it "should return '#{sample(:key)}'" do
         
     | 
| 
       157 
     | 
    
         
            -
                    subject.key. 
     | 
| 
      
 96 
     | 
    
         
            +
                    expect(subject.key).to eq sample(:key)
         
     | 
| 
       158 
97 
     | 
    
         
             
                  end
         
     | 
| 
       159 
98 
     | 
    
         
             
                end
         
     | 
| 
       160 
99 
     | 
    
         
             
              end
         
     | 
| 
       161 
100 
     | 
    
         | 
| 
       162 
101 
     | 
    
         
             
              describe "#url_scheme_white_list" do
         
     | 
| 
       163 
102 
     | 
    
         
             
                it "should return nil" do
         
     | 
| 
       164 
     | 
    
         
            -
                  subject.url_scheme_white_list. 
     | 
| 
      
 103 
     | 
    
         
            +
                  expect(subject.url_scheme_white_list).to be_nil
         
     | 
| 
       165 
104 
     | 
    
         
             
                end
         
     | 
| 
       166 
105 
     | 
    
         
             
              end
         
     | 
| 
       167 
106 
     | 
    
         | 
| 
       168 
107 
     | 
    
         
             
              describe "#key_regexp" do
         
     | 
| 
       169 
108 
     | 
    
         
             
                it "should return a regexp" do
         
     | 
| 
       170 
     | 
    
         
            -
                  subject.key_regexp. 
     | 
| 
      
 109 
     | 
    
         
            +
                  expect(subject.key_regexp).to be_a(Regexp)
         
     | 
| 
       171 
110 
     | 
    
         
             
                end
         
     | 
| 
       172 
111 
     | 
    
         | 
| 
       173 
112 
     | 
    
         
             
                context "where #store_dir returns '#{sample(:store_dir)}'" do
         
     | 
| 
       174 
113 
     | 
    
         
             
                  before do
         
     | 
| 
       175 
     | 
    
         
            -
                    subject. 
     | 
| 
      
 114 
     | 
    
         
            +
                    allow(subject).to receive(:store_dir).and_return(sample(:store_dir))
         
     | 
| 
      
 115 
     | 
    
         
            +
                    allow(subject).to receive(:cache_dir).and_return(sample(:cache_dir))
         
     | 
| 
       176 
116 
     | 
    
         
             
                  end
         
     | 
| 
       177 
117 
     | 
    
         | 
| 
       178 
118 
     | 
    
         
             
                  context "and #extension_regexp returns '#{sample(:extension_regexp)}'" do
         
     | 
| 
       179 
119 
     | 
    
         
             
                    before do
         
     | 
| 
       180 
     | 
    
         
            -
                      subject. 
     | 
| 
      
 120 
     | 
    
         
            +
                      allow(subject).to receive(:extension_regexp).and_return(sample(:extension_regexp))
         
     | 
| 
       181 
121 
     | 
    
         
             
                    end
         
     | 
| 
       182 
122 
     | 
    
         | 
| 
       183 
     | 
    
         
            -
                    it "should return /\\A#{sample(:store_dir)}\\/#{GUID_REGEXP}\\/.+\\.#{sample(:extension_regexp)}\\z/" do
         
     | 
| 
       184 
     | 
    
         
            -
                      subject.key_regexp. 
     | 
| 
      
 123 
     | 
    
         
            +
                    it "should return /\\A(#{sample(:store_dir)}|#{sample(:cache_dir)})\\/#{GUID_REGEXP}\\/.+\\.#{sample(:extension_regexp)}\\z/" do
         
     | 
| 
      
 124 
     | 
    
         
            +
                      expect(subject.key_regexp).to eq /\A(#{sample(:store_dir)}|#{sample(:cache_dir)})\/#{GUID_REGEXP}\/.+\.(?i)#{sample(:extension_regexp)}(?-i)\z/
         
     | 
| 
       185 
125 
     | 
    
         
             
                    end
         
     | 
| 
       186 
126 
     | 
    
         
             
                  end
         
     | 
| 
       187 
127 
     | 
    
         
             
                end
         
     | 
| 
         @@ -190,17 +130,17 @@ describe CarrierWaveDirect::Uploader do 
     | 
|
| 
       190 
130 
     | 
    
         
             
              describe "#extension_regexp" do
         
     | 
| 
       191 
131 
     | 
    
         
             
                shared_examples_for "a globally allowed file extension" do
         
     | 
| 
       192 
132 
     | 
    
         
             
                  it "should return '\\w+'" do
         
     | 
| 
       193 
     | 
    
         
            -
                    subject.extension_regexp. 
     | 
| 
      
 133 
     | 
    
         
            +
                    expect(subject.extension_regexp).to eq "\\w+"
         
     | 
| 
       194 
134 
     | 
    
         
             
                  end
         
     | 
| 
       195 
135 
     | 
    
         
             
                end
         
     | 
| 
       196 
136 
     | 
    
         | 
| 
       197 
137 
     | 
    
         
             
                it "should return a string" do
         
     | 
| 
       198 
     | 
    
         
            -
                  subject.extension_regexp. 
     | 
| 
      
 138 
     | 
    
         
            +
                  expect(subject.extension_regexp).to be_a(String)
         
     | 
| 
       199 
139 
     | 
    
         
             
                end
         
     | 
| 
       200 
140 
     | 
    
         | 
| 
       201 
141 
     | 
    
         
             
                context "where #extension_white_list returns nil" do
         
     | 
| 
       202 
142 
     | 
    
         
             
                  before do
         
     | 
| 
       203 
     | 
    
         
            -
                    subject. 
     | 
| 
      
 143 
     | 
    
         
            +
                    allow(subject).to receive(:extension_white_list).and_return(nil)
         
     | 
| 
       204 
144 
     | 
    
         
             
                  end
         
     | 
| 
       205 
145 
     | 
    
         | 
| 
       206 
146 
     | 
    
         
             
                  it_should_behave_like "a globally allowed file extension"
         
     | 
| 
         @@ -208,7 +148,7 @@ describe CarrierWaveDirect::Uploader do 
     | 
|
| 
       208 
148 
     | 
    
         | 
| 
       209 
149 
     | 
    
         
             
                context "where #extension_white_list returns []" do
         
     | 
| 
       210 
150 
     | 
    
         
             
                  before do
         
     | 
| 
       211 
     | 
    
         
            -
                    subject. 
     | 
| 
      
 151 
     | 
    
         
            +
                    allow(subject).to receive(:extension_white_list).and_return([])
         
     | 
| 
       212 
152 
     | 
    
         
             
                  end
         
     | 
| 
       213 
153 
     | 
    
         | 
| 
       214 
154 
     | 
    
         
             
                  it_should_behave_like "a globally allowed file extension"
         
     | 
| 
         @@ -217,11 +157,11 @@ describe CarrierWaveDirect::Uploader do 
     | 
|
| 
       217 
157 
     | 
    
         
             
                context "where #extension_white_list returns ['exe', 'bmp']" do
         
     | 
| 
       218 
158 
     | 
    
         | 
| 
       219 
159 
     | 
    
         
             
                  before do
         
     | 
| 
       220 
     | 
    
         
            -
                    subject. 
     | 
| 
      
 160 
     | 
    
         
            +
                    allow(subject).to receive(:extension_white_list).and_return(%w{exe bmp})
         
     | 
| 
       221 
161 
     | 
    
         
             
                  end
         
     | 
| 
       222 
162 
     | 
    
         | 
| 
       223 
163 
     | 
    
         
             
                  it "should return '(exe|bmp)'" do
         
     | 
| 
       224 
     | 
    
         
            -
                    subject.extension_regexp. 
     | 
| 
      
 164 
     | 
    
         
            +
                    expect(subject.extension_regexp).to eq "(exe|bmp)"
         
     | 
| 
       225 
165 
     | 
    
         
             
                  end
         
     | 
| 
       226 
166 
     | 
    
         
             
                end
         
     | 
| 
       227 
167 
     | 
    
         
             
              end
         
     | 
| 
         @@ -230,7 +170,7 @@ describe CarrierWaveDirect::Uploader do 
     | 
|
| 
       230 
170 
     | 
    
         
             
                context "a key has not been set" do
         
     | 
| 
       231 
171 
     | 
    
         | 
| 
       232 
172 
     | 
    
         
             
                  it "should return false" do
         
     | 
| 
       233 
     | 
    
         
            -
                    subject. 
     | 
| 
      
 173 
     | 
    
         
            +
                    expect(subject).to_not have_key
         
     | 
| 
       234 
174 
     | 
    
         
             
                  end
         
     | 
| 
       235 
175 
     | 
    
         
             
                end
         
     | 
| 
       236 
176 
     | 
    
         | 
| 
         @@ -238,7 +178,7 @@ describe CarrierWaveDirect::Uploader do 
     | 
|
| 
       238 
178 
     | 
    
         
             
                  before { subject.key }
         
     | 
| 
       239 
179 
     | 
    
         | 
| 
       240 
180 
     | 
    
         
             
                  it "should return false" do
         
     | 
| 
       241 
     | 
    
         
            -
                    subject. 
     | 
| 
      
 181 
     | 
    
         
            +
                    expect(subject).to_not have_key
         
     | 
| 
       242 
182 
     | 
    
         
             
                  end
         
     | 
| 
       243 
183 
     | 
    
         
             
                end
         
     | 
| 
       244 
184 
     | 
    
         | 
| 
         @@ -246,47 +186,14 @@ describe CarrierWaveDirect::Uploader do 
     | 
|
| 
       246 
186 
     | 
    
         
             
                  before { subject.key = sample_key }
         
     | 
| 
       247 
187 
     | 
    
         | 
| 
       248 
188 
     | 
    
         
             
                  it "should return true" do
         
     | 
| 
       249 
     | 
    
         
            -
                    subject. 
     | 
| 
       250 
     | 
    
         
            -
                  end
         
     | 
| 
       251 
     | 
    
         
            -
                end
         
     | 
| 
       252 
     | 
    
         
            -
              end
         
     | 
| 
       253 
     | 
    
         
            -
             
     | 
| 
       254 
     | 
    
         
            -
              describe "#direct_fog_url" do
         
     | 
| 
       255 
     | 
    
         
            -
                it "should return the result from CarrierWave::Storage::Fog::File#public_url" do
         
     | 
| 
       256 
     | 
    
         
            -
                  subject.direct_fog_url.should == CarrierWave::Storage::Fog::File.new(
         
     | 
| 
       257 
     | 
    
         
            -
                    subject, nil, nil
         
     | 
| 
       258 
     | 
    
         
            -
                  ).public_url
         
     | 
| 
       259 
     | 
    
         
            -
                end
         
     | 
| 
       260 
     | 
    
         
            -
             
     | 
| 
       261 
     | 
    
         
            -
                context ":with_path => true" do
         
     | 
| 
       262 
     | 
    
         
            -
             
     | 
| 
       263 
     | 
    
         
            -
                  context "#key is set to '#{sample(:path_with_special_chars)}'" do
         
     | 
| 
       264 
     | 
    
         
            -
                    before { subject.key = sample(:path_with_special_chars) }
         
     | 
| 
       265 
     | 
    
         
            -
             
     | 
| 
       266 
     | 
    
         
            -
                    it "should return the full url with '/#{URI.escape(sample(:path_with_special_chars))}' as the path" do
         
     | 
| 
       267 
     | 
    
         
            -
                      direct_fog_url = CarrierWave::Storage::Fog::File.new(
         
     | 
| 
       268 
     | 
    
         
            -
                        subject, nil, nil
         
     | 
| 
       269 
     | 
    
         
            -
                      ).public_url
         
     | 
| 
       270 
     | 
    
         
            -
                      subject.direct_fog_url(:with_path => true).should == direct_fog_url + "#{URI.escape(sample(:path_with_special_chars))}"
         
     | 
| 
       271 
     | 
    
         
            -
                    end
         
     | 
| 
       272 
     | 
    
         
            -
                  end
         
     | 
| 
       273 
     | 
    
         
            -
             
     | 
| 
       274 
     | 
    
         
            -
                  context "#key is set to '#{sample(:path)}'" do
         
     | 
| 
       275 
     | 
    
         
            -
                    before { subject.key = sample(:path) }
         
     | 
| 
       276 
     | 
    
         
            -
             
     | 
| 
       277 
     | 
    
         
            -
                    it "should return the full url with '/#{sample(:path)}' as the path" do
         
     | 
| 
       278 
     | 
    
         
            -
                      direct_fog_url = CarrierWave::Storage::Fog::File.new(
         
     | 
| 
       279 
     | 
    
         
            -
                        subject, nil, nil
         
     | 
| 
       280 
     | 
    
         
            -
                      ).public_url
         
     | 
| 
       281 
     | 
    
         
            -
                      subject.direct_fog_url(:with_path => true).should == direct_fog_url + "#{sample(:path)}"
         
     | 
| 
       282 
     | 
    
         
            -
                    end
         
     | 
| 
      
 189 
     | 
    
         
            +
                    expect(subject).to have_key
         
     | 
| 
       283 
190 
     | 
    
         
             
                  end
         
     | 
| 
       284 
191 
     | 
    
         
             
                end
         
     | 
| 
       285 
192 
     | 
    
         
             
              end
         
     | 
| 
       286 
193 
     | 
    
         | 
| 
       287 
194 
     | 
    
         
             
              describe "#persisted?" do
         
     | 
| 
       288 
195 
     | 
    
         
             
                it "should return false" do
         
     | 
| 
       289 
     | 
    
         
            -
                  subject. 
     | 
| 
      
 196 
     | 
    
         
            +
                  expect(subject).to_not be_persisted
         
     | 
| 
       290 
197 
     | 
    
         
             
                end
         
     | 
| 
       291 
198 
     | 
    
         
             
              end
         
     | 
| 
       292 
199 
     | 
    
         | 
| 
         @@ -295,7 +202,7 @@ describe CarrierWaveDirect::Uploader do 
     | 
|
| 
       295 
202 
     | 
    
         
             
                  before { mounted_subject.key = sample(:s3_key) }
         
     | 
| 
       296 
203 
     | 
    
         | 
| 
       297 
204 
     | 
    
         
             
                  it "should return '#{sample(:stored_filename)}'" do
         
     | 
| 
       298 
     | 
    
         
            -
                    mounted_subject.filename. 
     | 
| 
      
 205 
     | 
    
         
            +
                    expect(mounted_subject.filename).to eq sample(:stored_filename)
         
     | 
| 
       299 
206 
     | 
    
         
             
                  end
         
     | 
| 
       300 
207 
     | 
    
         
             
                end
         
     | 
| 
       301 
208 
     | 
    
         | 
| 
         @@ -303,7 +210,7 @@ describe CarrierWaveDirect::Uploader do 
     | 
|
| 
       303 
210 
     | 
    
         
             
                  before { subject.key = sample(:key) }
         
     | 
| 
       304 
211 
     | 
    
         | 
| 
       305 
212 
     | 
    
         
             
                  it "should return '#{sample(:key)}'" do
         
     | 
| 
       306 
     | 
    
         
            -
                    subject.filename. 
     | 
| 
      
 213 
     | 
    
         
            +
                    expect(subject.filename).to eq sample(:key)
         
     | 
| 
       307 
214 
     | 
    
         
             
                  end
         
     | 
| 
       308 
215 
     | 
    
         
             
                end
         
     | 
| 
       309 
216 
     | 
    
         | 
| 
         @@ -311,51 +218,51 @@ describe CarrierWaveDirect::Uploader do 
     | 
|
| 
       311 
218 
     | 
    
         
             
                  context "but the model's remote #{sample(:mounted_as)} url is: '#{sample(:file_url)}'" do
         
     | 
| 
       312 
219 
     | 
    
         | 
| 
       313 
220 
     | 
    
         
             
                    before do
         
     | 
| 
       314 
     | 
    
         
            -
                      mounted_subject.model. 
     | 
| 
      
 221 
     | 
    
         
            +
                      allow(mounted_subject.model).to receive(
         
     | 
| 
       315 
222 
     | 
    
         
             
                        "remote_#{mounted_subject.mounted_as}_url"
         
     | 
| 
       316 
223 
     | 
    
         
             
                      ).and_return(sample(:file_url))
         
     | 
| 
       317 
224 
     | 
    
         
             
                    end
         
     | 
| 
       318 
225 
     | 
    
         | 
| 
       319 
226 
     | 
    
         
             
                    it "should set the key to contain '#{File.basename(sample(:file_url))}'" do
         
     | 
| 
       320 
227 
     | 
    
         
             
                      mounted_subject.filename
         
     | 
| 
       321 
     | 
    
         
            -
                      mounted_subject.key. 
     | 
| 
      
 228 
     | 
    
         
            +
                      expect(mounted_subject.key).to match /#{Regexp.escape(File.basename(sample(:file_url)))}$/
         
     | 
| 
       322 
229 
     | 
    
         
             
                    end
         
     | 
| 
       323 
230 
     | 
    
         | 
| 
       324 
231 
     | 
    
         
             
                    it "should return a filename based off the key and remote url" do
         
     | 
| 
       325 
232 
     | 
    
         
             
                      filename = mounted_subject.filename
         
     | 
| 
       326 
     | 
    
         
            -
                      mounted_subject.key. 
     | 
| 
      
 233 
     | 
    
         
            +
                      expect(mounted_subject.key).to match /#{Regexp.escape(filename)}$/
         
     | 
| 
       327 
234 
     | 
    
         
             
                    end
         
     | 
| 
       328 
235 
     | 
    
         | 
| 
       329 
236 
     | 
    
         
             
                    # this ensures that the version subject keys are updated
         
     | 
| 
       330 
237 
     | 
    
         
             
                    # see spec for key= for more details
         
     | 
| 
       331 
238 
     | 
    
         
             
                    it "should set the key explicitly" do
         
     | 
| 
       332 
     | 
    
         
            -
                      mounted_subject. 
     | 
| 
      
 239 
     | 
    
         
            +
                      expect(mounted_subject).to receive(:key=)
         
     | 
| 
       333 
240 
     | 
    
         
             
                      mounted_subject.filename
         
     | 
| 
       334 
241 
     | 
    
         
             
                    end
         
     | 
| 
       335 
242 
     | 
    
         
             
                  end
         
     | 
| 
       336 
243 
     | 
    
         | 
| 
       337 
     | 
    
         
            -
                  context "and the model's remote #{sample(:mounted_as)} url has  
     | 
| 
      
 244 
     | 
    
         
            +
                  context "and the model's remote #{sample(:mounted_as)} url has special characters in it" do
         
     | 
| 
       338 
245 
     | 
    
         
             
                    before do
         
     | 
| 
       339 
     | 
    
         
            -
                      mounted_model. 
     | 
| 
      
 246 
     | 
    
         
            +
                      allow(mounted_model).to receive(
         
     | 
| 
       340 
247 
     | 
    
         
             
                        "remote_#{mounted_subject.mounted_as}_url"
         
     | 
| 
       341 
     | 
    
         
            -
                      ).and_return("http://anyurl.com/any_path/video_dir/filename 2.avi")
         
     | 
| 
      
 248 
     | 
    
         
            +
                      ).and_return("http://anyurl.com/any_path/video_dir/filename ()+[]2.avi")
         
     | 
| 
       342 
249 
     | 
    
         
             
                    end
         
     | 
| 
       343 
250 
     | 
    
         | 
| 
       344 
     | 
    
         
            -
                    it "should be sanitized ( 
     | 
| 
      
 251 
     | 
    
         
            +
                    it "should be sanitized (special characters replaced with _)" do
         
     | 
| 
       345 
252 
     | 
    
         
             
                      mounted_subject.filename
         
     | 
| 
       346 
     | 
    
         
            -
                      mounted_subject.key. 
     | 
| 
      
 253 
     | 
    
         
            +
                      expect(mounted_subject.key).to match /filename___\+__2.avi$/
         
     | 
| 
       347 
254 
     | 
    
         
             
                    end
         
     | 
| 
       348 
255 
     | 
    
         
             
                  end
         
     | 
| 
       349 
256 
     | 
    
         | 
| 
       350 
257 
     | 
    
         
             
                  context "and the model's remote #{sample(:mounted_as)} url is blank" do
         
     | 
| 
       351 
258 
     | 
    
         
             
                    before do
         
     | 
| 
       352 
     | 
    
         
            -
                      mounted_model. 
     | 
| 
      
 259 
     | 
    
         
            +
                      allow(mounted_model).to receive(
         
     | 
| 
       353 
260 
     | 
    
         
             
                        "remote_#{mounted_subject.mounted_as}_url"
         
     | 
| 
       354 
261 
     | 
    
         
             
                      ).and_return nil
         
     | 
| 
       355 
262 
     | 
    
         
             
                    end
         
     | 
| 
       356 
263 
     | 
    
         | 
| 
       357 
264 
     | 
    
         
             
                    it "should return nil" do
         
     | 
| 
       358 
     | 
    
         
            -
                      mounted_subject.filename. 
     | 
| 
      
 265 
     | 
    
         
            +
                      expect(mounted_subject.filename).to be_nil
         
     | 
| 
       359 
266 
     | 
    
         
             
                    end
         
     | 
| 
       360 
267 
     | 
    
         
             
                  end
         
     | 
| 
       361 
268 
     | 
    
         
             
                end
         
     | 
| 
         @@ -363,23 +270,52 @@ describe CarrierWaveDirect::Uploader do 
     | 
|
| 
       363 
270 
     | 
    
         | 
| 
       364 
271 
     | 
    
         
             
              describe "#acl" do
         
     | 
| 
       365 
272 
     | 
    
         
             
                it "should return the correct s3 access policy" do
         
     | 
| 
       366 
     | 
    
         
            -
                  subject.acl. 
     | 
| 
      
 273 
     | 
    
         
            +
                  expect(subject.acl).to eq (subject.fog_public ? 'public-read' : 'private')
         
     | 
| 
       367 
274 
     | 
    
         
             
                end
         
     | 
| 
       368 
275 
     | 
    
         
             
              end
         
     | 
| 
       369 
276 
     | 
    
         | 
| 
       370 
277 
     | 
    
         
             
              # http://aws.amazon.com/articles/1434?_encoding=UTF8
         
     | 
| 
       371 
278 
     | 
    
         
             
              describe "#policy" do
         
     | 
| 
       372 
     | 
    
         
            -
             
     | 
| 
      
 279 
     | 
    
         
            +
             
     | 
| 
      
 280 
     | 
    
         
            +
             
     | 
| 
      
 281 
     | 
    
         
            +
                def decoded_policy(options = {}, &block)
         
     | 
| 
       373 
282 
     | 
    
         
             
                  instance = options.delete(:subject) || subject
         
     | 
| 
       374 
     | 
    
         
            -
                  JSON.parse(Base64.decode64(instance.policy(options)))
         
     | 
| 
      
 283 
     | 
    
         
            +
                  JSON.parse(Base64.decode64(instance.policy(options, &block)))
         
     | 
| 
      
 284 
     | 
    
         
            +
                end
         
     | 
| 
      
 285 
     | 
    
         
            +
             
     | 
| 
      
 286 
     | 
    
         
            +
                context "policy is given a block" do
         
     | 
| 
      
 287 
     | 
    
         
            +
                  it "should yield the options to the block" do
         
     | 
| 
      
 288 
     | 
    
         
            +
                    number = 0
         
     | 
| 
      
 289 
     | 
    
         
            +
                    subject.policy do |conditions|
         
     | 
| 
      
 290 
     | 
    
         
            +
                      number+=1
         
     | 
| 
      
 291 
     | 
    
         
            +
                    end
         
     | 
| 
      
 292 
     | 
    
         
            +
                    expect(number).to eq 1
         
     | 
| 
      
 293 
     | 
    
         
            +
                  end
         
     | 
| 
      
 294 
     | 
    
         
            +
                  it "should include new options in the conditions" do
         
     | 
| 
      
 295 
     | 
    
         
            +
                    policy = subject.policy do |conditions|
         
     | 
| 
      
 296 
     | 
    
         
            +
                      conditions << {"x-aws-storage-class" => "STANDARD"}
         
     | 
| 
      
 297 
     | 
    
         
            +
                    end
         
     | 
| 
      
 298 
     | 
    
         
            +
                    decoded = JSON.parse(Base64.decode64(policy))
         
     | 
| 
      
 299 
     | 
    
         
            +
                    expect(decoded['conditions'].last['x-aws-storage-class']).to eq "STANDARD"
         
     | 
| 
      
 300 
     | 
    
         
            +
                  end
         
     | 
| 
       375 
301 
     | 
    
         
             
                end
         
     | 
| 
       376 
302 
     | 
    
         | 
| 
       377 
303 
     | 
    
         
             
                it "should return Base64-encoded JSON" do
         
     | 
| 
       378 
     | 
    
         
            -
                  decoded_policy. 
     | 
| 
      
 304 
     | 
    
         
            +
                  expect(decoded_policy).to be_a(Hash)
         
     | 
| 
       379 
305 
     | 
    
         
             
                end
         
     | 
| 
       380 
306 
     | 
    
         | 
| 
       381 
307 
     | 
    
         
             
                it "should not contain any new lines" do
         
     | 
| 
       382 
     | 
    
         
            -
                  subject.policy. 
     | 
| 
      
 308 
     | 
    
         
            +
                  expect(subject.policy).to_not include("\n")
         
     | 
| 
      
 309 
     | 
    
         
            +
                end
         
     | 
| 
      
 310 
     | 
    
         
            +
             
     | 
| 
      
 311 
     | 
    
         
            +
                it "should be cached" do
         
     | 
| 
      
 312 
     | 
    
         
            +
                  Timecop.freeze(Time.now) do
         
     | 
| 
      
 313 
     | 
    
         
            +
                    @policy_now = subject.policy
         
     | 
| 
      
 314 
     | 
    
         
            +
                  end
         
     | 
| 
      
 315 
     | 
    
         
            +
                  Timecop.freeze(1.second.from_now) do
         
     | 
| 
      
 316 
     | 
    
         
            +
                    @policy_later = subject.policy
         
     | 
| 
      
 317 
     | 
    
         
            +
                  end
         
     | 
| 
      
 318 
     | 
    
         
            +
                  expect(@policy_later).to eql @policy_now
         
     | 
| 
       383 
319 
     | 
    
         
             
                end
         
     | 
| 
       384 
320 
     | 
    
         | 
| 
       385 
321 
     | 
    
         
             
                context "expiration" do
         
     | 
| 
         @@ -387,29 +323,30 @@ describe CarrierWaveDirect::Uploader do 
     | 
|
| 
       387 
323 
     | 
    
         
             
                    decoded_policy(options)["expiration"]
         
     | 
| 
       388 
324 
     | 
    
         
             
                  end
         
     | 
| 
       389 
325 
     | 
    
         | 
| 
      
 326 
     | 
    
         
            +
                  # JSON times have no seconds, so accept upto one second inaccuracy
         
     | 
| 
       390 
327 
     | 
    
         
             
                  def have_expiration(expires_in = DirectUploader.upload_expiration)
         
     | 
| 
       391 
     | 
    
         
            -
                     
     | 
| 
       392 
     | 
    
         
            -
             
     | 
| 
       393 
     | 
    
         
            -
             
     | 
| 
       394 
     | 
    
         
            -
             
     | 
| 
       395 
     | 
    
         
            -
             
     | 
| 
       396 
     | 
    
         
            -
             
     | 
| 
       397 
     | 
    
         
            -
                    )
         
     | 
| 
      
 328 
     | 
    
         
            +
                    be_within(1.second).of (Time.now + expires_in)
         
     | 
| 
      
 329 
     | 
    
         
            +
                  end
         
     | 
| 
      
 330 
     | 
    
         
            +
             
     | 
| 
      
 331 
     | 
    
         
            +
                  it "should be valid ISO8601 and not use default Time#to_json" do
         
     | 
| 
      
 332 
     | 
    
         
            +
                    Time.any_instance.stub(:to_json) { '"Invalid time"' } # JSON gem
         
     | 
| 
      
 333 
     | 
    
         
            +
                    Time.any_instance.stub(:as_json) { '"Invalid time"' } # Active Support
         
     | 
| 
      
 334 
     | 
    
         
            +
                    expect { Time.iso8601(expiration) }.to_not raise_error
         
     | 
| 
       398 
335 
     | 
    
         
             
                  end
         
     | 
| 
       399 
336 
     | 
    
         | 
| 
       400 
337 
     | 
    
         
             
                  it "should be #{DirectUploader.upload_expiration / 3600} hours from now" do
         
     | 
| 
       401 
338 
     | 
    
         
             
                    Timecop.freeze(Time.now) do
         
     | 
| 
       402 
     | 
    
         
            -
                      Time.parse(expiration). 
     | 
| 
      
 339 
     | 
    
         
            +
                      expect(Time.parse(expiration)).to have_expiration
         
     | 
| 
       403 
340 
     | 
    
         
             
                    end
         
     | 
| 
       404 
341 
     | 
    
         
             
                  end
         
     | 
| 
       405 
342 
     | 
    
         | 
| 
       406 
343 
     | 
    
         
             
                  it "should be encoded as a utc time" do
         
     | 
| 
       407 
     | 
    
         
            -
                    Time.parse(expiration). 
     | 
| 
      
 344 
     | 
    
         
            +
                    expect(Time.parse(expiration)).to be_utc
         
     | 
| 
       408 
345 
     | 
    
         
             
                  end
         
     | 
| 
       409 
346 
     | 
    
         | 
| 
       410 
347 
     | 
    
         
             
                  it "should be #{sample(:expiration) / 60 } minutes from now when passing {:expiration => #{sample(:expiration)}}" do
         
     | 
| 
       411 
348 
     | 
    
         
             
                    Timecop.freeze(Time.now) do
         
     | 
| 
       412 
     | 
    
         
            -
                      Time.parse(expiration(:expiration => sample(:expiration))). 
     | 
| 
      
 349 
     | 
    
         
            +
                      expect(Time.parse(expiration(:expiration => sample(:expiration)))).to have_expiration(sample(:expiration))
         
     | 
| 
       413 
350 
     | 
    
         
             
                    end
         
     | 
| 
       414 
351 
     | 
    
         
             
                  end
         
     | 
| 
       415 
352 
     | 
    
         
             
                end
         
     | 
| 
         @@ -424,40 +361,49 @@ describe CarrierWaveDirect::Uploader do 
     | 
|
| 
       424 
361 
     | 
    
         
             
                  end
         
     | 
| 
       425 
362 
     | 
    
         | 
| 
       426 
363 
     | 
    
         
             
                  context "should include" do
         
     | 
| 
       427 
     | 
    
         
            -
                     
     | 
| 
       428 
     | 
    
         
            -
             
     | 
| 
       429 
     | 
    
         
            -
             
     | 
| 
      
 364 
     | 
    
         
            +
                    it "'utf8' if enforce_ut8 is set" do
         
     | 
| 
      
 365 
     | 
    
         
            +
                      expect(conditions(enforce_utf8: true)).to have_condition(:utf8)
         
     | 
| 
      
 366 
     | 
    
         
            +
                    end
         
     | 
| 
      
 367 
     | 
    
         
            +
             
     | 
| 
      
 368 
     | 
    
         
            +
                    it "'utf8' if enforce_ut8 is set" do
         
     | 
| 
      
 369 
     | 
    
         
            +
                      expect(conditions).to_not have_condition(:utf8)
         
     | 
| 
       430 
370 
     | 
    
         
             
                    end
         
     | 
| 
       431 
371 
     | 
    
         | 
| 
       432 
372 
     | 
    
         
             
                    # S3 conditions
         
     | 
| 
       433 
373 
     | 
    
         
             
                    it "'key'" do
         
     | 
| 
       434 
     | 
    
         
            -
                      mounted_subject. 
     | 
| 
       435 
     | 
    
         
            -
                      conditions(
         
     | 
| 
      
 374 
     | 
    
         
            +
                      allow(mounted_subject).to receive(:key).and_return(sample(:s3_key))
         
     | 
| 
      
 375 
     | 
    
         
            +
                      expect(conditions(
         
     | 
| 
       436 
376 
     | 
    
         
             
                        :subject => mounted_subject
         
     | 
| 
       437 
     | 
    
         
            -
                      ). 
     | 
| 
      
 377 
     | 
    
         
            +
                      )).to have_condition(:key, sample(:s3_key))
         
     | 
| 
       438 
378 
     | 
    
         
             
                    end
         
     | 
| 
       439 
379 
     | 
    
         | 
| 
       440 
380 
     | 
    
         
             
                    it "'key' without FILENAME_WILDCARD" do
         
     | 
| 
       441 
     | 
    
         
            -
                      conditions(
         
     | 
| 
      
 381 
     | 
    
         
            +
                      expect(conditions(
         
     | 
| 
       442 
382 
     | 
    
         
             
                        :subject => mounted_subject
         
     | 
| 
       443 
     | 
    
         
            -
                      ). 
     | 
| 
      
 383 
     | 
    
         
            +
                      )).to have_condition(:key, mounted_subject.key.sub("${filename}", ""))
         
     | 
| 
       444 
384 
     | 
    
         
             
                    end
         
     | 
| 
       445 
385 
     | 
    
         | 
| 
       446 
386 
     | 
    
         
             
                    it "'bucket'" do
         
     | 
| 
       447 
     | 
    
         
            -
                      conditions. 
     | 
| 
      
 387 
     | 
    
         
            +
                      expect(conditions).to have_condition("bucket" => subject.fog_directory)
         
     | 
| 
       448 
388 
     | 
    
         
             
                    end
         
     | 
| 
       449 
389 
     | 
    
         | 
| 
       450 
390 
     | 
    
         
             
                    it "'acl'" do
         
     | 
| 
       451 
     | 
    
         
            -
                      conditions. 
     | 
| 
      
 391 
     | 
    
         
            +
                      expect(conditions).to have_condition("acl" => subject.acl)
         
     | 
| 
       452 
392 
     | 
    
         
             
                    end
         
     | 
| 
       453 
393 
     | 
    
         | 
| 
       454 
394 
     | 
    
         
             
                    it "'success_action_redirect'" do
         
     | 
| 
       455 
395 
     | 
    
         
             
                      subject.success_action_redirect = "http://example.com/some_url"
         
     | 
| 
       456 
     | 
    
         
            -
                      conditions. 
     | 
| 
      
 396 
     | 
    
         
            +
                      expect(conditions).to have_condition("success_action_redirect" => "http://example.com/some_url")
         
     | 
| 
       457 
397 
     | 
    
         
             
                    end
         
     | 
| 
       458 
398 
     | 
    
         | 
| 
       459 
     | 
    
         
            -
                    it "'content-type'  
     | 
| 
       460 
     | 
    
         
            -
                       
     | 
| 
      
 399 
     | 
    
         
            +
                    it "does not have 'content-type' when will_include_content_type is false" do
         
     | 
| 
      
 400 
     | 
    
         
            +
                      allow(subject.class).to receive(:will_include_content_type).and_return(false)
         
     | 
| 
      
 401 
     | 
    
         
            +
                      expect(conditions).to_not have_condition('Content-Type')
         
     | 
| 
      
 402 
     | 
    
         
            +
                    end
         
     | 
| 
      
 403 
     | 
    
         
            +
             
     | 
| 
      
 404 
     | 
    
         
            +
                    it "has 'content-type' when will_include_content_type is true" do
         
     | 
| 
      
 405 
     | 
    
         
            +
                      allow(subject.class).to receive(:will_include_content_type).and_return(true)
         
     | 
| 
      
 406 
     | 
    
         
            +
                      expect(conditions).to have_condition('Content-Type')
         
     | 
| 
       461 
407 
     | 
    
         
             
                    end
         
     | 
| 
       462 
408 
     | 
    
         | 
| 
       463 
409 
     | 
    
         
             
                    context 'when use_action_status is true' do
         
     | 
| 
         @@ -471,12 +417,12 @@ describe CarrierWaveDirect::Uploader do 
     | 
|
| 
       471 
417 
     | 
    
         | 
| 
       472 
418 
     | 
    
         
             
                      it "'success_action_status'" do
         
     | 
| 
       473 
419 
     | 
    
         
             
                        subject.success_action_status = '200'
         
     | 
| 
       474 
     | 
    
         
            -
                        conditions. 
     | 
| 
      
 420 
     | 
    
         
            +
                        expect(conditions).to have_condition("success_action_status" => "200")
         
     | 
| 
       475 
421 
     | 
    
         
             
                      end
         
     | 
| 
       476 
422 
     | 
    
         | 
| 
       477 
423 
     | 
    
         
             
                      it "does not have 'success_action_redirect'" do
         
     | 
| 
       478 
424 
     | 
    
         
             
                        subject.success_action_redirect = "http://example.com/some_url"
         
     | 
| 
       479 
     | 
    
         
            -
                        conditions. 
     | 
| 
      
 425 
     | 
    
         
            +
                        expect(conditions).to_not have_condition("success_action_redirect" => "http://example.com/some_url")
         
     | 
| 
       480 
426 
     | 
    
         
             
                      end
         
     | 
| 
       481 
427 
     | 
    
         
             
                    end
         
     | 
| 
       482 
428 
     | 
    
         | 
| 
         @@ -490,53 +436,68 @@ describe CarrierWaveDirect::Uploader do 
     | 
|
| 
       490 
436 
     | 
    
         
             
                      end
         
     | 
| 
       491 
437 
     | 
    
         | 
| 
       492 
438 
     | 
    
         
             
                      it "#{DirectUploader.min_file_size} bytes" do
         
     | 
| 
       493 
     | 
    
         
            -
                        conditions. 
     | 
| 
      
 439 
     | 
    
         
            +
                        expect(conditions).to have_content_length_range
         
     | 
| 
       494 
440 
     | 
    
         
             
                      end
         
     | 
| 
       495 
441 
     | 
    
         | 
| 
       496 
442 
     | 
    
         
             
                      it "#{DirectUploader.max_file_size} bytes" do
         
     | 
| 
       497 
     | 
    
         
            -
                        conditions. 
     | 
| 
      
 443 
     | 
    
         
            +
                        expect(conditions).to have_content_length_range
         
     | 
| 
       498 
444 
     | 
    
         
             
                      end
         
     | 
| 
       499 
445 
     | 
    
         | 
| 
       500 
446 
     | 
    
         
             
                      it "#{sample(:min_file_size)} bytes when passing {:min_file_size => #{sample(:min_file_size)}}" do
         
     | 
| 
       501 
     | 
    
         
            -
                        conditions(
         
     | 
| 
      
 447 
     | 
    
         
            +
                        expect(conditions(
         
     | 
| 
       502 
448 
     | 
    
         
             
                          :min_file_size => sample(:min_file_size)
         
     | 
| 
       503 
     | 
    
         
            -
                        ). 
     | 
| 
      
 449 
     | 
    
         
            +
                        )).to have_content_length_range(:min_file_size => sample(:min_file_size))
         
     | 
| 
       504 
450 
     | 
    
         
             
                      end
         
     | 
| 
       505 
451 
     | 
    
         | 
| 
       506 
452 
     | 
    
         
             
                      it "#{sample(:max_file_size)} bytes when passing {:max_file_size => #{sample(:max_file_size)}}" do
         
     | 
| 
       507 
     | 
    
         
            -
                        conditions(
         
     | 
| 
      
 453 
     | 
    
         
            +
                        expect(conditions(
         
     | 
| 
       508 
454 
     | 
    
         
             
                          :max_file_size => sample(:max_file_size)
         
     | 
| 
       509 
     | 
    
         
            -
                        ). 
     | 
| 
      
 455 
     | 
    
         
            +
                        )).to have_content_length_range(:max_file_size => sample(:max_file_size))
         
     | 
| 
       510 
456 
     | 
    
         
             
                      end
         
     | 
| 
       511 
457 
     | 
    
         
             
                    end
         
     | 
| 
       512 
458 
     | 
    
         
             
                  end
         
     | 
| 
       513 
459 
     | 
    
         
             
                end
         
     | 
| 
       514 
460 
     | 
    
         
             
              end
         
     | 
| 
       515 
461 
     | 
    
         | 
| 
      
 462 
     | 
    
         
            +
              describe "clear_policy!" do
         
     | 
| 
      
 463 
     | 
    
         
            +
                it "should reset the cached policy string" do
         
     | 
| 
      
 464 
     | 
    
         
            +
                  Timecop.freeze(Time.now) do
         
     | 
| 
      
 465 
     | 
    
         
            +
                    @policy_now = subject.policy
         
     | 
| 
      
 466 
     | 
    
         
            +
                  end
         
     | 
| 
      
 467 
     | 
    
         
            +
                  subject.clear_policy!
         
     | 
| 
      
 468 
     | 
    
         
            +
             
     | 
| 
      
 469 
     | 
    
         
            +
                  Timecop.freeze(1.second.from_now) do
         
     | 
| 
      
 470 
     | 
    
         
            +
                    @policy_after_reset = subject.policy
         
     | 
| 
      
 471 
     | 
    
         
            +
                  end
         
     | 
| 
      
 472 
     | 
    
         
            +
                  expect(@policy_after_reset).not_to eql @policy_now
         
     | 
| 
      
 473 
     | 
    
         
            +
                end
         
     | 
| 
      
 474 
     | 
    
         
            +
              end
         
     | 
| 
      
 475 
     | 
    
         
            +
             
     | 
| 
       516 
476 
     | 
    
         
             
              describe "#signature" do
         
     | 
| 
       517 
477 
     | 
    
         
             
                it "should not contain any new lines" do
         
     | 
| 
       518 
     | 
    
         
            -
                  subject.signature. 
     | 
| 
      
 478 
     | 
    
         
            +
                  expect(subject.signature).to_not include("\n")
         
     | 
| 
       519 
479 
     | 
    
         
             
                end
         
     | 
| 
       520 
480 
     | 
    
         | 
| 
       521 
481 
     | 
    
         
             
                it "should return a base64 encoded 'sha1' hash of the secret key and policy document" do
         
     | 
| 
       522 
     | 
    
         
            -
                  Base64.decode64(subject.signature). 
     | 
| 
       523 
     | 
    
         
            -
                    OpenSSL::Digest 
     | 
| 
      
 482 
     | 
    
         
            +
                  expect(Base64.decode64(subject.signature)).to eq OpenSSL::HMAC.digest(
         
     | 
| 
      
 483 
     | 
    
         
            +
                    OpenSSL::Digest.new('sha1'),
         
     | 
| 
       524 
484 
     | 
    
         
             
                    subject.aws_secret_access_key, subject.policy
         
     | 
| 
       525 
485 
     | 
    
         
             
                  )
         
     | 
| 
       526 
486 
     | 
    
         
             
                end
         
     | 
| 
       527 
487 
     | 
    
         
             
              end
         
     | 
| 
       528 
488 
     | 
    
         | 
| 
      
 489 
     | 
    
         
            +
             
     | 
| 
       529 
490 
     | 
    
         
             
              # note that 'video' is hardcoded into the MountedClass support file
         
     | 
| 
       530 
491 
     | 
    
         
             
              # so changing the sample will cause the tests to fail
         
     | 
| 
       531 
492 
     | 
    
         
             
              context "a class has a '#{sample(:mounted_as)}' mounted" do
         
     | 
| 
       532 
493 
     | 
    
         
             
                describe "#{sample(:mounted_as).to_s.capitalize}Uploader" do
         
     | 
| 
       533 
494 
     | 
    
         
             
                  describe "##{sample(:mounted_as)}" do
         
     | 
| 
       534 
495 
     | 
    
         
             
                    it "should be defined" do
         
     | 
| 
       535 
     | 
    
         
            -
                      direct_subject. 
     | 
| 
      
 496 
     | 
    
         
            +
                      expect(direct_subject).to be_respond_to(sample(:mounted_as))
         
     | 
| 
       536 
497 
     | 
    
         
             
                    end
         
     | 
| 
       537 
498 
     | 
    
         | 
| 
       538 
499 
     | 
    
         
             
                    it "should return itself" do
         
     | 
| 
       539 
     | 
    
         
            -
                      direct_subject.send(sample(:mounted_as)). 
     | 
| 
      
 500 
     | 
    
         
            +
                      expect(direct_subject.send(sample(:mounted_as))).to eq direct_subject
         
     | 
| 
       540 
501 
     | 
    
         
             
                    end
         
     | 
| 
       541 
502 
     | 
    
         
             
                  end
         
     | 
| 
       542 
503 
     | 
    
         | 
| 
         @@ -556,11 +517,11 @@ describe CarrierWaveDirect::Uploader do 
     | 
|
| 
       556 
517 
     | 
    
         
             
                        let(:store_path) { video_subject.send(sample(:version)).store_path }
         
     | 
| 
       557 
518 
     | 
    
         | 
| 
       558 
519 
     | 
    
         
             
                        it "should be like '#{sample(:stored_version_filename)}'" do
         
     | 
| 
       559 
     | 
    
         
            -
                          store_path. 
     | 
| 
      
 520 
     | 
    
         
            +
                          expect(store_path).to match /#{sample(:stored_version_filename)}$/
         
     | 
| 
       560 
521 
     | 
    
         
             
                        end
         
     | 
| 
       561 
522 
     | 
    
         | 
| 
       562 
523 
     | 
    
         
             
                        it "should not be like '#{sample(:version)}_#{sample(:stored_filename_base)}'" do
         
     | 
| 
       563 
     | 
    
         
            -
                          store_path. 
     | 
| 
      
 524 
     | 
    
         
            +
                          expect(store_path).to_not match /#{sample(:version)}_#{sample(:stored_filename_base)}/
         
     | 
| 
       564 
525 
     | 
    
         
             
                        end
         
     | 
| 
       565 
526 
     | 
    
         
             
                      end
         
     | 
| 
       566 
527 
     | 
    
         
             
                    end
         
     |