tylerhunt-relax 0.0.5

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.
@@ -0,0 +1,98 @@
1
+ require File.dirname(__FILE__) + '/spec_helper'
2
+
3
+
4
+ class BaseResponse < Relax::Response
5
+ parameter :status, :required => true
6
+ parameter :request_id, :element => :requestid, :type => :integer
7
+ end
8
+
9
+ class TestResponse < BaseResponse
10
+ class Token < Relax::Response
11
+ parameter :token_id, :element => :tokenid
12
+ parameter :status
13
+ end
14
+
15
+ class Error < Relax::Response
16
+ parser :hpricot
17
+ parameter :code, :type => :integer
18
+ parameter :message
19
+ end
20
+
21
+ parameter :valid_request, :element => :requestid, :attribute => :valid
22
+ parameter :tokens, :collection => Token
23
+ parameter :error, :type => Error
24
+ end
25
+
26
+
27
+ describe 'a response' do
28
+ before(:each) do
29
+ @response = Relax::Response.new(XML)
30
+ end
31
+
32
+ it 'should allow access to the root' do
33
+ root = @response.root
34
+ root.should be_an_instance_of(Hpricot::Elem)
35
+ root.name.should eql('RESTResponse')
36
+ end
37
+
38
+ it 'should be checkable by the name of its root' do
39
+ @response.is?(:RESTResponse).should be_true
40
+ end
41
+
42
+ it 'should allow access to an element by its name' do
43
+ @response.element(:RequestId).should be_an_instance_of(Hpricot::Elem)
44
+ end
45
+
46
+ it 'should allow access to an element\'s elements by its name' do
47
+ tokens = @response.elements(:Tokens)
48
+ tokens.should be_an_instance_of(Hpricot::Elements)
49
+ tokens.should_not be_empty
50
+ end
51
+
52
+ it 'should allow access to an element\'s value by its name' do
53
+ token = Relax::Response.new(@response.elements(:Tokens).first)
54
+ token.element(:TokenId).inner_text.should eql('JPMQARDVJK')
55
+ token.element(:Status).inner_text.should eql('Active')
56
+ end
57
+
58
+ it 'should have a means of checking for the existence of a node' do
59
+ @response.has?(:Status).should_not be_nil
60
+ @response.has?(:Errors).should be_nil
61
+ end
62
+
63
+ it 'should be able to define children of Response without modifying parent' do
64
+ Relax::Response.new(XML).respond_to?(:status).should be_false
65
+ TestResponse.new(XML).respond_to?(:status).should be_true
66
+ end
67
+
68
+ it 'should automatically pull parameters from the XML' do
69
+ response = TestResponse.new(XML)
70
+ response.valid_request.should eql('true')
71
+ response.tokens.length.should eql(2)
72
+ response.tokens.first.status.should eql('Active')
73
+ response.error.code.should eql(1)
74
+ response.error.message.should eql('Failed')
75
+ end
76
+
77
+ it "should automatically pull its parent's parameters from the XML" do
78
+ response = TestResponse.new(XML)
79
+ response.status.should eql('Success')
80
+ response.request_id.should eql(44287)
81
+ end
82
+
83
+ it 'should be relationally equivalent to its children' do
84
+ (Relax::Response === TestResponse).should be_true
85
+ end
86
+
87
+ it 'should raise MissingParameter if required parameters are missing' do
88
+ proc { TestResponse.new('') }.should raise_error(Relax::MissingParameter)
89
+ end
90
+
91
+ it 'should use the default parser when undefined' do
92
+ TestResponse::Token.new('').parser_name.should ==:default
93
+ end
94
+
95
+ it 'should use the defined parser when given' do
96
+ TestResponse::Error.new('').parser_name.should ==:hpricot
97
+ end
98
+ end
@@ -0,0 +1,67 @@
1
+ require File.dirname(__FILE__) + '/spec_helper'
2
+
3
+ require 'relax/symbolic_hash'
4
+
5
+ describe 'a symbolic hash' do
6
+ before(:each) do
7
+ @url = 'http://example.com/'
8
+ @query = Relax::SymbolicHash.new
9
+ end
10
+
11
+ it 'should be accessible via string or symbol keys' do
12
+ @query[:amount] = 10
13
+ @query[:amount].should == 10
14
+ @query['amount'].should == 10
15
+ end
16
+
17
+ it 'should convert keys to symbols' do
18
+ @query['symbol'] = 'aleph'
19
+ @query[:symbol].should == 'aleph'
20
+ end
21
+
22
+ it 'should convert keys to symbols' do
23
+ @query['symbol'] = 'aleph'
24
+ @query[:symbol].should == 'aleph'
25
+ end
26
+
27
+ it 'should test for keys by symbol' do
28
+ @query[:symbol] = 'aleph'
29
+ @query.key?('symbol').should be_true
30
+ end
31
+
32
+ it 'should delete values with a symbolic key' do
33
+ @query[:symbol] = 'aleph'
34
+ @query.delete('symbol')
35
+ @query.key?(:symbol).should be_false
36
+ end
37
+
38
+ it 'should be mergeable' do
39
+ @query[:one] = 2
40
+ merged_query = @query.merge({ :one => 1, :two => 2 })
41
+ merged_query[:one].should == 1
42
+ merged_query[:two].should == 2
43
+ end
44
+
45
+ it 'should be able to duplicate itself' do
46
+ @query[:one] = 'uno'
47
+ @query[:two] = 'dos'
48
+ new_query = @query.dup
49
+ new_query[:one].should == 'uno'
50
+ new_query[:two].should == 'dos'
51
+
52
+ @query[:three] == 'tres'
53
+ new_query.key?(:three).should be_false
54
+ end
55
+
56
+ it 'should be able to get multiple values by symbol' do
57
+ @query[:one] = 1
58
+ @query[:two] = 2
59
+ @query.values_at(:one, :two).should == [1, 2]
60
+ end
61
+
62
+ it 'should be instantiable with a hash' do
63
+ query = Relax::SymbolicHash.new({ :one => 1, :two => 2 })
64
+ query[:one].should == 1
65
+ query[:two].should == 2
66
+ end
67
+ end
metadata ADDED
@@ -0,0 +1,89 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: tylerhunt-relax
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.5
5
+ platform: ruby
6
+ authors:
7
+ - Tyler Hunt
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2008-10-20 00:00:00 -07:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: hpricot
17
+ version_requirement:
18
+ version_requirements: !ruby/object:Gem::Requirement
19
+ requirements:
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: "0.6"
23
+ version:
24
+ description:
25
+ email: tyler@tylerhunt.com
26
+ executables: []
27
+
28
+ extensions: []
29
+
30
+ extra_rdoc_files:
31
+ - README
32
+ - LICENSE
33
+ files:
34
+ - lib/relax
35
+ - lib/relax/parsers
36
+ - lib/relax/parsers/base.rb
37
+ - lib/relax/parsers/factory.rb
38
+ - lib/relax/parsers/hpricot.rb
39
+ - lib/relax/parsers/rexml.rb
40
+ - lib/relax/parsers.rb
41
+ - lib/relax/query.rb
42
+ - lib/relax/request.rb
43
+ - lib/relax/response.rb
44
+ - lib/relax/service.rb
45
+ - lib/relax/symbolic_hash.rb
46
+ - lib/relax.rb
47
+ - spec/parsers/factory_spec.rb
48
+ - spec/parsers/hpricot_spec.rb
49
+ - spec/parsers/rexml_spec.rb
50
+ - spec/query_spec.rb
51
+ - spec/request_spec.rb
52
+ - spec/response_spec.rb
53
+ - spec/symbolic_hash_spec.rb
54
+ - README
55
+ - LICENSE
56
+ has_rdoc: true
57
+ homepage: http://tylerhunt.com/
58
+ post_install_message:
59
+ rdoc_options: []
60
+
61
+ require_paths:
62
+ - lib
63
+ required_ruby_version: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: "0"
68
+ version:
69
+ required_rubygems_version: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - ">="
72
+ - !ruby/object:Gem::Version
73
+ version: "0"
74
+ version:
75
+ requirements: []
76
+
77
+ rubyforge_project: relax
78
+ rubygems_version: 1.2.0
79
+ signing_key:
80
+ specification_version: 2
81
+ summary: A simple library for creating REST consumers.
82
+ test_files:
83
+ - spec/parsers/factory_spec.rb
84
+ - spec/parsers/hpricot_spec.rb
85
+ - spec/parsers/rexml_spec.rb
86
+ - spec/query_spec.rb
87
+ - spec/request_spec.rb
88
+ - spec/response_spec.rb
89
+ - spec/symbolic_hash_spec.rb