shutterbug 0.0.11 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (49) hide show
  1. data/.ruby-version +1 -1
  2. data/.travis.yml +2 -3
  3. data/Guardfile +5 -0
  4. data/README.md +59 -10
  5. data/config.ru +5 -3
  6. data/demo/{withIframe.html → iframe_example.html} +0 -0
  7. data/demo/index.html +7 -24
  8. data/demo/oil-and-water/heatbath.svg +20 -0
  9. data/demo/oil-and-water/ke-gradient.svg +27 -0
  10. data/demo/oil-and-water/oil-and-water.svg +487 -0
  11. data/demo/simple_example.html +35 -0
  12. data/demo/svg_example.html +571 -0
  13. data/images/shutterbug.jpg +0 -0
  14. data/lib/shutterbug.rb +4 -6
  15. data/lib/shutterbug/cache_manager.rb +6 -0
  16. data/lib/shutterbug/cache_manager/cache_entry.rb +19 -0
  17. data/lib/shutterbug/cache_manager/no_cache.rb +19 -0
  18. data/lib/shutterbug/configuration.rb +20 -24
  19. data/lib/shutterbug/handlers.rb +7 -0
  20. data/lib/shutterbug/handlers/convert_handler.rb +38 -0
  21. data/lib/shutterbug/handlers/file_handlers.rb +9 -0
  22. data/lib/shutterbug/handlers/file_handlers/base.rb +39 -0
  23. data/lib/shutterbug/handlers/file_handlers/html_file.rb +22 -0
  24. data/lib/shutterbug/handlers/file_handlers/png_file.rb +23 -0
  25. data/lib/shutterbug/handlers/js_file_handler.rb +27 -0
  26. data/lib/shutterbug/{shutterbug.js → handlers/shutterbug.js} +26 -3
  27. data/lib/shutterbug/phantom_job.rb +17 -12
  28. data/lib/shutterbug/rackapp.rb +33 -31
  29. data/lib/shutterbug/storage.rb +6 -0
  30. data/lib/shutterbug/storage/file_storage.rb +20 -0
  31. data/lib/shutterbug/storage/s3_storage.rb +75 -0
  32. data/shutterbug.gemspec +3 -0
  33. data/spec/shared_examples_for_file_handlers.rb +16 -0
  34. data/spec/shared_examples_for_handlers.rb +26 -0
  35. data/spec/shared_examples_for_storage.rb +17 -0
  36. data/spec/shutterbug/configuration_spec.rb +83 -0
  37. data/spec/shutterbug/convert_handler_spec.rb +29 -0
  38. data/spec/shutterbug/file_storage_spec.rb +5 -0
  39. data/spec/shutterbug/html_file_handler_spec.rb +10 -0
  40. data/spec/shutterbug/js_file_handler_spec.rb +4 -0
  41. data/spec/shutterbug/png_file_handler_spec.rb +10 -0
  42. data/spec/shutterbug/rackapp_spec.rb +49 -41
  43. data/spec/shutterbug/s3_storage_spec.rb +12 -0
  44. metadata +205 -105
  45. data/lib/shutterbug/bug_file.rb +0 -22
  46. data/lib/shutterbug/html_file.rb +0 -3
  47. data/lib/shutterbug/js_file.rb +0 -11
  48. data/lib/shutterbug/png_file.rb +0 -3
  49. data/lib/shutterbug/service.rb +0 -39
@@ -0,0 +1,12 @@
1
+ require 'shared_examples_for_storage'
2
+ require 'fog'
3
+
4
+ describe Shutterbug::Storage::S3Storage do
5
+ let(:mock_write_result) { mock(:public_url => "http://amazon.cloud/url.png")}
6
+ before(:each) do
7
+ Shutterbug::Storage::S3Storage.stub!(:write => mock_write_result)
8
+ end
9
+
10
+ it_behaves_like "a storage provider" do
11
+ end
12
+ end
metadata CHANGED
@@ -1,105 +1,170 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: shutterbug
3
- version: !ruby/object:Gem::Version
4
- prerelease: false
5
- segments:
6
- - 0
7
- - 0
8
- - 11
9
- version: 0.0.11
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ prerelease:
10
6
  platform: ruby
