lipsiadmin 5.1.6 → 5.1.7
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/lib/access_control/authentication.rb +20 -20
- data/lib/access_control/base.rb +40 -40
- data/lib/controller/ext.rb +27 -27
- data/lib/controller/lipsiadmin_controller.rb +3 -3
- data/lib/controller/pdf_builder.rb +33 -31
- data/lib/controller/rescue.rb +12 -12
- data/lib/controller/responds_to_parent.rb +5 -5
- data/lib/data_base/attachment.rb +60 -60
- data/lib/data_base/attachment/attach.rb +18 -18
- data/lib/data_base/attachment/geometry.rb +7 -7
- data/lib/data_base/attachment/iostream.rb +1 -1
- data/lib/data_base/attachment/processor.rb +2 -2
- data/lib/data_base/attachment/storage.rb +11 -11
- data/lib/data_base/attachment/thumbnail.rb +2 -2
- data/lib/data_base/attachment_table.rb +27 -27
- data/lib/data_base/translate_attributes.rb +9 -9
- data/lib/data_base/utility_scopes.rb +7 -7
- data/lib/data_base/without_table.rb +10 -10
- data/lib/generator.rb +4 -4
- data/lib/loops.rb +77 -77
- data/lib/loops/base.rb +2 -2
- data/lib/loops/daemonize.rb +5 -5
- data/lib/loops/process_manager.rb +3 -3
- data/lib/loops/worker.rb +1 -1
- data/lib/loops/worker_pool.rb +1 -1
- data/lib/mailer/exception_notifier.rb +5 -5
- data/lib/mailer/pdf_builder.rb +20 -18
- data/lib/utils/literal.rb +6 -6
- data/lib/utils/pdf_builder.rb +10 -10
- data/lib/version.rb +1 -1
- data/lib/view/helpers/backend_helper.rb +123 -123
- data/lib/view/helpers/ext/button.rb +7 -7
- data/lib/view/helpers/ext/column_model.rb +18 -18
- data/lib/view/helpers/ext/component.rb +50 -50
- data/lib/view/helpers/ext/configuration.rb +5 -5
- data/lib/view/helpers/ext/grid.rb +46 -46
- data/lib/view/helpers/ext/store.rb +14 -14
- data/lib/view/helpers/ext/tool_bar.rb +6 -6
- data/lib/view/helpers/ext_helper.rb +21 -21
- data/lib/view/helpers/frontend_helper.rb +5 -5
- data/lib/view/helpers/pdf_helper.rb +7 -7
- data/lib/view/helpers/view_helper.rb +28 -28
- data/lipsiadmin_generators/attachment/attachment_generator.rb +7 -7
- data/lipsiadmin_generators/attachment/templates/controller.rb +13 -13
- data/lipsiadmin_generators/attachment/templates/migration.rb +1 -1
- data/lipsiadmin_generators/backend/backend_generator.rb +9 -9
- data/lipsiadmin_generators/backend/templates/controllers/backend/accounts_controller.rb +10 -10
- data/lipsiadmin_generators/backend/templates/controllers/backend/sessions_controller.rb +2 -2
- data/lipsiadmin_generators/backend/templates/controllers/javascripts_controller.rb +2 -2
- data/lipsiadmin_generators/backend/templates/migrations/create_accounts.rb +5 -5
- data/lipsiadmin_generators/backend/templates/models/account.rb +16 -16
- data/lipsiadmin_generators/backend/templates/models/account_access.rb +11 -11
- data/lipsiadmin_generators/backend/templates/models/notifier.rb +2 -2
- data/lipsiadmin_generators/backend_page/backend_page_generator.rb +22 -22
- data/lipsiadmin_generators/backend_page/templates/controller.rb +9 -9
- data/lipsiadmin_generators/backend_page/templates/functional_test.rb +10 -10
- data/lipsiadmin_generators/frontend/frontend_generator.rb +5 -5
- data/lipsiadmin_generators/frontend/templates/controllers/frontend/sessions_controller.rb +3 -3
- data/lipsiadmin_generators/loops/loops_generator.rb +2 -2
- data/lipsiadmin_generators/pdf/pdf_generator.rb +7 -7
- data/lipsiadmin_generators/state_session/state_session_generator.rb +9 -9
- data/lipsiadmin_generators/state_session/templates/controller.rb +2 -2
- data/lipsiadmin_generators/state_session/templates/migration.rb +2 -2
- data/resources/rdoc/horo.rb +3 -3
- metadata +4 -4
@@ -1,11 +1,11 @@
|
|
1
1
|
module Lipsiadmin#:nodoc:
|
2
2
|
module Controller#:nodoc:
|
3
3
|
# Base Backend Controller that define:
|
4
|
-
#
|
4
|
+
#
|
5
5
|
# layout false
|
6
6
|
# before_filter :backend_login_required
|
7
7
|
# helper Lipsiadmin::View::Helpers::BackendHelper
|
8
|
-
#
|
8
|
+
#
|
9
9
|
class Base < ActionController::Base
|
10
10
|
def self.inherited(subclass)#:nodoc:
|
11
11
|
super
|
@@ -15,4 +15,4 @@ module Lipsiadmin#:nodoc:
|
|
15
15
|
end
|
16
16
|
end
|
17
17
|
end
|
18
|
-
end
|
18
|
+
end
|
@@ -1,49 +1,49 @@
|
|
1
1
|
module Lipsiadmin
|
2
2
|
module Controller
|
3
3
|
# This module convert a string/controller to a pdf through Pd4ml java library (included in this plugin)-
|
4
|
-
#
|
5
|
-
# PD4ML is a powerful PDF generating tool that uses HTML and CSS (Cascading Style Sheets) as page layout
|
6
|
-
# and content definition format. Written in 100% pure Java, it allows users to easily add PDF generation
|
4
|
+
#
|
5
|
+
# PD4ML is a powerful PDF generating tool that uses HTML and CSS (Cascading Style Sheets) as page layout
|
6
|
+
# and content definition format. Written in 100% pure Java, it allows users to easily add PDF generation
|
7
7
|
# functionality to end products.
|
8
|
-
#
|
8
|
+
#
|
9
9
|
# Remember to install jdk ex: yum install java-1.6.0-openjdk-devel.i386
|
10
|
-
#
|
10
|
+
#
|
11
11
|
# For generate a pdf you can simply do
|
12
|
-
#
|
12
|
+
#
|
13
13
|
# script/generate pdf invoice
|
14
|
-
#
|
14
|
+
#
|
15
15
|
# then edit your template /app/views/pdf/invoice.html.haml
|
16
|
-
#
|
16
|
+
#
|
17
17
|
# Then in any of your controllers add some like this:
|
18
|
-
#
|
18
|
+
#
|
19
19
|
# def generate_pdf_invoice
|
20
20
|
# render_pdf :invoice, 'invoice_file.pdf'
|
21
21
|
# end
|
22
|
-
#
|
22
|
+
#
|
23
23
|
# Possible options are:
|
24
|
-
#
|
24
|
+
#
|
25
25
|
# * landescape, default it's false
|
26
26
|
# * send_data, default it's true
|
27
|
-
#
|
28
|
-
# Lipsiadmin include a trial fully functional evaluation version, but if you want buy it,
|
27
|
+
#
|
28
|
+
# Lipsiadmin include a trial fully functional evaluation version, but if you want buy it,
|
29
29
|
# go here: http://pd4ml.com/buy.htm and then put your licensed jar in a directory in your
|
30
30
|
# project then simply calling this:
|
31
|
-
#
|
31
|
+
#
|
32
32
|
# Lipsiadmin::Utils::PdfBuilder.jars_path = "here/is/my/licensed/pd4ml"
|
33
33
|
# Lipsiadmin::Utils::PdfBuilder.view_path = "keep/template/in/other/path"
|
34
|
-
#
|
34
|
+
#
|
35
35
|
# you can use your version without any problem.
|
36
|
-
#
|
36
|
+
#
|
37
37
|
# By default Lipsiadmin will look into your "vendor/pd4ml" and if:
|
38
|
-
#
|
38
|
+
#
|
39
39
|
# * pd4ml.jar
|
40
40
|
# * ss_css2.jar
|
41
|
-
#
|
41
|
+
#
|
42
42
|
# are present will use it
|
43
|
-
#
|
43
|
+
#
|
44
44
|
module PdfBuilder
|
45
45
|
include Lipsiadmin::Utils::HtmlEntities
|
46
|
-
|
46
|
+
|
47
47
|
# # Convert a stream to pdf, the template must be located in app/view/pdf/yourtemplate.pdf.erb
|
48
48
|
def render_pdf(template, filename=nil, options={})
|
49
49
|
|
@@ -51,46 +51,48 @@ module Lipsiadmin
|
|
51
51
|
jars_path = Lipsiadmin::Utils::PdfBuilder.jars_path
|
52
52
|
# path to our templates
|
53
53
|
view_path = Lipsiadmin::Utils::PdfBuilder.view_path
|
54
|
-
|
54
|
+
|
55
55
|
options[:landescape] = options[:landescape] ? "LANDESCAPE" : "PORTRAIT"
|
56
56
|
options[:send_data] ||= !filename.blank?
|
57
|
-
|
57
|
+
|
58
58
|
# try to find erb extension
|
59
59
|
ext = File.exist?("#{view_path}/#{template}.html.erb") ? "erb" : "haml"
|
60
|
-
|
60
|
+
|
61
61
|
# encode the template
|
62
62
|
input = encode_entities(render(:template => "#{view_path}/#{template}.html.#{ext}", :layout => false))
|
63
|
-
|
63
|
+
|
64
64
|
# search for stylesheet links and make their paths absolute.
|
65
65
|
input.gsub!('<link href="/javascripts', '<link href="' + view_path + '/../../../public/javascripts')
|
66
|
-
input.gsub!('<link href="/stylesheets', '<link href="' + view_path + '/../../../public/stylesheets')
|
66
|
+
input.gsub!('<link href="/stylesheets', '<link href="' + view_path + '/../../../public/stylesheets')
|
67
67
|
|
68
68
|
# search for images src, append full-path.
|
69
69
|
input.gsub!('src="/', 'src="' + RAILS_ROOT + '/public/')
|
70
70
|
input.gsub!('url(','url('+RAILS_ROOT+'/public')
|
71
71
|
|
72
72
|
# write our temp file
|
73
|
-
|
73
|
+
tmp = File.join(Rails.root, 'tmp')
|
74
|
+
Dir.mkdir(tmp) unless File.exist?(tmp)
|
75
|
+
t = Tempfile.new("pd4ml.html", tmp)
|
74
76
|
t.binmode
|
75
77
|
t.write(input)
|
76
78
|
t.flush
|
77
|
-
|
79
|
+
|
78
80
|
# build the command
|
79
81
|
class_path = "#{jars_path}/pd4ml.jar:.:#{jars_path}"
|
80
82
|
class_path = "\"#{jars_path}/pd4ml.jar\";\"#{jars_path}\"" if RUBY_PLATFORM =~ /mswin/
|
81
83
|
cmd = "cd #{Lipsiadmin::Utils::PdfBuilder.pd4ruby_path} && java -Xmx512m -Djava.awt.headless=true -cp #{class_path} Pd4Ruby --file \"#{t.path}\" --width 950 --orientation #{options[:landescape]} 2>&1"
|
82
|
-
|
84
|
+
|
83
85
|
# grep the output
|
84
86
|
output = IO.popen(cmd) { |s| s.read }
|
85
87
|
|
86
88
|
# raise error if process returned false (ie: a java error)
|
87
89
|
raise PdfError, "An unknonwn error occurred while generating pdf" if $?.exitstatus == 127
|
88
|
-
|
90
|
+
|
89
91
|
# return raw pdf binary-stream
|
90
92
|
if options[:send_data]
|
91
93
|
pdf_options = { :filename => filename, :type => 'application/pdf' }
|
92
94
|
pdf_options[:disposition] = "inline" if Rails.env == "development"
|
93
|
-
send_data(output, pdf_options)
|
95
|
+
send_data(output, pdf_options)
|
94
96
|
else
|
95
97
|
erase_results
|
96
98
|
output
|
@@ -102,4 +104,4 @@ module Lipsiadmin
|
|
102
104
|
end
|
103
105
|
end
|
104
106
|
end
|
105
|
-
end
|
107
|
+
end
|
data/lib/controller/rescue.rb
CHANGED
@@ -1,22 +1,22 @@
|
|
1
1
|
module Lipsiadmin
|
2
2
|
module Controller
|
3
3
|
# This module are raised when an exception fire up in controllers.
|
4
|
-
#
|
4
|
+
#
|
5
5
|
# Now you can personalize exception and simplify the layout using templates in:
|
6
|
-
#
|
6
|
+
#
|
7
7
|
# app/views/exception
|
8
|
-
#
|
9
|
-
# when an exception is raised it try to send an email, and for send an email
|
8
|
+
#
|
9
|
+
# when an exception is raised it try to send an email, and for send an email
|
10
10
|
# you need to configure in enviroment or in an initializer some like this:
|
11
11
|
#
|
12
12
|
# Examples:
|
13
|
-
#
|
13
|
+
#
|
14
14
|
# Lipsiadmin::Mailer::ExceptionNotifier.sender_address = %("Exception Notifier" <server1@lipsiasoft.com>)
|
15
15
|
# Lipsiadmin::Mailer::ExceptionNotifier.recipients_addresses = %(info@lipsiasoft.com)
|
16
16
|
# Lipsiadmin::Mailer::ExceptionNotifier.email_prefix = "[Your Project]"
|
17
|
-
#
|
17
|
+
#
|
18
18
|
module Rescue
|
19
|
-
|
19
|
+
|
20
20
|
def self.included(base)#:nodoc:
|
21
21
|
base.class_eval do
|
22
22
|
alias_method_chain :rescue_action_in_public, :notifier
|
@@ -35,7 +35,7 @@ module Lipsiadmin
|
|
35
35
|
# to a target iframe, so we need to respond to the parent.
|
36
36
|
if request.post?
|
37
37
|
responds_to_parent do
|
38
|
-
render :update do |page|
|
38
|
+
render :update do |page|
|
39
39
|
page.unmask
|
40
40
|
page.ext_alert I18n.t("lipsiadmin.exceptions.#{status}.title"), I18n.t("lipsiadmin.exceptions.#{status}.description")
|
41
41
|
end
|
@@ -43,8 +43,8 @@ module Lipsiadmin
|
|
43
43
|
else
|
44
44
|
# We can't use status, because Backend.app.load don't permit load 500, 404 pages
|
45
45
|
format.html { render :template => "/exceptions/#{status}" }
|
46
|
-
format.js do
|
47
|
-
render :update do |page|
|
46
|
+
format.js do
|
47
|
+
render :update do |page|
|
48
48
|
page.unmask
|
49
49
|
page.ext_alert I18n.t("lipsiadmin.exceptions.#{status}.title"), I18n.t("lipsiadmin.exceptions.#{status}.description")
|
50
50
|
end
|
@@ -65,8 +65,8 @@ module Lipsiadmin
|
|
65
65
|
Lipsiadmin::Mailer::ExceptionNotifier.deliver_exception(exception, self, request)
|
66
66
|
end
|
67
67
|
end
|
68
|
-
|
68
|
+
|
69
69
|
end
|
70
70
|
|
71
71
|
end
|
72
|
-
end
|
72
|
+
end
|
@@ -1,14 +1,14 @@
|
|
1
1
|
module Lipsiadmin
|
2
2
|
module Controller
|
3
3
|
# Executes the response body as JavaScript in the context of the parent window.
|
4
|
-
#
|
4
|
+
#
|
5
5
|
# Use this method of you are posting a form to a hidden IFRAME or if you would like
|
6
6
|
# to use IFRAME base RPC.
|
7
7
|
module RespondsToParent
|
8
8
|
# Render an action to parent
|
9
9
|
def render_to_parent(*options_for_render)
|
10
10
|
responds_to_parent do
|
11
|
-
# I don't use page.update for prevent dobule rendering
|
11
|
+
# I don't use page.update for prevent dobule rendering
|
12
12
|
# and so we can save rendering time!
|
13
13
|
source = render_to_string(*options_for_render)
|
14
14
|
render :update do |page|
|
@@ -41,7 +41,7 @@ module Lipsiadmin
|
|
41
41
|
gsub('</script>','</scr"+"ipt>')
|
42
42
|
# Clear out the previous render to prevent double render
|
43
43
|
erase_results
|
44
|
-
# Eval in parent scope and replace document location of this frame
|
44
|
+
# Eval in parent scope and replace document location of this frame
|
45
45
|
# so back button doesn't replay action on targeted forms
|
46
46
|
# loc = document.location to be set after parent is updated for IE
|
47
47
|
# with(window.parent) - pull in variables from parent window
|
@@ -49,9 +49,9 @@ module Lipsiadmin
|
|
49
49
|
# window.eval - legal eval for Opera
|
50
50
|
render :text => "<html><body><script type='text/javascript' charset='utf-8'>
|
51
51
|
var loc = document.location;
|
52
|
-
with(window.parent) { setTimeout(function() { window.eval('#{script}'); loc.replace('about:blank'); }, 1) }
|
52
|
+
with(window.parent) { setTimeout(function() { window.eval('#{script}'); loc.replace('about:blank'); }, 1) }
|
53
53
|
</script></body></html>"
|
54
54
|
end
|
55
55
|
end
|
56
56
|
end
|
57
|
-
end
|
57
|
+
end
|
data/lib/data_base/attachment.rb
CHANGED
@@ -24,35 +24,35 @@ module Lipsiadmin
|
|
24
24
|
end
|
25
25
|
|
26
26
|
module ClassMethods
|
27
|
-
|
27
|
+
|
28
28
|
# Attach a single file/image to your model.
|
29
|
-
#
|
29
|
+
#
|
30
30
|
# Examples:
|
31
|
-
#
|
31
|
+
#
|
32
32
|
# has_one_attachment :image
|
33
33
|
# attachment_styles_for :image, :normal, "128x128!"
|
34
34
|
# validates_attachment_presence_for :image
|
35
35
|
# validates_attachment_size_for :image, :greater_than => 10.megabytes
|
36
36
|
# validates_attachment_content_type_for :image, "image/png"
|
37
|
-
#
|
37
|
+
#
|
38
38
|
# Then in your form (with multipart) you can simply add:
|
39
|
-
#
|
39
|
+
#
|
40
40
|
# =file_field_tag "yourmodel[image_attributes][file]"
|
41
|
-
#
|
41
|
+
#
|
42
42
|
# or
|
43
|
-
#
|
43
|
+
#
|
44
44
|
# -fields_for "yourmodel[image_attributes][file]", @yourmodel.build_image do |image|
|
45
45
|
# =image.file_field :file
|
46
|
-
#
|
46
|
+
#
|
47
47
|
def has_one_attachment(name, options={})
|
48
48
|
options[:as] ||= :attacher
|
49
49
|
options[:class_name] ||= "Attachment"
|
50
|
-
|
50
|
+
|
51
51
|
# We need to check if the attachment model allow multiple attachments
|
52
52
|
multi_attachments = options[:class_name].constantize.column_names.include?("attacher_name")
|
53
|
-
|
53
|
+
|
54
54
|
options[:conditions] = "attacher_name = '#{name}'" if multi_attachments
|
55
|
-
|
55
|
+
|
56
56
|
has_one name, options
|
57
57
|
before_save "before_save_for_#{name}"
|
58
58
|
attr_accessor "#{name}_attributes"
|
@@ -76,14 +76,14 @@ module Lipsiadmin
|
|
76
76
|
define_method "before_save_for_#{name}" do
|
77
77
|
attributes = send("#{name}_attributes")
|
78
78
|
attributes ||= {}
|
79
|
-
|
79
|
+
|
80
80
|
return if attributes[:file].blank?
|
81
|
-
|
81
|
+
|
82
82
|
attributes.merge!(:attachment_definitions => self.class.attachment_definitions[name])
|
83
|
-
|
83
|
+
|
84
84
|
# We need to add the new attacher_name
|
85
85
|
attributes.merge!(:attacher_name => name.to_s) if multi_attachments
|
86
|
-
|
86
|
+
|
87
87
|
if file_column = self.send(name)
|
88
88
|
file_column.update_attributes(attributes)
|
89
89
|
else
|
@@ -94,27 +94,27 @@ module Lipsiadmin
|
|
94
94
|
end
|
95
95
|
|
96
96
|
# Attach a many files/images to your model.
|
97
|
-
#
|
97
|
+
#
|
98
98
|
# Examples:
|
99
|
-
#
|
99
|
+
#
|
100
100
|
# has_one_attachment :images
|
101
101
|
# attachment_styles_for :images, :normal, "128x128!"
|
102
102
|
# validates_attachment_presence_for :images
|
103
103
|
# validates_attachment_size_for :images, :greater_than => 10.megabytes
|
104
104
|
# validates_attachment_content_type_for :images, "image/png"
|
105
|
-
#
|
105
|
+
#
|
106
106
|
# Then in your form (with multipart) you can simply add:
|
107
|
-
#
|
107
|
+
#
|
108
108
|
# -fields_for "yourmodel[images_attributes][]", @yourmodel.images.build do |image|
|
109
109
|
# =image.file_field :file
|
110
|
-
#
|
110
|
+
#
|
111
111
|
def has_many_attachments(name, options = {})
|
112
112
|
options[:as] ||= :attacher
|
113
113
|
options[:class_name] ||= "Attachment"
|
114
|
-
|
114
|
+
|
115
115
|
# We need to check if the attachment model allow multiple attachments
|
116
116
|
multi_attachments = options[:class_name].constantize.column_names.include?("attacher_name")
|
117
|
-
|
117
|
+
|
118
118
|
options[:conditions] = "attacher_name = '#{name}'" if multi_attachments
|
119
119
|
|
120
120
|
has_many name, options
|
@@ -156,12 +156,12 @@ module Lipsiadmin
|
|
156
156
|
|
157
157
|
end
|
158
158
|
end
|
159
|
-
|
159
|
+
|
160
160
|
# The full URL of where the attachment is publically accessible. This can just
|
161
161
|
# as easily point to a directory served directly through Apache as it can to an action
|
162
162
|
# that can control permissions. You can specify the full domain and path, but usually
|
163
|
-
# just an absolute path is sufficient. The leading slash *must* be included manually for
|
164
|
-
# absolute paths. The default value is
|
163
|
+
# just an absolute path is sufficient. The leading slash *must* be included manually for
|
164
|
+
# absolute paths. The default value is
|
165
165
|
# "/uploads/:id_:attachment_:style_:basename.:extension". See
|
166
166
|
# Lipsiadmin::Attachment::Attach#interpolate for more information on variable interpolaton.
|
167
167
|
# :url => "/:class/:attachment/:id/:style_:basename.:extension"
|
@@ -169,37 +169,37 @@ module Lipsiadmin
|
|
169
169
|
def attachment_url_for(name, url)
|
170
170
|
attachment_definitions[name][:url] = url
|
171
171
|
end
|
172
|
-
|
173
|
-
# The URL that will be returned if there is no attachment assigned.
|
174
|
-
# This field is interpolated just as the url is. The default value is
|
172
|
+
|
173
|
+
# The URL that will be returned if there is no attachment assigned.
|
174
|
+
# This field is interpolated just as the url is. The default value is
|
175
175
|
# "/images/backend/no-image.png"
|
176
176
|
# has_one_attached_file :avatar
|
177
177
|
# attachment_default_url :avatar, "/images/backend/no-image.png"
|
178
|
-
# User.new.avatar.url(:small) # => "/images/backend/no-image.png"
|
178
|
+
# User.new.avatar.url(:small) # => "/images/backend/no-image.png"
|
179
179
|
def attachment_default_url_for(name, url)
|
180
180
|
attachment_definitions[name][:default_url] = url
|
181
181
|
end
|
182
|
-
|
183
|
-
# The path were the attachment are stored.
|
182
|
+
|
183
|
+
# The path were the attachment are stored.
|
184
184
|
# The default value is
|
185
185
|
# :rails_root/public/uploads/:id_:attachment_:style_:basename.:extension
|
186
186
|
# This value must be in consistency with <tt>url</tt>
|
187
187
|
def attachment_path_for(name, path)
|
188
188
|
attachment_definitions[name][:path] = path
|
189
189
|
end
|
190
|
-
|
191
|
-
# A hash of thumbnail styles and their geometries. You can find more about
|
192
|
-
# geometry strings at the ImageMagick website
|
190
|
+
|
191
|
+
# A hash of thumbnail styles and their geometries. You can find more about
|
192
|
+
# geometry strings at the ImageMagick website
|
193
193
|
# (http://www.imagemagick.org/script/command-line-options.php#resize). Attachment
|
194
|
-
# also adds the "#" option (e.g. "50x50#"), which will resize the image to fit maximally
|
195
|
-
# inside the dimensions and then crop the rest off (weighted at the center). The
|
194
|
+
# also adds the "#" option (e.g. "50x50#"), which will resize the image to fit maximally
|
195
|
+
# inside the dimensions and then crop the rest off (weighted at the center). The
|
196
196
|
# default value is to generate no thumbnails.
|
197
197
|
def attachment_styles_for(name, style_name, styles)
|
198
198
|
attachment_definitions[name][:styles] ||= {}
|
199
199
|
attachment_definitions[name][:styles].merge!(style_name => styles)
|
200
200
|
end
|
201
|
-
|
202
|
-
# The thumbnail style that will be used by default URLs.
|
201
|
+
|
202
|
+
# The thumbnail style that will be used by default URLs.
|
203
203
|
# Defaults to +original+.
|
204
204
|
# attachment_styles :avatar, :normal, "100x100#"
|
205
205
|
# attachment_default_style :normal
|
@@ -209,7 +209,7 @@ module Lipsiadmin
|
|
209
209
|
end
|
210
210
|
|
211
211
|
# Will raise an error if Attachment cannot post_process an uploaded file due
|
212
|
-
# to a command line error. This will override the global setting for this attachment.
|
212
|
+
# to a command line error. This will override the global setting for this attachment.
|
213
213
|
# Defaults to false.
|
214
214
|
def attachment_whiny_for(name, whiny_thumbnails)
|
215
215
|
attachment_definitions[name][:whiny_thumbnails] = whiny_thumbnails
|
@@ -222,7 +222,7 @@ module Lipsiadmin
|
|
222
222
|
def attachment_storage_for(name, storage)
|
223
223
|
attachment_definitions[name][:storage] = storage
|
224
224
|
end
|
225
|
-
|
225
|
+
|
226
226
|
# When creating thumbnails, use this free-form options
|
227
227
|
# field to pass in various convert command options. Typical options are "-strip" to
|
228
228
|
# remove all Exif data from the image (save space for thumbnails and avatars) or
|
@@ -241,13 +241,13 @@ module Lipsiadmin
|
|
241
241
|
attachment_definitions[name][:convert_options] ||= {}
|
242
242
|
attachment_definitions[name][:convert_options].merge!(convert_name => convert_options)
|
243
243
|
end
|
244
|
-
|
244
|
+
|
245
245
|
# When processing, if the spawn plugin is installed, processing can be done in
|
246
246
|
# a background fork or thread if desired.
|
247
247
|
def attachment_background_for(name, background)
|
248
248
|
attachment_definitions[name][:background] = background
|
249
249
|
end
|
250
|
-
|
250
|
+
|
251
251
|
# Attachment supports an extendible selection of post-processors. When you define
|
252
252
|
# a set of styles for an attachment, by default it is expected that those
|
253
253
|
# "styles" are actually "thumbnails". However, you can do more than just
|
@@ -256,37 +256,37 @@ module Lipsiadmin
|
|
256
256
|
# your Rails app's lib/attachment_processors directory is automatically loaded by
|
257
257
|
# Attachment, allowing you to easily define custom processors. You can specify a
|
258
258
|
# processor with the :processors option to has_attached_file:
|
259
|
-
#
|
259
|
+
#
|
260
260
|
# attachment_styles :avatar, :text, { :quality => :better }
|
261
261
|
# attachment_processors :avatar, :ocr
|
262
|
-
#
|
262
|
+
#
|
263
263
|
# This would load the hypothetical class Lipsiadmin::Ocr, which would have the
|
264
264
|
# hash "{ :quality => :better }" passed to it along with the uploaded file. For
|
265
265
|
# more information about defining processors, see Lipsiadmin::Attachment::Processor.
|
266
|
-
#
|
266
|
+
#
|
267
267
|
# The default processor is Lipsiadmin::Attachment::Thumbnail. For backwards compatability
|
268
268
|
# reasons, you can pass a single geometry string or an array containing a
|
269
269
|
# geometry and a format, which the file will be converted to, like so:
|
270
|
-
#
|
270
|
+
#
|
271
271
|
# attachment_styles :avatar, :thumb, ["32x32#", :png]
|
272
|
-
#
|
272
|
+
#
|
273
273
|
# This will convert the "thumb" style to a 32x32 square in png format, regardless
|
274
274
|
# of what was uploaded. If the format is not specified, it is kept the same (i.e.
|
275
275
|
# jpgs will remain jpgs).
|
276
|
-
#
|
276
|
+
#
|
277
277
|
# Multiple processors can be specified, and they will be invoked in the order
|
278
278
|
# they are defined in the :processors array. Each successive processor will
|
279
279
|
# be given the result of the previous processor's execution. All processors will
|
280
280
|
# receive the same parameters, which are what you define in the :styles hash.
|
281
281
|
# For example, assuming we had this definition:
|
282
|
-
#
|
282
|
+
#
|
283
283
|
# attachment_styles :avatar, :text, { :quality => :better }
|
284
284
|
# attachment_processors :avatar, :rotator
|
285
285
|
# attachment_processors :avatar, :ocr
|
286
|
-
#
|
287
|
-
# then both the :rotator processor and the :ocr processor would receive the
|
286
|
+
#
|
287
|
+
# then both the :rotator processor and the :ocr processor would receive the
|
288
288
|
# options "{ :quality => :better }". This parameter may not mean anything to one
|
289
|
-
# or more or the processors, and they are free to ignore it.
|
289
|
+
# or more or the processors, and they are free to ignore it.
|
290
290
|
def attachment_processors_for(name, processor_name, processors)
|
291
291
|
attachment_definitions[name][:processors] ||= {}
|
292
292
|
attachment_definitions[name][:processors].merge!(processor_name => processor_processors)
|
@@ -333,12 +333,12 @@ module Lipsiadmin
|
|
333
333
|
end
|
334
334
|
|
335
335
|
# Places ActiveRecord-style validations on the content type of the file
|
336
|
-
# assigned. The possible options are:
|
337
|
-
# * +content_type+: Allowed content types. Can be a single content type
|
338
|
-
# or an array. Each type can be a String or a Regexp. It should be
|
339
|
-
# noted that Internet Explorer upload files with content_types that you
|
340
|
-
# may not expect. For example, JPEG images are given image/pjpeg and
|
341
|
-
# PNGs are image/x-png, so keep that in mind when determining how you
|
336
|
+
# assigned. The possible options are:
|
337
|
+
# * +content_type+: Allowed content types. Can be a single content type
|
338
|
+
# or an array. Each type can be a String or a Regexp. It should be
|
339
|
+
# noted that Internet Explorer upload files with content_types that you
|
340
|
+
# may not expect. For example, JPEG images are given image/pjpeg and
|
341
|
+
# PNGs are image/x-png, so keep that in mind when determining how you
|
342
342
|
# match. Allows all by default.
|
343
343
|
# * +message+: The message to display when the uploaded file has an invalid
|
344
344
|
# content type.
|
@@ -360,7 +360,7 @@ module Lipsiadmin
|
|
360
360
|
end
|
361
361
|
end
|
362
362
|
end
|
363
|
-
|
363
|
+
|
364
364
|
# Returns the attachment definitions defined by each call to
|
365
365
|
# has_attached_file.
|
366
366
|
def attachment_definitions
|
@@ -370,6 +370,6 @@ module Lipsiadmin
|
|
370
370
|
end
|
371
371
|
|
372
372
|
end
|
373
|
-
|
373
|
+
|
374
374
|
end
|
375
375
|
end
|