aboutsummaryrefslogtreecommitdiffstats
path: root/lib/arel/extensions
diff options
context:
space:
mode:
Diffstat (limited to 'lib/arel/extensions')
-rw-r--r--lib/arel/extensions/array.rb13
-rw-r--r--lib/arel/extensions/class.rb17
-rw-r--r--lib/arel/extensions/hash.rb7
-rw-r--r--lib/arel/extensions/nil_class.rb5
-rw-r--r--lib/arel/extensions/object.rb19
-rw-r--r--lib/arel/extensions/range.rb9
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