module Cassie::Statements::Statement::Limiting

Public Class Methods

included(base) click to toggle source
# File lib/cassie/statements/statement/limiting.rb, line 15
def self.included(base)
  base.instance_eval do
    attr_writer :limit
  end
  base.extend ClassMethods
end

Public Instance Methods

limit() click to toggle source
# File lib/cassie/statements/statement/limiting.rb, line 42
def limit
  return @limit if defined?(@limit)
  self.class.limit
end
with_limit(temp_limit) { || ... } click to toggle source
# File lib/cassie/statements/statement/limiting.rb, line 47
def with_limit(temp_limit)
  raise ArgumentError, "block required for passing temporary limit" unless block_given?
  define_limit_singleton(temp_limit)

  yield
ensure
  remove_limit_singleton
end

Protected Instance Methods

build_limit_str() click to toggle source
# File lib/cassie/statements/statement/limiting.rb, line 58
def build_limit_str
  return "" if limit.nil?

  "LIMIT #{limit}"
end

Private Instance Methods

assert_no_limit_singleton() click to toggle source
# File lib/cassie/statements/statement/limiting.rb, line 90
def assert_no_limit_singleton
  if singleton_methods.include?(:limit)
    raise NameError.new("A singleton method has already been defined for `limit`. `with_limit` can't be implemented.", :limit) unless jruby_issue_4228?
  end
end
define_limit_singleton(temp_limit) click to toggle source
Calls superclass method
# File lib/cassie/statements/statement/limiting.rb, line 72
def define_limit_singleton(temp_limit)
  assert_no_limit_singleton
  define_singleton_method(:limit) do
    return super() if jruby_issue_4228?
    temp_limit
  end
end
initialize_copy(other) click to toggle source
Calls superclass method
# File lib/cassie/statements/statement/limiting.rb, line 66
def initialize_copy(other)
  super
  @jruby_issue_4228 = false
  remove_limit_singleton
end
jruby_issue_4228?() click to toggle source
# File lib/cassie/statements/statement/limiting.rb, line 96
def jruby_issue_4228?
  defined?(@jruby_issue_4228) && @jruby_issue_4228
end
remove_limit_singleton() click to toggle source
# File lib/cassie/statements/statement/limiting.rb, line 80
def remove_limit_singleton
  if singleton_methods.include?(:limit)
    class << self
      remove_method :limit
    end
  end
rescue NameError
  @jruby_issue_4228 = true
end