httpimagestore 1.8.1 → 1.9.0

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 (64) hide show
  1. checksums.yaml +15 -0
  2. data/Gemfile +7 -7
  3. data/Gemfile.lock +20 -20
  4. data/README.md +165 -37
  5. data/Rakefile +7 -2
  6. data/VERSION +1 -1
  7. data/bin/httpimagestore +74 -41
  8. data/lib/httpimagestore/configuration/file.rb +20 -11
  9. data/lib/httpimagestore/configuration/handler.rb +96 -257
  10. data/lib/httpimagestore/configuration/handler/source_store_base.rb +37 -0
  11. data/lib/httpimagestore/configuration/handler/statement.rb +114 -0
  12. data/lib/httpimagestore/configuration/identify.rb +17 -9
  13. data/lib/httpimagestore/configuration/output.rb +33 -61
  14. data/lib/httpimagestore/configuration/path.rb +2 -2
  15. data/lib/httpimagestore/configuration/request_state.rb +131 -0
  16. data/lib/httpimagestore/configuration/s3.rb +41 -29
  17. data/lib/httpimagestore/configuration/thumbnailer.rb +189 -96
  18. data/lib/httpimagestore/configuration/validate_hmac.rb +170 -0
  19. data/lib/httpimagestore/error_reporter.rb +6 -1
  20. data/lib/httpimagestore/ruby_string_template.rb +10 -19
  21. metadata +40 -102
  22. data/.rspec +0 -1
  23. data/features/cache-control.feature +0 -41
  24. data/features/compatibility.feature +0 -165
  25. data/features/data-uri.feature +0 -55
  26. data/features/encoding.feature +0 -103
  27. data/features/error-reporting.feature +0 -281
  28. data/features/flexi.feature +0 -259
  29. data/features/health-check.feature +0 -29
  30. data/features/request-matching.feature +0 -211
  31. data/features/rewrite.feature +0 -122
  32. data/features/s3-store-and-thumbnail.feature +0 -82
  33. data/features/source-failover.feature +0 -71
  34. data/features/step_definitions/httpimagestore_steps.rb +0 -203
  35. data/features/storage.feature +0 -198
  36. data/features/support/env.rb +0 -116
  37. data/features/support/test-large.jpg +0 -0
  38. data/features/support/test.empty +0 -0
  39. data/features/support/test.jpg +0 -0
  40. data/features/support/test.png +0 -0
  41. data/features/support/test.txt +0 -1
  42. data/features/support/tiny.png +0 -0
  43. data/features/xid-forwarding.feature +0 -49
  44. data/httpimagestore.gemspec +0 -145
  45. data/load_test/load_test.1k.23a022f6e.m1.small-comp.csv +0 -3
  46. data/load_test/load_test.1k.ec9bde794.m1.small.csv +0 -4
  47. data/load_test/load_test.jmx +0 -317
  48. data/load_test/thumbnail_specs.csv +0 -11
  49. data/load_test/thumbnail_specs_v2.csv +0 -10
  50. data/spec/configuration_file_spec.rb +0 -333
  51. data/spec/configuration_handler_spec.rb +0 -255
  52. data/spec/configuration_identify_spec.rb +0 -67
  53. data/spec/configuration_output_spec.rb +0 -821
  54. data/spec/configuration_path_spec.rb +0 -138
  55. data/spec/configuration_s3_spec.rb +0 -911
  56. data/spec/configuration_source_failover_spec.rb +0 -101
  57. data/spec/configuration_spec.rb +0 -90
  58. data/spec/configuration_thumbnailer_spec.rb +0 -483
  59. data/spec/ruby_string_template_spec.rb +0 -61
  60. data/spec/spec_helper.rb +0 -89
  61. data/spec/support/compute.jpg +0 -0
  62. data/spec/support/cuba_response_env.rb +0 -40
  63. data/spec/support/full.cfg +0 -183
  64. data/spec/support/utf_string.txt +0 -1
