From 8c0b9d5d1a54f97942b1765515cc9139b7f06902 Mon Sep 17 00:00:00 2001 From: Yuki Nishijima Date: Mon, 2 Dec 2013 05:21:49 +0900 Subject: [PATCH] Define page method when a AR class is defined Commit 92052eedf047d65df71cc0021a9df9df1e2fc36e looked good at the beginning. However, that causes a bug that kaminari's page_method_name config has no effect since the pagination method will be defined when `lib/kaminari/models/active_record_model_extension.rb` is loaded. Define that 'page' method when an AR class is actually defined so we will be able to change the name of the method properly. Fixes #481 --- .../models/active_record_model_extension.rb | 14 +++++++------- spec/models/active_record/scopes_spec.rb | 19 +++++++++++++++++++ 2 files changed, 26 insertions(+), 7 deletions(-) diff --git a/lib/kaminari/models/active_record_model_extension.rb b/lib/kaminari/models/active_record_model_extension.rb index f48b4c7..e4c8c8f 100644 --- a/lib/kaminari/models/active_record_model_extension.rb +++ b/lib/kaminari/models/active_record_model_extension.rb @@ -6,17 +6,17 @@ module Kaminari included do self.send(:include, Kaminari::ConfigurationMethods) - end - module ClassMethods # Fetch the values at the specified page number # Model.page(5) - define_method(Kaminari.config.page_method_name) do |num = nil| - limit(default_per_page).offset(default_per_page * ([num.to_i, 1].max - 1)).extending do - include Kaminari::ActiveRecordRelationMethods - include Kaminari::PageScopeMethods + eval <<-RUBY + def self.#{Kaminari.config.page_method_name}(num = nil) + limit(default_per_page).offset(default_per_page * ([num.to_i, 1].max - 1)).extending do + include Kaminari::ActiveRecordRelationMethods + include Kaminari::PageScopeMethods + end end - end + RUBY end end end diff --git a/spec/models/active_record/scopes_spec.rb b/spec/models/active_record/scopes_spec.rb index ce06489..44bfa64 100644 --- a/spec/models/active_record/scopes_spec.rb +++ b/spec/models/active_record/scopes_spec.rb @@ -2,6 +2,25 @@ require 'spec_helper' if defined? ActiveRecord + describe Kaminari::ActiveRecordModelExtension do + before do + Kaminari.configure do |config| + config.page_method_name = :per_page_kaminari + end + class Comment < ActiveRecord::Base; end + end + + subject { Comment } + it { should respond_to(:per_page_kaminari) } + it { should_not respond_to(:page) } + + after do + Kaminari.configure do |config| + config.page_method_name = :page + end + end + end + shared_examples_for 'the first page' do it { should have(25).users } its('first.name') { should == 'user001' }