pump 0.4.0 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.ruby-version +1 -0
- data/.travis.yml +6 -0
- data/gemfiles/activesupport-3-2 +6 -0
- data/gemfiles/activesupport-4 +6 -0
- data/lib/pump/array.rb +20 -0
- data/lib/pump/collection.rb +21 -0
- data/lib/pump/object.rb +28 -0
- data/lib/pump/version.rb +1 -1
- data/lib/pump.rb +2 -0
- data/spec/pump/array_spec.rb +73 -0
- data/spec/pump/collection_spec.rb +58 -0
- data/spec/pump/object_spec.rb +102 -0
- data/spec/pump/xml_spec.rb +2 -2
- data/spec/spec_helper.rb +1 -2
- metadata +26 -24
- data/.rbenv-gemsets +0 -1
- data/.rbenv-version +0 -1
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 1b9056ee092ab29fe87298579710bd70071d6a6d
|
4
|
+
data.tar.gz: ef775b68abb7303644d320ff315f23e643817576
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 29d00d8d8999018fa340ec2c6e77569dbfabb60419cce2437a89290fdd93f46bfdd7e5ed431724498305f8e97ce32d84bf4d99cca13abf004321d04b1d6b4d8c
|
7
|
+
data.tar.gz: 633002231a25894b1512e764e0513c5dc054b46be7e4fae8ff19a5d4cdd1c091f934778519fd125a1bfa059cc2dbe01c2ac3fac9f2461abe8ed64137c55bd6c6
|
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
2.0.0-p247
|
data/.travis.yml
ADDED
data/lib/pump/array.rb
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
module Pump
|
2
|
+
module Array
|
3
|
+
def pump_to_xml(options={})
|
4
|
+
encoder = get_pump_encoder(options[:set], :xml)
|
5
|
+
return to_xml(options) unless encoder
|
6
|
+
encoder.encode(self)
|
7
|
+
end
|
8
|
+
|
9
|
+
private
|
10
|
+
|
11
|
+
def get_pump_encoder(set, format)
|
12
|
+
return if empty? || !first.class.respond_to?(:pumps)
|
13
|
+
first.class.pumps.get(set, format)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
class ::Array
|
19
|
+
include Pump::Array
|
20
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module Pump
|
2
|
+
class Collection
|
3
|
+
def initialize
|
4
|
+
@pumps = {}
|
5
|
+
end
|
6
|
+
|
7
|
+
def add(set, format, value)
|
8
|
+
@pumps[format] ||= {}
|
9
|
+
@pumps[format][set || :default] = value
|
10
|
+
end
|
11
|
+
|
12
|
+
def get(set, format)
|
13
|
+
pumps = @pumps[format]
|
14
|
+
pumps && (pumps[set] || pumps[:default])
|
15
|
+
end
|
16
|
+
|
17
|
+
def size
|
18
|
+
@pumps.values.map(&:size).inject(0) {|sum, it| sum += it; it}
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
data/lib/pump/object.rb
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'pump/collection'
|
2
|
+
require 'pump/xml'
|
3
|
+
require 'active_support/concern'
|
4
|
+
|
5
|
+
module Pump
|
6
|
+
module Object
|
7
|
+
extend ActiveSupport::Concern
|
8
|
+
|
9
|
+
def pump_to_xml(options={})
|
10
|
+
encoder = self.class.pumps.get(options[:set], :xml)
|
11
|
+
if encoder
|
12
|
+
encoder.encode(self)
|
13
|
+
else
|
14
|
+
self.to_xml(options)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
module ClassMethods
|
19
|
+
def pumps
|
20
|
+
@pumps ||= Pump::Collection.new
|
21
|
+
end
|
22
|
+
|
23
|
+
def add_pump(name, set=nil, options={}, &block)
|
24
|
+
pumps.add(set, :xml, Pump::Xml.new(name, options, &block))
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
data/lib/pump/version.rb
CHANGED
data/lib/pump.rb
CHANGED
@@ -0,0 +1,73 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
class Array
|
4
|
+
def to_xml(options={})
|
5
|
+
"<Array#to_xml />"
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
class ArrayObjectWithoutInclude
|
10
|
+
end
|
11
|
+
|
12
|
+
class ArrayObjectWithInclude
|
13
|
+
include Pump::Object
|
14
|
+
end
|
15
|
+
|
16
|
+
class ArrayObject
|
17
|
+
include Pump::Object
|
18
|
+
|
19
|
+
add_pump 'array-object' do
|
20
|
+
string :name
|
21
|
+
end
|
22
|
+
|
23
|
+
add_pump 'array-object', :with_age do
|
24
|
+
string :name
|
25
|
+
integer :age
|
26
|
+
end
|
27
|
+
|
28
|
+
def name
|
29
|
+
"Tintin"
|
30
|
+
end
|
31
|
+
|
32
|
+
def age
|
33
|
+
27
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
describe Pump::Array do
|
38
|
+
it "should extend ::Array by default with pump_to_xml" do
|
39
|
+
[].respond_to?(:pump_to_xml).should eql(true)
|
40
|
+
end
|
41
|
+
|
42
|
+
context "with objects without include" do
|
43
|
+
subject{ [ArrayObjectWithoutInclude.new] }
|
44
|
+
|
45
|
+
it "should return default to_xml" do
|
46
|
+
subject.pump_to_xml.should eql("<Array#to_xml />")
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
context "with objects with include but without encoders" do
|
51
|
+
subject{ [ArrayObjectWithInclude.new] }
|
52
|
+
|
53
|
+
it "should return default to_xml" do
|
54
|
+
subject.pump_to_xml.should eql("<Array#to_xml />")
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
context "with objects with include and encoders" do
|
59
|
+
subject{ [ArrayObject.new] }
|
60
|
+
|
61
|
+
it "should encode with default encoder" do
|
62
|
+
subject.pump_to_xml.should eql("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<array-objects type=\"array\">\n <array-object>\n <name>Tintin</name>\n </array-object>\n</array-objects>\n")
|
63
|
+
end
|
64
|
+
|
65
|
+
it "should encode with specified encoder" do
|
66
|
+
subject.pump_to_xml(:set => :with_age).should eql("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<array-objects type=\"array\">\n <array-object>\n <name>Tintin</name>\n <age type=\"integer\">27</age>\n </array-object>\n</array-objects>\n")
|
67
|
+
end
|
68
|
+
|
69
|
+
it "should encode with default encoder on unknown set" do
|
70
|
+
subject.pump_to_xml(:set => :bla).should eql("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<array-objects type=\"array\">\n <array-object>\n <name>Tintin</name>\n </array-object>\n</array-objects>\n")
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Pump::Collection do
|
4
|
+
subject { Pump::Collection.new }
|
5
|
+
|
6
|
+
describe ".new" do
|
7
|
+
it "should not accept any arguments" do
|
8
|
+
subject
|
9
|
+
lambda{ Pump::Collection.new("") }.should raise_error(ArgumentError)
|
10
|
+
end
|
11
|
+
|
12
|
+
its(:size) { should eql(0) }
|
13
|
+
end
|
14
|
+
|
15
|
+
describe "#add" do
|
16
|
+
it "should add entry" do
|
17
|
+
subject.add(:set_name, :xml, :value)
|
18
|
+
subject.size.should eql(1)
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should allow different formats" do
|
22
|
+
subject.add(:set_name, :json, :value)
|
23
|
+
subject.size.should eql(1)
|
24
|
+
end
|
25
|
+
|
26
|
+
it "should default to :default set" do
|
27
|
+
subject.add(nil, :xml, :value)
|
28
|
+
subject.get(:default, :xml).should eql(:value)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
describe "#get" do
|
33
|
+
it "should return nil on unknown entry" do
|
34
|
+
subject.get(:set_name, :xml).should eql(nil)
|
35
|
+
subject.get(:default, :xml).should eql(nil)
|
36
|
+
subject.get(nil, :xml).should eql(nil)
|
37
|
+
subject.get(:default, :json).should eql(nil)
|
38
|
+
end
|
39
|
+
|
40
|
+
context "when entries are added" do
|
41
|
+
before{ subject.add(:set_name, :xml, :value); subject.add(:default, :xml, :value2) }
|
42
|
+
|
43
|
+
it "should return given value" do
|
44
|
+
subject.get(:set_name, :xml).should eql(:value)
|
45
|
+
subject.get(:default, :xml).should eql(:value2)
|
46
|
+
end
|
47
|
+
|
48
|
+
it "should return nil with wrong format" do
|
49
|
+
subject.get(:set_name, :json).should eql(nil)
|
50
|
+
subject.get(:default, :json).should eql(nil)
|
51
|
+
end
|
52
|
+
|
53
|
+
it "should default to :default on unknwon set" do
|
54
|
+
subject.get(:unknown, :xml).should eql(:value2)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
@@ -0,0 +1,102 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
class ObjectWithoutInclude
|
4
|
+
|
5
|
+
end
|
6
|
+
|
7
|
+
class ObjectWithInclude
|
8
|
+
include Pump::Object
|
9
|
+
|
10
|
+
def to_xml(options={})
|
11
|
+
"<to_xml />"
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
class ObjectWithIncludeAndPumps
|
16
|
+
include Pump::Object
|
17
|
+
|
18
|
+
add_pump :my_object do
|
19
|
+
string "name"
|
20
|
+
end
|
21
|
+
|
22
|
+
def name
|
23
|
+
"MyName"
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
class ObjectWithIncludeAndMultiplePumps
|
28
|
+
include Pump::Object
|
29
|
+
|
30
|
+
add_pump :my_object do
|
31
|
+
string "name"
|
32
|
+
end
|
33
|
+
|
34
|
+
add_pump :my_object, :sometimes do
|
35
|
+
string "name"
|
36
|
+
integer "age"
|
37
|
+
end
|
38
|
+
|
39
|
+
def name
|
40
|
+
"MyName"
|
41
|
+
end
|
42
|
+
|
43
|
+
def age
|
44
|
+
72
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
describe Pump::Object do
|
49
|
+
it "should not extend all objects by default" do
|
50
|
+
ObjectWithoutInclude.respond_to?(:pumps).should eql(false)
|
51
|
+
end
|
52
|
+
|
53
|
+
context "when included" do
|
54
|
+
subject { ObjectWithInclude }
|
55
|
+
|
56
|
+
it "should add pumps class method" do
|
57
|
+
subject.respond_to?(:pumps).should eql(true)
|
58
|
+
subject.pumps.size.should eql(0)
|
59
|
+
end
|
60
|
+
|
61
|
+
it "should add pump_to_xml instance method" do
|
62
|
+
subject.new.respond_to?(:pump_to_xml).should eql(true)
|
63
|
+
end
|
64
|
+
|
65
|
+
it "should fall back to original to_xml on pump_to_xml" do
|
66
|
+
subject.new.pump_to_xml.should eql("<to_xml />")
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
context "when included with one encoder added" do
|
71
|
+
subject { ObjectWithIncludeAndPumps }
|
72
|
+
|
73
|
+
it "should add pump" do
|
74
|
+
subject.pumps.size.should eql(1)
|
75
|
+
end
|
76
|
+
|
77
|
+
it "should return xml on pump_to_xml" do
|
78
|
+
subject.new.pump_to_xml.should eql("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<my_object>\n <name>MyName</name>\n</my_object>\n")
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
context "when included with multiple encoders added" do
|
83
|
+
subject { ObjectWithIncludeAndMultiplePumps }
|
84
|
+
|
85
|
+
it "should add pumps" do
|
86
|
+
subject.pumps.size.should eql(2)
|
87
|
+
end
|
88
|
+
|
89
|
+
it "should return default xml on pump_to_xml" do
|
90
|
+
subject.new.pump_to_xml.should eql("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<my_object>\n <name>MyName</name>\n</my_object>\n")
|
91
|
+
end
|
92
|
+
|
93
|
+
it "should return special xml on set option" do
|
94
|
+
subject.new.pump_to_xml(:set => :sometimes).should eql("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<my_object>\n <name>MyName</name>\n <age type=\"integer\">72</age>\n</my_object>\n")
|
95
|
+
end
|
96
|
+
|
97
|
+
it "should return default xml on pump_to_xml with unknown set option" do
|
98
|
+
subject.new.pump_to_xml(:set => :unknown).should eql("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<my_object>\n <name>MyName</name>\n</my_object>\n")
|
99
|
+
end
|
100
|
+
|
101
|
+
end
|
102
|
+
end
|
data/spec/pump/xml_spec.rb
CHANGED
@@ -158,11 +158,11 @@ describe Pump::Xml do
|
|
158
158
|
end
|
159
159
|
|
160
160
|
context "with datetime attribute" do
|
161
|
-
let(:person) { Struct.new(:at).new(Time.
|
161
|
+
let(:person) { Struct.new(:at).new(Time.utc(2013, 2, 7, 0, 0, 0)) }
|
162
162
|
let(:xml) { Pump::Xml.new('person', [{:at => :at, :typecast => :xmlschema, :attributes => {:type => 'datetime'}}]) }
|
163
163
|
|
164
164
|
it "returns xml string" do
|
165
|
-
xml.encode(person).should eql("#{XML_INSTRUCT}<person>\n <at type=\"datetime\">2013-02-07T00:00:
|
165
|
+
xml.encode(person).should eql("#{XML_INSTRUCT}<person>\n <at type=\"datetime\">2013-02-07T00:00:00Z</at>\n</person>\n")
|
166
166
|
end
|
167
167
|
|
168
168
|
context "but nil" do
|
data/spec/spec_helper.rb
CHANGED
@@ -7,6 +7,5 @@ RSpec.configure do |config|
|
|
7
7
|
config.run_all_when_everything_filtered = true
|
8
8
|
config.filter_run :focus
|
9
9
|
config.order = 'random'
|
10
|
-
|
11
|
-
config.backtrace_clean_patterns = [/rspec\/(core|expectations)/]
|
10
|
+
config.backtrace_exclusion_patterns = [/rspec\/(core|expectations)/]
|
12
11
|
end
|
metadata
CHANGED
@@ -1,62 +1,55 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pump
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.5.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Sebastian Munz
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date: 2013-
|
11
|
+
date: 2013-07-23 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: activesupport
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
|
-
- -
|
17
|
+
- - '>='
|
20
18
|
- !ruby/object:Gem::Version
|
21
19
|
version: '0'
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
|
-
- -
|
24
|
+
- - '>='
|
28
25
|
- !ruby/object:Gem::Version
|
29
26
|
version: '0'
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: rspec
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
|
-
- -
|
31
|
+
- - '>='
|
36
32
|
- !ruby/object:Gem::Version
|
37
33
|
version: 2.12.0
|
38
34
|
type: :development
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
|
-
- -
|
38
|
+
- - '>='
|
44
39
|
- !ruby/object:Gem::Version
|
45
40
|
version: 2.12.0
|
46
41
|
- !ruby/object:Gem::Dependency
|
47
42
|
name: guard-rspec
|
48
43
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
44
|
requirements:
|
51
|
-
- -
|
45
|
+
- - '>='
|
52
46
|
- !ruby/object:Gem::Version
|
53
47
|
version: 2.2.2
|
54
48
|
type: :development
|
55
49
|
prerelease: false
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
51
|
requirements:
|
59
|
-
- -
|
52
|
+
- - '>='
|
60
53
|
- !ruby/object:Gem::Version
|
61
54
|
version: 2.2.2
|
62
55
|
description: Fast but inflexible XML encoding for ruby objects.
|
@@ -67,9 +60,9 @@ extensions: []
|
|
67
60
|
extra_rdoc_files: []
|
68
61
|
files:
|
69
62
|
- .gitignore
|
70
|
-
- .rbenv-gemsets
|
71
|
-
- .rbenv-version
|
72
63
|
- .rspec
|
64
|
+
- .ruby-version
|
65
|
+
- .travis.yml
|
73
66
|
- .yardopts
|
74
67
|
- CHANGES.md
|
75
68
|
- Gemfile
|
@@ -78,7 +71,12 @@ files:
|
|
78
71
|
- README.md
|
79
72
|
- Rakefile
|
80
73
|
- benchmarks/encode.rb
|
74
|
+
- gemfiles/activesupport-3-2
|
75
|
+
- gemfiles/activesupport-4
|
81
76
|
- lib/pump.rb
|
77
|
+
- lib/pump/array.rb
|
78
|
+
- lib/pump/collection.rb
|
79
|
+
- lib/pump/object.rb
|
82
80
|
- lib/pump/version.rb
|
83
81
|
- lib/pump/xml.rb
|
84
82
|
- lib/pump/xml/dsl.rb
|
@@ -87,6 +85,9 @@ files:
|
|
87
85
|
- lib/pump/xml/tag_array.rb
|
88
86
|
- lib/pump/xml/value.rb
|
89
87
|
- pump.gemspec
|
88
|
+
- spec/pump/array_spec.rb
|
89
|
+
- spec/pump/collection_spec.rb
|
90
|
+
- spec/pump/object_spec.rb
|
90
91
|
- spec/pump/xml/dsl_spec.rb
|
91
92
|
- spec/pump/xml/tag_array_spec.rb
|
92
93
|
- spec/pump/xml/tag_spec.rb
|
@@ -96,33 +97,34 @@ files:
|
|
96
97
|
homepage: https://github.com/yolk/pump
|
97
98
|
licenses:
|
98
99
|
- MIT
|
100
|
+
metadata: {}
|
99
101
|
post_install_message:
|
100
102
|
rdoc_options: []
|
101
103
|
require_paths:
|
102
104
|
- lib
|
103
105
|
required_ruby_version: !ruby/object:Gem::Requirement
|
104
|
-
none: false
|
105
106
|
requirements:
|
106
|
-
- -
|
107
|
+
- - '>='
|
107
108
|
- !ruby/object:Gem::Version
|
108
109
|
version: '0'
|
109
110
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
110
|
-
none: false
|
111
111
|
requirements:
|
112
|
-
- -
|
112
|
+
- - '>='
|
113
113
|
- !ruby/object:Gem::Version
|
114
114
|
version: '0'
|
115
115
|
requirements: []
|
116
116
|
rubyforge_project:
|
117
|
-
rubygems_version:
|
117
|
+
rubygems_version: 2.0.3
|
118
118
|
signing_key:
|
119
|
-
specification_version:
|
119
|
+
specification_version: 4
|
120
120
|
summary: Fast but inflexible XML encoding for ruby objects.
|
121
121
|
test_files:
|
122
|
+
- spec/pump/array_spec.rb
|
123
|
+
- spec/pump/collection_spec.rb
|
124
|
+
- spec/pump/object_spec.rb
|
122
125
|
- spec/pump/xml/dsl_spec.rb
|
123
126
|
- spec/pump/xml/tag_array_spec.rb
|
124
127
|
- spec/pump/xml/tag_spec.rb
|
125
128
|
- spec/pump/xml/value_spec.rb
|
126
129
|
- spec/pump/xml_spec.rb
|
127
130
|
- spec/spec_helper.rb
|
128
|
-
has_rdoc:
|
data/.rbenv-gemsets
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
plugin
|
data/.rbenv-version
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
1.9.3-p286
|