rails-gallery 0.2.1 → 0.3.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.
@@ -1,12 +1,41 @@
1
1
  module RGallery
2
2
  class Photo
3
- attr_reader :id, :options
3
+ attr_reader :id, :sizing, :sources, :options
4
4
 
5
5
  def initialize id, options = {}
6
6
  @id = id
7
+ self.sources = options.delete :sources
8
+ @sizing = options.delete :sizing
7
9
  @options = options
8
10
  end
9
11
 
12
+ # map [{src: 'banner-HD.jpeg', sizing: '2x'}, {src: 'banner-phone.jpeg', sizing: '100w'}]
13
+ # into -> "banner-HD.jpeg 2x, banner-phone.jpeg 100w
14
+ def srcset
15
+ return '' unless sources_photos.kind_of? Array
16
+ @srcset ||= source_photos.inject([]) do |res, photo|
17
+ res << [photo.id, photo.sizing].join(' ')
18
+ end.join(',')
19
+ end
20
+
21
+ def srcset?
22
+ !srcset.blank?
23
+ end
24
+
25
+ # A photo can contain a source set of other photos!
26
+ def source_photos
27
+ return [] unless sources.kind_of? Array
28
+ @source_photos ||= sources.map do |source|
29
+ RGallery::Photo.new source.src, options.merge(:sizing => source.sizing)
30
+ end
31
+ end
32
+
33
+ # make sure that sources are wrapped as Hashies to allow method access
34
+ def sources= sources = []
35
+ return unless sources.kind_of? Array
36
+ @sources = sources.map{|source| Hashie::Mash.new source }
37
+ end
38
+
10
39
  def filename
11
40
  id
12
41
  end
@@ -12,7 +12,7 @@ module RGallery
12
12
  protected
13
13
 
14
14
  def photo_class
15
- @photo_class ||= Photos::Photo
15
+ @photo_class ||= RGallery::Photo
16
16
  end
17
17
  end
18
18
  end
@@ -1,7 +1,16 @@
1
1
  module RailsGallery
2
+ class ConfigurationError < StandardError
3
+ end
4
+
2
5
  module ViewHelper
6
+ include RailsGallery::PhotoValidation
7
+
3
8
  def self.galleries
4
- %w{galleria responsive slideshow}
9
+ %w{galleria responsive slideshow touch_touch}
10
+ end
11
+
12
+ def self.version
13
+ '0.2.2'
5
14
  end
6
15
 
7
16
  # autoload all galleries when references
@@ -11,12 +20,22 @@ module RailsGallery
11
20
 
12
21
  def gallery_image type, photo
13
22
  meth_name = "#{type}_gallery_image"
23
+ validate_gallery_photo! photo
14
24
  unless respond_to? meth_name
15
25
  raise ArgumentError, "Gallery #{type} is not yet supported. Please add a View helper module for this gallery using the convention followed by the other galleries..."
16
26
  end
17
27
  send(meth_name, photo)
18
28
  end
19
29
 
30
+ def gallery_imageset type, imageset
31
+ meth_name = "#{type}_gallery_imageset"
32
+ # validate_gallery_imageset! imageset
33
+ unless respond_to? meth_name
34
+ raise ArgumentError, "Gallery #{type} is not yet supported for imageset. Please add a View helper module for this gallery using the convention followed by the other galleries..."
35
+ end
36
+ send(meth_name, imageset)
37
+ end
38
+
20
39
  protected
21
40
 
22
41
  # include view helper modules for all galleries :)
@@ -1,11 +1,22 @@
1
1
  module RailsGallery
2
2
  module ViewHelper
3
3
  module Galleria
4
- def galleria_gallery_image photo
5
- content_tag :a, href: "/assets/#{photo.path}" do
6
- image_tag photo.path, :"data-title" => photo.title, :"data-description" => photo.description
4
+ def riagal_image photo, options = {}
5
+ content_tag :a, href: photo.path do
6
+ options.merge! :"data-title" => photo.title, :"data-description" => photo.description
7
+ image_tag photo.path, options
7
8
  end
