wrest 1.0.0.beta1 → 1.0.0.beta2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (93) hide show
  1. data/CHANGELOG +14 -2
  2. data/LICENCE +7 -0
  3. data/README.rdoc +15 -69
  4. data/lib/wrest/components/container/alias_accessors.rb +1 -1
  5. data/lib/wrest/components/container/alias_accessors.rbc +905 -0
  6. data/lib/wrest/components/container/typecaster.rb +5 -5
  7. data/lib/wrest/components/container/typecaster.rbc +1985 -0
  8. data/lib/wrest/components/container.rb +11 -12
  9. data/lib/wrest/components/container.rbc +2466 -0
  10. data/lib/wrest/components/mutators/base.rbc +702 -0
  11. data/lib/wrest/components/mutators/camel_to_snake_case.rbc +360 -0
  12. data/lib/wrest/components/mutators/xml_mini_type_caster.rbc +679 -0
  13. data/lib/wrest/components/mutators/xml_simple_type_caster.rbc +559 -0
  14. data/lib/wrest/components/mutators.rbc +650 -0
  15. data/lib/wrest/components/translators/content_types.rbc +339 -0
  16. data/lib/wrest/components/translators/json.rbc +462 -0
  17. data/lib/wrest/components/translators/xml.rbc +457 -0
  18. data/lib/wrest/components/translators.rbc +517 -0
  19. data/lib/wrest/components.rbc +217 -0
  20. data/lib/wrest/core_ext/hash/conversions.rbc +501 -0
  21. data/lib/wrest/core_ext/hash.rbc +182 -0
  22. data/lib/wrest/core_ext/string/conversions.rbc +471 -0
  23. data/lib/wrest/core_ext/string.rbc +182 -0
  24. data/lib/wrest/curl/response.rb +8 -0
  25. data/lib/wrest/curl.rbc +704 -0
  26. data/lib/wrest/exceptions.rbc +312 -0
  27. data/lib/wrest/http_shared/headers.rb +0 -7
  28. data/lib/wrest/http_shared/headers.rbc +353 -0
  29. data/lib/wrest/http_shared/standard_headers.rbc +336 -0
  30. data/lib/wrest/http_shared/standard_tokens.rbc +316 -0
  31. data/lib/wrest/http_shared.rbc +279 -0
  32. data/lib/wrest/native/connection_factory.rbc +445 -0
  33. data/lib/wrest/native/delete.rbc +371 -0
  34. data/lib/wrest/native/get.rb +26 -0
  35. data/lib/wrest/native/get.rbc +855 -0
  36. data/lib/wrest/native/options.rbc +347 -0
  37. data/lib/wrest/native/post.rbc +388 -0
  38. data/lib/wrest/native/put.rbc +388 -0
  39. data/lib/wrest/native/redirection.rbc +520 -0
  40. data/lib/wrest/native/request.rb +4 -2
  41. data/lib/wrest/native/request.rbc +1675 -0
  42. data/lib/wrest/native/response.rb +53 -2
  43. data/lib/wrest/native/response.rbc +2150 -0
  44. data/lib/wrest/native/session.rbc +1372 -0
  45. data/lib/wrest/native.rbc +513 -0
  46. data/lib/wrest/resource/base.rbc +2115 -0
  47. data/lib/wrest/resource.rbc +163 -0
  48. data/lib/wrest/uri.rbc +2599 -0
  49. data/lib/wrest/uri_template.rbc +505 -0
  50. data/lib/wrest/version.rb +1 -1
  51. data/lib/wrest/version.rbc +372 -0
  52. data/lib/wrest.rb +1 -1
  53. data/lib/wrest.rbc +1900 -0
  54. metadata +99 -102
  55. data/Rakefile +0 -495
  56. data/VERSION.yml +0 -5
  57. data/bin/jwrest +0 -3
  58. data/examples/delicious.rb +0 -72
  59. data/examples/facebook.rb +0 -101
  60. data/examples/imgur_multipart.rb +0 -24
  61. data/examples/keep_alive.rb +0 -37
  62. data/examples/redirection.rb +0 -27
  63. data/examples/twitter.rb +0 -78
  64. data/examples/twitter_public_timeline.rb +0 -32
  65. data/examples/wow_realm_status.rb +0 -67
  66. data/init.rb +0 -0
  67. data/spec/custom_matchers/custom_matchers.rb +0 -2
  68. data/spec/rcov.opts +0 -4
  69. data/spec/spec.opts.disable +0 -6
  70. data/spec/unit/spec_helper.rb +0 -35
  71. data/spec/unit/wrest/components/attributes_container/alias_accessors_spec.rb +0 -49
  72. data/spec/unit/wrest/components/attributes_container/typecaster_spec.rb +0 -83
  73. data/spec/unit/wrest/components/attributes_container_spec.rb +0 -254
  74. data/spec/unit/wrest/components/mutators/base_spec.rb +0 -42
  75. data/spec/unit/wrest/components/mutators/camel_to_snake_spec.rb +0 -22
  76. data/spec/unit/wrest/components/mutators/xml_mini_type_caster_spec.rb +0 -75
  77. data/spec/unit/wrest/components/mutators/xml_simple_type_caster_spec.rb +0 -47
  78. data/spec/unit/wrest/components/mutators_spec.rb +0 -21
  79. data/spec/unit/wrest/components/translators/xml_spec.rb +0 -16
  80. data/spec/unit/wrest/components/translators_spec.rb +0 -18
  81. data/spec/unit/wrest/core_ext/hash/conversions_spec.rb +0 -22
  82. data/spec/unit/wrest/core_ext/string/conversions_spec.rb +0 -39
  83. data/spec/unit/wrest/curl/request_spec.rb +0 -19
  84. data/spec/unit/wrest/curl/response_spec.rb +0 -16
  85. data/spec/unit/wrest/http/response_spec.rb +0 -24
  86. data/spec/unit/wrest/native/redirection_spec.rb +0 -42
  87. data/spec/unit/wrest/native/request_spec.rb +0 -71
  88. data/spec/unit/wrest/native/response_spec.rb +0 -72
  89. data/spec/unit/wrest/native/session_spec.rb +0 -74
  90. data/spec/unit/wrest/resource/base_spec.rb +0 -274
  91. data/spec/unit/wrest/uri_spec.rb +0 -273
  92. data/spec/unit/wrest/uri_template_spec.rb +0 -38
  93. data/wrest.gemspec +0 -168
