dummy_image 0.0.1 → 0.0.3
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.
- data/README.md +4 -6
- data/lib/dummy_image/image.rb +65 -0
- data/lib/dummy_image/middleware.rb +18 -0
- data/lib/dummy_image/request_parser.rb +50 -0
- data/lib/dummy_image/version.rb +3 -0
- data/spec/dummy_image/request_parser_spec.rb +8 -0
- data/spec/spec_helper.rb +4 -0
- metadata +12 -6
data/README.md
CHANGED
@@ -24,12 +24,10 @@ Or install it yourself as:
|
|
24
24
|
|
25
25
|
This is a rack app that responds to the following URLS:
|
26
26
|
|
27
|
-
/
|
28
|
-
/width
|
29
|
-
/width/
|
30
|
-
/width/
|
31
|
-
|
32
|
-
Where *mount* is the location where the app is mounted
|
27
|
+
/height.(format)
|
28
|
+
/height/width.(format)
|
29
|
+
/height/width/foreground.(format)
|
30
|
+
/height/width/foreground/background.(format)
|
33
31
|
|
34
32
|
## Rails Usage
|
35
33
|
|
@@ -0,0 +1,65 @@
|
|
1
|
+
module DummyImage
|
2
|
+
class Image
|
3
|
+
|
4
|
+
attr_reader :arguments
|
5
|
+
|
6
|
+
def self.find(arguments)
|
7
|
+
new(arguments).image
|
8
|
+
end
|
9
|
+
|
10
|
+
def initialize arguments
|
11
|
+
@arguments = arguments
|
12
|
+
end
|
13
|
+
|
14
|
+
def image_name
|
15
|
+
[width, height, fgcolor, bgcolor].join("_") + "." + format
|
16
|
+
end
|
17
|
+
|
18
|
+
def width
|
19
|
+
arguments.width
|
20
|
+
end
|
21
|
+
|
22
|
+
def height
|
23
|
+
arguments.height
|
24
|
+
end
|
25
|
+
|
26
|
+
def fgcolor
|
27
|
+
arguments.fgcolor
|
28
|
+
end
|
29
|
+
|
30
|
+
def bgcolor
|
31
|
+
arguments.bgcolor
|
32
|
+
end
|
33
|
+
|
34
|
+
def format
|
35
|
+
arguments.format
|
36
|
+
end
|
37
|
+
|
38
|
+
def file_path
|
39
|
+
["tmp", image_name].join "/"
|
40
|
+
end
|
41
|
+
|
42
|
+
def image
|
43
|
+
unless File.exists? file_path
|
44
|
+
create_image!
|
45
|
+
end
|
46
|
+
image_name
|
47
|
+
end
|
48
|
+
|
49
|
+
def caption
|
50
|
+
[width, height].join(" x ")
|
51
|
+
end
|
52
|
+
|
53
|
+
def create_image!
|
54
|
+
ImageBuilder.build width, height, fgcolor, bgcolor, caption, file_path
|
55
|
+
end
|
56
|
+
|
57
|
+
module ImageBuilder
|
58
|
+
extend self
|
59
|
+
def build width, height, fgcolor, bgcolor, caption, file_path
|
60
|
+
system "convert -size #{width}x#{height} -background '##{bgcolor}' -fill '##{fgcolor}' -gravity Center +pointsize label:' #{caption} ' #{file_path}"
|
61
|
+
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module DummyImage
|
2
|
+
module Middleware
|
3
|
+
extend self
|
4
|
+
IMAGE_DIR = ::File.expand_path("tmp")
|
5
|
+
|
6
|
+
def call(env)
|
7
|
+
requested_path = env["PATH_INFO"]
|
8
|
+
env_hash = { "PATH_INFO" => image_path(requested_path),
|
9
|
+
"REQUEST_METHOD" => "GET" }
|
10
|
+
Rack::File.new(IMAGE_DIR).call( env_hash )
|
11
|
+
end
|
12
|
+
|
13
|
+
def image_path(requested_path)
|
14
|
+
arguments = RequestParser.new(requested_path)
|
15
|
+
Image.find arguments
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
module DummyImage
|
2
|
+
class RequestParser
|
3
|
+
|
4
|
+
def initialize(path)
|
5
|
+
@path, @format = path.split(".", 2)
|
6
|
+
end
|
7
|
+
|
8
|
+
def format
|
9
|
+
valid_format @format
|
10
|
+
end
|
11
|
+
|
12
|
+
def height
|
13
|
+
@height ||= valid_size(arguments[0]) || "300"
|
14
|
+
end
|
15
|
+
|
16
|
+
def width
|
17
|
+
@width ||= valid_size(arguments[1]) || height
|
18
|
+
end
|
19
|
+
|
20
|
+
def fgcolor
|
21
|
+
@fgcolor ||= valid_color(arguments[2]) || "333333"
|
22
|
+
end
|
23
|
+
|
24
|
+
def bgcolor
|
25
|
+
@bgcolor ||= valid_color(arguments[3]) || "CCCCCC"
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
def arguments
|
31
|
+
@arguments ||= @path.split("/").tap &:shift
|
32
|
+
end
|
33
|
+
|
34
|
+
def valid_format format
|
35
|
+
if ["png", "jpg", "jpeg", "gif"].include? format
|
36
|
+
format
|
37
|
+
else
|
38
|
+
"png"
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def valid_size size
|
43
|
+
size[/^\d+$/] if size
|
44
|
+
end
|
45
|
+
|
46
|
+
def valid_color color
|
47
|
+
color[/^[\da-fA-F]+$/] if color
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -60,4 +60,12 @@ describe DummyImage::RequestParser do
|
|
60
60
|
its(:bgcolor) { should == "505050" }
|
61
61
|
its(:format) { should == "png" }
|
62
62
|
end
|
63
|
+
|
64
|
+
context "with invalid data" do
|
65
|
+
let(:path) { "/wut/who/waaa/derp" }
|
66
|
+
its(:height) { should == "300" }
|
67
|
+
its(:width) { should == "300" }
|
68
|
+
its(:fgcolor) { should == "333333" }
|
69
|
+
its(:bgcolor) { should == "CCCCCC" }
|
70
|
+
end
|
63
71
|
end
|
data/spec/spec_helper.rb
ADDED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dummy_image
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,12 +10,12 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2012-
|
13
|
+
date: 2012-04-10 00:00:00.000000000 -05:00
|
14
14
|
default_executable:
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: rspec
|
18
|
-
requirement: &
|
18
|
+
requirement: &2153846780 !ruby/object:Gem::Requirement
|
19
19
|
none: false
|
20
20
|
requirements:
|
21
21
|
- - ~>
|
@@ -23,10 +23,10 @@ dependencies:
|
|
23
23
|
version: '2.8'
|
24
24
|
type: :development
|
25
25
|
prerelease: false
|
26
|
-
version_requirements: *
|
26
|
+
version_requirements: *2153846780
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rack-test
|
29
|
-
requirement: &
|
29
|
+
requirement: &2153846280 !ruby/object:Gem::Requirement
|
30
30
|
none: false
|
31
31
|
requirements:
|
32
32
|
- - =
|
@@ -34,7 +34,7 @@ dependencies:
|
|
34
34
|
version: 0.6.1
|
35
35
|
type: :development
|
36
36
|
prerelease: false
|
37
|
-
version_requirements: *
|
37
|
+
version_requirements: *2153846280
|
38
38
|
description: Generate dummy images via Rack
|
39
39
|
email:
|
40
40
|
- dave@davelyon.net
|
@@ -43,10 +43,15 @@ executables: []
|
|
43
43
|
extensions: []
|
44
44
|
extra_rdoc_files: []
|
45
45
|
files:
|
46
|
+
- lib/dummy_image/image.rb
|
47
|
+
- lib/dummy_image/middleware.rb
|
48
|
+
- lib/dummy_image/request_parser.rb
|
49
|
+
- lib/dummy_image/version.rb
|
46
50
|
- lib/dummy_image.rb
|
47
51
|
- README.md
|
48
52
|
- spec/dummy_image/image_spec.rb
|
49
53
|
- spec/dummy_image/request_parser_spec.rb
|
54
|
+
- spec/spec_helper.rb
|
50
55
|
has_rdoc: true
|
51
56
|
homepage: http://davelyon.net
|
52
57
|
licenses: []
|
@@ -76,3 +81,4 @@ summary: A tiny rack app to generate dummy images on the fly for development.
|
|
76
81
|
test_files:
|
77
82
|
- spec/dummy_image/image_spec.rb
|
78
83
|
- spec/dummy_image/request_parser_spec.rb
|
84
|
+
- spec/spec_helper.rb
|