cloud_tempfile 0.0.1

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.
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