8
9
  end
10
+
11
+ def riagal_imageset photo, options = {}
12
+ content_tag :a, href: photo.path do
13
+ options.merge! :"data-title" => photo.title, :"data-description" => photo.description
14
+ options.merge! :srcset => photo.srcset if photo.srcset?
15
+ image_tag photo.path, options
16
+ end
17
+ end
18
+ alias_method :galleria_gallery_image, :riagal_image
19
+ alias_method :galleria_gallery_imageset, :riagal_imageset
9
20
  end
10
21
  end
11
22
  end
@@ -1,9 +1,32 @@
1
1
  module RailsGallery
2
2
  module ViewHelper
3
3
  module Responsive
4
- def responsive_gallery_image photo
5
- image_tag photo.thumb, :"data-large" => "/assets/#{photo.path}", :alt => photo.alt, :"data-description" => photo.title
4
+ def respgal_image photo, options = {}
5
+ options.merge! :alt => photo.alt
6
+ options.merge! :"data-large" => photo.path, :"data-description" => photo.title
7
+ return image_tag photo.thumb, options unless options.delete :wrap
8
+
9
+ content_tag :li do
10
+ content_tag :a, href: '#' do
11
+ image_tag(photo.thumb, options)
12
+ end
13
+ end
6
14
  end
15
+
16
+ def respgal_imageset photo, options = {}
17
+ options.merge! :alt => photo.alt
18
+ options.merge! :"data-large" => photo.path, :"data-description" => photo.title
19
+ options.merge! :srcset => srcset if photo.srcset?
20
+ return imageset_tag photo.thumb, options unless options.delete :wrap
21
+
22
+ content_tag :li do
23
+ content_tag :a, href: '#' do
24
+ imageset_tag(photo.thumb, options)
25
+ end
26
+ end
27
+ end
28
+ alias_method :responsive_gallery_image, :respgal_image
29
+ alias_method :responsive_gallery_imageset, :respgal_imageset
7
30
  end
8
31
  end
9
32
  end
@@ -1,9 +1,19 @@
1
1
  module RailsGallery
2
2
  module ViewHelper
3
3
  module Slideshow
4
- def slideshow_gallery_image photo
5
- image_tag photo.thumb, alt: "/assets/#{photo.path}"
4
+ def slidegal_image photo, options = {}
5
+ options.merge! alt: photo.path
6
+ image_tag photo.thumb, options
6
7
  end
8
+
9
+ def slidegal_imageset photo, options = {}
10
+ options.merge! alt: photo.path
11
+ options.merge! :srcset => photo.srcset if photo.srcset?
12
+ imageset_tag photo.thumb, options
13
+ end
14
+
15
+ alias_method :slideshow_gallery_image, :slidegal_image
16
+ alias_method :slideshow_gallery_imageset, :slidegal_imageset
7
17
  end
8
18
  end
9
19
  end
@@ -0,0 +1,10 @@
1
+ module RailsGallery
2
+ module ViewHelper
3
+ module TouchTouch
4
+ def touchgal_image photo, options = {}
5
+ content_tag :a, nil, options.merge(href: photo.path, title: photo.title)
6
+ end
7
+ alias_method :touch_gallery_image, :touchgal_image
8
+ end
9
+ end
10
+ end
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "rails-gallery"
8
- s.version = "0.2.1"
8
+ s.version = "0.3.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Kristian Mandrup"]
12
- s.date = "2012-08-26"
12
+ s.date = "2012-12-06"
13
13
  s.description = "Adds popular javascript galleries to asset pipeline and includes a few Rails Gallery utils and helpers"
14
14
  s.email = "kmandrup@gmail.com"