@@ -1,24 +0,0 @@
1
- # Copyright 2009 - 2010 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 'pp'
11
- require File.expand_path(File.dirname(__FILE__) + "/../lib/wrest")
12
-
13
- # See http://code.google.com/p/imgur-api
14
- imgur_key = 'f6561f62e13422bb25a1e738e9927d3b' # use your own key, this one is fake
15
- file_path = 'VoA10.png'
16
-
17
- # Using the eminently sensible Base64 encoded imgur file upload API
18
- pp 'http://imgur.com/api/upload.xml'.to_uri.post_form(:image => [IO.read(file_path)].pack('m'), :key => imgur_key).deserialise
19
-
20
- # If an API requires multipart posts - like the Facebook API - you can do that too
21
- require 'wrest/multipart'
22
- File.open(file_path) do |file|
23
- pp 'http://imgur.com/api/upload.xml'.to_uri.post_multipart(:image => UploadIO.new(file, "image/png", file_path), :key => imgur_key).deserialise
24
- end
@@ -1,37 +0,0 @@
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.expand_path(File.dirname(__FILE__) + "/../lib/wrest")
11
- require 'pp'
12
-
13
- Wrest.logger = Logger.new(STDOUT)
14
- Wrest.logger.level = Logger::DEBUG # Set this to Logger::INFO or higher to disable request logging
15
- include Wrest
16
-
17
-
18
- # This is a basic example demonstrating using keep-alive connections.
19
- # Observe the requests logs - they will look something like this:
20
- # --> (GET 12207030 12546830) http://github.com:80/api/v1/json/kaiwren
21
- #
22
- # The second number after the GET is a hash identifying the connection used.
23
- # You will notice that all requests have the same hash therefore use the same connection.
24
-
25
- Http::Session.new('http://github.com/api/v1/json') do |s|
26
- puts "Response Connection Header - a response token of 'Keep-Alive' indicates that the server has created a keep-alive connection"
27
- puts
28
- puts s.get('/kaiwren')['Connection']
29
- puts s.get('/niranjan')['Connection']
30
-
31
- puts
32
- puts '*' * 10
33
- puts
34
-
35
- pp s.get('/kaiwren').deserialise
36
- pp s.get('/niranjan').deserialise
37
- end
@@ -1,27 +0,0 @@
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.expand_path(File.dirname(__FILE__) + "/../lib/wrest")
11
- require 'pp'
12
-
13
- Wrest.logger = Logger.new(STDOUT)
14
- Wrest.logger.level = Logger::DEBUG # Set this to Logger::INFO or higher to disable request logging
15
-
16
- # google.com redirects to www.google.com so this is live test for redirection
17
- pp 'http://google.com'.to_uri.get.body
18
-
19
- puts '', '*'*70, ''
20
-
21
- # Do a get with auto follow redirects turned off
22
- pp 'http://google.com'.to_uri(:follow_redirects => false).get.body
23
-
24
- puts '', '*'*70, ''
25
-
26
- # Do a get with auto follow redirects limited, causing an exception.
27
- 'http://google.com'.to_uri(:follow_redirects_limit => 1).get.body
data/examples/twitter.rb DELETED
@@ -1,78 +0,0 @@
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.expand_path(File.dirname(__FILE__) + "/../lib/wrest")
11
- require 'pp'
12
-
13
- Wrest.logger = Logger.new(STDOUT)
14
- Wrest.logger.level = Logger::DEBUG # Set this to Logger::INFO or higher to disable request logging
15
-
16
- # This example shows a more object oriented approach
17
- # to accessing Twitter using Wrest.
18
- #
19
- # Twitter is your twitter account. Every tweet is wrapped in
20
- # an instance of Tweet. Every Tweet has one TwitterUser.
21
-
22
- class Twitter
23
- def initialize(options)
24
- @uri = "https://twitter.com".to_uri(options)
25
- end
26
-
27
- # which can be :friends, :user or :public
28
- # options[:query] can be things like since, since_id, count, etc.
29
- def timeline(which = :friends, options={})
30
- @uri["/statuses/#{which}_timeline.json"].get(options).deserialise.collect{|tweet| Tweet.new(tweet)}
31
- end
32
-
33
- def post(text)
34
- Tweet.new @uri['/statuses/update.json'].post('', {'User-Agent' => "Wrest/#{Wrest::VERSION::STRING}"}, :status => text).deserialise
35
- end
36
- end
37
-
38
- class TwitterUser
39
- # This will turn this class into a wrapper
40
- # for the deserialised data from a response.
41
- #
42
- # All the keys in the hash are exposed as methods.
43
- include Wrest::Components::Container
44
-
45
- # We'd prefer the user's profile url to be
46
- # a Wrest::Uri rather than a String, wouldn't we?
47
- #
48
- # Remember, using typecasting _will_
49
- # slow down instance construction marginally, so turn it on
50
- # only if you need it.
51
- typecast :url => lambda{|url| url.to_uri}
52
- end
53
-
54
- class Tweet
55
- include Wrest::Components::Container
56
-
57
- typecast :user => lambda{|user| TwitterUser.new(user) }
58
- end
59
-
60
-
61
- twitter = Twitter.new(:username => 'ponnappa', :password => 'ha!likeImchecking*that*in')
62
-
63
- pp twitter.post("This tweet via the Twitter example in #wrest #{Wrest::VERSION::STRING}, http://github.com/kaiwren/wrest")
64
-
65
- puts '', '*'*70, ''
66
-
67
- tweets = twitter.timeline(:friends, :since_id => 20751449)
68
-
69
- # Print the name of the first user in my timeline.
70
- puts tweets.first.user.name
71
-
72
- puts '', '*'*70, ''
73
-
74
- # Just remember that not everyone on Twitter has a
75
- # url. On the other hand, some have more than one.
76
- # This is just a cute little example that deals with
77
- # the simple case of a single url.
78
- puts tweets.first.user.url.get.body
@@ -1,32 +0,0 @@
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.expand_path(File.dirname(__FILE__) + "/../lib/wrest")
11
- require 'pp'
12
-
13
- Wrest.logger = Logger.new(STDOUT)
14
- Wrest.logger.level = Logger::DEBUG # Set this to Logger::INFO or higher to disable request logging
15
-
16
- # Optionally uncomment the following line to use the significantly faster libcurl library.
17
- # This uses the patron gem - (sudo) gem install patron
18
- # IMPORTANT: Libcurl support is currently in alpha and is both incomplete and unstable!
19
- # Wrest.use_curl
20
-
21
- # This is a basic example demonstrating GET and json deserialisation. The timeout field is optional, of course (it defaults to 60), but you can reduce it to a low number like 1 to force the request to timeout.
22
-
23
- response = 'http://twitter.com/statuses/public_timeline.json'.to_uri(:timeout => 5).get
24
-
25
- puts "Code: #{response.code}"
26
- puts "Message: #{response.message}"
27
- puts "Headers: #{response.headers.inspect}"
28
- puts
29
- puts "Deserialised Body: #{response.deserialise.inspect}"
30
- puts '*' * 50
31
- puts '*' * 50
32
- puts "Body: #{response.body.inspect}"
@@ -1,67 +0,0 @@
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.expand_path(File.dirname(__FILE__) + "/../lib/wrest")
11
-
12
- Wrest.logger = Logger.new(STDOUT)
13
- Wrest.logger.level = Logger::DEBUG # Set this to Logger::INFO or higher to disable request logging
14
-
15
- # Optionally uncomment the following line to use the significantly faster libcurl library.
16
- # This uses the patron gem - (sudo) gem install patron
17
- # IMPORTANT: Libcurl support is currently in alpha and is both incomplete and unstable!
18
- # Wrest.use_curl
19
-
20
-
21
- include Wrest
22
-
23
- class Realm
24
- include Components::Container
25
-
26
- typecast :t => lambda{|type|
27
- case type
28
- when '1' then 'Normal'
29
- when '2' then 'PvP'
30
- when '3' then 'RP'
31
- when '4' then 'RP PvP'
32
- end
33
- },
34
- :s => lambda{|status|
35
- case status
36
- when '1' then 'Available'
37
- else 'Unavailable'
38
- end
39
- },
40
- :l => lambda{|load|
41
- case load
42
- when '1' then 'Low'
43
- when '2' then 'Normal'
44
- when '3' then 'High'
45
- when '4' then 'Max'
46
- end
47
- }
48
-
49
- alias_accessors :t => :type,
50
- :s => :status,
51
- :l => :load,
52
- :n => :name
53
-
54
- def available?
55
- self.s == 'Available'
56
- end
57
- end
58
-
59
- realms = "http://www.worldofwarcraft.com/realmstatus/status.xml".to_uri.get.deserialise['page']['rs']['r'].collect{|data| Realm.new(data)}
60
-
61
- puts "Status of Nagrand: #{realms.find{|realm| realm.name == 'Nagrand'}.status}"
62
- puts
63
- puts "Listing All Available Realms:"
64
- puts
65
- puts "Realm\tLoad\tType"
66
- puts "-----------"
67
- realms.select(&:available?).each{|realm| puts "#{realm.name}\t#{realm.load}\t#{realm.type}" }
data/init.rb DELETED
File without changes
@@ -1,2 +0,0 @@
1
- module CustomMatchers
2
- end
data/spec/rcov.opts DELETED
@@ -1,4 +0,0 @@
1
- --text-report
2
- --html
3
- --exclude-only ^\/usr,^\/Library,^\/System,spec\/
4
- --output coverage
@@ -1,6 +0,0 @@
1
- --colour
2
- --format
3
- specdoc
4
- --loadby
5
- mtime
6
- --reverse
@@ -1,35 +0,0 @@
1
- require File.expand_path(File.dirname(__FILE__) + "/../../lib/wrest")
2
- require "#{Wrest::Root}/wrest/curl" unless RUBY_PLATFORM =~ /java/
3
- require 'rspec'
4
-
5
- ['/../custom_matchers/**/*.rb'].each{|directory|
6
- Dir["#{File.expand_path(File.dirname(__FILE__) + directory)}"].each { |file|
7
- require file
8
- }
9
- }
10
-
11
- Wrest.logger = Logger.new(File.open("#{Wrest::Root}/../log/test.log", 'a'))
12
-
13
- def p(*args)
14
- # super *(args << caller[0])
15
- super *(args << '<br/>')
16
- # super *args
17
- end
18
-
19
- def puts(*args)
20
- # super *(args << caller[0])
21
- super *(['<pre>'] + args + ['</pre>'])
22
- # super *args
23
- end
24
-
25
- RSpec.configure do |config|
26
- config.include(CustomMatchers)
27
- end
28
-
29
- def build_ok_response(body = '')
30
- mock(Net::HTTPOK).tap do |response|
31
- response.stub!(:code).and_return('200')
32
- response.stub!(:message).and_return('OK')
33
- response.stub!(:body).and_return(body)
34
- end
35
- end
@@ -1,49 +0,0 @@
1
- require File.dirname(__FILE__) + '/../../../spec_helper'
2
-
3
- module Wrest::Components
4
- describe Container::AliasAccessors do
5
- before :each do
6
- @Demon = Class.new
7
- @Demon.class_eval do
8
- include Wrest::Components::Container
9
- end
10
- end
11
-
12
- it "should provide a macro to enable aliasing accessors" do
13
- lambda{ @Demon.class_eval{ alias_accessors :shiriki => :chambala } }.should_not raise_error(NoMethodError)
14
- end
15
-
16
- describe 'aliasing' do
17
- before :each do
18
- @Demon.class_eval{ alias_accessors :sex => :gender, :age => :maturity }
19
- end
20
-
21
- it "should provide an accessor methods when we alias to an attribute" do
22
- demon = @Demon.new
23
- demon.should respond_to(:gender)
24
- demon.should respond_to(:gender=)
25
- demon.should respond_to(:gender?)
26
- demon.should respond_to(:maturity)
27
- demon.should respond_to(:maturity=)
28
- demon.should respond_to(:maturity?)
29
- end
30
-
31
- it "should ensure that the aliased getter method delegates to the actual getter" do
32
- demon = @Demon.new :sex => 'male'
33
- demon.gender.should == 'male'
34
- end
35
-
36
- it "should ensure that the aliased setter method delegates to the actual getter" do
37
- demon = @Demon.new
38
- demon.should_receive(:sex=).with('male')
39
- demon.gender = 'male'
40
- end
41
-
42
- it "should ensure that the aliased query method delegates to the actual queryier" do
43
- demon = @Demon.new :age => '1000'
44
- demon.gender?.should be_false
45
- demon.maturity?.should be_true
46
- end
47
- end
48
- end
49
- end
@@ -1,83 +0,0 @@
1
- require File.dirname(__FILE__) + '/../../../spec_helper'
2
-
3
- module Wrest::Components
4
- describe Container::Typecaster do
5
- before :each do
6
- @Demon = Class.new
7
- @Demon.class_eval do
8
- include Wrest::Components::Container
9
- include Wrest::Components::Container::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
- describe "where the value is not a typecastable type" do
20
- it "string should not typecast" do
21
- @Demon.class_eval{ typecast :age => lambda{|id_string| id_string.to_i} }
22
- kai_wren = @Demon.new('age' => :ooga)
23
- kai_wren.age.should == :ooga
24
- end
25
-
26
- it "hash should not typecast" do
27
- class TestUser
28
- include Wrest::Components::Container
29
- end
30
-
31
- @Demon.class_eval{ typecast :user => lambda{|user| TestUser.new(user)}}
32
-
33
- kai_wren = @Demon.new('user' => {'foo' => 'bar'})
34
- kai_wren.user.class.should == TestUser
35
- kai_wren.user.foo.should == 'bar'
36
- end
37
-
38
- it "array should not typecast" do
39
- @Demon.class_eval{ typecast :addresses => lambda{|addresses| addresses.first} }
40
- kai_wren = @Demon.new('addresses' => ['foo', 'bar'])
41
- kai_wren.addresses.should == 'foo'
42
- end
43
- end
44
-
45
- it "should leave nils unchanged" do
46
- @Demon.class_eval{ typecast :age => lambda{|id_string| id_string.to_i} }
47
- kai_wren = @Demon.new('age' => nil)
48
- kai_wren.age.should be_nil
49
- end
50
-
51
- it "should provide helpers for typcasting common types" do
52
- @Demon.class_eval{ typecast :age => as_integer }
53
- kai_wren = @Demon.new('age' => '1500')
54
- kai_wren.age.should == 1500
55
- end
56
-
57
- describe 'in subclasses' do
58
- before :each do
59
- @Sidhe = Class.new
60
- @Sidhe.class_eval do
61
- include Wrest::Components::Container
62
- include Wrest::Components::Container::Typecaster
63
-
64
- typecast :age => as_integer
65
- end
66
- end
67
-
68
- it "should inherit all defined typecasts" do
69
- @ChineseSidhe = Class.new(@Sidhe)
70
- kai_wren = @ChineseSidhe.new('age' => '1500')
71
- kai_wren.age.should == 1500
72
- end
73
-
74
- it "should discard all typecasts from parent if defined in child" do
75
- @ChineseSidhe = Class.new(@Sidhe)
76
- @ChineseSidhe.class_eval{ typecast :born_in => as_integer }
77
- kai_wren = @ChineseSidhe.new('age' => '1500', 'born_in' => '509')
78
- kai_wren.age.should == '1500'
79
- kai_wren.born_in.should == 509
80
- end
81
- end
82
- end
83
- end