wrest 0.0.6 → 0.0.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (34) hide show
  1. data/README.rdoc +51 -19
  2. data/Rakefile +8 -4
  3. data/VERSION.yml +1 -1
  4. data/lib/wrest.rb +11 -2
  5. data/lib/wrest/components.rb +1 -2
  6. data/lib/wrest/components/attributes_container.rb +31 -69
  7. data/lib/wrest/components/attributes_container/typecaster.rb +121 -0
  8. data/lib/wrest/components/mutators.rb +18 -1
  9. data/lib/wrest/components/mutators/base.rb +52 -39
  10. data/lib/wrest/components/mutators/camel_to_snake_case.rb +7 -5
  11. data/lib/wrest/components/mutators/xml_mini_type_caster.rb +43 -0
  12. data/lib/wrest/components/mutators/xml_simple_type_caster.rb +22 -20
  13. data/lib/wrest/components/translators.rb +20 -17
  14. data/lib/wrest/components/translators/content_types.rb +2 -2
  15. data/lib/wrest/components/translators/json.rb +11 -8
  16. data/lib/wrest/components/translators/xml.rb +9 -12
  17. data/lib/wrest/core_ext/hash/conversions.rb +1 -1
  18. data/lib/wrest/resource/base.rb +25 -13
  19. data/lib/wrest/resource/state.rb +6 -0
  20. data/lib/wrest/response.rb +4 -0
  21. data/lib/wrest/uri.rb +5 -1
  22. data/lib/wrest/version.rb +1 -1
  23. data/spec/spec.opts +1 -1
  24. data/spec/spec_helper.rb +8 -1
  25. data/spec/wrest/components/attributes_container/typecaster_spec.rb +63 -0
  26. data/spec/wrest/components/attributes_container_spec.rb +6 -61
  27. data/spec/wrest/components/mutators/base_spec.rb +5 -1
  28. data/spec/wrest/components/mutators/xml_mini_type_caster_spec.rb +75 -0
  29. data/spec/wrest/components/mutators_spec.rb +21 -0
  30. data/spec/wrest/components/translators/xml_spec.rb +1 -1
  31. data/spec/wrest/components/translators_spec.rb +9 -0
  32. data/spec/wrest/uri_spec.rb +16 -4
  33. metadata +14 -15
  34. data/lib/wrest/components/typecast_helpers.rb +0 -41
@@ -0,0 +1,6 @@
1
+ module Wrest
2
+ module Resource
3
+ class State
4
+ end
5
+ end
6
+ end
@@ -34,5 +34,9 @@ module Wrest #:nodoc:
34
34
  def deserialise_using(translator)
35
35
  translator.deserialise(@http_response)
36
36
  end
37
+
38
+ def headers
39
+ @http_response.to_hash
40
+ end
37
41
  end
38
42
  end
data/lib/wrest/uri.rb CHANGED
@@ -47,11 +47,15 @@ module Wrest #:nodoc:
47
47
  def delete(parameters = {}, headers = {})
48
48
  do_request 'delete', parameters.empty? ? @uri.request_uri : "#{@uri.request_uri}?#{parameters.to_query}", headers.stringify_keys
49
49
  end
50
+
51
+ def options
52
+ do_request 'options', @uri.request_uri
53
+ end
50
54
 
51
55
  def do_request(method, url, *args)
52
56
  response = nil
53
57
 
54
- Wrest.logger.info "#{method} -> #{url}"
58
+ Wrest.logger.info "--> (#{method}) #{@uri.scheme}://#{@uri.host}:#{@uri.port}#{url}"
55
59
  time = Benchmark.realtime { response = Wrest::Response.new(http.send(method, url, *args)) }
56
60
  Wrest.logger.info "--> %d %s (%d %.2fs)" % [response.code, response.message, response.body ? response.body.length : 0, time]
57
61
 
data/lib/wrest/version.rb CHANGED
@@ -12,7 +12,7 @@ module Wrest
12
12
  unless defined? MAJOR
