From 6a79f18c2e5aefb9a45885cfaec2852aa1ab831b Mon Sep 17 00:00:00 2001 From: Artem Petrov Date: Thu, 24 Sep 2015 01:36:59 +0300 Subject: [PATCH] add base refile support --- Gemfile | 2 + Gemfile.lock | 34 ++++++++++++++++- README.md | 12 +++++- ckeditor.gemspec | 6 +-- lib/ckeditor.rb | 1 + lib/ckeditor/backend/refile.rb | 37 +++++++++++++++++++ lib/generators/ckeditor/install_generator.rb | 2 +- .../active_record/refile/ckeditor/asset.rb | 4 ++ .../refile/ckeditor/attachment_file.rb | 7 ++++ .../active_record/refile/ckeditor/picture.rb | 11 ++++++ .../active_record/refile/migration.rb | 28 ++++++++++++++ test/generators/install_generator_test.rb | 14 +++++++ test/test_helper.rb | 2 +- 13 files changed, 152 insertions(+), 8 deletions(-) create mode 100644 lib/ckeditor/backend/refile.rb create mode 100644 lib/generators/ckeditor/templates/active_record/refile/ckeditor/asset.rb create mode 100644 lib/generators/ckeditor/templates/active_record/refile/ckeditor/attachment_file.rb create mode 100644 lib/generators/ckeditor/templates/active_record/refile/ckeditor/picture.rb create mode 100644 lib/generators/ckeditor/templates/active_record/refile/migration.rb diff --git a/Gemfile b/Gemfile index 1835e9013..089d5780f 100644 --- a/Gemfile +++ b/Gemfile @@ -28,6 +28,8 @@ platforms :ruby do gem "carrierwave" gem "dragonfly" gem "mini_magick" + gem "refile", require: "refile/rails" + gem "refile-mini_magick" end group :mongoid do diff --git a/Gemfile.lock b/Gemfile.lock index aad40f95a..7bda28f4c 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -62,12 +62,16 @@ GEM cocaine (0.5.4) climate_control (>= 0.0.3, < 1.0) columnize (0.8.9) + domain_name (0.5.24) + unf (>= 0.0.5, < 1.0.0) dragonfly (1.0.7) addressable (~> 2.3) multi_json (~> 1.0) rack erubis (2.7.0) hike (1.2.3) + http-cookie (1.0.2) + domain_name (~> 0.5) i18n (0.6.11) journey (1.0.4) json (1.8.1) @@ -78,7 +82,7 @@ GEM mime-types (~> 1.16) treetop (~> 1.4.8) mime-types (1.25.1) - mini_magick (4.0.1) + mini_magick (4.3.3) mini_portile (0.6.1) mongoid (3.1.6) activemodel (~> 3.2) @@ -94,6 +98,7 @@ GEM multi_json (1.10.1) mynyml-redgreen (0.7.1) term-ansicolor (>= 1.0.4) + netrc (0.10.3) nokogiri (1.6.5) mini_portile (~> 0.6.0) origin (1.1.0) @@ -104,9 +109,11 @@ GEM cocaine (~> 0.5.3) mime-types polyglot (0.3.5) - rack (1.4.5) + rack (1.4.7) rack-cache (1.2) rack (>= 0.4) + rack-protection (1.5.3) + rack rack-ssl (1.3.4) rack rack-test (0.6.2) @@ -131,11 +138,26 @@ GEM rbx-require-relative (0.0.9) rdoc (3.12.2) json (~> 1.4) + refile (0.6.1) + mime-types + rest-client (~> 1.8) + sinatra (~> 1.4.5) + refile-mini_magick (0.2.0) + mini_magick (~> 4.0) + refile (~> 0.5) + rest-client (1.8.0) + http-cookie (>= 1.0.2, < 2.0) + mime-types (>= 1.16, < 3.0) + netrc (~> 0.7) ruby-debug (0.10.4) columnize (>= 0.1) ruby-debug-base (~> 0.10.4.0) ruby-debug-base (0.10.4) linecache (>= 0.3) + sinatra (1.4.6) + rack (~> 1.4) + rack-protection (~> 1.4) + tilt (>= 1.3, < 3) sprockets (2.2.3) hike (~> 1.2) multi_json (~> 1.0) @@ -151,6 +173,9 @@ GEM polyglot polyglot (>= 0.3.1) tzinfo (0.3.42) + unf (0.1.4) + unf_ext + unf_ext (0.0.7.1) unicorn (4.0.1) kgio (~> 2.4) rack @@ -175,6 +200,11 @@ DEPENDENCIES mynyml-redgreen (~> 0.7.1) paperclip (~> 4.1.1) rails (= 3.2.21) + refile + refile-mini_magick ruby-debug sqlite3 unicorn (~> 4.0.1) + +BUNDLED WITH + 1.10.6 diff --git a/README.md b/README.md index d2d0919fe..ee51d1a12 100644 --- a/README.md +++ b/README.md @@ -61,6 +61,16 @@ gem 'mini_magick' rails generate ckeditor:install --orm=active_record --backend=carrierwave ``` +#### ActiveRecord + refile + +``` +gem 'refile', require: "refile/rails" +gem 'refile-mini_magick' + +rails generate ckeditor:install --orm=active_record --backend=refile +``` + + #### ActiveRecord + dragonfly Requires Dragonfly 1.0 or greater. @@ -146,7 +156,7 @@ Adding a custom toolbar: CKEDITOR.editorConfig = function (config) { // ... other configuration ... - + config.toolbar_mini = [ ["Bold", "Italic", "Underline", "Strike", "-", "Subscript", "Superscript"], ]; diff --git a/ckeditor.gemspec b/ckeditor.gemspec index 5abd763ca..44759a090 100644 --- a/ckeditor.gemspec +++ b/ckeditor.gemspec @@ -5,7 +5,7 @@ require "ckeditor/version" Gem::Specification.new do |s| s.name = "ckeditor" s.version = Ckeditor::Version::GEM.dup - s.platform = Gem::Platform::RUBY + s.platform = Gem::Platform::RUBY s.summary = "Rails gem for easy integration ckeditor in your application" s.description = "CKEditor is a WYSIWYG editor to be used inside web pages" s.authors = ["Igor Galeta"] @@ -13,12 +13,12 @@ Gem::Specification.new do |s| s.licenses = ["MIT"] s.rubyforge_project = "ckeditor" s.homepage = "https://github.com/galetahub/ckeditor" - + s.files = Dir["{app,config,lib,vendor}/**/*"] + ["MIT-LICENSE", "Rakefile", "Gemfile", "README.md"] s.test_files = Dir["{test}/**/*"] s.extra_rdoc_files = ["README.md"] s.require_paths = ["lib"] - + s.add_dependency("cocaine") s.add_dependency("orm_adapter", "~> 0.5.0") end diff --git a/lib/ckeditor.rb b/lib/ckeditor.rb index 4852bc6ed..1864561ac 100644 --- a/lib/ckeditor.rb +++ b/lib/ckeditor.rb @@ -24,6 +24,7 @@ module Backend autoload :Paperclip, 'ckeditor/backend/paperclip' autoload :CarrierWave, 'ckeditor/backend/carrierwave' autoload :Dragonfly, 'ckeditor/backend/dragonfly' + autoload :Refile, 'ckeditor/backend/refile' end IMAGE_TYPES = %w(image/jpeg image/png image/gif image/jpg image/pjpeg image/tiff image/x-png) diff --git a/lib/ckeditor/backend/refile.rb b/lib/ckeditor/backend/refile.rb new file mode 100644 index 000000000..d66504561 --- /dev/null +++ b/lib/ckeditor/backend/refile.rb @@ -0,0 +1,37 @@ +module Ckeditor + module Backend + module Refile + extend ActiveSupport::Concern + + included do + validates :data, presence: true + delegate :rewind, :download, :to_io, :exists?, :delete, :size, :close, :eof?, :read, to: :data + alias_attribute :data_file_name, :data_filename + alias_attribute :data_file_size, :data_size + end + + class_methods do + def attachment_file_types + @attachment_file_types ||= Ckeditor.attachment_file_types.map(&:to_s) + end + + def image_file_types + @image_file_types ||= Ckeditor.image_file_types.map(&:to_s) + end + end + + def url(*attrs) + ::Refile.attachment_url(self, :data, *attrs) + end + + def read_dimensions + if model.image? && model.has_dimensions? + magick = MiniMagick::Image.open(model.to_io) + model.width = magick.width + model.height = magick.height + end + end + + end + end +end diff --git a/lib/generators/ckeditor/install_generator.rb b/lib/generators/ckeditor/install_generator.rb index a131253d8..d62b7b13d 100644 --- a/lib/generators/ckeditor/install_generator.rb +++ b/lib/generators/ckeditor/install_generator.rb @@ -13,7 +13,7 @@ class InstallGenerator < Rails::Generators::Base :desc => "Backend processor for upload support" class_option :backend, :type => :string, :default => 'paperclip', - :desc => "paperclip (default), carrierwave, or dragonfly" + :desc => "paperclip (default), carrierwave, refile or dragonfly" def self.source_root @source_root ||= File.expand_path(File.join(File.dirname(__FILE__), 'templates')) diff --git a/lib/generators/ckeditor/templates/active_record/refile/ckeditor/asset.rb b/lib/generators/ckeditor/templates/active_record/refile/ckeditor/asset.rb new file mode 100644 index 000000000..3309412bf --- /dev/null +++ b/lib/generators/ckeditor/templates/active_record/refile/ckeditor/asset.rb @@ -0,0 +1,4 @@ +class Ckeditor::Asset < ActiveRecord::Base + include Ckeditor::Backend::Refile + include Ckeditor::Orm::ActiveRecord::AssetBase +end diff --git a/lib/generators/ckeditor/templates/active_record/refile/ckeditor/attachment_file.rb b/lib/generators/ckeditor/templates/active_record/refile/ckeditor/attachment_file.rb new file mode 100644 index 000000000..ad8c2fb2d --- /dev/null +++ b/lib/generators/ckeditor/templates/active_record/refile/ckeditor/attachment_file.rb @@ -0,0 +1,7 @@ +class Ckeditor::AttachmentFile < Ckeditor::Asset + attachment :data, extension: attachment_file_types + + def url_thumb + @url_thumb ||= Ckeditor::Utils.filethumb(filename) + end +end diff --git a/lib/generators/ckeditor/templates/active_record/refile/ckeditor/picture.rb b/lib/generators/ckeditor/templates/active_record/refile/ckeditor/picture.rb new file mode 100644 index 000000000..1434744f2 --- /dev/null +++ b/lib/generators/ckeditor/templates/active_record/refile/ckeditor/picture.rb @@ -0,0 +1,11 @@ +class Ckeditor::Picture < Ckeditor::Asset + attachment :data, extension: image_file_types + + def url_content + url + end + + def url_thumb + url(:fill, 118, 100) + end +end diff --git a/lib/generators/ckeditor/templates/active_record/refile/migration.rb b/lib/generators/ckeditor/templates/active_record/refile/migration.rb new file mode 100644 index 000000000..0d475eede --- /dev/null +++ b/lib/generators/ckeditor/templates/active_record/refile/migration.rb @@ -0,0 +1,28 @@ +class CreateCkeditorAssets < ActiveRecord::Migration + def self.up + create_table :ckeditor_assets do |t| + t.string :data_id, :null => false + t.string :data_filename, :null => false + t.integer :data_size + t.string :data_content_type + + + t.integer :assetable_id + t.string :assetable_type, :limit => 30 + t.string :type, :limit => 30 + + # Uncomment it to save images dimensions, if your need it + t.integer :width + t.integer :height + + t.timestamps + end + + add_index "ckeditor_assets", ["assetable_type", "type", "assetable_id"], :name => "idx_ckeditor_assetable_type" + add_index "ckeditor_assets", ["assetable_type", "assetable_id"], :name => "idx_ckeditor_assetable" + end + + def self.down + drop_table :ckeditor_assets + end +end diff --git a/test/generators/install_generator_test.rb b/test/generators/install_generator_test.rb index d67b9c0ac..a2a9a772b 100644 --- a/test/generators/install_generator_test.rb +++ b/test/generators/install_generator_test.rb @@ -57,6 +57,20 @@ class InstallGeneratorTest < Rails::Generators::TestCase end end + test "models and migration for active_record orm via refile" do + run_generator %w(--orm=active_record --backend=refile) + + assert_file "app/models/ckeditor/asset.rb" + assert_file "app/models/ckeditor/picture.rb" + assert_file "app/models/ckeditor/attachment_file.rb" + + assert_migration "db/migrate/create_ckeditor_assets.rb" do |migration| + assert_class_method :up, migration do |up| + assert_match /create_table/, up + end + end + end + test "models and migration for active_record orm via dragonfly" do run_generator %w(--orm=active_record --backend=dragonfly) diff --git a/test/test_helper.rb b/test/test_helper.rb index 343b6f5a0..ea651cfef 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -4,7 +4,7 @@ CKEDITOR_BACKEND = (ENV["CKEDITOR_BACKEND"] || :paperclip).to_sym puts "\n==> Ckeditor.orm = #{CKEDITOR_ORM.inspect}. CKEDITOR_ORM = (active_record|mongoid)" -puts "\n==> Ckeditor.backend = #{CKEDITOR_BACKEND.inspect}. CKEDITOR_BACKEND = (paperclip|carrierwave|dragonfly)" +puts "\n==> Ckeditor.backend = #{CKEDITOR_BACKEND.inspect}. CKEDITOR_BACKEND = (paperclip|carrierwave|refile|dragonfly)" require File.expand_path("../dummy/config/environment.rb", __FILE__) require "rails/test_help"