ckeditor 3.6.0 → 3.6.1

Sign up to get free protection for your applications and to get access to all the features.
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