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 +8 -0
- data/README.rdoc +60 -0
- data/Rakefile +43 -0
- data/VERSION +1 -0
- data/lib/pox_paginate.rb +26 -0
- data/lib/pox_paginate/active_resource.rb +8 -0
- data/lib/pox_paginate/active_resource/xml_format.rb +22 -0
- data/lib/pox_paginate/active_support.rb +8 -0
- data/lib/pox_paginate/active_support/core_hash_ext.rb +25 -0
- data/lib/pox_paginate/remote_collection.rb +4 -0
- data/lib/pox_paginate/will_paginate.rb +8 -0
- data/lib/pox_paginate/will_paginate/collection_extensions.rb +43 -0
- data/lib/pox_paginate/xml_mini.rb +23 -0
- data/lib/pox_paginate/xml_mini/jdom.rb +8 -0
- data/lib/pox_paginate/xml_mini/libxml.rb +11 -0
- data/lib/pox_paginate/xml_mini/nokogiri.rb +11 -0
- data/lib/pox_paginate/xml_mini/rexml.rb +16 -0
- data/spec/config/database.yml +2 -0
- data/spec/db/migrate/001_create_oogas.rb +12 -0
- data/spec/pox_paginate/active_resource/xml_format_spec.rb +9 -0
- data/spec/pox_paginate/active_support/core_hash_ext_spec.rb +12 -0
- data/spec/pox_paginate/will_paginate/collection_extensions_spec.rb +30 -0
- data/spec/pox_paginate/xml_mini_spec.rb +47 -0
- data/spec/spec_helper.rb +58 -0
- metadata +176 -0
data/CHANGELOG
ADDED
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
|
data/lib/pox_paginate.rb
ADDED
@@ -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,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,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,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,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,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
|
data/spec/spec_helper.rb
ADDED
@@ -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
|