ckeditor 3.6.0 → 3.6.1

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 (84) hide show
  1. data/Gemfile +5 -1
  2. data/README.rdoc +44 -9
  3. data/Rakefile +28 -0
  4. data/config/locales/pt-BR.ckeditor.yml +8 -0
  5. data/lib/ckeditor.rb +6 -1
  6. data/lib/ckeditor/backend/carrierwave.rb +64 -0
  7. data/lib/ckeditor/backend/paperclip.rb +53 -0
  8. data/lib/ckeditor/http.rb +10 -2
  9. data/lib/ckeditor/orm/active_record.rb +4 -69
  10. data/lib/ckeditor/orm/base.rb +46 -0
  11. data/lib/ckeditor/orm/mongoid.rb +20 -71
  12. data/lib/ckeditor/version.rb +1 -1
  13. data/lib/generators/ckeditor/install_generator.rb +1 -0
  14. data/lib/generators/ckeditor/models_generator.rb +28 -9
  15. data/lib/generators/ckeditor/templates/ckeditor.rb +1 -2
  16. data/lib/generators/ckeditor/templates/ckeditor/filebrowser/javascripts/application.js +1 -1
  17. data/lib/generators/ckeditor/templates/models/active_record/carrierwave/ckeditor/asset.rb +7 -0
  18. data/lib/generators/ckeditor/templates/models/active_record/carrierwave/ckeditor/attachment_file.rb +10 -0
  19. data/lib/generators/ckeditor/templates/models/active_record/carrierwave/ckeditor/picture.rb +7 -0
  20. data/lib/generators/ckeditor/templates/models/active_record/{migration.rb → carrierwave/migration.rb} +0 -0
  21. data/lib/generators/ckeditor/templates/models/active_record/{ckeditor → paperclip/ckeditor}/asset.rb +1 -4
  22. data/lib/generators/ckeditor/templates/models/active_record/{ckeditor → paperclip/ckeditor}/attachment_file.rb +0 -0
  23. data/lib/generators/ckeditor/templates/models/active_record/{ckeditor → paperclip/ckeditor}/picture.rb +0 -0
  24. data/lib/generators/ckeditor/templates/models/active_record/paperclip/migration.rb +26 -0
  25. data/lib/generators/ckeditor/templates/models/base/carrierwave/uploaders/ckeditor_attachment_file_uploader.rb +42 -0
  26. data/lib/generators/ckeditor/templates/models/base/carrierwave/uploaders/ckeditor_picture_uploader.rb +53 -0
  27. data/lib/generators/ckeditor/templates/models/mongoid/carrierwave/ckeditor/asset.rb +7 -0
  28. data/lib/generators/ckeditor/templates/models/mongoid/carrierwave/ckeditor/attachment_file.rb +10 -0
  29. data/lib/generators/ckeditor/templates/models/mongoid/carrierwave/ckeditor/picture.rb +7 -0
  30. data/lib/generators/ckeditor/templates/models/mongoid/paperclip/ckeditor/asset.rb +5 -0
  31. data/lib/generators/ckeditor/templates/models/mongoid/{ckeditor → paperclip/ckeditor}/attachment_file.rb +3 -3
  32. data/lib/generators/ckeditor/templates/models/mongoid/{ckeditor → paperclip/ckeditor}/picture.rb +0 -0
  33. data/test/controllers/attachment_files_controller_test.rb +9 -0
  34. data/test/controllers/pictures_controller_test.rb +9 -0
  35. data/test/dummy/config/application.rb +6 -2
  36. data/test/dummy/db/migrate/20110705195648_create_ckeditor_assets.rb +2 -2
  37. data/test/dummy/db/test.sqlite3 +0 -0
  38. data/test/dummy/log/test.log +2808 -0
  39. data/test/dummy/public/ckeditor_assets/attachments/4e53723cde2f151212000001/rails_tar.gz +0 -0
  40. data/test/dummy/public/ckeditor_assets/attachments/4e537333de2f15123b000001/rails_tar.gz +0 -0
  41. data/test/dummy/public/ckeditor_assets/attachments/4e537621de2f1514e9000001/rails_tar.gz +0 -0
  42. data/test/dummy/public/ckeditor_assets/attachments/4e53766ade2f15152c000001/rails_tar.gz +0 -0
  43. data/test/dummy/public/ckeditor_assets/attachments/4e53781ede2f1515b7000001/rails.tar.gz +0 -0
  44. data/test/dummy/public/ckeditor_assets/attachments/4e537849de2f151651000001/rails_tar.gz +0 -0
  45. data/test/dummy/public/ckeditor_assets/pictures/4e53723dde2f151212000002/content_rails.png +0 -0
  46. data/test/dummy/public/ckeditor_assets/pictures/4e53723dde2f151212000002/original_rails.png +0 -0
  47. data/test/dummy/public/ckeditor_assets/pictures/4e53723dde2f151212000002/thumb_rails.png +0 -0
  48. data/test/dummy/public/ckeditor_assets/pictures/4e537334de2f15123b000002/content_rails.png +0 -0
  49. data/test/dummy/public/ckeditor_assets/pictures/4e537334de2f15123b000002/original_rails.png +0 -0
  50. data/test/dummy/public/ckeditor_assets/pictures/4e537334de2f15123b000002/thumb_rails.png +0 -0
  51. data/test/dummy/public/ckeditor_assets/pictures/4e537637de2f1514e9000007/content_rails.png +0 -0
  52. data/test/dummy/public/ckeditor_assets/pictures/4e537637de2f1514e9000007/original_rails.png +0 -0
  53. data/test/dummy/public/ckeditor_assets/pictures/4e537637de2f1514e9000007/thumb_rails.png +0 -0
  54. data/test/dummy/public/ckeditor_assets/pictures/4e53768ade2f15152c000007/content_rails.png +0 -0
  55. data/test/dummy/public/ckeditor_assets/pictures/4e53768ade2f15152c000007/original_rails.png +0 -0
  56. data/test/dummy/public/ckeditor_assets/pictures/4e53768ade2f15152c000007/thumb_rails.png +0 -0
  57. data/test/dummy/public/ckeditor_assets/pictures/4e53783ade2f1515b7000007/content_rails.png +0 -0
  58. data/test/dummy/public/ckeditor_assets/pictures/4e53783ade2f1515b7000007/rails.png +0 -0
  59. data/test/dummy/public/ckeditor_assets/pictures/4e53783ade2f1515b7000007/thumb_rails.png +0 -0
  60. data/test/dummy/public/ckeditor_assets/pictures/4e537868de2f151651000007/content_rails.png +0 -0
  61. data/test/dummy/public/ckeditor_assets/pictures/4e537868de2f151651000007/original_rails.png +0 -0
  62. data/test/dummy/public/ckeditor_assets/pictures/4e537868de2f151651000007/thumb_rails.png +0 -0
  63. data/test/dummy/public/uploads/tmp/20110823-1231-4694-7541/rails.png +0 -0
  64. data/test/dummy/public/uploads/tmp/20110823-1232-4702-5501/rails.png +0 -0
  65. data/test/dummy/public/uploads/tmp/20110823-1245-5487-0966/rails.png +0 -0
  66. data/test/dummy/public/uploads/tmp/20110823-1245-5487-1597/rails.tar.gz +0 -0
  67. data/test/dummy/public/uploads/tmp/20110823-1245-5487-3892/rails.tar.gz +0 -0
  68. data/test/dummy/public/uploads/tmp/20110823-1245-5487-5787/rails.tar.gz +0 -0
  69. data/test/dummy/public/uploads/tmp/20110823-1245-5487-5790/rails.png +0 -0
  70. data/test/dummy/public/uploads/tmp/20110823-1245-5487-6435/rails.png +0 -0
  71. data/test/dummy/public/uploads/tmp/20110823-1245-5487-6978/rails.png +0 -0
  72. data/test/dummy/public/uploads/tmp/20110823-1245-5487-7226/rails.tar.gz +0 -0
  73. data/test/dummy/public/uploads/tmp/20110823-1245-5487-7290/rails.tar.gz +0 -0
  74. data/test/dummy/public/uploads/tmp/20110823-1245-5487-9279/rails.png +0 -0
  75. data/test/generators/models_generator_test.rb +34 -4
  76. data/test/models/attachment_file_test.rb +16 -0
  77. data/test/models/picture_test.rb +16 -0
  78. data/test/support/helpers.rb +30 -0
  79. data/test/support/raw_post.rb +9 -0
  80. data/test/test_helper.rb +2 -0
  81. data/test/tmp/app/models/ckeditor/asset.rb +2 -4
  82. data/test/tmp/app/models/ckeditor/attachment_file.rb +3 -3
  83. metadata +104 -11
  84. data/lib/generators/ckeditor/templates/models/mongoid/ckeditor/asset.rb +0 -7