11
- authors:
7
+ authors:
12
8
  - Noah Paessel
13
9
  autorequire:
14
10
  bindir: bin
15
11
  cert_chain: []
16
-
17
- date: 2013-07-24 00:00:00 -04:00
18
- default_executable:
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
12
+ date: 2013-09-17 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: bundler
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: '1.3'
21
22
  type: :development
22
- version_requirements: &id001 !ruby/object:Gem::Requirement
23
- requirements:
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
24
27
  - - ~>
25
- - !ruby/object:Gem::Version
26
- segments:
27
- - 1
28
- - 3
29
- version: "1.3"
30
- name: bundler
31
- requirement: *id001
28
+ - !ruby/object:Gem::Version
29
+ version: '1.3'
30
+ - !ruby/object:Gem::Dependency
31
+ name: rake
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :development
32
39
  prerelease: false
33
- - !ruby/object:Gem::Dependency
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: rspec
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :development
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: guard-rspec
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
34
70
  type: :development
35
- version_requirements: &id002 !ruby/object:Gem::Requirement
36
- requirements:
37
- - - ">="
38
- - !ruby/object:Gem::Version
39
- segments:
40
- - 0
41
- version: "0"
42
- name: rake
43
- requirement: *id002
44
71
  prerelease: false
45
- - !ruby/object:Gem::Dependency
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: rack-cors
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
46
86
  type: :development
47
- version_requirements: &id003 !ruby/object:Gem::Requirement
48
- requirements:
49
- - - ">="
50
- - !ruby/object:Gem::Version
51
- segments:
52
- - 0
53
- version: "0"
54
- name: rspec
55
- requirement: *id003
56
87
  prerelease: false
57
- - !ruby/object:Gem::Dependency
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: guard-rack
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ! '>='
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
58
102
  type: :development
59
- version_requirements: &id004 !ruby/object:Gem::Requirement
60
- requirements:
61
- - - ">="
62
- - !ruby/object:Gem::Version
63
- segments:
64
- - 0
65
- version: "0"
66
- name: guard-rspec
67
- requirement: *id004
68
103
  prerelease: false
69
- - !ruby/object:Gem::Dependency
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: rack-test
112
+ requirement: !ruby/object:Gem::Requirement
113
+ none: false
114
+ requirements:
115
+ - - ! '>='
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
70
118
  type: :development
71
- version_requirements: &id005 !ruby/object:Gem::Requirement
72
- requirements:
73
- - - ">="
74
- - !ruby/object:Gem::Version
75
- segments:
76
- - 0
77
- version: "0"
78
- name: rack-cors
79
- requirement: *id005
80
119
  prerelease: false
81
- - !ruby/object:Gem::Dependency
82
- type: :runtime
83
- version_requirements: &id006 !ruby/object:Gem::Requirement
84
- requirements:
85
- - - ">="
86
- - !ruby/object:Gem::Version
87
- segments:
88
- - 0
89
- version: "0"
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
90
127
  name: rack
91
- requirement: *id006
128
+ requirement: !ruby/object:Gem::Requirement
129
+ none: false
130
+ requirements:
131
+ - - ! '>='
132
+ - !ruby/object:Gem::Version
133
+ version: '0'
134
+ type: :runtime
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
+ - !ruby/object:Gem::Dependency
143
+ name: fog
144
+ requirement: !ruby/object:Gem::Requirement
145
+ none: false
146
+ requirements:
147
+ - - ! '>='
148
+ - !ruby/object:Gem::Version
149
+ version: '0'
150
+ type: :runtime
92
151
  prerelease: false
93
- description: "\n A rack utility that will create and save images (pngs)\n for a part of your web page's current dom. These images\n become available as public '.png' resources in the rack application.\n Currently shutterbug supports HTML, SVG and Canvas elements.\n "
94
- email:
152
+ version_requirements: !ruby/object:Gem::Requirement
153
+ none: false
154
+ requirements:
155
+ - - ! '>='
156
+ - !ruby/object:Gem::Version
157
+ version: '0'
158
+ description: ! "\n A rack utility that will create and save images (pngs)\n for
159
+ a part of your web page's current dom. These images\n become available as public
160
+ '.png' resources in the rack application.\n Currently shutterbug supports HTML,
161
+ SVG and Canvas elements.\n "
162
+ email:
95
163
  - knowuh@gmail.com
