wrest 1.0.0.beta1 → 1.0.0.beta2

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.
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