Skip to content

Commit 9fd8e68

Browse files
committed
add update method
1 parent 0639918 commit 9fd8e68

22 files changed

+566
-69
lines changed

Gemfile

+21
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,24 @@ source 'https://rubygems.org'
22

33
# Specify your gem's dependencies in redactor-rails.gemspec
44
gemspec
5+
gem "rails", "3.2.3"
6+
7+
8+
platforms :ruby do
9+
gem "sqlite3"
10+
11+
group :development do
12+
gem "unicorn", "~> 4.0.1"
13+
end
14+
15+
group :development, :test do
16+
gem "capybara", ">= 0.4.0"
17+
gem "mynyml-redgreen", "~> 0.7.1", :require => 'redgreen'
18+
end
19+
20+
group :active_record do
21+
gem "carrierwave"
22+
gem "mini_magick"
23+
end
24+
25+
end

README.md

+10
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,16 @@ Or install it yourself as:
1616

1717
$ gem install redactor-rails
1818

19+
### Now generate models for store uploading files
20+
21+
#### ActiveRecord + carrierwave
22+
23+
gem "carrierwave"
24+
gem "mini_magick"
25+
26+
$ rails generate redactor:install
27+
28+
$ rake db:migrate
1929
Create a `config/redactor.yml` file with your global configuration options:
2030

2131
lang: 'zh_tw'

Rakefile

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
#!/usr/bin/env rake
2-
require "bundler/gem_tasks"
2+
require "bundler"
3+
Bundler::GemHelper.install_tasks
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
class RedactorRails::PicturesController < ApplicationController
2+
def index
3+
#@pictures = RedactorRails.picture_model.find_all.map {|picture| {"thumb" => picture.url_thumb, "image" => picture.url} }
4+
@pictures = RedactorRails.picture_model.find_all
5+
render :json => @pictures.to_json
6+
7+
end
8+
def create
9+
@picture = RedactorRails::Picture.new
10+
11+
file = params[:file]
12+
@picture.data = RedactorRails::Http.normalize_param(file, request)
13+
14+
if @picture.save
15+
render :text => "<img src=#{@picture.url}/>"
16+
else
17+
render :nothing => true
18+
end
19+
end
20+
21+
end

