Skip to content

Commit

Permalink
Refactor Ransack::Adapters from conditionals to classes
Browse files Browse the repository at this point in the history
  • Loading branch information
jonatack committed Apr 5, 2016
1 parent 5bab95c commit 94a404c
Show file tree
Hide file tree
Showing 5 changed files with 37 additions and 46 deletions.
12 changes: 3 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
4 changes: 2 additions & 2 deletions lib/ransack.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
require 'ransack/configuration'
require 'ransack/adapters'

Ransack::Adapters.require_constants
Ransack::Adapters.object_mapper.require_constants

module Ransack
extend Configuration
Expand Down Expand Up @@ -31,6 +31,6 @@ class UntraversableAssociationError < StandardError; end;
require 'action_controller'
require 'ransack/translate'

Ransack::Adapters.require_adapter
Ransack::Adapters.object_mapper.require_adapter

ActionController::Base.helper Ransack::Helpers::FormHelper
63 changes: 30 additions & 33 deletions lib/ransack/adapters.rb
Original file line number Diff line number Diff line change
@@ -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'
def require_context
require 'ransack/adapters/active_record/ransack/visitor'
end
end

def self.require_context
if current_adapters[:active_record]
require 'ransack/adapters/active_record/ransack/visitor'
def require_nodes
require 'ransack/adapters/active_record/ransack/nodes/condition'
end

if current_adapters[:mongoid]
require 'ransack/adapters/mongoid/ransack/visitor'
def require_search
require 'ransack/adapters/active_record/ransack/context'
end
end

def self.require_nodes
if current_adapters[:active_record]
require 'ransack/adapters/active_record/ransack/nodes/condition'
class MongoidAdapter
def require_constants
require 'ransack/adapters/mongoid/ransack/constants'
end

if current_adapters[:mongoid]
require 'ransack/adapters/mongoid/ransack/nodes/condition'
def require_adapter
require 'ransack/adapters/mongoid/ransack/translate'
require 'ransack/adapters/mongoid'
end
end

def self.require_search
if current_adapters[:active_record]
require 'ransack/adapters/active_record/ransack/context'
def require_context
require 'ransack/adapters/mongoid/ransack/visitor'
end

def require_nodes
require 'ransack/adapters/mongoid/ransack/nodes/condition'
end

if current_adapters[:mongoid]
def require_search
require 'ransack/adapters/mongoid/ransack/context'
end
end
Expand Down
2 changes: 1 addition & 1 deletion lib/ransack/context.rb
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
require 'ransack/visitor'
Ransack::Adapters.require_context
Ransack::Adapters.object_mapper.require_context

module Ransack
class Context
Expand Down
2 changes: 1 addition & 1 deletion lib/ransack/nodes.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,6 @@
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'

0 comments on commit 94a404c

Please sign in to comment.