cloud_tempfile 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (43) hide show
  1. data/.gitignore +18 -0
  2. data/.rvmrc +2 -0
  3. data/.travis.yml +30 -0
  4. data/Appraisals +11 -0
  5. data/CHANGELOG.md +9 -0
  6. data/Gemfile +15 -0
  7. data/LICENSE +20 -0
  8. data/README.md +232 -0
  9. data/Rakefile +43 -0
  10. data/cloud_tempfile.gemspec +38 -0
  11. data/gemfiles/rails_3.1.gemfile +10 -0
  12. data/gemfiles/rails_3.2.gemfile +10 -0
  13. data/gemfiles/rails_4.0.gemfile +10 -0
  14. data/lib/cloud_tempfile/cloud_tempfile.rb +106 -0
  15. data/lib/cloud_tempfile/config.rb +206 -0
  16. data/lib/cloud_tempfile/engine.rb +53 -0
  17. data/lib/cloud_tempfile/multi_mime.rb +22 -0
  18. data/lib/cloud_tempfile/railtie.rb +11 -0
  19. data/lib/cloud_tempfile/storage.rb +151 -0
  20. data/lib/cloud_tempfile/version.rb +9 -0
  21. data/lib/cloud_tempfile.rb +11 -0
  22. data/lib/ext/fog/aws/models/storage/file.rb +19 -0
  23. data/lib/generators/cloud_tempfile/install_generator.rb +71 -0
  24. data/lib/generators/cloud_tempfile/templates/cloud_tempfile.rb +41 -0
  25. data/lib/generators/cloud_tempfile/templates/cloud_tempfile.yml +52 -0
  26. data/lib/tasks/cloud_tempfile_tasks.rake +7 -0
  27. data/spec/dummy_app/Rakefile +27 -0
  28. data/spec/fixtures/assets/TEST.doc +0 -0
  29. data/spec/fixtures/assets/TEST.docx +0 -0
  30. data/spec/fixtures/assets/TEST.pdf +0 -0
  31. data/spec/fixtures/assets/TEST.rtf +1 -0
  32. data/spec/fixtures/aws_with_yml/config/cloud_tempfile.yml +22 -0
  33. data/spec/fixtures/google_with_yml/config/.gitkeep +0 -0
  34. data/spec/fixtures/rackspace_with_yml/config/.gitkeep +0 -0
  35. data/spec/fixtures/with_invalid_yml/config/cloud_tempfile.yml +22 -0
  36. data/spec/fixtures/without_yml/public/.gitkeep +0 -0
  37. data/spec/integration/.gitkeep +0 -0
  38. data/spec/spec_helper.rb +63 -0
  39. data/spec/unit/cloud_tempfile_spec.rb +208 -0
  40. data/spec/unit/multi_mime_spec.rb +48 -0
  41. data/spec/unit/railsless_spec.rb +50 -0
  42. data/spec/unit/storage_spec.rb +260 -0
  43. metadata +189 -0