config/routes.rb

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
RedactorRails::Engine.routes.draw do
2+
resources :pictures, :only => [:index, :create, :destroy]
3+
end
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
require 'rails/generators'
2+
require 'rails/generators/migration'
3+
module Redactor
4+
module Generators
5+
class InstallGenerator < ::Rails::Generators::Base
6+
include ::Rails::Generators::Migration
7+
desc "Generates migration for Tag and Tagging models"
8+
9+
class_option :orm, :type => :string, :default => "active_record",
10+
:desc => "Backend processor for upload support"
11+
12+
class_option :backend, :type => :string, :default => 'carrierwave',
13+
:desc => "carrierwave(default)"
14+
15+
def self.source_root
16+
@source_root ||= File.expand_path(File.join(File.dirname(__FILE__), 'templates'))
17+
end
18+
19+
def self.next_migration_number(dirname)
20+
Time.now.strftime("%Y%m%d%H%M%S")
21+
end
22+
23+
def mount_engine
24+
route "mount RedactorRails::Engine => '/redactor_rails'"
25+
end
26+
27+
def create_models
28+
[:asset, :picture, :attachment_file].each do |filename|
29+
template "#{generator_dir}/redactor/#{filename}.rb",
30+
File.join('app/models', redactor_dir, "#{filename}.rb")
31+
end
32+
33+
if backend == "carrierwave"
34+
template "#{uploaders_dir}/uploaders/redactor_rails_attachment_file_uploader.rb",
35+
File.join("app/uploaders", "redactor_rails_attachment_file_uploader.rb")
36+
37+
template "#{uploaders_dir}/uploaders/redactor_rails_picture_uploader.rb",
38+
File.join("app/uploaders", "redactor_rails_picture_uploader.rb")
39+
end
40+
end
41+
42+
def create_migration
43+
migration_template "#{generator_dir}/migration.rb", File.join('db/migrate', "create_redactor_assets.rb")
44+
end
45+
46+
protected
47+
48+
def redactor_dir
49+
'redactor_rails'
50+
end
51+
52+
def generator_dir
53+
@generator_dir ||= [orm, backend].join('/')
54+
end
55+
56+
def uploaders_dir
57+
@uploaders_dir ||= ['base', 'carrierwave'].join('/')
58+
end
59+
60+
def orm
61+
options[:orm] || "active_record"
62+
end
63+
64+
def backend
65+
options[:backend] || "carrierwave"
66+
end
67+
68+
end
69+
end
70+
end
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
class CreateRedactorAssets < ActiveRecord::Migration
2+
def self.up
3+
create_table :redactor_assets do |t|
4+
t.string :data_file_name, :null => false
5+
t.string :data_content_type
6+
t.integer :data_file_size
7+
8+
t.integer :assetable_id
9+
t.string :assetable_type, :limit => 30
10+
t.string :type, :limit => 30
11+
12+
# Uncomment it to save images dimensions, if your need it
13+
t.integer :width
14+
t.integer :height
15+
16+
t.timestamps
17+
end
18+
19+
add_index "redactor_assets", ["assetable_type", "type", "assetable_id"], :name => "idx_redactor_assetable_type"
20+
add_index "redactor_assets", ["assetable_type", "assetable_id"], :name => "idx_redactor_assetable"
21+
end
22+
23+
def self.down
24+
drop_table :redactor_assets
25+
end
26+
end
27+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
class RedactorRails::Asset < ActiveRecord::Base
2+
include RedactorRails::Orm::ActiveRecord::AssetBase
3+
delegate :url, :current_path, :size, :content_type, :filename, :to => :data
4+
validates_presence_of :data
5+
end
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
class RedactorRails::AttachmentFile < RedactorRails::Asset
2+
mount_uploader :data, RedactorRailsAttachmentFileUploader, :mount_on => :data_file_name
3+
4+
def url_thumb
5+
@url_thumb ||= RedactorRails::Utils.filethumb(filename)
6+
end
7+
end
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
class RedactorRails::Picture < RedactorRails::Asset
2+
mount_uploader :data, RedactorRailsPictureUploader, :mount_on => :data_file_name
3+
4+
def url_content
5+
url(:content)
6+
end
7+
end
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
# encoding: utf-8
2+
class RedactorRailsAttachmentFileUploader < CarrierWave::Uploader::Base
3+
include RedactorRails::Backend::CarrierWave
4+
5+
# Include RMagick or ImageScience support:
6+
# include CarrierWave::RMagick
7+
# include CarrierWave::MiniMagick
8+
# include CarrierWave::ImageScience
9+
10+
# Choose what kind of storage to use for this uploader:
11+
storage :file
12+
13+
# Override the directory where uploaded files will be stored.
14+
# This is a sensible default for uploaders that are meant to be mounted:
15+
def store_dir
16+
"system/redactor_assets/attachments/#{model.id}"
17+
end
18+
19+
# Provide a default URL as a default if there hasn't been a file uploaded:
20+
# def default_url
21+
# "/images/fallback/" + [version_name, "default.png"].compact.join('_')
22+
# end
23+
24+
# Process files as they are uploaded:
25+
# process :scale => [200, 300]
26+
#
27+
# def scale(width, height)
28+
# # do something
29+
# end
30+
31+
# Add a white list of extensions which are allowed to be uploaded.
32+
# For images you might use something like this:
33+
def extension_white_list
34+
RedactorRails.attachment_file_types
35+
end
36+
37+
# Override the filename of the uploaded files:
38+
# Avoid using model.id or version_name here, see uploader/store.rb for details.
39+
# def filename
40+
# "something.jpg" if original_filename
41+
# end
42+
end
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
# encoding: utf-8
2+
class RedactorRailsPictureUploader < CarrierWave::Uploader::Base
3+
include RedactorRails::Backend::CarrierWave
4+
5+
# Include RMagick or ImageScience support:
6+
# include CarrierWave::RMagick
7+
include CarrierWave::MiniMagick
8+
# include CarrierWave::ImageScience
9+
10+
# Choose what kind of storage to use for this uploader:
11+
storage :file
12+
13+
# Override the directory where uploaded files will be stored.
14+
# This is a sensible default for uploaders that are meant to be mounted:
15+
def store_dir
16+
"system/redactor_assets/pictures/#{model.id}"
17+
end
18+
19+
# Provide a default URL as a default if there hasn't been a file uploaded:
20+
# def default_url
21+
# "/images/fallback/" + [version_name, "default.png"].compact.join('_')
22+
# end
23+
24+
# Process files as they are uploaded:
25+
# process :scale => [200, 300]
26+
#
27+
# def scale(width, height)
28+
# # do something
29+
# end
30+
31+
process :read_dimensions
32+
33+
# Create different versions of your uploaded files:
34+
version :thumb do
35+
process :resize_to_fill => [118, 100]
36+
end
37+
38+
version :content do
39+
process :resize_to_limit => [800, 800]
40+
end
41+
42+
# Add a white list of extensions which are allowed to be uploaded.
43+
# For images you might use something like this:
44+
def extension_white_list
45+
RedactorRails.image_file_types
46+
end
47+
48+
# Override the filename of the uploaded files:
49+
# Avoid using model.id or version_name here, see uploader/store.rb for details.
50+
# def filename
51+
# "something.jpg" if original_filename
52+
# end
53+
end

lib/redactor-rails.rb

+24-8
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,30 @@
1+
require "orm_adapter"
12
require "redactor-rails/version"
23

3-
module Redactor
4-
module Rails
5-
require 'redactor-rails/engine'
6-
require 'redactor-rails/helper'
7-
require 'redactor-rails/configuration'
4+
module RedactorRails
5+
IMAGE_TYPES = ['image/jpeg', 'image/png', 'image/gif', 'image/jpg', 'image/pjpeg', 'image/tiff', 'image/x-png']
86

9-
def self.configuration
10-
@configuration ||= Configuration.load(::Rails.root.join("config/redactor.yml"))
11-
end
7+
autoload :Http, 'redactor-rails/http'
128

9+
module Backend
10+
autoload :CarrierWave, 'redactor-rails/backend/carrierwave'
1311
end
12+
require 'redactor-rails/orm/base'
13+
require 'redactor-rails/orm/active_record'
14+
require 'redactor-rails/engine'
15+
require 'redactor-rails/helper'
16+
require 'redactor-rails/configuration'
17+
18+
mattr_accessor :image_file_types
19+
@@image_file_types = ["jpg", "jpeg", "png", "gif", "tiff"]
20+
21+
def self.configuration
22+
@configuration ||= Configuration.load(::Rails.root.join("config/redactor.yml"))
23+
end
24+
25+
26+
def self.picture_model
27+
RedactorRails::Picture.to_adapter
28+
end
29+
1430
end
+64
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
require 'mime/types'
2+
require 'mini_magick'
3+
4+
module RedactorRails
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 commit comments

Comments
 (0)