96
164
  executables: []
97
-
98
165
  extensions: []
99
-
100
166
  extra_rdoc_files: []
101
-
102
- files:
167
+ files:
103
168
  - .gitignore
104
169
  - .rspec
105
170
  - .ruby-gemset
@@ -113,53 +178,88 @@ files:
113
178
  - config.ru
114
179
  - demo/iframe.html
115
180
  - demo/iframe2.html
181
+ - demo/iframe_example.html
116
182
  - demo/index.html
117
183
  - demo/main.css
118
- - demo/withIframe.html
184
+ - demo/oil-and-water/heatbath.svg
185
+ - demo/oil-and-water/ke-gradient.svg
186
+ - demo/oil-and-water/oil-and-water.svg
187
+ - demo/simple_example.html
188
+ - demo/svg_example.html
189
+ - images/shutterbug.jpg
119
190
  - lib/shutterbug.rb
120
- - lib/shutterbug/bug_file.rb
191
+ - lib/shutterbug/cache_manager.rb
192
+ - lib/shutterbug/cache_manager/cache_entry.rb
193
+ - lib/shutterbug/cache_manager/no_cache.rb
121
194
  - lib/shutterbug/configuration.rb
122
- - lib/shutterbug/html_file.rb
123
- - lib/shutterbug/js_file.rb
195
+ - lib/shutterbug/handlers.rb
196
+ - lib/shutterbug/handlers/convert_handler.rb
197
+ - lib/shutterbug/handlers/file_handlers.rb
198
+ - lib/shutterbug/handlers/file_handlers/base.rb
199
+ - lib/shutterbug/handlers/file_handlers/html_file.rb
200
+ - lib/shutterbug/handlers/file_handlers/png_file.rb
201
+ - lib/shutterbug/handlers/js_file_handler.rb
202
+ - lib/shutterbug/handlers/shutterbug.js
124
203
  - lib/shutterbug/phantom_job.rb
125
- - lib/shutterbug/png_file.rb
126
204
  - lib/shutterbug/rackapp.rb
127
205
  - lib/shutterbug/rasterize.js
128
- - lib/shutterbug/service.rb
129
- - lib/shutterbug/shutterbug.js
206
+ - lib/shutterbug/storage.rb
207
+ - lib/shutterbug/storage/file_storage.rb
208
+ - lib/shutterbug/storage/s3_storage.rb
130
209
  - shutterbug.gemspec
210
+ - spec/shared_examples_for_file_handlers.rb
211
+ - spec/shared_examples_for_handlers.rb
212
+ - spec/shared_examples_for_storage.rb
213
+ - spec/shutterbug/configuration_spec.rb
214
+ - spec/shutterbug/convert_handler_spec.rb
215
+ - spec/shutterbug/file_storage_spec.rb
216
+ - spec/shutterbug/html_file_handler_spec.rb
217
+ - spec/shutterbug/js_file_handler_spec.rb
218
+ - spec/shutterbug/png_file_handler_spec.rb
131
219
  - spec/shutterbug/rackapp_spec.rb
220
+ - spec/shutterbug/s3_storage_spec.rb
132
221
  - spec/spec_helper.rb
133
- has_rdoc: true
134
222
  homepage: http://github.com/concord-consortium/shutterbug
135
- licenses:
223
+ licenses:
136
224
  - MIT, Simplified BSD, Apache 2.0
137
225
  post_install_message:
138
226
  rdoc_options: []
139
-
140
- require_paths:
227
+ require_paths:
141
228
  - lib