15
15
  s.extra_rdoc_files = [
@@ -32,6 +32,7 @@ Gem::Specification.new do |s|
32
32
  "config/locales/rails_gallery.yml",
33
33
  "lib/rails-gallery.rb",
34
34
  "lib/rails-gallery/engine.rb",
35
+ "lib/rails-gallery/photo_validation.rb",
35
36
  "lib/rails-gallery/rgallery.rb",
36
37
  "lib/rails-gallery/rgallery/page.rb",
37
38
  "lib/rails-gallery/rgallery/pages.rb",
@@ -42,6 +43,7 @@ Gem::Specification.new do |s|
42
43
  "lib/rails-gallery/view_helper/galleria.rb",
43
44
  "lib/rails-gallery/view_helper/responsive.rb",
44
45
  "lib/rails-gallery/view_helper/slideshow.rb",
46
+ "lib/rails-gallery/view_helper/touch_touch.rb",
45
47
  "rails-gallery.gemspec",
46
48
  "spec/galleria_snippet.html",
47
49
  "spec/galleria_snippet.html.haml",
@@ -151,7 +153,9 @@ Gem::Specification.new do |s|
151
153
  "spec/images/responsive-gallery/images/thumbs/7.jpg",
152
154
  "spec/images/responsive-gallery/images/thumbs/8.jpg",
153
155
  "spec/images/responsive-gallery/images/thumbs/9.jpg",
154
- "spec/rails-gallery_spec.rb",
156
+ "spec/rails-gallery/view_helper_spec.rb",
157
+ "spec/rgallery/photos_spec.rb",
158
+ "spec/rgallery/property_photo.rb",
155
159
  "spec/spec_helper.rb",
156
160
  "vendor/assets/images/gallery/galleria/classic/loader.gif",
157
161
  "vendor/assets/images/gallery/galleria/classic/map.png",
@@ -174,6 +178,7 @@ Gem::Specification.new do |s|
174
178
  "vendor/assets/images/gallery/touch_touch/preloader.gif",
175
179
  "vendor/assets/javascripts/gallery/galleria-1.2.8.js",
176
180
  "vendor/assets/javascripts/gallery/galleria-1.2.8.min.js",
181
+ "vendor/assets/javascripts/gallery/galleria.js",
177
182
  "vendor/assets/javascripts/gallery/galleria/classic.js",
178
183
  "vendor/assets/javascripts/gallery/galleria/classic.min.js",
179
184
  "vendor/assets/javascripts/gallery/responsive.js",
@@ -186,7 +191,7 @@ Gem::Specification.new do |s|
186
191
  "vendor/assets/stylesheets/gallery/responsive.css",
187
192
  "vendor/assets/stylesheets/gallery/responsive/elastislide.css",
188
193
  "vendor/assets/stylesheets/gallery/slideshow.css",
189
- "vendor/assets/stylesheets/touch_touch.css"
194
+ "vendor/assets/stylesheets/gallery/touch_touch.css"
190
195
  ]
191
196
  s.homepage = "http://github.com/kristianmandrup/rails-gallery"
192
197
  s.licenses = ["MIT"]
@@ -198,12 +203,16 @@ Gem::Specification.new do |s|
198
203
  s.specification_version = 3
199
204
 
200
205
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
206
+ s.add_runtime_dependency(%q<rails>, [">= 0"])
207
+ s.add_runtime_dependency(%q<hashie>, ["~> 1.2.0"])
201
208
  s.add_development_dependency(%q<rspec>, [">= 2.8.0"])
202
209
  s.add_development_dependency(%q<rdoc>, [">= 3.12"])
203
210
  s.add_development_dependency(%q<bundler>, [">= 1.0.0"])
204
211
  s.add_development_dependency(%q<jeweler>, [">= 1.8.4"])
205
212
  s.add_development_dependency(%q<simplecov>, [">= 0.5"])
206
213
  else
214
+ s.add_dependency(%q<rails>, [">= 0"])
215
+ s.add_dependency(%q<hashie>, ["~> 1.2.0"])
207
216
  s.add_dependency(%q<rspec>, [">= 2.8.0"])