data/Gemfile CHANGED
@@ -7,6 +7,7 @@ gem "rails", "3.0.9"
7
7
  platforms :mri_18 do
8
8
  group :test do
9
9
  gem 'ruby-debug'
10
+ gem 'SystemTimer'
10
11
  end
11
12
  end
12
13
 
@@ -23,12 +24,15 @@ platforms :ruby do
23
24
  end
24
25
 
25
26
  group :active_record do
26
- gem "paperclip", "~> 2.3.12"
27
+ gem "paperclip"
28
+ gem "carrierwave"
29
+ gem "mini_magick"
27
30
  end
28
31
 
29
32
  group :mongoid do
30
33
  gem "mongoid"
31
34
  gem "bson_ext"
32
35
  gem 'mongoid-paperclip', :require => 'mongoid_paperclip'
36
+ gem 'carrierwave-mongoid', :require => 'carrierwave/mongoid'
33
37
  end
34
38
  end
@@ -14,7 +14,13 @@ the results users have when publishing it. It brings to the web common editing f
14
14
 
15
15
  == Install
16
16
 
17
+ gem install ckeditor
18
+
19
+ Or via bundler:
20
+
17
21
  gem "ckeditor", "~> 3.6.0"
22
+
23
+ === Download ckeditor
18
24
 
