middleman-image-uploader-tag 0.0.1
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.
- checksums.yaml +7 -0
- data/.gitignore +8 -0
- data/Gemfile +11 -0
- data/README.md +99 -0
- data/Rakefile +10 -0
- data/features/support/env.rb +4 -0
- data/lib/middleman-image-uploader-tag.rb +9 -0
- data/lib/middleman/image-uploader-tag/cdns/base.rb +9 -0
- data/lib/middleman/image-uploader-tag/cdns/cloudinary.rb +37 -0
- data/lib/middleman/image-uploader-tag/exceptions.rb +24 -0
- data/lib/middleman/image-uploader-tag/extension.rb +84 -0
- data/lib/middleman/image-uploader-tag/version.rb +5 -0
- data/lib/middleman_extension.rb +1 -0
- data/middleman-image-uploader-tag.gemspec +31 -0
- data/test/fixtures/test/.gitignore +18 -0
- data/test/fixtures/test/Gemfile +14 -0
- data/test/fixtures/test/config.rb +72 -0
- data/test/fixtures/test/source/images/background.png +0 -0
- data/test/fixtures/test/source/images/middleman.png +0 -0
- data/test/fixtures/test/source/index.html.erb +10 -0
- data/test/fixtures/test/source/javascripts/all.js +1 -0
- data/test/fixtures/test/source/layouts/layout.erb +19 -0
- data/test/fixtures/test/source/stylesheets/all.css +55 -0
- data/test/fixtures/test/source/stylesheets/normalize.css +375 -0
- data/test/lib/middleman/image-uploader-tag/cdns/cloudinary_test.rb +132 -0
- data/test/lib/middleman/image-uploader-tag/extension_test.rb +174 -0
- data/test/test_helper.rb +10 -0
- metadata +142 -0
@@ -0,0 +1,132 @@
|
|
1
|
+
require './test/test_helper'
|
2
|
+
|
3
|
+
class CloudinaryCDNTest < Minitest::Test
|
4
|
+
attr_reader :cdn
|
5
|
+
|
6
|
+
def setup
|
7
|
+
@cdn = Middleman::ImageUploaderTag::CloudinaryCDN
|
8
|
+
end
|
9
|
+
|
10
|
+
def test_implemented
|
11
|
+
assert cdn
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_config_required_for_initializing
|
15
|
+
assert_raises ArgumentError do
|
16
|
+
cdn.new
|
17
|
+
end
|
18
|
+
|
19
|
+
assert_instance_of cdn, cdn.new(config)
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_initialization_set_properties_from_valid_config
|
23
|
+
clear_config!
|
24
|
+
cdn_config = Cloudinary.config
|
25
|
+
|
26
|
+
assert_equal nil, cdn_config.cloud_name
|
27
|
+
assert_equal nil, cdn_config.api_key
|
28
|
+
assert_equal nil, cdn_config.api_secret
|
29
|
+
assert_equal nil, cdn_config.enhance_image_tag
|
30
|
+
assert_equal nil, cdn_config.static_image_support
|
31
|
+
assert_equal nil, cdn_config.secure
|
32
|
+
|
33
|
+
cdn.new config
|
34
|
+
|
35
|
+
assert_equal config[:cloud_name], cdn_config.cloud_name
|
36
|
+
assert_equal config[:api_key], cdn_config.api_key
|
37
|
+
assert_equal config[:api_secret], cdn_config.api_secret
|
38
|
+
assert_equal config[:enhance_image_tag], cdn_config.enhance_image_tag
|
39
|
+
assert_equal config[:static_image_support], cdn_config.static_image_support
|
40
|
+
assert_equal config[:secure], cdn_config.secure
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_config_should_provide_required_options
|
44
|
+
clear_config!
|
45
|
+
|
46
|
+
cdn.const_get(:OBLIGATORY_OPTIONS).each do |option|
|
47
|
+
assert_raises Middleman::ImageUploaderTag::AuthorizationRequired do
|
48
|
+
bad_config = config
|
49
|
+
bad_config.delete option
|
50
|
+
cdn.new bad_config
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def test_public_interface
|
56
|
+
new_cdn = cdn.new(config)
|
57
|
+
assert_respond_to new_cdn, :get_remote_link
|
58
|
+
assert_respond_to new_cdn, :upload_to_cloud
|
59
|
+
end
|
60
|
+
|
61
|
+
def test_upload_to_cloud_expects_image_path_argument
|
62
|
+
assert_raises Middleman::ImageUploaderTag::NotFound do
|
63
|
+
cdn.new(config).upload_to_cloud nil
|
64
|
+
end
|
65
|
+
|
66
|
+
assert_raises Middleman::ImageUploaderTag::NotFound do
|
67
|
+
cdn.new(config).upload_to_cloud 'fake.jpg'
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
def test_upload_to_cloud
|
72
|
+
image_path = extension.image_location('test.jpg')
|
73
|
+
`touch #{image_path}` unless File.exists? image_path
|
74
|
+
|
75
|
+
mock = Minitest::Mock.new
|
76
|
+
mock.expect :upload, { 'secure_url': 'http://cdn.com/test.jpg' }, [
|
77
|
+
image_path,
|
78
|
+
{ use_filename: true, unique_filename: false }
|
79
|
+
]
|
80
|
+
|
81
|
+
Cloudinary.stub_const(:Uploader, mock) do
|
82
|
+
cdn.new(config).upload_to_cloud(image_path)
|
83
|
+
end
|
84
|
+
|
85
|
+
mock.verify
|
86
|
+
end
|
87
|
+
|
88
|
+
def test_get_remote_link_expects_image_path_argument
|
89
|
+
assert_raises Middleman::ImageUploaderTag::NotFound do
|
90
|
+
cdn.new(config).get_remote_link nil
|
91
|
+
end
|
92
|
+
|
93
|
+
assert_raises Middleman::ImageUploaderTag::NotFound do
|
94
|
+
cdn.new(config).get_remote_link 'fake.jpg'
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
def test_get_remote_link
|
99
|
+
image_path = extension.image_location('test.jpg')
|
100
|
+
`touch #{image_path}` unless File.exists? image_path
|
101
|
+
|
102
|
+
Cloudinary::Uploader.instance_eval do
|
103
|
+
def upload(file, options)
|
104
|
+
{ 'secure_url': 'http://cdn.com/test.jpg' }
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
assert_equal 'http://cdn.com/test.jpg', cdn.new(config).get_remote_link(image_path)
|
109
|
+
end
|
110
|
+
|
111
|
+
private
|
112
|
+
|
113
|
+
def config
|
114
|
+
{
|
115
|
+
cloud_name: ENV['CLOUDINARY_CLOUD_NAME'],
|
116
|
+
api_key: ENV['CLOUDINARY_API_KEY'],
|
117
|
+
api_secret: ENV['CLOUDINARY_API_SECRET'],
|
118
|
+
enhance_image_tag: false,
|
119
|
+
static_image_support: true,
|
120
|
+
secure: true
|
121
|
+
}
|
122
|
+
end
|
123
|
+
|
124
|
+
def clear_config!
|
125
|
+
Cloudinary.class_variable_set(:@@config, OpenStruct.new({}))
|
126
|
+
end
|
127
|
+
|
128
|
+
def extension
|
129
|
+
Middleman::ImageUploaderTag::Extension.new(Class.new(Middleman::Application)).class
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
@@ -0,0 +1,174 @@
|
|
1
|
+
require './test/test_helper'
|
2
|
+
require 'minitest/stub_const'
|
3
|
+
require 'fileutils'
|
4
|
+
|
5
|
+
class ExtensionTest < Minitest::Test
|
6
|
+
attr_reader :application, :ext_instance, :ext_class
|
7
|
+
|
8
|
+
def setup
|
9
|
+
@application = Class.new(Middleman::Application)
|
10
|
+
@ext_instance = Middleman::ImageUploaderTag::Extension.new(@application)
|
11
|
+
@ext_instance.app = @application
|
12
|
+
@ext_class = @ext_instance.class
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_implemented
|
16
|
+
assert Middleman::ImageUploaderTag::Extension
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_app
|
20
|
+
assert_equal application, ext_class.app
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_provider_options
|
24
|
+
assert_equal ext_instance.options, ext_class.provider_options
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_remote_images_dir
|
28
|
+
set_provider_options ext_class, remote_images_dir: 'test_folder'
|
29
|
+
assert_equal 'test_folder', ext_class.remote_images_dir
|
30
|
+
|
31
|
+
set_provider_options ext_class, remote_images_dir: nil
|
32
|
+
assert_equal 'remote_images', ext_class.remote_images_dir
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_create_images_dir!
|
36
|
+
remote_images_dir = File.join(application.root, 'source', ext_class.remote_images_dir)
|
37
|
+
|
38
|
+
assert Dir.exists?(remote_images_dir)
|
39
|
+
|
40
|
+
FileUtils.rm_rf(remote_images_dir)
|
41
|
+
refute Dir.exists?(remote_images_dir)
|
42
|
+
|
43
|
+
ext_class.create_images_dir!
|
44
|
+
assert Dir.exists?(remote_images_dir)
|
45
|
+
end
|
46
|
+
|
47
|
+
def test_helpers_being_defined
|
48
|
+
assert_respond_to application, :remote_image_tag
|
49
|
+
assert_respond_to application, :remote_image_tag_link
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_remote_image_tag_helper
|
53
|
+
# I`m not sure if it`s the right way..
|
54
|
+
create_fake_image!('test.jpg')
|
55
|
+
image = ext_class.image_location('test.jpg')
|
56
|
+
called = false
|
57
|
+
name_called = ''
|
58
|
+
|
59
|
+
application.class.class_eval do
|
60
|
+
define_method :image_tag do |name, params|
|
61
|
+
params ||= {}
|
62
|
+
called = true
|
63
|
+
name_called = name
|
64
|
+
'test.jpg'
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
application.stub :remote_image_tag_link, image do
|
69
|
+
application.remote_image_tag 'test.jpg'
|
70
|
+
end
|
71
|
+
|
72
|
+
assert_equal true, called
|
73
|
+
assert_equal image, name_called
|
74
|
+
end
|
75
|
+
|
76
|
+
def test_remote_image_tag_link_helper
|
77
|
+
create_fake_image!('test.jpg')
|
78
|
+
image = ext_class.image_location('test.jpg')
|
79
|
+
|
80
|
+
mock = Minitest::Mock.new
|
81
|
+
mock.expect :get_remote_path, image, ['test.jpg']
|
82
|
+
|
83
|
+
::Middleman::ImageUploaderTag.stub_const(:Extension, mock) do
|
84
|
+
application.remote_image_tag_link 'test.jpg'
|
85
|
+
end
|
86
|
+
|
87
|
+
mock.verify
|
88
|
+
end
|
89
|
+
|
90
|
+
def test_image_location
|
91
|
+
remote_images_dir = File.join(application.root, 'source', ext_class.remote_images_dir)
|
92
|
+
|
93
|
+
assert_equal remote_images_dir + '/test.jpg', ext_class.image_location('test.jpg')
|
94
|
+
assert_equal remote_images_dir + '/test.jpg', ext_class.image_location('/test.jpg')
|
95
|
+
assert_equal remote_images_dir + '/test/test.jpg', ext_class.image_location('test/test.jpg')
|
96
|
+
end
|
97
|
+
|
98
|
+
def test_provider
|
99
|
+
set_provider_options ext_class, provider_options_stub
|
100
|
+
|
101
|
+
assert_instance_of Middleman::ImageUploaderTag::CloudinaryCDN, ext_class.provider
|
102
|
+
end
|
103
|
+
|
104
|
+
def test_get_remote_path_during_development
|
105
|
+
create_fake_image!('test.jpg')
|
106
|
+
create_fake_image!('test/test.jpg')
|
107
|
+
|
108
|
+
set_app_config environment: :development
|
109
|
+
|
110
|
+
assert_equal 'test.jpg', ext_class.get_remote_path('test.jpg')
|
111
|
+
assert_equal '/test.jpg', ext_class.get_remote_path('/test.jpg')
|
112
|
+
assert_equal 'test/test.jpg', ext_class.get_remote_path('test/test.jpg')
|
113
|
+
end
|
114
|
+
|
115
|
+
def test_get_remote_path_raises_exception_for_absent_image
|
116
|
+
image = ext_class.image_location('/test.jpg')
|
117
|
+
File.delete(image) if File.exist? image
|
118
|
+
|
119
|
+
assert_raises Middleman::ImageUploaderTag::NotFound do
|
120
|
+
ext_class.get_remote_path 'test.jpg'
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
def test_get_remote_path_during_build
|
125
|
+
set_app_config environment: :build
|
126
|
+
create_fake_image!('test.jpg')
|
127
|
+
image = ext_class.image_location('test.jpg')
|
128
|
+
|
129
|
+
mock = Minitest::Mock.new
|
130
|
+
mock.expect :get_remote_link, image, [image]
|
131
|
+
|
132
|
+
ext_class.stub :provider, mock do
|
133
|
+
ext_class.get_remote_path 'test.jpg'
|
134
|
+
end
|
135
|
+
mock.verify
|
136
|
+
end
|
137
|
+
|
138
|
+
private
|
139
|
+
|
140
|
+
def set_app_config(options = {})
|
141
|
+
options.each do |key, value|
|
142
|
+
application.config.public_send(:"#{key}=", value)
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
146
|
+
def set_provider_options(extension, options = {})
|
147
|
+
provider_options = extension.provider_options
|
148
|
+
|
149
|
+
options.each do |key, value|
|
150
|
+
if provider_options.respond_to?(key)
|
151
|
+
# reset internal state because of the nil guard technic
|
152
|
+
extension.class_variable_set("@@#{key}", nil)
|
153
|
+
|
154
|
+
provider_options.public_send(:"#{key}=", value)
|
155
|
+
end
|
156
|
+
end
|
157
|
+
end
|
158
|
+
|
159
|
+
def provider_options_stub
|
160
|
+
{ provider: :cloudinary,
|
161
|
+
provider_config: { api_key: 'test', api_secret: 'test', cloud_name: 'test' }
|
162
|
+
}
|
163
|
+
end
|
164
|
+
|
165
|
+
def create_fake_image!(name)
|
166
|
+
image = ext_class.image_location(name)
|
167
|
+
dir = File.dirname(image)
|
168
|
+
Dir.mkdir(dir) unless Dir.exists? dir
|
169
|
+
|
170
|
+
`touch #{image}` unless File.exists? image
|
171
|
+
end
|
172
|
+
|
173
|
+
end
|
174
|
+
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1,10 @@
|
|
1
|
+
PROJECT_ROOT_PATH = File.dirname(File.dirname(__FILE__))
|
2
|
+
require File.join(PROJECT_ROOT_PATH, 'lib', 'middleman-image-uploader-tag')
|
3
|
+
require File.join(PROJECT_ROOT_PATH, 'lib', 'middleman', 'image-uploader-tag',
|
4
|
+
'cdns', 'cloudinary')
|
5
|
+
require 'minitest/autorun'
|
6
|
+
require 'minitest/unit'
|
7
|
+
require 'minitest/pride'
|
8
|
+
|
9
|
+
ENV['MM_ROOT'] = File.join(PROJECT_ROOT_PATH, 'test', 'fixtures', 'test')
|
10
|
+
|
metadata
ADDED
@@ -0,0 +1,142 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: middleman-image-uploader-tag
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Aliaksandr Buhayeu
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-05-23 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: middleman-core
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 3.3.12
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 3.3.12
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: cloudinary
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 1.1.0
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 1.1.0
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: minitest
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 5.6.1
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 5.6.1
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: fivemat
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 1.3.1
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 1.3.1
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: minitest-stub-const
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
description: "\n The remote_image_tag helper provide you automatic image upload
|
84
|
+
to external\n hosting services with public back-link mapping\n "
|
85
|
+
email:
|
86
|
+
- aliaksandr.buhayeu@gmail.com
|
87
|
+
executables: []
|
88
|
+
extensions: []
|
89
|
+
extra_rdoc_files: []
|
90
|
+
files:
|
91
|
+
- ".gitignore"
|
92
|
+
- Gemfile
|
93
|
+
- README.md
|
94
|
+
- Rakefile
|
95
|
+
- features/support/env.rb
|
96
|
+
- lib/middleman-image-uploader-tag.rb
|
97
|
+
- lib/middleman/image-uploader-tag/cdns/base.rb
|
98
|
+
- lib/middleman/image-uploader-tag/cdns/cloudinary.rb
|
99
|
+
- lib/middleman/image-uploader-tag/exceptions.rb
|
100
|
+
- lib/middleman/image-uploader-tag/extension.rb
|
101
|
+
- lib/middleman/image-uploader-tag/version.rb
|
102
|
+
- lib/middleman_extension.rb
|
103
|
+
- middleman-image-uploader-tag.gemspec
|
104
|
+
- test/fixtures/test/.gitignore
|
105
|
+
- test/fixtures/test/Gemfile
|
106
|
+
- test/fixtures/test/config.rb
|
107
|
+
- test/fixtures/test/source/images/background.png
|
108
|
+
- test/fixtures/test/source/images/middleman.png
|
109
|
+
- test/fixtures/test/source/index.html.erb
|
110
|
+
- test/fixtures/test/source/javascripts/all.js
|
111
|
+
- test/fixtures/test/source/layouts/layout.erb
|
112
|
+
- test/fixtures/test/source/stylesheets/all.css
|
113
|
+
- test/fixtures/test/source/stylesheets/normalize.css
|
114
|
+
- test/lib/middleman/image-uploader-tag/cdns/cloudinary_test.rb
|
115
|
+
- test/lib/middleman/image-uploader-tag/extension_test.rb
|
116
|
+
- test/test_helper.rb
|
117
|
+
homepage: https://github.com/aliaksandrb/middleman-image-uploader-tag
|
118
|
+
licenses:
|
119
|
+
- MIT
|
120
|
+
metadata: {}
|
121
|
+
post_install_message:
|
122
|
+
rdoc_options: []
|
123
|
+
require_paths:
|
124
|
+
- lib
|
125
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
126
|
+
requirements:
|
127
|
+
- - ">="
|
128
|
+
- !ruby/object:Gem::Version
|
129
|
+
version: '0'
|
130
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
131
|
+
requirements:
|
132
|
+
- - ">="
|
133
|
+
- !ruby/object:Gem::Version
|
134
|
+
version: '0'
|
135
|
+
requirements: []
|
136
|
+
rubyforge_project:
|
137
|
+
rubygems_version: 2.4.6
|
138
|
+
signing_key:
|
139
|
+
specification_version: 4
|
140
|
+
summary: Image tag helper with automatic upload to external services
|
141
|
+
test_files: []
|
142
|
+
has_rdoc:
|