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 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
- /width.(format)
28
- /width/height.(format)
29
- /width/height/foreground.(format)
30
- /width/height/foreground/background.(format)
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
@@ -0,0 +1,3 @@
1
+ module DummyImage
2
+ VERSION = '0.0.3'
3
+ 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
@@ -0,0 +1,4 @@
1
+ lib = File.expand_path("../lib", __FILE__)
2
+ $:.unshift(lib) unless $:.include?(lib)
3
+
4
+ require 'dummy_image'
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.1
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-02-13 00:00:00.000000000 -06:00
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: &2152732500 !ruby/object:Gem::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: *2152732500
26
+ version_requirements: *2153846780
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rack-test
29
- requirement: &2152748380 !ruby/object:Gem::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: *2152748380
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