httpthumbnailer 0.3.0 → 0.3.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (7) hide show
  1. data/Gemfile +1 -1
  2. data/Gemfile.lock +5 -9
  3. data/README.md +110 -0
  4. data/VERSION +1 -1
  5. data/httpthumbnailer.gemspec +8 -8
  6. metadata +131 -201
  7. data/README.rdoc +0 -19
data/Gemfile CHANGED
@@ -1,7 +1,7 @@
1
1
  source "http://rubygems.org"
2
2
 
3
3
  gem "sinatra", ">= 1.2.6"
4
- gem "mongrel", ">= 1.1.5"
4
+ gem "mongrel", ">= 1.2.0.pre2"
5
5
  gem "rmagick", "~> 2"
6
6
  gem "haml", "~> 3"
7
7
  gem "ruby-ip", "~> 0.9"
data/Gemfile.lock CHANGED
@@ -2,7 +2,6 @@ GEM
2
2
  remote: http://rubygems.org/
3
3
  specs:
4
4
  builder (3.0.0)
5
- cgi_multipart_eof_fix (2.5.0)
6
5
  cli (1.1.0)
7
6
  cucumber (1.1.2)
8
7
  builder (>= 2.1.2)
@@ -11,9 +10,8 @@ GEM
11
10
  json (>= 1.4.6)
12
11
  term-ansicolor (>= 1.0.6)
13
12
  daemon (1.1.0)
14
- daemons (1.1.4)
13
+ daemons (1.0.10)
15
14
  diff-lcs (1.1.3)
16
- fastthread (1.0.7)
17
15
  gem_plugin (0.2.3)
18
16
  gherkin (2.6.5)
19
17
  json (>= 1.4.6)
@@ -25,11 +23,9 @@ GEM
25
23
  git (>= 1.2.5)
26
24
  rake
27
25
  json (1.6.1)
28
- mongrel (1.1.5)
29
- cgi_multipart_eof_fix (>= 2.4)
30
- daemons (>= 1.0.3)
31
- fastthread (>= 1.0.1)
32
- gem_plugin (>= 0.2.3)
26
+ mongrel (1.2.0.pre2)
27
+ daemons (~> 1.0.10)
28
+ gem_plugin (~> 0.2.3)
33
29
  rack (1.3.5)
34
30
  rack-protection (1.1.4)
35
31
  rack
@@ -64,7 +60,7 @@ DEPENDENCIES
64
60
  haml (~> 3)
65
61
  httpclient (~> 2.2)
66
62
  jeweler (~> 1.6.4)
67
- mongrel (>= 1.1.5)
63
+ mongrel (>= 1.2.0.pre2)
68
64
  rcov
69
65
  rdoc (~> 3.9)
70
66
  rmagick (~> 2)