19
25
  rails generate ckeditor:install
20
26
 
@@ -22,31 +28,59 @@ You can pass version of ckeditor to download (http://ckeditor.com/download/relea
22
28
 
23
29
  rails generate ckeditor:install --version=3.5.4
24
30
 
25
- Now generate models for store uploading files:
31
+ === Now generate models for store uploading files
32
+
33
+ ==== ActiveRecord + paperclip
34
+
35
+ For active_record orm is used paperclip gem (it's by default).
36
+
37
+ gem "paperclip"
38
+
39
+ rails generate ckeditor:models --orm=active_record --backend=paperclip
40
+
41
+ ==== ActiveRecord + carrierwave
42
+
43
+ gem "carrierwave"
44
+ gem "mini_magick"
45
+
46
+ rails generate ckeditor:models --orm=active_record --backend=carrierwave
47
+
48
+ ==== Mongoid + paperclip
49
+
50
+ gem 'mongoid-paperclip', :require => 'mongoid_paperclip'
51
+
52
+ rails generate ckeditor:models --orm=mongoid --backend=paperclip
53
+
54
+ ==== Mongoid + carrierwave
55
+
56
+ gem "carrierwave-mongoid", :require => 'carrierwave/mongoid'
57
+ gem "mini_magick"
58
+
59
+ rails generate ckeditor:models --orm=mongoid --backend=carrierwave
26
60
 
27
- rails generate ckeditor:models --orm=active_record
28
61
 
29
62
  Available orms:
30
63
  * active_record
31
64
  * mongoid (Thanks Dmitry Lihachev https://github.com/lda)
32
65
  * mongo_mapper (under construction)
33
66
 
67
+
34
68
  Autoload ckeditor models folder (application.rb):
35
69
 
36
70
  config.autoload_paths += %W(#{config.root}/app/models/ckeditor)
37
71
 
38
- === Dependencies
72
+ == Usage
39
73
 
40
- For active_record orm is used paperclip gem (it's by default).
74
+ Include ckeditor javascripts:
41
75
 
42
- gem "paperclip"
43
-
44
- For gem "carrierwave" shortly I will give an example.
76
+ <%= javascript_include_tag :ckeditor %>
45
77
 
46
- == Usage
78
+ or (for rails 3.1):
47
79
 
48
- <%= javascript_include_tag :ckeditor %>
80
+ <%= javascript_include_tag "/javascripts/ckeditor/ckeditor.js" %>
49
81
 
82
+ Form helpers:
83
+
50
84
  cktext_area_tag("test_area", "Ckeditor is the best")
51
85
 
52
86
  cktext_area_tag("content", "Ckeditor", :input_html => {:cols => 10, :rows => 20}, :toolbar => 'Easy')
@@ -160,5 +194,6 @@ By default, both these methods call "ckeditor_filebrowser_scope" method:
160
194
 
161
195
  rake test
162
196
  rake test CKEDITOR_ORM=mongoid
197
+ rake test CKEDITOR_BACKEND=carrierwave
163
198
 
164
199
  This project rocks and uses MIT-LICENSE.
data/Rakefile CHANGED
@@ -18,6 +18,34 @@ Rake::TestTask.new(:test) do |t|
18
18
  t.verbose = false
19
19
  end
20
20
 
21
+ Rake::TestTask.new("test:controllers") do |t|
22
+ t.libs << 'lib'
23
+ t.libs << 'test'
24
+ t.pattern = 'test/controllers/*_test.rb'
25
+ t.verbose = false
26
+ end
27
+
28
+ Rake::TestTask.new("test:generators") do |t|
29
+ t.libs << 'lib'
30
+ t.libs << 'test'
31
+ t.pattern = 'test/generators/*_test.rb'
32
+ t.verbose = false
33
+ end
34
+
35
+ Rake::TestTask.new("test:integration") do |t|
36
+ t.libs << 'lib'
37
+ t.libs << 'test'
38
+ t.pattern = 'test/integration/*_test.rb'
39
+ t.verbose = false
40
+ end
41
+
42
+ Rake::TestTask.new("test:models") do |t|
43
+ t.libs << 'lib'
44
+ t.libs << 'test'
45
+ t.pattern = 'test/models/*_test.rb'
46
+ t.verbose = false
47
+ end
48
+
21
49
  task :default => :test
22
50
 
23
51
  RDoc::Task.new do |rdoc|
@@ -0,0 +1,8 @@
1
+ "pt-BR":
2
+ ckeditor:
3
+ page_title: "Gerenciador de arquivos do CKEditor"
4
+ confirm_delete: "Apagar arquivo?"
5
+ buttons:
6
+ cancel: "Cancelar"
7
+ upload: "Enviar"
8
+ delete: "Apagar"
@@ -18,6 +18,11 @@ module Ckeditor
18
18
  autoload :SimpleFormBuilder, 'ckeditor/hooks/simple_form'
19
19
  end
20
20
 
21
+ module Backend
22
+ autoload :Paperclip, 'ckeditor/backend/paperclip'
23
+ autoload :CarrierWave, 'ckeditor/backend/carrierwave'
24
+ end
25
+
21
26
  # Allowed image file types for upload.
22
27
  # Set to nil or [] (empty array) for all file types
23
28
  mattr_accessor :image_file_types
@@ -26,7 +31,7 @@ module Ckeditor
26
31
  # Allowed attachment file types for upload.
27
32
  # Set to nil or [] (empty array) for all file types
28
33
  mattr_accessor :attachment_file_types
29
- @@attachment_file_types = ["doc", "docx", "rar", "zip", "xls", "swf"]
34
+ @@attachment_file_types = ["doc", "docx", "xls", "odt", "ods", "pdf", "rar", "zip", "tar", "tar.gz", "swf"]
30
35
 
31
36
  # Default way to setup Ckeditor. Run rails generate ckeditor to create
32
37
  # a fresh initializer with all configuration values.
@@ -0,0 +1,64 @@
1
+ require 'mime/types'
2
+ require 'mini_magick'
3
+
4
+ module Ckeditor
5
+ module Backend
6
+ module CarrierWave
7
+ def self.included(base)
8
+ base.send(:include, InstanceMethods)
9
+ base.send(:extend, ClassMethods)
10
+ end
11
+
12
+ module ClassMethods
13
+ def self.extended(base)
14
+ base.class_eval do
15
+ process :extract_content_type
16
+ process :set_size
17
+ end
18
+ end
19
+ end
20
+
21
+ module InstanceMethods
22
+ # process :strip
23
+ def strip
24
+ manipulate! do |img|
25
+ img.strip
26
+ img = yield(img) if block_given?
27
+ img
28
+ end
29
+ end
30
+
31
+ # process :quality => 85
32
+ def quality(percentage)
33
+ manipulate! do |img|
34
+ img.quality(percentage)
35
+ img = yield(img) if block_given?
36
+ img
37
+ end
38
+ end
39
+
40
+ def extract_content_type
41
+ if file.content_type == 'application/octet-stream' || file.content_type.blank?
42
+ content_type = MIME::Types.type_for(original_filename).first
43
+ else
44
+ content_type = file.content_type
45
+ end
46
+
47
+ model.data_content_type = content_type.to_s
48
+ end
49
+
50
+ def set_size
51
+ model.data_file_size = file.size
52
+ end
53
+
54
+ def read_dimensions
55
+ if model.image? && model.has_dimensions?
56
+ magick = ::MiniMagick::Image.new(current_path)
57
+ model.width, model.height = magick[:width], magick[:height]
58
+ end
59
+ end
60
+
61
+ end
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,53 @@
1
+ require 'mime/types'
2
+
3
+ module Ckeditor
4
+ module Backend
5
+ module Paperclip
6
+ def self.included(base)
7
+ base.send(:include, InstanceMethods)
8
+ base.send(:extend, ClassMethods)
9
+ end
10
+
11
+ module ClassMethods
12
+ def self.extended(base)
13
+ base.class_eval do
14
+ before_validation :extract_content_type
15
+ before_create :read_dimensions, :parameterize_filename
16
+
17
+ delegate :url, :path, :styles, :size, :content_type, :to => :data
18
+ end
19
+ end
20
+ end
21
+
22
+ module InstanceMethods
23
+ def geometry
24
+ @geometry ||= ::Paperclip::Geometry.from_file(data.to_file)
25
+ end
26
+
27
+ protected
28
+
29
+ def parameterize_filename
30
+ unless data_file_name.blank?
31
+ filename = Ckeditor::Utils.parameterize_filename(data_file_name)
32
+ self.data.instance_write(:file_name, filename)
33
+ end
34
+ end
35
+
36
+ def read_dimensions
37
+ if image? && has_dimensions?
38
+ self.width = geometry.width
39
+ self.height = geometry.height
40
+ end
41
+ end
42
+
43
+ # Extract content_type from filename using mime/types gem
44
+ def extract_content_type
45
+ if data_content_type == "application/octet-stream" && !data_file_name.blank?
46
+ content_types = MIME::Types.type_for(data_file_name)
47
+ self.data_content_type = content_types.first.to_s unless content_types.empty?
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
@@ -50,7 +50,7 @@ module Ckeditor
50
50
  end
51
51
 
52
52
  def fetch
53
- self.write @request.raw_post
53
+ self.write(body)
54
54
  self.rewind
55
55
  self
56
56
  end
@@ -60,9 +60,17 @@ module Ckeditor
60
60
  end
61
61
 
62
62
  def content_type
63
- types = MIME::Types.type_for(@request.content_type)
63
+ types = MIME::Types.type_for(original_filename)
64
64
  types.empty? ? @request.content_type : types.first.to_s
65
65
  end
66
+
67
+ def body
68
+ if @request.raw_post.respond_to?(:force_encoding)
69
+ @request.raw_post.force_encoding("UTF-8")
70
+ else
71
+ @request.raw_post
72
+ end
73
+ end
66
74
  end
67
75
 
68
76
  # Convert nested Hash to HashWithIndifferentAccess and replace
@@ -1,9 +1,11 @@
1
+ require 'ckeditor/orm/base'
2
+
1
3
  module Ckeditor
2
4
  module Orm
3
5
  module ActiveRecord
4
6
  module AssetBase
5
7
  def self.included(base)
6
- base.send(:include, InstanceMethods)
8
+ base.send(:include, Base::AssetBase::InstanceMethods)
7
9
  base.send(:extend, ClassMethods)
8
10
  end
9
11
 
@@ -13,78 +15,11 @@ module Ckeditor
13
15
  set_table_name "ckeditor_assets"
14
16
 
15
17
  belongs_to :assetable, :polymorphic => true
16
-
17
- before_validation :extract_content_type
18
- before_create :read_dimensions, :parameterize_filename
19
18
 
20
- delegate :url, :path, :styles, :size, :content_type, :to => :data
19
+ attr_accessible :data, :assetable_type, :assetable_id, :assetable
21
20
  end
22
21
  end
23
22
  end
24
-
25
- module InstanceMethods
26
- def filename
27
- data_file_name
28
- end
29
-
30
- def format_created_at
31
- I18n.l(created_at, :format => "%d.%m.%Y")
32
- end
33
-
34
- def has_dimensions?
35
- respond_to?(:width) && respond_to?(:height)
36
- end
37
-
38
- def image?
39
- Ckeditor::IMAGE_TYPES.include?(data_content_type)
40
- end
41
-
42
- def geometry
43
- @geometry ||= Paperclip::Geometry.from_file(data.to_file)
44
- @geometry
45
- end
46
-
47
- def url_content
48
- url
49
- end
50
-
51
- def url_thumb
52
- url(:thumb)
53
- end
54
-
55
- def as_json(options = nil)
56
- options = {
57
- :methods => [:url_content, :url_thumb, :size, :filename, :format_created_at],
58
- :root => "asset"
59
- }.merge(options || {})
60
-
61
- super options
62
- end
63
-
64
- protected
65
-
66
- def parameterize_filename
67
- unless data_file_name.blank?
68
- filename = Ckeditor::Utils.parameterize_filename(data_file_name)
69
- self.data.instance_write(:file_name, filename)
70
- end
71
- end
72
-
73
- def read_dimensions
74
- if image? && has_dimensions?
75
- self.width = geometry.width
76
- self.height = geometry.height
77
- end
78
- end
79
-
80
- # Extract content_type from filename using mime/types gem
81
- def extract_content_type
82
- if data_content_type == "application/octet-stream" && !data_file_name.blank?
83
- content_types = MIME::Types.type_for(data_file_name)
84
- self.data_content_type = content_types.first.to_s unless content_types.empty?
85
- end
86
- end
87
- end
88
23
  end
89
24
  end
90
25
  end
@@ -0,0 +1,46 @@
1
+ module Ckeditor
2
+ module Orm
3
+ module Base
4
+ module AssetBase
5
+ module InstanceMethods
6
+ def filename
7
+ data_file_name
8
+ end
9
+
10
+ def has_dimensions?
11
+ respond_to?(:width) && respond_to?(:height)
12
+ end
13
+
14
+ def image?
15
+ Ckeditor::IMAGE_TYPES.include?(data_content_type)
16
+ end
17
+
18
+ def format_created_at
19
+ self.created_at.strftime("%d.%m.%Y")
20
+ end
21
+
22
+ def url_content
23
+ url
24
+ end
25
+
26
+ def url_thumb
27
+ url(:thumb)
28
+ end
29
+
30
+ def as_json_methods
31
+ [:url_content, :url_thumb, :size, :filename, :format_created_at]
32
+ end
33
+
34
+ def as_json(options = nil)
35
+ options = {
36
+ :methods => as_json_methods,
37
+ :root => "asset"
38
+ }.merge(options || {})
39
+
40
+ super options
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end