BBenezech-papermill 0.3.0 → 0.4.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/VERSION +1 -1
- data/app/controllers/papermill_controller.rb +7 -4
- data/lib/papermill/form_builder.rb +31 -21
- data/lib/papermill/papermill_asset.rb +1 -8
- data/lib/papermill/papermill_helper.rb +10 -1
- data/lib/papermill/papermill_module.rb +38 -36
- data/papermill.gemspec +2 -2
- metadata +3 -4
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.4.0
|
@@ -59,15 +59,18 @@ class PapermillController < ApplicationController
|
|
59
59
|
end
|
60
60
|
|
61
61
|
def create
|
62
|
-
params[:
|
63
|
-
asset_class = params[:
|
62
|
+
params[:assetable_id] = params[:assetable_id].nie
|
63
|
+
asset_class = params[:asset_class].constantize
|
64
|
+
params[:assetable_type] = params[:assetable_type] && params[:assetable_type].to_s.camelize.nie
|
64
65
|
params[:swfupload_file] = params.delete(:Filedata)
|
65
|
-
|
66
|
+
unless params[:gallery]
|
67
|
+
@old_asset = asset_class.find(:first, :conditions => {:assetable_key => params[:assetable_key], :assetable_type => params[:assetable_type], :assetable_id => params[:assetable_id]})
|
68
|
+
end
|
66
69
|
@asset = asset_class.new(params.reject{|key, value| !(PapermillAsset.columns.map(&:name)+["swfupload_file"]).include?(key.to_s)})
|
67
70
|
|
68
71
|
if @asset.save
|
69
72
|
@old_asset.destroy if @old_asset
|
70
|
-
render :partial => "papermill/asset", :object => @asset, :locals => {:
|
73
|
+
render :partial => "papermill/asset", :object => @asset, :locals => {:gallery => params[:gallery], :thumbnail_style => params[:thumbnail_style]}
|
71
74
|
else
|
72
75
|
message = t("not-created", :scope => "papermill")
|
73
76
|
render :text => message, :status => "500"
|
@@ -1,28 +1,34 @@
|
|
1
1
|
class ActionView::Helpers::FormBuilder
|
2
2
|
|
3
|
-
def assets_upload(key = nil,
|
4
|
-
papermill_upload_field key,
|
3
|
+
def assets_upload(key = nil, options = {})
|
4
|
+
papermill_upload_field key, { :thumbnail => false }.update(options)
|
5
5
|
end
|
6
|
-
def asset_upload(key = nil,
|
7
|
-
papermill_upload_field key,
|
6
|
+
def asset_upload(key = nil, options = {})
|
7
|
+
papermill_upload_field key, { :gallery => false, :thumbnail => false }.update(options)
|
8
8
|
end
|
9
|
-
def images_upload(key = nil,
|
10
|
-
papermill_upload_field key,
|
9
|
+
def images_upload(key = nil, options = {})
|
10
|
+
papermill_upload_field key, options
|
11
11
|
end
|
12
|
-
def image_upload(key = nil,
|
13
|
-
papermill_upload_field key,
|
12
|
+
def image_upload(key = nil, options = {})
|
13
|
+
papermill_upload_field key, { :gallery => false }.update(options)
|
14
14
|
end
|
15
15
|
|
16
16
|
private
|
17
|
-
def papermill_upload_field(key,
|
17
|
+
def papermill_upload_field(key, options = {})
|
18
|
+
if key.is_a? Hash
|
19
|
+
options = key
|
20
|
+
key = nil
|
21
|
+
end
|
18
22
|
assetable = @template.instance_variable_get("@#{@object_name}")
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
23
|
+
options = if assetable && (association = (assetable.class.papermill_associations[key] || assetable.class.papermill_associations[:papermill_assets]))
|
24
|
+
association[:options].deep_merge(options)
|
25
|
+
else
|
26
|
+
raise Exception.new("Papermill: can't find #{key.to_s} association for #{assetable.class.to_s}.\n\n##{assetable.class.to_s.underscore}.rb\n#set either a catchall papermill association: \npapermill {your_option_hash}\n#or this specific association: \npapermill :#{key.to_s}, {your_option_hash}")
|
27
|
+
end
|
28
|
+
assetable_id = assetable && (assetable.id || assetable.timestamp) || nil
|
29
|
+
assetable_type = assetable && assetable.class.to_s.underscore || nil
|
30
|
+
id = "papermill_#{assetable_type}_#{assetable_id}_#{key ? key.to_s : 'nil'}"
|
31
|
+
if options[:thumbnail]
|
26
32
|
w = options[:thumbnail][:width] || options[:thumbnail][:height] && options[:thumbnail][:aspect_ratio] && (options[:thumbnail][:height] * options[:thumbnail][:aspect_ratio]).to_i || nil
|
27
33
|
h = options[:thumbnail][:height] || options[:thumbnail][:width] && options[:thumbnail][:aspect_ratio] && (options[:thumbnail][:width] / options[:thumbnail][:aspect_ratio]).to_i || nil
|
28
34
|
options[:thumbnail][:style] ||= (w || h) && "#{w || options[:thumbnail][:max_width]}x#{h || options[:thumbnail][:max_height]}>" || "original"
|
@@ -51,17 +57,21 @@ class ActionView::Helpers::FormBuilder
|
|
51
57
|
end
|
52
58
|
end
|
53
59
|
end
|
54
|
-
create_url = @template.url_for(:controller => "/papermill", :action => "create", :escape => false, :association => method.to_s, :assetable_key => key, :assetable_id => assetable_id, :assetable_type => assetable_type, :gallery => (options[:gallery] != false), :thumbnail_style => (options[:thumbnail] && options[:thumbnail][:style]))
|
55
60
|
html = []
|
56
|
-
|
61
|
+
|
62
|
+
conditions = {:assetable_type => assetable.class.sti_name, :assetable_id => assetable_id}
|
63
|
+
conditions.merge!({:assetable_key => key.to_s}) if key
|
64
|
+
asset_class = options[:class_name] && options[:class_name].to_s.constantize || association && association[:class] || PapermillAsset
|
65
|
+
create_url = @template.url_for(:controller => "/papermill", :action => "create", :escape => false, :asset_class => asset_class.to_s, :assetable_key => key, :assetable_id => assetable_id, :assetable_type => assetable_type, :gallery => (options[:gallery] != false), :thumbnail_style => (options[:thumbnail] && options[:thumbnail][:style]))
|
66
|
+
if assetable && assetable.new_record? && !@timestamped
|
57
67
|
html << self.hidden_field(:timestamp, :value => assetable.timestamp)
|
58
68
|
@timestamped = true
|
59
69
|
end
|
70
|
+
collection = asset_class.find(:all, :conditions => conditions, :order => "position")
|
71
|
+
|
60
72
|
html << %{<div style="height: #{options[:swfupload][:button_height]}px;"><span id="browse_for_#{id}" class="swf_button"></span></div>}
|
61
|
-
conditions = {:assetable_type => assetable.class.sti_name, :assetable_id => assetable_id}
|
62
|
-
conditions.merge!({:assetable_key => key.to_s}) if key
|
63
73
|
html << @template.content_tag(:ul, :id => id, :class => "papermill #{(options[:thumbnail] ? "papermill-thumb-container" : "papermill-asset-container")} #{(options[:gallery] ? "papermill-multiple-items" : "papermill-unique-item")}") {
|
64
|
-
@template.render :partial => "papermill/asset", :collection =>
|
74
|
+
@template.render :partial => "papermill/asset", :collection => collection, :locals => { :thumbnail_style => (options[:thumbnail] && options[:thumbnail][:style]) }
|
65
75
|
}
|
66
76
|
@template.content_for :inline_js do
|
67
77
|
%{
|
@@ -1,8 +1,5 @@
|
|
1
|
-
require "acts_as_list"
|
2
|
-
require "paperclip"
|
3
|
-
|
4
1
|
class PapermillAsset < ActiveRecord::Base
|
5
|
-
acts_as_list :scope => 'assetable_key=\'#{assetable_key.simple_sql_sanitizer}\' AND assetable_id=#{assetable_id} AND assetable_type=\'#{assetable_type}\''
|
2
|
+
acts_as_list :scope => 'assetable_key=\'#{assetable_key.to_s.simple_sql_sanitizer}\' AND assetable_id=#{assetable_id} AND assetable_type=\'#{assetable_type}\''
|
6
3
|
|
7
4
|
belongs_to :assetable, :polymorphic => true
|
8
5
|
before_destroy :destroy_files
|
@@ -50,10 +47,6 @@ class PapermillAsset < ActiveRecord::Base
|
|
50
47
|
content_type && content_type.first == "image" && content_type[1]
|
51
48
|
end
|
52
49
|
|
53
|
-
def interpolated_path(with = {}, up_to = nil)
|
54
|
-
Papermill::papermill_interpolated_path({":id_partition" => self.id_partition}.merge(with), up_to)
|
55
|
-
end
|
56
|
-
|
57
50
|
# before_filter
|
58
51
|
def destroy_files
|
59
52
|
system "rm -rf #{Papermill::papermill_interpolated_path({":id_partition" => self.id_partition}, ':id_partition')}/" if image?
|
@@ -1,5 +1,11 @@
|
|
1
1
|
module PapermillHelper
|
2
2
|
|
3
|
+
# Sets all the javascript needed for papermill.
|
4
|
+
# If you already loaded jQuery and JQueryUI, call papermill_javascript_tag
|
5
|
+
# If you don't use jQuery or use some other library, call papermill_javascript_tag(:with_jquery => "no_conflict")
|
6
|
+
# If you want to rely on this helper to load jQuery/jQueryUI and use it, call papermill_javascript_tag(:with_jquery => true)
|
7
|
+
# If you loaded jQuery and need to load only jQueryUI, call papermill_javascript_tag(:with_jqueryui_only => true)
|
8
|
+
# If you changed the location of papermill.js, you'll need to set :root_folder (defaults to "javascripts")
|
3
9
|
def papermill_javascript_tag(options = {})
|
4
10
|
html = []
|
5
11
|
root_folder = options[:path] || "javascripts"
|
@@ -7,7 +13,8 @@ module PapermillHelper
|
|
7
13
|
html << %{<script src="http://www.google.com/jsapi"></script>}
|
8
14
|
html << %{<script type="text/javascript">\n//<![CDATA[}
|
9
15
|
html << %{google.load("jquery", "1");} if options[:with_jquery]
|
10
|
-
html << %{google.load("jqueryui", "1");} if options[:with_jquery] || options[:
|
16
|
+
html << %{google.load("jqueryui", "1");} if options[:with_jquery] || options[:with_jqueryui_only]
|
17
|
+
html << %{jQuery.noConflict();} if options[:with_jquery] == "no_conflict"
|
11
18
|
html << %{</script>}
|
12
19
|
end
|
13
20
|
html << %{<script src="http://swfupload.googlecode.com/svn/swfupload/tags/swfupload_v2.2.0_core/swfupload.js"></script>}
|
@@ -23,6 +30,8 @@ module PapermillHelper
|
|
23
30
|
html.join("\n")
|
24
31
|
end
|
25
32
|
|
33
|
+
# Sets the css tags needed for papermill.
|
34
|
+
# If you changed the location of papermill.css, you'll need to set :root_folder (defaults to "stylesheets")
|
26
35
|
def papermill_stylesheet_tag(options = {})
|
27
36
|
html = []
|
28
37
|
root_folder = options[:path] || "stylesheets"
|
@@ -84,53 +84,56 @@ module Papermill
|
|
84
84
|
end
|
85
85
|
|
86
86
|
module ClassMethods
|
87
|
-
attr_reader :papermill_options
|
88
87
|
attr_reader :papermill_associations
|
89
88
|
|
90
|
-
#
|
91
|
-
#
|
92
|
-
#
|
93
|
-
#
|
94
|
-
#
|
95
|
-
#
|
96
|
-
#
|
97
|
-
# 2
|
98
|
-
#
|
99
|
-
#
|
100
|
-
#
|
101
|
-
#
|
102
|
-
#
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
89
|
+
# papermill comes in 2 flavors:
|
90
|
+
#
|
91
|
+
# 1. generic declaration =>
|
92
|
+
# declare associations with => papermill {my_option_hash}
|
93
|
+
# create assets with => assets_upload(:my_key, {optional_option_hash})
|
94
|
+
# access assets with => assetable.papermill_assets(:key => :my_key)
|
95
|
+
#
|
96
|
+
# 2. association declaration =>
|
97
|
+
# declare associations with => papermill :my_association, {my_option_hash}
|
98
|
+
# create assets with => assets_upload(my_association, {optional_option_hash})
|
99
|
+
# access assets with => assetable.my_association
|
100
|
+
#
|
101
|
+
# In both case, you can specify a PapermillAsset subclass to use with :class_name => MyPapermillAssetSubclass in the option hash
|
102
|
+
def papermill(assoc_name = :papermill_assets, options = {})
|
103
|
+
if assoc_name.is_a? Hash
|
104
|
+
options = assoc_name
|
105
|
+
assoc_name = :papermill_assets
|
106
|
+
end
|
108
107
|
|
109
|
-
def papermill(assoc = nil, options = {})
|
110
108
|
@papermill_associations ||= {}
|
111
|
-
|
112
|
-
|
109
|
+
begin
|
110
|
+
asset_class = (class_name = options.delete(:class_name)).to_s.constantize || PapermillAsset
|
111
|
+
rescue
|
112
|
+
raise Exception.new("Papermill: can't find class #{class_name.to_s}.\n#{class_name.to_s} should be a subclass of PapermillAsset")
|
113
|
+
end
|
114
|
+
assoc_name ||= asset_class.to_s.pluralize.underscore.to_sym
|
113
115
|
|
114
|
-
@papermill_associations.merge!({
|
115
|
-
@papermill_options = Papermill::PAPERMILL_DEFAULTS.deep_merge(options)
|
116
|
+
@papermill_associations.merge!({assoc_name => {:class => asset_class, :options => Papermill::PAPERMILL_DEFAULTS.deep_merge(options)}})
|
116
117
|
before_destroy :destroy_assets
|
117
118
|
after_create :rebase_assets
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
klass = self.class.papermill_associations[assoc.to_sym][:class]
|
119
|
+
|
120
|
+
define_method assoc_name do |*options|
|
121
|
+
klass = self.class.papermill_associations[assoc_name.to_sym][:class]
|
122
122
|
options = options.first || {}
|
123
123
|
conditions = {
|
124
124
|
:assetable_type => self.class.sti_name,
|
125
|
-
:assetable_id => self.id
|
125
|
+
:assetable_id => self.id
|
126
126
|
}.merge(options.delete(:conditions) || {})
|
127
|
-
|
128
|
-
conditions.merge!({:
|
129
|
-
conditions.merge!({:assetable_key => options
|
127
|
+
conditions.merge!({:type => klass.to_s}) unless assoc_name == PapermillAsset
|
128
|
+
conditions.merge!({:assetable_key => assoc_name.to_s}) if assoc_name != :papermill_assets
|
129
|
+
conditions.merge!({:assetable_key => options.delete(:key)}) if options.has_key?(:key)
|
130
130
|
conditions.merge!({:type => options[:class_name]}) if options[:class_name]
|
131
|
-
|
131
|
+
hash = {
|
132
|
+
:conditions => conditions,
|
133
|
+
:order => options.delete(:order) || "position ASC"
|
134
|
+
}.merge(options)
|
135
|
+
asset_class.find(:all, hash)
|
132
136
|
end
|
133
|
-
|
134
137
|
|
135
138
|
class_eval <<-EOV
|
136
139
|
include Papermill::InstanceMethods
|
@@ -138,7 +141,6 @@ module Papermill
|
|
138
141
|
end
|
139
142
|
|
140
143
|
def inherited(subclass)
|
141
|
-
subclass.instance_variable_set("@papermill_options", @papermill_options)
|
142
144
|
subclass.instance_variable_set("@papermill_associations", @papermill_associations)
|
143
145
|
super
|
144
146
|
end
|
@@ -162,7 +164,7 @@ module Papermill
|
|
162
164
|
PapermillAsset.find(:all, :conditions => {:assetable_id => self.timestamp, :assetable_type => self.class.sti_name}).each do |asset|
|
163
165
|
if asset.created_at < 2.hours.ago
|
164
166
|
asset.destroy
|
165
|
-
else
|
167
|
+
else
|
166
168
|
asset.update_attribute(:assetable_id, self.id)
|
167
169
|
end
|
168
170
|
end
|
data/papermill.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{papermill}
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.4.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Benoit B\303\251n\303\251zech"]
|
12
|
-
s.date = %q{2009-
|
12
|
+
s.date = %q{2009-09-01}
|
13
13
|
s.description = %q{Paperclip wrapper}
|
14
14
|
s.email = %q{benoit.benezech@gmail.com}
|
15
15
|
s.extra_rdoc_files = [
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: BBenezech-papermill
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- "Benoit B\xC3\xA9n\xC3\xA9zech"
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-
|
12
|
+
date: 2009-09-01 00:00:00 -07:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|
@@ -63,7 +63,6 @@ files:
|
|
63
63
|
- uninstall.rb
|
64
64
|
has_rdoc: false
|
65
65
|
homepage: http://github.com/BBenezech/papermill
|
66
|
-
licenses:
|
67
66
|
post_install_message:
|
68
67
|
rdoc_options:
|
69
68
|
- --charset=UTF-8
|
@@ -84,7 +83,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
84
83
|
requirements: []
|
85
84
|
|
86
85
|
rubyforge_project:
|
87
|
-
rubygems_version: 1.
|
86
|
+
rubygems_version: 1.2.0
|
88
87
|
signing_key:
|
89
88
|
specification_version: 3
|
90
89
|
summary: Paperclip wrapper
|