Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add refile support #2385

Merged
merged 2 commits into from
Aug 20, 2015
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,9 @@ group :test do
gem 'paperclip', ['>= 3.4', '!= 4.3.0']
gem 'poltergeist', '~> 1.5'
gem 'rack-cache', require: 'rack/cache'
gem 'refile', '>= 0.5.5', require: 'refile/rails'
gem 'refile-mini_magick', '>= 0.1.0'
gem 'refile-mongoid', '>= 0.0.1'
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

refile-mongoid should go into :mongoid group, since it is only required for mongoid builds.

gem 'rspec-rails', '>= 2.14'
gem 'rubocop', '~> 0.31.0'
gem 'simplecov', '>= 0.9', require: false
Expand Down
3 changes: 3 additions & 0 deletions gemfiles/rails_4.0.gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,9 @@ group :test do
gem "paperclip", [">= 3.4", "!= 4.3.0"]
gem "poltergeist", "~> 1.5"
gem "rack-cache", :require => "rack/cache"
gem 'refile', '>= 0.5.5', require: 'refile/rails'
gem 'refile-mini_magick', '>= 0.1.0'
gem 'refile-mongoid', '>= 0.0.1'
gem "rspec-rails", ">= 2.14"
gem "rubocop", "~> 0.31.0"
gem "simplecov", ">= 0.9", :require => false
Expand Down
3 changes: 3 additions & 0 deletions gemfiles/rails_4.1.gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,9 @@ group :test do
gem "paperclip", [">= 3.4", "!= 4.3.0"]
gem "poltergeist", "~> 1.5"
gem "rack-cache", :require => "rack/cache"
gem 'refile', '>= 0.5.5', require: 'refile/rails'
gem 'refile-mini_magick', '>= 0.1.0'
gem 'refile-mongoid', '>= 0.0.1'
gem "rspec-rails", ">= 2.14"
gem "rubocop", "~> 0.31.0"
gem "simplecov", ">= 0.9", :require => false
Expand Down
3 changes: 3 additions & 0 deletions gemfiles/rails_4.2.gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,9 @@ group :test do
gem "paperclip", [">= 3.4", "!= 4.3.0"]
gem "poltergeist", "~> 1.5"
gem "rack-cache", :require => "rack/cache"
gem 'refile', '>= 0.5.5', require: 'refile/rails'
gem 'refile-mini_magick', '>= 0.1.0'
gem 'refile-mongoid', '>= 0.0.1'
gem "rspec-rails", ">= 2.14"
gem "rubocop", "~> 0.31.0"
gem "simplecov", ">= 0.9", :require => false
Expand Down
1 change: 1 addition & 0 deletions lib/rails_admin/config/fields.rb
Original file line number Diff line number Diff line change
Expand Up @@ -82,4 +82,5 @@ def self.register_factory(&block)
require 'rails_admin/config/fields/factories/paperclip'
require 'rails_admin/config/fields/factories/dragonfly'
require 'rails_admin/config/fields/factories/carrierwave'
require 'rails_admin/config/fields/factories/refile'
require 'rails_admin/config/fields/factories/association'
25 changes: 25 additions & 0 deletions lib/rails_admin/config/fields/factories/refile.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
require 'rails_admin/config/fields'
require 'rails_admin/config/fields/types'
require 'rails_admin/config/fields/types/file_upload'

RailsAdmin::Config::Fields.register_factory do |parent, properties, fields|
extensions = [:id, :filename, :size, :content_type]
model = parent.abstract_model.model
if (properties.name.to_s =~ /^(.+)_id$/) && defined?(::Refile) && model.ancestors.map(&:to_s).include?("Refile::Attachment(#{attachment_name = Regexp.last_match[1].to_sym})")
field = RailsAdmin::Config::Fields::Types.load(:refile).new(parent, attachment_name, properties)
children_fields = []
extensions.each do |ext|
children_column_name = "#{attachment_name}_#{ext}".to_sym
next unless child_properties = parent.abstract_model.properties.detect { |p| p.name.to_s == children_column_name.to_s }
children_field = fields.detect { |f| f.name == children_column_name } || RailsAdmin::Config::Fields.default_factory.call(parent, child_properties, fields)
children_field.hide
children_field.filterable(false)
children_fields << children_field.name
end
field.children_fields(children_fields)
fields << field
true
else
false
end
end
1 change: 1 addition & 0 deletions lib/rails_admin/config/fields/types/all.rb
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
require 'rails_admin/config/fields/types/file_upload'
require 'rails_admin/config/fields/types/paperclip'
require 'rails_admin/config/fields/types/carrierwave'
require 'rails_admin/config/fields/types/refile'
require 'rails_admin/config/fields/types/float'
require 'rails_admin/config/fields/types/has_and_belongs_to_many_association'
require 'rails_admin/config/fields/types/has_many_association'
Expand Down
27 changes: 27 additions & 0 deletions lib/rails_admin/config/fields/types/refile.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
require 'rails_admin/config/fields/base'
require 'rails_admin/config/fields/types/file_upload'

module RailsAdmin
module Config
module Fields
module Types
class Refile < RailsAdmin::Config::Fields::Types::FileUpload
RailsAdmin::Config::Fields::Types.register(self)

register_instance_option :thumb_method do
[:limit, 100, 100]
end

register_instance_option :delete_method do
"remove_#{name}"
end

