Refactor Ransack::Adapters from conditionals to classes

This commit is contained in:
Jon Atack 2016-04-05 11:09:21 +02:00
parent 5bab95c2a1
commit 94a404c03a
5 changed files with 39 additions and 48 deletions

View File

@ -746,16 +746,10 @@ called on a `ransack` search returns a `Mongoid::Criteria` object:
@people = @q.result.active.order_by(updated_at: -1).limit(10)
```
_NOTE: Ransack currently works with either Active Record or Mongoid, but not
NOTE: Ransack currently works with either Active Record or Mongoid, but not
both in the same application. If both are present, Ransack will default to
Active Record only. Here is the code containing the logic:_
```ruby
@current_adapters ||= {
:active_record => defined?(::ActiveRecord::Base),
:mongoid => defined?(::Mongoid) && !defined?(::ActiveRecord::Base)
}
```
Active Record only. The logic is contained in
`Ransack::Adapters#instantiate_object_mapper` should you need to override it.
## Semantic Versioning

View File

@ -2,7 +2,7 @@ require 'active_support/core_ext'
require 'ransack/configuration'
require 'ransack/adapters'
Ransack::Adapters.require_constants
Ransack::Adapters.object_mapper.require_constants
module Ransack
extend Configuration
@ -31,6 +31,6 @@ require 'ransack/helpers'
require 'action_controller'
require 'ransack/translate'
Ransack::Adapters.require_adapter
Ransack::Adapters.object_mapper.require_adapter
ActionController::Base.helper Ransack::Helpers::FormHelper

View File

@ -1,63 +1,60 @@
module Ransack
module Adapters
# TODO: Refactor to remove conditionals
def self.current_adapters
@current_adapters ||= {
:active_record => defined?(::ActiveRecord::Base),
:mongoid => defined?(::Mongoid) && !defined?(::ActiveRecord::Base)
}
def self.object_mapper
@object_mapper ||= instantiate_object_mapper
end
def self.require_constants
if current_adapters[:mongoid]
require 'ransack/adapters/mongoid/ransack/constants'
def self.instantiate_object_mapper
if defined?(::ActiveRecord::Base)
ActiveRecordAdapter.new
elsif defined?(::Mongoid)
MongoidAdapter.new
end
end
if current_adapters[:active_record]
class ActiveRecordAdapter
def require_constants
require 'ransack/adapters/active_record/ransack/constants'
end
end
def self.require_adapter
if current_adapters[:active_record]
def require_adapter
require 'ransack/adapters/active_record/ransack/translate'
require 'ransack/adapters/active_record'
end
if current_adapters[:mongoid]
require 'ransack/adapters/mongoid/ransack/translate'
require 'ransack/adapters/mongoid'
end
end
def self.require_context
if current_adapters[:active_record]
def require_context
require 'ransack/adapters/active_record/ransack/visitor'
end
if current_adapters[:mongoid]
require 'ransack/adapters/mongoid/ransack/visitor'
end
end
def self.require_nodes
if current_adapters[:active_record]
def require_nodes
require 'ransack/adapters/active_record/ransack/nodes/condition'
end
if current_adapters[:mongoid]
require 'ransack/adapters/mongoid/ransack/nodes/condition'
def require_search
require 'ransack/adapters/active_record/ransack/context'
end
end
def self.require_search
if current_adapters[:active_record]
require 'ransack/adapters/active_record/ransack/context'
class MongoidAdapter
def require_constants
require 'ransack/adapters/mongoid/ransack/constants'
end
if current_adapters[:mongoid]
def require_adapter
require 'ransack/adapters/mongoid/ransack/translate'
require 'ransack/adapters/mongoid'
end
def require_context
require 'ransack/adapters/mongoid/ransack/visitor'
end
def require_nodes
require 'ransack/adapters/mongoid/ransack/nodes/condition'
end
def require_search
require 'ransack/adapters/mongoid/ransack/context'
end
end

View File

@ -1,5 +1,5 @@
require 'ransack/visitor'
Ransack::Adapters.require_context
Ransack::Adapters.object_mapper.require_context
module Ransack
class Context

View File

@ -3,6 +3,6 @@ require 'ransack/nodes/node'
require 'ransack/nodes/attribute'
require 'ransack/nodes/value'
require 'ransack/nodes/condition'
Ransack::Adapters.require_nodes
Ransack::Adapters.object_mapper.require_nodes
require 'ransack/nodes/sort'
require 'ransack/nodes/grouping'