snapimage 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 (61) hide show
  1. data/.autotest +3 -0
  2. data/.gitignore +19 -0
  3. data/.rspec +2 -0
  4. data/Gemfile +4 -0
  5. data/LICENSE +22 -0
  6. data/README.md +29 -0
  7. data/Rakefile +2 -0
  8. data/bin/snapimage_generate_config +63 -0
  9. data/bin/snapimage_server +55 -0
  10. data/lib/snapimage.rb +24 -0
  11. data/lib/snapimage/config.rb +51 -0
  12. data/lib/snapimage/exceptions.rb +25 -0
  13. data/lib/snapimage/image/image.rb +96 -0
  14. data/lib/snapimage/image/image_name_utils.rb +131 -0
  15. data/lib/snapimage/middleware.rb +27 -0
  16. data/lib/snapimage/rack/request.rb +19 -0
  17. data/lib/snapimage/rack/request_file.rb +26 -0
  18. data/lib/snapimage/rack/response.rb +51 -0
  19. data/lib/snapimage/server.rb +50 -0
  20. data/lib/snapimage/server_actions/server_actions.authorize.rb +69 -0
  21. data/lib/snapimage/server_actions/server_actions.delete_resource_images.rb +23 -0
  22. data/lib/snapimage/server_actions/server_actions.generate_image.rb +167 -0
  23. data/lib/snapimage/server_actions/server_actions.list_resource_images.rb +23 -0
  24. data/lib/snapimage/server_actions/server_actions.sync_resource.rb +78 -0
  25. data/lib/snapimage/storage/storage.rb +120 -0
  26. data/lib/snapimage/storage/storage_server.local.rb +120 -0
  27. data/lib/snapimage/storage/storage_server.rb +110 -0
  28. data/lib/snapimage/version.rb +3 -0
  29. data/snapimage.gemspec +27 -0
  30. data/spec/acceptance/delete_resource_images_spec.rb +166 -0
  31. data/spec/acceptance/list_resource_images_spec.rb +158 -0
  32. data/spec/acceptance/modify_spec.rb +165 -0
  33. data/spec/acceptance/sync_spec.rb +260 -0
  34. data/spec/acceptance/upload_spec.rb +235 -0
  35. data/spec/snapimage/config_spec.rb +56 -0
  36. data/spec/snapimage/image/image_name_utils_spec.rb +127 -0
  37. data/spec/snapimage/image/image_spec.rb +71 -0
  38. data/spec/snapimage/middleware_spec.rb +27 -0
  39. data/spec/snapimage/rack/request_file_spec.rb +15 -0
  40. data/spec/snapimage/rack/request_spec.rb +52 -0
  41. data/spec/snapimage/rack/response_spec.rb +33 -0
  42. data/spec/snapimage/server_actions/server_actions.authorize_spec.rb +67 -0
  43. data/spec/snapimage/server_actions/server_actions.generate_image_spec.rb +146 -0
  44. data/spec/snapimage/server_actions/server_actions.sync_resource_spec.rb +91 -0
  45. data/spec/snapimage/server_spec.rb +55 -0
  46. data/spec/snapimage/storage/assets/local/resource_1/12345678-1x1-0x0x1x1-1x1-1.gif +0 -0
  47. data/spec/snapimage/storage/assets/local/resource_1/12345678-1x1-0x0x1x1-300x200-0.jpg +0 -0
  48. data/spec/snapimage/storage/assets/local/resource_1/12345678-1x1.png +0 -0
  49. data/spec/snapimage/storage/assets/local/resource_2/12345678-1x1-0x0x1x1-1x1-1.gif +0 -0
  50. data/spec/snapimage/storage/assets/local/resource_2/12345678-1x1-0x0x1x1-300x200-0.jpg +0 -0
  51. data/spec/snapimage/storage/assets/local/resource_2/12345678-1x1.png +0 -0
  52. data/spec/snapimage/storage/storage_server.local_spec.rb +150 -0
  53. data/spec/snapimage/storage/storage_server_spec.rb +97 -0
  54. data/spec/snapimage/storage/storage_spec.rb +49 -0
  55. data/spec/spec_helper.rb +18 -0
  56. data/spec/support/assets/config.json +8 -0
  57. data/spec/support/assets/config.yml +9 -0
  58. data/spec/support/assets/stub-1x1.png +0 -0
  59. data/spec/support/assets/stub-2048x100.png +0 -0
  60. data/spec/support/assets/stub-300x200.png +0 -0
  61. metadata +272 -0
