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.
Files changed (65) hide show
  1. data/lib/access_control/authentication.rb +20 -20
  2. data/lib/access_control/base.rb +40 -40
  3. data/lib/controller/ext.rb +27 -27
  4. data/lib/controller/lipsiadmin_controller.rb +3 -3
  5. data/lib/controller/pdf_builder.rb +33 -31
  6. data/lib/controller/rescue.rb +12 -12
  7. data/lib/controller/responds_to_parent.rb +5 -5
  8. data/lib/data_base/attachment.rb +60 -60
  9. data/lib/data_base/attachment/attach.rb +18 -18
  10. data/lib/data_base/attachment/geometry.rb +7 -7
  11. data/lib/data_base/attachment/iostream.rb +1 -1
  12. data/lib/data_base/attachment/processor.rb +2 -2
  13. data/lib/data_base/attachment/storage.rb +11 -11
  14. data/lib/data_base/attachment/thumbnail.rb +2 -2
  15. data/lib/data_base/attachment_table.rb +27 -27
  16. data/lib/data_base/translate_attributes.rb +9 -9
  17. data/lib/data_base/utility_scopes.rb +7 -7
  18. data/lib/data_base/without_table.rb +10 -10
  19. data/lib/generator.rb +4 -4
  20. data/lib/loops.rb +77 -77
  21. data/lib/loops/base.rb +2 -2
  22. data/lib/loops/daemonize.rb +5 -5
  23. data/lib/loops/process_manager.rb +3 -3
  24. data/lib/loops/worker.rb +1 -1
  25. data/lib/loops/worker_pool.rb +1 -1
  26. data/lib/mailer/exception_notifier.rb +5 -5
  27. data/lib/mailer/pdf_builder.rb +20 -18
  28. data/lib/utils/literal.rb +6 -6
  29. data/lib/utils/pdf_builder.rb +10 -10
  30. data/lib/version.rb +1 -1
  31. data/lib/view/helpers/backend_helper.rb +123 -123
  32. data/lib/view/helpers/ext/button.rb +7 -7
  33. data/lib/view/helpers/ext/column_model.rb +18 -18
  34. data/lib/view/helpers/ext/component.rb +50 -50
  35. data/lib/view/helpers/ext/configuration.rb +5 -5
  36. data/lib/view/helpers/ext/grid.rb +46 -46
  37. data/lib/view/helpers/ext/store.rb +14 -14
  38. data/lib/view/helpers/ext/tool_bar.rb +6 -6
  39. data/lib/view/helpers/ext_helper.rb +21 -21
  40. data/lib/view/helpers/frontend_helper.rb +5 -5
  41. data/lib/view/helpers/pdf_helper.rb +7 -7
  42. data/lib/view/helpers/view_helper.rb +28 -28
  43. data/lipsiadmin_generators/attachment/attachment_generator.rb +7 -7
  44. data/lipsiadmin_generators/attachment/templates/controller.rb +13 -13
  45. data/lipsiadmin_generators/attachment/templates/migration.rb +1 -1
  46. data/lipsiadmin_generators/backend/backend_generator.rb +9 -9
  47. data/lipsiadmin_generators/backend/templates/controllers/backend/accounts_controller.rb +10 -10
  48. data/lipsiadmin_generators/backend/templates/controllers/backend/sessions_controller.rb +2 -2
  49. data/lipsiadmin_generators/backend/templates/controllers/javascripts_controller.rb +2 -2
  50. data/lipsiadmin_generators/backend/templates/migrations/create_accounts.rb +5 -5
  51. data/lipsiadmin_generators/backend/templates/models/account.rb +16 -16
  52. data/lipsiadmin_generators/backend/templates/models/account_access.rb +11 -11
  53. data/lipsiadmin_generators/backend/templates/models/notifier.rb +2 -2
  54. data/lipsiadmin_generators/backend_page/backend_page_generator.rb +22 -22
  55. data/lipsiadmin_generators/backend_page/templates/controller.rb +9 -9
  56. data/lipsiadmin_generators/backend_page/templates/functional_test.rb +10 -10
  57. data/lipsiadmin_generators/frontend/frontend_generator.rb +5 -5
  58. data/lipsiadmin_generators/frontend/templates/controllers/frontend/sessions_controller.rb +3 -3
  59. data/lipsiadmin_generators/loops/loops_generator.rb +2 -2
  60. data/lipsiadmin_generators/pdf/pdf_generator.rb +7 -7
  61. data/lipsiadmin_generators/state_session/state_session_generator.rb +9 -9
  62. data/lipsiadmin_generators/state_session/templates/controller.rb +2 -2
  63. data/lipsiadmin_generators/state_session/templates/migration.rb +2 -2
  64. data/resources/rdoc/horo.rb +3 -3
  65. metadata +4 -4
