artwork 0.6.1 → 0.7.0
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 +4 -4
- data/CHANGELOG.md +44 -0
- data/README.md +63 -9
- data/lib/artwork/configuration.rb +25 -16
- data/lib/artwork/model.rb +17 -4
- data/lib/artwork/version.rb +1 -1
- data/spec/artwork/configuration_spec.rb +31 -11
- data/spec/artwork/model_spec.rb +57 -7
- data/spec/artwork/view_spec.rb +26 -2
- data/spec/artwork_spec.rb +2 -2
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 573aa33bc1c5aefabf51ff8509dc7bd55fa6a09e
|
4
|
+
data.tar.gz: f8c0aefbcb4d513b3b52b41aa08efa4cc4a59ddf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3362f10528462b3405e0a1959c48d935c1ae220e09564dfef9326f112bcb523444dca904e4f80848c7e4626c9077c14710c19d0cf0eec6da0433c82988f7ecba
|
7
|
+
data.tar.gz: aa4077dfae88ef932c291891f53553dc1f5382b95cca2b831abbd47db5302a1c219b0e0ee4bc5a39747d418fec51d8e9a86b636e70811a64ff4944e74d0c2c34
|
data/CHANGELOG.md
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
## v0.7.0
|
2
|
+
|
3
|
+
**Backwards-incompatible changes**
|
4
|
+
|
5
|
+
- Renamed `Artwork.default_resolution` to `Artwork.base_resolution`
|
6
|
+
- Renamed `Artwork.actual_resolution_for` to `Artwork.actual_resolution_from`
|
7
|
+
and is now private
|
8
|
+
|
9
|
+
**Other changes**
|
10
|
+
|
11
|
+
- Added support for custom base resolutions via the following syntax:
|
12
|
+
`<%= artwork_tag @record, :cover, '800x@1200' %>`
|
13
|
+
- Added `Artwork.actual_resolution` (set via `Artwork.configure_for(request)`)
|
14
|
+
- Added support for responsive image sizes via the alternative sizes parameter
|
15
|
+
of `Artwork::Model.artwork_thumb_for(name, size, alternative_sizes = nil)`
|
16
|
+
Example usage:
|
17
|
+
|
18
|
+
Request full-width images if the current browser's viewport is 480 px or
|
19
|
+
less wide:
|
20
|
+
|
21
|
+
```ruby
|
22
|
+
<%= artwork_tag @recrod, :cover, '800x', {480 => '320x@320'} %>
|
23
|
+
```
|
24
|
+
|
25
|
+
## v0.6.1
|
26
|
+
|
27
|
+
- Added `Artwork.actual_resolution_for(request)` which returns the current
|
28
|
+
client's browser width, in pixels.
|
29
|
+
|
30
|
+
## v0.6.0
|
31
|
+
|
32
|
+
- Don't change viewport width & retina cookies when loaded in an iframe.
|
33
|
+
|
34
|
+
## v0.5.0
|
35
|
+
|
36
|
+
No changes.
|
37
|
+
|
38
|
+
## v0.4.2
|
39
|
+
|
40
|
+
- Set the cookies with `path=/`.
|
41
|
+
|
42
|
+
## v0.4.1
|
43
|
+
|
44
|
+
- Compatibility with newer versions of the Paperclip gem.
|
data/README.md
CHANGED
@@ -1,12 +1,27 @@
|
|
1
1
|
# Artwork
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
3
|
+
The Artwork gem provides simple server-side responsive images support for Rails
|
4
|
+
which is similar in concept to the `<picture>` tag spec but requires no
|
5
|
+
JavaScript, doesn't make extra requests and works in all browsers.
|
6
|
+
|
7
|
+
Currently it supports only Paperclip attachments, but that can be changed
|
8
|
+
failry easily.
|
7
9
|
|
8
10
|
The gem should be thread-safe and should work with Rails 2.3 or newer.
|
9
11
|
|
12
|
+
## How it works
|
13
|
+
|
14
|
+
To do this "magic", the gem needs some information from the browser. Two pieces
|
15
|
+
of knowledge travel from the browser to the server via a cookie:
|
16
|
+
|
17
|
+
- the browser window's dimentions (width in pixels)
|
18
|
+
- the device's pixel ratio
|
19
|
+
|
20
|
+
These values are set in a cookie as early as possible during the first page
|
21
|
+
load and then the page is reloaded with JavaScript. If these values change
|
22
|
+
later on, for example if the user resizes their browser, no automatic reloading
|
23
|
+
is performed.
|
24
|
+
|
10
25
|
## An example
|
11
26
|
|
12
27
|
Say you've declared a default (base) resolution of 1440px. You design based on
|
@@ -56,7 +71,8 @@ Or install it yourself as:
|
|
56
71
|
|
57
72
|
$ gem install artwork
|
58
73
|
|
59
|
-
Add the following line at the top of your `<head>` section
|
74
|
+
Add the following line at the top of your `<head>` section, as early as
|
75
|
+
possible, but **after** any `<meta viewport>` tags:
|
60
76
|
|
61
77
|
<%= activate_resolution_independence %>
|
62
78
|
|
@@ -69,6 +85,11 @@ so you could prevent this if you add (*ABOVE* the top script):
|
|
69
85
|
<style> .artwork-reload-splash body { display: none; } </style>
|
70
86
|
<%= activate_resolution_independence %>
|
71
87
|
|
88
|
+
### When you have a viewport meta tag
|
89
|
+
|
90
|
+
If you have `<meta viewport>` tags, place them **before** the
|
91
|
+
`activate_resolution_independence` call.
|
92
|
+
|
72
93
|
### Usage in frames
|
73
94
|
|
74
95
|
The client-side code which checks for the current browser's resolutions will be
|
@@ -86,7 +107,7 @@ This has to happen before the `<%= activate_resolution_independence %>` call.
|
|
86
107
|
Set the following variables in an app initializer:
|
87
108
|
|
88
109
|
- `Artwork.supported_resolutions_list`
|
89
|
-
- `Artwork.
|
110
|
+
- `Artwork.base_resolution`
|
90
111
|
|
91
112
|
Name your Paperclip attachment styles using the following convention:
|
92
113
|
|
@@ -108,7 +129,7 @@ conventions will be ignored and will bypass the artwork auto-sizing logic.
|
|
108
129
|
|
109
130
|
Configure the gem by putting the following code in `config/initializers/artwork.rb`:
|
110
131
|
|
111
|
-
Artwork.
|
132
|
+
Artwork.base_resolution = 1440
|
112
133
|
Artwork.supported_resolutions_list = [1024, 1280, 1440, 1600, 1920, 2048, 3200, 3840]
|
113
134
|
|
114
135
|
Include `Artwork::Model` in your models which have artworks.
|
@@ -122,12 +143,46 @@ the `artwork_tag` view helper. Example:
|
|
122
143
|
<%= artwork_tag @film, :board, :'1440x', :image => {:class => 'poster'} %>
|
123
144
|
<%= artwork_tag @gallery, :cover, :'900x' %>
|
124
145
|
|
146
|
+
### Base (default) resolution
|
147
|
+
|
148
|
+
The base resolution defeined by `Artwork.base_resolution` is there to assist
|
149
|
+
in development and to make calculating the image width percentage in relation
|
150
|
+
to the viewport width easier.
|
151
|
+
|
152
|
+
For example, to define a half-width image in a setting where your base
|
153
|
+
resolution is 1600 px, you can use:
|
154
|
+
|
155
|
+
<%= artwork_tag @record, :cover, :'800x' %>
|
156
|
+
|
157
|
+
In general, it's convenient to set the base resolution to what your dev team's
|
158
|
+
screen width is.
|
159
|
+
|
160
|
+
### Custom base resolutions
|
161
|
+
|
162
|
+
The gem supports per-tag base resolutions via the following syntax:
|
163
|
+
|
164
|
+
<%= artwork_tag @record, :cover, :'800x@1200' %>
|
165
|
+
|
166
|
+
This effectively means "size the image as 2/3 of the viewport width".
|
167
|
+
|
168
|
+
### Different image sizes based on different browser widths
|
169
|
+
|
170
|
+
There is basic media query-like support built into
|
171
|
+
`Artwork::Model.artwork_thumb_for(name, size, alternative_sizes = nil)`.
|
172
|
+
|
173
|
+
For example, to request a full width image if the current browser's viewport
|
174
|
+
is 480px or less wide, you can use the following code:
|
175
|
+
|
176
|
+
```ruby
|
177
|
+
<%= artwork_tag @recrod, :cover, '800x', {480 => '320x@320'} %>
|
178
|
+
```
|
179
|
+
|
125
180
|
## Thumb Selection Algorithm
|
126
181
|
|
127
182
|
The following criteria are taken into account for picking up the appropriate
|
128
183
|
thumb name:
|
129
184
|
|
130
|
-
- The `
|
185
|
+
- The `base_resolution` specified in the Artwork configuration file.
|
131
186
|
- The current resolition, approximated to the nearest supported resolution
|
132
187
|
which is larger than the current user's one.
|
133
188
|
- Whether or not the screen is retina.
|
@@ -154,7 +209,6 @@ For a thumb to be returned as matching, all of the following must be true:
|
|
154
209
|
|
155
210
|
If no such thumb exist, the largest one will match.
|
156
211
|
|
157
|
-
|
158
212
|
## Contributing
|
159
213
|
|
160
214
|
1. [Fork it](https://github.com/mitio/artwork/fork)
|
@@ -11,13 +11,13 @@ module Artwork
|
|
11
11
|
set :supported_resolutions_list, list
|
12
12
|
end
|
13
13
|
|
14
|
-
def
|
15
|
-
get(:
|
14
|
+
def base_resolution
|
15
|
+
get(:base_resolution) or @@base_resolution or raise "Please set #{__method__}"
|
16
16
|
end
|
17
17
|
|
18
|
-
def
|
19
|
-
@@
|
20
|
-
set :
|
18
|
+
def base_resolution=(resolution)
|
19
|
+
@@base_resolution ||= resolution
|
20
|
+
set :base_resolution, resolution
|
21
21
|
end
|
22
22
|
|
23
23
|
def load_2x_images?
|
@@ -29,26 +29,25 @@ module Artwork
|
|
29
29
|
end
|
30
30
|
|
31
31
|
def current_resolution
|
32
|
-
get(:current_resolution) ||
|
32
|
+
get(:current_resolution) || base_resolution
|
33
33
|
end
|
34
34
|
|
35
|
-
def
|
36
|
-
|
35
|
+
def current_resolution=(resolution)
|
36
|
+
set :current_resolution, resolution
|
37
|
+
end
|
37
38
|
|
38
|
-
|
39
|
-
|
40
|
-
else
|
41
|
-
default_resolution
|
42
|
-
end
|
39
|
+
def actual_resolution
|
40
|
+
get(:actual_resolution) || base_resolution
|
43
41
|
end
|
44
42
|
|
45
|
-
def
|
46
|
-
set :
|
43
|
+
def actual_resolution=(resolution)
|
44
|
+
set :actual_resolution, resolution
|
47
45
|
end
|
48
46
|
|
49
47
|
def configure_for(request)
|
50
48
|
Artwork.load_2x_images = fetch_2x_images_flag_from(request)
|
51
49
|
Artwork.current_resolution = current_resolution_from(request)
|
50
|
+
Artwork.actual_resolution = actual_resolution_from(request)
|
52
51
|
end
|
53
52
|
|
54
53
|
def reset_configuration
|
@@ -73,7 +72,7 @@ module Artwork
|
|
73
72
|
def current_resolution_from(request)
|
74
73
|
browser_width = request.cookies['_width'].to_i
|
75
74
|
|
76
|
-
return
|
75
|
+
return base_resolution if browser_width.zero?
|
77
76
|
|
78
77
|
supported_resolutions_list.each do |resolution|
|
79
78
|
return resolution if browser_width <= resolution
|
@@ -81,5 +80,15 @@ module Artwork
|
|
81
80
|
|
82
81
|
supported_resolutions_list.last
|
83
82
|
end
|
83
|
+
|
84
|
+
def actual_resolution_from(request)
|
85
|
+
browser_width = request.cookies['_width'].to_i
|
86
|
+
|
87
|
+
if browser_width > 0
|
88
|
+
browser_width
|
89
|
+
else
|
90
|
+
base_resolution
|
91
|
+
end
|
92
|
+
end
|
84
93
|
end
|
85
94
|
end
|
data/lib/artwork/model.rb
CHANGED
@@ -2,10 +2,17 @@ require 'artwork/thumbnail'
|
|
2
2
|
|
3
3
|
module Artwork
|
4
4
|
module Model
|
5
|
-
def artwork_thumb_for(attachment_name, size)
|
5
|
+
def artwork_thumb_for(attachment_name, size, alternative_sizes = nil)
|
6
|
+
size = determine_alternative_size_for(alternative_sizes) || size
|
7
|
+
|
8
|
+
size, base_resolution = size.to_s.split('@')
|
9
|
+
base_resolution ||= Artwork.base_resolution
|
10
|
+
|
6
11
|
desired_thumb = Thumbnail.new(size)
|
7
12
|
matching_thumb_name = nil
|
8
13
|
|
14
|
+
ratio_for_current_resolution = base_resolution.to_f / Artwork.current_resolution.to_f
|
15
|
+
|
9
16
|
if desired_thumb.compatible?
|
10
17
|
desired_size = desired_thumb.width / ratio_for_current_resolution
|
11
18
|
|
@@ -42,7 +49,7 @@ module Artwork
|
|
42
49
|
end
|
43
50
|
|
44
51
|
def artwork_url(attachment_name, size, options = {})
|
45
|
-
thumb_name = artwork_thumb_for(attachment_name, size)
|
52
|
+
thumb_name = artwork_thumb_for(attachment_name, size, options)
|
46
53
|
send(attachment_name).url(thumb_name, options)
|
47
54
|
end
|
48
55
|
|
@@ -52,8 +59,14 @@ module Artwork
|
|
52
59
|
|
53
60
|
private
|
54
61
|
|
55
|
-
def
|
56
|
-
|
62
|
+
def determine_alternative_size_for(alternative_sizes)
|
63
|
+
return unless alternative_sizes
|
64
|
+
|
65
|
+
new_size_definition = alternative_sizes \
|
66
|
+
.sort_by { |max_resolution, size| max_resolution } \
|
67
|
+
.find { |max_resolution, size| Artwork.actual_resolution <= max_resolution }
|
68
|
+
|
69
|
+
new_size_definition.last if new_size_definition
|
57
70
|
end
|
58
71
|
end
|
59
72
|
end
|
data/lib/artwork/version.rb
CHANGED
@@ -6,8 +6,9 @@ module Artwork
|
|
6
6
|
|
7
7
|
before :each do
|
8
8
|
[
|
9
|
-
:
|
10
|
-
:current_resolution, :
|
9
|
+
:base_resolution, :supported_resolutions_list,
|
10
|
+
:current_resolution, :actual_resolution,
|
11
|
+
:load_2x_images,
|
11
12
|
].each do |key|
|
12
13
|
|
13
14
|
Thread.current[key] = nil
|
@@ -15,7 +16,7 @@ module Artwork
|
|
15
16
|
end
|
16
17
|
end
|
17
18
|
|
18
|
-
[:
|
19
|
+
[:base_resolution, :supported_resolutions_list].each do |option_name|
|
19
20
|
describe "##{option_name}" do
|
20
21
|
let(:default_value) { option_name == :supported_resolutions_list ? [1440] : 1440 }
|
21
22
|
let(:custom_value) { option_name == :supported_resolutions_list ? [1024] : 1024 }
|
@@ -70,8 +71,8 @@ module Artwork
|
|
70
71
|
end
|
71
72
|
|
72
73
|
describe '#current_resolution' do
|
73
|
-
it 'falls back to
|
74
|
-
expect(config).to receive(:
|
74
|
+
it 'falls back to base_resolution' do
|
75
|
+
expect(config).to receive(:base_resolution).and_return('default')
|
75
76
|
expect(config.current_resolution).to eq 'default'
|
76
77
|
end
|
77
78
|
end
|
@@ -83,6 +84,20 @@ module Artwork
|
|
83
84
|
end
|
84
85
|
end
|
85
86
|
|
87
|
+
describe '#actual_resolution' do
|
88
|
+
it 'falls back to base_resolution' do
|
89
|
+
expect(config).to receive(:base_resolution).and_return('default')
|
90
|
+
expect(config.actual_resolution).to eq 'default'
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
describe '#actual_resolution=' do
|
95
|
+
it 'allows setting the current actual resolution' do
|
96
|
+
config.actual_resolution = 12345
|
97
|
+
expect(config.actual_resolution).to eq 12345
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
86
101
|
describe '#reset_configuration' do
|
87
102
|
it 'resets the current_resolution' do
|
88
103
|
config.current_resolution = 'current'
|
@@ -90,7 +105,7 @@ module Artwork
|
|
90
105
|
|
91
106
|
config.reset_configuration
|
92
107
|
|
93
|
-
expect(config).to receive(:
|
108
|
+
expect(config).to receive(:base_resolution).and_return('default')
|
94
109
|
expect(config.current_resolution).to eq 'default'
|
95
110
|
end
|
96
111
|
|
@@ -109,17 +124,18 @@ module Artwork
|
|
109
124
|
double :cookies => cookies_hash
|
110
125
|
end
|
111
126
|
|
112
|
-
it 'sets current_resolution and load_2x_images from request cookies' do
|
127
|
+
it 'sets current_resolution, actual_resolution and load_2x_images from request cookies' do
|
113
128
|
config.supported_resolutions_list = [1000, 2000, 3000]
|
114
129
|
config.configure_for make_request('_retina' => '1', '_width' => '2000')
|
115
130
|
|
116
131
|
expect(config.current_resolution).to eq 2000
|
132
|
+
expect(config.actual_resolution).to eq 2000
|
117
133
|
expect(config.load_2x_images?).to eq true
|
118
134
|
end
|
119
135
|
|
120
136
|
it 'sets the load_2x_images flag from the _retina cookie' do
|
121
137
|
config.supported_resolutions_list = [1000, 2000, 3000]
|
122
|
-
config.
|
138
|
+
config.base_resolution = 1000
|
123
139
|
|
124
140
|
config.configure_for make_request('_retina' => '0')
|
125
141
|
expect(config.load_2x_images?).to eq false
|
@@ -128,26 +144,30 @@ module Artwork
|
|
128
144
|
expect(config.load_2x_images?).to eq true
|
129
145
|
end
|
130
146
|
|
131
|
-
it 'picks only from the supported resolutions list' do
|
147
|
+
it 'picks only from the supported resolutions list but stores the actual resolution as well' do
|
132
148
|
config.supported_resolutions_list = [1000, 2000, 3000]
|
133
149
|
|
134
150
|
config.configure_for make_request('_width' => '1234')
|
135
151
|
expect(config.current_resolution).to eq 2000
|
152
|
+
expect(config.actual_resolution).to eq 1234
|
136
153
|
|
137
154
|
config.configure_for make_request('_width' => '234')
|
138
155
|
expect(config.current_resolution).to eq 1000
|
156
|
+
expect(config.actual_resolution).to eq 234
|
139
157
|
|
140
158
|
config.configure_for make_request('_width' => '10234')
|
141
159
|
expect(config.current_resolution).to eq 3000
|
160
|
+
expect(config.actual_resolution).to eq 10234
|
142
161
|
end
|
143
162
|
|
144
|
-
it 'falls back to
|
163
|
+
it 'falls back to base_resolution if no _width cookie' do
|
145
164
|
config.supported_resolutions_list = []
|
146
|
-
config.
|
165
|
+
config.base_resolution = 5000
|
147
166
|
|
148
167
|
config.configure_for make_request
|
149
168
|
|
150
169
|
expect(config.current_resolution).to eq 5000
|
170
|
+
expect(config.actual_resolution).to eq 5000
|
151
171
|
end
|
152
172
|
end
|
153
173
|
end
|
data/spec/artwork/model_spec.rb
CHANGED
@@ -59,7 +59,7 @@ module Artwork
|
|
59
59
|
|
60
60
|
describe '#artwork_url' do
|
61
61
|
it 'returns the computed url of an attachment by delegating to artwork_thumb_for' do
|
62
|
-
expect(instance).to receive(:artwork_thumb_for).with(:photo, :size).and_return(:computed_size)
|
62
|
+
expect(instance).to receive(:artwork_thumb_for).with(:photo, :size, 'options').and_return(:computed_size)
|
63
63
|
|
64
64
|
attachment = double
|
65
65
|
expect(attachment).to receive(:url).with(:computed_size, 'options').and_return 'some/url'
|
@@ -69,7 +69,7 @@ module Artwork
|
|
69
69
|
end
|
70
70
|
|
71
71
|
it 'works with two arguments and a hash options' do
|
72
|
-
expect(instance).to receive(:artwork_thumb_for).with(:photo, :size).and_return(:computed_size)
|
72
|
+
expect(instance).to receive(:artwork_thumb_for).with(:photo, :size, :some => 'options').and_return(:computed_size)
|
73
73
|
|
74
74
|
attachment = double
|
75
75
|
expect(attachment).to receive(:url).with(:computed_size, :some => 'options').and_return 'some/url'
|
@@ -79,7 +79,7 @@ module Artwork
|
|
79
79
|
end
|
80
80
|
|
81
81
|
it 'works with two arguments only without any options hash' do
|
82
|
-
expect(instance).to receive(:artwork_thumb_for).with(:photo, :size).and_return(:computed_size)
|
82
|
+
expect(instance).to receive(:artwork_thumb_for).with(:photo, :size, {}).and_return(:computed_size)
|
83
83
|
|
84
84
|
attachment = double
|
85
85
|
expect(attachment).to receive(:url).with(:computed_size, {}).and_return 'some/url'
|
@@ -91,13 +91,14 @@ module Artwork
|
|
91
91
|
|
92
92
|
describe '#artwork_thumb_for' do
|
93
93
|
before :each do
|
94
|
-
Artwork.
|
94
|
+
Artwork.base_resolution = 1000
|
95
95
|
Artwork.current_resolution = 1000
|
96
|
+
Artwork.actual_resolution = 1000
|
96
97
|
Artwork.load_2x_images = false
|
97
98
|
end
|
98
99
|
|
99
100
|
def expect_thumb(size, expected)
|
100
|
-
expect(instance.artwork_thumb_for(:image, size)).to eq expected
|
101
|
+
expect(instance.artwork_thumb_for(:image, *Array(size))).to eq expected
|
101
102
|
end
|
102
103
|
|
103
104
|
it 'picks the exact requested size if it exists' do
|
@@ -110,7 +111,7 @@ module Artwork
|
|
110
111
|
end
|
111
112
|
|
112
113
|
it 'scales the required size according to current_resolution' do
|
113
|
-
Artwork.
|
114
|
+
Artwork.base_resolution = 1000
|
114
115
|
Artwork.current_resolution = 2000
|
115
116
|
|
116
117
|
expect_thumb '1000x', :'2000x'
|
@@ -136,7 +137,7 @@ module Artwork
|
|
136
137
|
expect_thumb 'unsupported', :unsupported
|
137
138
|
|
138
139
|
Artwork.load_2x_images = true
|
139
|
-
Artwork.
|
140
|
+
Artwork.base_resolution = 1000
|
140
141
|
Artwork.current_resolution = 5000
|
141
142
|
|
142
143
|
expect_thumb 'unsupported', :unsupported
|
@@ -161,6 +162,18 @@ module Artwork
|
|
161
162
|
expect_thumb '200x_some_label', :'320x_some_label'
|
162
163
|
end
|
163
164
|
|
165
|
+
it 'allows changing the base resolution per request' do
|
166
|
+
Artwork.current_resolution = 2000
|
167
|
+
|
168
|
+
expect_thumb '320x@320', :'2000x'
|
169
|
+
expect_thumb '320x@640', :'1280x'
|
170
|
+
|
171
|
+
Artwork.current_resolution = 320
|
172
|
+
expect_thumb '320x@320', :'320x'
|
173
|
+
expect_thumb '320x_some_label@320', :'320x_some_label'
|
174
|
+
expect_thumb '200x_some_label@320', :'320x_some_label'
|
175
|
+
end
|
176
|
+
|
164
177
|
it 'considers the aspect ratio of the desired thumb' do
|
165
178
|
expect_thumb '320x499', :'320x500'
|
166
179
|
expect_thumb '319x498', :'320x500'
|
@@ -190,6 +203,43 @@ module Artwork
|
|
190
203
|
it 'returns nil if no thumbnail matches the requested label' do
|
191
204
|
expect_thumb '319x_nonexistant_label', nil
|
192
205
|
end
|
206
|
+
|
207
|
+
context 'with an alternative sizes definition' do
|
208
|
+
it 'ignores alternative sizes if current resolution is above all the max resolutions given' do
|
209
|
+
Artwork.current_resolution = 1000
|
210
|
+
Artwork.actual_resolution = 1000
|
211
|
+
|
212
|
+
expect_thumb ['320x', {700 => '100x@100'}], :'320x'
|
213
|
+
end
|
214
|
+
|
215
|
+
it 'picks the first alternative size if current resolution is smaller than all max resolutions' do
|
216
|
+
Artwork.current_resolution = 799
|
217
|
+
Artwork.actual_resolution = 799
|
218
|
+
|
219
|
+
expect_thumb ['320x', {1280 => '500x', 800 => '1000x'}], :'1280x'
|
220
|
+
end
|
221
|
+
|
222
|
+
it 'picks the first alternative size if current resolution is smaller than all max resolutions and supports custom base resolutions' do
|
223
|
+
Artwork.current_resolution = 799
|
224
|
+
Artwork.actual_resolution = 799
|
225
|
+
|
226
|
+
expect_thumb ['320x', {1280 => '50x@100', 800 => '100x@100'}], :'1280x'
|
227
|
+
end
|
228
|
+
|
229
|
+
it 'compares resolutions with <=' do
|
230
|
+
Artwork.current_resolution = 800
|
231
|
+
Artwork.actual_resolution = 800
|
232
|
+
|
233
|
+
expect_thumb ['320x', {1280 => '50x@100', 800 => '100x@100'}], :'1280x'
|
234
|
+
end
|
235
|
+
|
236
|
+
it 'picks the largest alternative size if current resolution is smaller only than the max resolution given' do
|
237
|
+
Artwork.current_resolution = 1200
|
238
|
+
Artwork.actual_resolution = 1200
|
239
|
+
|
240
|
+
expect_thumb ['320x', {1280 => '50x@100', 800 => '100x@100'}], :'640x'
|
241
|
+
end
|
242
|
+
end
|
193
243
|
end
|
194
244
|
end
|
195
245
|
end
|
data/spec/artwork/view_spec.rb
CHANGED
@@ -19,8 +19,32 @@ module Artwork
|
|
19
19
|
end
|
20
20
|
end
|
21
21
|
|
22
|
-
|
23
|
-
|
22
|
+
describe '#artwork_tag' do
|
23
|
+
it 'is defined' do
|
24
|
+
expect(View.instance_methods.map(&:to_sym)).to include(:artwork_tag)
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'returns an HTML img tag with the appropriate URL' do
|
28
|
+
record = double
|
29
|
+
expect(record).to receive(:artwork_url).with(:artwork_name, :size, {}).and_return('image_url')
|
30
|
+
allow(view_context).to receive(:content_tag).and_yield
|
31
|
+
expect(view_context).to receive(:image_tag).with('image_url', {:alt => nil}).and_return('image-tag-with-url')
|
32
|
+
|
33
|
+
generated_html = view_context.artwork_tag(record, :artwork_name, :size)
|
34
|
+
|
35
|
+
expect(generated_html).to eq 'image-tag-with-url'
|
36
|
+
end
|
37
|
+
|
38
|
+
it 'passes the options to artwork_url' do
|
39
|
+
record = double
|
40
|
+
expect(record).to receive(:artwork_url).with(:artwork_name, :size, {:some => 'options'}).and_return('image_url')
|
41
|
+
allow(view_context).to receive(:content_tag).and_yield
|
42
|
+
expect(view_context).to receive(:image_tag).with('image_url', {:alt => nil}).and_return('image-tag-with-url')
|
43
|
+
|
44
|
+
generated_html = view_context.artwork_tag(record, :artwork_name, :size, {:some => 'options'})
|
45
|
+
|
46
|
+
expect(generated_html).to eq 'image-tag-with-url'
|
47
|
+
end
|
24
48
|
end
|
25
49
|
end
|
26
50
|
end
|
data/spec/artwork_spec.rb
CHANGED
@@ -8,8 +8,8 @@ describe Artwork do
|
|
8
8
|
it 'responds to configuration methods' do
|
9
9
|
expect(Artwork).to respond_to(:configure_for)
|
10
10
|
expect(Artwork).to respond_to(:reset_configuration)
|
11
|
-
expect(Artwork).to respond_to(:
|
12
|
-
expect(Artwork).to respond_to(:
|
11
|
+
expect(Artwork).to respond_to(:base_resolution)
|
12
|
+
expect(Artwork).to respond_to(:base_resolution=)
|
13
13
|
expect(Artwork).to respond_to(:supported_resolutions_list)
|
14
14
|
expect(Artwork).to respond_to(:supported_resolutions_list=)
|
15
15
|
expect(Artwork).to respond_to(:load_2x_images?)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: artwork
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dimitar Dimitrov
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-07-
|
11
|
+
date: 2015-07-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -104,6 +104,7 @@ extra_rdoc_files: []
|
|
104
104
|
files:
|
105
105
|
- ".gitignore"
|
106
106
|
- ".rspec"
|
107
|
+
- CHANGELOG.md
|
107
108
|
- Gemfile
|
108
109
|
- LICENSE.txt
|
109
110
|
- README.md
|