picturama 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.
data/.gitignore ADDED
@@ -0,0 +1,2 @@
1
+ .rvmrc
2
+ config/config.yml
data/Gemfile ADDED
@@ -0,0 +1,7 @@
1
+ source :rubygems
2
+
3
+ gem "mini_magick", "~> 3.6.0"
4
+
5
+ group :test, :development do
6
+ gem 'rspec'
7
+ end
data/Gemfile.lock ADDED
@@ -0,0 +1,22 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ diff-lcs (1.2.4)
5
+ mini_magick (3.6.0)
6
+ subexec (~> 0.2.1)
7
+ rspec (2.13.0)
8
+ rspec-core (~> 2.13.0)
9
+ rspec-expectations (~> 2.13.0)
10
+ rspec-mocks (~> 2.13.0)
11
+ rspec-core (2.13.1)
12
+ rspec-expectations (2.13.0)
13
+ diff-lcs (>= 1.1.3, < 2.0)
14
+ rspec-mocks (2.13.1)
15
+ subexec (0.2.3)
16
+
17
+ PLATFORMS
18
+ ruby
19
+
20
+ DEPENDENCIES
21
+ mini_magick (~> 3.6.0)
22
+ rspec
data/LICENCE ADDED
@@ -0,0 +1,50 @@
1
+ Copyright (c) 2012 David Silveira
2
+
3
+ Permission is hereby granted, free of charge, to any
4
+ person obtaining a copy of this software and associated
5
+ documentation files (the "Software"), to deal in the
6
+ Software without restriction, including without limitation
7
+ the rights to use, copy, modify, merge, publish,
8
+ distribute, sublicense, and/or sell copies of the
9
+ Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice
13
+ shall be included in all copies or substantial portions of
14
+ the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
17
+ KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
18
+ WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
19
+ PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS
20
+ OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
21
+ OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
22
+ OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
23
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
24
+
25
+ ----------------------------------------------------------
26
+
27
+ TRADUCCIÓN NO OFICIAL NI AUTORIZADA PARA SU USO COMO LICENCIA LEGAL
28
+ Copyright (c) 2012 David Silveira
29
+
30
+ Se autoriza por la presente, de forma gratuita, a cualquier
31
+ persona que haya obtenido una copia de este software y
32
+ archivos asociados de documentación (el "Software"), para tratar en el
33
+ Software sin restricción, incluyendo sin ninguna limitación en lo que concierne
34
+ los derechos para usar, copiar, modificar, fusionar, publicar,
35
+ distribuir, sublicenciar, y / o vender copias de este
36
+ Software, y para permitir a las personas a las que se les proporcione el Software para
37
+ hacer lo mismo, sujeto a las siguientes condiciones:
38
+
39
+ El aviso de copyright anterior y este aviso de permiso
40
+ tendrá que ser incluido en todas las copias o partes sustanciales de
41
+ este Software.
42
+
43
+ EL SOFTWARE SE ENTREGA "TAL CUAL", SIN GARANTÍA DE NINGÚN
44
+ TIPO, EXPRESA O IMPLÍCITA, INCLUYENDO PERO SIN LIMITARSE A GARANTÍAS DE
45
+ MERCANTIBILIDAD, CAPACIDAD DE HACER Y DE NO INFRACCIÓN DE COPYRIGHT. EN NINGÚN
46
+ CASO LOS AUTORES O TITULARES DEL COPYRIGHT SERÁN RESPONSABLES DE
47
+ NINGUNA RECLAMACIÓN, DAÑOS U OTRAS RESPONSABILIDADES,
48
+ YA SEA EN UN LITIGIO, AGRAVIO O DE OTRO MODO,
49
+ DERIVADAS DE, OCASIONADAS POR CULPA DE O EN CONEXION CON EL
50
+ SOFTWARE O SU USO U OTRO TIPO DE ACCIONES EN EL SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,43 @@
1
+ # Pictorama
2
+
3
+ Welcome to *Pictorama*. An easy picture gallery based on directory and files
4
+
5
+ ### How to install
6
+
7
+ Just clone the github repo..
8
+
9
+ ```ruby
10
+ git clone git@github.com:aboyon/pictorama.git
11
+ ```
12
+ ### Configure your settings...
13
+
14
+ Copy the config.sample.yml to config.yml (into the config/ file)
15
+
16
+ ```ruby
17
+ cd config/
18
+ cp config.sample.yml config.yml
19
+ ```
20
+ and then proceed to adjust the settings
21
+
22
+ ```yaml
23
+ picturama:
24
+ album_source: '/home/user/Pictures/some_folder/'
25
+ allowed_formats: ['jpg','png','jpeg']
26
+ thumbnail_prefix: thumb_
27
+ thumnail_default_size: "200x200"
28
+ ```
29
+
30
+ generate your thumbnails quickly, by using the rake task created for that
31
+ ```
32
+ rake thumbnail:generate["/some/folder"] #you can specify a different folder...
33
+ ```
34
+ and then you'll get an answer like this:
35
+ ```
36
+ Generating 30 thumbnails for folder /some/folder/ ...
37
+ Size: 200x200
38
+ Thumbnail generated for source 1.JPG. Target destination thumb_1.JPG
39
+ Thumbnail generated for source 2.JPG. Target destination thumb_2.JPG
40
+ ```
41
+ # License
42
+
43
+ Please [see licence file](https://github.com/aboyon/pictorama/blob/master/LICENCE) for further reading.
@@ -0,0 +1,5 @@
1
+ picturama:
2
+ album_source: '[your_path_here]'
3
+ allowed_formats: ['jpg','png','jpeg','JPG']
4
+ thumbnail_prefix: thumb_
5
+ thumnail_default_size: "200x200"
data/i18n/en.yml ADDED
@@ -0,0 +1,11 @@
1
+ picturama:
2
+ title: David Silveira pictures
3
+ album:
4
+ view: View album
5
+ pictures: Pictures here
6
+ size: album size
7
+ picture:
8
+ name: Picture name
9
+ comments: Comments
10
+ size: Size
11
+ Taken: "Taken on #{date}"
data/i18n/es.yml ADDED
@@ -0,0 +1,11 @@
1
+ picturama:
2
+ title: Fotos de David Silveira
3
+ album:
4
+ view: Ver album
5
+ pictures: Imagenes aca
6
+ size: "Tama&ntilde;o del album"
7
+ picture:
8
+ name: Nombre
9
+ comments: Comentarios
10
+ size: "Tama&ntilde;o"
11
+ Taken: "Imagen tomada el #{date}"
data/lib/ext/string.rb ADDED
@@ -0,0 +1,15 @@
1
+ class String
2
+
3
+ def humanize(options)
4
+
5
+ if include?("-")
6
+ split("-").join(" ").downcase
7
+ end
8
+
9
+ if (options == :all_caps)
10
+ capitalize!
11
+ end
12
+
13
+ end
14
+
15
+ end
data/lib/picturama.rb ADDED
@@ -0,0 +1,27 @@
1
+ require 'fileutils'
2
+ require 'picturama/album'
3
+ require 'picturama/picture'
4
+ require 'picturama/version'
5
+
6
+ module Picturama
7
+
8
+ Dir["lib/picturama/*.rb"].each { |file|
9
+ require "#{Dir.pwd}/#{file}"
10
+ }
11
+
12
+ def self.config
13
+ YAML.load_file('config/config.yml')['picturama']
14
+ end
15
+
16
+ def self.albums(album_source)
17
+ albums = []
18
+ Dir["#{album_source}/*"].each { |album|
19
+ if File.directory?(album)
20
+ potential_album = Picturama::Album.new(:folder => album)
21
+ albums.push(album)
22
+ end
23
+ }
24
+ albums
25
+ end
26
+
27
+ end
@@ -0,0 +1,72 @@
1
+ require 'picturama'
2
+
3
+ module Picturama
4
+ class Album
5
+
6
+ def initialize(args)
7
+ @folder = args[:folder]
8
+ @thumbnails = "#{args[:folder]}/thumbnails"
9
+ @resized = "#{args[:folder]}/resized"
10
+ end
11
+
12
+ def pictures(order = true)
13
+ if File.directory?(@folder)
14
+ list = []
15
+ filter = "#{@folder}/*.{#{Picturama::config['allowed_formats'].join(',')}}"
16
+ dir_list = generate_sorting(filter)
17
+ dir_list.each do |picture|
18
+ list.push(Picturama::Picture.new(picture))
19
+ end
20
+ unless order
21
+ list.reverse!
22
+ end
23
+ list
24
+ end
25
+ end
26
+
27
+ def name
28
+ File.basename(@folder).humanize
29
+ end
30
+
31
+ def count_pictures
32
+ pictures.size
33
+ end
34
+
35
+ def has_thumbnails?
36
+ File.directory?(@thumbnails)
37
+ end
38
+
39
+ def has_resized?
40
+ File.directory?(@resized)
41
+ end
42
+
43
+ def has_broken_thumbnails?
44
+ thumbnails_found = Dir["#{@thumbnails}/*.{#{Picturama::config['allowed_formats'].join(',')}}"].size
45
+ !has_thumbnails? || thumbnails_found < count_pictures
46
+ end
47
+
48
+ def init_thumbnails
49
+ unless has_thumbnails?
50
+ FileUtils.mkdir_p "#{@thumbnails}"
51
+ end
52
+ end
53
+
54
+ def init_resized
55
+ unless has_resized?
56
+ FileUtils.mkdir_p "#{@resized}"
57
+ end
58
+ end
59
+
60
+ protected
61
+
62
+ def generate_sorting(filter)
63
+ if (filter == :size)
64
+ dir_list = Dir[filter].sort_by{ |filename| File.size("#{filename}") }
65
+ else
66
+ dir_list = Dir[filter].sort_by{ |filename| File.ctime("#{filename}") }
67
+ end
68
+ dir_list
69
+ end
70
+
71
+ end
72
+ end
@@ -0,0 +1,33 @@
1
+ require 'picturama'
2
+
3
+ module Picturama
4
+ class Picture < File
5
+
6
+ attr_accessor :thumbnail
7
+
8
+ def initialize(args)
9
+ super
10
+ @thumbnail = "#{File.dirname(path)}/thumbnails/#{Picturama::config['thumbnail_prefix']}#{File.basename(path)}"
11
+ @resized = "#{File.dirname(path)}/resized/resized_#{File.basename(path)}"
12
+ @metainfo = "#{File.dirname(path)}/resized/resized_#{File.basename(path)}.info"
13
+ end
14
+
15
+ def info
16
+ File.read(@metainfo) if File.exists?(@metainfo)
17
+ end
18
+
19
+ def has_resized?
20
+ File.exists?(@resized)
21
+ end
22
+
23
+ def has_thumbnail?
24
+ File.exists?(@thumbnail) && File.size(@thumbnail) < size
25
+ end
26
+
27
+ def remove_assoc
28
+ File.delete(@thumbnail) if has_thumbnail?
29
+ File.delete(@resized) if has_resized?
30
+ end
31
+
32
+ end
33
+ end
@@ -0,0 +1,3 @@
1
+ module Picturama
2
+ VERSION = '0.0.1'
3
+ end
data/picturama.gemspec ADDED
@@ -0,0 +1,20 @@
1
+ $:.push File.expand_path("../lib", __FILE__)
2
+ require "picturama/version"
3
+
4
+ Gem::Specification.new do |s|
5
+ s.name = 'picturama'
6
+ s.version = Picturama::VERSION
7
+ s.summary = "An easy picture gallery based on directory and files"
8
+ s.description = "An easy picture gallery based on directory and files"
9
+ s.authors = ["David Silveira"]
10
+ s.email = 'jdsilveira@gmail.com'
11
+ s.files = `git ls-files`.split("\n")
12
+ s.homepage = 'http://davidsilveira.me/picturama'
13
+
14
+ s.add_dependency('mini_magick', '~> 3.6.0')
15
+
16
+ s.add_development_dependency 'rspec'
17
+
18
+ s.require_paths = ["lib"]
19
+
20
+ end
data/rakefile ADDED
@@ -0,0 +1,35 @@
1
+ $:.push File.expand_path("../lib", __FILE__)
2
+
3
+ require 'rubygems'
4
+ require 'fileutils'
5
+ require 'picturama'
6
+ require 'mini_magick'
7
+
8
+ namespace :thumbnail do
9
+
10
+ desc "Generate thumbnail for a given folder or just a single file"
11
+ task :generate, :source do |t, args|
12
+ if File.directory?(args[:source]) || File.exists?(args[:source])
13
+ size = Picturama::config['thumnail_default_size']
14
+ album = Picturama::Album.new(:folder => args[:source])
15
+ puts "Generating #{album.count_pictures} thumbnails for folder #{args[:source]}..."
16
+ puts "Size: #{size}"
17
+ unless album.has_broken_thumbnails?
18
+ puts "WARNING: Seems that this album has all his thumbnails properly generated. There are no broken thumbs."
19
+ end
20
+ album.init_thumbnails
21
+ album.pictures.each do |picture|
22
+ unless picture.has_thumbnail?
23
+ thumb = MiniMagick::Image.open(picture.path)
24
+ thumb.resize "#{size}"
25
+ thumb.format "jpg"
26
+ thumb.write picture.thumbnail
27
+ puts "Thumbnail generated for source #{File.basename(picture.path)}. Target destination #{File.basename(picture.thumbnail)}"
28
+ end
29
+ end
30
+ else
31
+ puts "Error => target destination #{args[:source]} does not exist"
32
+ end
33
+ end
34
+
35
+ end
@@ -0,0 +1,34 @@
1
+ require_relative '../lib/picturama'
2
+
3
+ describe "For a given folder" do
4
+
5
+ before :each do
6
+ @target_exists_folder = "#{Dir.pwd}/spec/pictures"
7
+ @album = Picturama::Album.new(:folder => @target_exists_folder)
8
+ end
9
+
10
+ it "check that Folder module return the list properly" do
11
+ expected_file = "#{@target_exists_folder}/king.jpg"
12
+ @album.pictures.first.class.should == Picturama::Picture.new('.').class
13
+ @album.pictures.first.path.should == expected_file
14
+ end
15
+
16
+ it "check thumnails for images" do
17
+ @album.pictures.first.has_thumbnail?.should be_false
18
+ @album.pictures.first.has_resized?.should be_false
19
+ end
20
+
21
+ it "check info for files" do
22
+ @album.pictures.first.info.nil?.should be_true
23
+ end
24
+
25
+ it "verify how many files are in album" do
26
+ @album.count_pictures.should > 0
27
+ end
28
+
29
+ it "gets all the albums in a given folder" do
30
+ Picturama::albums(File.dirname(@target_exists_folder)).size.should > 0
31
+ end
32
+
33
+
34
+ end
@@ -0,0 +1,26 @@
1
+ require 'mini_magick'
2
+ require_relative '../lib/picturama'
3
+
4
+ describe "For a given picture in a given album" do
5
+
6
+ before :each do
7
+ @target_exists_folder = "#{Dir.pwd}/spec/pictures"
8
+ album = Picturama::Album.new(:folder => @target_exists_folder)
9
+ album.init_thumbnails
10
+ @picture = album.pictures.first
11
+ @thumb_w = 100
12
+ end
13
+
14
+ it "generate thumbnail" do
15
+ @picture.has_thumbnail?.should be_false
16
+ thumb = MiniMagick::Image.open(@picture.path)
17
+ thumb.resize "100x100"
18
+ thumb.format "jpg"
19
+ thumb.write @picture.thumbnail
20
+ @picture.has_thumbnail?.should be_true
21
+ @picture.remove_assoc
22
+ @picture.has_thumbnail?.should be_false
23
+ end
24
+
25
+
26
+ end
Binary file
Binary file
Binary file
Binary file
metadata ADDED
@@ -0,0 +1,97 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: picturama
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - David Silveira
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-06-05 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: mini_magick
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: 3.6.0
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: 3.6.0
30
+ - !ruby/object:Gem::Dependency
31
+ name: rspec
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :development
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ description: An easy picture gallery based on directory and files
47
+ email: jdsilveira@gmail.com
48
+ executables: []
49
+ extensions: []
50
+ extra_rdoc_files: []
51
+ files:
52
+ - .gitignore
53
+ - Gemfile
54
+ - Gemfile.lock
55
+ - LICENCE
56
+ - README.md
57
+ - config/config.sample.yml
58
+ - i18n/en.yml
59
+ - i18n/es.yml
60
+ - lib/ext/string.rb
61
+ - lib/picturama.rb
62
+ - lib/picturama/album.rb
63
+ - lib/picturama/picture.rb
64
+ - lib/picturama/version.rb
65
+ - picturama.gemspec
66
+ - rakefile
67
+ - spec/album_spec.rb
68
+ - spec/picture_spec.rb
69
+ - spec/pictures/king.jpg
70
+ - spec/pictures/quimby.gif
71
+ - spec/pictures/vote-quimby.jpg
72
+ - spec/pictures/vote_quimby.jpg
73
+ homepage: http://davidsilveira.me/picturama
74
+ licenses: []
75
+ post_install_message:
76
+ rdoc_options: []
77
+ require_paths:
78
+ - lib
79
+ required_ruby_version: !ruby/object:Gem::Requirement
80
+ none: false
81
+ requirements:
82
+ - - ! '>='
83
+ - !ruby/object:Gem::Version
84
+ version: '0'
85
+ required_rubygems_version: !ruby/object:Gem::Requirement
86
+ none: false
87
+ requirements:
88
+ - - ! '>='
89
+ - !ruby/object:Gem::Version
90
+ version: '0'
91
+ requirements: []
92
+ rubyforge_project:
93
+ rubygems_version: 1.8.24
94
+ signing_key:
95
+ specification_version: 3
96
+ summary: An easy picture gallery based on directory and files
97
+ test_files: []