@@ -12,10 +12,10 @@ module Lipsiadmin
12
12
  # Attachment defines an attachment as any file, though it makes special considerations
13
13
  # for image files. You can declare that a model has an attached file with the
14
14
  # +has_one_attachment+ method:
15
- #
15
+ #
16
16
  # From your console:
17
17
  # script/generate attachment
18
- #
18
+ #
19
19
  # Then in any model you can do:
20
20
  #
21
21
  # class User < ActiveRecord::Base
@@ -29,15 +29,15 @@ module Lipsiadmin
29
29
  #
30
30
  # See the <tt>Lipsiadmin::DataBase::Attachment::ClassMethods</tt> documentation for more details.
31
31
  module Attachment
32
-
32
+
33
33
  class << self
34
34
  # Provides configurability to Attachment. There are a number of options available, such as:
35
- # * whiny_thumbnails: Will raise an error if Attachment cannot process thumbnails of
35
+ # * whiny_thumbnails: Will raise an error if Attachment cannot process thumbnails of
36
36
  # an uploaded image. Defaults to false.
37
37
  # * log: Logs progress to the Rails log. Uses ActiveRecord's logger, so honors
38
38
  # log levels, etc. Defaults to true.
39
39
  # * command_path: Defines the path at which to find the command line
40
- # programs if they are not visible to Rails the system's search path. Defaults to
40
+ # programs if they are not visible to Rails the system's search path. Defaults to
41
41
  # nil, which uses the first executable found in the user's search path.
42
42
  # * image_magick_path: Deprecated alias of command_path.
43
43
  def options
@@ -53,15 +53,15 @@ module Lipsiadmin
53
53
  name = name.to_s.camelize
54
54
  processor = Lipsiadmin::Attachment.const_get(name)
55
55
  unless processor.ancestors.include?(Lipsiadmin::Attachment::Processor)
56
- raise AttachmentError.new("Processor #{name} was not found")
56
+ raise AttachmentError.new("Processor #{name} was not found")
57
57
  end
58
58
  processor
59
59
  end
60
-
60
+
61
61
  def interpolates(key, &block) #:nodoc:
62
62
  Lipsiadmin::Attachment.interpolations[key] = block
63
63
  end
64
-
64
+
65
65
  # The run method takes a command to execute and a string of parameters
66
66
  # that get passed to it. The command is prefixed with the :command_path
67
67
  # option from Attachment.options. If you have many commands to run and
@@ -80,7 +80,7 @@ module Lipsiadmin
80
80
  end
81
81
  output
82
82
  end
83
-
83
+
84
84
  def path_for_command(command)#:nodoc:
85
85
  path = [options[:command_path] || options[:image_magick_path], command].compact
86
86
  File.join(*path)
@@ -90,7 +90,7 @@ module Lipsiadmin
90
90
  File.exists?("/dev/null") ? "/dev/null" : "NUL"
91
91
  end
92
92
  end
93
-
93
+
94
94
  class AttachmentError < StandardError #:nodoc:
95
95
  end
96
96
 
@@ -99,7 +99,7 @@ module Lipsiadmin
99
99
 
100
100
  class NotIdentifiedByImageMagickError < AttachmentError #:nodoc:
101
101
  end
102
-
102
+
103
103
  # The Attachment class manages the files for a given attachment. It saves
104
104
  # when the model saves, deletes when the model is destroyed, and processes
105
105
  # the file upon assignment.
@@ -148,7 +148,7 @@ module Lipsiadmin
148
148
 