208
217
  s.add_dependency(%q<rdoc>, [">= 3.12"])
209
218
  s.add_dependency(%q<bundler>, [">= 1.0.0"])
@@ -211,6 +220,8 @@ Gem::Specification.new do |s|
211
220
  s.add_dependency(%q<simplecov>, [">= 0.5"])
212
221
  end
213
222
  else
223
+ s.add_dependency(%q<rails>, [">= 0"])
224
+ s.add_dependency(%q<hashie>, ["~> 1.2.0"])
214
225
  s.add_dependency(%q<rspec>, [">= 2.8.0"])
215
226
  s.add_dependency(%q<rdoc>, [">= 3.12"])
216
227
  s.add_dependency(%q<bundler>, [">= 1.0.0"])
@@ -0,0 +1,120 @@
1
+ require 'spec_helper'
2
+
3
+ class NoPathPhoto < RGallery::Photo
4
+ def path
5
+ nil
6
+ end
7
+ end
8
+
9
+ class BadFilenamePhoto < RGallery::Photo
10
+ def title
11
+ 'my title'
12
+ end
13
+
14
+ # blip method unknown!
15
+ def filename
16
+ blip
17
+ end
18
+ end
19
+
20
+ class NoTitlePhoto < RGallery::Photo
21
+ def path
22
+ 'abc'
23
+ end
24
+
25
+ def title
26
+ nil
27
+ end
28
+ end
29
+
30
+ class ValidPhoto < RGallery::Photo
31
+ def path
32
+ 'abc'
33
+ end
34
+
35
+ def title
36
+ 'sdgds'
37
+ end
38
+ end
39
+
40
+ describe RailsGallery::ConfigurationError do
41
+ specify { RailsGallery::ConfigurationError.new.should be_a StandardError }
42
+ end
43
+
44
+ describe RailsGallery::ViewHelper do
45
+ include ControllerTestHelpers,
46
+ RailsGallery::ViewHelper
47
+
48
+ let(:no_path_photo) { NoPathPhoto.new 1 }
49
+ let(:no_title_photo) { NoTitlePhoto.new 2 }
50
+ let(:bad_filename_photo) { BadFilenamePhoto.new 2 }
51
+ let(:valid_photo) { ValidPhoto.new 2 }
52
+
53
+ describe 'validate_gallery_photo! photo' do
54
+ it 'should raise error on nil' do
55
+ expect { validate_gallery_photo!(nil) }.to raise_error(ArgumentError)
56
+ end
57
+
58
+ it 'should raise error on no #path method' do
59
+ expect { validate_gallery_photo!(no_path_photo) }.to raise_error(ArgumentError)
60
+ end
61
+
62
+ it 'should raise error on no #title method' do
63
+ expect { validate_gallery_photo!(no_title_photo) }.to raise_error(ArgumentError)
64
+ end
65
+
66
+ it 'should raise error on bad filename method' do
67
+ expect { validate_gallery_photo!(bad_filename_photo) }.to raise_error(::RailsGallery::ConfigurationError)
68
+ end
69
+ end
70
+
71
+ describe 'validate_gallery_photo photo' do
72
+ it 'should return nil error msg' do
73
+ validate_gallery_photo(nil).should == "Photo must be a kind of RGallery::Photo, was: "
74
+ end
75
+
76
+ it 'should return no path error msg' do
77
+ validate_gallery_photo(no_path_photo).should match /Photo must have a path:/
78
+ end
79
+
80
+ it 'should return no title error msg' do
81
+ validate_gallery_photo(no_title_photo).should match /Photo must have a title:/
82
+ end
83
+
84
+ it 'should return bad filename method error' do
85
+ validate_gallery_photo(bad_filename_photo).should match /filename or file_path could not be resolved for:/
86
+ end
87
+ end
88
+
89
+ describe 'gallery_image photo' do
90
+ it 'should raise error on nil' do
91
+ expect { gallery_image(nil) }.to raise_error(ArgumentError)
92
+ end
93
+
94
+ it 'should return error if valid type but nil photo' do
95
+ expect { gallery_image(:galleria, nil) }.to raise_error(ArgumentError)
96
+ end
97
+
98
+ it 'should return error if invalid type and valid photo' do
99
+ expect { gallery_image(:invalid, valid_photo) }.to raise_error(ArgumentError)
100
+ end
101
+
102
+ it "should no raise error for galleria image" do
103
+ expect { gallery_image(:galleria, valid_photo) }.to_not raise_error
104
+ end
105
+
106
+ it "should render the image for galleria image" do
107
+ gallery_image(:galleria, valid_photo).should == "<a href=\"abc\"><img data-description=\"no description\" data-title=\"sdgds\" src=\"abc\"></img></a>"
108
+ end
109
+
110
+ %w{slideshow responsive}.each do |gallery_type|
111
+ it "should not raise error for type: #{gallery_type}" do
112
+ expect { gallery_image(gallery_type, valid_photo) }.to_not raise_error
113
+ end
114
+
115
+ it "should render the image for galleria image" do
116
+ gallery_image(gallery_type, valid_photo).should match /img.*alt=.*src="\w+"/
117
+ end
118
+ end
119
+ end
120
+ end
@@ -0,0 +1,50 @@
1
+ require 'spec_helper'
2
+ require 'rgallery/property_photo'
3
+
4
+ describe RGallery::Photos do
5
+ context 'New empty RGallery::Photos collection' do
6
+ subject { RGallery::Photos.new }
7
+
8
+ its(:pages) { should be_empty }
9
+ its(:pages) { should be_a RGallery::Pages }
10
+
11
+ describe '.page :first' do
12
+ specify { subject.page(:first).should be_empty }
13
+ end
14
+
15
+ describe '.page :remainder' do
16
+ specify { subject.pages.remainder.should be_empty }
17
+ end
18
+ end
19
+
20
+ context 'Photos with one page' do
21
+ subject { RGallery::Photos.new ['0'] }
22
+
23
+ its(:pages) { should_not be_empty }
24
+ its(:pages) { should be_a RGallery::Pages }
25
+
26
+ describe '.page' do
27
+ describe ':first' do
28
+ specify { subject.page(:first).should_not be_empty }
29
+ end
30
+
31
+ describe ':remainder' do
32
+ specify { subject.pages.remainder.should be_empty }
33
+ end
34
+ end
35
+
36
+ describe '.all' do
37
+ specify { subject.all.first.should be_a RGallery::Photo }
38
+
39
+ specify { subject.all.first.id.should == '0' }
40
+
41
+ specify { subject.all.first.path.should == '0.png' }
42
+ end
43
+ end
44
+
45
+ context 'configure with custom Photo class' do
46
+ subject { RGallery::Photos.new ['0'], photo_class: Property::Photo }
47
+
48
+ specify { subject.all.first.should be_a Property::Photo }
49
+ end
50
+ end
@@ -0,0 +1,32 @@
1
+ class Property
2
+ class Photo < RGallery::Photo
3
+ def path
4
+ File.join folder, super
5
+ end
6
+
7
+ # mogrify -path fullpathto/temp2 -resize 60x60% -quality 60 -format jpg *.png
8
+
9
+ # this will take all png files in your current directory (temp),
10
+ # resize to 60% (of largest dimension and keep aspect ratio),
11
+ # set jpg quality to 60 and convert to jpg.
12
+ def thumb
13
+ File.join folder, 'thumbs', file_path
14
+ end
15
+
16
+ def folder
17
+ 'responsive-gallery/images'
18
+ end
19
+
20
+ def title
21
+ 'property title'
22
+ end
23
+
24
+ def alt
25
+ 'property alt'
26
+ end
27
+
28
+ def self.extension
29
+ :jpg
30
+ end
31
+ end
32
+ end