tfe-pox_paginate 0.1.1.1

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG ADDED
@@ -0,0 +1,8 @@
1
+ == Coming Soon
2
+ * Support for Rails 3.0.0.rc
3
+
4
+ == 0.1.1
5
+ * Updated dependencies to require < 3.0.0 to avoid conflicts
6
+
7
+ == 0.1.0
8
+ * First release
data/README.rdoc ADDED
@@ -0,0 +1,60 @@
1
+ = PoxPaginate 0.1.1
2
+
3
+ PoxPaginate is an extension to WillPaginate and ActiveResource that makes it possible to transparently paginate over a collection of XML serialised resources.
4
+
5
+ This gem is based on our experience building largish distributed systems consisting of multiple Rails apps integrated over POX (Plain Old XML). Yes, it is in production. No, unfortunately we aren't allowed to talk about it.
6
+
7
+ == Installation
8
+
9
+ PoxPaginate is available as a gem.
10
+ gem install pox_paginate
11
+
12
+ and in your Rails environment.rb
13
+ config.gem "pox_paginate", :version => '>= 0.1.0', :lib => "pox_paginate"
14
+
15
+ We also strongly recommend you use Ruby LibXML or Nokogiri rather than the standard REXML for deserialisation. While PoxPaginate supports all three, REXML is simply too slow for use in production. To switch to using either gem:
16
+ (sudo) gem install libxml-ruby
17
+ or
18
+ (sudo) gem install nokogiri
19
+
20
+ After this, you need to instruct Rails to use them. In environment.rb, do
21
+ ActiveSupport::XmlMini.backend = 'LibXML'
22
+ or
23
+ ActiveSupport::XmlMini.backend = 'Nokogiri'
24
+
25
+ Before you ask, yes we're working on adding support for jdom so PoxPaginate can be used on JRuby :)
26
+
27
+ == Usage
28
+
29
+ When constructing the xml serialised form of a resource in a controller, add pagination - like so:
30
+ class ProductsController < ApplicationController
31
+
32
+ # GET /products
33
+ # GET /products.xml
34
+ def index
35
+ @products = Product.paginate :page => params[:page], :per_page => params[:per_page]
36
+ respond_to do |format|
37
+ format.html # index.html.erb
38
+ format.xml { render :xml => @products }
39
+ end
40
+ end
41
+ ...
42
+ ...
43
+ ...
44
+ end
45
+
46
+ PoxPaginate extends WillPaginate::Collection to add 'current_page,' 'per_page' and 'total_entries' as attributes on the root node of the collection xml.
47
+
48
+ On the client, you do the usual:
49
+ class Product < ActiveResource::Base
50
+ self.site = 'http://oogabooga.in'
51
+ end
52
+
53
+ Now whenever you do
54
+ Product.find(:all, :params => {:page => 2, :per_page => 5})
55
+
56
+ PoxPaginate will kick in if pagination related attributes are present on the root node, and will result in the creation of a PoxPaginate::RemoteCollection, which is a subclass of WillPaginate::Collection and so behaves in exactly the same manner.
57
+
58
+ === Note
59
+ * PoxPaginate currently overrides the Hash.from_xml method to fix a bug in Rails that is documented in this {Lighthouse ticket}[https://rails.lighthouseapp.com/projects/8994-ruby-on-rails/tickets/3217-parsing-an-xml-file-with-multiple-records-and-extra-attributes-besides-type-fails]
60
+ * PoxPaginate must needs be installed on both the client and the server Rails instance
data/Rakefile ADDED
@@ -0,0 +1,43 @@
1
+ require 'rubygems'
2
+ gem 'activesupport', '~> 2.3.5'
3
+ gem 'rspec', '~> 1.3.0'
4
+
5
+ require 'spec'
6
+ require 'spec/rake/spectask'
7
+
8
+ desc 'Default: run spec tests.'
9
+ task :default => 'spec:unit'
10
+
11
+ namespace :spec do
12
+ desc "Run all unit specs"
13
+ Spec::Rake::SpecTask.new(:unit) do |task|
14
+ task.spec_files = FileList['spec/pox_paginate/**/*_spec.rb']
15
+ end
16
+ end
17
+
18
+ begin
19
+ require 'jeweler'
20
+ Jeweler::Tasks.new do |gemspec|
21
+ gemspec.name = "tfe-pox_paginate"
22
+ gemspec.summary = "Transparent support for pagination using WillPaginate with POX (Plain Old Xml) and ActiveResource"
23
+ gemspec.description = "Transparent support for pagination using WillPaginate with POX (Plain Old Xml) and ActiveResource. This gem is based on C42 Engineering's experience building largish distributed systems consisting of multiple Rails apps integrated over POX (Plain Old XML)."
24
+ gemspec.authors = ["Sidu Ponnappa", "Niranjan Paranjape"]
25
+ gemspec.email = "opensource@c42.in"
26
+ gemspec.homepage = "http://c42.in/open_source"
27
+ gemspec.has_rdoc = false
28
+ gemspec.require_path = "lib"
29
+ gemspec.files.exclude *['.gitignore']
30
+
31
+ gemspec.test_files.exclude *['.gitignore']
32
+ gemspec.add_dependency('activesupport', '~> 2.3.5')
33
+ gemspec.add_dependency('activeresource', '~> 2.3.5')
34
+ gemspec.add_dependency('will_paginate', '~> 2.3.12')
35
+ gemspec.add_development_dependency('rspec', '~> 1.3.0')
36
+ gemspec.add_development_dependency('activerecord', '~> 2.3.5')
37
+ end
38
+
39
+ Jeweler::GemcutterTasks.new
40
+ rescue LoadError
41
+ puts "Jeweler not available. Install it with: gem install technicalpickles-jeweler -s http://gems.github.com"
42
+ puts "If you're using JRuby and are having trouble installing jeweler, try installing the git (gem install git) and rubyforge (gem install rubyforge) gems by hand. Also remember to update gems itself (jruby -S gem update --system)."
43
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.1.1.1
@@ -0,0 +1,26 @@
1
+ # Copyright 2009 C42 Engineering
2
+
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
6
+ # Unless required by applicable law or agreed to in writing, software distributed under the License
7
+ # is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
8
+ # See the License for the specific language governing permissions and limitations under the License.
9
+
10
+ require 'rubygems'
11
+ gem 'activeresource', '~> 2.3.5'
12
+ gem 'activesupport', '~> 2.3.5'
13
+ gem 'will_paginate', '~> 2.3.12'
14
+ require 'active_resource'
15
+ require 'active_support'
16
+ require 'will_paginate'
17
+
18
+ module PoxPaginate
19
+ Root = File.dirname(__FILE__)
20
+ end
21
+
22
+ require "#{PoxPaginate::Root}/pox_paginate/active_support"
23
+ require "#{PoxPaginate::Root}/pox_paginate/remote_collection"
24
+ require "#{PoxPaginate::Root}/pox_paginate/active_resource"
25
+ require "#{PoxPaginate::Root}/pox_paginate/will_paginate"
26
+ require "#{PoxPaginate::Root}/pox_paginate/xml_mini"
@@ -0,0 +1,8 @@
1
+ module PoxPaginate
2
+ module ActiveResource
3
+ end
4
+ end
5
+
6
+ require "#{PoxPaginate::Root}/pox_paginate/active_resource/xml_format"
7
+
8
+ ActiveResource::Formats::XmlFormat.send :include, PoxPaginate::ActiveResource::XmlFormat
@@ -0,0 +1,22 @@
1
+ module PoxPaginate
2
+ module ActiveResource
3
+ module XmlFormat
4
+ def self.included(mod)
5
+ mod.module_eval do
6
+ def decode_with_pagination_support(xml)
7
+ deserialised_xml = decode_without_pagination_support(xml)
8
+ root_attributes = ::ActiveSupport::XmlMini.root_node_attributes(xml)
9
+ if root_attributes['type'] == "array" && root_attributes['current_page']
10
+ RemoteCollection.create(root_attributes['current_page'], root_attributes['per_page'], root_attributes['total_entries']) do |pager|
11
+ pager.replace deserialised_xml
12
+ end
13
+ else
14
+ deserialised_xml
15
+ end
16
+ end
17
+ alias_method_chain :decode, :pagination_support
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,8 @@
1
+ module PoxPaginate
2
+ module ActiveSupport
3
+ end
4
+ end
5
+
6
+ require "#{PoxPaginate::Root}/pox_paginate/active_support/core_hash_ext"
7
+
8
+ ActiveSupport::CoreExtensions::Hash::Conversions::ClassMethods.send :include, PoxPaginate::ActiveSupport::CoreHashExt
@@ -0,0 +1,25 @@
1
+ module PoxPaginate
2
+ module ActiveSupport
3
+ module CoreHashExt
4
+ def self.included(mod)
5
+ mod.module_eval do
6
+ alias_method :from_xml_without_extension, :from_xml
7
+ def from_xml(xml)
8
+ typecast_xml_value(unrename_keys(remove_pagination_attributes(::ActiveSupport::XmlMini.parse(xml))))
9
+ end
10
+
11
+ def remove_pagination_attributes(deserialized_xml)
12
+ if deserialized_xml.values.size == 1 && deserialized_xml.values.first['type'] == 'array'
13
+ clone = deserialized_xml.clone
14
+ clone.values.first.delete 'per_page'
15
+ clone.values.first.delete 'current_page'
16
+ clone.values.first.delete 'total_entries'
17
+ return clone
18
+ end
19
+ deserialized_xml
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,4 @@
1
+ module PoxPaginate
2
+ class RemoteCollection < WillPaginate::Collection
3
+ end
4
+ end
@@ -0,0 +1,8 @@
1
+ module PoxPaginate
2
+ module WillPaginate
3
+ end
4
+ end
5
+
6
+ require "#{PoxPaginate::Root}/pox_paginate/will_paginate/collection_extensions"
7
+
8
+ WillPaginate::Collection.class_eval{ include PoxPaginate::WillPaginate::CollectionExtensions }
@@ -0,0 +1,43 @@
1
+ module PoxPaginate
2
+ module WillPaginate
3
+ module CollectionExtensions
4
+ def self.included(klass)
5
+ klass.class_eval do
6
+
7
+ def to_xml(options = {})
8
+ raise "Not all elements respond to to_xml" unless all? { |e| e.respond_to? :to_xml }
9
+ require 'builder' unless defined?(Builder)
10
+
11
+ options = options.dup
12
+ options[:root] ||= all? { |e| e.is_a?(first.class) && first.class.to_s != "Hash" } ? first.class.to_s.underscore.pluralize : "records"
13
+ options[:children] ||= options[:root].singularize
14
+ options[:indent] ||= 2
15
+ options[:builder] ||= Builder::XmlMarkup.new(:indent => options[:indent])
16
+
17
+ root = options.delete(:root).to_s
18
+ children = options.delete(:children)
19
+
20
+ if !options.has_key?(:dasherize) || options[:dasherize]
21
+ root = root.dasherize
22
+ end
23
+
24
+ options[:builder].instruct! unless options.delete(:skip_instruct)
25
+
26
+ opts = options.merge({ :root => children })
27
+
28
+ xml = options[:builder]
29
+ if empty?
30
+ xml.tag!(root, options[:skip_types] ? {} : {:type => "array", :current_page => current_page, :per_page => per_page, :total_entries => total_entries})
31
+ else
32
+ xml.tag!(root, options[:skip_types] ? {} : {:type => "array", :current_page => current_page, :per_page => per_page, :total_entries => total_entries}) {
33
+ yield xml if block_given?
34
+ each { |e| e.to_xml(opts.merge({ :skip_instruct => true })) }
35
+ }
36
+ end
37
+ end
38
+
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,23 @@
1
+ module PoxPaginate
2
+ module XmlMini
3
+ end
4
+ end
5
+
6
+
7
+ # require "#{PoxPaginate::Root}/pox_paginate/xml_mini/libxml"
8
+ # require "#{PoxPaginate::Root}/pox_paginate/xml_mini/nokogiri"
9
+ # require "#{PoxPaginate::Root}/pox_paginate/xml_mini/jdom"
10
+
11
+ ActiveSupport::XmlMini.module_eval do
12
+ delegate :root_node_attributes, :to => :backend
13
+
14
+ def backend_with_root_node_attributes=(name)
15
+ result = ActiveSupport::XmlMini.backend_without_root_node_attributes=(name)
16
+ deserialiser = @backend.name.demodulize.gsub('XmlMini_', '')
17
+ require "#{PoxPaginate::Root}/pox_paginate/xml_mini/#{deserialiser.downcase}"
18
+ @backend.extend "PoxPaginate::XmlMini::#{deserialiser}".constantize
19
+ result
20
+ end
21
+ alias_method_chain :backend=, :root_node_attributes
22
+ end
23
+ ActiveSupport::XmlMini.backend=(ActiveSupport::XmlMini.backend)
@@ -0,0 +1,8 @@
1
+ module PoxPaginate
2
+ module XmlMini
3
+ module JDOM
4
+ def root_node_attributes(xml)
5
+ end
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,11 @@
1
+ module PoxPaginate
2
+ module XmlMini
3
+ module LibXML
4
+ def root_node_attributes(xml)
5
+ parser = ::LibXML::XML::Reader.string(xml)
6
+ parser.read
7
+ parser.has_attributes? ? parser.node.attributes.to_h : {}
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ module PoxPaginate
2
+ module XmlMini
3
+ module Nokogiri
4
+ def root_node_attributes(xml)
5
+ parser = ::Nokogiri::XML::Reader.from_memory(xml)
6
+ parser.read
7
+ parser.attributes
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,16 @@
1
+ module PoxPaginate
2
+ module XmlMini
3
+ module REXML
4
+ def root_node_attributes(xml)
5
+ require 'rexml/parsers/sax2parser'
6
+ parser = ::REXML::Parsers::SAX2Parser.new(xml)
7
+ root_attributes = nil
8
+ parser.listen(:start_element) do |uri, localname, qname, attributes|
9
+ root_attributes ||= attributes
10
+ end
11
+ parser.parse
12
+ root_attributes
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,2 @@
1
+ adapter: sqlite3
2
+ database: ":memory:"
@@ -0,0 +1,12 @@
1
+ class CreateOogas < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :oogas do |t|
4
+ t.string :name
5
+ t.timestamps
6
+ end
7
+ end
8
+
9
+ def self.down
10
+ drop_table :oogas
11
+ end
12
+ end
@@ -0,0 +1,9 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper'
2
+
3
+ describe PoxPaginate::ActiveResource::XmlFormat do
4
+ it "should foo" do
5
+ ::ActiveSupport::XmlMini.backend = 'LibXML'
6
+ collection = ActiveResource::Formats::XmlFormat.decode(paginated_xml(DateTime.parse('2010-02-06T21:09:48+05:30')))
7
+ collection.should be_a(PoxPaginate::RemoteCollection)
8
+ end
9
+ end
@@ -0,0 +1,12 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper'
2
+
3
+ describe PoxPaginate::ActiveSupport::CoreHashExt do
4
+
5
+ it 'should from_xml ignores any root attributes other than type' do
6
+ Hash.from_xml(paginated_xml(@date)).should == {"oogas"=>[
7
+ {"name"=>"Foo", "updated_at"=>@date, "id"=>3, "created_at"=>@date},
8
+ {"name"=>"Baz", "updated_at"=>@date, "id"=>4, "created_at"=>@date}
9
+ ]}
10
+ end
11
+
12
+ end
@@ -0,0 +1,30 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper'
2
+
3
+ describe 'XmlSerializer Extensions' do
4
+ before :all do
5
+ Ooga.create!(:name => 'Coyote')
6
+ Ooga.create!(:name => 'Meh')
7
+ Ooga.create!(:name => 'Foo')
8
+ Ooga.create!(:name => 'Baz')
9
+ Ooga.create!(:name => 'Woot')
10
+ end
11
+
12
+ it "should ooga" do
13
+ Ooga.count.should == 5
14
+ end
15
+
16
+ it "should serialize to xml with root node attributes containing pagination metadata" do
17
+ page = Ooga.paginate :page => 2, :per_page => 2
18
+ xml = page.to_xml
19
+ xml.should match(/<oogas.*type=\"array\".*>\s+<ooga/)
20
+ xml.should match(/<oogas.*current_page=\"2\".*>\s+<ooga/)
21
+ xml.should match(/<oogas.*per_page=\"2\".*>\s+<ooga/)
22
+ xml.should match(/<oogas.*total_entries=\"5\".*>\s+<ooga/)
23
+ end
24
+
25
+ it "should have rails patched to allow deserialisation of tags with more than one attribute" do
26
+ # Patch at https://rails.lighthouseapp.com/projects/8994-ruby-on-rails/tickets/3217-parsing-an-xml-file-with-multiple-records-and-extra-attributes-besides-type-fails
27
+ page = Ooga.paginate :page => 2, :per_page => 2
28
+ lambda{Hash.from_xml(page.to_xml)}.should_not raise_error
29
+ end
30
+ end
@@ -0,0 +1,47 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
+
3
+ describe PoxPaginate::XmlMini do
4
+ before :all do
5
+ @date = DateTime.parse('2010-02-06T21:09:48+05:30')
6
+ end
7
+
8
+ %w(REXML LibXML Nokogiri).each do |deserialiser|
9
+ describe "using #{deserialiser}" do
10
+ before :all do
11
+ ActiveSupport::XmlMini.backend = deserialiser
12
+ end
13
+
14
+ it "should be using the #{deserialiser} backend" do
15
+ ActiveSupport::XmlMini.backend.name.should == "ActiveSupport::XmlMini_#{deserialiser}"
16
+ end
17
+
18
+ it "should decorate backend= to extend the XmlMini_#{deserialiser} module" do
19
+ "ActiveSupport::XmlMini_#{deserialiser}".constantize.should respond_to(:root_node_attributes)
20
+ ActiveSupport::XmlMini.backend.name.should == "ActiveSupport::XmlMini_#{deserialiser}"
21
+ end
22
+
23
+ it "should parse xml with header attributes into a hash" do
24
+ Hash.from_xml(paginated_xml(@date)).should == {"oogas"=>[
25
+ {"name"=>"Foo", "updated_at"=>@date, "id"=>3, "created_at"=>@date},
26
+ {"name"=>"Baz", "updated_at"=>@date, "id"=>4, "created_at"=>@date}
27
+ ]}
28
+ end
29
+
30
+ it "should know how to extract root node attributes" do
31
+ ActiveSupport::XmlMini.root_node_attributes(paginated_xml(@date)).should == {
32
+ 'type' => "array",
33
+ 'total_entries' => "10",
34
+ 'per_page' => "2",
35
+ 'current_page' => "2"
36
+ }
37
+ end
38
+
39
+ it "should not add root node attributes if there are none" do
40
+ ActiveSupport::XmlMini.root_node_attributes(unpaginated_xml(@date)).should == {
41
+ 'type' => "array",
42
+ }
43
+ end
44
+
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,58 @@
1
+ require 'rubygems'
2
+ gem 'rspec', '~> 1.3.0'
3
+ gem 'activerecord', '~> 2.3.5'
4
+ gem 'activeresource', '~> 2.3.5'
5
+
6
+ require 'pp'
7
+ require 'spec'
8
+ require 'active_record'
9
+
10
+ require File.expand_path(File.dirname(__FILE__) + "/../lib/pox_paginate")
11
+
12
+ ActiveRecord::Base.establish_connection(YAML::load(File.open(File.dirname(__FILE__) + '/config/database.yml')))
13
+ ActiveRecord::Base.logger = Logger.new(File.open(File.dirname(__FILE__) + '/../log/test.log', 'a'))
14
+ ActiveRecord::Migrator.up(File.dirname(__FILE__) + '/db/migrate')
15
+ WillPaginate.enable_activerecord
16
+
17
+ class Ooga < ActiveRecord::Base
18
+ end
19
+
20
+ def paginated_xml(date)
21
+ <<-EOXML
22
+ <?xml version="1.0" encoding="UTF-8"?>
23
+ <oogas type="array" total_entries="10" per_page="2" current_page="2">
24
+ <ooga>
25
+ <created-at type="datetime">#{date}</created-at>
26
+ <id type="integer">3</id>
27
+ <name>Foo</name>
28
+ <updated-at type="datetime">#{date}</updated-at>
29
+ </ooga>
30
+ <ooga>
31
+ <created-at type="datetime">#{date}</created-at>
32
+ <id type="integer">4</id>
33
+ <name>Baz</name>
34
+ <updated-at type="datetime">#{date}</updated-at>
35
+ </ooga>
36
+ </oogas>
37
+ EOXML
38
+ end
39
+
40
+ def unpaginated_xml(date)
41
+ <<-EOXML
42
+ <?xml version="1.0" encoding="UTF-8"?>
43
+ <oogas type="array">
44
+ <ooga>
45
+ <created-at type="datetime">#{date}</created-at>
46
+ <id type="integer">3</id>
47
+ <name>Foo</name>
48
+ <updated-at type="datetime">#{date}</updated-at>
49
+ </ooga>
50
+ <ooga>
51
+ <created-at type="datetime">#{date}</created-at>
52
+ <id type="integer">4</id>
53
+ <name>Baz</name>
54
+ <updated-at type="datetime">#{date}</updated-at>
55
+ </ooga>
56
+ </oogas>
57
+ EOXML
58
+ end
metadata ADDED
@@ -0,0 +1,176 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: tfe-pox_paginate
3
+ version: !ruby/object:Gem::Version
4
+ hash: 65
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 1
9
+ - 1
10
+ - 1
11
+ version: 0.1.1.1
12
+ platform: ruby
13
+ authors:
14
+ - Sidu Ponnappa
15
+ - Niranjan Paranjape
16
+ autorequire:
17
+ bindir: bin
18
+ cert_chain: []
19
+
20
+ date: 2010-09-26 00:00:00 -04:00
21
+ default_executable:
22
+ dependencies:
23
+ - !ruby/object:Gem::Dependency
24
+ name: activesupport
25
+ prerelease: false
26
+ requirement: &id001 !ruby/object:Gem::Requirement
27
+ none: false
28
+ requirements:
29
+ - - ~>
30
+ - !ruby/object:Gem::Version
31
+ hash: 9
32
+ segments:
33
+ - 2
34
+ - 3
35
+ - 5
36
+ version: 2.3.5
37
+ type: :runtime
38
+ version_requirements: *id001
39
+ - !ruby/object:Gem::Dependency
40
+ name: activeresource
41
+ prerelease: false
42
+ requirement: &id002 !ruby/object:Gem::Requirement
43
+ none: false
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ hash: 9
48
+ segments:
49
+ - 2
50
+ - 3
51
+ - 5
52
+ version: 2.3.5
53
+ type: :runtime
54
+ version_requirements: *id002
55
+ - !ruby/object:Gem::Dependency
56
+ name: will_paginate
57
+ prerelease: false
58
+ requirement: &id003 !ruby/object:Gem::Requirement
59
+ none: false
60
+ requirements:
61
+ - - ~>
62
+ - !ruby/object:Gem::Version
63
+ hash: 27
64
+ segments:
65
+ - 2
66
+ - 3
67
+ - 12
68
+ version: 2.3.12
69
+ type: :runtime
70
+ version_requirements: *id003
71
+ - !ruby/object:Gem::Dependency
72
+ name: rspec
73
+ prerelease: false
74
+ requirement: &id004 !ruby/object:Gem::Requirement
75
+ none: false
76
+ requirements:
77
+ - - ~>
78
+ - !ruby/object:Gem::Version
79
+ hash: 27
80
+ segments:
81
+ - 1
82
+ - 3
83
+ - 0
84
+ version: 1.3.0
85
+ type: :development
86
+ version_requirements: *id004
87
+ - !ruby/object:Gem::Dependency
88
+ name: activerecord
89
+ prerelease: false
90
+ requirement: &id005 !ruby/object:Gem::Requirement
91
+ none: false
92
+ requirements:
93
+ - - ~>
94
+ - !ruby/object:Gem::Version
95
+ hash: 9
96
+ segments:
97
+ - 2
98
+ - 3
99
+ - 5
100
+ version: 2.3.5
101
+ type: :development
102
+ version_requirements: *id005
103
+ description: Transparent support for pagination using WillPaginate with POX (Plain Old Xml) and ActiveResource. This gem is based on C42 Engineering's experience building largish distributed systems consisting of multiple Rails apps integrated over POX (Plain Old XML).
104
+ email: opensource@c42.in
105
+ executables: []
106
+
107
+ extensions: []
108
+
109
+ extra_rdoc_files:
110
+ - README.rdoc
111
+ files:
112
+ - CHANGELOG
113
+ - README.rdoc
114
+ - Rakefile
115
+ - VERSION
116
+ - lib/pox_paginate.rb
117
+ - lib/pox_paginate/active_resource.rb
118
+ - lib/pox_paginate/active_resource/xml_format.rb
119
+ - lib/pox_paginate/active_support.rb
120
+ - lib/pox_paginate/active_support/core_hash_ext.rb
121
+ - lib/pox_paginate/remote_collection.rb
122
+ - lib/pox_paginate/will_paginate.rb
123
+ - lib/pox_paginate/will_paginate/collection_extensions.rb
124
+ - lib/pox_paginate/xml_mini.rb
125
+ - lib/pox_paginate/xml_mini/jdom.rb
126
+ - lib/pox_paginate/xml_mini/libxml.rb
127
+ - lib/pox_paginate/xml_mini/nokogiri.rb
128
+ - lib/pox_paginate/xml_mini/rexml.rb
129
+ - spec/config/database.yml
130
+ - spec/db/migrate/001_create_oogas.rb
131
+ - spec/pox_paginate/active_resource/xml_format_spec.rb
132
+ - spec/pox_paginate/active_support/core_hash_ext_spec.rb
133
+ - spec/pox_paginate/will_paginate/collection_extensions_spec.rb
134
+ - spec/pox_paginate/xml_mini_spec.rb
135
+ - spec/spec_helper.rb
136
+ has_rdoc: true
137
+ homepage: http://c42.in/open_source
138
+ licenses: []
139
+
140
+ post_install_message:
141
+ rdoc_options:
142
+ - --charset=UTF-8
143
+ require_paths:
144
+ - lib
145
+ required_ruby_version: !ruby/object:Gem::Requirement
146
+ none: false
147
+ requirements:
148
+ - - ">="
149
+ - !ruby/object:Gem::Version
150
+ hash: 3
151
+ segments:
152
+ - 0
153
+ version: "0"
154
+ required_rubygems_version: !ruby/object:Gem::Requirement
155
+ none: false
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ hash: 3
160
+ segments:
161
+ - 0
162
+ version: "0"
163
+ requirements: []
164
+
165
+ rubyforge_project:
166
+ rubygems_version: 1.3.7
167
+ signing_key:
168
+ specification_version: 3
169
+ summary: Transparent support for pagination using WillPaginate with POX (Plain Old Xml) and ActiveResource
170
+ test_files:
171
+ - spec/db/migrate/001_create_oogas.rb
172
+ - spec/pox_paginate/active_resource/xml_format_spec.rb
173
+ - spec/pox_paginate/active_support/core_hash_ext_spec.rb
174
+ - spec/pox_paginate/will_paginate/collection_extensions_spec.rb
175
+ - spec/pox_paginate/xml_mini_spec.rb
176
+ - spec/spec_helper.rb