@@ -0,0 +1,260 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
+
3
+ RSpec.configure do |c|
4
+ c.filter_run_excluding :ignore => true
5
+ end
6
+
7
+ describe CloudTempfile::Storage do
8
+ include_context "mock Rails without_yml"
9
+
10
+ describe 'Local#upload_file', :ignore => false do
11
+ before(:each) do
12
+ @config = CloudTempfile::Config.new
13
+ @config.enabled = true
14
+ @config.fog_provider = "Local"
15
+
16
+ @storage = CloudTempfile::Storage.new(@config)
17
+ end
18
+
19
+ it 'accepts a PDF file and raw filedata' do
20
+ filename = 'TEST.pdf'
21
+ file = File.open(File.dirname(__FILE__) + '/../fixtures/assets/' + filename)
22
+
23
+ @storage.local_file(filename, file)
24
+ end
25
+
26
+ it 'accepts a DOC file and raw filedata' do
27
+ filename = 'TEST.doc'
28
+ file = File.open(File.dirname(__FILE__) + '/../fixtures/assets/' + filename)
29
+
30
+ @storage.local_file(filename, file)
31
+ end
32
+
33
+ it 'accepts a DOCX file and raw filedata' do
34
+ filename = 'TEST.docx'
35
+ file = File.open(File.dirname(__FILE__) + '/../fixtures/assets/' + filename)
36
+
37
+ @storage.local_file(filename, file)
38
+ end
39
+
40
+ it 'accepts a RTF file and raw filedata' do
41
+ filename = 'TEST.rtf'
42
+ file = File.open(File.dirname(__FILE__) + '/../fixtures/assets/' + filename)
43
+
44
+ @storage.local_file(filename, file)
45
+ end
46
+
47
+ it 'still accepts a file and config.enabled is false' do
48
+ filename = 'TEST.rtf'
49
+ file = File.open(File.dirname(__FILE__) + '/../fixtures/assets/' + filename)
50
+
51
+ @config.enabled = false
52
+
53
+ @storage.local_file(filename, file)
54
+ end
55
+ end
56
+
57
+ describe 'AWS#upload_file', :ignore => false do
58
+ before(:each) do
59
+ #Enable/Disable Fog mocking by enivronment variables for testing
60
+ @mock = ((ENV['RSPEC_MOCK'].nil?)? ((ENV['AWS_ACCESS_KEY_ID'].nil?)? true : ENV['AWS_ACCESS_KEY_ID']) : ENV['RSPEC_MOCK']=='true')
61
+
62
+ Fog.mock! if @mock
63
+
64
+ @config = CloudTempfile::Config.new
65
+ @config.enabled = true
66
+ @config.fog_provider = "AWS"
67
+ @config.aws_access_key_id = !@mock? ENV['AWS_ACCESS_KEY_ID'] : 'KEY'
68
+ @config.aws_secret_access_key = !@mock? ENV['AWS_SECRET_ACCESS_KEY'] : 'SECRET_KEY'
69
+ @config.aws_reduced_redundancy = true
70
+ @config.fog_directory = !@mock? ENV['FOG_DIRECTORY'] : 'bucket'
71
+ @config.prefix = "tmp-test/"
72
+ @config.public = true
73
+
74
+ @storage = CloudTempfile::Storage.new(@config)
75
+ end
76
+
77
+ after(:each) do
78
+ Fog.unmock! if @mock
79
+ end
80
+
81
+ it 'accepts a PDF file and raw filedata' do
82
+ filename = 'TEST.pdf'
83
+ file = File.open(File.dirname(__FILE__) + '/../fixtures/assets/' + filename)
84
+
85
+ if @mock
86
+ directory = double
87
+ files = double
88
+
89
+ @storage.stub(:directory).and_return(directory)
90
+ directory.stub(:files).and_return(files)
91
+
92
+ files.should_receive(:create)
93
+ end
94
+
95
+ file = @storage.upload_file(filename, file)
96
+ end
97
+
98
+ it 'accepts a DOC file and raw filedata' do
99
+ filename = 'TEST.doc'
100
+ file = File.open(File.dirname(__FILE__) + '/../fixtures/assets/' + filename)
101
+
102
+ if @mock
103
+ directory = double
104
+ files = double
105
+
106
+ @storage.stub(:directory).and_return(directory)
107
+ directory.stub(:files).and_return(files)
108
+
109
+ files.should_receive(:create)
110
+ end
111
+
112
+ @storage.upload_file(filename, file)
113
+ end
114
+
115
+ it 'accepts a DOCX file and raw filedata' do
116
+ filename = 'TEST.docx'
117
+ file = File.open(File.dirname(__FILE__) + '/../fixtures/assets/' + filename)
118
+
119
+ if @mock
120
+ directory = double
121
+ files = double
122
+
123
+ @storage.stub(:directory).and_return(directory)
124
+ directory.stub(:files).and_return(files)
125
+
126
+ files.should_receive(:create)
127
+ end
128
+
129
+ @storage.upload_file(filename, file)
130
+ end
131
+
132
+ it 'accepts a RTF file and raw filedata' do
133
+ filename = 'TEST.rtf'
134
+ file = File.open(File.dirname(__FILE__) + '/../fixtures/assets/' + filename)
135
+
136
+ if @mock
137
+ directory = double
138
+ files = double
139
+
140
+ @storage.stub(:directory).and_return(directory)
141
+ directory.stub(:files).and_return(files)
142
+
143
+ files.should_receive(:create)
144
+ end
145
+
146
+ @storage.upload_file(filename, file)
147
+ end
148
+
149
+ it 'has public visibility' do
150
+ filename = 'TEST.pdf'
151
+ file = File.open(File.dirname(__FILE__) + '/../fixtures/assets/' + filename)
152
+
153
+ # public: When true, asset is public. When false, asset is private.
154
+ @config.public = true
155
+
156
+ if @mock
157
+ directory = double
158
+ files = double
159
+
160
+ @storage.stub(:directory).and_return(directory)
161
+ directory.stub(:files).and_return(files)
162
+
163
+ files.should_receive(:create)
164
+ end
165
+
166
+ file = @storage.upload_file(filename, file)
167
+ file.public_url.should_not be_nil if !@mock
168
+ end
169
+
170
+ it 'has private visibility' do
171
+ filename = 'TEST.pdf'
172
+ file = File.open(File.dirname(__FILE__) + '/../fixtures/assets/' + filename)
173
+
174
+ # public: When true, asset is public. When false, asset is private.
175
+ @config.public = false
176
+
177
+ if @mock
178
+ directory = double
179
+ files = double
180
+
181
+ @storage.stub(:directory).and_return(directory)
182
+ directory.stub(:files).and_return(files)
183
+
184
+ files.should_receive(:create)
185
+ end
186
+
187
+ file = @storage.upload_file(filename, file)
188
+ file.public_url.should be_nil if !@mock
189
+ end
190
+
191
+ it 'has private visibility and expiry' do
192
+ filename = 'TEST.pdf'
193
+ file = File.open(File.dirname(__FILE__) + '/../fixtures/assets/' + filename)
194
+
195
+ # public: When true, asset is public. When false, asset is private.
196
+ @config.public = false
197
+ @config.expiry = 60
198
+
199
+ if @mock
200
+ directory = double
201
+ files = double
202
+
203
+ @storage.stub(:directory).and_return(directory)
204
+ directory.stub(:files).and_return(files)
205
+
206
+ files.should_receive(:create)
207
+ end
208
+
209
+ file = @storage.upload_file(filename, file)
210
+ file.public_url.should_not be_nil if !@mock
211
+ end
212
+ end
213
+
214
+ describe 'AWS#upload_file with CloudTempfile disabled', :ignore => false do
215
+ before(:each) do
216
+ @config = CloudTempfile::Config.new
217
+ @config.enabled = false
218
+ @config.fog_provider = "AWS"
219
+ @config.aws_access_key_id = !@mock? ENV['AWS_ACCESS_KEY_ID'] : 'KEY'
220
+ @config.aws_secret_access_key = !@mock? ENV['AWS_SECRET_ACCESS_KEY'] : 'SECRET_KEY'
221
+ @config.fog_directory = !@mock? ENV['FOG_DIRECTORY'] : 'bucket'
222
+ @config.prefix = "tmp-test/"
223
+ @config.public = true
224
+
225
+ #Enabled Fog mocking
226
+ @mock = false
227
+ Fog.mock! if @mock
228
+
229
+ @storage = CloudTempfile::Storage.new(@config)
230
+ end
231
+
232
+ after(:each) do
233
+ Fog.unmock! if @mock
234
+ end
235
+
236
+
237
+ it 'still accepts a file and config.enabled is false, however is should write locally' do
238
+ filename = 'TEST.pdf'
239
+ file = File.open(File.dirname(__FILE__) + '/../fixtures/assets/' + filename)
240
+
241
+ @config.enabled = false
242
+
243
+ if @mock
244
+ directory = double
245
+ files = double
246
+
247
+ @storage.stub(:directory).and_return(directory)
248
+ directory.stub(:files).and_return(files)
249
+
250
+ files.should_receive(:create)
251
+ end
252
+
253
+ file = @storage.upload_file(filename, file)
254
+ file.should_not be_nil
255
+ file.public_url.should_not be_nil
256
+ end
257
+ end
258
+ end
259
+
260
+
metadata ADDED
@@ -0,0 +1,189 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: cloud_tempfile
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Kevin Bolduc
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2014-02-16 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: fog
16
+ requirement: &70340592492360 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: 1.8.0
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *70340592492360
25
+ - !ruby/object:Gem::Dependency
26
+ name: activemodel
27
+ requirement: &70340592491920 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: *70340592491920
36
+ - !ruby/object:Gem::Dependency
37
+ name: rspec
38
+ requirement: &70340592491460 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
44
+ type: :development
45
+ prerelease: false
46
+ version_requirements: *70340592491460
47
+ - !ruby/object:Gem::Dependency
48
+ name: bundler
49
+ requirement: &70340592491020 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ type: :development
56
+ prerelease: false
57
+ version_requirements: *70340592491020
58
+ - !ruby/object:Gem::Dependency
59
+ name: jeweler
60
+ requirement: &70340592490600 !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - ! '>='
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
66
+ type: :development
67
+ prerelease: false
68
+ version_requirements: *70340592490600
69
+ - !ruby/object:Gem::Dependency
70
+ name: cloud_tempfile
71
+ requirement: &70340592490180 !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ! '>='
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: *70340592490180
80
+ - !ruby/object:Gem::Dependency
81
+ name: appraisal
82
+ requirement: &70340592489740 !ruby/object:Gem::Requirement
83
+ none: false
84
+ requirements:
85
+ - - ! '>='
86
+ - !ruby/object:Gem::Version
87
+ version: '0'
88
+ type: :development
89
+ prerelease: false
90
+ version_requirements: *70340592489740
91
+ description: Save any CloudTempfile object and it will be directly persisted to the
92
+ cloud!
93
+ email:
94
+ - kevin.bolduc@gmail.com
95
+ executables: []
96
+ extensions: []
97
+ extra_rdoc_files: []
98
+ files:
99
+ - .gitignore
100
+ - .rvmrc
101
+ - .travis.yml
102
+ - Appraisals
103
+ - CHANGELOG.md
104
+ - Gemfile
105
+ - LICENSE
106
+ - README.md
107
+ - Rakefile
108
+ - cloud_tempfile.gemspec
109
+ - gemfiles/rails_3.1.gemfile
110
+ - gemfiles/rails_3.2.gemfile
111
+ - gemfiles/rails_4.0.gemfile
112
+ - lib/cloud_tempfile.rb
113
+ - lib/cloud_tempfile/cloud_tempfile.rb
114
+ - lib/cloud_tempfile/config.rb
115
+ - lib/cloud_tempfile/engine.rb
116
+ - lib/cloud_tempfile/multi_mime.rb
117
+ - lib/cloud_tempfile/railtie.rb
118
+ - lib/cloud_tempfile/storage.rb
119
+ - lib/cloud_tempfile/version.rb
120
+ - lib/ext/fog/aws/models/storage/file.rb
121
+ - lib/generators/cloud_tempfile/install_generator.rb
122
+ - lib/generators/cloud_tempfile/templates/cloud_tempfile.rb
123
+ - lib/generators/cloud_tempfile/templates/cloud_tempfile.yml
124
+ - lib/tasks/cloud_tempfile_tasks.rake
125
+ - spec/dummy_app/Rakefile
126
+ - spec/fixtures/assets/TEST.doc
127
+ - spec/fixtures/assets/TEST.docx
128
+ - spec/fixtures/assets/TEST.pdf
129
+ - spec/fixtures/assets/TEST.rtf
130
+ - spec/fixtures/aws_with_yml/config/cloud_tempfile.yml
131
+ - spec/fixtures/google_with_yml/config/.gitkeep
132
+ - spec/fixtures/rackspace_with_yml/config/.gitkeep
133
+ - spec/fixtures/with_invalid_yml/config/cloud_tempfile.yml
134
+ - spec/fixtures/without_yml/public/.gitkeep
135
+ - spec/integration/.gitkeep
136
+ - spec/spec_helper.rb
137
+ - spec/unit/cloud_tempfile_spec.rb
138
+ - spec/unit/multi_mime_spec.rb
139
+ - spec/unit/railsless_spec.rb
140
+ - spec/unit/storage_spec.rb
141
+ homepage: https://github.com/kbolduc/CloudTempfile
142
+ licenses:
143
+ - MIT
144
+ post_install_message:
145
+ rdoc_options: []
146
+ require_paths:
147
+ - lib
148
+ required_ruby_version: !ruby/object:Gem::Requirement
149
+ none: false
150
+ requirements:
151
+ - - ! '>='
152
+ - !ruby/object:Gem::Version
153
+ version: '0'
154
+ segments:
155
+ - 0
156
+ hash: -2077317929667888868
157
+ required_rubygems_version: !ruby/object:Gem::Requirement
158
+ none: false
159
+ requirements:
160
+ - - ! '>='
161
+ - !ruby/object:Gem::Version
162
+ version: '0'
163
+ segments:
164
+ - 0
165
+ hash: -2077317929667888868
166
+ requirements: []
167
+ rubyforge_project:
168
+ rubygems_version: 1.8.10
169
+ signing_key:
170
+ specification_version: 3
171
+ summary: Tempfile creation directly on cloud storage (S3, Google, Rackspace etc] which
172
+ can be utilized in a Ruby application
173
+ test_files:
174
+ - spec/dummy_app/Rakefile
175
+ - spec/fixtures/assets/TEST.doc
176
+ - spec/fixtures/assets/TEST.docx
177
+ - spec/fixtures/assets/TEST.pdf
178
+ - spec/fixtures/assets/TEST.rtf
179
+ - spec/fixtures/aws_with_yml/config/cloud_tempfile.yml
180
+ - spec/fixtures/google_with_yml/config/.gitkeep
181
+ - spec/fixtures/rackspace_with_yml/config/.gitkeep
182
+ - spec/fixtures/with_invalid_yml/config/cloud_tempfile.yml
183
+ - spec/fixtures/without_yml/public/.gitkeep
184
+ - spec/integration/.gitkeep
185
+ - spec/spec_helper.rb
186
+ - spec/unit/cloud_tempfile_spec.rb
187
+ - spec/unit/multi_mime_spec.rb
188
+ - spec/unit/railsless_spec.rb
189
+ - spec/unit/storage_spec.rb