diff options
Diffstat (limited to 'lib/arel/extensions')
-rw-r--r-- | lib/arel/extensions/array.rb | 13 | ||||
-rw-r--r-- | lib/arel/extensions/class.rb | 17 | ||||
-rw-r--r-- | lib/arel/extensions/hash.rb | 7 | ||||
-rw-r--r-- | lib/arel/extensions/nil_class.rb | 5 | ||||
-rw-r--r-- | lib/arel/extensions/object.rb | 19 | ||||
-rw-r--r-- | lib/arel/extensions/range.rb | 9 |
6 files changed, 70 insertions, 0 deletions
diff --git a/lib/arel/extensions/array.rb b/lib/arel/extensions/array.rb new file mode 100644 index 0000000000..793c06aad8 --- /dev/null +++ b/lib/arel/extensions/array.rb @@ -0,0 +1,13 @@ +class Array + def to_hash + Hash[*flatten] + end + + def to_sql(formatter = nil) + "(" + collect { |e| e.to_sql(formatter) }.join(', ') + ")" + end + + def inclusion_predicate_sql + "IN" + end +end
\ No newline at end of file diff --git a/lib/arel/extensions/class.rb b/lib/arel/extensions/class.rb new file mode 100644 index 0000000000..0e5b728c26 --- /dev/null +++ b/lib/arel/extensions/class.rb @@ -0,0 +1,17 @@ +class Class + def abstract(*methods) + methods.each do |method| + define_method method do + raise NotImplementedError + end + end + end + + def hash_on(delegatee) + define_method :eql? do |other| + self == other + end + + delegate :hash, :to => delegatee + end +end
\ No newline at end of file diff --git a/lib/arel/extensions/hash.rb b/lib/arel/extensions/hash.rb new file mode 100644 index 0000000000..7472b5aa73 --- /dev/null +++ b/lib/arel/extensions/hash.rb @@ -0,0 +1,7 @@ +class Hash + def bind(relation) + inject({}) do |bound, (key, value)| + bound.merge(key.bind(relation) => value.bind(relation)) + end + end +end
\ No newline at end of file diff --git a/lib/arel/extensions/nil_class.rb b/lib/arel/extensions/nil_class.rb new file mode 100644 index 0000000000..729c4cada7 --- /dev/null +++ b/lib/arel/extensions/nil_class.rb @@ -0,0 +1,5 @@ +class NilClass + def equality_predicate_sql + 'IS' + end +end
\ No newline at end of file diff --git a/lib/arel/extensions/object.rb b/lib/arel/extensions/object.rb new file mode 100644 index 0000000000..779098f7ea --- /dev/null +++ b/lib/arel/extensions/object.rb @@ -0,0 +1,19 @@ +class Object + def bind(relation) + Arel::Value.new(self, relation) + end + + def to_sql(formatter = nil) + formatter.scalar self + end + + def equality_predicate_sql + '=' + end + + def metaclass + class << self + self + end + end +end
\ No newline at end of file diff --git a/lib/arel/extensions/range.rb b/lib/arel/extensions/range.rb new file mode 100644 index 0000000000..d7329efe34 --- /dev/null +++ b/lib/arel/extensions/range.rb @@ -0,0 +1,9 @@ +class Range + def to_sql(formatter = nil) + formatter.range self.begin, self.end + end + + def inclusion_predicate_sql + "BETWEEN" + end +end
\ No newline at end of file |