149
149
  normalize_style_definition
150
150
  initialize_storage
151
-
151
+
152
152
  log("Attachment on #{instance.class} initialized.")
153
153
  end
154
154
 
@@ -156,7 +156,7 @@ module Lipsiadmin
156
156
  # errors, assigns attributes, processes the file, and runs validations. It
157
157
  # also queues up the previous file for deletion, to be flushed away on
158
158
  # #save of its host. In addition to form uploads, you can also assign
159
- # another Attachment attachment:
159
+ # another Attachment attachment:
160
160
  # new_user.avatar = old_user.avatar
161
161
  # If the file that is assigned is not valid, the processing (i.e.
162
162
  # thumbnailing, etc) will NOT be run.
@@ -193,7 +193,7 @@ module Lipsiadmin
193
193
 
194
194
  solidify_style_definitions
195
195
  post_process if valid?
196
-
196
+
197
197
  # Reset the file size if the original file was reprocessed.
198
198
  instance_write(:file_size, @queued_for_write[:original].size.to_i)
199
199
  ensure
@@ -282,7 +282,7 @@ module Lipsiadmin
282
282
  instance_read(:content_type)
283
283
  end
284
284
 
285
- # Returns the last modified time of the file as originally assigned, and
285
+ # Returns the last modified time of the file as originally assigned, and
286
286
  # lives in the <attachment>_updated_at attribute of the model.
287
287
  def updated_at
288
288
  time = instance_read(:updated_at)
@@ -304,7 +304,7 @@ module Lipsiadmin
304
304
  :basename => lambda do |attachment,style|