@@ -1,198 +0,0 @@
1
- Feature: Storing images under different names
2
- Storage supports UUID and SHA digest based auto generated storage as well as user provided via request or static configuration string.
3
-
4
- Background:
5
- Given httpthumbnailer server is running at http://localhost:3100/health_check
6
- Given httpimagestore server is running at http://localhost:3000/health_check with the following configuration
7
- """
8
- path "input_digest" "#{input_digest}"
9
- path "input_sha256" "#{input_sha256}"
10
- path "image_digest" "#{image_digest}"
11
- path "image_sha256" "#{image_sha256}"
12
- path "uuid" "#{uuid}"
13
- path "image_meta" "#{image_width}x#{image_height}.#{image_mime_extension}"
14
- path "input_image_meta" "#{input_image_width}x#{input_image_height}.#{input_image_mime_extension}"
15
-
16
- post "images" "input_digest" {
17
- thumbnail "input" "thumbnail" operation="crop" width="50" height="50"
18
- store_file "thumbnail" root="/tmp" path="input_digest"
19
- output_store_path "thumbnail"
20
- }
21
-
22
- post "images" "input_sha256" {
23
- thumbnail "input" "thumbnail" operation="crop" width="50" height="50"
24
- store_file "thumbnail" root="/tmp" path="input_sha256"
25
- output_store_path "thumbnail"
26
- }
27
-
28
- post "images" "image_digest" {
29
- thumbnail "input" "thumbnail" operation="crop" width="50" height="50"
30
- store_file "thumbnail" root="/tmp" path="image_digest"
31
- output_store_path "thumbnail"
32
- }
33
-
34
- post "images" "image_sha256" {
35
- thumbnail "input" "thumbnail" operation="crop" width="50" height="50"
36
- store_file "thumbnail" root="/tmp" path="image_sha256"
37
- output_store_path "thumbnail"
38
- }
39
-
40
- post "images" "uuid" {
41
- store_file "input" root="/tmp" path="uuid"
42
- output_store_path "input"
43
- }
44
-
45
- post "images" "image_meta" "identify" {
46
- identify "input"
47
- store_file "input" root="/tmp" path="image_meta"
48
- output_store_path "input"
49
- }
50
-
51
- post "images" "image_meta" "thumbnail" "input" {
52
- thumbnail "input" "thumbnail" operation="crop" width="50" height="100"
53
- store_file "input" root="/tmp" path="image_meta"
54
- output_store_path "input"
55
- }
56
-
57
- post "images" "image_meta" "thumbnails" "input" {
58
- thumbnail "input" {
59
- "thumbnail" operation="crop" width="50" height="100"
60
- }
61
-
62
- store_file "input" root="/tmp" path="image_meta"
63
- output_store_path "input"
64
- }
65
-
66
- post "images" "image_meta" "thumbnail" {
67
- thumbnail "input" "thumbnail" operation="crop" width="50" height="100"
68
- store_file "thumbnail" root="/tmp" path="image_meta"
69
- output_store_path "thumbnail"
70
- }
71
-
72
- post "images" "image_meta" "thumbnails" {
73
- thumbnail "input" {
74
- "thumbnail" operation="crop" width="50" height="100"
75
- }
76
- store_file "thumbnail" root="/tmp" path="image_meta"
77
- output_store_path "thumbnail"
78
- }
79
-
80
- post "images" "input_image_meta" "thumbnail" {
81
- thumbnail "input" "thumbnail" operation="crop" width="50" height="100"
82
- store_file "thumbnail" root="/tmp" path="input_image_meta"
83
- output_store_path "thumbnail"
84
- }
85
- """
86
-
87
- @storage @input_digest
88
- Scenario: Posting picture to file system under input data digest
89
- Given there is no file /tmp/b0fe25319ba5909a
90
- Given test.png file content as request body
91
- When I do POST request http://localhost:3000/images/input_digest
92
- Then response status will be 200
93
- And response content type will be text/plain
94
- And response body will be CRLF ended lines
95
- """
96
- b0fe25319ba5909a
97
- """
98
- Then file /tmp/b0fe25319ba5909a will contain PNG image of size 50x50
99
-
100
- @storage @input_sha256
101
- Scenario: Posting picture to file system under input data digest
102
- Given there is no file /tmp/b0fe25319ba5909aa97fded546847a96d7fdf26e18715b0cfccfcbee52dce57e
103
- Given test.png file content as request body
104
- When I do POST request http://localhost:3000/images/input_sha256
105
- Then response status will be 200
106
- And response content type will be text/plain
107
- And response body will be CRLF ended lines
108
- """
109
- b0fe25319ba5909aa97fded546847a96d7fdf26e18715b0cfccfcbee52dce57e
110
- """
111
- Then file /tmp/b0fe25319ba5909aa97fded546847a96d7fdf26e18715b0cfccfcbee52dce57e will contain PNG image of size 50x50
112
-
113
- # Following tests depend on libpng/ImageMagick version
114
- #@storage @image_digest
115
- #Scenario: Posting picture to file system under input data digest
116
- #Given there is no file /tmp/b0fe25319ba5909a
117
- #Given test.png file content as request body
118
- #When I do POST request http://localhost:3000/images/image_digest
119
- #Then response status will be 200
120
- #And response content type will be text/plain
121
- #And response body will be CRLF ended lines
122
- #"""
123
- #091000e2c0aee836
124
- #"""
125
- #Then file /tmp/091000e2c0aee836 will contain PNG image of size 50x50
126
-
127
- #@storage @image_sha256
128
- #Scenario: Posting picture to file system under input data digest
129
- #Given there is no file /tmp/b0fe25319ba5909aa97fded546847a96d7fdf26e18715b0cfccfcbee52dce57e
130
- #Given test.png file content as request body
131
- #When I do POST request http://localhost:3000/images/image_sha256
132
- #Then response status will be 200
133
- #And response content type will be text/plain
134
- #And response body will be CRLF ended lines
135
- #"""
136
- #091000e2c0aee836fff432c1151faba86d46690c900c0f6355247a353defa37f
137
- #"""
138
- #Then file /tmp/091000e2c0aee836fff432c1151faba86d46690c900c0f6355247a353defa37f will contain PNG image of size 50x50
139
-
140
- @storage @uuid
141
- Scenario: Posting picture to file system under input data digest
142
- Given test.png file content as request body
143
- When I do POST request http://localhost:3000/images/uuid
144
- Then response status will be 200
145
- And response content type will be text/plain
146
- And response body will contain UUID
147
-
148
- @storage @image_meta @identify
149
- Scenario: Posting picture to file system under input data digest
150
- Given there is no file /tmp/509x719.png
151
- Given test.png file content as request body
152
- When I do POST request http://localhost:3000/images/image_meta/identify
153
- Then response status will be 200
154
- And response content type will be text/plain
155
- And response body will be CRLF ended lines
156
- """
157
- 509x719.png
158
- """
159
- Then file /tmp/509x719.png will contain PNG image of size 509x719
160
-
161
- @storage @image_meta @thumbnail
162
- Scenario: Posting picture to file system under input data digest
163
- Given test.png file content as request body
164
- Given there is no file /tmp/50x100.png
165
- When I do POST request http://localhost:3000/images/image_meta/thumbnail
166
- Then response status will be 200
167
- And response content type will be text/plain
168
- And response body will be CRLF ended lines
169
- """
170
- 50x100.png
171
- """
172
- Then file /tmp/50x100.png will contain PNG image of size 50x100
173
-
174
- @storage @image_meta @thumbnails
175
- Scenario: Posting picture to file system under input data digest
176
- Given test.png file content as request body
177
- Given there is no file /tmp/50x100.png
178
- When I do POST request http://localhost:3000/images/image_meta/thumbnails
179
- Then response status will be 200
180
- And response content type will be text/plain
181
- And response body will be CRLF ended lines
182
- """
183
- 50x100.png
184
- """
185
- Then file /tmp/50x100.png will contain PNG image of size 50x100
186
-
187
- @storage @input_image_meta
188
- Scenario: Input image meta variables
189
- Given there is no file /tmp/509x719.png
190
- Given test.png file content as request body
191
- When I do POST request http://localhost:3000/images/input_image_meta/thumbnail
192
- Then response status will be 200
193
- And response content type will be text/plain
194
- And response body will be CRLF ended lines
195
- """
196
- 509x719.png
197
- """
198
- Then file /tmp/509x719.png will contain PNG image of size 50x100
@@ -1,116 +0,0 @@
1
- require 'bundler'
2
- begin
3
- Bundler.setup(:default, :development)
4
- rescue Bundler::BundlerError => e
5
- $stderr.puts e.message
6
- $stderr.puts "Run `bundle install` to install missing gems"
7
- exit e.status_code
8
- end
9
-
10
- $LOAD_PATH.unshift(File.dirname(__FILE__) + '/../../lib')
11
- require 'rspec/expectations'
12
-
13
- require 'daemon'
14
- require 'timeout'
15
- require 'faraday'
16
- require "open3"
17
- require "thread"
18
- require 'tempfile'
19
- require 'RMagick'
20
- require 'aws-sdk'
21
- require 'httpimagestore/aws_sdk_regions_hack'
22
- require 'digest'
23
-
24
- class String
25
- def replace_s3_variables
26
- string = self.dup
27
- string.gsub!(/@AWS_ACCESS_KEY_ID@/, ENV['AWS_ACCESS_KEY_ID'])
28
- string.gsub!(/@AWS_SECRET_ACCESS_KEY@/, ENV['AWS_SECRET_ACCESS_KEY'])
29
- string.gsub!(/@AWS_S3_TEST_BUCKET@/, ENV['AWS_S3_TEST_BUCKET'])
30
- string
31
- end
32
- end
33
-
34
- def gem_dir
35
- Pathname.new(__FILE__).dirname + '..' + '..'
36
- end
37
-
38
- def features_dir
39
- gem_dir + 'features'
40
- end
41
-
42
- def support_dir
43
- features_dir + 'support'
44
- end
45
-
46
- def script(file)
47
- gem_dir + 'bin' + file
48
- end
49
-
50
- def http_client
51
- @faraday ||= Faraday.new
52
- end
53
-
54
- def request(method, uri, body, headers)
55
- http_client.run_request(method.downcase.to_sym, uri.replace_s3_variables, body, headers || {})
56
- end
57
-
58
- def get(url)
59
- http_client.get(url).body
60
- end
61
-
62
- def get_headers(url)
63
- http_client.get(url).headers
64
- end
65
-
66
- @@running_cmd = {}
67
- def start_server(cmd, pid_file, log_file, test_url)
68
- if @@running_cmd[pid_file]
69
- return if @@running_cmd[pid_file] == cmd
70
- stop_server(pid_file)
71
- end
72
-
73
- fork do
74
- Daemon.daemonize(pid_file, log_file)
75
- log_file = Pathname.new(log_file)
76
- log_file.truncate(0) if log_file.exist?
77
- exec(cmd)
78
- end
79
-
80
- @@running_cmd[pid_file] = cmd
81
-
82
- ppid = Process.pid
83
- at_exit do
84
- stop_server(pid_file) if Process.pid == ppid
85
- end
86
-
87
- Timeout.timeout(10) do
88
- begin
89
- get test_url
90
- rescue Faraday::Error::ConnectionFailed
91
- sleep 0.1
92
- retry
93
- end
94
- end
95
- end
96
-
97
- def stop_server(pid_file)
98
- pid_file = Pathname.new(pid_file)
99
- return unless pid_file.exist?
100
-
101
- #STDERR.puts http_client.get("http://localhost:3000/stats").body if pid_file.to_s.include? 'httpimagestore'
102
- pid = pid_file.read.strip.to_i
103
-
104
- Timeout.timeout(20) do
105
- begin
106
- loop do
107
- Process.kill("TERM", pid)
108
- sleep 0.1
109
- end
110
- rescue Errno::ESRCH
111
- @@running_cmd.delete pid_file.to_s
112
- pid_file.unlink
113
- end
114
- end
115
- end
116
-
File without changes
Binary file
Binary file
@@ -1 +0,0 @@
1
- hello world
Binary file
@@ -1,49 +0,0 @@
1
- Feature: Forwarding of transaction ID header to thumbnailer
2
- HTTP Image Store should forward transaction ID header found in the request to HTTP Thumbnailer
3
-
4
- Background:
5
- Given httpthumbnailer server is running at http://localhost:3100/health_check
6
- Given httpimagestore server is running at http://localhost:3000/ with the following configuration
7
- """
8
- post "identify" {
9
- identify "input"
10
- }
11
-
12
- post "single" {
13
- thumbnail "input" "thumbnail" operation="pad" width="8" height="8"
14
- }
15
-
16
- post "multi" {
17
- thumbnail "input" {
18
- "small" operation="crop" width=128 height=128 format="jpeg"
19
- "tiny_png" operation="crop" width=32 height=32 format="png"
20
- }
21
- }
22
- """
23
-
24
- @xid-forwarding
25
- Scenario: Should forward XID with identify requests
26
- Given tiny.png file content as request body
27
- And XID header set to 123
28
- When I do POST request http://localhost:3000/identify
29
- Then response status will be 200
30
- And httpimagestore log will contain xid="123"
31
- And httpthumbnailer log will contain xid="123"
32
-
33
- @xid-forwarding
34
- Scenario: Should forward XID with single thumbnail requests
35
- Given tiny.png file content as request body
36
- And XID header set to 123
37
- When I do POST request http://localhost:3000/single
38
- Then response status will be 200
39
- And httpimagestore log will contain xid="123"
40
- And httpthumbnailer log will contain xid="123"
41
-
42
- @xid-forwarding
43
- Scenario: Should forward XID with multi thumbnail requests
44
- Given tiny.png file content as request body
45
- And XID header set to 123
46
- When I do POST request http://localhost:3000/multi
47
- Then response status will be 200
48
- And httpimagestore log will contain xid="123"
49
- And httpthumbnailer log will contain xid="123"
@@ -1,145 +0,0 @@
1
- # Generated by jeweler
2
- # DO NOT EDIT THIS FILE DIRECTLY
3
- # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
- # -*- encoding: utf-8 -*-
5
-
6
- Gem::Specification.new do |s|
7
- s.name = "httpimagestore"
8
- s.version = "1.8.1"
9
-
10
- s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
- s.authors = ["Jakub Pastuszek"]
12
- s.date = "2014-08-28"
13
- s.description = "Thumbnails images using httpthumbnailer and stored data on HTTP server (S3)"
14
- s.email = "jpastuszek@gmail.com"
15
- s.executables = ["httpimagestore"]
16
- s.extra_rdoc_files = [
17
- "LICENSE.txt",
18
- "README.md"
19
- ]
20
- s.files = [
21
- ".document",
22
- ".rspec",
23
- "Gemfile",
24
- "Gemfile.lock",
25
- "LICENSE.txt",
26
- "README.md",
27
- "Rakefile",
28
- "VERSION",
29
- "bin/httpimagestore",
30
- "features/cache-control.feature",
31
- "features/compatibility.feature",
32
- "features/data-uri.feature",
33
- "features/encoding.feature",
34
- "features/error-reporting.feature",
35
- "features/flexi.feature",
36
- "features/health-check.feature",
37
- "features/request-matching.feature",
38
- "features/rewrite.feature",
39
- "features/s3-store-and-thumbnail.feature",
40
- "features/source-failover.feature",
41
- "features/step_definitions/httpimagestore_steps.rb",
42
- "features/storage.feature",
43
- "features/support/env.rb",
44
- "features/support/test-large.jpg",
45
- "features/support/test.empty",
46
- "features/support/test.jpg",
47
- "features/support/test.png",
48
- "features/support/test.txt",
49
- "features/support/tiny.png",
50
- "features/xid-forwarding.feature",
51
- "httpimagestore.gemspec",
52
- "lib/httpimagestore/aws_sdk_regions_hack.rb",
53
- "lib/httpimagestore/configuration.rb",
54
- "lib/httpimagestore/configuration/file.rb",
55
- "lib/httpimagestore/configuration/handler.rb",
56
- "lib/httpimagestore/configuration/identify.rb",
57
- "lib/httpimagestore/configuration/output.rb",
58
- "lib/httpimagestore/configuration/path.rb",
59
- "lib/httpimagestore/configuration/s3.rb",
60
- "lib/httpimagestore/configuration/source_failover.rb",
61
- "lib/httpimagestore/configuration/thumbnailer.rb",
62
- "lib/httpimagestore/error_reporter.rb",
63
- "lib/httpimagestore/ruby_string_template.rb",
64
- "load_test/load_test.1k.23a022f6e.m1.small-comp.csv",
65
- "load_test/load_test.1k.ec9bde794.m1.small.csv",
66
- "load_test/load_test.jmx",
67
- "load_test/thumbnail_specs.csv",
68
- "load_test/thumbnail_specs_v2.csv",
69
- "spec/configuration_file_spec.rb",
70
- "spec/configuration_handler_spec.rb",
71
- "spec/configuration_identify_spec.rb",
72
- "spec/configuration_output_spec.rb",
73
- "spec/configuration_path_spec.rb",
74
- "spec/configuration_s3_spec.rb",
75
- "spec/configuration_source_failover_spec.rb",
76
- "spec/configuration_spec.rb",
77
- "spec/configuration_thumbnailer_spec.rb",
78
- "spec/ruby_string_template_spec.rb",
79
- "spec/spec_helper.rb",
80
- "spec/support/compute.jpg",
81
- "spec/support/cuba_response_env.rb",
82
- "spec/support/full.cfg",
83
- "spec/support/utf_string.txt"
84
- ]
85
- s.homepage = "http://github.com/jpastuszek/httpimagestore"
86
- s.licenses = ["MIT"]
87
- s.require_paths = ["lib"]
88
- s.rubygems_version = "1.8.23"
89
- s.summary = "HTTP based image storage and thumbnailer"
90
-
91
- if s.respond_to? :specification_version then
92
- s.specification_version = 3
93
-
94
- if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
95
- s.add_runtime_dependency(%q<unicorn-cuba-base>, ["~> 1.2.2"])
96
- s.add_runtime_dependency(%q<httpthumbnailer-client>, ["~> 1.2.0"])
97
- s.add_runtime_dependency(%q<aws-sdk>, ["~> 1.10"])
98
- s.add_runtime_dependency(%q<mime-types>, ["~> 1.17"])
99
- s.add_runtime_dependency(%q<sdl4r>, ["~> 0.9"])
100
- s.add_runtime_dependency(%q<msgpack>, ["~> 0.5"])
101
- s.add_runtime_dependency(%q<addressable>, ["~> 2.3"])
102
- s.add_development_dependency(%q<faraday>, [">= 0.8"])
103
- s.add_development_dependency(%q<rspec>, ["~> 2.13"])
104
- s.add_development_dependency(%q<cucumber>, [">= 0"])
105
- s.add_development_dependency(%q<jeweler>, ["~> 1.8.4"])
106
- s.add_development_dependency(%q<rdoc>, ["~> 3.9"])
107
- s.add_development_dependency(%q<daemon>, ["~> 1"])
108
- s.add_development_dependency(%q<prawn>, ["= 0.8.4"])
109
- s.add_development_dependency(%q<httpthumbnailer>, ["~> 1.2.0"])
110
- else
111
- s.add_dependency(%q<unicorn-cuba-base>, ["~> 1.2.2"])
112
- s.add_dependency(%q<httpthumbnailer-client>, ["~> 1.2.0"])
113
- s.add_dependency(%q<aws-sdk>, ["~> 1.10"])
114
- s.add_dependency(%q<mime-types>, ["~> 1.17"])
115
- s.add_dependency(%q<sdl4r>, ["~> 0.9"])
116
- s.add_dependency(%q<msgpack>, ["~> 0.5"])
117
- s.add_dependency(%q<addressable>, ["~> 2.3"])
118
- s.add_dependency(%q<faraday>, [">= 0.8"])
119
- s.add_dependency(%q<rspec>, ["~> 2.13"])
120
- s.add_dependency(%q<cucumber>, [">= 0"])
121
- s.add_dependency(%q<jeweler>, ["~> 1.8.4"])
122
- s.add_dependency(%q<rdoc>, ["~> 3.9"])
123
- s.add_dependency(%q<daemon>, ["~> 1"])
124
- s.add_dependency(%q<prawn>, ["= 0.8.4"])
125
- s.add_dependency(%q<httpthumbnailer>, ["~> 1.2.0"])
126
- end
127
- else
128
- s.add_dependency(%q<unicorn-cuba-base>, ["~> 1.2.2"])
129
- s.add_dependency(%q<httpthumbnailer-client>, ["~> 1.2.0"])
130
- s.add_dependency(%q<aws-sdk>, ["~> 1.10"])
131
- s.add_dependency(%q<mime-types>, ["~> 1.17"])
132
- s.add_dependency(%q<sdl4r>, ["~> 0.9"])
133
- s.add_dependency(%q<msgpack>, ["~> 0.5"])
134
- s.add_dependency(%q<addressable>, ["~> 2.3"])
135
- s.add_dependency(%q<faraday>, [">= 0.8"])
136
- s.add_dependency(%q<rspec>, ["~> 2.13"])
137
- s.add_dependency(%q<cucumber>, [">= 0"])
138
- s.add_dependency(%q<jeweler>, ["~> 1.8.4"])
139
- s.add_dependency(%q<rdoc>, ["~> 3.9"])
140
- s.add_dependency(%q<daemon>, ["~> 1"])
141
- s.add_dependency(%q<prawn>, ["= 0.8.4"])
142
- s.add_dependency(%q<httpthumbnailer>, ["~> 1.2.0"])
143
- end
144
- end
145
-