@@ -0,0 +1,97 @@
1
+ require "spec_helper"
2
+
3
+ describe SnapImage::StorageServer::Base do
4
+ before do
5
+ @image_path = File.join(RSpec.root, "support/assets/stub-1x1.png")
6
+ class TestServer < SnapImage::StorageServer::Base; end
7
+ @server = TestServer.new(
8
+ "name" => "Test",
9
+ "public_url" => "//example.com/storage",
10
+ "max_width" => 1024,
11
+ "max_height" => 2048
12
+ )
13
+ end
14
+
15
+ describe "url_regexp" do
16
+ before do
17
+ @regexp = @server.url_regexp
18
+ end
19
+
20
+ it "matches urls handled by the storage server" do
21
+ "http://example.com/storage/image.png".match(@regexp).should_not be_nil
22
+ "https://example.com/storage/image.png".match(@regexp).should_not be_nil
23
+ "http://example.com/storage/sub/dir/image.png".match(@regexp).should_not be_nil
24
+ "http://example.com/storage/sub/dir/image.gif".match(@regexp).should_not be_nil
25
+ "http://example.com/storage/sub/dir/image.jpg".match(@regexp).should_not be_nil
26
+ end
27
+
28
+ it "does not match urls that are not handled by the storage server" do
29
+ "http://other.com/storage/image.png".match(@regexp).should be_nil
30
+ "http://example.com/storage/image.jpeg".match(@regexp).should be_nil
31
+ "http://example.com/storage.png".match(@regexp).should be_nil
32
+ end
33
+ end
34
+
35
+ describe "#local?" do
36
+ it "returns true when the url is local" do
37
+ @server.local?("http://example.com/storage/abc123/image.png").should be_true
38
+ end
39
+
40
+ it "returns false when the url is not local" do
41
+ @server.local?("http://another.com/images/abc123/image.png").should be_false
42
+ end
43
+
44
+ it "returns false when the url is just the public url" do
45
+ @server.local?("http://example.com/storage").should be_false
46
+ @server.local?("http://example.com/storage/").should be_false
47
+ end
48
+ end
49
+
50
+ describe "#get_url_parts" do
51
+ it "returns nil when the url does not match the public url" do
52
+ @server.send(:get_url_parts, "http://another.com/storage/abc123/image.png").should be_nil
53
+ end
54
+
55
+ it "returns the parts when the url matches the public url" do
56
+ parts = @server.send(:get_url_parts, "http://example.com/storage/abc123/image.png")
57
+ parts[:protocol].should eq "http"
58
+ parts[:public_url].should eq "//example.com/storage"
59
+ parts[:path].should eq "abc123/image.png"
60
+ end
61
+
62
+ it "returns the parts when the url has no protocol" do
63
+ parts = @server.send(:get_url_parts, "//example.com/storage/abc123/image.png")
64
+ parts[:protocol].should be_nil
65
+ parts[:public_url].should eq "//example.com/storage"
66
+ parts[:path].should eq "abc123/image.png"
67
+ end
68
+ end
69
+
70
+ describe "#resize_to_fit" do
71
+ before do
72
+ @image = SnapImage::Image.from_blob(File.new(@image_path, "rb").read)
73
+ end
74
+
75
+ it "returns the original image and name when the image fits" do
76
+ result = @server.send(:resize_to_fit, @image, "image")
77
+ result[:image].should be @image
78
+ result[:name].should eq "image"
79
+ end
80
+
81
+ it "returns the resized image and name given a base image" do
82
+ image = @image.resize(2048, 100, false)
83
+ result = @server.send(:resize_to_fit, image, "12345678-2048x100.png")
84
+ result[:image].width.should eq 1024
85
+ result[:image].height.should eq 50
86
+ result[:name].should eq "12345678-1024x50.png"
87
+ end
88
+
89
+ it "returns the resized image and name given a modified image" do
90
+ image = @image.resize(2048, 100, false)
91
+ result = @server.send(:resize_to_fit, image, "12345678-1x1-0x0x1x1-2048x100-0.png")
92
+ result[:image].width.should eq 1024
93
+ result[:image].height.should eq 50
94
+ result[:name].should eq "12345678-1x1-0x0x1x1-1024x50-0.png"
95
+ end
96
+ end
97
+ end
@@ -0,0 +1,49 @@
1
+ require "spec_helper"
2
+
3
+ describe SnapImage::Storage do
4
+ before do
5
+ @local_root = File.join(RSpec.root, "storage")
6
+ @storage = SnapImage::Storage.new(
7
+ [{
8
+ "name" => "test",
9
+ "type" => "LOCAL",
10
+ "local_root" => @local_root,
11
+ "public_url" => "//example.com/storage"
12
+ }],
13
+ "test",
14
+ 1024,
15
+ 2048
16
+ )
17
+ end
18
+
19
+ after do
20
+ FileUtils.rm_rf(@local_root)
21
+ end
22
+
23
+ describe "#servers" do
24
+ it "creates a hash of the servers from the configs" do
25
+ servers = @storage.send(:servers)
26
+ servers["test"].should be
27
+ end
28
+ end
29
+
30
+ describe "#get_server_class" do
31
+ it "raises when the type is not supported" do
32
+ expect { @storage.send(:get_server_class, "test") }.should raise_error SnapImage::InvalidStorageConfig
33
+ end
34
+
35
+ it "returns the correct class" do
36
+ @storage.send(:get_server_class, "LOCAL").should eq SnapImage::StorageServer::Local
37
+ end
38
+ end
39
+
40
+ describe "#get_server_by_url" do
41
+ it "returns the server when there is a match" do
42
+ @storage.send(:get_server_by_url, "http://example.com/storage/abc123/image.png").name.should eq "test"
43
+ end
44
+
45
+ it "returns nil when there is no match" do
46
+ @storage.send(:get_server_by_url, "http://another.com/storage/abc123/image.png").should be_nil
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,18 @@
1
+ # This file was generated by the `rspec --init` command. Conventionally, all
2
+ # specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
3
+ # Require this file using `require "spec_helper.rb"` to ensure that it is only
4
+ # loaded once.
5
+ #
6
+ # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
7
+ RSpec.configure do |config|
8
+ config.treat_symbols_as_metadata_keys_with_true_values = true
9
+ config.run_all_when_everything_filtered = true
10
+ config.filter_run :focus
11
+ end
12
+
13
+ # Add the root directory of the specs to RSpec so specs can reference it.
14
+ def RSpec.root
15
+ @root ||= File.expand_path(File.dirname(__FILE__))
16
+ end
17
+
18
+ require "snapimage"
@@ -0,0 +1,8 @@
1
+ {
2
+ "security_salt": "abc123",
3
+ "primary_storage_server": "storage 1",
4
+ "storage_servers": [
5
+ { "name": "storage 1", "type": "test"},
6
+ { "name": "storage 2", "type": "test"}
7
+ ]
8
+ }
@@ -0,0 +1,9 @@
1
+ security_salt: "abc123"
2
+ primary_storage_server: "storage 1"
3
+ storage_servers:
4
+ -
5
+ name: "storage 1"
6
+ type: "test"
7
+ -
8
+ name: "storage 2"
9
+ type: "test"
Binary file
metadata ADDED
@@ -0,0 +1,272 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: snapimage
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Wesley Wong
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-08-22 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rack
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: rmagick
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: sinatra
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: thin
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ type: :runtime
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ - !ruby/object:Gem::Dependency
79
+ name: rake
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ type: :runtime
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
94
+ - !ruby/object:Gem::Dependency
95
+ name: rspec
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ! '>='
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
102
+ type: :development
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ - !ruby/object:Gem::Dependency
111
+ name: autotest
112
+ requirement: !ruby/object:Gem::Requirement
113
+ none: false
114
+ requirements:
115
+ - - ! '>='
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - ! '>='
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
126
+ - !ruby/object:Gem::Dependency
127
+ name: rack-test
128
+ requirement: !ruby/object:Gem::Requirement
129
+ none: false
130
+ requirements:
131
+ - - ! '>='
132
+ - !ruby/object:Gem::Version
133
+ version: '0'
134
+ type: :development
135
+ prerelease: false
136
+ version_requirements: !ruby/object:Gem::Requirement
137
+ none: false
138
+ requirements:
139
+ - - ! '>='
140
+ - !ruby/object:Gem::Version
141
+ version: '0'
142
+ description: Rack Middleware for handling the SnapImage API
143
+ email:
144
+ - wesley@snapeditor.com
145
+ executables:
146
+ - snapimage_generate_config
147
+ - snapimage_server
148
+ extensions: []
149
+ extra_rdoc_files: []
150
+ files:
151
+ - .autotest
152
+ - .gitignore
153
+ - .rspec
154
+ - Gemfile
155
+ - LICENSE
156
+ - README.md
157
+ - Rakefile
158
+ - bin/snapimage_generate_config
159
+ - bin/snapimage_server
160
+ - lib/snapimage.rb
161
+ - lib/snapimage/config.rb
162
+ - lib/snapimage/exceptions.rb
163
+ - lib/snapimage/image/image.rb
164
+ - lib/snapimage/image/image_name_utils.rb
165
+ - lib/snapimage/middleware.rb
166
+ - lib/snapimage/rack/request.rb
167
+ - lib/snapimage/rack/request_file.rb
168
+ - lib/snapimage/rack/response.rb
169
+ - lib/snapimage/server.rb
170
+ - lib/snapimage/server_actions/server_actions.authorize.rb
171
+ - lib/snapimage/server_actions/server_actions.delete_resource_images.rb
172
+ - lib/snapimage/server_actions/server_actions.generate_image.rb
173
+ - lib/snapimage/server_actions/server_actions.list_resource_images.rb
174
+ - lib/snapimage/server_actions/server_actions.sync_resource.rb
175
+ - lib/snapimage/storage/storage.rb
176
+ - lib/snapimage/storage/storage_server.local.rb
177
+ - lib/snapimage/storage/storage_server.rb
178
+ - lib/snapimage/version.rb
179
+ - snapimage.gemspec
180
+ - spec/acceptance/delete_resource_images_spec.rb
181
+ - spec/acceptance/list_resource_images_spec.rb
182
+ - spec/acceptance/modify_spec.rb
183
+ - spec/acceptance/sync_spec.rb
184
+ - spec/acceptance/upload_spec.rb
185
+ - spec/snapimage/config_spec.rb
186
+ - spec/snapimage/image/image_name_utils_spec.rb
187
+ - spec/snapimage/image/image_spec.rb
188
+ - spec/snapimage/middleware_spec.rb
189
+ - spec/snapimage/rack/request_file_spec.rb
190
+ - spec/snapimage/rack/request_spec.rb
191
+ - spec/snapimage/rack/response_spec.rb
192
+ - spec/snapimage/server_actions/server_actions.authorize_spec.rb
193
+ - spec/snapimage/server_actions/server_actions.generate_image_spec.rb
194
+ - spec/snapimage/server_actions/server_actions.sync_resource_spec.rb
195
+ - spec/snapimage/server_spec.rb
196
+ - spec/snapimage/storage/assets/local/resource_1/12345678-1x1-0x0x1x1-1x1-1.gif
197
+ - spec/snapimage/storage/assets/local/resource_1/12345678-1x1-0x0x1x1-300x200-0.jpg
198
+ - spec/snapimage/storage/assets/local/resource_1/12345678-1x1.png
199
+ - spec/snapimage/storage/assets/local/resource_2/12345678-1x1-0x0x1x1-1x1-1.gif
200
+ - spec/snapimage/storage/assets/local/resource_2/12345678-1x1-0x0x1x1-300x200-0.jpg
201
+ - spec/snapimage/storage/assets/local/resource_2/12345678-1x1.png
202
+ - spec/snapimage/storage/storage_server.local_spec.rb
203
+ - spec/snapimage/storage/storage_server_spec.rb
204
+ - spec/snapimage/storage/storage_spec.rb
205
+ - spec/spec_helper.rb
206
+ - spec/support/assets/config.json
207
+ - spec/support/assets/config.yml
208
+ - spec/support/assets/stub-1x1.png
209
+ - spec/support/assets/stub-2048x100.png
210
+ - spec/support/assets/stub-300x200.png
211
+ homepage: http://SnapEditor.com
212
+ licenses: []
213
+ post_install_message:
214
+ rdoc_options: []
215
+ require_paths:
216
+ - lib
217
+ required_ruby_version: !ruby/object:Gem::Requirement
218
+ none: false
219
+ requirements:
220
+ - - ! '>='
221
+ - !ruby/object:Gem::Version
222
+ version: '0'
223
+ segments:
224
+ - 0
225
+ hash: -4513065801521139609
226
+ required_rubygems_version: !ruby/object:Gem::Requirement
227
+ none: false
228
+ requirements:
229
+ - - ! '>='
230
+ - !ruby/object:Gem::Version
231
+ version: '0'
232
+ segments:
233
+ - 0
234
+ hash: -4513065801521139609
235
+ requirements: []
236
+ rubyforge_project:
237
+ rubygems_version: 1.8.23
238
+ signing_key:
239
+ specification_version: 3
240
+ summary: SnapImage API Rack Middleware
241
+ test_files:
242
+ - spec/acceptance/delete_resource_images_spec.rb
243
+ - spec/acceptance/list_resource_images_spec.rb
244
+ - spec/acceptance/modify_spec.rb
245
+ - spec/acceptance/sync_spec.rb
246
+ - spec/acceptance/upload_spec.rb
247
+ - spec/snapimage/config_spec.rb
248
+ - spec/snapimage/image/image_name_utils_spec.rb
249
+ - spec/snapimage/image/image_spec.rb
250
+ - spec/snapimage/middleware_spec.rb
251
+ - spec/snapimage/rack/request_file_spec.rb
252
+ - spec/snapimage/rack/request_spec.rb
253
+ - spec/snapimage/rack/response_spec.rb
254
+ - spec/snapimage/server_actions/server_actions.authorize_spec.rb
255
+ - spec/snapimage/server_actions/server_actions.generate_image_spec.rb
256
+ - spec/snapimage/server_actions/server_actions.sync_resource_spec.rb
257
+ - spec/snapimage/server_spec.rb
258
+ - spec/snapimage/storage/assets/local/resource_1/12345678-1x1-0x0x1x1-1x1-1.gif
259
+ - spec/snapimage/storage/assets/local/resource_1/12345678-1x1-0x0x1x1-300x200-0.jpg
260
+ - spec/snapimage/storage/assets/local/resource_1/12345678-1x1.png
261
+ - spec/snapimage/storage/assets/local/resource_2/12345678-1x1-0x0x1x1-1x1-1.gif
262
+ - spec/snapimage/storage/assets/local/resource_2/12345678-1x1-0x0x1x1-300x200-0.jpg
263
+ - spec/snapimage/storage/assets/local/resource_2/12345678-1x1.png
264
+ - spec/snapimage/storage/storage_server.local_spec.rb
265
+ - spec/snapimage/storage/storage_server_spec.rb
266
+ - spec/snapimage/storage/storage_spec.rb
267
+ - spec/spec_helper.rb
268
+ - spec/support/assets/config.json
269
+ - spec/support/assets/config.yml
270
+ - spec/support/assets/stub-1x1.png
271
+ - spec/support/assets/stub-2048x100.png
272
+ - spec/support/assets/stub-300x200.png