hermitage 0.0.2.1 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.md +10 -0
- data/README.md +41 -24
- data/app/assets/javascripts/hermitage.js.coffee +332 -182
- data/hermitage.gemspec +2 -2
- data/lib/generators/hermitage/templates/hermitage.rb +2 -2
- data/lib/hermitage/defaults.rb +6 -3
- data/lib/hermitage/version.rb +1 -1
- data/lib/hermitage/view_helpers.rb +5 -4
- data/spec/dummy/app/models/dummy.rb +5 -0
- data/spec/features/bottom_panel_spec.rb +28 -0
- data/spec/features/navigation_spec.rb +48 -20
- data/spec/features/resize_spec.rb +51 -0
- data/spec/features/scale_spec.rb +11 -11
- data/spec/features/viewer_customization_spec.rb +44 -78
- data/spec/features/viewer_spec.rb +1 -1
- data/spec/features_helper.rb +1 -1
- data/spec/lib/hermitage/defaults_spec.rb +3 -2
- data/spec/lib/hermitage/view_helpers_spec.rb +8 -2
- metadata +9 -5
@@ -38,10 +38,11 @@ module Hermitage
|
|
38
38
|
lists.each do |list|
|
39
39
|
# Array of items in current list
|
40
40
|
items = list.collect do |item|
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
41
|
+
original_path = eval("item.#{options[:original]}")
|
42
|
+
thumbnail_path = eval("item.#{options[:thumbnail]}")
|
43
|
+
title = options[:title] ? eval("item.#{options[:title]}") : nil
|
44
|
+
image = image_tag(thumbnail_path, class: options[:image_class])
|
45
|
+
link_to(image, original_path, rel: 'hermitage', class: options[:link_class], title: title)
|
45
46
|
end
|
46
47
|
|
47
48
|
# Convert these items into content tag string
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'features_helper'
|
3
|
+
|
4
|
+
describe 'bottom_panel', type: :feature, js: true do
|
5
|
+
before(:each) do
|
6
|
+
Hermitage.configs[:default].merge!({ title: 'description' })
|
7
|
+
visit images_path
|
8
|
+
page.first('a[rel="hermitage"]').click
|
9
|
+
page.should have_css('img.current')
|
10
|
+
end
|
11
|
+
|
12
|
+
# I don't want any influence of this config to another tests
|
13
|
+
after(:each) { Hermitage.configs[:default] = Hermitage::Defaults.to_hash() }
|
14
|
+
|
15
|
+
it 'has bottom panel' do
|
16
|
+
page.should have_css('#hermitage .bottom-panel')
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'has description of image' do
|
20
|
+
page.should have_css('#hermitage .bottom-panel .text')
|
21
|
+
jquery_text('#hermitage .bottom-panel .text').should == 'description of 0'
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'affects upon image size and position' do
|
25
|
+
top('.current').should == 221 # if window height is 768px
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
@@ -41,35 +41,63 @@ describe 'navigation', type: :feature, js: true do
|
|
41
41
|
end
|
42
42
|
end
|
43
43
|
|
44
|
+
context 'with loop' do
|
45
|
+
before(:each) do
|
46
|
+
visit images_path
|
47
|
+
page.first('a[href="/assets/1-full.png"]').click
|
48
|
+
page.should have_css('img.current') # Wait for loading before testing
|
49
|
+
end
|
44
50
|
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
51
|
+
describe 'by clicking on image' do
|
52
|
+
describe 'at the right side' do
|
53
|
+
let(:click_action) { Proc.new { click_at_right('img.current') } }
|
54
|
+
it_behaves_like 'navigation to next'
|
55
|
+
end
|
50
56
|
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
57
|
+
describe 'at the left side' do
|
58
|
+
let(:click_action) { Proc.new { click_at_left('img.current') } }
|
59
|
+
it_behaves_like 'navigation to previous'
|
60
|
+
end
|
55
61
|
end
|
56
62
|
|
57
|
-
describe '
|
58
|
-
|
59
|
-
|
63
|
+
describe 'by clicking on navigation button' do
|
64
|
+
describe 'right' do
|
65
|
+
let(:click_action) { Proc.new { page.find('#navigation-right').click() } }
|
66
|
+
it_behaves_like 'navigation to next'
|
67
|
+
end
|
68
|
+
|
69
|
+
describe 'left' do
|
70
|
+
let(:click_action) { Proc.new { page.find('#navigation-left').click() } }
|
71
|
+
it_behaves_like 'navigation to previous'
|
72
|
+
end
|
60
73
|
end
|
61
74
|
end
|
62
75
|
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
76
|
+
context 'without loop' do
|
77
|
+
before(:each) do
|
78
|
+
visit images_path
|
79
|
+
evaluate_script('hermitage.looped = false')
|
80
|
+
page.first("a[href='/assets/#{image}-full.png']").click
|
81
|
+
page.should have_css('img.current')
|
82
|
+
end
|
83
|
+
|
84
|
+
describe 'first image' do
|
85
|
+
let(:image) { "0" }
|
86
|
+
it { page.should_not have_css('#navigation-left') }
|
87
|
+
it { page.should have_css('#navigation-right') }
|
88
|
+
end
|
89
|
+
|
90
|
+
describe 'middle image' do
|
91
|
+
let(:image) { "1" }
|
92
|
+
it { page.should have_css('#navigation-left') }
|
93
|
+
it { page.should have_css('#navigation-right') }
|
67
94
|
end
|
68
95
|
|
69
|
-
describe '
|
70
|
-
let(:
|
71
|
-
|
96
|
+
describe 'last image' do
|
97
|
+
let(:image) { "2" }
|
98
|
+
it { page.should have_css('#navigation-left') }
|
99
|
+
it { page.should_not have_css('#navigation-right') }
|
72
100
|
end
|
73
101
|
end
|
74
|
-
|
102
|
+
|
75
103
|
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'features_helper'
|
3
|
+
|
4
|
+
describe 'resize', type: :feature, js: true do
|
5
|
+
before(:each) do
|
6
|
+
visit images_path
|
7
|
+
page.first('a[rel="hermitage"]').click
|
8
|
+
page.should have_css('img.current')
|
9
|
+
end
|
10
|
+
|
11
|
+
shared_examples 'resize' do
|
12
|
+
before(:each) do
|
13
|
+
page.driver.resize(window_width, window_height)
|
14
|
+
sleep(1) # Wait for animation complete
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'adjusts image' do
|
18
|
+
width('.current').should == expected_width
|
19
|
+
height('.current').should == expected_height
|
20
|
+
top('.current').should == expected_top
|
21
|
+
left('.current').should == expected_left
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'adjusts navigation buttons' do
|
25
|
+
css('#navigation-left', 'line-height').should == expected_line_height
|
26
|
+
css('#navigation-right', 'line-height').should == expected_line_height
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
describe 'make window smaller' do
|
31
|
+
let(:window_width) { 300 }
|
32
|
+
let(:window_height) { 300 }
|
33
|
+
let(:expected_width) { 200 }
|
34
|
+
let(:expected_height) { 200 }
|
35
|
+
let(:expected_top) { 50 }
|
36
|
+
let(:expected_left) { 50 }
|
37
|
+
let(:expected_line_height) { '300px' }
|
38
|
+
it_behaves_like 'resize'
|
39
|
+
|
40
|
+
describe 'then make window larger' do
|
41
|
+
let(:window_width) { 500 }
|
42
|
+
let(:window_height) { 500 }
|
43
|
+
let(:expected_width) { 256 }
|
44
|
+
let(:expected_height) { 256 }
|
45
|
+
let(:expected_top) { 122 }
|
46
|
+
let(:expected_left) { 122 }
|
47
|
+
let(:expected_line_height) { '500px' }
|
48
|
+
it_behaves_like 'resize'
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
data/spec/features/scale_spec.rb
CHANGED
@@ -11,18 +11,18 @@ describe 'scale', type: :feature, js: true do
|
|
11
11
|
end
|
12
12
|
|
13
13
|
context 'exceed the bounds of window by width' do
|
14
|
-
let(:window_width) {
|
14
|
+
let(:window_width) { 300 }
|
15
15
|
let(:window_height) { 1000 }
|
16
16
|
|
17
17
|
it 'scales the image' do
|
18
|
-
width('.current').should ==
|
19
|
-
height('.current').should ==
|
18
|
+
width('.current').should == 200
|
19
|
+
height('.current').should == 200
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
23
23
|
context 'exceed the bounds of window by height' do
|
24
24
|
let(:window_width) { 1000 }
|
25
|
-
let(:window_height) {
|
25
|
+
let(:window_height) { 200 }
|
26
26
|
|
27
27
|
it 'scales the image' do
|
28
28
|
width('.current').should == 200
|
@@ -31,12 +31,12 @@ describe 'scale', type: :feature, js: true do
|
|
31
31
|
end
|
32
32
|
|
33
33
|
context 'exceed the bounds of window by both dimensions' do
|
34
|
-
let(:window_width) {
|
34
|
+
let(:window_width) { 250 }
|
35
35
|
let(:window_height) { 300 }
|
36
36
|
|
37
37
|
it 'scales the image to the minimum scale coefficient' do
|
38
|
-
width('.current').should ==
|
39
|
-
height('.current').should ==
|
38
|
+
width('.current').should == 150
|
39
|
+
height('.current').should == 150
|
40
40
|
end
|
41
41
|
end
|
42
42
|
|
@@ -50,20 +50,20 @@ describe 'scale', type: :feature, js: true do
|
|
50
50
|
end
|
51
51
|
|
52
52
|
context 'by width' do
|
53
|
-
let(:window_width) {
|
53
|
+
let(:window_width) { 150 }
|
54
54
|
let(:window_height) { 1000 }
|
55
55
|
it_behaves_like 'minimum allowed size'
|
56
56
|
end
|
57
57
|
|
58
58
|
context 'by height' do
|
59
59
|
let(:window_width) { 1000 }
|
60
|
-
let(:window_height) {
|
60
|
+
let(:window_height) { 90 }
|
61
61
|
it_behaves_like 'minimum allowed size'
|
62
62
|
end
|
63
63
|
|
64
64
|
context 'by both dimensions' do
|
65
|
-
let(:window_width) {
|
66
|
-
let(:window_height) {
|
65
|
+
let(:window_width) { 150 }
|
66
|
+
let(:window_height) { 90 }
|
67
67
|
it_behaves_like 'minimum allowed size'
|
68
68
|
end
|
69
69
|
end
|
@@ -14,80 +14,51 @@ describe 'viewer_customization', type: :feature, js: true do
|
|
14
14
|
# There will be sleep(1) in tests where we should wait until fade in animation is ended
|
15
15
|
end
|
16
16
|
|
17
|
-
context 'zIndex' do
|
18
|
-
let(:js) { 'hermitage.zIndex = 5'}
|
19
|
-
it { css('#hermitage', 'z-index').should == '5' }
|
20
|
-
end
|
21
|
-
|
22
17
|
context 'darkening.opacity' do
|
23
18
|
let(:js) { 'hermitage.darkening.opacity = 0.5'}
|
24
19
|
before(:each) { sleep(1) }
|
25
20
|
it { css('#overlay', 'opacity').should == '0.5' }
|
26
21
|
end
|
27
22
|
|
28
|
-
context 'darkening.
|
29
|
-
let(:js) { 'hermitage.darkening.
|
23
|
+
context 'darkening.styles' do
|
24
|
+
let(:js) { 'hermitage.darkening.styles = { backgroundColor: "#FAFAFA" }' }
|
30
25
|
it { css('#overlay', 'background-color').should == 'rgb(250, 250, 250)' }
|
31
26
|
end
|
32
27
|
|
33
|
-
context '
|
34
|
-
let(:js) { 'hermitage.
|
28
|
+
context 'navigationButtons.enabled' do
|
29
|
+
let(:js) { 'hermitage.navigationButtons.enabled = false' }
|
35
30
|
it { should_not have_css('#navigation-left') }
|
36
31
|
it { should_not have_css('#navigation-right') }
|
37
32
|
end
|
38
33
|
|
39
|
-
context '
|
40
|
-
let(:js) { 'hermitage.
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
css(selector, 'border-right-color').should == 'rgb(0, 0, 0)'
|
46
|
-
css(selector, 'border-bottom-color').should == 'rgb(0, 0, 0)'
|
47
|
-
css(selector, 'border-left-color').should == 'rgb(0, 0, 0)'
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
|
-
context 'left' do
|
52
|
-
let(:selector) { '#navigation-left' }
|
53
|
-
it_behaves_like 'navigation button'
|
54
|
-
end
|
55
|
-
|
56
|
-
context 'right' do
|
57
|
-
let(:selector) { '#navigation-right' }
|
58
|
-
it_behaves_like 'navigation button'
|
59
|
-
end
|
34
|
+
context 'navigationButtons.styles' do
|
35
|
+
let(:js) { 'hermitage.navigationButtons.styles = { backgroundColor: "#000", width: "100px" }'}
|
36
|
+
it { css('#navigation-left', 'background-color').should == 'rgb(0, 0, 0)' }
|
37
|
+
it { css('#navigation-left', 'width').should == '100px' }
|
38
|
+
it { css('#navigation-right', 'background-color').should == 'rgb(0, 0, 0)' }
|
39
|
+
it { css('#navigation-right', 'width').should == '100px' }
|
60
40
|
end
|
61
41
|
|
62
|
-
context '
|
63
|
-
let(:js) { 'hermitage.
|
64
|
-
it { css('#navigation-left', 'width').should == '
|
42
|
+
context 'navigationButtons.next.styles' do
|
43
|
+
let(:js) { 'hermitage.navigationButtons.next.styles = { width: "100px" }'}
|
44
|
+
it { css('#navigation-left', 'width').should == '50px' }
|
65
45
|
it { css('#navigation-right', 'width').should == '100px' }
|
66
46
|
end
|
67
47
|
|
68
|
-
context '
|
69
|
-
let(:js) { 'hermitage.
|
48
|
+
context 'navigationButtons.previous.styles' do
|
49
|
+
let(:js) { 'hermitage.navigationButtons.previous.styles = { width: "100px" }'}
|
50
|
+
it { css('#navigation-left', 'width').should == '100px' }
|
51
|
+
it { css('#navigation-right', 'width').should == '50px' }
|
52
|
+
end
|
70
53
|
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
css('#navigation-left', 'border-top-right-radius').should == '0px'
|
75
|
-
css('#navigation-left', 'border-bottom-right-radius').should == '0px'
|
76
|
-
end
|
77
|
-
|
78
|
-
it 'sets border radiuses for right button' do
|
79
|
-
css('#navigation-right', 'border-top-left-radius').should == '0px'
|
80
|
-
css('#navigation-right', 'border-bottom-left-radius').should == '0px'
|
81
|
-
css('#navigation-right', 'border-top-right-radius').should == '5px'
|
82
|
-
css('#navigation-right', 'border-bottom-right-radius').should == '5px'
|
83
|
-
end
|
54
|
+
context 'navigationButtons.next.text' do
|
55
|
+
let(:js) { 'hermitage.navigationButtons.next.text = ">"'}
|
56
|
+
it { jquery_text('#navigation-right').should == '>' }
|
84
57
|
end
|
85
|
-
|
86
|
-
context '
|
87
|
-
let(:js) { 'hermitage.
|
88
|
-
|
89
|
-
it { css('#navigation-left', 'left').should == "#{left('.current') - 30 - width('#navigation-left')}px" }
|
90
|
-
it { css('#navigation-right', 'left').should == "#{left('.current') + width('.current') + 30}px" }
|
58
|
+
|
59
|
+
context 'navigationButtons.previous.text' do
|
60
|
+
let(:js) { 'hermitage.navigationButtons.previous.text = "<"'}
|
61
|
+
it { jquery_text('#navigation-left').should == '<' }
|
91
62
|
end
|
92
63
|
|
93
64
|
context 'closeButton.enabled' do
|
@@ -97,37 +68,32 @@ describe 'viewer_customization', type: :feature, js: true do
|
|
97
68
|
|
98
69
|
context 'closeButton.text' do
|
99
70
|
let(:js) { 'hermitage.closeButton.text = "Close"' }
|
100
|
-
it {
|
71
|
+
it { jquery_text('#close-button').should == 'Close' }
|
101
72
|
end
|
102
73
|
|
103
|
-
context 'closeButton.
|
104
|
-
let(:js) { 'hermitage.closeButton.
|
74
|
+
context 'closeButton.styles' do
|
75
|
+
let(:js) { 'hermitage.closeButton.styles = { color: "#777" }' }
|
105
76
|
it { css('#close-button', 'color').should == 'rgb(119, 119, 119)' }
|
106
77
|
end
|
107
78
|
|
108
|
-
context '
|
109
|
-
let(:js) { 'hermitage.
|
110
|
-
it
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
let(:before_click) { Proc.new{ page.driver.resize(500, 1000) } }
|
116
|
-
|
117
|
-
it 'scales the image' do
|
118
|
-
width('.current').should == 176
|
119
|
-
height('.current').should == 176
|
79
|
+
context 'image.styles' do
|
80
|
+
let(:js) { 'hermitage.image.styles = { border: "5px solid #000" }' }
|
81
|
+
it 'sets all borders width to 5px' do
|
82
|
+
css('.current', 'border-top-width').should == '5px'
|
83
|
+
css('.current', 'border-right-width').should == '5px'
|
84
|
+
css('.current', 'border-bottom-width').should == '5px'
|
85
|
+
css('.current', 'border-left-width').should == '5px'
|
120
86
|
end
|
121
87
|
end
|
122
88
|
|
123
|
-
context '
|
124
|
-
let(:js) { 'hermitage.
|
125
|
-
|
89
|
+
context 'bottomPanel.styles' do
|
90
|
+
let(:js) { 'hermitage.bottomPanel.styles = { backgroundColor: "#777" }' }
|
91
|
+
it { css('#hermitage .bottom-panel', 'background-color').should == 'rgb(119, 119, 119)' }
|
92
|
+
end
|
126
93
|
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
end
|
94
|
+
context 'bottomPanel.text.styles' do
|
95
|
+
let(:js) { 'hermitage.bottomPanel.text.styles = { textAlign: "left" }' }
|
96
|
+
it { css('#hermitage .bottom-panel .text', 'text-align').should == 'left' }
|
131
97
|
end
|
132
98
|
|
133
99
|
shared_examples 'image scaled to the minimum allowed size' do
|
@@ -139,13 +105,13 @@ describe 'viewer_customization', type: :feature, js: true do
|
|
139
105
|
|
140
106
|
context 'minimumSize.width' do
|
141
107
|
let(:js) { 'hermitage.minimumSize.width = 200'}
|
142
|
-
let(:before_click) { Proc.new{ page.driver.resize(
|
108
|
+
let(:before_click) { Proc.new{ page.driver.resize(250, 1000) } }
|
143
109
|
it_behaves_like 'image scaled to the minimum allowed size'
|
144
110
|
end
|
145
111
|
|
146
112
|
context 'minimumSize.width' do
|
147
113
|
let(:js) { 'hermitage.minimumSize.height = 200'}
|
148
|
-
let(:before_click) { Proc.new{ page.driver.resize(1000,
|
114
|
+
let(:before_click) { Proc.new{ page.driver.resize(1000, 150) } }
|
149
115
|
it_behaves_like 'image scaled to the minimum allowed size'
|
150
116
|
end
|
151
117
|
|
data/spec/features_helper.rb
CHANGED
@@ -4,8 +4,9 @@ describe Hermitage::Defaults do
|
|
4
4
|
describe '#to_hash' do
|
5
5
|
it "returns hash with symbolized constants' names as keys" do
|
6
6
|
Hermitage::Defaults.to_hash().should == {
|
7
|
-
|
8
|
-
|
7
|
+
original: 'file.url',
|
8
|
+
thumbnail: 'file.url(:thumbnail)',
|
9
|
+
title: nil,
|
9
10
|
list_tag: :ul,
|
10
11
|
item_tag: :li,
|
11
12
|
list_class: 'thumbnails',
|
@@ -19,12 +19,18 @@ describe Hermitage::ViewHelpers, type: :helper do
|
|
19
19
|
|
20
20
|
context 'with options' do
|
21
21
|
|
22
|
-
context '
|
23
|
-
subject { template.render_gallery_for images,
|
22
|
+
context 'original and thumbnail' do
|
23
|
+
subject { template.render_gallery_for images, original: 'photo', thumbnail: 'photo(:thumbnail)' }
|
24
24
|
let(:images) { Array.new(2) { |i| DummyPhoto.new(i.to_s) } }
|
25
25
|
it { should == expected }
|
26
26
|
end
|
27
27
|
|
28
|
+
context 'title' do
|
29
|
+
subject { template.render_gallery_for images, title: 'description' }
|
30
|
+
let(:expected) { '<ul class="thumbnails"><li class="span4"><a class="thumbnail" href="/assets/0-full.png" rel="hermitage" title="description of 0"><img alt="0 thumbnail" src="/assets/0-thumbnail.png" /></a></li><li class="span4"><a class="thumbnail" href="/assets/1-full.png" rel="hermitage" title="description of 1"><img alt="1 thumbnail" src="/assets/1-thumbnail.png" /></a></li></ul>' }
|
31
|
+
it { should == expected }
|
32
|
+
end
|
33
|
+
|
28
34
|
context 'list_tag and item_tag' do
|
29
35
|
subject { template.render_gallery_for images, list_tag: :div, item_tag: :div }
|
30
36
|
let(:expected) { '<div class="thumbnails"><div class="span4"><a class="thumbnail" href="/assets/0-full.png" rel="hermitage"><img alt="0 thumbnail" src="/assets/0-thumbnail.png" /></a></div><div class="span4"><a class="thumbnail" href="/assets/1-full.png" rel="hermitage"><img alt="1 thumbnail" src="/assets/1-thumbnail.png" /></a></div></div>' }
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hermitage
|
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:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-09-
|
12
|
+
date: 2013-09-08 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rails
|
@@ -187,7 +187,7 @@ dependencies:
|
|
187
187
|
- - ! '>='
|
188
188
|
- !ruby/object:Gem::Version
|
189
189
|
version: '0'
|
190
|
-
description: Ruby library for
|
190
|
+
description: Ruby library for image galleries generation.
|
191
191
|
email:
|
192
192
|
- immaculate.pine@gmail.com
|
193
193
|
executables: []
|
@@ -263,9 +263,11 @@ files:
|
|
263
263
|
- spec/dummy/public/422.html
|
264
264
|
- spec/dummy/public/500.html
|
265
265
|
- spec/dummy/public/favicon.ico
|
266
|
+
- spec/features/bottom_panel_spec.rb
|
266
267
|
- spec/features/engine_spec.rb
|
267
268
|
- spec/features/navigation_spec.rb
|
268
269
|
- spec/features/render_gallery_spec.rb
|
270
|
+
- spec/features/resize_spec.rb
|
269
271
|
- spec/features/scale_spec.rb
|
270
272
|
- spec/features/viewer_customization_spec.rb
|
271
273
|
- spec/features/viewer_spec.rb
|
@@ -300,8 +302,8 @@ rubyforge_project:
|
|
300
302
|
rubygems_version: 1.8.25
|
301
303
|
signing_key:
|
302
304
|
specification_version: 3
|
303
|
-
summary: Ruby library for
|
304
|
-
|
305
|
+
summary: Ruby library for image galleries generation (thumbnails and original images
|
306
|
+
viewer).
|
305
307
|
test_files:
|
306
308
|
- spec/dummy/README.rdoc
|
307
309
|
- spec/dummy/Rakefile
|
@@ -352,9 +354,11 @@ test_files:
|
|
352
354
|
- spec/dummy/public/422.html
|
353
355
|
- spec/dummy/public/500.html
|
354
356
|
- spec/dummy/public/favicon.ico
|
357
|
+
- spec/features/bottom_panel_spec.rb
|
355
358
|
- spec/features/engine_spec.rb
|
356
359
|
- spec/features/navigation_spec.rb
|
357
360
|
- spec/features/render_gallery_spec.rb
|
361
|
+
- spec/features/resize_spec.rb
|
358
362
|
- spec/features/scale_spec.rb
|
359
363
|
- spec/features/viewer_customization_spec.rb
|
360
364
|
- spec/features/viewer_spec.rb
|