diff --git a/app_generators/ambition_adapter/ambition_adapter_generator.rb b/app_generators/ambition_adapter/ambition_adapter_generator.rb index 359023d..5756fd1 100644 --- a/app_generators/ambition_adapter/ambition_adapter_generator.rb +++ b/app_generators/ambition_adapter/ambition_adapter_generator.rb @@ -29,7 +29,7 @@ class AmbitionAdapterGenerator < RubiGen::Base adapter_path = "lib/ambition/adapters/#{adapter_name}" %w( base query select slice sort ).each do |file| - m.template "lib/#{file}.rb.erb", "#{adapter_path}/#{file}.rb" + m.template "lib/adapter/#{file}.rb.erb", "#{adapter_path}/#{file}.rb" end m.template 'lib/init.rb.erb', "#{adapter_path}.rb" @@ -52,7 +52,7 @@ class AmbitionAdapterGenerator < RubiGen::Base protected def banner - "Coming soon" + "Usage: ambition_adapter adapter_name" end def add_options!(opts) diff --git a/app_generators/ambition_adapter/templates/lib/adapter/base.rb.erb b/app_generators/ambition_adapter/templates/lib/adapter/base.rb.erb new file mode 100644 index 0000000..3d42995 --- /dev/null +++ b/app_generators/ambition_adapter/templates/lib/adapter/base.rb.erb @@ -0,0 +1,12 @@ +module Ambition + module Adapters + module <%= adapter_module %> + class Base + ## + # Extract common functionality into this class. + # All your classes, by default, inherit from this + # one -- Query and the Translators. + end + end + end +end diff --git a/app_generators/ambition_adapter/templates/lib/adapter/query.rb.erb b/app_generators/ambition_adapter/templates/lib/adapter/query.rb.erb new file mode 100644 index 0000000..1908b8c --- /dev/null +++ b/app_generators/ambition_adapter/templates/lib/adapter/query.rb.erb @@ -0,0 +1,52 @@ +=begin + +These methods are king: + + - owner + - clauses + - stash + ++owner+ is the class from which the request was generated. + +User.select { |u| u.name == 'Pork' } +# => owner == User + ++clauses+ is the hash of translated arrays, keyed by processors + +User.select { |u| u.name == 'Pork' } +# => clauses == { :select => [ "users.name = 'Pork'" ] } + ++stash+ is your personal private stash. A hash you can use for +keeping stuff around. + +User.select { |u| u.profile.name == 'Pork' } +# => stash == { :include => [ :profile ] } + +The above is totally arbitrary. It's basically a way for your +translators to talk to each other and, more importantly, to the Query +object. + +=end +module Ambition + module Adapters + module <%= adapter_module %> + class Query < Base + def kick + raise "Example: owner.find(:all, to_hash)" + end + + def size + raise "Example: owner.count(to_hash)" + end + + def to_hash + raise "Not implemented" + end + + def to_s + raise "Not implemented" + end + end + end + end +end diff --git a/app_generators/ambition_adapter/templates/lib/adapter/select.rb.erb b/app_generators/ambition_adapter/templates/lib/adapter/select.rb.erb new file mode 100644 index 0000000..0c66546 --- /dev/null +++ b/app_generators/ambition_adapter/templates/lib/adapter/select.rb.erb @@ -0,0 +1,100 @@ +## +# The format of the documentation herein is: +# +# >> method with block +# => methods on this class called by Ambition (with arguments) +# +module Ambition + module Adapters + module <%= adapter_module %> + class Select < Base + # >> select { |u| u.name == 'chris' } + # => #call(:name) + def call(method) + raise "Not implemented." + end + + # >> select { |u| u.name.downcase == 'chris' } + # => #call(:name, :downcase) + def chained_call(*methods) + # An idiom here is to call the chained method and pass it + # the first method. + # + # if respond_to? methods[1] + # send(methods[1], methods[0]) + # end + # + # In the above example, this translates to calling: + # + # #downcase(:name) + # + raise "Not implemented." + end + + # && + # >> select { |u| u.name == 'chris' && u.age == 22 } + # => #both( processed left side, processed right side ) + def both(left, right) + raise "Not implemented." + end + + # || + # >> select { |u| u.name == 'chris' || u.age == 22 } + # => #either( processed left side, processed right side ) + def either(left, right) + raise "Not implemented." + end + + # >> select { |u| u.name == 'chris' } + # => #==( call(:name), 'chris' ) + def ==(left, right) + raise "Not implemented." + end + + # != + # >> select { |u| u.name != 'chris' } + # => #not_equal( call(:name), 'chris' ) + def not_equal(left, right) + raise "Not implemented." + end + + # >> select { |u| u.name =~ 'chris' } + # => #=~( call(:name), 'chris' ) + def =~(left, right) + raise "Not implemented." + end + + # !~ + # >> select { |u| u.name !~ 'chris' } + # => #not_regexp( call(:name), 'chris' ) + def not_regexp(left, right) + raise "Not implemented." + end + + ## + # Etc. + def <(left, right) + raise "Not implemented." + end + + def >(left, right) + raise "Not implemented." + end + + def >=(left, right) + raise "Not implemented." + end + + def <=(left, right) + raise "Not implemented." + end + + # >> select { |u| [1, 2, 3].include? u.id } + # => #include?( [1, 2, 3], call(:id) ) + def include?(left, right) + raise "Not implemented." + end + end + end + end +end diff --git a/app_generators/ambition_adapter/templates/lib/adapter/slice.rb.erb b/app_generators/ambition_adapter/templates/lib/adapter/slice.rb.erb new file mode 100644 index 0000000..a974c0e --- /dev/null +++ b/app_generators/ambition_adapter/templates/lib/adapter/slice.rb.erb @@ -0,0 +1,19 @@ +module Ambition + module Adapters + module <%= adapter_module %> + class Slice < Base + # >> User.first(5) + # => #slice(0, 5) + # + # >> User.first + # => #slice(0, 1) + # + # >> User[10, 20] + # => #slice(10, 20) + def slice(start, length) + raise "Not implemented." + end + end + end + end +end diff --git a/app_generators/ambition_adapter/templates/lib/adapter/sort.rb.erb b/app_generators/ambition_adapter/templates/lib/adapter/sort.rb.erb new file mode 100644 index 0000000..4aea427 --- /dev/null +++ b/app_generators/ambition_adapter/templates/lib/adapter/sort.rb.erb @@ -0,0 +1,43 @@ +module Ambition + module Adapters + module <%= adapter_module %> + class Sort < Base + # >> sort_by { |u| u.age } + # => #sort_by(:age) + def sort_by(method) + raise "Not implemented." + end + + # >> sort_by { |u| -u.age } + # => #reverse_sort_by(:age) + def reverse_sort_by(method) + raise "Not implemented." + end + + # >> sort_by { |u| u.profile.name } + # => #chained_sort_by(:profile, :name) + def chained_sort_by(receiver, method) + raise "Not implemented." + end + + # >> sort_by { |u| -u.profile.name } + # => #chained_reverse_sort_by(:profile, :name) + def chained_reverse_sort_by(receiver, method) + raise "Not implemented." + end + + # >> sort_by(&:name) + # => #to_proc(:name) + def to_proc(symbol) + raise "Not implemented." + end + + # >> sort_by { rand } + # => #rand + def rand + raise "Not implemented." + end + end + end + end +end diff --git a/app_generators/ambition_adapter/templates/lib/base.rb.erb b/app_generators/ambition_adapter/templates/lib/base.rb.erb deleted file mode 100644 index 3d42995..0000000 --- a/app_generators/ambition_adapter/templates/lib/base.rb.erb +++ /dev/null @@ -1,12 +0,0 @@ -module Ambition - module Adapters - module <%= adapter_module %> - class Base - ## - # Extract common functionality into this class. - # All your classes, by default, inherit from this - # one -- Query and the Translators. - end - end - end -end diff --git a/app_generators/ambition_adapter/templates/lib/query.rb.erb b/app_generators/ambition_adapter/templates/lib/query.rb.erb deleted file mode 100644 index 1908b8c..0000000 --- a/app_generators/ambition_adapter/templates/lib/query.rb.erb +++ /dev/null @@ -1,52 +0,0 @@ -=begin - -These methods are king: - - - owner - - clauses - - stash - -+owner+ is the class from which the request was generated. - -User.select { |u| u.name == 'Pork' } -# => owner == User - -+clauses+ is the hash of translated arrays, keyed by processors - -User.select { |u| u.name == 'Pork' } -# => clauses == { :select => [ "users.name = 'Pork'" ] } - -+stash+ is your personal private stash. A hash you can use for -keeping stuff around. - -User.select { |u| u.profile.name == 'Pork' } -# => stash == { :include => [ :profile ] } - -The above is totally arbitrary. It's basically a way for your -translators to talk to each other and, more importantly, to the Query -object. - -=end -module Ambition - module Adapters - module <%= adapter_module %> - class Query < Base - def kick - raise "Example: owner.find(:all, to_hash)" - end - - def size - raise "Example: owner.count(to_hash)" - end - - def to_hash - raise "Not implemented" - end - - def to_s - raise "Not implemented" - end - end - end - end -end diff --git a/app_generators/ambition_adapter/templates/lib/select.rb.erb b/app_generators/ambition_adapter/templates/lib/select.rb.erb deleted file mode 100644 index 0c66546..0000000 --- a/app_generators/ambition_adapter/templates/lib/select.rb.erb +++ /dev/null @@ -1,100 +0,0 @@ -## -# The format of the documentation herein is: -# -# >> method with block -# => methods on this class called by Ambition (with arguments) -# -module Ambition - module Adapters - module <%= adapter_module %> - class Select < Base - # >> select { |u| u.name == 'chris' } - # => #call(:name) - def call(method) - raise "Not implemented." - end - - # >> select { |u| u.name.downcase == 'chris' } - # => #call(:name, :downcase) - def chained_call(*methods) - # An idiom here is to call the chained method and pass it - # the first method. - # - # if respond_to? methods[1] - # send(methods[1], methods[0]) - # end - # - # In the above example, this translates to calling: - # - # #downcase(:name) - # - raise "Not implemented." - end - - # && - # >> select { |u| u.name == 'chris' && u.age == 22 } - # => #both( processed left side, processed right side ) - def both(left, right) - raise "Not implemented." - end - - # || - # >> select { |u| u.name == 'chris' || u.age == 22 } - # => #either( processed left side, processed right side ) - def either(left, right) - raise "Not implemented." - end - - # >> select { |u| u.name == 'chris' } - # => #==( call(:name), 'chris' ) - def ==(left, right) - raise "Not implemented." - end - - # != - # >> select { |u| u.name != 'chris' } - # => #not_equal( call(:name), 'chris' ) - def not_equal(left, right) - raise "Not implemented." - end - - # >> select { |u| u.name =~ 'chris' } - # => #=~( call(:name), 'chris' ) - def =~(left, right) - raise "Not implemented." - end - - # !~ - # >> select { |u| u.name !~ 'chris' } - # => #not_regexp( call(:name), 'chris' ) - def not_regexp(left, right) - raise "Not implemented." - end - - ## - # Etc. - def <(left, right) - raise "Not implemented." - end - - def >(left, right) - raise "Not implemented." - end - - def >=(left, right) - raise "Not implemented." - end - - def <=(left, right) - raise "Not implemented." - end - - # >> select { |u| [1, 2, 3].include? u.id } - # => #include?( [1, 2, 3], call(:id) ) - def include?(left, right) - raise "Not implemented." - end - end - end - end -end diff --git a/app_generators/ambition_adapter/templates/lib/slice.rb.erb b/app_generators/ambition_adapter/templates/lib/slice.rb.erb deleted file mode 100644 index a974c0e..0000000 --- a/app_generators/ambition_adapter/templates/lib/slice.rb.erb +++ /dev/null @@ -1,19 +0,0 @@ -module Ambition - module Adapters - module <%= adapter_module %> - class Slice < Base - # >> User.first(5) - # => #slice(0, 5) - # - # >> User.first - # => #slice(0, 1) - # - # >> User[10, 20] - # => #slice(10, 20) - def slice(start, length) - raise "Not implemented." - end - end - end - end -end diff --git a/app_generators/ambition_adapter/templates/lib/sort.rb.erb b/app_generators/ambition_adapter/templates/lib/sort.rb.erb deleted file mode 100644 index 4aea427..0000000 --- a/app_generators/ambition_adapter/templates/lib/sort.rb.erb +++ /dev/null @@ -1,43 +0,0 @@ -module Ambition - module Adapters - module <%= adapter_module %> - class Sort < Base - # >> sort_by { |u| u.age } - # => #sort_by(:age) - def sort_by(method) - raise "Not implemented." - end - - # >> sort_by { |u| -u.age } - # => #reverse_sort_by(:age) - def reverse_sort_by(method) - raise "Not implemented." - end - - # >> sort_by { |u| u.profile.name } - # => #chained_sort_by(:profile, :name) - def chained_sort_by(receiver, method) - raise "Not implemented." - end - - # >> sort_by { |u| -u.profile.name } - # => #chained_reverse_sort_by(:profile, :name) - def chained_reverse_sort_by(receiver, method) - raise "Not implemented." - end - - # >> sort_by(&:name) - # => #to_proc(:name) - def to_proc(symbol) - raise "Not implemented." - end - - # >> sort_by { rand } - # => #rand - def rand - raise "Not implemented." - end - end - end - end -end