142
- required_ruby_version: !ruby/object:Gem::Requirement
143
- requirements:
144
- - - ">="
145
- - !ruby/object:Gem::Version
146
- segments:
229
+ required_ruby_version: !ruby/object:Gem::Requirement
230
+ none: false
231
+ requirements:
232
+ - - ! '>='
233
+ - !ruby/object:Gem::Version
234
+ version: '0'
235
+ segments:
147
236
  - 0
148
- version: "0"
149
- required_rubygems_version: !ruby/object:Gem::Requirement
150
- requirements:
151
- - - ">="
152
- - !ruby/object:Gem::Version
153
- segments:
237
+ hash: -4086537772961595955
238
+ required_rubygems_version: !ruby/object:Gem::Requirement
239
+ none: false
240
+ requirements:
241
+ - - ! '>='
242
+ - !ruby/object:Gem::Version
243
+ version: '0'
244
+ segments:
154
245
  - 0
155
- version: "0"
246
+ hash: -4086537772961595955
156
247
  requirements: []
157
-
158
248
  rubyforge_project:
159
- rubygems_version: 1.3.6
249
+ rubygems_version: 1.8.25
160
250
  signing_key:
161
251
  specification_version: 3
162
252
  summary: use Shutterbug::Rackapp
163
- test_files:
253
+ test_files:
254
+ - spec/shared_examples_for_file_handlers.rb
255
+ - spec/shared_examples_for_handlers.rb
256
+ - spec/shared_examples_for_storage.rb
257
+ - spec/shutterbug/configuration_spec.rb
258
+ - spec/shutterbug/convert_handler_spec.rb
259
+ - spec/shutterbug/file_storage_spec.rb
260
+ - spec/shutterbug/html_file_handler_spec.rb
261
+ - spec/shutterbug/js_file_handler_spec.rb
262
+ - spec/shutterbug/png_file_handler_spec.rb
164
263
  - spec/shutterbug/rackapp_spec.rb
264
+ - spec/shutterbug/s3_storage_spec.rb
165
265
  - spec/spec_helper.rb
@@ -1,22 +0,0 @@
1
- module Shutterbug
2
- class BugFile
3
- def initialize(filename)
4
- @filename = filename
5
- end
6
-
7
- def open
8
- @stream_file = File.open(@filename, 'r')
9
- @stream_file.rewind
10
- end
11
-
12
- def each(&blk)
13
- @stream_file.each(&blk)
14
- ensure
15
- @stream_file.close
16
- end
17
-
18
- def size
19
- @stream_file.size
20
- end
21
- end
22
- end
@@ -1,3 +0,0 @@
1
- module Shutterbug
2
- class HtmlFile < BugFile; end
3
- end
@@ -1,11 +0,0 @@
1
- module Shutterbug
2
- class JsFile < BugFile
3
- def initialize(_config=Configuration.instance())
4
- @config = _config
5
- @javascript = File.read(@config.js_file).gsub(/CONVERT_PATH/,@config.convert_path)
6
- end
7
- def open
8
- @stream_file = StringIO.new(@javascript)
9
- end
10
- end
11
- end
@@ -1,3 +0,0 @@
1
- module Shutterbug
2
- class PngFile < BugFile; end
3
- end
@@ -1,39 +0,0 @@
1
- require 'stringio'
2
- module Shutterbug
3
- class Service
4
-
5
- def initialize(_config = Configuration.instance)
6
- @file_cache = {}
7
- @config = _config
8
- @js_file = JsFile.new()
9
- end
10
-
11
- def convert(base_url, html, css="", width=1000, height=700)
12
- job = PhantomJob.new(base_url, html, css, width, height)
13
- key = job.cache_key
14
- unless (@file_cache[key])
15
- job.rasterize
16
- @file_cache[key] = {'html' => job.html_file, 'png' => job.png_file }
17
- end
18
- return key
19
- end
20
-
21
- def get_png_file(sha)
22
- file = @file_cache[sha]['png']
23
- file.open
24
- return file
25
- end
26
-
27
- def get_html_file(sha)
28
- file = @file_cache[sha]['html']
29
- file.open
30
- return file
31
- end
32
-
33
- def get_shutterbug_file
34
- file = @js_file
35
- file.open
36
- return file
37
- end
38
- end
39
- end