Created
September 2, 2015 15:23
-
-
Save bogdan/f4a1e65632d046e7f6cc to your computer and use it in GitHub Desktop.
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
module Datagrid | |
module Drivers | |
class Sequel < AbstractDriver #:nodoc: | |
def self.match?(scope) | |
return false unless defined?(::Sequel) | |
if scope.is_a?(Class) | |
scope.ancestors.include?(::Sequel::Model) | |
else | |
scope.is_a?(::Sequel::Dataset) | |
end | |
end | |
def to_scope(scope) | |
return scope if scope.is_a?(::Sequel::Dataset) | |
scope.where | |
end | |
def append_column_queries(assets, columns) | |
super | |
end | |
def where(scope, attribute, value) | |
scope.where(attribute => value) | |
end | |
def asc(scope, order) | |
scope.order(order) | |
end | |
def desc(scope, order) | |
scope.order(::Sequel.desc(order)) | |
end | |
def reverse_order(scope) | |
super | |
end | |
def default_order(scope, column_name) | |
prefix_table_name(scope, column_name) | |
end | |
def greater_equal(scope, field, value) | |
scope.where(["#{prefix_table_name(scope, field)} >= ?", value]) | |
end | |
def less_equal(scope, field, value) | |
scope.where(["#{prefix_table_name(scope, field)} <= ?", value]) | |
end | |
def has_column?(scope, column_name) | |
scope.columns.include?(column_name.to_sym) | |
end | |
def column_names(scope) | |
scope.columns | |
end | |
def is_timestamp?(scope, column_name) | |
column_type(scope, column_name) == :datetime | |
end | |
def contains(scope, field, value) | |
field = prefix_table_name(scope, field) | |
scope.where(Sequel.like(field, "%#{value}%")) | |
end | |
def normalized_column_type(scope, field) | |
type = column_type(scope, field) | |
return nil unless type | |
{ | |
[:string, :blob, :time] => :string, | |
[:integer, :primary_key] => :integer, | |
[:float, :decimal] => :float, | |
[:date] => :date, | |
[:datetime] => :datetime, | |
[:boolean] => :boolean | |
}.each do |keys, value| | |
return value if keys.include?(type) | |
end | |
end | |
def default_cache_key(asset) | |
asset.id || raise(NotImplementedError) | |
end | |
protected | |
def prefix_table_name(scope, field) | |
has_column?(scope, field) ? [scope.row_proc.table_name, field].join(".") : field | |
end | |
def column_type(scope, field) | |
has_column?(scope, field) ? scope.row_proc.db_schema[field.to_sym][:type] : nil | |
end | |
end | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment