rapuncel 0.0.1.alpha

Sign up to get free protection for your applications and to get access to all the features.
Files changed (42) hide show
  1. data/MIT-LICENSE +20 -0
  2. data/README.md +171 -0
  3. data/Rakefile +24 -0
  4. data/lib/rapuncel.rb +25 -0
  5. data/lib/rapuncel/adapters/net_http_adapter.rb +34 -0
  6. data/lib/rapuncel/base.rb +7 -0
  7. data/lib/rapuncel/client.rb +54 -0
  8. data/lib/rapuncel/connection.rb +75 -0
  9. data/lib/rapuncel/core_ext/array.rb +23 -0
  10. data/lib/rapuncel/core_ext/big_decimal.rb +7 -0
  11. data/lib/rapuncel/core_ext/boolean.rb +29 -0
  12. data/lib/rapuncel/core_ext/float.rb +11 -0
  13. data/lib/rapuncel/core_ext/hash.rb +32 -0
  14. data/lib/rapuncel/core_ext/integer.rb +11 -0
  15. data/lib/rapuncel/core_ext/nil.rb +7 -0
  16. data/lib/rapuncel/core_ext/object.rb +49 -0
  17. data/lib/rapuncel/core_ext/string.rb +12 -0
  18. data/lib/rapuncel/core_ext/symbol.rb +7 -0
  19. data/lib/rapuncel/core_ext/time.rb +14 -0
  20. data/lib/rapuncel/proxy.rb +82 -0
  21. data/lib/rapuncel/request.rb +49 -0
  22. data/lib/rapuncel/response.rb +92 -0
  23. data/rapuncel-0.0.1.preview.gem +0 -0
  24. data/rapuncel.gemspec +22 -0
  25. data/test/functional/client_test.rb +54 -0
  26. data/test/functional_test_helper.rb +13 -0
  27. data/test/test_helper.rb +38 -0
  28. data/test/test_server.rb +28 -0
  29. data/test/unit/array_test.rb +96 -0
  30. data/test/unit/boolean_test.rb +34 -0
  31. data/test/unit/connection_test.rb +17 -0
  32. data/test/unit/float_test.rb +23 -0
  33. data/test/unit/hash_test.rb +54 -0
  34. data/test/unit/int_test.rb +27 -0
  35. data/test/unit/nil_test.rb +16 -0
  36. data/test/unit/object_test.rb +83 -0
  37. data/test/unit/proxy_test.rb +52 -0
  38. data/test/unit/request_test.rb +34 -0
  39. data/test/unit/response_test.rb +100 -0
  40. data/test/unit/string_test.rb +40 -0
  41. data/test/unit/time_test.rb +23 -0
  42. metadata +154 -0
@@ -0,0 +1,52 @@
1
+ require 'test_helper'
2
+
3
+ class ProxyTest < ActiveSupport::TestCase
4
+ class TestClient
5
+ def call_to_ruby request, *args
6
+ [request] + args
7
+ end
8
+ end
9
+
10
+ test "Proxy should still provide __ methods" do
11
+ t = Object.new
12
+ t.expects(:call_to_ruby).never
13
+
14
+ p = Rapuncel::Proxy.new t
15
+
16
+ p.__inspect__
17
+ p.__tap__ {}
18
+ p.__freeze__
19
+ end
20
+
21
+ test "Proxy should delegate standard Object instance methods to Client" do
22
+ t = TestClient.new
23
+
24
+ p = Rapuncel::Proxy.new t
25
+ request = p.inspect
26
+
27
+ assert_equal 'inspect', request.first
28
+ end
29
+
30
+ test "Proxy should delegate non-existing methods to Client" do
31
+ t = TestClient.new
32
+
33
+ p = Rapuncel::Proxy.new t
34
+ request = p.whatever 'arg1', 'foobar', 1234
35
+
36
+ assert_equal 'whatever', request.first
37
+ assert_equal ['arg1', 'foobar', 1234], request[1..-1]
38
+ end
39
+
40
+ test "Proxy should dynamically define methods as soon as needed" do
41
+ t = TestClient.new
42
+
43
+ p = Rapuncel::Proxy.new t
44
+
45
+ assert p.respond_to?('foobar')
46
+ assert !Rapuncel::Proxy.instance_methods.include?('foobar')
47
+
48
+ p.foobar
49
+
50
+ assert Rapuncel::Proxy.instance_methods.include?('foobar')
51
+ end
52
+ end
@@ -0,0 +1,34 @@
1
+ require 'test_helper'
2
+
3
+ class RequestTest < ActiveSupport::TestCase
4
+ def get_test_request
5
+ Rapuncel::Request.new 'test_method', "one argument", "another"
6
+ end
7
+
8
+ test "Serialized request shuold have xml version=1.0" do
9
+ xml = get_test_request.to_xml_rpc
10
+
11
+ assert xml.match(/<\?xml version=['"]1.0/)
12
+ end
13
+
14
+ test "Serialized request should have 1 methodCall tag" do
15
+ xml = get_test_request.to_xml_rpc
16
+ assert_select xml, '/methodCall', 1
17
+ end
18
+
19
+ test "Serialized request should contain methodName" do
20
+ xml = get_test_request.to_xml_rpc
21
+
22
+ assert_select xml, '/methodCall/methodName', 'test_method'
23
+ end
24
+
25
+ test "Serialized request should contain params" do
26
+ xml = get_test_request.to_xml_rpc
27
+
28
+ assert_select xml, '/methodCall/params', 1
29
+ assert_select xml, '/methodCall/params/param/value', 2
30
+
31
+ assert_select xml, '/methodCall/params/param/value', 'one argument', 1
32
+ assert_select xml, '/methodCall/params/param/value', 'another', 1
33
+ end
34
+ end
@@ -0,0 +1,100 @@
1
+ require 'test_helper'
2
+
3
+
4
+ class ResponseTest < ActiveSupport::TestCase
5
+ class MockReponse
6
+ attr_accessor :body, :code
7
+
8
+ def initialize body, success = true, code = 200
9
+ @body, @success, @code = body, success, code
10
+ end
11
+
12
+ def success?
13
+ @success
14
+ end
15
+ end
16
+
17
+ test 'Response should not be an Array' do
18
+ mock = MockReponse.new <<-XML
19
+ <?xml version='1.0'?>
20
+ <methodResponse>
21
+ <params>
22
+ <param>
23
+ <value>
24
+ <string>foo foo foo</string>
25
+ </value>
26
+ </param>
27
+ </params>
28
+ </methodResponse>
29
+ XML
30
+
31
+ r = Rapuncel::Response.new mock
32
+
33
+
34
+ assert r.success?
35
+ assert !r.fault?
36
+ assert !r.error?
37
+ assert_equal "foo foo foo", r.to_ruby
38
+ assert_equal "foo foo foo", r.result
39
+ end
40
+
41
+ test "Response should handle faults" do
42
+ mock = MockReponse.new <<-XML
43
+ <?xml version='1.0'?>
44
+ <methodResponse>
45
+ <fault>
46
+ <value>
47
+ <struct>
48
+ <member>
49
+ <name>
50
+ faultCode
51
+ </name>
52
+ <value>
53
+ <int>
54
+ 42
55
+ </int>
56
+ </value>
57
+ </member>
58
+ <member>
59
+ <name>
60
+ faultString
61
+ </name>
62
+ <value>
63
+ <string>
64
+ Don't panic.
65
+ </string>
66
+ </value>
67
+ </member>
68
+ </struct>
69
+ </value>
70
+ </fault>
71
+ </methodResponse>
72
+ XML
73
+
74
+ r = Rapuncel::Response.new mock
75
+
76
+ assert r.fault?
77
+ assert !r.success?
78
+ assert !r.error?
79
+
80
+ assert_kind_of Rapuncel::Response::Fault, r.to_ruby
81
+ assert_kind_of Rapuncel::Response::Fault, r.fault
82
+
83
+ assert_equal 42, r.fault.code
84
+ end
85
+
86
+ test "Response should handle errors" do
87
+ mock = MockReponse.new "Not Found", false, 404
88
+
89
+ r = Rapuncel::Response.new mock
90
+
91
+ assert r.error?
92
+ assert !r.fault?
93
+ assert !r.success?
94
+
95
+ assert_kind_of Rapuncel::Response::Error, r.to_ruby
96
+ assert_kind_of Rapuncel::Response::Error, r.error
97
+
98
+ assert_equal 404, r.error.code
99
+ end
100
+ end
@@ -0,0 +1,40 @@
1
+ require 'test_helper'
2
+
3
+
4
+ class StringTest < ActiveSupport::TestCase
5
+
6
+
7
+ test "A string should simply be written between two <string></string> tags" do
8
+ str = "blabla"
9
+ xml = str.to_xml_rpc
10
+ assert_select xml, '/string', 1
11
+ assert_select xml, '/string', str
12
+ end
13
+
14
+ test "A symbol should simply be written between two <string></string> tags" do
15
+ sym = :blabla
16
+ xml = sym.to_xml_rpc
17
+ assert_select xml, '/string', 1
18
+ assert_select xml, '/string', sym.to_s
19
+ end
20
+
21
+
22
+ test "A string to_xml_rpc from_xml_rpc should be itself, even with whitespace" do #weird characters too?? or do we need base64 for that
23
+ str = "yabba dabba doo! \t"
24
+ xml = str.to_xml_rpc
25
+
26
+
27
+ xml_node = Nokogiri::XML(xml).children.first
28
+
29
+ assert_equal str, String.from_xml_rpc(xml_node)
30
+ end
31
+
32
+ test "CRLF and CR should be normalized" do
33
+ str = "one\r\ntwo\rthree\nfour"
34
+ xml = str.to_xml_rpc
35
+
36
+ xml_node = Nokogiri::XML(xml).children.first
37
+
38
+ assert_equal "one\ntwo\nthree\nfour", String.from_xml_rpc(xml_node)
39
+ end
40
+ end
@@ -0,0 +1,23 @@
1
+ require 'test_helper'
2
+
3
+ class TimeTest < ActiveSupport::TestCase
4
+
5
+ test "Time.now should be written down in the iso 8601 standard between dateTime.iso8601 tags" do
6
+ t = Time.now
7
+ xml = t.to_xml_rpc
8
+
9
+ assert_select xml, '/dateTime.iso8601', 1
10
+ assert_select xml, '/dateTime.iso8601', t.iso8601
11
+ end
12
+
13
+ test "A time converted to xml and reparsed should be equal to its starting point" do
14
+ t = Time.now
15
+ xml = t.to_xml_rpc
16
+
17
+ xml_node = Nokogiri::XML(xml).children.first
18
+
19
+ reparsed = Time.from_xml_rpc(xml_node)
20
+
21
+ assert_equal t.to_i, reparsed.to_i # can't use assert_equal here! need to find a decent equality operator!!
22
+ end
23
+ end
metadata ADDED
@@ -0,0 +1,154 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rapuncel
3
+ version: !ruby/object:Gem::Version
4
+ hash: -1851332166
5
+ prerelease: true
6
+ segments:
7
+ - 0
8
+ - 0
9
+ - 1
10
+ - alpha
11
+ version: 0.0.1.alpha
12
+ platform: ruby
13
+ authors:
14
+ - Michael Eickenberg
15
+ - Marian Theisen
16
+ autorequire:
17
+ bindir: bin
18
+ cert_chain: []
19
+
20
+ date: 2010-12-02 00:00:00 +01:00
21
+ default_executable:
22
+ dependencies:
23
+ - !ruby/object:Gem::Dependency
24
+ name: nokogiri
25
+ prerelease: false
26
+ requirement: &id001 !ruby/object:Gem::Requirement
27
+ none: false
28
+ requirements:
29
+ - - ">="
30
+ - !ruby/object:Gem::Version
31
+ hash: 3
32
+ segments:
33
+ - 0
34
+ version: "0"
35
+ type: :runtime
36
+ version_requirements: *id001
37
+ - !ruby/object:Gem::Dependency
38
+ name: activesupport
39
+ prerelease: false
40
+ requirement: &id002 !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ">="
44
+ - !ruby/object:Gem::Version
45
+ hash: 7
46
+ segments:
47
+ - 3
48
+ - 0
49
+ - 0
50
+ version: 3.0.0
51
+ type: :runtime
52
+ version_requirements: *id002
53
+ - !ruby/object:Gem::Dependency
54
+ name: mocha
55
+ prerelease: false
56
+ requirement: &id003 !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ hash: 3
62
+ segments:
63
+ - 0
64
+ version: "0"
65
+ type: :development
66
+ version_requirements: *id003
67
+ description: Rapuncel is a simple XML-RPC Client based on Nokogiri, thus provides a fast and easy way to interact with XML-RPC services.
68
+ email: marian@cice-online.net
69
+ executables: []
70
+
71
+ extensions: []
72
+
73
+ extra_rdoc_files: []
74
+
75
+ files:
76
+ - lib/rapuncel/adapters/net_http_adapter.rb
77
+ - lib/rapuncel/base.rb
78
+ - lib/rapuncel/client.rb
79
+ - lib/rapuncel/connection.rb
80
+ - lib/rapuncel/core_ext/array.rb
81
+ - lib/rapuncel/core_ext/big_decimal.rb
82
+ - lib/rapuncel/core_ext/boolean.rb
83
+ - lib/rapuncel/core_ext/float.rb
84
+ - lib/rapuncel/core_ext/hash.rb
85
+ - lib/rapuncel/core_ext/integer.rb
86
+ - lib/rapuncel/core_ext/nil.rb
87
+ - lib/rapuncel/core_ext/object.rb
88
+ - lib/rapuncel/core_ext/string.rb
89
+ - lib/rapuncel/core_ext/symbol.rb
90
+ - lib/rapuncel/core_ext/time.rb
91
+ - lib/rapuncel/proxy.rb
92
+ - lib/rapuncel/request.rb
93
+ - lib/rapuncel/response.rb
94
+ - lib/rapuncel.rb
95
+ - MIT-LICENSE
96
+ - Rakefile
97
+ - rapuncel-0.0.1.preview.gem
98
+ - rapuncel.gemspec
99
+ - README.md
100
+ - test/functional/client_test.rb
101
+ - test/functional_test_helper.rb
102
+ - test/test_helper.rb
103
+ - test/test_server.rb
104
+ - test/unit/array_test.rb
105
+ - test/unit/boolean_test.rb
106
+ - test/unit/connection_test.rb
107
+ - test/unit/float_test.rb
108
+ - test/unit/hash_test.rb
109
+ - test/unit/int_test.rb
110
+ - test/unit/nil_test.rb
111
+ - test/unit/object_test.rb
112
+ - test/unit/proxy_test.rb
113
+ - test/unit/request_test.rb
114
+ - test/unit/response_test.rb
115
+ - test/unit/string_test.rb
116
+ - test/unit/time_test.rb
117
+ has_rdoc: true
118
+ homepage: http://github.com/cice/rapuncel
119
+ licenses: []
120
+
121
+ post_install_message:
122
+ rdoc_options: []
123
+
124
+ require_paths:
125
+ - lib
126
+ required_ruby_version: !ruby/object:Gem::Requirement
127
+ none: false
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ hash: 3
132
+ segments:
133
+ - 0
134
+ version: "0"
135
+ required_rubygems_version: !ruby/object:Gem::Requirement
136
+ none: false
137
+ requirements:
138
+ - - ">"
139
+ - !ruby/object:Gem::Version
140
+ hash: 25
141
+ segments:
142
+ - 1
143
+ - 3
144
+ - 1
145
+ version: 1.3.1
146
+ requirements: []
147
+
148
+ rubyforge_project:
149
+ rubygems_version: 1.3.7
150
+ signing_key:
151
+ specification_version: 3
152
+ summary: Simple XML-RPC Client
153
+ test_files: []
154
+