magickly 1.2.1 → 1.4.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.travis.yml +6 -0
- data/Gemfile +0 -3
- data/Gemfile.lock +22 -22
- data/HISTORY.md +22 -0
- data/README.md +60 -32
- data/Rakefile +2 -3
- data/VERSION +1 -1
- data/lib/dragonfly/data_storage/remote_data_store.rb +1 -3
- data/lib/magickly.rb +3 -0
- data/lib/magickly/app.rb +44 -20
- data/lib/public/images/logo.jpg +0 -0
- data/lib/public/jquery-ui.smoothness.css +568 -0
- data/lib/public/magickly_demo.js +85 -0
- data/lib/public/style.css +83 -0
- data/lib/shortcuts.rb +6 -0
- data/lib/views/analyzers.erb +6 -0
- data/lib/views/index.erb +38 -0
- data/magickly.gemspec +10 -16
- data/spec/requests/magickly_app_spec.rb +19 -3
- data/spec/unit/shortcut_spec.rb +22 -0
- metadata +32 -62
- data/bin/magickly +0 -12
- data/lib/views/analyzers.haml +0 -3
- data/lib/views/index.haml +0 -55
@@ -0,0 +1,85 @@
|
|
1
|
+
var Magickly = {
|
2
|
+
$inputUrl: undefined,
|
3
|
+
$resultUrl: undefined,
|
4
|
+
$resultImage: undefined,
|
5
|
+
|
6
|
+
inputUrl: undefined,
|
7
|
+
|
8
|
+
queryParams: {},
|
9
|
+
|
10
|
+
init: function(){
|
11
|
+
this.$inputUrl = $('#input-url');
|
12
|
+
this.$resultUrl = $('#result-url');
|
13
|
+
this.$resultImage = $('#result-image');
|
14
|
+
|
15
|
+
this.inputUrl = this.$inputUrl.val();
|
16
|
+
|
17
|
+
this.$inputUrl.bind('paste', $.proxy(this.onSourceUrlEvent, this) );
|
18
|
+
this.$inputUrl.keydown( $.proxy(this.onSourceUrlKeydown, this) );
|
19
|
+
this.$inputUrl.change( $.proxy(this.onSourceUrlEvent, this) );
|
20
|
+
$('input.effect[type="checkbox"]').change( $.proxy(this.onEffectToggle, this) );
|
21
|
+
|
22
|
+
$('#halftone-slider').slider({
|
23
|
+
value: 50,
|
24
|
+
change: function(e, ui){
|
25
|
+
Magickly.queryParams.halftone = ui.value;
|
26
|
+
$(this).siblings('input[type="checkbox"]').attr('checked', 'true');
|
27
|
+
Magickly.updateResultUrl.call(Magickly);
|
28
|
+
}
|
29
|
+
});
|
30
|
+
},
|
31
|
+
|
32
|
+
updateResultUrl: function(){
|
33
|
+
var newSrc = window.location.href + '?src=' + this.inputUrl,
|
34
|
+
queryString = $.param(this.queryParams);
|
35
|
+
|
36
|
+
if (queryString){
|
37
|
+
newSrc += '&' + queryString;
|
38
|
+
}
|
39
|
+
|
40
|
+
this.$resultImage.attr('src', newSrc);
|
41
|
+
this.$resultUrl.val(newSrc);
|
42
|
+
},
|
43
|
+
|
44
|
+
onSourceUrlKeydown: function(e){
|
45
|
+
if (e.which === 13){
|
46
|
+
// ENTER key
|
47
|
+
this.$inputUrl.blur();
|
48
|
+
}
|
49
|
+
},
|
50
|
+
|
51
|
+
onSourceUrlEvent: function(){
|
52
|
+
var newInputUrl = this.$inputUrl.val();
|
53
|
+
if (newInputUrl !== this.inputUrl){
|
54
|
+
this.inputUrl = newInputUrl;
|
55
|
+
this.updateResultUrl();
|
56
|
+
}
|
57
|
+
},
|
58
|
+
|
59
|
+
onEffectToggle: function(e){
|
60
|
+
var $checkbox = $(e.currentTarget),
|
61
|
+
effect = $checkbox.attr('name');
|
62
|
+
|
63
|
+
if ($checkbox.is(':checked')){
|
64
|
+
if ($checkbox.hasClass('slider-toggle')){
|
65
|
+
var $slider = $('#' + effect + '-slider');
|
66
|
+
sliderVal = $slider.slider('value');
|
67
|
+
|
68
|
+
if (sliderVal === $slider.slider('option', 'value')){
|
69
|
+
// default value
|
70
|
+
this.queryParams[effect] = 'true';
|
71
|
+
} else {
|
72
|
+
this.queryParams[effect] = $slider.slider('value');
|
73
|
+
}
|
74
|
+
}
|
75
|
+
} else {
|
76
|
+
delete this.queryParams[effect];
|
77
|
+
}
|
78
|
+
|
79
|
+
this.updateResultUrl();
|
80
|
+
}
|
81
|
+
}
|
82
|
+
|
83
|
+
$(function(){
|
84
|
+
Magickly.init();
|
85
|
+
});
|
@@ -0,0 +1,83 @@
|
|
1
|
+
body {
|
2
|
+
background-color: white;
|
3
|
+
font-size: 14px;
|
4
|
+
line-height: 22px;
|
5
|
+
font-family: Helvetica, Arial, sans-serif;
|
6
|
+
color: #000000;
|
7
|
+
font-weight: lighter;
|
8
|
+
}
|
9
|
+
p {
|
10
|
+
padding: 18px;
|
11
|
+
margin: 0;
|
12
|
+
}
|
13
|
+
.checkbox {
|
14
|
+
width: 100px;
|
15
|
+
}
|
16
|
+
#container {
|
17
|
+
width: 890px;
|
18
|
+
text-align: left;
|
19
|
+
margin: 0 auto;
|
20
|
+
}
|
21
|
+
#about {
|
22
|
+
height: 125px;
|
23
|
+
width: 821px;
|
24
|
+
border: 1px solid #d2d2d2;
|
25
|
+
background-color: #f7f7f7;
|
26
|
+
color: #000;
|
27
|
+
padding: 0;
|
28
|
+
margin: 0 0 10px 0;
|
29
|
+
}
|
30
|
+
#main {
|
31
|
+
position: absolute;
|
32
|
+
}
|
33
|
+
#readme-link {
|
34
|
+
width: 788px;
|
35
|
+
font-size: 2em;
|
36
|
+
text-align: center;
|
37
|
+
}
|
38
|
+
#toggle-effects {
|
39
|
+
float: left;
|
40
|
+
width: 410px;
|
41
|
+
min-height: 215px;
|
42
|
+
background-color: yellow;
|
43
|
+
display:block;
|
44
|
+
}
|
45
|
+
#adjustable-effects {
|
46
|
+
float: right;
|
47
|
+
width: 410px;
|
48
|
+
min-height: 215px;
|
49
|
+
background-color: pink;
|
50
|
+
display:block;
|
51
|
+
}
|
52
|
+
#adjustable-effects .slider {
|
53
|
+
width: 250px;
|
54
|
+
}
|
55
|
+
#result{
|
56
|
+
height:auto;
|
57
|
+
width: 410px;
|
58
|
+
display:block;
|
59
|
+
background: red;
|
60
|
+
clear: both;
|
61
|
+
}
|
62
|
+
|
63
|
+
#footer {
|
64
|
+
height:62px;
|
65
|
+
width: 100%;
|
66
|
+
display:block;
|
67
|
+
background: #242524;
|
68
|
+
color: white;
|
69
|
+
margin: 44px 0 0 0;
|
70
|
+
padding: 4px 0 0 0;
|
71
|
+
}
|
72
|
+
#left_foot{
|
73
|
+
float:left;
|
74
|
+
padding-left: 18px;
|
75
|
+
}
|
76
|
+
#right_foot{
|
77
|
+
float: right;
|
78
|
+
padding-right: 18px;
|
79
|
+
}
|
80
|
+
A:link {color: #468fa6; text-decoration: none;}
|
81
|
+
A:visited {color: #468fa6; text-decoration: none;}
|
82
|
+
A:active {color: #468fa6; text-decoration: none;}
|
83
|
+
A:hover {color: #c9283b; text-decoration:none;}
|
data/lib/shortcuts.rb
CHANGED
@@ -46,6 +46,12 @@ Magickly.dragonfly.configure do |c|
|
|
46
46
|
lomo_mask = File.join(File.dirname(__FILE__), 'images', 'lomo_mask.png')
|
47
47
|
process :convert, "\\( +clone -unsharp 1 -contrast -contrast -modulate #{modulate_params} \\( #{lomo_mask} -resize #{@job.width}x#{@job.height}\\! \\) -compose overlay -composite \\) -compose multiply -composite"
|
48
48
|
end
|
49
|
+
|
50
|
+
# thanks to Jesse Chan-Norris - http://jcn.me/
|
51
|
+
c.job :jcn do
|
52
|
+
process :greyscale
|
53
|
+
@job = @job.halftone(99)
|
54
|
+
end
|
49
55
|
|
50
56
|
|
51
57
|
## thanks to Fred Weinhaus (http://www.fmwconcepts.com/imagemagick) for the following: ##
|
data/lib/views/index.erb
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<title>Magickly</title>
|
5
|
+
<link href="jquery-ui.smoothness.css" rel="stylesheet" type="text/css">
|
6
|
+
<link href="style.css" rel="stylesheet" type="text/css">
|
7
|
+
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script>
|
8
|
+
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.16/jquery-ui.min.js"></script>
|
9
|
+
<script type="text/javascript" src="magickly_demo.js"></script>
|
10
|
+
<script type="text/javascript">
|
11
|
+
var _gaq = _gaq || [];
|
12
|
+
_gaq.push(['_setAccount', 'UA-22837777-1']);
|
13
|
+
_gaq.push(['_trackPageview']);
|
14
|
+
|
15
|
+
(function() {
|
16
|
+
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
|
17
|
+
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
|
18
|
+
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
|
19
|
+
})();
|
20
|
+
</script>
|
21
|
+
</head>
|
22
|
+
<body>
|
23
|
+
<a href="https://github.com/afeld/magickly/blob/master/README.md">
|
24
|
+
<img style="position: absolute; top: 0; left: 0; border: 0;" src="https://a248.e.akamai.net/assets.github.com/img/bec6c51521dcc8148146135149fe06a9cc737577/687474703a2f2f73332e616d617a6f6e6177732e636f6d2f6769746875622f726962626f6e732f666f726b6d655f6c6566745f6461726b626c75655f3132313632312e706e67" alt="Fork me on GitHub">
|
25
|
+
</a>
|
26
|
+
<div id="container">
|
27
|
+
<div id="logo">
|
28
|
+
<a href="http://www.jux.com"><img width='822' height='244' src="images/logo.jpg"></a>
|
29
|
+
</div>
|
30
|
+
<div id="about"><p>Magickly is a web service for image manipulation, built as a wrapper of Imagemagick. This allows developers to apply effects to one (or hundreds) of photos, without any fancy plugins or complex client code. It's as easy as providing your source image and the list of transformations.</p></div>
|
31
|
+
<div id="main">
|
32
|
+
<p id="readme-link">
|
33
|
+
Click <a href="https://github.com/afeld/magickly/blob/master/README.md">here</a> to learn more.
|
34
|
+
</p>
|
35
|
+
</div> <!--end main -->
|
36
|
+
</div> <!-- end container -->
|
37
|
+
</body>
|
38
|
+
</html>
|
data/magickly.gemspec
CHANGED
@@ -5,14 +5,13 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "magickly"
|
8
|
-
s.version = "1.
|
8
|
+
s.version = "1.4.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Aidan Feldman"]
|
12
|
-
s.date = "
|
12
|
+
s.date = "2012-01-26"
|
13
13
|
s.description = "A service for image manipulation - built as an extensible wrapper of Imagemagick which handles caching, c/o the Dragonfly gem."
|
14
14
|
s.email = "aidan.feldman@gmail.com"
|
15
|
-
s.executables = ["magickly"]
|
16
15
|
s.extra_rdoc_files = [
|
17
16
|
"LICENSE.txt",
|
18
17
|
"README.md"
|
@@ -21,6 +20,7 @@ Gem::Specification.new do |s|
|
|
21
20
|
".document",
|
22
21
|
".gemtest",
|
23
22
|
".rspec",
|
23
|
+
".travis.yml",
|
24
24
|
"Gemfile",
|
25
25
|
"Gemfile.lock",
|
26
26
|
"HISTORY.md",
|
@@ -28,16 +28,19 @@ Gem::Specification.new do |s|
|
|
28
28
|
"README.md",
|
29
29
|
"Rakefile",
|
30
30
|
"VERSION",
|
31
|
-
"bin/magickly",
|
32
31
|
"config.ru",
|
33
32
|
"lib/dragonfly/data_storage/remote_data_store.rb",
|
34
33
|
"lib/images/lomo_mask.png",
|
35
34
|
"lib/magickly.rb",
|
36
35
|
"lib/magickly/app.rb",
|
37
36
|
"lib/public/imagemagick.png",
|
37
|
+
"lib/public/images/logo.jpg",
|
38
|
+
"lib/public/jquery-ui.smoothness.css",
|
39
|
+
"lib/public/magickly_demo.js",
|
40
|
+
"lib/public/style.css",
|
38
41
|
"lib/shortcuts.rb",
|
39
|
-
"lib/views/analyzers.
|
40
|
-
"lib/views/index.
|
42
|
+
"lib/views/analyzers.erb",
|
43
|
+
"lib/views/index.erb",
|
41
44
|
"magickly.gemspec",
|
42
45
|
"spec/requests/magickly_app_spec.rb",
|
43
46
|
"spec/spec_helper.rb",
|
@@ -49,7 +52,7 @@ Gem::Specification.new do |s|
|
|
49
52
|
s.homepage = "http://github.com/afeld/magickly"
|
50
53
|
s.licenses = ["MIT"]
|
51
54
|
s.require_paths = ["lib"]
|
52
|
-
s.rubygems_version = "1.8.
|
55
|
+
s.rubygems_version = "1.8.15"
|
53
56
|
s.summary = "image manipulation as a (plugin-able) service"
|
54
57
|
|
55
58
|
if s.respond_to? :specification_version then
|
@@ -59,12 +62,9 @@ Gem::Specification.new do |s|
|
|
59
62
|
s.add_runtime_dependency(%q<sinatra>, ["~> 1.2"])
|
60
63
|
s.add_runtime_dependency(%q<dragonfly>, ["~> 0.9.5"])
|
61
64
|
s.add_runtime_dependency(%q<addressable>, ["~> 2.2"])
|
62
|
-
s.add_runtime_dependency(%q<haml>, ["~> 3.0"])
|
63
65
|
s.add_runtime_dependency(%q<httparty>, ["~> 0.8.1"])
|
64
66
|
s.add_runtime_dependency(%q<activesupport>, [">= 2.0.0"])
|
65
|
-
s.add_runtime_dependency(%q<json>, ["~> 1.5"])
|
66
67
|
s.add_development_dependency(%q<jeweler>, ["~> 1.5"])
|
67
|
-
s.add_development_dependency(%q<rcov>, [">= 0"])
|
68
68
|
s.add_development_dependency(%q<rack-test>, [">= 0"])
|
69
69
|
s.add_development_dependency(%q<rspec>, ["~> 2.4"])
|
70
70
|
s.add_development_dependency(%q<webmock>, ["~> 1.6"])
|
@@ -73,12 +73,9 @@ Gem::Specification.new do |s|
|
|
73
73
|
s.add_dependency(%q<sinatra>, ["~> 1.2"])
|
74
74
|
s.add_dependency(%q<dragonfly>, ["~> 0.9.5"])
|
75
75
|
s.add_dependency(%q<addressable>, ["~> 2.2"])
|
76
|
-
s.add_dependency(%q<haml>, ["~> 3.0"])
|
77
76
|
s.add_dependency(%q<httparty>, ["~> 0.8.1"])
|
78
77
|
s.add_dependency(%q<activesupport>, [">= 2.0.0"])
|
79
|
-
s.add_dependency(%q<json>, ["~> 1.5"])
|
80
78
|
s.add_dependency(%q<jeweler>, ["~> 1.5"])
|
81
|
-
s.add_dependency(%q<rcov>, [">= 0"])
|
82
79
|
s.add_dependency(%q<rack-test>, [">= 0"])
|
83
80
|
s.add_dependency(%q<rspec>, ["~> 2.4"])
|
84
81
|
s.add_dependency(%q<webmock>, ["~> 1.6"])
|
@@ -88,12 +85,9 @@ Gem::Specification.new do |s|
|
|
88
85
|
s.add_dependency(%q<sinatra>, ["~> 1.2"])
|
89
86
|
s.add_dependency(%q<dragonfly>, ["~> 0.9.5"])
|
90
87
|
s.add_dependency(%q<addressable>, ["~> 2.2"])
|
91
|
-
s.add_dependency(%q<haml>, ["~> 3.0"])
|
92
88
|
s.add_dependency(%q<httparty>, ["~> 0.8.1"])
|
93
89
|
s.add_dependency(%q<activesupport>, [">= 2.0.0"])
|
94
|
-
s.add_dependency(%q<json>, ["~> 1.5"])
|
95
90
|
s.add_dependency(%q<jeweler>, ["~> 1.5"])
|
96
|
-
s.add_dependency(%q<rcov>, [">= 0"])
|
97
91
|
s.add_dependency(%q<rack-test>, [">= 0"])
|
98
92
|
s.add_dependency(%q<rspec>, ["~> 2.4"])
|
99
93
|
s.add_dependency(%q<webmock>, ["~> 1.6"])
|
@@ -1,5 +1,5 @@
|
|
1
1
|
require 'spec_helper'
|
2
|
-
require '
|
2
|
+
require 'uri'
|
3
3
|
|
4
4
|
describe Magickly::App do
|
5
5
|
include Rack::Test::Methods
|
@@ -11,6 +11,7 @@ describe Magickly::App do
|
|
11
11
|
def setup_image(host='http://www.foo.com')
|
12
12
|
@image_filename = 'imagemagick.png'
|
13
13
|
@image_url = "#{host}/#{@image_filename}"
|
14
|
+
@escaped_image_url = URI.escape @image_url, URI::REGEXP::PATTERN::RESERVED
|
14
15
|
@image_path = File.join(File.dirname(__FILE__), '..', 'support', @image_filename)
|
15
16
|
stub_request(:get, @image_url).to_return(:body => File.new(@image_path))
|
16
17
|
end
|
@@ -94,13 +95,28 @@ describe Magickly::App do
|
|
94
95
|
process :thumb, size
|
95
96
|
end
|
96
97
|
end
|
97
|
-
|
98
|
+
|
98
99
|
get "/?src=#{@image_url}&#{shortcut}=#{width}x"
|
99
100
|
|
100
101
|
last_response.should be_ok
|
101
102
|
ImageSize.new(last_response.body).get_width.should eq width
|
102
103
|
end
|
103
104
|
end
|
105
|
+
|
106
|
+
describe "GET /q" do
|
107
|
+
|
108
|
+
it "resizes an image" do
|
109
|
+
setup_image
|
110
|
+
width = 100
|
111
|
+
|
112
|
+
get "/q/src/#{@escaped_image_url}/resize/#{width}x"
|
113
|
+
|
114
|
+
a_request(:get, @image_url).should have_been_made.once
|
115
|
+
last_response.should be_ok
|
116
|
+
ImageSize.new(last_response.body).get_width.should eq width
|
117
|
+
end
|
118
|
+
|
119
|
+
end
|
104
120
|
|
105
121
|
describe "GET /analyze" do
|
106
122
|
it "retrieves the mime_type of an image" do
|
@@ -121,7 +137,7 @@ describe Magickly::App do
|
|
121
137
|
a_request(:get, @image_url).should have_been_made.once
|
122
138
|
last_response.should be_ok
|
123
139
|
last_response.body.should_not be_empty
|
124
|
-
json = JSON.
|
140
|
+
json = ActiveSupport::JSON.decode(last_response.body)
|
125
141
|
json.should be_an Array
|
126
142
|
json.size.should eq 5
|
127
143
|
end
|
data/spec/unit/shortcut_spec.rb
CHANGED
@@ -57,4 +57,26 @@ describe "Dragonfly shortcuts" do
|
|
57
57
|
@image.tilt_shift('2,-1,0.5')
|
58
58
|
end
|
59
59
|
end
|
60
|
+
|
61
|
+
describe :lomo do
|
62
|
+
it "should throw an error for no arguments" do
|
63
|
+
expect { @image.lomo }.to raise_error(ArgumentError)
|
64
|
+
end
|
65
|
+
|
66
|
+
it "should throw an error for a empty string" do
|
67
|
+
expect { @image.lomo('') }.to raise_error(ArgumentError)
|
68
|
+
end
|
69
|
+
|
70
|
+
it "should succeed for when set to true" do
|
71
|
+
@image.lomo('true')
|
72
|
+
end
|
73
|
+
|
74
|
+
it "should succeed for valid coefficients" do
|
75
|
+
@image.lomo('100,120')
|
76
|
+
end
|
77
|
+
|
78
|
+
it "should throw an error for negative values" do
|
79
|
+
expect { @image.lomo('-80,-80') }.to raise_error(ArgumentError)
|
80
|
+
end
|
81
|
+
end
|
60
82
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: magickly
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.4.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2012-01-26 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: sinatra
|
16
|
-
requirement: &
|
16
|
+
requirement: &70099405673020 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '1.2'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70099405673020
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: dragonfly
|
27
|
-
requirement: &
|
27
|
+
requirement: &70099405672440 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ~>
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: 0.9.5
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70099405672440
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: addressable
|
38
|
-
requirement: &
|
38
|
+
requirement: &70099405671720 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ~>
|
@@ -43,21 +43,10 @@ dependencies:
|
|
43
43
|
version: '2.2'
|
44
44
|
type: :runtime
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
47
|
-
- !ruby/object:Gem::Dependency
|
48
|
-
name: haml
|
49
|
-
requirement: &70169062039960 !ruby/object:Gem::Requirement
|
50
|
-
none: false
|
51
|
-
requirements:
|
52
|
-
- - ~>
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: '3.0'
|
55
|
-
type: :runtime
|
56
|
-
prerelease: false
|
57
|
-
version_requirements: *70169062039960
|
46
|
+
version_requirements: *70099405671720
|
58
47
|
- !ruby/object:Gem::Dependency
|
59
48
|
name: httparty
|
60
|
-
requirement: &
|
49
|
+
requirement: &70099405670520 !ruby/object:Gem::Requirement
|
61
50
|
none: false
|
62
51
|
requirements:
|
63
52
|
- - ~>
|
@@ -65,10 +54,10 @@ dependencies:
|
|
65
54
|
version: 0.8.1
|
66
55
|
type: :runtime
|
67
56
|
prerelease: false
|
68
|
-
version_requirements: *
|
57
|
+
version_requirements: *70099405670520
|
69
58
|
- !ruby/object:Gem::Dependency
|
70
59
|
name: activesupport
|
71
|
-
requirement: &
|
60
|
+
requirement: &70099405669280 !ruby/object:Gem::Requirement
|
72
61
|
none: false
|
73
62
|
requirements:
|
74
63
|
- - ! '>='
|
@@ -76,21 +65,10 @@ dependencies:
|
|
76
65
|
version: 2.0.0
|
77
66
|
type: :runtime
|
78
67
|
prerelease: false
|
79
|
-
version_requirements: *
|
80
|
-
- !ruby/object:Gem::Dependency
|
81
|
-
name: json
|
82
|
-
requirement: &70169062048680 !ruby/object:Gem::Requirement
|
83
|
-
none: false
|
84
|
-
requirements:
|
85
|
-
- - ~>
|
86
|
-
- !ruby/object:Gem::Version
|
87
|
-
version: '1.5'
|
88
|
-
type: :runtime
|
89
|
-
prerelease: false
|
90
|
-
version_requirements: *70169062048680
|
68
|
+
version_requirements: *70099405669280
|
91
69
|
- !ruby/object:Gem::Dependency
|
92
70
|
name: jeweler
|
93
|
-
requirement: &
|
71
|
+
requirement: &70099405668340 !ruby/object:Gem::Requirement
|
94
72
|
none: false
|
95
73
|
requirements:
|
96
74
|
- - ~>
|
@@ -98,21 +76,10 @@ dependencies:
|
|
98
76
|
version: '1.5'
|
99
77
|
type: :development
|
100
78
|
prerelease: false
|
101
|
-
version_requirements: *
|
102
|
-
- !ruby/object:Gem::Dependency
|
103
|
-
name: rcov
|
104
|
-
requirement: &70169062095520 !ruby/object:Gem::Requirement
|
105
|
-
none: false
|
106
|
-
requirements:
|
107
|
-
- - ! '>='
|
108
|
-
- !ruby/object:Gem::Version
|
109
|
-
version: '0'
|
110
|
-
type: :development
|
111
|
-
prerelease: false
|
112
|
-
version_requirements: *70169062095520
|
79
|
+
version_requirements: *70099405668340
|
113
80
|
- !ruby/object:Gem::Dependency
|
114
81
|
name: rack-test
|
115
|
-
requirement: &
|
82
|
+
requirement: &70099405667520 !ruby/object:Gem::Requirement
|
116
83
|
none: false
|
117
84
|
requirements:
|
118
85
|
- - ! '>='
|
@@ -120,10 +87,10 @@ dependencies:
|
|
120
87
|
version: '0'
|
121
88
|
type: :development
|
122
89
|
prerelease: false
|
123
|
-
version_requirements: *
|
90
|
+
version_requirements: *70099405667520
|
124
91
|
- !ruby/object:Gem::Dependency
|
125
92
|
name: rspec
|
126
|
-
requirement: &
|
93
|
+
requirement: &70099405666620 !ruby/object:Gem::Requirement
|
127
94
|
none: false
|
128
95
|
requirements:
|
129
96
|
- - ~>
|
@@ -131,10 +98,10 @@ dependencies:
|
|
131
98
|
version: '2.4'
|
132
99
|
type: :development
|
133
100
|
prerelease: false
|
134
|
-
version_requirements: *
|
101
|
+
version_requirements: *70099405666620
|
135
102
|
- !ruby/object:Gem::Dependency
|
136
103
|
name: webmock
|
137
|
-
requirement: &
|
104
|
+
requirement: &70099405666020 !ruby/object:Gem::Requirement
|
138
105
|
none: false
|
139
106
|
requirements:
|
140
107
|
- - ~>
|
@@ -142,10 +109,10 @@ dependencies:
|
|
142
109
|
version: '1.6'
|
143
110
|
type: :development
|
144
111
|
prerelease: false
|
145
|
-
version_requirements: *
|
112
|
+
version_requirements: *70099405666020
|
146
113
|
- !ruby/object:Gem::Dependency
|
147
114
|
name: imagesize
|
148
|
-
requirement: &
|
115
|
+
requirement: &70099405681480 !ruby/object:Gem::Requirement
|
149
116
|
none: false
|
150
117
|
requirements:
|
151
118
|
- - ~>
|
@@ -153,12 +120,11 @@ dependencies:
|
|
153
120
|
version: '0.1'
|
154
121
|
type: :development
|
155
122
|
prerelease: false
|
156
|
-
version_requirements: *
|
123
|
+
version_requirements: *70099405681480
|
157
124
|
description: A service for image manipulation - built as an extensible wrapper of
|
158
125
|
Imagemagick which handles caching, c/o the Dragonfly gem.
|
159
126
|
email: aidan.feldman@gmail.com
|
160
|
-
executables:
|
161
|
-
- magickly
|
127
|
+
executables: []
|
162
128
|
extensions: []
|
163
129
|
extra_rdoc_files:
|
164
130
|
- LICENSE.txt
|
@@ -167,6 +133,7 @@ files:
|
|
167
133
|
- .document
|
168
134
|
- .gemtest
|
169
135
|
- .rspec
|
136
|
+
- .travis.yml
|
170
137
|
- Gemfile
|
171
138
|
- Gemfile.lock
|
172
139
|
- HISTORY.md
|
@@ -174,16 +141,19 @@ files:
|
|
174
141
|
- README.md
|
175
142
|
- Rakefile
|
176
143
|
- VERSION
|
177
|
-
- bin/magickly
|
178
144
|
- config.ru
|
179
145
|
- lib/dragonfly/data_storage/remote_data_store.rb
|
180
146
|
- lib/images/lomo_mask.png
|
181
147
|
- lib/magickly.rb
|
182
148
|
- lib/magickly/app.rb
|
183
149
|
- lib/public/imagemagick.png
|
150
|
+
- lib/public/images/logo.jpg
|
151
|
+
- lib/public/jquery-ui.smoothness.css
|
152
|
+
- lib/public/magickly_demo.js
|
153
|
+
- lib/public/style.css
|
184
154
|
- lib/shortcuts.rb
|
185
|
-
- lib/views/analyzers.
|
186
|
-
- lib/views/index.
|
155
|
+
- lib/views/analyzers.erb
|
156
|
+
- lib/views/index.erb
|
187
157
|
- magickly.gemspec
|
188
158
|
- spec/requests/magickly_app_spec.rb
|
189
159
|
- spec/spec_helper.rb
|
@@ -206,7 +176,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
206
176
|
version: '0'
|
207
177
|
segments:
|
208
178
|
- 0
|
209
|
-
hash:
|
179
|
+
hash: 596109342780870765
|
210
180
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
211
181
|
none: false
|
212
182
|
requirements:
|
@@ -215,7 +185,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
215
185
|
version: '0'
|
216
186
|
requirements: []
|
217
187
|
rubyforge_project:
|
218
|
-
rubygems_version: 1.8.
|
188
|
+
rubygems_version: 1.8.15
|
219
189
|
signing_key:
|
220
190
|
specification_version: 3
|
221
191
|
summary: image manipulation as a (plugin-able) service
|