def resource_url(thumb = [])
return nil unless value
Object.const_get(:Refile).attachment_url(bindings[:object], name, *thumb)
end
end
end
end
end
end
5 changes: 5 additions & 0 deletions spec/controllers/rails_admin/main_controller_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -325,6 +325,7 @@ class TeamWithNumberedPlayers < Team
field :paperclip_asset do
delete_method :delete_paperclip_asset
end
field :refile_asset
end
controller.params = HashWithIndifferentAccess.new(
'field_test' => {
Expand All @@ -336,6 +337,8 @@ class TeamWithNumberedPlayers < Team
'retained_dragonfly_asset' => 'test',
'paperclip_asset' => 'test',
'delete_paperclip_asset' => 'test',
'refile_asset' => 'test',
'remove_refile_asset' => 'test',
'should_not_be_here' => 'test',
},
)
Expand All @@ -351,6 +354,8 @@ class TeamWithNumberedPlayers < Team
'retained_dragonfly_asset' => 'test',
'paperclip_asset' => 'test',
'delete_paperclip_asset' => 'test',
'refile_asset' => 'test',
'remove_refile_asset' => 'test',
})
end

Expand Down
3 changes: 3 additions & 0 deletions spec/dummy_app/Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,9 @@ gem 'mini_magick', '>= 3.4'
gem 'mlb', '>= 0.7'
gem 'paperclip', '>= 3.4'
gem 'rails_admin', path: '../../'
gem 'refile', '>= 0.5.5', require: 'refile/rails'
gem 'refile-mini_magick', '>= 0.1.0'
gem 'refile-mongoid', '>= 0.0.1'

# Gems used only for assets and not required
# in production environments by default.
Expand Down
1 change: 1 addition & 0 deletions spec/dummy_app/app/active_record/field_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -11,4 +11,5 @@ class FieldTest < ActiveRecord::Base

dragonfly_accessor :dragonfly_asset
mount_uploader :carrierwave_asset, CarrierwaveUploader
attachment :refile_asset
end
5 changes: 5 additions & 0 deletions spec/dummy_app/app/mongoid/field_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ class FieldTest
include Mongoid::Paperclip
include ActiveModel::ForbiddenAttributesProtection
extend Dragonfly::Model
extend Refile::Mongoid::Attachment

field :name, type: String
field :title, type: String
Expand Down Expand Up @@ -50,6 +51,10 @@ class FieldTest
field :dragonfly_asset_uid
dragonfly_accessor :dragonfly_asset
mount_uploader :carrierwave_asset, CarrierwaveUploader
field :refile_asset_filename
field :refile_asset_size
field :refile_asset_content_type
attachment :refile_asset

validates :short_text, length: {maximum: 255}
end
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
class AddRefileToFieldTests < ActiveRecord::Migration
def change
add_column :field_tests, :refile_asset_id, :string
add_column :field_tests, :refile_asset_filename, :string
add_column :field_tests, :refile_asset_size, :string
add_column :field_tests, :refile_asset_content_type, :string
end
end
15 changes: 15 additions & 0 deletions spec/rails_admin/config/fields/base_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,12 @@ class CommentReversed < Tableless
expect(RailsAdmin.config(FieldTest).fields.detect { |f| f.name == :carrierwave_asset }.hidden?).to be_falsey
end
end

context 'of a Refile installation' do
it 'is a _id field' do
expect(RailsAdmin.config(FieldTest).fields.detect { |f| f.name == :refile_asset }.children_fields).to eq([:refile_asset_id, :refile_asset_filename, :refile_asset_size, :refile_asset_content_type])
end
end
end

describe '#form_default_value' do
Expand Down Expand Up @@ -257,6 +263,10 @@ class CommentReversed < Tableless
it 'of carrierwave should find the underlying column on the base table' do
expect(RailsAdmin.config(FieldTest).fields.detect { |f| f.name == :carrierwave_asset }.searchable_columns.collect { |c| c[:column] }).to eq(['field_tests.carrierwave_asset'])
end

it 'of refile should find the underlying column on the base table' do
expect(RailsAdmin.config(FieldTest).fields.detect { |f| f.name == :refile_asset }.searchable_columns.collect { |c| c[:column] }).to eq(['field_tests.refile_asset_id'])
end
end
end

Expand Down Expand Up @@ -288,6 +298,11 @@ class CommentReversed < Tableless
expect(RailsAdmin.config(FieldTest).fields.detect { |f| f.name == :carrierwave_asset }.searchable).to eq(:carrierwave_asset)
expect(RailsAdmin.config(FieldTest).fields.detect { |f| f.name == :carrierwave_asset }.sortable).to eq(:carrierwave_asset)
end

it 'of refile should target the first children field' do
expect(RailsAdmin.config(FieldTest).fields.detect { |f| f.name == :refile_asset }.searchable).to eq(:refile_asset_id)
expect(RailsAdmin.config(FieldTest).fields.detect { |f| f.name == :refile_asset }.sortable).to eq(:refile_asset_id)
end
end
end

Expand Down
2 changes: 2 additions & 0 deletions spec/rails_admin/config/fields/types/file_upload_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,13 @@
field :paperclip_asset do
delete_method :delete_paperclip_asset
end
field :refile_asset
end
end
expect(RailsAdmin.config(FieldTest).field(:carrierwave_asset).allowed_methods.collect(&:to_s)).to eq %w(carrierwave_asset remove_carrierwave_asset carrierwave_asset_cache)
expect(RailsAdmin.config(FieldTest).field(:dragonfly_asset).allowed_methods.collect(&:to_s)).to eq %w(dragonfly_asset remove_dragonfly_asset retained_dragonfly_asset)
expect(RailsAdmin.config(FieldTest).field(:paperclip_asset).allowed_methods.collect(&:to_s)).to eq %w(paperclip_asset delete_paperclip_asset)
expect(RailsAdmin.config(FieldTest).field(:refile_asset).allowed_methods.collect(&:to_s)).to eq %w(refile_asset remove_refile_asset)
end
end

Expand Down