305
305
  attachment.original_filename.gsub(/#{File.extname(attachment.original_filename)}$/, "")
306
306
  end,
307
- :extension => lambda do |attachment,style|
307
+ :extension => lambda do |attachment,style|
308
308
  ((style = attachment.styles[style]) && style[:format]) ||
309
309
  File.extname(attachment.original_filename).gsub(/^\.+/, "")
310
310
  end,
@@ -415,7 +415,7 @@ module Lipsiadmin
415
415
  def solidify_style_definitions #:nodoc:
416
416
  @styles.each do |name, args|
417
417
  if @styles[name][:geometry].respond_to?(:call)
418
- @styles[name][:geometry] = @styles[name][:geometry].call(instance)
418
+ @styles[name][:geometry] = @styles[name][:geometry].call(instance)
419
419
  end
420
420
  end
421
421
  end
@@ -508,4 +508,4 @@ module Lipsiadmin
508
508
 
509
509
  end
510
510
  end
511
- end
511
+ end
@@ -76,12 +76,12 @@ module Lipsiadmin
76
76
  to_s
77
77
  end
78
78
 
79
- # Returns the scaling and cropping geometries (in string-based ImageMagick format)
80
- # neccessary to transform this Geometry into the Geometry given. If crop is true,
81
- # then it is assumed the destination Geometry will be the exact final resolution.
82
- # In this case, the source Geometry is scaled so that an image containing the
83
- # destination Geometry would be completely filled by the source image, and any
84
- # overhanging image would be cropped. Useful for square thumbnail images. The cropping
79
+ # Returns the scaling and cropping geometries (in string-based ImageMagick format)
80
+ # neccessary to transform this Geometry into the Geometry given. If crop is true,
81
+ # then it is assumed the destination Geometry will be the exact final resolution.
82
+ # In this case, the source Geometry is scaled so that an image containing the
83
+ # destination Geometry would be completely filled by the source image, and any
84
+ # overhanging image would be cropped. Useful for square thumbnail images. The cropping
85
85
  # is weighted at the center of the Geometry.
86
86
  def transformation_to(dst, crop = false)
87
87
  if crop
@@ -114,4 +114,4 @@ module Lipsiadmin
114
114
  end
115
115
  end
116
116
  end
117
- end
117
+ end
@@ -27,7 +27,7 @@ module Lipsiadmin
27
27
  while self.read(in_blocks_of, buffer) do
28
28
  dstio.write(buffer)
29
29
  end
30
- dstio.rewind
30
+ dstio.rewind
31
31
  dstio
32
32
  end
33
33
  end
@@ -7,7 +7,7 @@ module Lipsiadmin
7
7
  #
8
8
  # Processors are required to be defined inside the Attachment module and
9
9
  # are also required to be a subclass of Attachment::Processor. There are
10
- # only two methods you must implement to properly be a subclass:
10
+ # only two methods you must implement to properly be a subclass:
11
11
  # #initialize and #make. Initialize's arguments are the file that will
12
12
  # be operated on (which is an instance of File), and a hash of options
13
13
  # that were defined in has_attached_file's style hash.
@@ -46,4 +46,4 @@ module Lipsiadmin
46
46
  end
47
47
  end
48
48
  end
49
- end
49
+ end
@@ -9,11 +9,11 @@ module Lipsiadmin
9
9
  # * +path+: The location of the repository of attachments on disk. This can (and, in
10
10
  # almost all cases, should) be coordinated with the value of the +url+ option to
11
11
  # allow files to be saved into a place where Apache can serve them without
12
- # hitting your app. Defaults to
12
+ # hitting your app. Defaults to
13
13
  # ":rails_root/public/:attachment/:id/:style/:basename.:extension"
14
- # By default this places the files in the app's public directory which can be served
15
- # directly. If you are using capistrano for deployment, a good idea would be to
16
- # make a symlink to the capistrano-created system directory from inside your app's
14
+ # By default this places the files in the app's public directory which can be served
15
+ # directly. If you are using capistrano for deployment, a good idea would be to
16
+ # make a symlink to the capistrano-created system directory from inside your app's
17
17
  # public directory.
18
18
  # See Attachment::Attachment#interpolate for more information on variable interpolaton.
19
19
  # :path => "/var/app/attachments/:class/:id/:style/:basename.:extension"
@@ -83,25 +83,25 @@ module Lipsiadmin
83
83
  # database.yml file, so different environments can use different accounts:
84
84
  # development:
85
85
  # access_key_id: 123...
86
- # secret_access_key: 123...
86
+ # secret_access_key: 123...
87
87
  # test:
88
88
  # access_key_id: abc...
89
- # secret_access_key: abc...
89
+ # secret_access_key: abc...
90
90
  # production:
91
91
  # access_key_id: 456...
92
- # secret_access_key: 456...
92
+ # secret_access_key: 456...
93
93
  # This is not required, however, and the file may simply look like this:
94
94
  # access_key_id: 456...
95
- # secret_access_key: 456...
95
+ # secret_access_key: 456...
96
96
  # In which case, those access keys will be used in all environments. You can also
97
97
  # put your bucket name in this file, instead of adding it to the code directly.
98
- # This is useful when you want the same account but a different bucket for
98
+ # This is useful when you want the same account but a different bucket for
99
99
  # development versus production.
100
100
  # * +s3_permissions+: This is a String that should be one of the "canned" access
101
101
  # policies that S3 provides (more information can be found here:
102
102
  # http://docs.amazonwebservices.com/AmazonS3/2006-03-01/RESTAccessPolicy.html#RESTCannedAccessPolicies)
103
103
  # The default for Attachment is "public-read".
104
- # * +s3_protocol+: The protocol for the URLs generated to your S3 assets. Can be either
104
+ # * +s3_protocol+: The protocol for the URLs generated to your S3 assets. Can be either
105
105
  # 'http' or 'https'. Defaults to 'http' when your :s3_permissions are 'public-read' (the
106
106
  # default), and 'https' when your :s3_permissions are anything else.
107
107
  # * +s3_headers+: A hash of headers such as {'Expires' => 1.year.from_now.httpdate}
@@ -217,4 +217,4 @@ module Lipsiadmin
217
217
  end
218
218
  end
219
219
  end
220
- end
220
+ end
@@ -10,7 +10,7 @@ module Lipsiadmin
10
10
  # which is a "WxH"-style string. +format+ will be inferred from the +file+
11
11
  # unless specified. Thumbnail creation will raise no errors unless
12
12
  # +whiny+ is true (which it is, by default. If +convert_options+ is
13
- # set, the options will be appended to the convert command upon image conversion
13
+ # set, the options will be appended to the convert command upon image conversion
14
14
  def initialize(file, options = {})
15
15
  super
16
16
  geometry = options[:geometry]
@@ -69,4 +69,4 @@ module Lipsiadmin
69
69
  end
70
70
  end
71
71
  end
72
- end
72
+ end
@@ -1,16 +1,16 @@
1
1
  module Lipsiadmin
2
2
  module DataBase
3
- # This is the table that handle the attachments.
3
+ # This is the table that handle the attachments.
4
4
  # You can define some global info like:
5
- #
5
+ #
6
6
  # attachment_styles :thumb, "128x128"
7
- #
8
- # In this way all models that use <tt>has_one_attachment</tt> or
7
+ #
8
+ # In this way all models that use <tt>has_one_attachment</tt> or
9
9
  # <tt>has_many_attachments</tt> handle a default style called *thumb*
10
- #
11
- # Remember that any model that use <tt>has_one_attachment</tt> or
10
+ #
11
+ # Remember that any model that use <tt>has_one_attachment</tt> or
12
12
  # <tt>has_many_attachments</tt> can override/add styles/validations etc...
13
- #
13
+ #
14
14
  class AttachmentTable < ActiveRecord::Base
15
15
  def self.inherited(subclass)#:nodoc:
16
16
  super
@@ -19,58 +19,58 @@ module Lipsiadmin
19
19
  subclass.send(:include, Lipsiadmin::DataBase::UtilityScopes)
20
20
  subclass.extend(ClassMethods)
21
21
  end
22
-
22
+
23
23
  set_table_name "attachments"
24
-
24
+
25
25
  belongs_to :attacher, :polymorphic => true
26
26
  after_save :save_attached_files
27
27
  before_destroy :destroy_attached_files
28
28
  define_callbacks :before_post_process, :after_post_process
29
29
  define_callbacks :"before_attached_post_process", :"after_attached_post_process"
30
-
30
+
31
31
  #validates_presence_of :filename
32
-
32
+
33
33
  # Returns the url of the attachment, optionally you can pass the style like url(:thumb)
34
34
  def url(style=nil)
35
35
  file.url(style)
36
36
  end
37
-
37
+
38
38
  # Returns a <tt>Lipsiadmin::Attachment::Attach</tt> instance
39
39
  def file
40
40
  @_file ||= Lipsiadmin::Attachment::Attach.new(:attached, self, attachment_definitions)
41
41
  end
42
-
42
+
43
43
  # Assign a <tt>Lipsiadmin::Attachment::Attach</tt> instance to the current file
44
44
  def file=(tempfile)
45
45
  file.assign(tempfile)
46
46
  end
47
-
47
+
48
48
  # Returns true if the file exist
49
49
  def file?
50
50
  file.exist?
51
51
  end
52
-
52
+
53
53
  def attachment_definitions=(options)#:nodoc:
54
54
  attachment_definitions.merge!(options.symbolize_keys)
55
55
  end
56
-
56
+
57
57
  # This is the custom instance attachment_definition
58
58
  def attachment_definitions#:nodoc:
59
59
  @instance_attachment_definitions ||= self.class.attachment_definitions[self.class.name].clone
60
60
  return @instance_attachment_definitions
61
61
  end
62
-
62
+
63
63
  validates_each(:file) do |record, attr, value|
64
64
  attachment = record.file
65
65
  attachment.send(:flush_errors) unless attachment.valid?
66
66
  end
67
-
67
+
68
68
  # Perform <tt>file</tt>.save
69
69
  def save_attached_files
70
70
  logger.info("[Attachment] Saving attachments.")
71
71
  file.save
72
72
  end
73
-
73
+
74
74
  # Perform <tt>file</tt>.destroy
75
75
  def destroy_attached_files
76
76
  logger.info("[Attachment] Deleting attachments.")
@@ -78,7 +78,7 @@ module Lipsiadmin
78
78
  file.flush_deletes
79
79
  end
80
80
  end
81
-
81
+
82
82
  module ClassMethods#:nodoc:
83
83
 
84
84
  def attachment_url(url)
@@ -88,15 +88,15 @@ module Lipsiadmin
88
88
  def attachment_default_url(url)
89
89
  attachment_default_url_for(self.name, url)
90
90
  end
91
-
91
+
92
92
  def attachment_path(path)
93
93
  attachment_path_for(self.name, path)
94
94
  end
95
-
95
+
96
96
  def attachment_styles(name, styles)
97
97
  attachment_styles_for(self.name, name, styles)
98
98
  end
99
-
99
+
100
100
  def attachment_default_style(default_style)
101
101
  attachment_default_style_for(self.name, default_style)
102
102
  end
@@ -108,15 +108,15 @@ module Lipsiadmin
108
108
  def attachment_storage(storage)
109
109
  attachment_storage_for(self.name, storage)
110
110
  end
111
-
111
+
112
112
  def attachment_convert_options(name, convert_options)
113
113
  attachment_convert_options_for(self.name, name, convert_options)
114
114
  end
115
-
115
+
116
116
  def attachment_background(background)
117
117
  attachment_background_for(self.name, background)
118
118
  end
119
-
119
+
120
120
  def attachment_processors(processors)
121
121
  attachment_processors_for(self.name, processors)
122
122
  end
@@ -137,6 +137,6 @@ module Lipsiadmin
137
137
  validates_attachment_content_type_for(self.name, options)
138
138
  end
139
139
  end
140
-
140
+
141
141
  end
142
142
  end
@@ -1,23 +1,23 @@
1
1
  module Lipsiadmin
2
2
  module DataBase
3
- # With this method we can translate define and automatically translate columns for
3
+ # With this method we can translate define and automatically translate columns for
4
4
  # the current rails locale.
5
- #
5
+ #
6
6
  # Defining some columns like these:
7
- #
7
+ #
8
8
  # m.col :string, :name_it, :name_en, :name_cz
9
9
  # m.col :text, :description_it, :description_en, :description_cz
10
- #
10
+ #
11
11
  # we can call
12
- #
12
+ #
13
13
  # myinstance.name
14
- #
14
+ #
15
15
  # or
16
- #
16
+ #
17
17
  # puts myinstance.description
18
- #
18
+ #
19
19
  # Lipsiadmin look for name_#{I18n.locale}
20
- #
20
+ #
21
21
  module TranslateAttributes
22
22
  # Define <tt>method missing</tt> to intercept calls to non-localized methods (eg. +name+ instead of +name_cz+)
23
23
  def method_missing(method_name, *arguments)
@@ -1,20 +1,20 @@
1
1
  module Lipsiadmin
2
2
  module DataBase
3
3
  # This Module provides named scope for:
4
- #
4
+ #
5
5
  # - Search records in a extjs way (but can reusable)
6
6
  # - Paginate records in a extjs way (but can be reusable)
7
7
  # - Add association to the model (used for search in dependents tables)
8
- #
8
+ #
9
9
  # Examples:
10
- #
10
+ #
11
11
  # invoices = current_account.store.invoices.with(:order).ext_search(params)
12
12
  # invoices_count = invoices.size
13
13
  # invoices_paginated = invoices.ext_paginate(params)
14
- #
14
+ #
15
15
  module UtilityScopes
16
16
  def self.included(base)#:nodoc:
17
- base.class_eval do
17
+ base.class_eval do
18
18
  named_scope :ext_search, lambda { |params|
19
19
  order = params[:sort].blank? && params[:dir].blank? ? nil : "#{params[:sort]} #{params[:dir]}"
20
20
  conditions = nil
@@ -31,7 +31,7 @@ module Lipsiadmin
31
31
  { :order => order, :limit => params[:limit], :offset => params[:start] }
32
32
  }
33
33
  named_scope :with, lambda { |*associations| { :include => associations } }
34
-
34
+
35
35
  # You or your plugins (ex: will_paginate) now can override the search/paginate
36
36
  # at the moment we can't remove them for backward compatibility.
37
37
  (class << self; self end).instance_eval do
@@ -45,4 +45,4 @@ module Lipsiadmin
45
45
  end
46
46
  end
47
47
  end
48
- end
48
+ end