forked from gzigzigzeo/carrierwave-meta
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Victor Sokolov
committed
Aug 15, 2011
0 parents
commit b837d4c
Showing
18 changed files
with
399 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
*.gem | ||
.bundle | ||
Gemfile.lock | ||
pkg/* | ||
tmp/* |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
source "http://rubygems.org" | ||
|
||
# Specify your gem's dependencies in carrierwave-meta.gemspec | ||
gemspec |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
require 'bundler/gem_tasks' | ||
require 'rspec/core/rake_task' | ||
|
||
RSpec::Core::RakeTask.new(:spec) | ||
task :default => :spec |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
# -*- encoding: utf-8 -*- | ||
$:.push File.expand_path("../lib", __FILE__) | ||
require "carrierwave-meta/version" | ||
|
||
Gem::Specification.new do |s| | ||
s.name = "carrierwave-meta" | ||
s.version = Carrierwave::Meta::VERSION | ||
s.authors = ["Victor Sokolov"] | ||
s.email = ["gzigzigzi@gmail.com"] | ||
s.homepage = "http://github.com/gzigzigzeo/carrierwave-meta" | ||
s.summary = %q{} | ||
s.description = %q{} | ||
|
||
s.rubyforge_project = "carrierwave-meta" | ||
|
||
s.files = `git ls-files`.split("\n") | ||
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n") | ||
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) } | ||
s.require_paths = ["lib"] | ||
|
||
s.add_dependency(%q<carrierwave>, [">= 0.5.7"]) | ||
s.add_dependency(%q<activesupport>, [">= 3.0"]) | ||
s.add_development_dependency(%q<rspec-rails>, ">= 2.6") | ||
s.add_development_dependency(%q<sqlite3-ruby>) | ||
s.add_development_dependency(%q<rmagick>) | ||
s.add_development_dependency(%q<mime-types>) | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
require 'active_support/concern' | ||
require "carrierwave-meta/version" | ||
require 'carrierwave-meta/model_delegate_attribute' | ||
require 'carrierwave-meta/store_meta' |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
module CarrierWave | ||
module ModelDelegateAttribute | ||
extend ::ActiveSupport::Concern | ||
|
||
module ClassMethods | ||
def model_delegate_attribute(attribute, default = nil) | ||
attr_accessor attribute | ||
|
||
before :remove, :"reset_#{attribute}" | ||
|
||
var_name = :"@#{attribute}" | ||
|
||
define_method :"#{attribute}" do | ||
model_accessor = model_getter_name(attribute) | ||
value = instance_variable_get(var_name) | ||
value ||= self.model.send(model_accessor) if self.model.present? && self.model.respond_to?(model_accessor) | ||
value ||= default | ||
instance_variable_set(var_name, value) | ||
end | ||
|
||
define_method :"#{attribute}=" do |value| | ||
model_accessor = model_getter_name(attribute) | ||
instance_variable_set(var_name, value) | ||
if self.model.present? && self.model.respond_to?(:"#{model_accessor}=") && !self.model.destroyed? | ||
self.model.send(:"#{model_accessor}=", value) | ||
end | ||
end | ||
|
||
define_method :"reset_#{attribute}" do | ||
self.send(:"#{attribute}=", default) | ||
send(:"#{attribute}=", default) | ||
end | ||
end | ||
end | ||
|
||
module InstanceMethods | ||
private | ||
def model_getter_name(attribute) | ||
version_name.present? ? "#{version_name}_#{attribute}" : attribute | ||
end | ||
end | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,53 @@ | ||
module CarrierWave | ||
module Meta | ||
extend ActiveSupport::Concern | ||
|
||
included do | ||
include CarrierWave::ModelDelegateAttribute | ||
|
||
after :retrieve_from_cache, :store_meta | ||
|
||
model_delegate_attribute :content_type, '' | ||
model_delegate_attribute :file_size, 0 | ||
model_delegate_attribute :image_size, [] | ||
model_delegate_attribute :width, 0 | ||
model_delegate_attribute :height, 0 | ||
end | ||
|
||
module InstanceMethods | ||
def store_meta(file = nil) | ||
puts 'before' | ||
if self.file.present? | ||
puts 'in' | ||
dimensions = get_dimensions | ||
width, height = dimensions | ||
puts dimensions.inspect | ||
puts self.file.inspect | ||
self.content_type = self.file.content_type | ||
self.file_size = self.file.size | ||
self.image_size = dimensions | ||
self.width = width | ||
self.height = height | ||
end | ||
end | ||
|
||
private | ||
def get_dimensions | ||
[].tap do |size| | ||
puts 'started' | ||
if self.file.content_type =~ /image/ | ||
manipulate! do |img| | ||
if img.is_a?(::Magick::Image) | ||
size << img.columns | ||
size << img.rows | ||
else | ||
raise "Only RMagick is supported yet. Fork and update it." | ||
end | ||
img | ||
end | ||
end | ||
end | ||
end | ||
end | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
module Carrierwave | ||
module Meta | ||
VERSION = "0.0.1" | ||
end | ||
end |
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file not shown.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,69 @@ | ||
require 'spec_helper' | ||
|
||
describe TestDelegateUploader do | ||
let(:values) { subject.class::VALUES } | ||
let(:default_values) { subject.class::DEFAULT_VALUES } | ||
let(:file) { File.open("spec/fixtures/big.jpg") } | ||
let(:obj) { TestModel.new } | ||
|
||
before do | ||
obj.destroyed = false | ||
end | ||
|
||
def uploader_values_are_correct(uploader) | ||
uploader.x.should eq(values[:x]) | ||
uploader.dimensions.should eq(values[:dimensions]) | ||
uploader.version.x.should eq(values[:version_x]) | ||
uploader.version.dimensions.should eq(values[:version_dimensions]) | ||
end | ||
|
||
def obj_values_are_correct(obj) | ||
obj.x.should eq(values[:x]) | ||
obj.dimensions.should eq(values[:dimensions]) | ||
obj.version_x.should eq(values[:version_x]) | ||
obj.version_dimensions.should eq(values[:version_dimensions]) | ||
end | ||
|
||
def uploader_values_are_default(obj) | ||
obj.x.should eq(default_values[:x]) | ||
obj.dimensions.should eq(default_values[:dimensions]) | ||
obj.version.x.should eq(default_values[:x]) | ||
obj.version.dimensions.should eq(default_values[:dimensions]) | ||
end | ||
|
||
it "model receives values after process done" do | ||
uploader = TestDelegateUploader.new(obj, :image) | ||
uploader.cache!(file) | ||
|
||
uploader_values_are_correct(uploader) | ||
obj_values_are_correct(obj) | ||
end | ||
|
||
it "resets values to default after file is removed" do | ||
uploader = TestDelegateUploader.new(obj, :image) | ||
uploader.store!(file) | ||
|
||
uploader_values_are_correct(uploader) | ||
|
||
# CarrierWave's file is removed in after_destroy callback. Model attributes are freezed after destroy. | ||
# Let mock this case. | ||
obj.x.freeze | ||
obj.destroyed = true | ||
uploader.remove! | ||
|
||
uploader_values_are_default(uploader) | ||
obj_values_are_correct(obj) | ||
end | ||
|
||
it "tries to receive value from a model when file was not processed at this time" do | ||
uploader = TestDelegateUploader.new(obj, :image) | ||
uploader.store!(file) | ||
|
||
uploader_values_are_correct(uploader) | ||
|
||
uploader = TestDelegateUploader.new(obj, :image) | ||
uploader.retrieve_from_store!(File.basename(file.path)) | ||
|
||
obj_values_are_correct(obj) | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,60 @@ | ||
require 'spec_helper' | ||
|
||
describe TestUploader do | ||
ORIGINAL_SIZE = [600, 277] | ||
VERSION_SIZE = [200, 200] | ||
|
||
let(:file) { File.open("spec/fixtures/big.jpg") } | ||
let(:obj) { TestModel.new } | ||
|
||
def uploader_values_are_correct(uploader) | ||
uploader.width.should eq(ORIGINAL_SIZE[0]) | ||
uploader.height.should eq(ORIGINAL_SIZE[1]) | ||
uploader.dimensions.should eq(ORIGINAL_SIZE) | ||
uploader.content_type.should eq(Mime::Type.for(file)) | ||
uploader.file_size.should eq(file.size) | ||
|
||
uploader.version.width.should eq(VERSION_SIZE[0]) | ||
uploader.version.height.should eq(VERSION_SIZE[1]) | ||
|
||
end | ||
|
||
def uploader_values_are_correct(obj) | ||
obj.width.should eq(ORIGINAL_SIZE[0]) | ||
obj.height.should eq(ORIGINAL_SIZE[1]) | ||
end | ||
|
||
context "detached uploader" do | ||
it "stores metadata after cache!" do | ||
uploader = TestUploader.new | ||
# uploader.cache!(file) | ||
# uploader_values_are_correct(uploader) | ||
end | ||
|
||
it "stores metadata after store!" do | ||
uploader = TestUploader.new | ||
# uploader.store!(file) | ||
# uploader_values_are_correct(uploader) | ||
end | ||
|
||
it "has metadata after cache!/retrieve_from_cache!" do | ||
uploader = TestUploader.new | ||
uploader.cache!(file) | ||
cache_name = uploader.cache_name | ||
puts uploader.image_size.inspect | ||
puts uploader.width | ||
puts '---' | ||
uploader = TestUploader.new | ||
uploader.retrieve_from_cache!(cache_name) | ||
puts '---' | ||
uploader_values_are_correct(uploader) | ||
end | ||
|
||
it "has metadata after store!/retrieve_from_store!" do | ||
uploader = TestUploader.new | ||
# uploader.store!(file) | ||
# uploader_values_are_correct(uploader) | ||
# uploader.retrieve_from_store!(File.basename(file.path)) | ||
end | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
$LOAD_PATH << "." unless $LOAD_PATH.include?(".") | ||
|
||
begin | ||
require "bundler" | ||
Bundler.setup | ||
Bundler.require | ||
rescue Bundler::GemNotFound | ||
raise RuntimeError, "Bundler couldn't find some gems." + | ||
"Did you run `bundle install`?" | ||
end | ||
|
||
#require 'logger' | ||
|
||
#ActiveRecord::Base.establish_connection( | ||
# "adapter" => "sqlite3", | ||
# "database" => ":memory:" | ||
#) | ||
|
||
#require 'support/schema' | ||
require 'carrierwave' | ||
require 'carrierwave-meta' | ||
require 'support/test_delegate_uploader' | ||
require 'support/test_uploader' | ||
require 'support/test_model' | ||
|
||
RSpec.configure do |config| | ||
config.before do | ||
FileUtils.rm_rf('tmp') | ||
end | ||
end | ||
|
||
$: << File.join(File.dirname(__FILE__), '..', 'lib') |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
ActiveRecord::Schema.define :version => 0 do | ||
create_table "test_models", :force => true do |t| | ||
t.string :image | ||
|
||
t.integer :image_width | ||
t.integer :image_height | ||
t.string :image_content_type | ||
t.integer :image_file_size | ||
|
||
t.integer :image_version_width | ||
t.integer :image_version_height | ||
t.integer :image_version_file_size | ||
t.string :image_version_content_type | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
class TestDelegateUploader < CarrierWave::Uploader::Base | ||
VALUES = { | ||
:x => 5, | ||
:version_x => 10, | ||
:dimensions => [1, 1], | ||
:version_dimensions => [2, 2] | ||
} | ||
|
||
DEFAULT_VALUES = { | ||
:x => 0, | ||
:dimensions => [] | ||
} | ||
|
||
storage :file | ||
|
||
def store_dir | ||
"tmp/store" | ||
end | ||
|
||
def cache_dir | ||
"tmp/cache" | ||
end | ||
|
||
include CarrierWave::ModelDelegateAttribute | ||
|
||
model_delegate_attribute :x, DEFAULT_VALUES[:x] | ||
model_delegate_attribute :dimensions, DEFAULT_VALUES[:dimensions] | ||
|
||
process :set_values | ||
version :version do | ||
process :set_values_for_version | ||
end | ||
|
||
def set_values | ||
self.x = VALUES[:x] | ||
self.dimensions = VALUES[:dimensions] | ||
end | ||
|
||
def set_values_for_version | ||
self.x = VALUES[:version_x] | ||
self.dimensions = VALUES[:version_dimensions] | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
class TestModel | ||
attr_accessor :x | ||
attr_accessor :dimensions | ||
attr_accessor :version_x | ||
attr_accessor :version_dimensions | ||
attr_accessor :destroyed | ||
|
||
def destroyed? | ||
destroyed | ||
end | ||
end |
Oops, something went wrong.