13
13
  MAJOR = 0
14
14
  MINOR = 0
15
- TINY = 6
15
+ TINY = 7
16
16
 
17
17
  STRING = [MAJOR, MINOR, TINY].join('.')
18
18
 
data/spec/spec.opts CHANGED
@@ -1,6 +1,6 @@
1
1
  --colour
2
2
  --format
3
- progress
3
+ specdoc
4
4
  --loadby
5
5
  mtime
6
6
  --reverse
data/spec/spec_helper.rb CHANGED
@@ -11,7 +11,14 @@ Wrest.logger = Logger.new(File.open("#{WREST_ROOT}/../log/test.log", 'a'))
11
11
 
12
12
  def p(*args)
13
13
  # super *(args << caller[0])
14
- super *(args << '<br>')
14
+ super *(args << '<br/>')
15
+ # super *args
16
+ end
17
+
18
+ def puts(*args)
19
+ # super *(args << caller[0])
20
+ super *(args << '<br/>')
21
+ # super *args
15
22
  end
16
23
 
17
24
  Spec::Runner.configure do |config|
@@ -0,0 +1,63 @@
1
+ require File.dirname(__FILE__) + '/../../../spec_helper'
2
+
3
+ module Wrest::Components
4
+ describe AttributesContainer::Typecaster do
5
+ before :each do
6
+ @Demon = Class.new
7
+ @Demon.class_eval do
8
+ include AttributesContainer
9
+ include AttributesContainer::Typecaster
10
+ end
11
+ end
12
+
13
+ it "should know how to apply a lambda to the string value of a given key casting it to a new type" do
14
+ @Demon.class_eval{ typecast :age => lambda{|id_string| id_string.to_i} }
15
+ kai_wren = @Demon.new('age' => '1')
16
+ kai_wren.age.should == 1
17
+ end
18
+
19
+ it "should not apply a lambda to the value of a given key if it is not a string" do
20
+ @Demon.class_eval{ typecast :age => lambda{|id_string| id_string.to_i} }
21
+ kai_wren = @Demon.new('age' => :ooga)
22
+ kai_wren.age.should == :ooga
23
+ end
24
+
25
+ it "should leave nils unchanged" do
26
+ @Demon.class_eval{ typecast :age => lambda{|id_string| id_string.to_i} }
27
+ kai_wren = @Demon.new('age' => nil)
28
+ kai_wren.age.should be_nil
29
+ end
30
+
31
+ it "should provide helpers for typcasting common types" do
32
+ @Demon.class_eval{ typecast :age => as_integer }
33
+ kai_wren = @Demon.new('age' => '1500')
34
+ kai_wren.age.should == 1500
35
+ end
36
+
37
+ describe 'in subclasses' do
38
+ before :each do
39
+ @Sidhe = Class.new
40
+ @Sidhe.class_eval do
41
+ include AttributesContainer
42
+ include AttributesContainer::Typecaster
43
+
44
+ typecast :age => as_integer
45
+ end
46
+ end
47
+
48
+ it "should inherit all defined typecasts" do
49
+ @ChineseSidhe = Class.new(@Sidhe)
50
+ kai_wren = @ChineseSidhe.new('age' => '1500')
51
+ kai_wren.age.should == 1500
52
+ end
53
+
54
+ it "should discard all typecasts from parent if defined in child" do
55
+ @ChineseSidhe = Class.new(@Sidhe)
56
+ @ChineseSidhe.class_eval{ typecast :born_in => as_integer }
57
+ kai_wren = @ChineseSidhe.new('age' => '1500', 'born_in' => '509')
58
+ kai_wren.age.should == '1500'
59
+ kai_wren.born_in.should == 509
60
+ end
61
+ end
62
+ end
63
+ end
@@ -13,69 +13,14 @@ module Wrest::Components
13
13
  describe AttributesContainer do
14
14
  class HumanBeing
15
15
  include AttributesContainer
16
- has_attributes :id
16
+ always_has :id
17
17
  end
18
18
 
19
19
  it "should allow instantiation with no attributes" do
20
20
  lambda{ HumanBeing.new }.should_not raise_error
21
21
  end
22
22
 
23
- describe 'typecast' do
24
- before :each do
25
- @Demon = Class.new
26
- @Demon.class_eval{include AttributesContainer}
27
- end
28
-
29
- it "should know how to apply a lambda to the string value of a given key casting it to a new type" do
30
- @Demon.class_eval{ typecast :age => lambda{|id_string| id_string.to_i} }
31
- kai_wren = @Demon.new('age' => '1')
32
- kai_wren.age.should == 1
33
- end
34
-
35
- it "should not apply a lambda to the value of a given key if it is not a string" do
36
- @Demon.class_eval{ typecast :age => lambda{|id_string| id_string.to_i} }
37
- kai_wren = @Demon.new('age' => :ooga)
38
- kai_wren.age.should == :ooga
39
- end
40
-
41
- it "should leave nils unchanged" do
42
- @Demon.class_eval{ typecast :age => lambda{|id_string| id_string.to_i} }
43
- kai_wren = @Demon.new('age' => nil)
44
- kai_wren.age.should be_nil
45
- end
46
-
47
- it "should provide helpers for typcasting common types" do
48
- @Demon.class_eval{ typecast :age => as_integer }
49
- kai_wren = @Demon.new('age' => '1500')
50
- kai_wren.age.should == 1500
51
- end
52
-
53
- describe 'in subclasses' do
54
- before :each do
55
- @Sidhe = Class.new
56
- @Sidhe.class_eval{
57
- include AttributesContainer
58
- typecast :age => as_integer
59
- }
60
- end
61
-
62
- it "should inherit all defined typecasts" do
63
- @ChineseSidhe = Class.new(@Sidhe)
64
- kai_wren = @ChineseSidhe.new('age' => '1500')
65
- kai_wren.age.should == 1500
66
- end
67
-
68
- it "should discard all typecasts from parent if defined in child" do
69
- @ChineseSidhe = Class.new(@Sidhe)
70
- @ChineseSidhe.class_eval{ typecast :born_in => as_integer }
71
- kai_wren = @ChineseSidhe.new('age' => '1500', 'born_in' => '509')
72
- kai_wren.age.should == '1500'
73
- kai_wren.born_in.should == 509
74
- end
75
- end
76
- end
77
-
78
- describe 'has_attributes' do
23
+ describe 'always_has' do
79
24
  describe 'method creation' do
80
25
  before :each do
81
26
  @Demon = Class.new
@@ -87,7 +32,7 @@ module Wrest::Components
87
32
 
88
33
  @Demon.class_eval{
89
34
  include AttributesContainer
90
- has_attributes :trainer
35
+ always_has :trainer
91
36
  }
92
37
 
93
38
  kai_wren.methods.should include('trainer')
@@ -99,7 +44,7 @@ module Wrest::Components
99
44
 
100
45
  @Demon.class_eval{
101
46
  include AttributesContainer
102
- has_attributes :trainer
47
+ always_has :trainer
103
48
  }
104
49
 
105
50
  kai_wren.methods.should include('trainer=')
@@ -111,7 +56,7 @@ module Wrest::Components
111
56
 
112
57
  @Demon.class_eval{
113
58
  include AttributesContainer
114
- has_attributes :trainer
59
+ always_has :trainer
115
60
  }
116
61
  kai_wren.methods.should include('trainer?')
117
62
  end
@@ -122,7 +67,7 @@ module Wrest::Components
122
67
  @Demon = Class.new
123
68
  @Demon.class_eval{
124
69
  include AttributesContainer
125
- has_attributes :trainer
70
+ always_has :trainer
126
71
 
127
72
  def method_missing(method_name, *args)
128
73
  # Ensuring that the instance level
@@ -33,6 +33,10 @@ module Wrest::Components
33
33
  }]]
34
34
  ).should == ["result", {"publish_date" => "1240326000", "news_source" => {"online"=>"PC via News", "unique_id"=>1}}]
35
35
  end
36
-
36
+
37
+ it "should register all subclasses in the registry" do
38
+ class SomeMutator < Mutators::Base; end
39
+ Mutators::REGISTRY[:some_mutator].should == SomeMutator
40
+ end
37
41
  end
38
42
  end
@@ -0,0 +1,75 @@
1
+ # Copyright 2009 Sidu Ponnappa
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 File.dirname(__FILE__) + '/../../../spec_helper'
11
+
12
+ module Wrest::Components
13
+ describe Mutators::XmlMiniTypeCaster do
14
+ before(:each) do
15
+ @mutator = Mutators::XmlMiniTypeCaster.new
16
+ end
17
+
18
+ # {"lead-bottle"=>{"name"=>{"__content__"=>"Wooz"}, "universe-id"=>{"type"=>"integer", "nil"=>"true"}, "id"=>{"__content__"=>"1", "type"=>"integer"}}}
19
+
20
+ it "should typecast a nil value in a tuple" do
21
+ @mutator.mutate(
22
+ ["universe-id", {"type"=>"integer", "nil"=>"true"}]
23
+ ).should == ["universe-id", nil]
24
+ end
25
+
26
+ it "should leave a string value in a tuple unchanged" do
27
+ @mutator.mutate(
28
+ ["name", {"__content__" => "Wooz"}]
29
+ ).should == ["name", "Wooz"]
30
+ end
31
+
32
+ it "should cast an integer value in a tuple" do
33
+ @mutator.mutate(
34
+ ["id", {"type"=>"integer", "__content__"=>"1"}]
35
+ ).should == ["id", 1]
36
+ end
37
+
38
+ it "should step into a value if it is a hash" do
39
+ @mutator.mutate(
40
+ ["ResultSet", {
41
+ "firstResultPosition"=>"1", "totalResultsReturned"=>"1",
42
+ "xsi:schemaLocation"=>"urn:ooga:on http://api.search.ooga.com/NewsSearchService/V1/NewsSearchResponse.xsd",
43
+ "totalResultsAvailable"=>"23287",
44
+ "Result"=>{
45
+ "UniqueId"=>{"__content__"=>"1", "type" => "integer"},
46
+ "PublishDate"=>{"__content__"=>"20090424", "type" => "date"},
47
+ "Language"=>{"__content__"=>"en"},
48
+ "Title"=>{"__content__"=>"Wootler: Wook focus should be Klingon, not India"},
49
+ "ClickUrls"=>[
50
+ {"One" => {"__content__"=>"http://news.ooga.com/s/ap/20090424/ap_on_go_ca_st_pe/us_us_wookieland_5"}},
51
+ {"Two" => {"__content__"=>"http://news.ooga.com/s/ap/20090424/ap_on_go_ca_st_pe/us_us_wookieland_6"}},
52
+ ]
53
+
54
+ }
55
+ }
56
+ ]
57
+ ).should == ["ResultSet", {
58
+ "firstResultPosition"=>"1", "totalResultsReturned"=>"1",
59
+ "xsi:schemaLocation"=>"urn:ooga:on http://api.search.ooga.com/NewsSearchService/V1/NewsSearchResponse.xsd",
60
+ "totalResultsAvailable"=>"23287",
61
+ "Result"=>{
62
+ "UniqueId"=> 1,
63
+ "PublishDate"=>Date.parse("20090424"),
64
+ "Language"=>"en",
65
+ "Title"=>"Wootler: Wook focus should be Klingon, not India",
66
+ "ClickUrls"=>[
67
+ {"One" => "http://news.ooga.com/s/ap/20090424/ap_on_go_ca_st_pe/us_us_wookieland_5"},
68
+ {"Two" => "http://news.ooga.com/s/ap/20090424/ap_on_go_ca_st_pe/us_us_wookieland_6"},
69
+ ]
70
+ }
71
+ }
72
+ ]
73
+ end
74
+ end
75
+ end
@@ -0,0 +1,21 @@
1
+ # Copyright 2009 Sidu Ponnappa
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 File.dirname(__FILE__) + '/../../spec_helper'
11
+
12
+ module Wrest::Components
13
+ describe Mutators do
14
+ it "should know how to chain mutators without having to namespace them all" do
15
+ mutator = Mutators.chain(:xml_mini_type_caster, :xml_simple_type_caster, :camel_to_snake_case)
16
+ mutator.class.should == Mutators::XmlMiniTypeCaster
17
+ mutator.next_mutator.class.should == Mutators::XmlSimpleTypeCaster
18
+ mutator.next_mutator.next_mutator.class.should == Mutators::CamelToSnakeCase
19
+ end
20
+ end
21
+ end
@@ -6,7 +6,7 @@ module Wrest::Components::Translators
6
6
  http_response = mock('Http Reponse')
7
7
  http_response.should_receive(:body).and_return("<ooga><age>12</age></ooga>")
8
8
 
9
- Xml.deserialise(http_response).should == {"ooga"=>[{"age"=>["12"]}]}
9
+ Xml.deserialise(http_response).should == {"ooga"=>{"age"=>{"__content__" => "12"}}}
10
10
  end
11
11
  end
12
12
  end
@@ -1,3 +1,12 @@
1
+ # Copyright 2009 Sidu Ponnappa
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
+
1
10
  require File.dirname(__FILE__) + '/../../spec_helper'
2
11
 
3
12
  module Wrest::Components
@@ -33,13 +33,13 @@ module Wrest
33
33
  Uri.new('https://localhost:3000').should_not == Uri.new('http://localhost:3000')
34
34
  Uri.new('http://localhost:3000').should == Uri.new('http://localhost:3000')
35
35
  end
36
-
37
-
36
+
37
+
38
38
  it "should have the same hash code if it is the same uri" do
39
39
  Uri.new('https://localhost:3000').hash.should == Uri.new('https://localhost:3000').hash
40
40
  Uri.new('https://localhost:3001').hash.should_not == Uri.new('https://localhost:3000').hash
41
41
  end
42
-
42
+
43
43
  describe 'Get' do
44
44
  it "should know how to get" do
45
45
  uri = "http://localhost:3000/glassware".to_uri
@@ -77,7 +77,7 @@ module Wrest
77
77
  uri.get(:owner => 'Kai', :type => 'bottle')
78
78
  end
79
79
  end
80
-
80
+
81
81
  it "should know how to post" do
82
82
  uri = "http://localhost:3000/glassware".to_uri
83
83
  uri.should_not be_https
@@ -114,6 +114,18 @@ module Wrest
114
114
  uri.delete({:owner => 'Kai', :type => 'bottle'}, :page => '2', :per_page => '5')
115
115
  end
116
116
 
117
+ it "should know how to ask for options on a URI" do
118
+ uri = "http://localhost:3000/glassware".to_uri
119
+ uri.should_not be_https
120
+
121
+ http = mock(Net::HTTP)
122
+ Net::HTTP.should_receive(:new).with('localhost', 3000).and_return(http)
123
+
124
+ http.should_receive(:options).with('/glassware').and_return(build_ok_response(nil))
125
+
126
+ uri.options
127
+ end
128
+
117
129
  it "should not mutate state of the uri across requests" do
118
130
  uri = "http://localhost:3000/glassware".to_uri
119
131
  uri.should_not be_https
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wrest
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sidu Ponnappa
@@ -9,8 +9,8 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-04-24 00:00:00 +05:30
13
- default_executable: wrest
12
+ date: 2009-05-07 00:00:00 +05:30
13
+ default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: activesupport
@@ -20,17 +20,7 @@ dependencies:
20
20
  requirements:
21
21
  - - ">="
22
22
  - !ruby/object:Gem::Version
23
- version: 2.1.0
24
- version:
25
- - !ruby/object:Gem::Dependency
26
- name: xml-simple
27
- type: :runtime
28
- version_requirement:
29
- version_requirements: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- version: 1.0.11
23
+ version: 2.3.2
34
24
  version:
35
25
  - !ruby/object:Gem::Dependency
36
26
  name: json
@@ -46,6 +36,7 @@ description: Wrest is a REST client library which allows you to quickly build ob
46
36
  email: ckponnappa@gmail.com
47
37
  executables:
48
38
  - wrest
39
+ - jwrest
49
40
  extensions: []
50
41
 
51
42
  extra_rdoc_files:
@@ -60,15 +51,16 @@ files:
60
51
  - lib/wrest.rb
61
52
  - lib/wrest/components.rb
62
53
  - lib/wrest/components/attributes_container.rb
54
+ - lib/wrest/components/attributes_container/typecaster.rb
63
55
  - lib/wrest/components/mutators.rb
64
56
  - lib/wrest/components/mutators/base.rb
65
57
  - lib/wrest/components/mutators/camel_to_snake_case.rb
58
+ - lib/wrest/components/mutators/xml_mini_type_caster.rb
66
59
  - lib/wrest/components/mutators/xml_simple_type_caster.rb
67
60
  - lib/wrest/components/translators.rb
68
61
  - lib/wrest/components/translators/content_types.rb
69
62
  - lib/wrest/components/translators/json.rb
70
63
  - lib/wrest/components/translators/xml.rb
71
- - lib/wrest/components/typecast_helpers.rb
72
64
  - lib/wrest/core_ext/hash.rb
73
65
  - lib/wrest/core_ext/hash/conversions.rb
74
66
  - lib/wrest/core_ext/string.rb
@@ -79,6 +71,7 @@ files:
79
71
  - lib/wrest/resource.rb
80
72
  - lib/wrest/resource/base.rb
81
73
  - lib/wrest/resource/collection.rb
74
+ - lib/wrest/resource/state.rb
82
75
  - lib/wrest/response.rb
83
76
  - lib/wrest/uri.rb
84
77
  - lib/wrest/uri_template.rb
@@ -87,10 +80,13 @@ files:
87
80
  - spec/rcov.opts
88
81
  - spec/spec.opts
89
82
  - spec/spec_helper.rb
83
+ - spec/wrest/components/attributes_container/typecaster_spec.rb
90
84
  - spec/wrest/components/attributes_container_spec.rb
91
85
  - spec/wrest/components/mutators/base_spec.rb
92
86
  - spec/wrest/components/mutators/camel_to_snake_spec.rb
87
+ - spec/wrest/components/mutators/xml_mini_type_caster_spec.rb
93
88
  - spec/wrest/components/mutators/xml_simple_type_caster_spec.rb
89
+ - spec/wrest/components/mutators_spec.rb
94
90
  - spec/wrest/components/translators/xml_spec.rb
95
91
  - spec/wrest/components/translators_spec.rb
96
92
  - spec/wrest/core_ext/hash/conversions_spec.rb
@@ -130,10 +126,13 @@ summary: REST client library for Ruby.
130
126
  test_files:
131
127
  - spec/custom_matchers/custom_matchers.rb
132
128
  - spec/spec_helper.rb
129
+ - spec/wrest/components/attributes_container/typecaster_spec.rb
133
130
  - spec/wrest/components/attributes_container_spec.rb
134
131
  - spec/wrest/components/mutators/base_spec.rb
135
132
  - spec/wrest/components/mutators/camel_to_snake_spec.rb
133
+ - spec/wrest/components/mutators/xml_mini_type_caster_spec.rb
136
134
  - spec/wrest/components/mutators/xml_simple_type_caster_spec.rb
135
+ - spec/wrest/components/mutators_spec.rb
137
136
  - spec/wrest/components/translators/xml_spec.rb
138
137
  - spec/wrest/components/translators_spec.rb
139
138
  - spec/wrest/core_ext/hash/conversions_spec.rb