jakewendt-simply_photos 2.0.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.
- data/README.rdoc +62 -0
- data/generators/simply_photos/USAGE +0 -0
- data/generators/simply_photos/simply_photos_generator.rb +125 -0
- data/generators/simply_photos/templates/autotest_simply_photos.rb +2 -0
- data/generators/simply_photos/templates/config/photo.yml +59 -0
- data/generators/simply_photos/templates/controllers/photos_controller.rb +46 -0
- data/generators/simply_photos/templates/functional/photos_controller_test.rb +28 -0
- data/generators/simply_photos/templates/images/full/missing.png +0 -0
- data/generators/simply_photos/templates/images/large/missing.png +0 -0
- data/generators/simply_photos/templates/images/medium/missing.png +0 -0
- data/generators/simply_photos/templates/images/original/missing.png +0 -0
- data/generators/simply_photos/templates/images/small/missing.png +0 -0
- data/generators/simply_photos/templates/javascripts/photo.js +3 -0
- data/generators/simply_photos/templates/migrations/add_attachments_image_to_photo.rb +15 -0
- data/generators/simply_photos/templates/migrations/create_photos.rb +13 -0
- data/generators/simply_photos/templates/models/photo.rb +15 -0
- data/generators/simply_photos/templates/simply_photos.rake +5 -0
- data/generators/simply_photos/templates/stylesheets/photo.css +7 -0
- data/generators/simply_photos/templates/stylesheets/photos.css +4 -0
- data/generators/simply_photos/templates/unit/photo_test.rb +15 -0
- data/generators/simply_photos/templates/views/photos/_form.html.erb +9 -0
- data/generators/simply_photos/templates/views/photos/_photo.html.erb +15 -0
- data/generators/simply_photos/templates/views/photos/edit.html.erb +12 -0
- data/generators/simply_photos/templates/views/photos/index.html.erb +12 -0
- data/generators/simply_photos/templates/views/photos/new.html.erb +11 -0
- data/generators/simply_photos/templates/views/photos/show.html.erb +31 -0
- metadata +92 -0
data/README.rdoc
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
= SimplyPhotos
|
|
2
|
+
|
|
3
|
+
As of version 2.0.0, this gem will be simply a generator rather than an "engine." I'll be making some "major" modifications and the road may get a bit bumpy.
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
== ToDo
|
|
7
|
+
|
|
8
|
+
* Add attachment tests
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
== Required Gem Sources
|
|
12
|
+
|
|
13
|
+
gem sources -a http://rubygems.org
|
|
14
|
+
gem sources -a http://gems.github.com
|
|
15
|
+
|
|
16
|
+
== Required Gems
|
|
17
|
+
|
|
18
|
+
* {jakewendt-ruby_extension}[http://github.com/jakewendt/ruby_extension] - modifications, updates and patches for ruby.
|
|
19
|
+
* rails ~> 2
|
|
20
|
+
* ssl_requirement
|
|
21
|
+
* ryanb-acts-as-list
|
|
22
|
+
* RedCloth
|
|
23
|
+
* paperclip
|
|
24
|
+
* thoughtbot-factory_girl
|
|
25
|
+
* {jakewendt-simply_helpful}[http://github.com/jakewendt/simply_helpful]
|
|
26
|
+
* {jakewendt-calnet_authenticated}[http://github.com/jakewendt/calnet_authenticated]
|
|
27
|
+
* {jakewendt-simply_authorized}[http://github.com/jakewendt/simply_authorized]
|
|
28
|
+
|
|
29
|
+
== Installation (as a plugin/engine)
|
|
30
|
+
|
|
31
|
+
cp config/s3.yml.example config/s3.yml
|
|
32
|
+
# Add your own s3 access keys. Leave 'test' as it is.
|
|
33
|
+
|
|
34
|
+
# No longer needed as the components are just installed in the app.
|
|
35
|
+
# config.gem 'jakewendt-simply_photos',
|
|
36
|
+
# :source => 'http://rubygems.org'
|
|
37
|
+
|
|
38
|
+
script/generate simply_photos
|
|
39
|
+
|
|
40
|
+
== Testing (as an app)
|
|
41
|
+
|
|
42
|
+
rake db:migrate
|
|
43
|
+
rake db:fixtures:load
|
|
44
|
+
rake test
|
|
45
|
+
script/server
|
|
46
|
+
|
|
47
|
+
== Gemified with Jeweler
|
|
48
|
+
|
|
49
|
+
vi Rakefile
|
|
50
|
+
rake version:write
|
|
51
|
+
|
|
52
|
+
rake version:bump:patch
|
|
53
|
+
rake version:bump:minor
|
|
54
|
+
rake version:bump:major
|
|
55
|
+
|
|
56
|
+
rake gemspec
|
|
57
|
+
|
|
58
|
+
rake install
|
|
59
|
+
rake release
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
Copyright (c) 2010 [Jake Wendt], released under the MIT license
|
|
File without changes
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
class SimplyPhotosGenerator < Rails::Generator::Base
|
|
2
|
+
|
|
3
|
+
def manifest
|
|
4
|
+
# See Rails::Generator::Commands::Create
|
|
5
|
+
# rails-2.3.10/lib/rails_generator/commands.rb
|
|
6
|
+
# for code methods for record (Manifest)
|
|
7
|
+
record do |m|
|
|
8
|
+
|
|
9
|
+
# multiple runs will add this route multiple times.
|
|
10
|
+
# How to do this conditionally?
|
|
11
|
+
m.route_resources :photos
|
|
12
|
+
|
|
13
|
+
# m.directory('config/autotest')
|
|
14
|
+
# m.file('autotest_simply_photos.rb', 'config/autotest/simply_photos.rb')
|
|
15
|
+
# m.directory('lib/tasks')
|
|
16
|
+
# m.file('simply_photos.rake', 'lib/tasks/simply_photos.rake')
|
|
17
|
+
|
|
18
|
+
# File.open('Rakefile','a'){|f|
|
|
19
|
+
# f.puts <<-EOF
|
|
20
|
+
## From `script/generate simply_photos` ...
|
|
21
|
+
#require 'simply_photos/test_tasks'
|
|
22
|
+
# EOF
|
|
23
|
+
# }
|
|
24
|
+
#
|
|
25
|
+
# File.open('.autotest','a'){|f|
|
|
26
|
+
# f.puts <<-EOF
|
|
27
|
+
## From `script/generate simply_photos` ...
|
|
28
|
+
#require 'simply_photos/autotest'
|
|
29
|
+
# EOF
|
|
30
|
+
# }
|
|
31
|
+
|
|
32
|
+
%w( create_photos add_attachments_image_to_photo
|
|
33
|
+
).each do |migration|
|
|
34
|
+
m.migration_template "migrations/#{migration}.rb",
|
|
35
|
+
'db/migrate', :migration_file_name => migration
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
dot = File.dirname(__FILE__)
|
|
39
|
+
m.directory('config')
|
|
40
|
+
Dir["#{dot}/templates/config/*yml"].each{|file|
|
|
41
|
+
f = file.split('/').slice(-2,2).join('/')
|
|
42
|
+
m.file(f, "config/#{File.basename(file)}")
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
m.directory('public/javascripts')
|
|
46
|
+
Dir["#{dot}/templates/javascripts/*js"].each{|file|
|
|
47
|
+
f = file.split('/').slice(-2,2).join('/')
|
|
48
|
+
m.file(f, "public/javascripts/#{File.basename(file)}")
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
m.directory('public/stylesheets')
|
|
52
|
+
Dir["#{dot}/templates/stylesheets/*css"].each{|file|
|
|
53
|
+
f = file.split('/').slice(-2,2).join('/')
|
|
54
|
+
m.file(f, "public/stylesheets/#{File.basename(file)}")
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
m.directory('public/images')
|
|
58
|
+
%w( full large medium original small ).each do |style|
|
|
59
|
+
m.directory("public/images/#{style}")
|
|
60
|
+
m.file("images/#{style}/missing.png",
|
|
61
|
+
"public/images/#{style}/missing.png")
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
m.directory('app/models')
|
|
65
|
+
Dir["#{dot}/templates/models/*rb"].each{|file|
|
|
66
|
+
f = file.split('/').slice(-2,2).join('/')
|
|
67
|
+
m.file(f, "app/models/#{File.basename(file)}")
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
m.directory('app/controllers ')
|
|
71
|
+
Dir["#{dot}/templates/controllers/*rb"].each{|file|
|
|
72
|
+
f = file.split('/').slice(-2,2).join('/')
|
|
73
|
+
m.file(f, "app/controllers/#{File.basename(file)}")
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
m.directory('app/views/photos')
|
|
77
|
+
Dir["#{dot}/templates/views/photos/*rb"].each{|file|
|
|
78
|
+
f = file.split('/').slice(-3,3).join('/') # has an extra directory in path
|
|
79
|
+
m.file(f, "app/views/photos/#{File.basename(file)}")
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
m.directory('test/functional')
|
|
83
|
+
Dir["#{dot}/templates/functional/*rb"].each{|file|
|
|
84
|
+
f = file.split('/').slice(-2,2).join('/')
|
|
85
|
+
m.file(f, "test/functional/#{File.basename(file)}")
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
m.directory('test/unit')
|
|
89
|
+
Dir["#{dot}/templates/unit/*rb"].each{|file|
|
|
90
|
+
f = file.split('/').slice(-2,2).join('/')
|
|
91
|
+
m.file(f, "test/unit/#{File.basename(file)}")
|
|
92
|
+
}
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
end
|
|
97
|
+
module Rails::Generator::Commands
|
|
98
|
+
class Create
|
|
99
|
+
def migration_template(relative_source,
|
|
100
|
+
relative_destination, template_options = {})
|
|
101
|
+
migration_directory relative_destination
|
|
102
|
+
migration_file_name = template_options[
|
|
103
|
+
:migration_file_name] || file_name
|
|
104
|
+
if migration_exists?(migration_file_name)
|
|
105
|
+
puts "Another migration is already named #{migration_file_name}: #{existing_migrations(migration_file_name).first}: Skipping"
|
|
106
|
+
else
|
|
107
|
+
template(relative_source, "#{relative_destination}/#{next_migration_string}_#{migration_file_name}.rb", template_options)
|
|
108
|
+
end
|
|
109
|
+
end
|
|
110
|
+
end # Create
|
|
111
|
+
class Base
|
|
112
|
+
protected
|
|
113
|
+
# the loop through migrations happens so fast
|
|
114
|
+
# that they all have the same timestamp which
|
|
115
|
+
# won't work when you actually try to migrate.
|
|
116
|
+
# All the timestamps MUST be unique.
|
|
117
|
+
def next_migration_string(padding = 3)
|
|
118
|
+
@s = (!@s.nil?)? @s.to_i + 1 : if ActiveRecord::Base.timestamped_migrations
|
|
119
|
+
Time.now.utc.strftime("%Y%m%d%H%M%S")
|
|
120
|
+
else
|
|
121
|
+
"%.#{padding}d" % next_migration_number
|
|
122
|
+
end
|
|
123
|
+
end
|
|
124
|
+
end # Base
|
|
125
|
+
end
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
DEFAULTS: &DEFAULTS
|
|
2
|
+
:styles:
|
|
3
|
+
:full: '900>'
|
|
4
|
+
:large: '800>'
|
|
5
|
+
:medium: '600>'
|
|
6
|
+
:small: '150x50>'
|
|
7
|
+
|
|
8
|
+
# > means DO NOT enlarge, only shrink
|
|
9
|
+
|
|
10
|
+
# :attachment is the attachment name NOT the model name
|
|
11
|
+
# for document they are the same, but not photos
|
|
12
|
+
|
|
13
|
+
# why /system/ ???
|
|
14
|
+
<%# common = "/system/:attachment/:id/:style/:filename" %>
|
|
15
|
+
<% common = "photos/:id/:style/:filename" %>
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
#>> Rails.root.to_s.split('/')
|
|
19
|
+
#=> ["", "var", "lib", "tomcat5", "webapps", "clic", "WEB-INF"]
|
|
20
|
+
|
|
21
|
+
#>> Rails.root.to_s.split('/')
|
|
22
|
+
#=> ["", "Users", "jakewendt", "github_repo", "jakewendt", "ucb_ccls_clic"]
|
|
23
|
+
|
|
24
|
+
<%
|
|
25
|
+
app_name = ( defined?(RAILS_APP_NAME) ) ?
|
|
26
|
+
RAILS_APP_NAME :
|
|
27
|
+
Rails.root.to_s.split('/').reject{|x|x == "WEB-INF"}.last
|
|
28
|
+
%>
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
development:
|
|
32
|
+
:url: <%= "/development/#{common}" %>
|
|
33
|
+
:path: <%= "#{Rails.root}/public/development/#{common}" %>
|
|
34
|
+
<<: *DEFAULTS
|
|
35
|
+
|
|
36
|
+
test:
|
|
37
|
+
:url: <%= "/test/#{common}" %>
|
|
38
|
+
:path: <%= "#{Rails.root}/public/test/#{common}" %>
|
|
39
|
+
<<: *DEFAULTS
|
|
40
|
+
|
|
41
|
+
production:
|
|
42
|
+
# Set the storage class to RRS which is cheaper than
|
|
43
|
+
# the default of STANDARD
|
|
44
|
+
:s3_headers:
|
|
45
|
+
x-amz-storage-class: REDUCED_REDUNDANCY
|
|
46
|
+
# public_read or private
|
|
47
|
+
:s3_permissions: :public_read
|
|
48
|
+
:storage: :s3
|
|
49
|
+
:s3_protocol: https
|
|
50
|
+
:s3_credentials: <%="#{Rails.root}/config/s3.yml" %>
|
|
51
|
+
:bucket: <%= app_name %>
|
|
52
|
+
# common has a : as the first char so it needs special care
|
|
53
|
+
# or the string will magically be turned into a symbol
|
|
54
|
+
# which isn't what we want <%#= "\"#{common}\"" %>
|
|
55
|
+
# Not anymore.
|
|
56
|
+
:path: <%= common %>
|
|
57
|
+
# S3 must have a defined path or will generate
|
|
58
|
+
# "Stack level too deep" errors
|
|
59
|
+
<<: *DEFAULTS
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
class PhotosController < ApplicationController
|
|
2
|
+
|
|
3
|
+
before_filter :may_maintain_pages_required
|
|
4
|
+
before_filter :id_required, :only => [ :show, :edit, :update, :destroy ]
|
|
5
|
+
|
|
6
|
+
def index
|
|
7
|
+
@photos = Photo.all
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def new
|
|
11
|
+
@photo = Photo.new
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def create
|
|
15
|
+
@photo = Photo.new(params[:photo])
|
|
16
|
+
@photo.save!
|
|
17
|
+
redirect_to @photo
|
|
18
|
+
rescue ActiveRecord::RecordInvalid, ActiveRecord::RecordNotSaved
|
|
19
|
+
flash.now[:error] = "Error"
|
|
20
|
+
render :action => 'new'
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def update
|
|
24
|
+
@photo.update_attributes!(params[:photo])
|
|
25
|
+
redirect_to @photo
|
|
26
|
+
rescue ActiveRecord::RecordInvalid, ActiveRecord::RecordNotSaved
|
|
27
|
+
flash.now[:error] = "Error"
|
|
28
|
+
render :action => 'edit'
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def destroy
|
|
32
|
+
@photo.destroy
|
|
33
|
+
redirect_to photos_path
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
protected
|
|
37
|
+
|
|
38
|
+
def id_required
|
|
39
|
+
if !params[:id].blank? and Photo.exists?(params[:id])
|
|
40
|
+
@photo = Photo.find(params[:id])
|
|
41
|
+
else
|
|
42
|
+
access_denied("Valid photo id required!", photos_path)
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
class PhotosControllerTest < ActionController::TestCase
|
|
4
|
+
|
|
5
|
+
ASSERT_ACCESS_OPTIONS = {
|
|
6
|
+
:model => 'Photo',
|
|
7
|
+
:actions => [:new,:create,:edit,:update,:destroy,:show,:index],
|
|
8
|
+
:method_for_create => :factory_create,
|
|
9
|
+
:attributes_for_create => :factory_attributes
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
def factory_create(options={})
|
|
13
|
+
Factory(:photo,options)
|
|
14
|
+
end
|
|
15
|
+
def factory_attributes(options={})
|
|
16
|
+
Factory.attributes_for(:photo,options)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
assert_access_with_https
|
|
20
|
+
assert_access_with_login({
|
|
21
|
+
:logins => [:superuser,:administrator,:editor]})
|
|
22
|
+
|
|
23
|
+
assert_no_access_with_http
|
|
24
|
+
assert_no_access_with_login({
|
|
25
|
+
:logins => [:interviewer,:reader,:active_user] })
|
|
26
|
+
assert_no_access_without_login
|
|
27
|
+
|
|
28
|
+
end
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
class AddAttachmentsImageToPhoto < ActiveRecord::Migration
|
|
2
|
+
def self.up
|
|
3
|
+
add_column :photos, :image_file_name, :string
|
|
4
|
+
add_column :photos, :image_content_type, :string
|
|
5
|
+
add_column :photos, :image_file_size, :integer
|
|
6
|
+
add_column :photos, :image_updated_at, :datetime
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def self.down
|
|
10
|
+
remove_column :photos, :image_file_name
|
|
11
|
+
remove_column :photos, :image_content_type
|
|
12
|
+
remove_column :photos, :image_file_size
|
|
13
|
+
remove_column :photos, :image_updated_at
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
class Photo < ActiveRecord::Base
|
|
2
|
+
|
|
3
|
+
validates_presence_of :title
|
|
4
|
+
validates_length_of :title, :minimum => 4
|
|
5
|
+
|
|
6
|
+
has_attached_file :image,
|
|
7
|
+
YAML::load(ERB.new(IO.read(File.expand_path(
|
|
8
|
+
File.join(File.dirname(__FILE__),'../..','config/photo.yml')
|
|
9
|
+
))).result)[Rails.env]
|
|
10
|
+
|
|
11
|
+
def to_s
|
|
12
|
+
title
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
class PhotoTest < ActiveSupport::TestCase
|
|
4
|
+
|
|
5
|
+
assert_should_require(:title)
|
|
6
|
+
|
|
7
|
+
test "should create photo" do
|
|
8
|
+
assert_difference 'Photo.count' do
|
|
9
|
+
object = create_object
|
|
10
|
+
assert !object.new_record?,
|
|
11
|
+
"#{object.errors.full_messages.to_sentence}"
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
<% content_tag_for( :tr, photo, :class => 'row' ) do %>
|
|
2
|
+
<td class='thumb'>
|
|
3
|
+
<%= image_tag(photo.image.url(:small)) %>
|
|
4
|
+
</td>
|
|
5
|
+
<td class='title'>
|
|
6
|
+
<%= link_to photo.title, photo %>
|
|
7
|
+
</td>
|
|
8
|
+
<td class='manage'>
|
|
9
|
+
<%= button_link_to 'Edit', edit_photo_path(photo) %>
|
|
10
|
+
<% destroy_link_to 'Destroy', photo_path(photo) do %>
|
|
11
|
+
<%= hidden_field_tag 'confirm', "Destroy photo '#{photo}'?",
|
|
12
|
+
:id => nil %>
|
|
13
|
+
<% end %>
|
|
14
|
+
</td>
|
|
15
|
+
<% end %><!-- class='photo row' -->
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
<h2>Editing Photo</h2>
|
|
2
|
+
|
|
3
|
+
<% form_for(@photo,
|
|
4
|
+
:html => { :multipart => true }) do |f| %>
|
|
5
|
+
<%= f.error_messages %>
|
|
6
|
+
<%= render 'form',:f => f %>
|
|
7
|
+
<p>
|
|
8
|
+
<%= f.submit( "Update this Photo" )%>
|
|
9
|
+
<%= button_link_to 'Show this Photo', @photo %>
|
|
10
|
+
<%= button_link_to 'Back to Photos', photos_path %>
|
|
11
|
+
</p>
|
|
12
|
+
<% end %>
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
<% javascripts('simply_helpful') %>
|
|
2
|
+
<% stylesheets('photos') %>
|
|
3
|
+
<h2>Photos</h2>
|
|
4
|
+
<% if @photos.length > 0 %>
|
|
5
|
+
<table id='photos'><tbody>
|
|
6
|
+
<%= render :partial => 'photo', :collection => @photos %>
|
|
7
|
+
</tbody></table><!-- id='photos' -->
|
|
8
|
+
<% else %>
|
|
9
|
+
Sorry, but no photos yet.
|
|
10
|
+
<% end %>
|
|
11
|
+
|
|
12
|
+
<p><%= button_link_to 'Create New Photo', new_photo_path %></p>
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
<h2>New Photo</h2>
|
|
2
|
+
|
|
3
|
+
<% form_for(@photo,
|
|
4
|
+
:html => { :multipart => true }) do |f| %>
|
|
5
|
+
<%= f.error_messages %>
|
|
6
|
+
<%= render 'form', :f => f %>
|
|
7
|
+
<p>
|
|
8
|
+
<%= f.submit( "Create Photo" )%>
|
|
9
|
+
<%= button_link_to "Cancel", photos_path %>
|
|
10
|
+
</p>
|
|
11
|
+
<% end %>
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
<% javascripts('photo') %>
|
|
2
|
+
<% stylesheets('photo','base/jquery.ui.all.css') %>
|
|
3
|
+
|
|
4
|
+
<p>
|
|
5
|
+
<b>Title:</b>
|
|
6
|
+
<%=h @photo.title %>
|
|
7
|
+
</p>
|
|
8
|
+
|
|
9
|
+
<div id='images'>
|
|
10
|
+
<ul>
|
|
11
|
+
<% @photo.image.styles.keys.unshift(:original).each do |key| %>
|
|
12
|
+
<li><%= link_to key, "##{key}" %></li>
|
|
13
|
+
<% end %>
|
|
14
|
+
</ul>
|
|
15
|
+
<% @photo.image.styles.keys.unshift(:original).each do |key| %>
|
|
16
|
+
<div id="<%= key %>" class='image_preview'>
|
|
17
|
+
<p><%= link_to( @photo.image.url(key), @photo.image.url(key) ) %></p>
|
|
18
|
+
<%= image_tag @photo.image.url(key) %>
|
|
19
|
+
</div><!-- class='image_preview' -->
|
|
20
|
+
<% end %>
|
|
21
|
+
</div><!-- id='images' -->
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
<p>
|
|
26
|
+
<b>Caption:</b>
|
|
27
|
+
<%=h @photo.caption %>
|
|
28
|
+
</p>
|
|
29
|
+
|
|
30
|
+
<%= button_link_to 'Edit this Photo', edit_photo_path(@photo) %>
|
|
31
|
+
<%= button_link_to 'Back to Photos', photos_path %>
|
metadata
ADDED
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: jakewendt-simply_photos
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
hash: 15
|
|
5
|
+
prerelease:
|
|
6
|
+
segments:
|
|
7
|
+
- 2
|
|
8
|
+
- 0
|
|
9
|
+
- 0
|
|
10
|
+
version: 2.0.0
|
|
11
|
+
platform: ruby
|
|
12
|
+
authors:
|
|
13
|
+
- George 'Jake' Wendt
|
|
14
|
+
autorequire:
|
|
15
|
+
bindir: bin
|
|
16
|
+
cert_chain: []
|
|
17
|
+
|
|
18
|
+
date: 2011-09-30 00:00:00 -07:00
|
|
19
|
+
default_executable:
|
|
20
|
+
dependencies: []
|
|
21
|
+
|
|
22
|
+
description: longer description of your gem
|
|
23
|
+
email: github@jake.otherinbox.com
|
|
24
|
+
executables: []
|
|
25
|
+
|
|
26
|
+
extensions: []
|
|
27
|
+
|
|
28
|
+
extra_rdoc_files:
|
|
29
|
+
- README.rdoc
|
|
30
|
+
files:
|
|
31
|
+
- generators/simply_photos/USAGE
|
|
32
|
+
- generators/simply_photos/simply_photos_generator.rb
|
|
33
|
+
- generators/simply_photos/templates/autotest_simply_photos.rb
|
|
34
|
+
- generators/simply_photos/templates/config/photo.yml
|
|
35
|
+
- generators/simply_photos/templates/controllers/photos_controller.rb
|
|
36
|
+
- generators/simply_photos/templates/functional/photos_controller_test.rb
|
|
37
|
+
- generators/simply_photos/templates/images/full/missing.png
|
|
38
|
+
- generators/simply_photos/templates/images/large/missing.png
|
|
39
|
+
- generators/simply_photos/templates/images/medium/missing.png
|
|
40
|
+
- generators/simply_photos/templates/images/original/missing.png
|
|
41
|
+
- generators/simply_photos/templates/images/small/missing.png
|
|
42
|
+
- generators/simply_photos/templates/javascripts/photo.js
|
|
43
|
+
- generators/simply_photos/templates/migrations/add_attachments_image_to_photo.rb
|
|
44
|
+
- generators/simply_photos/templates/migrations/create_photos.rb
|
|
45
|
+
- generators/simply_photos/templates/models/photo.rb
|
|
46
|
+
- generators/simply_photos/templates/simply_photos.rake
|
|
47
|
+
- generators/simply_photos/templates/stylesheets/photo.css
|
|
48
|
+
- generators/simply_photos/templates/stylesheets/photos.css
|
|
49
|
+
- generators/simply_photos/templates/unit/photo_test.rb
|
|
50
|
+
- generators/simply_photos/templates/views/photos/_form.html.erb
|
|
51
|
+
- generators/simply_photos/templates/views/photos/_photo.html.erb
|
|
52
|
+
- generators/simply_photos/templates/views/photos/edit.html.erb
|
|
53
|
+
- generators/simply_photos/templates/views/photos/index.html.erb
|
|
54
|
+
- generators/simply_photos/templates/views/photos/new.html.erb
|
|
55
|
+
- generators/simply_photos/templates/views/photos/show.html.erb
|
|
56
|
+
- README.rdoc
|
|
57
|
+
has_rdoc: true
|
|
58
|
+
homepage: http://github.com/jakewendt/simply_photos
|
|
59
|
+
licenses: []
|
|
60
|
+
|
|
61
|
+
post_install_message:
|
|
62
|
+
rdoc_options: []
|
|
63
|
+
|
|
64
|
+
require_paths:
|
|
65
|
+
- lib
|
|
66
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
67
|
+
none: false
|
|
68
|
+
requirements:
|
|
69
|
+
- - ">="
|
|
70
|
+
- !ruby/object:Gem::Version
|
|
71
|
+
hash: 3
|
|
72
|
+
segments:
|
|
73
|
+
- 0
|
|
74
|
+
version: "0"
|
|
75
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
76
|
+
none: false
|
|
77
|
+
requirements:
|
|
78
|
+
- - ">="
|
|
79
|
+
- !ruby/object:Gem::Version
|
|
80
|
+
hash: 3
|
|
81
|
+
segments:
|
|
82
|
+
- 0
|
|
83
|
+
version: "0"
|
|
84
|
+
requirements: []
|
|
85
|
+
|
|
86
|
+
rubyforge_project:
|
|
87
|
+
rubygems_version: 1.6.2
|
|
88
|
+
signing_key:
|
|
89
|
+
specification_version: 3
|
|
90
|
+
summary: one-line summary of your gem
|
|
91
|
+
test_files: []
|
|
92
|
+
|