watarase 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.rdoc +13 -15
- data/lib/watarase.rb +4 -4
- data/lib/watarase/controller.rb +43 -40
- data/lib/watarase/extension_whitelist.rb +21 -0
- data/lib/watarase/generators/uploader/uploader_generator.rb +2 -18
- data/lib/watarase/image_handler.rb +37 -0
- data/lib/watarase/image_holder.rb +47 -0
- data/lib/watarase/version.rb +1 -1
- data/test/dummy/app/controllers/users_controller.rb +4 -4
- data/test/dummy/app/models/user.rb +1 -0
- data/test/dummy/app/models/user_image_holder.rb +3 -14
- data/test/dummy/db/migrate/{20130318134905_create_user_image_holders.rb → 20130412174428_create_user_image_holders.rb} +0 -0
- data/test/dummy/test/fixtures/user_image_holders.yml +8 -15
- data/test/dummy/test/models/user_image_holder_test.rb +0 -7
- metadata +7 -5
- data/lib/watarase/model.rb +0 -20
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bb3e733879e4f9adcb7a2b98f5d1107bbcff7ab0
|
4
|
+
data.tar.gz: 72549fe8bd2bcd9c2330a2cde3e0d154132885b1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2ce6cb1186198b64b23ff4fb8c43e89a0115e372f9570fce72887d8bbbe6e4f949140a80defa43542bfacc91a4d6f1e8e2712fccdb34962b4f2f74a5be654b30
|
7
|
+
data.tar.gz: ee19faa4daa8f5a294fe89c98ddc5a59b099ba31c99af6d5ba265ef01139fb0bd60a36820e013bacda125763ae8b2dd9047a5d9b4b50a9c48bb36e58c69759d4
|
data/README.rdoc
CHANGED
@@ -76,27 +76,25 @@ Add 'load_image' action in 'config/routes.rb'
|
|
76
76
|
|
77
77
|
Define 'image_loadable <image_handler>' definition in controllers.
|
78
78
|
|
79
|
-
|
80
|
-
image_loadable :user
|
81
|
-
:
|
79
|
+
If you need image caching then, use options caches: and expire_actions:.
|
82
80
|
|
83
|
-
|
81
|
+
class UsersController < ApplicationController
|
82
|
+
image_loadable :user, caches: true, expire_actions: [:update], save_actions: [:create, :update]
|
84
83
|
|
85
|
-
|
86
|
-
|
87
|
-
set_image_holder @user
|
88
|
-
:
|
84
|
+
In this case, action caching enabled, and clearing the cache in update action.
|
85
|
+
The option save_actions is associate image_handler(ex. user) with image_holder(ex. user_image_holder).
|
89
86
|
|
90
|
-
|
91
|
-
set_image_holder @user
|
92
|
-
:
|
87
|
+
=== Tips
|
93
88
|
|
94
|
-
|
95
|
-
|
96
|
-
|
89
|
+
def index
|
90
|
+
@users = User.all
|
91
|
+
end
|
97
92
|
|
98
|
-
|
93
|
+
It is a good idea to make the following changes:
|
99
94
|
|
95
|
+
def index
|
96
|
+
@users = User.all.merge(includes: [:user_image_holder])
|
97
|
+
end
|
100
98
|
|
101
99
|
== View
|
102
100
|
|
data/lib/watarase.rb
CHANGED
@@ -1,6 +1,4 @@
|
|
1
1
|
require 'rubygems'
|
2
|
-
#require 'RMagick'
|
3
|
-
#require 'rmagick'
|
4
2
|
require 'rails/generators'
|
5
3
|
|
6
4
|
module Watarase
|
@@ -23,6 +21,8 @@ module Watarase
|
|
23
21
|
end
|
24
22
|
end
|
25
23
|
end
|
26
|
-
require 'watarase/
|
24
|
+
require 'watarase/image_handler'
|
27
25
|
require 'watarase/controller'
|
28
|
-
require 'watarase/generators/uploader/uploader_generator'
|
26
|
+
require 'watarase/generators/uploader/uploader_generator'
|
27
|
+
require 'watarase/extension_whitelist'
|
28
|
+
require 'watarase/image_holder'
|
data/lib/watarase/controller.rb
CHANGED
@@ -3,57 +3,60 @@ require 'action_controller/action_caching'
|
|
3
3
|
module Watarase
|
4
4
|
module Controller
|
5
5
|
def self.included(controller)
|
6
|
-
controller.extend Watarase::ImageLoader
|
6
|
+
controller.extend Watarase::Controller::ImageLoader
|
7
7
|
end
|
8
|
-
end
|
9
8
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
9
|
+
module ImageLoader
|
10
|
+
def image_loadable(_image_handler, options = {})
|
11
|
+
ih = _image_handler.to_s.camelize.constantize
|
12
|
+
self.class_variable_set(:@@image_handler, ih)
|
13
|
+
self.send(:include, Watarase::Controller::InstanceMethods)
|
14
|
+
self.send(:caches_action, :load_image) if options[:caches]
|
15
|
+
self.send(:before_action, :expire_caches, only: options[:expire_actions]) if options[:expire_actions]
|
16
|
+
self.send(:before_action, :image_params, only: options[:save_actions]) if options[:save_actions]
|
17
|
+
self.send(:helper_method, :image_thumb_path)
|
18
|
+
self.send(:helper_method, :image_data_path)
|
19
|
+
end
|
19
20
|
end
|
20
|
-
end
|
21
21
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
22
|
+
module InstanceMethods
|
23
|
+
def load_image
|
24
|
+
image = image_holder.find(params[:id])
|
25
|
+
column_name = :"#{(params[:image_column] || 'image_data')}"
|
26
|
+
send_data image.send(column_name), type: image.content_type, disposition: 'inline'
|
27
|
+
end
|
28
28
|
|
29
|
-
|
30
|
-
|
31
|
-
|
29
|
+
def expire_caches
|
30
|
+
expire_action action: :load_image
|
31
|
+
end
|
32
32
|
|
33
|
-
|
34
|
-
|
35
|
-
|
33
|
+
def image_params
|
34
|
+
ip = params.require(image_handler.name.underscore.to_sym).permit(:image_file, :remove_image)
|
35
|
+
puts "**** image_params **** #{ip} ****"
|
36
|
+
Thread.current[:image_params] = ip
|
37
|
+
end
|
36
38
|
|
37
|
-
|
38
|
-
|
39
|
-
|
39
|
+
def image_handler
|
40
|
+
self.class.class_variable_get(:@@image_handler)
|
41
|
+
end
|
40
42
|
|
41
|
-
|
42
|
-
|
43
|
-
|
43
|
+
def image_holder
|
44
|
+
"#{image_handler.name.underscore}_#{Watarase.suffix}".camelize.constantize
|
45
|
+
end
|
44
46
|
|
45
|
-
|
46
|
-
|
47
|
-
|
47
|
+
def image_thumb_path(model)
|
48
|
+
url_for(controller: image_handler.name.downcase!.pluralize, action: 'load_image', id: model.send(:"#{image_holder.name.underscore}").id, image_column: :image_thumb)
|
49
|
+
end
|
48
50
|
|
49
|
-
|
50
|
-
|
51
|
-
|
51
|
+
def image_data_path(model)
|
52
|
+
url_for(controller: image_handler.name.downcase!.pluralize, action: 'load_image', id: model.send(:"#{image_holder.name.underscore}").id, image_column: :image_data)
|
53
|
+
end
|
52
54
|
|
53
|
-
|
54
|
-
|
55
|
-
_image_handler.send(:"#{image_holder.name.underscore}=", image_holder.new) unless _image_handler.send(:"#{image_holder.name.underscore}")
|
56
|
-
_image_handler.send(:"#{image_holder.name.underscore}").uploaded_image = image_params
|
55
|
+
# Call before create, update
|
56
|
+
#def set_image_holder(_image_handler)
|
57
|
+
# _image_handler.send(:"#{image_holder.name.underscore}=", image_holder.new) unless _image_handler.send(:"#{image_holder.name.underscore}")
|
58
|
+
# _image_handler.send(:"#{image_holder.name.underscore}").uploaded_image = image_params
|
59
|
+
#end
|
57
60
|
end
|
58
61
|
end
|
59
62
|
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module Watarase
|
2
|
+
module ImageHolder
|
3
|
+
module ExtensionWhitelist
|
4
|
+
|
5
|
+
def self.included(model)
|
6
|
+
model.send(:before_save, :check_extension)
|
7
|
+
end
|
8
|
+
|
9
|
+
def check_extension
|
10
|
+
puts "**** check_extension ****"
|
11
|
+
if filename && extension_white_list && !extension_white_list.include?(File.extname(filename).sub(/\./, ''))
|
12
|
+
raise StandardError, "Unsupported file " + filename
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def extension_white_list
|
17
|
+
%w(jpg jpeg gif png)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -9,26 +9,10 @@ module Watarase
|
|
9
9
|
|
10
10
|
str_code = <<-"CODE"
|
11
11
|
|
12
|
-
|
13
|
-
belongs_to :#{file_name}, primary_key: :#{fk}, foreign_key: :#{file_name}_#{fk}
|
12
|
+
acts_as_image_holder
|
14
13
|
|
15
|
-
|
16
|
-
if image_params[:remove_image] && image_params[:remove_image] == "1"
|
17
|
-
self.destroy
|
18
|
-
elsif image_params[:image_file] && !image_params[:image_file].blank?
|
19
|
-
self.filename = image_params[:image_file].original_filename
|
20
|
-
self.content_type = image_params[:image_file].content_type
|
21
|
-
data = image_params[:image_file].tempfile.read
|
22
|
-
self.image_data = Image.from_blob(data).first.resize_to_fit(100, 100).to_blob
|
23
|
-
self.image_thumb = Image.from_blob(data).first.thumbnail(35, 35).to_blob
|
24
|
-
elsif self.new_record?
|
25
|
-
self.destroy
|
26
|
-
end
|
27
|
-
end
|
14
|
+
belongs_to :#{file_name}, primary_key: :#{fk}, foreign_key: :#{file_name}_#{fk}
|
28
15
|
|
29
|
-
def extension_white_list
|
30
|
-
%w(jpg jpeg gif png)
|
31
|
-
end
|
32
16
|
CODE
|
33
17
|
|
34
18
|
generate "model", "#{model_name} #{file_name}_#{fk}:#{fk_type} filename:string content_type:string image_data:binary image_thumb:binary"
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'active_record/base'
|
2
|
+
|
3
|
+
module Watarase
|
4
|
+
module ImageHandler
|
5
|
+
def self.included(model)
|
6
|
+
model.extend Watarase::ImageHandler::Macro
|
7
|
+
end
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
module Watarase
|
12
|
+
module ImageHandler
|
13
|
+
module Macro
|
14
|
+
def acts_as_image_handler
|
15
|
+
image_holder = (self.name.underscore << '_' << Watarase.suffix).to_sym
|
16
|
+
self.send(:include, Watarase::ImageHandler::Associate)
|
17
|
+
self.send(:has_one, image_holder, primary_key: self.primary_key, foreign_key: "#{self.name.underscore}_#{self.primary_key}", autosave: true, dependent: :destroy)
|
18
|
+
self.send(:attr_accessor, :remove_image)
|
19
|
+
self.send(:before_save, :update_image_holder)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
module Associate
|
24
|
+
def update_image_holder
|
25
|
+
puts "**** update image holder **** #{Thread.current[:image_params]} ****"
|
26
|
+
image_holder = (self.class.name.underscore << '_' << Watarase.suffix)
|
27
|
+
return if (!self.send(image_holder.to_sym) and (!Thread.current[:image_params] or !Thread.current[:image_params][:image_file]))
|
28
|
+
|
29
|
+
self.send((image_holder + '=').to_sym, image_holder.camelcase.constantize.new) unless self.send(image_holder.to_sym)
|
30
|
+
self.send(image_holder.to_sym).send(:uploaded_image=, (Thread.current[:image_params] || {}))
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
ActiveRecord::Base.send :include, Watarase::ImageHandler unless ActiveRecord::Base.include? Watarase::ImageHandler
|
37
|
+
|
@@ -0,0 +1,47 @@
|
|
1
|
+
#require 'RMagick'
|
2
|
+
require 'rmagick'
|
3
|
+
|
4
|
+
module Watarase
|
5
|
+
module ImageHolder
|
6
|
+
def self.included(model)
|
7
|
+
model.extend Watarase::ImageHolder::Macro
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
module Watarase
|
13
|
+
module ImageHolder
|
14
|
+
module Macro
|
15
|
+
def acts_as_image_holder
|
16
|
+
self.send(:include, Watarase::ImageHolder::ExtensionWhitelist)
|
17
|
+
self.send(:include, Watarase::ImageHolder::Store)
|
18
|
+
self.send(:before_save, :prepare_image)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
module Store
|
23
|
+
def uploaded_image= (image_params)
|
24
|
+
puts "**** uploaded_image ****"
|
25
|
+
if image_params[:remove_image] && image_params[:remove_image] == "1"
|
26
|
+
self.destroy
|
27
|
+
elsif image_params[:image_file] && !image_params[:image_file].blank?
|
28
|
+
self.filename = image_params[:image_file].original_filename
|
29
|
+
@image_filename = self.filename
|
30
|
+
self.content_type = image_params[:image_file].content_type
|
31
|
+
@data = image_params[:image_file].tempfile.read
|
32
|
+
elsif self.new_record?
|
33
|
+
self.destroy
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def prepare_image
|
38
|
+
puts "**** prepare_image ****"
|
39
|
+
return unless @data
|
40
|
+
self.image_data = Magick::Image.from_blob(@data).first.resize_to_fit(100, 100).to_blob
|
41
|
+
self.image_thumb = Magick::Image.from_blob(@data).first.thumbnail(35, 35).to_blob
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
ActiveRecord::Base.send :include, Watarase::ImageHolder unless ActiveRecord::Base.include? Watarase::ImageHolder
|
data/lib/watarase/version.rb
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
class UsersController < ApplicationController
|
2
|
-
image_loadable :user, caches: true, expire_actions: [:update]
|
2
|
+
image_loadable :user, caches: true, expire_actions: [:update], save_actions: [:create, :update]
|
3
3
|
|
4
4
|
before_action :set_user, only: [:show, :edit, :update, :destroy]
|
5
5
|
|
6
6
|
# GET /users
|
7
7
|
# GET /users.json
|
8
8
|
def index
|
9
|
-
@users = User.all
|
9
|
+
@users = User.all.merge(includes: [:user_image_holder])
|
10
10
|
end
|
11
11
|
|
12
12
|
# GET /users/1
|
@@ -27,7 +27,7 @@ class UsersController < ApplicationController
|
|
27
27
|
# POST /users.json
|
28
28
|
def create
|
29
29
|
@user = User.new(user_params)
|
30
|
-
set_image_holder @user
|
30
|
+
#set_image_holder @user
|
31
31
|
|
32
32
|
respond_to do |format|
|
33
33
|
if @user.save
|
@@ -44,7 +44,7 @@ class UsersController < ApplicationController
|
|
44
44
|
# PATCH/PUT /users/1.json
|
45
45
|
def update
|
46
46
|
|
47
|
-
set_image_holder @user
|
47
|
+
#set_image_holder @user
|
48
48
|
|
49
49
|
respond_to do |format|
|
50
50
|
if @user.update(user_params)
|
@@ -1,18 +1,7 @@
|
|
1
1
|
class UserImageHolder < ActiveRecord::Base
|
2
|
-
|
2
|
+
|
3
|
+
image_holdable
|
4
|
+
|
3
5
|
belongs_to :user, primary_key: :username, foreign_key: :user_username
|
4
6
|
|
5
|
-
def uploaded_image= (image_params)
|
6
|
-
if image_params[:remove_image] && image_params[:remove_image] == "1"
|
7
|
-
self.destroy
|
8
|
-
elsif image_params[:image_file] && !image_params[:image_file].blank?
|
9
|
-
self.filename = image_params[:image_file].original_filename
|
10
|
-
self.content_type = image_params[:image_file].content_type
|
11
|
-
data = image_params[:image_file].tempfile.read
|
12
|
-
self.image_data = Image.from_blob(data).first.resize_to_fit(100, 100).to_blob
|
13
|
-
self.image_thumb = Image.from_blob(data).first.thumbnail(35, 35).to_blob
|
14
|
-
elsif self.new_record?
|
15
|
-
self.destroy
|
16
|
-
end
|
17
|
-
end
|
18
7
|
end
|
File without changes
|
@@ -1,22 +1,15 @@
|
|
1
1
|
# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/Fixtures.html
|
2
|
-
<%
|
3
|
-
def image_data
|
4
|
-
File.open(Rails.root.join('test/fixtures/images', 'default.png'), 'rb') do |f|
|
5
|
-
"!!binary \"#{Base64.strict_encode64(f.read)}\""
|
6
|
-
end
|
7
|
-
end
|
8
|
-
%>
|
9
2
|
|
10
3
|
one:
|
11
4
|
user_username: MyString1
|
12
|
-
filename:
|
13
|
-
content_type:
|
14
|
-
image_data:
|
15
|
-
image_thumb:
|
5
|
+
filename: MyString.png
|
6
|
+
content_type: MyString
|
7
|
+
image_data:
|
8
|
+
image_thumb:
|
16
9
|
|
17
10
|
two:
|
18
11
|
user_username: MyString2
|
19
|
-
filename:
|
20
|
-
content_type:
|
21
|
-
image_data:
|
22
|
-
image_thumb:
|
12
|
+
filename: MyString.jpg
|
13
|
+
content_type: MyString
|
14
|
+
image_data:
|
15
|
+
image_thumb:
|
@@ -4,11 +4,4 @@ class UserImageHolderTest < ActiveSupport::TestCase
|
|
4
4
|
# test "the truth" do
|
5
5
|
# assert true
|
6
6
|
# end
|
7
|
-
def setup
|
8
|
-
@user_image_holder = UserImageHolder.first
|
9
|
-
end
|
10
|
-
|
11
|
-
test "image holder has image handler" do
|
12
|
-
assert_respond_to(@user_image_holder, :user)
|
13
|
-
end
|
14
7
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: watarase
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- kobayashi-tbn
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-04-
|
11
|
+
date: 2013-04-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -75,8 +75,10 @@ extra_rdoc_files: []
|
|
75
75
|
files:
|
76
76
|
- lib/tasks/watarase_tasks.rake
|
77
77
|
- lib/watarase/controller.rb
|
78
|
+
- lib/watarase/extension_whitelist.rb
|
78
79
|
- lib/watarase/generators/uploader/uploader_generator.rb
|
79
|
-
- lib/watarase/
|
80
|
+
- lib/watarase/image_handler.rb
|
81
|
+
- lib/watarase/image_holder.rb
|
80
82
|
- lib/watarase/version.rb
|
81
83
|
- lib/watarase.rb
|
82
84
|
- MIT-LICENSE
|
@@ -124,8 +126,8 @@ files:
|
|
124
126
|
- test/dummy/config/routes.rb
|
125
127
|
- test/dummy/config.ru
|
126
128
|
- test/dummy/db/migrate/20130316163018_create_users.rb
|
127
|
-
- test/dummy/db/migrate/20130318134905_create_user_image_holders.rb
|
128
129
|
- test/dummy/db/migrate/20130324161507_create_posts.rb
|
130
|
+
- test/dummy/db/migrate/20130412174428_create_user_image_holders.rb
|
129
131
|
- test/dummy/db/schema.rb
|
130
132
|
- test/dummy/db/seeds.rb
|
131
133
|
- test/dummy/Gemfile
|
@@ -219,8 +221,8 @@ test_files:
|
|
219
221
|
- test/dummy/config/routes.rb
|
220
222
|
- test/dummy/config.ru
|
221
223
|
- test/dummy/db/migrate/20130316163018_create_users.rb
|
222
|
-
- test/dummy/db/migrate/20130318134905_create_user_image_holders.rb
|
223
224
|
- test/dummy/db/migrate/20130324161507_create_posts.rb
|
225
|
+
- test/dummy/db/migrate/20130412174428_create_user_image_holders.rb
|
224
226
|
- test/dummy/db/schema.rb
|
225
227
|
- test/dummy/db/seeds.rb
|
226
228
|
- test/dummy/Gemfile
|
data/lib/watarase/model.rb
DELETED
@@ -1,20 +0,0 @@
|
|
1
|
-
require 'active_record/base'
|
2
|
-
|
3
|
-
module Watarase
|
4
|
-
module Model
|
5
|
-
def self.included(model)
|
6
|
-
model.extend Watarase::ActsAsImageHandler
|
7
|
-
end
|
8
|
-
end
|
9
|
-
|
10
|
-
module ActsAsImageHandler
|
11
|
-
def acts_as_image_handler
|
12
|
-
image_holder = (self.name.underscore << '_' << Watarase.suffix).to_sym
|
13
|
-
self.send(:has_one, image_holder, primary_key: self.primary_key, foreign_key: "#{self.name.underscore}_#{self.primary_key}", autosave: true)
|
14
|
-
self.send(:attr_accessor, :remove_image)
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
ActiveRecord::Base.send :include, Watarase::Model unless ActiveRecord::Base.include? Watarase::Model
|
20
|
-
|