bcms_tools 0.0.13 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/Rakefile CHANGED
@@ -11,7 +11,7 @@ begin
11
11
  gem.homepage = "http://github.com/buzzware/bcms_tools"
12
12
  gem.authors = ["buzzware"]
13
13
  gem.add_dependency "buzzcore", ">= 0.3.2"
14
- gem.add_dependency "paperclip", "= 2.1.2"
14
+ gem.add_dependency "paperclip", "= 2.3.1.1"
15
15
  gem.add_dependency "browsercms"
16
16
  gem.add_development_dependency "shoulda"
17
17
  gem.files.include %w(
data/VERSION CHANGED
@@ -1,2 +1,2 @@
1
- 0.0.13
1
+ 0.1.0
2
2
 
data/bcms_tools.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{bcms_tools}
8
- s.version = "0.0.13"
8
+ s.version = "0.1.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["buzzware"]
12
- s.date = %q{2010-04-21}
12
+ s.date = %q{2010-04-30}
13
13
  s.description = %q{Tools for BrowserCms.}
14
14
  s.email = %q{contact@buzzware.com.au}
15
15
  s.extra_rdoc_files = [
@@ -57,18 +57,18 @@ Gem::Specification.new do |s|
57
57
 
58
58
  if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
59
59
  s.add_runtime_dependency(%q<buzzcore>, [">= 0.3.2"])
60
- s.add_runtime_dependency(%q<paperclip>, ["= 2.1.2"])
60
+ s.add_runtime_dependency(%q<paperclip>, ["= 2.3.1.1"])
61
61
  s.add_runtime_dependency(%q<browsercms>, [">= 0"])
62
62
  s.add_development_dependency(%q<shoulda>, [">= 0"])
63
63
  else
64
64
  s.add_dependency(%q<buzzcore>, [">= 0.3.2"])
65
- s.add_dependency(%q<paperclip>, ["= 2.1.2"])
65
+ s.add_dependency(%q<paperclip>, ["= 2.3.1.1"])
66
66
  s.add_dependency(%q<browsercms>, [">= 0"])
67
67
  s.add_dependency(%q<shoulda>, [">= 0"])
68
68
  end
69
69
  else
70
70
  s.add_dependency(%q<buzzcore>, [">= 0.3.2"])
71
- s.add_dependency(%q<paperclip>, ["= 2.1.2"])
71
+ s.add_dependency(%q<paperclip>, ["= 2.3.1.1"])
72
72
  s.add_dependency(%q<browsercms>, [">= 0"])
73
73
  s.add_dependency(%q<shoulda>, [">= 0"])
74
74
  end
@@ -1,8 +1,214 @@
1
+ # BEGIN Paperclip 2.3.1.1 fixes for funky filenames
2
+
3
+ Paperclip.class_eval do
4
+
5
+ def self.run cmd, params = "", expected_outcodes = 0
6
+ command = %Q[#{path_for_command(cmd)} #{params}] #.gsub(/\s+/, " ") # removed unnecessary(?) whitespace eating
7
+ command = "#{command} 2>#{bit_bucket}" if Paperclip.options[:swallow_stderr]
8
+ Paperclip.log(command) if Paperclip.options[:log_command]
9
+ output = `#{command}`
10
+ unless [expected_outcodes].flatten.include?($?.exitstatus)
11
+ raise Paperclip::PaperclipCommandLineError, "Error while running #{cmd}"
12
+ end
13
+ output
14
+ end
15
+
16
+ end
17
+
18
+ Paperclip::Geometry.class_eval do
19
+ def self.from_file file
20
+ file = file.path if file.respond_to? "path"
21
+ geometry = begin
22
+ srcpath = file.gsub('$','\$') # escaped $, other chars may need to be added here
23
+ Paperclip.run("identify", %Q[-format "%wx%h" "#{srcpath}"[0]])
24
+ rescue Paperclip::PaperclipCommandLineError
25
+ ""
26
+ end
27
+ parse(geometry) ||
28
+ raise(Paperclip::NotIdentifiedByImageMagickError.new("#{file} is not recognized by the 'identify' command."))
29
+ end
30
+ end
31
+
32
+ # !!! must also fix /Library/Ruby/Gems/1.8/gems/paperclip-2.3.1.1/lib/paperclip/thumbnail.rb:54
33
+ # and put in lighthouse
34
+ Paperclip::Thumbnail.class_eval do
35
+
36
+ attr_accessor :basename # need access to basename so we can change it away from bizarre file names that cause problems. could auto generate better names here
37
+
38
+ def make
39
+ src = @file
40
+ dst = Tempfile.new([@basename, @format].compact.join("."))
41
+ dst.binmode
42
+
43
+ # The original used the following string construction, then removed whitespace ignoring
44
+ # the fact that the whitespace may be in a path
45
+ # Instead we now construct the string normally.
46
+ #command = <<-end_command
47
+ # #{ source_file_options }
48
+ # "#{ File.expand_path(src.path) }[0]"
49
+ # #{ transformation_command }
50
+ # "#{ File.expand_path(dst.path) }"
51
+ #end_command
52
+ srcpath = File.expand_path(src.path).gsub('$','\$') # escape $, more chars may need to be added
53
+ command = "#{ source_file_options } \"#{ srcpath }[0]\" #{ transformation_command } \"#{ File.expand_path(dst.path) }\""
54
+
55
+ begin
56
+ success = Paperclip.run("convert", command) #.gsub(/\s+/, " "))
57
+ rescue Paperclip::PaperclipCommandLineError
58
+ raise Paperclip::PaperclipError, "There was an error processing the thumbnail for #{@basename}" if @whiny
59
+ end
60
+
61
+ dst
62
+ end
63
+
64
+ end
65
+
66
+ # END Paperclip 2.3.1.1 fixes for funky filenames
67
+
68
+ module Buzzcore
69
+ module ImageUtils
70
+
71
+ module_function # this makes these methods callable as BcmsTools::PageHelper.method
72
+
73
+ def image_file_dimensions(aFilename)
74
+ if geomImage = Paperclip::Geometry.from_file(aFilename)
75
+ return geomImage.width,geomImage.height
76
+ else
77
+ return nil,nil
78
+ end
79
+ end
80
+
81
+ # see http://www.imagemagick.org/script/command-line-processing.php#geometry
82
+ #
83
+ # scale% Height and width both scaled by specified percentage.
84
+ # scale-x%xscale-y% Height and width individually scaled by specified percentages. (Only one % symbol needed.)
85
+ # width Width given, height automagically selected to preserve aspect ratio.
86
+ # xheight Height given, width automagically selected to preserve aspect ratio.
87
+ # widthxheight Maximum values of height and width given, aspect ratio preserved.
88
+ # widthxheight^ Minimum values of width and height given, aspect ratio preserved.
89
+ # widthxheight! Width and height emphatically given, original aspect ratio ignored.
90
+ # widthxheight> Change as per widthxheight but only if an image dimension exceeds a specified dimension.
91
+ # widthxheight< Change dimensions only if both image dimensions exceed specified dimensions.
92
+ # area@ Resize image to have specified area in pixels. Aspect ratio is preserved.
93
+
94
+ THUMBNAIL_NAMINGS = {} # store naming methods eg :iarts => Proc {|aSource,aDestFolder,aBaseUrl,aWidth,aHeight,aOptions| ... } NYI
95
+
96
+ # resizing :
97
+ # to_width,to_height : supply aWidth or aHeight and leave other as nil (width or xheight)
98
+ # no_change : aWidth and aHeight as nil (original WidthxHeight)
99
+ # fit : aOptions[:resize_mode] = :fit, maintain aspect, one axis short (default, no modifier)
100
+ # fit_padded : aOptions[:resize_mode] = :fit_padded, maintain aspect, fill missing area with aOptions[:background_color] (not yet supported)
101
+ # stretch : aOptions[:resize_mode] = :stretch, (! modifier)
102
+ # cropfill : aOptions[:resize_mode] = :cropfill (Paperclip adds # modifier)
103
+
104
+ # naming options :
105
+ # supply a block : return a name given the original parameters (possibly slightly modified)
106
+ # aOptions[:name] is a string : just return this value
107
+ # aOptions[:name] is a Proc : call this with the original parameters (possibly slightly modified)
108
+
109
+ # aOptions :
110
+ # :resize_mode : see above
111
+ # :name : see above
112
+ # :return_details : returns details hash instead of url. :src contains value normally returned
113
+ # returns the resulting url
114
+ def render_thumbnail(
115
+ aSource, # source file
116
+ aDestFolder, # folder to put new file in
117
+ aBaseUrl, # equivalent URL for aDestFolder
118
+ aWidth, # width (nil means auto)
119
+ aHeight, # height (nil means auto)
120
+ aOptions = nil
121
+ )
122
+ src = ''
123
+ aOptions ||= {}
124
+ if aOptions[:return_details]
125
+ details = {
126
+ :aSource => aSource,
127
+ :aDestFolder => aDestFolder,
128
+ :aBaseUrl => aBaseUrl,
129
+ :aWidth => aWidth,
130
+ :aHeight => aHeight,
131
+ :aOptions => aOptions,
132
+ }
133
+ else
134
+ details = {}
135
+ end
136
+ if aSource
137
+ begin
138
+ RAILS_DEFAULT_LOGGER.debug 'render_thumbnail: aSource='+aSource
139
+ aOptions ||= {}
140
+ aOptions[:resize_mode] ||= :fit
141
+
142
+ throw RuntimeError.new("file doesn't exist #{aSource}") unless File.exists? aSource
143
+ extThumb = 'jpg' #MiscUtils.file_extension(File.basename(aSource),false).downcase
144
+ throw RuntimeError.new("could not get file geometry #{aSource}") unless geomImage = Paperclip::Geometry.from_file(aSource)
145
+
146
+ if aWidth || aHeight
147
+ w,h = aWidth,aHeight
148
+ else
149
+ w,h = geomImage.width,geomImage.height # w,h will never be nil,nil
150
+ end
151
+
152
+ resize_spec = "#{w.to_s}#{h ? 'x'+h.to_s : ''}"
153
+ resize_mod = '' # aOptions[:resize_mode]==:fit
154
+ resize_mod = '#' if aOptions[:resize_mode]==:cropfill
155
+ resize_mod = '!' if aOptions[:resize_mode]==:stretch
156
+ resize_char = case aOptions[:resize_mode]
157
+ when :cropfill: 'C'
158
+ when :stretch: 'S'
159
+ else 'F'
160
+ end
161
+
162
+ if block_given?
163
+ nameThumb = yield(aSource,aDestFolder,aBaseUrl,aWidth,aHeight,aOptions)
164
+ elsif aOptions[:name].is_a?(String)
165
+ nameThumb = aOptions[:name]
166
+ elsif aOptions[:name].is_a?(Proc)
167
+ nameThumb = aOptions[:name].call(aSource,aDestFolder,aBaseUrl,aWidth,aHeight,aOptions)
168
+ else
169
+ # default naming
170
+ nameThumb = MiscUtils.file_no_extension(File.basename(aSource),false)
171
+ nameThumb = nameThumb.urlize unless aOptions[:urlize]==false
172
+ nameThumb += '-' unless nameThumb.ends_with?('-')
173
+ nameThumb += resize_spec+resize_char+'.'+extThumb
174
+ end
175
+ pathThumb = File.join(aDestFolder,nameThumb)
176
+
177
+ if !File.exists?(pathThumb)
178
+ throw RuntimeError.new("Failed reading image #{aSource}") unless objThumb = Paperclip::Thumbnail.new(File.new(aSource), :geometry => resize_spec+resize_mod, :format => :jpg)
179
+ objThumb.basename = MiscUtils.file_no_extension(nameThumb)
180
+ throw RuntimeError.new("Failed making thumbnail #{aSource}") unless foThumb = objThumb.make
181
+ FileUtils.cp(foThumb.path,pathThumb)
182
+ FileUtils.chmod(0644,pathThumb)
183
+ FileUtils.rm(foThumb.path)
184
+ end
185
+ src = File.join(aBaseUrl,nameThumb)
186
+ details.merge!({
187
+ :geomImage => geomImage,
188
+ :w => w,
189
+ :h => h,
190
+ :nameThumb => nameThumb,
191
+ :pathThumb => pathThumb,
192
+ :objThumb => objThumb
193
+ }) if aOptions[:return_details]
194
+ rescue Exception => e
195
+ RAILS_DEFAULT_LOGGER.warn "thumberize_img error: #{e.inspect}"
196
+ RAILS_DEFAULT_LOGGER.debug e.backtrace
197
+ src = ''
198
+ end
199
+ end
200
+ details[:src] = src
201
+ return aOptions[:return_details] ? details : src
202
+ end
203
+
204
+ end
205
+ end
206
+
1
207
  module BcmsTools
2
208
  module Thumbnails
3
209
 
4
210
  def self.thumbnail_name_from_attachment(aAttachment,aWidth,aHeight)
5
- extThumb = aAttachment.file_extension
211
+ extThumb = 'jpg' #aAttachment.file_extension
6
212
  size = "#{aWidth.to_s}x#{aHeight.to_s}"
7
213
  result = File.basename(aAttachment.file_location)+'-'
8
214
  result += if aWidth && aHeight
@@ -89,29 +295,33 @@ module BcmsTools
89
295
  urlImage = XmlUtils.quick_att_from_tag(img,'src')
90
296
 
91
297
  att = BcmsTools::Thumbnails::attachment_from_url(urlImage)
92
- pathImage = att && att.full_file_location
93
-
94
- throw RuntimeError.new("file doesn't exist #{pathImage}") unless File.exists? pathImage
95
- throw RuntimeError.new("could not get file geometry #{pathImage}") unless geomImage = Paperclip::Geometry.from_file(pathImage)
96
-
97
- aDestWidth,aDestHeight = BcmsTools::Thumbnails::scale_to_fit(geomImage.width,geomImage.height,aWidth,aHeight).map {|i| i.to_i}
98
-
99
- nameThumb = BcmsTools::Thumbnails::thumbnail_name_from_attachment(att,aWidth,aHeight)
100
-
101
- pathThumb = File.join(APP_CONFIG[:thumbs_cache],nameThumb)
102
-
103
- if !File.exists?(pathThumb)
104
- # generate thumbnail at size to fit container
105
- throw RuntimeError.new("Failed reading image #{pathImage}") unless objThumb = Paperclip::Thumbnail.new(File.new(pathImage), "#{aDestWidth}x#{aDestHeight}")
106
- throw RuntimeError.new("Failed making thumbnail #{pathImage}") unless foThumb = objThumb.make
107
- FileUtils.cp(foThumb.path,pathThumb,:preserve => true)
108
- FileUtils.chmod(0644,pathThumb)
109
- FileUtils.rm(foThumb.path)
110
- #POpen4::shell_out("sudo -u tca chgrp www-data #{pathThumb}; sudo -u tca chmod 644 #{pathThumb}")
111
- end
298
+ return img = framed_attachment_img(att,aWidth,aHeight,img)
299
+
300
+ #src = attachment_max_src(aAttachment,aWidth,aHeight,img)
301
+ #
302
+ #pathImage = att && att.full_file_location
303
+ #
304
+ #throw RuntimeError.new("file doesn't exist #{pathImage}") unless File.exists? pathImage
305
+ #throw RuntimeError.new("could not get file geometry #{pathImage}") unless geomImage = Paperclip::Geometry.from_file(pathImage)
306
+ #
307
+ #aDestWidth,aDestHeight = BcmsTools::Thumbnails::scale_to_fit(geomImage.width,geomImage.height,aWidth,aHeight).map {|i| i.to_i}
308
+ #
309
+ #nameThumb = BcmsTools::Thumbnails::thumbnail_name_from_attachment(att,aWidth,aHeight)
310
+ #
311
+ #pathThumb = File.join(APP_CONFIG[:thumbs_cache],nameThumb)
312
+ #
313
+ #if !File.exists?(pathThumb)
314
+ # # generate thumbnail at size to fit container
315
+ # throw RuntimeError.new("Failed reading image #{pathImage}") unless objThumb = Paperclip::Thumbnail.new(File.new(pathImage), "#{aDestWidth}x#{aDestHeight}")
316
+ # throw RuntimeError.new("Failed making thumbnail #{pathImage}") unless foThumb = objThumb.make
317
+ # FileUtils.cp(foThumb.path,pathThumb,:preserve => true)
318
+ # FileUtils.chmod(0644,pathThumb)
319
+ # FileUtils.rm(foThumb.path)
320
+ # #POpen4::shell_out("sudo -u tca chgrp www-data #{pathThumb}; sudo -u tca chmod 644 #{pathThumb}")
321
+ #end
112
322
 
113
- img = XmlUtils.quick_set_att(img,'src',File.join(APP_CONFIG[:thumbs_url],nameThumb))
114
- return HtmlUtils.fixed_frame_image(img,aWidth,aHeight,aDestWidth,aDestHeight)
323
+ #img = XmlUtils.quick_set_att(img,'src',src) # File.join(APP_CONFIG[:thumbs_url],nameThumb))
324
+ #return HtmlUtils.fixed_frame_image(img,aWidth,aHeight,aDestWidth,aDestHeight)
115
325
  rescue Exception => e
116
326
  RAILS_DEFAULT_LOGGER.warn "thumberize_img error: #{e.inspect}"
117
327
  RAILS_DEFAULT_LOGGER.debug e.backtrace
@@ -121,123 +331,166 @@ module BcmsTools
121
331
 
122
332
  def attachment_cropped_src(aAttachment,aWidth,aHeight)
123
333
  return '' if !aAttachment
124
- begin
125
- pathImage = aAttachment.full_file_location
126
- throw RuntimeError.new("file doesn't exist #{pathImage}") unless File.exists? pathImage
127
- nameThumb = BcmsTools::Thumbnails::thumbnail_name_from_attachment(aAttachment,aWidth,aHeight)
128
- pathThumb = File.join(APP_CONFIG[:thumbs_cache],nameThumb)
129
- if !File.exists?(pathThumb)
130
- # generate thumbnail at size to fit container
131
- throw RuntimeError.new("Failed reading image #{pathImage}") unless objThumb = Paperclip::Thumbnail.new(File.new(pathImage), "#{aWidth}x#{aHeight}#")
132
- throw RuntimeError.new("Failed making thumbnail #{pathImage}") unless foThumb = objThumb.make
133
- FileUtils.cp(foThumb.path,pathThumb)
134
- FileUtils.chmod(0644,pathThumb)
135
- FileUtils.rm(foThumb.path)
136
- end
137
- return File.join(APP_CONFIG[:thumbs_url],nameThumb)
138
- rescue Exception => e
139
- RAILS_DEFAULT_LOGGER.warn "thumberize_img error: #{e.inspect}"
140
- RAILS_DEFAULT_LOGGER.debug e.backtrace
141
- return ''
142
- end
334
+
335
+ Buzzcore::ImageUtils.render_thumbnail(
336
+ aAttachment.full_file_location,
337
+ APP_CONFIG[:thumbs_cache],
338
+ APP_CONFIG[:thumbs_url],
339
+ aWidth,
340
+ aHeight,
341
+ {
342
+ :name => BcmsTools::Thumbnails::thumbnail_name_from_attachment(aAttachment,aWidth,aHeight),
343
+ :resize_mode => :cropfill
344
+ }
345
+ )
346
+
347
+ #begin
348
+ # pathImage = aAttachment.full_file_location
349
+ # throw RuntimeError.new("file doesn't exist #{pathImage}") unless File.exists? pathImage
350
+ # nameThumb = BcmsTools::Thumbnails::thumbnail_name_from_attachment(aAttachment,aWidth,aHeight)
351
+ # pathThumb = File.join(APP_CONFIG[:thumbs_cache],nameThumb)
352
+ # if !File.exists?(pathThumb)
353
+ # # generate thumbnail at size to fit container
354
+ # throw RuntimeError.new("Failed reading image #{pathImage}") unless objThumb = Paperclip::Thumbnail.new(File.new(pathImage), "#{aWidth}x#{aHeight}#")
355
+ # throw RuntimeError.new("Failed making thumbnail #{pathImage}") unless foThumb = objThumb.make
356
+ # FileUtils.cp(foThumb.path,pathThumb)
357
+ # FileUtils.chmod(0644,pathThumb)
358
+ # FileUtils.rm(foThumb.path)
359
+ # end
360
+ # return File.join(APP_CONFIG[:thumbs_url],nameThumb)
361
+ #rescue Exception => e
362
+ # RAILS_DEFAULT_LOGGER.warn "thumberize_img error: #{e.inspect}"
363
+ # RAILS_DEFAULT_LOGGER.debug e.backtrace
364
+ # return ''
365
+ #end
143
366
  end
144
367
 
145
- def image_max_src(aImagePath,aWidth,aHeight)
146
- return '' if !aImagePath
147
- begin
148
- pathImage = aImagePath
149
- throw RuntimeError.new("file doesn't exist #{pathImage}") unless File.exists? pathImage
150
- throw RuntimeError.new("could not get file geometry #{pathImage}") unless geomImage = Paperclip::Geometry.from_file(pathImage)
151
- #nameThumb = BcmsTools::Thumbnails::thumbnail_name_from_attachment(aAttachment,aWidth,aHeight)
152
- #def self.thumbnail_name_from_attachment(aAttachment,aWidth,aHeight)
153
- extThumb = MiscUtils.file_extension(File.basename(aImagePath)).downcase
154
- size = "#{aWidth.to_s}x#{aHeight.to_s}"
155
- nameThumb = MiscUtils.file_no_extension(File.basename(aImagePath))+'-'
156
- nameThumb += if aWidth || aHeight
157
- size+'.'+extThumb
158
- else
159
- '*'
160
- end
161
- #result
162
- #end
163
-
164
-
165
-
368
+ def shellescape(str)
369
+ # An empty argument will be skipped, so return empty quotes.
370
+ return "''" if str.empty?
371
+
372
+ str = str.dup
373
+
374
+ # Process as a single byte sequence because not all shell
375
+ # implementations are multibyte aware.
376
+ str.gsub!(/([^A-Za-z0-9_\-.,:\/@\n])/n, "\\\\\\1")
377
+
378
+ # A LF cannot be escaped with a backslash because a backslash + LF
379
+ # combo is regarded as line continuation and simply ignored.
380
+ str.gsub!(/\n/, "'\n'")
381
+
382
+ return str
383
+ end
384
+
385
+ def shellescape2(aString)
386
+ result = shellescape(aString)
387
+ result.gsub!('\\','\\\\\\')
388
+ end
166
389
 
167
390
 
168
- pathThumb = File.join(APP_CONFIG[:thumbs_cache],nameThumb)
169
-
170
- aDestWidth,aDestHeight = BcmsTools::Thumbnails::scale_to_fit(geomImage.width,geomImage.height,aWidth,aHeight).map {|i| i.to_i}
171
- if !File.exists?(pathThumb)
172
- # generate thumbnail at size to fit container
173
- throw RuntimeError.new("Failed reading image #{pathImage}") unless objThumb = Paperclip::Thumbnail.new(File.new(pathImage), "#{aDestWidth}x#{aDestHeight}")
174
- throw RuntimeError.new("Failed making thumbnail #{pathImage}") unless foThumb = objThumb.make
175
- FileUtils.cp(foThumb.path,pathThumb)
176
- FileUtils.chmod(0644,pathThumb)
177
- FileUtils.rm(foThumb.path)
178
- end
179
- return File.join(APP_CONFIG[:thumbs_url],nameThumb)
180
- rescue Exception => e
181
- RAILS_DEFAULT_LOGGER.warn "thumberize_img error: #{e.inspect}"
182
- RAILS_DEFAULT_LOGGER.debug e.backtrace
183
- return ''
184
- end
185
- end
391
+ def image_max_src(aImagePath,aWidth,aHeight)
392
+ Buzzcore::ImageUtils.render_thumbnail(
393
+ aImagePath,
394
+ APP_CONFIG[:thumbs_cache],
395
+ APP_CONFIG[:thumbs_url],
396
+ aWidth,
397
+ aHeight
398
+ )
399
+ end
400
+ #
401
+ # aSource, # source file
402
+ # aDestFolder, # folder to put new file in
403
+ # aBaseUrl, # equivalent URL for aDestFolder
404
+ # aWidth, # width (nil means auto)
405
+ # aHeight, # height (nil means auto)
406
+ # aOptions = nil
407
+ #)
408
+ #
409
+ #
410
+ #
411
+ # return '' if !aImagePath
412
+ # begin
413
+ # pathImage = aImagePath
414
+ # throw RuntimeError.new("file doesn't exist #{pathImage}") unless File.exists? pathImage
415
+ # throw RuntimeError.new("could not get file geometry #{pathImage}") unless geomImage = Paperclip::Geometry.from_file(shellescape2(pathImage))
416
+ # #nameThumb = BcmsTools::Thumbnails::thumbnail_name_from_attachment(aAttachment,aWidth,aHeight)
417
+ # #def self.thumbnail_name_from_attachment(aAttachment,aWidth,aHeight)
418
+ # extThumb = MiscUtils.file_extension(File.basename(aImagePath)).downcase
419
+ # size = "#{aWidth.to_s}x#{aHeight.to_s}"
420
+ # nameThumb = MiscUtils.file_no_extension(File.basename(aImagePath))+'-'
421
+ # nameThumb += if aWidth || aHeight
422
+ # size+'.'+extThumb
423
+ # else
424
+ # '*'
425
+ # end
426
+ # #result
427
+ # #end
428
+ #
429
+ #
430
+ #
431
+ #
432
+ #
433
+ # pathThumb = File.join(APP_CONFIG[:thumbs_cache],nameThumb)
434
+ #
435
+ # aDestWidth,aDestHeight = BcmsTools::Thumbnails::scale_to_fit(geomImage.width,geomImage.height,aWidth,aHeight).map {|i| i.to_i}
436
+ # if !File.exists?(pathThumb)
437
+ # # generate thumbnail at size to fit container
438
+ # throw RuntimeError.new("Failed reading image #{pathImage}") unless objThumb = Paperclip::Thumbnail.new(File.new(shellescape2(pathImage)), "#{aDestWidth}x#{aDestHeight}")
439
+ # throw RuntimeError.new("Failed making thumbnail #{pathImage}") unless foThumb = objThumb.make
440
+ # FileUtils.cp(foThumb.path,pathThumb)
441
+ # FileUtils.chmod(0644,pathThumb)
442
+ # FileUtils.rm(foThumb.path)
443
+ # end
444
+ # return File.join(APP_CONFIG[:thumbs_url],nameThumb)
445
+ # rescue Exception => e
446
+ # RAILS_DEFAULT_LOGGER.warn "thumberize_img error: #{e.inspect}"
447
+ # RAILS_DEFAULT_LOGGER.debug e.backtrace
448
+ # return ''
449
+ # end
450
+ #end
186
451
 
187
452
 
188
453
  def attachment_max_src(aAttachment,aWidth,aHeight)
189
454
  return '' if !aAttachment
190
- begin
191
- pathImage = aAttachment.full_file_location
192
- throw RuntimeError.new("file doesn't exist #{pathImage}") unless File.exists? pathImage
193
- throw RuntimeError.new("could not get file geometry #{pathImage}") unless geomImage = Paperclip::Geometry.from_file(pathImage)
194
- nameThumb = BcmsTools::Thumbnails::thumbnail_name_from_attachment(aAttachment,aWidth,aHeight)
195
- pathThumb = File.join(APP_CONFIG[:thumbs_cache],nameThumb)
196
-
197
- aDestWidth,aDestHeight = BcmsTools::Thumbnails::scale_to_fit(geomImage.width,geomImage.height,aWidth,aHeight).map {|i| i.to_i}
198
- if !File.exists?(pathThumb)
199
- # generate thumbnail at size to fit container
200
- throw RuntimeError.new("Failed reading image #{pathImage}") unless objThumb = Paperclip::Thumbnail.new(File.new(pathImage), "#{aDestWidth}x#{aDestHeight}")
201
- throw RuntimeError.new("Failed making thumbnail #{pathImage}") unless foThumb = objThumb.make
202
- FileUtils.cp(foThumb.path,pathThumb)
203
- FileUtils.chmod(0644,pathThumb)
204
- FileUtils.rm(foThumb.path)
205
- end
206
- return File.join(APP_CONFIG[:thumbs_url],nameThumb)
207
- rescue Exception => e
208
- RAILS_DEFAULT_LOGGER.warn "thumberize_img error: #{e.inspect}"
209
- RAILS_DEFAULT_LOGGER.debug e.backtrace
210
- return ''
211
- end
455
+ Buzzcore::ImageUtils.render_thumbnail(
456
+ aAttachment.full_file_location,
457
+ APP_CONFIG[:thumbs_cache],
458
+ APP_CONFIG[:thumbs_url],
459
+ aWidth,
460
+ aHeight,
461
+ {
462
+ :name => BcmsTools::Thumbnails::thumbnail_name_from_attachment(aAttachment,aWidth,aHeight)
463
+ }
464
+ )
212
465
  end
213
466
 
214
467
 
215
- def framed_attachment_img(aAttachment,aWidth,aHeight)
468
+ def framed_attachment_img(aAttachment,aWidth,aHeight,aImg=nil)
469
+ return '' if !aAttachment
216
470
  begin
217
- pathImage = aAttachment.full_file_location
218
-
219
- throw RuntimeError.new("file doesn't exist #{pathImage}") unless File.exists? pathImage
220
- throw RuntimeError.new("could not get file geometry #{pathImage}") unless geomImage = Paperclip::Geometry.from_file(pathImage)
221
-
222
- aDestWidth,aDestHeight = BcmsTools::Thumbnails::scale_to_fit(geomImage.width,geomImage.height,aWidth,aHeight).map {|i| i.to_i}
223
-
224
- nameThumb = BcmsTools::Thumbnails::thumbnail_name_from_attachment(aAttachment,aWidth,aHeight)
225
-
226
- pathThumb = File.join(APP_CONFIG[:thumbs_cache],nameThumb)
227
-
228
- if !File.exists?(pathThumb)
229
- throw RuntimeError.new("Failed reading image #{pathImage}") unless objThumb = Paperclip::Thumbnail.new(File.new(pathImage), "#{aDestWidth}x#{aDestHeight}")
230
- throw RuntimeError.new("Failed making thumbnail #{pathImage}") unless foThumb = objThumb.make
231
- FileUtils.cp(foThumb.path,pathThumb)
232
- FileUtils.chmod(0644,pathThumb)
233
- FileUtils.rm(foThumb.path)
234
- end
471
+ details = Buzzcore::ImageUtils.render_thumbnail(
472
+ aAttachment.full_file_location,
473
+ APP_CONFIG[:thumbs_cache],
474
+ APP_CONFIG[:thumbs_url],
475
+ aWidth,
476
+ aHeight,
477
+ {
478
+ :return_details => true,
479
+ :name => BcmsTools::Thumbnails::thumbnail_name_from_attachment(aAttachment,aWidth,aHeight)
480
+ }
481
+ )
235
482
 
236
- img = "<img src=\"#{File.join(APP_CONFIG[:thumbs_url],nameThumb)}\" width=\"#{aDestWidth}\" height=\"#{aDestHeight}\" />"
237
- return HtmlUtils.fixed_frame_image(img,aWidth,aHeight,aDestWidth,aDestHeight)
483
+ if details[:pathThumb]
484
+ dw,dh = Buzzcore::ImageUtils.image_file_dimensions(details[:pathThumb]) # might be able to optimize using details[:objThumb]
485
+ else
486
+ dw,dh = aWidth,aHeight
487
+ end
488
+ aImg ||= "<img width=\"#{dw}\" height=\"#{dh}\" />"
489
+ aImg = XmlUtils.quick_set_att(aImg,'src',details[:src])
490
+ return HtmlUtils.fixed_frame_image(aImg,aWidth,aHeight,dw,dh)
238
491
  rescue Exception => e
239
492
  RAILS_DEFAULT_LOGGER.warn "thumberize_img error: #{e.inspect}"
240
- RAILS_DEFAULT_LOGGER.debug e.backtrace
493
+ RAILS_DEFAULT_LOGGER.debug e.backtrace
241
494
  return ''
242
495
  end
243
496
  end
@@ -89,8 +89,8 @@ Cms::FormBuilder.class_eval do
89
89
  result = StringUtils.split3(result,/<div class="fields file_fields.*?>/) {|h,m,t| XmlUtils.quick_join_att(m,'class','thumbnail_upload',' ') }
90
90
  unless aOptions[:remove_check_box]==false || object.new_record?
91
91
  checkbox = '<div style="display: block; float: right; width: auto; height: auto;">'+remove_check_box()+'</div>'
92
- result = StringUtils.split3(result,/<div.*?>/){|h,m,t|
93
- m+checkbox
92
+ result = StringUtils.split3(result,/<\/div>\Z/){|h,m,t|
93
+ checkbox+'<br clear="all">'+m
94
94
  }
95
95
  end
96
96
  result = StringUtils.split3(result,/<div.*?>/){|h,m,t| m+'<br clear="all" />'}
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bcms_tools
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.13
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - buzzware
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2010-04-21 00:00:00 +08:00
12
+ date: 2010-04-30 00:00:00 +08:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -30,7 +30,7 @@ dependencies:
30
30
  requirements:
31
31
  - - "="
32
32
  - !ruby/object:Gem::Version
33
- version: 2.1.2
33
+ version: 2.3.1.1
34
34
  version:
35
35
  - !ruby/object:Gem::Dependency
36
36
  name: browsercms