data/README.md ADDED
@@ -0,0 +1,110 @@
1
+ # httpthumbnailer
2
+
3
+ HTTP API server for image thumbnailing and format conversion.
4
+
5
+ It is using **ImageMagick** as the image processing library.
6
+
7
+ ## Installing
8
+
9
+ You will need the following system packages installed: `imagemagick`, `libpng`, `pkg-config`, `make`.
10
+ Optionally you may want to install `fcgi` package and gem to be able to use it as **FastCGI** backend.
11
+
12
+ For Arch Linux you can use this commands:
13
+
14
+ pacman -S imagemagick
15
+ pacman -S libpng
16
+ pacman -S pkg-config
17
+ pacman -S make
18
+
19
+ Then you can install the gem as usual:
20
+
21
+ gem install httpthumbnailer
22
+
23
+ ## Usage
24
+
25
+ It can be started as a stand alone server or as FastCGI backend.
26
+
27
+ ### Stand alone server
28
+
29
+ This mode is useful for testing.
30
+ By default **Mongrel** will be used as HTTP handling library (you can use --server option to specify different server that is supported by Sinatra).
31
+
32
+ To start it in that mode run:
33
+
34
+ httpthumbnailer
35
+
36
+ By default it will be listening on **localhost** port **3100**.
37
+
38
+ ### FastCGI
39
+
40
+ In this mode you can run many **httpthumbnailer** instances so that requests will be load balanced between them equally.
41
+ Since it is single threaded (some ImageMagick operations may be multithreaded) it will be able to max out only single CPU core.
42
+ Therefore it is recommended to run as many instances as there are CPU cores available.
43
+
44
+ Make sure you have FastCGI system library installed.
45
+
46
+ For Arch Linux you can use this command:
47
+
48
+ pacman -S fcgi
49
+
50
+ And you have `fcgi` gem installed with:
51
+
52
+ gem install fcgi
53
+
54
+ Here is an example **Lighttpd** configuration:
55
+
56
+ $SERVER["socket"] == ":3100" {
57
+ server.reject-expect-100-with-417 = "disable"
58
+ fastcgi.debug = 1
59
+ fastcgi.server = ( "/" =>
60
+ ((
61
+ "socket" => "/var/run/lighttpd/httpthumbniler.sock",
62
+ "bin-path" => "/usr/bin/httpthumbnailer -s fastcgi --no-bind --no-logging",
63
+ "max-procs" => 2,
64
+ "check-local" => "disable",
65
+ "fix-root-scriptname" => "enable",
66
+ ))
67
+ )
68
+ }
69
+
70
+ The `"max-procs" => 2` controls the number of instances started.
71
+ In case that the `httpthumbnailer` process crashes (may happen since it is using native libraries) it will be restarted by Lighttpd.
72
+
73
+ ### API
74
+
75
+ Basically it works like that:
76
+
77
+ 1. PUT your image data to the server with URI describing thumbnail format (one or more)
78
+ 2. the server will respond with **multi-part content** with parts containing data of your thumbnails in order with proper **Content-type** headers set
79
+
80
+ For example the URI may look like this:
81
+
82
+ /thumbnail/crop,16,16,PNG/crop,4,8,JPG/pad,16,32,JPEG
83
+
84
+ It will generate 3 thumbnails:
85
+
86
+ 1. 16x16 cropped PNG
87
+ 2. 4x8 cropped JPEG
88
+ 3. 16x32 colour padded JPEG
89
+
90
+ For detailed information about the API see [cucumber features](http://github.com/jpastuszek/httpthumbnailer/blob/master/features/httpthumbnailer.feature).
91
+
92
+ ### API client
93
+
94
+ To make it easy to use this server there is [httpthumbnailer-client](http://github.com/jpastuszek/httpthumbnailer-client) gem provided.
95
+
96
+ ## Contributing to httpthumbnailer
97
+
98
+ * Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet
99
+ * Check out the issue tracker to make sure someone already hasn't requested it and/or contributed it
100
+ * Fork the project
101
+ * Start a feature/bugfix branch
102
+ * Commit and push until you are happy with your contribution
103
+ * Make sure to add tests for it. This is important so I don't break it in a future version unintentionally.
104
+ * Please try not to mess with the Rakefile, version, or history. If you want to have your own version, or is otherwise necessary, that is fine, but please isolate to its own commit so I can cherry-pick around it.
105
+
106
+ ## Copyright
107
+
108
+ Copyright (c) 2012 Jakub Pastuszek. See LICENSE.txt for
109
+ further details.
110
+
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.3.0
1
+ 0.3.1
@@ -5,17 +5,17 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "httpthumbnailer"
8
- s.version = "0.3.0"
8
+ s.version = "0.3.1"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Jakub Pastuszek"]
12
- s.date = "2012-01-16"
12
+ s.date = "2012-02-07"
13
13
  s.description = "Provides HTTP API for thumbnailing images"
14
14
  s.email = "jpastuszek@gmail.com"
15
15
  s.executables = ["httpthumbnailer"]
16
16
  s.extra_rdoc_files = [
17
17
  "LICENSE.txt",
18
- "README.rdoc"
18
+ "README.md"
19
19
  ]
20
20
  s.files = [
21
21
  ".document",
@@ -23,7 +23,7 @@ Gem::Specification.new do |s|
23
23
  "Gemfile",
24
24
  "Gemfile.lock",
25
25
  "LICENSE.txt",
26
- "README.rdoc",
26
+ "README.md",
27
27
  "Rakefile",
28
28
  "VERSION",
29
29
  "bin/httpthumbnailer",
@@ -58,7 +58,7 @@ Gem::Specification.new do |s|
58
58
  s.homepage = "http://github.com/jpastuszek/httpthumbnailer"
59
59
  s.licenses = ["MIT"]
60
60
  s.require_paths = ["lib"]
61
- s.rubygems_version = "1.8.10"
61
+ s.rubygems_version = "1.8.15"
62
62
  s.summary = "HTTP thumbnailing server"
63
63
 
64
64
  if s.respond_to? :specification_version then
@@ -66,7 +66,7 @@ Gem::Specification.new do |s|
66
66
 
67
67
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
68
68
  s.add_runtime_dependency(%q<sinatra>, [">= 1.2.6"])
69
- s.add_runtime_dependency(%q<mongrel>, [">= 1.1.5"])
69
+ s.add_runtime_dependency(%q<mongrel>, [">= 1.2.0.pre2"])
70
70
  s.add_runtime_dependency(%q<rmagick>, ["~> 2"])
71
71
  s.add_runtime_dependency(%q<haml>, ["~> 3"])
72
72
  s.add_runtime_dependency(%q<ruby-ip>, ["~> 0.9"])
@@ -81,7 +81,7 @@ Gem::Specification.new do |s|
81
81
  s.add_development_dependency(%q<rdoc>, ["~> 3.9"])
82
82
  else
83
83
  s.add_dependency(%q<sinatra>, [">= 1.2.6"])
84
- s.add_dependency(%q<mongrel>, [">= 1.1.5"])
84
+ s.add_dependency(%q<mongrel>, [">= 1.2.0.pre2"])
85
85
  s.add_dependency(%q<rmagick>, ["~> 2"])
86
86
  s.add_dependency(%q<haml>, ["~> 3"])
87
87
  s.add_dependency(%q<ruby-ip>, ["~> 0.9"])
@@ -97,7 +97,7 @@ Gem::Specification.new do |s|
97
97
  end
98
98
  else
99
99
  s.add_dependency(%q<sinatra>, [">= 1.2.6"])
100
- s.add_dependency(%q<mongrel>, [">= 1.1.5"])
100
+ s.add_dependency(%q<mongrel>, [">= 1.2.0.pre2"])
101
101
  s.add_dependency(%q<rmagick>, ["~> 2"])
102
102
  s.add_dependency(%q<haml>, ["~> 3"])
103
103
  s.add_dependency(%q<ruby-ip>, ["~> 0.9"])
metadata CHANGED
@@ -1,249 +1,185 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: httpthumbnailer
3
- version: !ruby/object:Gem::Version
4
- hash: 19
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.3.1
5
5
  prerelease:
6
- segments:
7
- - 0
8
- - 3
9
- - 0
10
- version: 0.3.0
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - Jakub Pastuszek
14
9
  autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
-
18
- date: 2012-01-16 00:00:00 Z
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
21
- type: :runtime
22
- requirement: &id001 !ruby/object:Gem::Requirement
12
+ date: 2012-02-07 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: sinatra
16
+ requirement: &16915980 !ruby/object:Gem::Requirement
23
17
  none: false
24
- requirements:
25
- - - ">="
26
- - !ruby/object:Gem::Version
27
- hash: 19
28
- segments:
29
- - 1
30
- - 2
31
- - 6
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
32
21
  version: 1.2.6
33
- prerelease: false
34
- name: sinatra
35
- version_requirements: *id001
36
- - !ruby/object:Gem::Dependency
37
22
  type: :runtime
38
- requirement: &id002 !ruby/object:Gem::Requirement
39
- none: false
40
- requirements:
41
- - - ">="
42
- - !ruby/object:Gem::Version
43
- hash: 25
44
- segments:
45
- - 1
46
- - 1
47
- - 5
48
- version: 1.1.5
49
23
  prerelease: false
24
+ version_requirements: *16915980
25
+ - !ruby/object:Gem::Dependency
50
26
  name: mongrel
51
- version_requirements: *id002
52
- - !ruby/object:Gem::Dependency
53
- type: :runtime
54
- requirement: &id003 !ruby/object:Gem::Requirement
27
+ requirement: &16908960 !ruby/object:Gem::Requirement
55
28
  none: false
56
- requirements:
57
- - - ~>
58
- - !ruby/object:Gem::Version
59
- hash: 7
60
- segments:
61
- - 2
62
- version: "2"
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: 1.2.0.pre2
33
+ type: :runtime
63
34
  prerelease: false
35
+ version_requirements: *16908960
36
+ - !ruby/object:Gem::Dependency
64
37
  name: rmagick
65
- version_requirements: *id003
66
- - !ruby/object:Gem::Dependency
67
- type: :runtime
68
- requirement: &id004 !ruby/object:Gem::Requirement
38
+ requirement: &16930760 !ruby/object:Gem::Requirement
69
39
  none: false
70
- requirements:
40
+ requirements:
71
41
  - - ~>
72
- - !ruby/object:Gem::Version
73
- hash: 5
74
- segments:
75
- - 3
76
- version: "3"
42
+ - !ruby/object:Gem::Version
43
+ version: '2'
44
+ type: :runtime
77
45
  prerelease: false
46
+ version_requirements: *16930760
47
+ - !ruby/object:Gem::Dependency
78
48
  name: haml
79
- version_requirements: *id004
80
- - !ruby/object:Gem::Dependency
81
- type: :runtime
82
- requirement: &id005 !ruby/object:Gem::Requirement
49
+ requirement: &16941920 !ruby/object:Gem::Requirement
83
50
  none: false
84
- requirements:
51
+ requirements:
85
52
  - - ~>
86
- - !ruby/object:Gem::Version
87
- hash: 25
88
- segments:
89
- - 0
90
- - 9
91
- version: "0.9"
53
+ - !ruby/object:Gem::Version
54
+ version: '3'
55
+ type: :runtime
92
56
  prerelease: false
57
+ version_requirements: *16941920
58
+ - !ruby/object:Gem::Dependency
93
59
  name: ruby-ip
94
- version_requirements: *id005
95
- - !ruby/object:Gem::Dependency
96
- type: :runtime
97
- requirement: &id006 !ruby/object:Gem::Requirement
60
+ requirement: &16939780 !ruby/object:Gem::Requirement
98
61
  none: false
99
- requirements:
62
+ requirements:
100
63
  - - ~>
101
- - !ruby/object:Gem::Version
102
- hash: 19
103
- segments:
104
- - 1
105
- - 1
106
- - 0
107
- version: 1.1.0
64
+ - !ruby/object:Gem::Version
65
+ version: '0.9'
66
+ type: :runtime
108
67
  prerelease: false
68
+ version_requirements: *16939780
69
+ - !ruby/object:Gem::Dependency
109
70
  name: cli
110
- version_requirements: *id006
111
- - !ruby/object:Gem::Dependency
112
- type: :development
113
- requirement: &id007 !ruby/object:Gem::Requirement
71
+ requirement: &16938600 !ruby/object:Gem::Requirement
114
72
  none: false
115
- requirements:
73
+ requirements:
116
74
  - - ~>
117
- - !ruby/object:Gem::Version
118
- hash: 3
119
- segments:
120
- - 2
121
- - 3
122
- - 0
123
- version: 2.3.0
75
+ - !ruby/object:Gem::Version
76
+ version: 1.1.0
77
+ type: :runtime
124
78
  prerelease: false
79
+ version_requirements: *16938600
80
+ - !ruby/object:Gem::Dependency
125
81
  name: rspec
126
- version_requirements: *id007
127
- - !ruby/object:Gem::Dependency
128
- type: :development
129
- requirement: &id008 !ruby/object:Gem::Requirement
82
+ requirement: &16950140 !ruby/object:Gem::Requirement
130
83
  none: false
131
- requirements:
132
- - - ">="
133
- - !ruby/object:Gem::Version
134
- hash: 3
135
- segments:
136
- - 0
137
- version: "0"
84
+ requirements:
85
+ - - ~>
86
+ - !ruby/object:Gem::Version
87
+ version: 2.3.0
88
+ type: :development
138
89
  prerelease: false
90
+ version_requirements: *16950140
91
+ - !ruby/object:Gem::Dependency
139
92
  name: cucumber
140
- version_requirements: *id008
141
- - !ruby/object:Gem::Dependency
93
+ requirement: &16949100 !ruby/object:Gem::Requirement
94
+ none: false
95
+ requirements:
96
+ - - ! '>='
97
+ - !ruby/object:Gem::Version
98
+ version: '0'
142
99
  type: :development
143
- requirement: &id009 !ruby/object:Gem::Requirement
100
+ prerelease: false
101
+ version_requirements: *16949100
102
+ - !ruby/object:Gem::Dependency
103
+ name: bundler
104
+ requirement: &16947600 !ruby/object:Gem::Requirement
144
105
  none: false
145
- requirements:
106
+ requirements:
146
107
  - - ~>
147
- - !ruby/object:Gem::Version
148
- hash: 23
149
- segments:
150
- - 1
151
- - 0
152
- - 0
108
+ - !ruby/object:Gem::Version
153
109
  version: 1.0.0
154
- prerelease: false
155
- name: bundler
156
- version_requirements: *id009
157
- - !ruby/object:Gem::Dependency
158
110
  type: :development
159
- requirement: &id010 !ruby/object:Gem::Requirement
111
+ prerelease: false
112
+ version_requirements: *16947600
113
+ - !ruby/object:Gem::Dependency
114
+ name: jeweler
115
+ requirement: &16946620 !ruby/object:Gem::Requirement
160
116
  none: false
161
- requirements:
117
+ requirements:
162
118
  - - ~>
163
- - !ruby/object:Gem::Version
164
- hash: 7
165
- segments:
166
- - 1
167
- - 6
168
- - 4
119
+ - !ruby/object:Gem::Version
169
120
  version: 1.6.4
170
- prerelease: false
171
- name: jeweler
172
- version_requirements: *id010
173
- - !ruby/object:Gem::Dependency
174
121
  type: :development
175
- requirement: &id011 !ruby/object:Gem::Requirement
176
- none: false
177
- requirements:
178
- - - ">="
179
- - !ruby/object:Gem::Version
180
- hash: 3
181
- segments:
182
- - 0
183
- version: "0"
184
122
  prerelease: false
123
+ version_requirements: *16946620
124
+ - !ruby/object:Gem::Dependency
185
125
  name: rcov
186
- version_requirements: *id011
187
- - !ruby/object:Gem::Dependency
188
- type: :development
189
- requirement: &id012 !ruby/object:Gem::Requirement
126
+ requirement: &16944680 !ruby/object:Gem::Requirement
190
127
  none: false
191
- requirements:
192
- - - ~>
193
- - !ruby/object:Gem::Version
194
- hash: 1
195
- segments:
196
- - 1
197
- version: "1"
128
+ requirements:
129
+ - - ! '>='
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
198
133
  prerelease: false
134
+ version_requirements: *16944680
135
+ - !ruby/object:Gem::Dependency
199
136
  name: daemon
200
- version_requirements: *id012
201
- - !ruby/object:Gem::Dependency
202
- type: :development
203
- requirement: &id013 !ruby/object:Gem::Requirement
137
+ requirement: &16969400 !ruby/object:Gem::Requirement
204
138
  none: false
205
- requirements:
139
+ requirements:
206
140
  - - ~>
207
- - !ruby/object:Gem::Version
208
- hash: 7
209
- segments:
210
- - 2
211
- - 2
212
- version: "2.2"
141
+ - !ruby/object:Gem::Version
142
+ version: '1'
143
+ type: :development
213
144
  prerelease: false
145
+ version_requirements: *16969400
146
+ - !ruby/object:Gem::Dependency
214
147
  name: httpclient
215
- version_requirements: *id013
216
- - !ruby/object:Gem::Dependency
217
- type: :development
218
- requirement: &id014 !ruby/object:Gem::Requirement
148
+ requirement: &16966000 !ruby/object:Gem::Requirement
219
149
  none: false
220
- requirements:
150
+ requirements:
221
151
  - - ~>
222
- - !ruby/object:Gem::Version
223
- hash: 21
224
- segments:
225
- - 3
226
- - 9
227
- version: "3.9"
152
+ - !ruby/object:Gem::Version
153
+ version: '2.2'
154
+ type: :development
228
155
  prerelease: false
156
+ version_requirements: *16966000
157
+ - !ruby/object:Gem::Dependency
229
158
  name: rdoc
230
- version_requirements: *id014
159
+ requirement: &16996480 !ruby/object:Gem::Requirement
160
+ none: false
161
+ requirements:
162
+ - - ~>
163
+ - !ruby/object:Gem::Version
164
+ version: '3.9'
165
+ type: :development
166
+ prerelease: false
167
+ version_requirements: *16996480
231
168
  description: Provides HTTP API for thumbnailing images
232
169
  email: jpastuszek@gmail.com
233
- executables:
170
+ executables:
234
171
  - httpthumbnailer
235
172
  extensions: []
236
-
237
- extra_rdoc_files:
173
+ extra_rdoc_files:
238
174
  - LICENSE.txt
239
- - README.rdoc
240
- files:
175
+ - README.md
176
+ files:
241
177
  - .document
242
178
  - .rspec
243
179
  - Gemfile
244
180
  - Gemfile.lock
245
181
  - LICENSE.txt
246
- - README.rdoc
182
+ - README.md
247
183
  - Rakefile
248
184
  - VERSION
249
185
  - bin/httpthumbnailer
@@ -275,37 +211,31 @@ files:
275
211
  - spec/thumbnail_specs_spec.rb
276
212
  - spec/thumbnailer_spec.rb
277
213
  homepage: http://github.com/jpastuszek/httpthumbnailer
278
- licenses:
214
+ licenses:
279
215
  - MIT
280
216
  post_install_message:
281
217
  rdoc_options: []
282
-
283
- require_paths:
218
+ require_paths:
284
219
  - lib
285
- required_ruby_version: !ruby/object:Gem::Requirement
220
+ required_ruby_version: !ruby/object:Gem::Requirement
286
221
  none: false
287
- requirements:
288
- - - ">="
289
- - !ruby/object:Gem::Version
290
- hash: 3
291
- segments:
222
+ requirements:
223
+ - - ! '>='
224
+ - !ruby/object:Gem::Version
225
+ version: '0'
226
+ segments:
292
227
  - 0
293
- version: "0"
294
- required_rubygems_version: !ruby/object:Gem::Requirement
228
+ hash: 1020802750918011065
229
+ required_rubygems_version: !ruby/object:Gem::Requirement
295
230
  none: false
296
- requirements:
297
- - - ">="
298
- - !ruby/object:Gem::Version
299
- hash: 3
300
- segments:
301
- - 0
302
- version: "0"
231
+ requirements:
232
+ - - ! '>='
233
+ - !ruby/object:Gem::Version
234
+ version: '0'
303
235
  requirements: []
304
-
305
236
  rubyforge_project:
306
- rubygems_version: 1.8.10
237
+ rubygems_version: 1.8.15
307
238
  signing_key:
308
239
  specification_version: 3
309
240
  summary: HTTP thumbnailing server
310
241
  test_files: []
311
-
data/README.rdoc DELETED
@@ -1,19 +0,0 @@
1
- = httpthumbnailer
2
-
3
- Description goes here.
4
-
5
- == Contributing to httpthumbnailer
6
-
7
- * Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet
8
- * Check out the issue tracker to make sure someone already hasn't requested it and/or contributed it
9
- * Fork the project
10
- * Start a feature/bugfix branch
11
- * Commit and push until you are happy with your contribution
12
- * Make sure to add tests for it. This is important so I don't break it in a future version unintentionally.
13
- * Please try not to mess with the Rakefile, version, or history. If you want to have your own version, or is otherwise necessary, that is fine, but please isolate to its own commit so I can cherry-pick around it.
14
-
15
- == Copyright
16
-
17
- Copyright (c) 2011 Jakub Pastuszek. See LICENSE.txt for
18
- further details.
19
-