Skip to content

Commit

Permalink
Sprinkle on a dusting of YAML refactoring, ensuring that classes and …
Browse files Browse the repository at this point in the history
…structs are autoloaded.
  • Loading branch information
bryckbost committed Sep 27, 2011
1 parent ff51ecb commit d5dd7e4
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 17 deletions.
6 changes: 6 additions & 0 deletions spec/autoloaded/instance_clazz.rb
@@ -0,0 +1,6 @@
module Autoloaded
class InstanceClazz
def perform
end
end
end
6 changes: 6 additions & 0 deletions spec/autoloaded/instance_struct.rb
@@ -0,0 +1,6 @@
module Autoloaded
class InstanceStruct < ::Struct.new(nil)
def perform
end
end
end
34 changes: 17 additions & 17 deletions spec/yaml_ext_spec.rb
@@ -1,31 +1,31 @@
require 'spec_helper'

describe YAML do
describe "YAML" do
it "should autoload classes that are unknown at runtime" do
lambda {
obj = YAML.load("--- !ruby/object:Autoloaded::Clazz {}")
obj.class.to_s.should == 'Autoloaded::Clazz'
yaml = "--- !ruby/class:Autoloaded::Clazz {}\n"
YAML.load(yaml).should == Autoloaded::Clazz
}.should_not raise_error
end

it "should autoload a struct" do
lambda {
yaml = "--- !ruby/class:Autoloaded::Struct {}\n"
YAML.load(yaml).should == Autoloaded::Struct
}.should_not raise_error
end

it "should autoload structs that are unknown at runtime" do
lambda {
obj = YAML.load("--- !ruby/struct:Autoloaded::Struct {}")
obj.class.to_s.should == 'Autoloaded::Struct'
yaml = "--- !ruby/struct:Autoloaded::InstanceStruct {}"
YAML.load(yaml).class.should == Autoloaded::InstanceStruct
}.should_not raise_error
end

# As we're overriding some of Yaml's internals it is best that our changes
# don't impact other places where Yaml is used. Or at least don't make it
# look like the exception is caused by DJ
it "should not raise exception on poorly formatted yaml" do
lambda do
YAML.load(<<-EOYAML
default:
<<: *login
EOYAML
)
end.should_not raise_error
it "should autoload the class for the instance" do
lambda {
yaml = "--- !ruby/object:Autoloaded::InstanceClazz {}\n"
YAML.load(yaml).class.should == Autoloaded::InstanceClazz
}.should_not raise_error
end

end

0 comments on commit d5dd7e4

Please sign in to comment.