rubysl-yaml 0.0.1 → 1.0.1

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 (62) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +0 -1
  3. data/.travis.yml +7 -0
  4. data/README.md +2 -2
  5. data/Rakefile +0 -1
  6. data/lib/rubysl/yaml.rb +2 -0
  7. data/lib/rubysl/yaml/version.rb +5 -0
  8. data/lib/rubysl/yaml/yaml.rb +440 -0
  9. data/lib/yaml.rb +1 -0
  10. data/lib/yaml/baseemitter.rb +247 -0
  11. data/lib/yaml/basenode.rb +216 -0
  12. data/lib/yaml/constants.rb +45 -0
  13. data/lib/yaml/dbm.rb +111 -0
  14. data/lib/yaml/encoding.rb +33 -0
  15. data/lib/yaml/error.rb +34 -0
  16. data/lib/yaml/loader.rb +14 -0
  17. data/lib/yaml/rubytypes.rb +409 -0
  18. data/lib/yaml/store.rb +43 -0
  19. data/lib/yaml/stream.rb +40 -0
  20. data/lib/yaml/stringio.rb +83 -0
  21. data/lib/yaml/syck.rb +44 -0
  22. data/lib/yaml/tag.rb +91 -0
  23. data/lib/yaml/types.rb +192 -0
  24. data/lib/yaml/yamlnode.rb +54 -0
  25. data/lib/yaml/ypath.rb +52 -0
  26. data/rubysl-yaml.gemspec +19 -17
  27. data/spec/add_builtin_type_spec.rb +1 -0
  28. data/spec/add_domain_type_spec.rb +1 -0
  29. data/spec/add_private_type_spec.rb +1 -0
  30. data/spec/add_ruby_type_spec.rb +1 -0
  31. data/spec/detect_implicit_spec.rb +1 -0
  32. data/spec/dump_spec.rb +35 -0
  33. data/spec/dump_stream_spec.rb +13 -0
  34. data/spec/each_document_spec.rb +9 -0
  35. data/spec/each_node_spec.rb +1 -0
  36. data/spec/emitter_spec.rb +1 -0
  37. data/spec/fixtures/common.rb +10 -0
  38. data/spec/fixtures/example_class.rb +5 -0
  39. data/spec/fixtures/strings.rb +36 -0
  40. data/spec/fixtures/test_yaml.yml +2 -0
  41. data/spec/generic_parser_spec.rb +1 -0
  42. data/spec/load_documents_spec.rb +7 -0
  43. data/spec/load_file_spec.rb +12 -0
  44. data/spec/load_spec.rb +111 -0
  45. data/spec/load_stream_spec.rb +1 -0
  46. data/spec/object_maker_spec.rb +1 -0
  47. data/spec/parse_documents_spec.rb +1 -0
  48. data/spec/parse_file_spec.rb +9 -0
  49. data/spec/parse_spec.rb +21 -0
  50. data/spec/parser_spec.rb +1 -0
  51. data/spec/quick_emit_spec.rb +1 -0
  52. data/spec/read_type_class_spec.rb +1 -0
  53. data/spec/shared/each_document.rb +18 -0
  54. data/spec/tag_class_spec.rb +9 -0
  55. data/spec/tagged_classes_spec.rb +9 -0
  56. data/spec/tagurize_spec.rb +8 -0
  57. data/spec/to_yaml_spec.rb +97 -0
  58. data/spec/transfer_spec.rb +1 -0
  59. data/spec/try_implicit_spec.rb +1 -0
  60. metadata +163 -88
  61. data/lib/rubysl-yaml.rb +0 -7
  62. data/lib/rubysl-yaml/version.rb +0 -5
@@ -0,0 +1,54 @@
1
+ #
2
+ # YAML::YamlNode class
3
+ #
4
+ require 'yaml/basenode'
5
+
6
+ module YAML
7
+
8
+ #
9
+ # YAML Generic Model container
10
+ #
11
+ class YamlNode
12
+ include BaseNode
13
+ attr_accessor :kind, :type_id, :value, :anchor
14
+ def initialize( t, v )
15
+ @type_id = t
16
+ if Hash === v
17
+ @kind = 'map'
18
+ @value = {}
19
+ v.each { |k,v|
20
+ @value[ k.transform ] = [ k, v ]
21
+ }
22
+ elsif Array === v
23
+ @kind = 'seq'
24
+ @value = v
25
+ elsif String === v
26
+ @kind = 'scalar'
27
+ @value = v
28
+ end
29
+ end
30
+
31
+ #
32
+ # Transform this node fully into a native type
33
+ #
34
+ def transform
35
+ t = nil
36
+ if @value.is_a? Hash
37
+ t = {}
38
+ @value.each { |k,v|
39
+ t[ k ] = v[1].transform
40
+ }
41
+ elsif @value.is_a? Array
42
+ t = []
43
+ @value.each { |v|
44
+ t.push v.transform
45
+ }
46
+ else
47
+ t = @value
48
+ end
49
+ YAML.transfer_method( @type_id, t )
50
+ end
51
+
52
+ end
53
+
54
+ end
data/lib/yaml/ypath.rb ADDED
@@ -0,0 +1,52 @@
1
+ #
2
+ # YAML::YPath
3
+ #
4
+
5
+ module YAML
6
+
7
+ class YPath
8
+ attr_accessor :segments, :predicates, :flags
9
+ def initialize( str )
10
+ @segments = []
11
+ @predicates = []
12
+ @flags = nil
13
+ while str =~ /^\/?(\/|[^\/\[]+)(?:\[([^\]]+)\])?/
14
+ @segments.push $1
15
+ @predicates.push $2
16
+ str = $'
17
+ end
18
+ unless str.to_s.empty?
19
+ @segments += str.split( "/" )
20
+ end
21
+ if @segments.length == 0
22
+ @segments.push "."
23
+ end
24
+ end
25
+ def YPath.each_path( str )
26
+ #
27
+ # Find choices
28
+ #
29
+ paths = []
30
+ str = "(#{ str })"
31
+ while str.sub!( /\(([^()]+)\)/, "\n#{ paths.length }\n" )
32
+ paths.push $1.split( '|' )
33
+ end
34
+
35
+ #
36
+ # Construct all possible paths
37
+ #
38
+ all = [ str ]
39
+ ( paths.length - 1 ).downto( 0 ) do |i|
40
+ all = all.collect do |a|
41
+ paths[i].collect do |p|
42
+ a.gsub( /\n#{ i }\n/, p )
43
+ end
44
+ end.flatten.uniq
45
+ end
46
+ all.collect do |path|
47
+ yield YPath.new( path )
48
+ end
49
+ end
50
+ end
51
+
52
+ end
data/rubysl-yaml.gemspec CHANGED
@@ -1,22 +1,24 @@
1
- # -*- encoding: utf-8 -*-
2
- require File.expand_path('../lib/rubysl-yaml/version', __FILE__)
1
+ # coding: utf-8
2
+ require './lib/rubysl/yaml/version'
3
3
 
4
- Gem::Specification.new do |gem|
5
- gem.authors = ["Brian Shirai"]
6
- gem.email = ["brixen@gmail.com"]
7
- gem.description = %q{Ruby Standard Library - yaml}
8
- gem.summary = %q{Ruby Standard Library - yaml}
9
- gem.homepage = ""
4
+ Gem::Specification.new do |spec|
5
+ spec.name = "rubysl-yaml"
6
+ spec.version = RubySL::YAML::VERSION
7
+ spec.authors = ["Brian Shirai"]
8
+ spec.email = ["brixen@gmail.com"]
9
+ spec.description = %q{Ruby standard library YAML.}
10
+ spec.summary = %q{Ruby standard library YAML.}
11
+ spec.homepage = "https://github.com/rubysl/rubysl-yaml"
12
+ spec.license = "BSD"
10
13
 
11
- gem.files = `git ls-files`.split($\)
12
- gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
13
- gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
14
- gem.name = "rubysl-yaml"
15
- gem.require_paths = ["lib"]
16
- gem.version = RubySL::Yaml::VERSION
14
+ spec.files = `git ls-files`.split($/)
15
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
16
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
17
+ spec.require_paths = ["lib"]
17
18
 
18
- gem.add_runtime_dependency "redcard", "~> 1.0"
19
+ spec.add_runtime_dependency "rubysl-syck", "~> 1.0"
19
20
 
20
- gem.add_development_dependency "rake", "~> 10.0"
21
- gem.add_development_dependency "mspec", "~> 1.5"
21
+ spec.add_development_dependency "bundler", "~> 1.3"
22
+ spec.add_development_dependency "rake", "~> 10.0"
23
+ spec.add_development_dependency "mspec", "~> 1.5"
22
24
  end
@@ -0,0 +1 @@
1
+ require File.expand_path('../fixtures/common', __FILE__)
@@ -0,0 +1 @@
1
+ require File.expand_path('../fixtures/common', __FILE__)
@@ -0,0 +1 @@
1
+ require File.expand_path('../fixtures/common', __FILE__)
@@ -0,0 +1 @@
1
+ require File.expand_path('../fixtures/common', __FILE__)
@@ -0,0 +1 @@
1
+ require File.expand_path('../fixtures/common', __FILE__)
data/spec/dump_spec.rb ADDED
@@ -0,0 +1,35 @@
1
+ require File.expand_path('../fixtures/common', __FILE__)
2
+
3
+ # TODO: WTF is this using a global?
4
+ describe "YAML.dump" do
5
+ after :each do
6
+ rm_r $test_file
7
+ end
8
+
9
+ it "converts an object to YAML and write result to io when io provided" do
10
+ File.open($test_file, 'w' ) do |io|
11
+ YAML.dump( ['badger', 'elephant', 'tiger'], io )
12
+ end
13
+ YAML.load_file($test_file).should == ['badger', 'elephant', 'tiger']
14
+ end
15
+
16
+ it "returns a string containing dumped YAML when no io provided" do
17
+ YAML.dump( :locked ).should match_yaml("--- :locked\n")
18
+ end
19
+
20
+ it "returns the same string that #to_yaml on objects" do
21
+ ["a", "b", "c"].to_yaml.should == YAML.dump(["a", "b", "c"])
22
+ end
23
+
24
+ it "dumps strings into YAML strings" do
25
+ YAML.dump("str").should match_yaml("--- str\n")
26
+ end
27
+
28
+ it "dumps hashes into YAML key-values" do
29
+ YAML.dump({ "a" => "b" }).should match_yaml("--- \na: b\n")
30
+ end
31
+
32
+ it "dumps Arrays into YAML collection" do
33
+ YAML.dump(["a", "b", "c"]).should match_yaml("--- \n- a\n- b\n- c\n")
34
+ end
35
+ end
@@ -0,0 +1,13 @@
1
+ require File.expand_path('../fixtures/common', __FILE__)
2
+
3
+ describe "YAML.dump_stream" do
4
+ ruby_version_is "" ... "2.0" do
5
+ it "returns an empty string when not passed any objects" do
6
+ YAML.dump_stream.should == ""
7
+ end
8
+ end
9
+
10
+ it "returns a YAML stream containing the objects passed" do
11
+ YAML.dump_stream('foo', 20, [], {}).should match_yaml("--- foo\n--- 20\n--- []\n\n--- {}\n\n")
12
+ end
13
+ end
@@ -0,0 +1,9 @@
1
+ require File.expand_path('../fixtures/common', __FILE__)
2
+ require File.expand_path('../fixtures/strings', __FILE__)
3
+ require File.expand_path('../shared/each_document', __FILE__)
4
+
5
+ ruby_version_is "" ... "2.0" do
6
+ describe "YAML#each_document" do
7
+ it_behaves_like :yaml_each_document, :each_document
8
+ end
9
+ end
@@ -0,0 +1 @@
1
+ require File.expand_path('../fixtures/common', __FILE__)
@@ -0,0 +1 @@
1
+ require File.expand_path('../fixtures/common', __FILE__)
@@ -0,0 +1,10 @@
1
+ begin
2
+ require 'syck'
3
+ rescue LoadError
4
+ # do nothing
5
+ end
6
+
7
+ require 'yaml'
8
+
9
+ $test_file = tmp("yaml_test_file")
10
+ $test_parse_file = File.dirname(__FILE__) + "/test_yaml.yml"
@@ -0,0 +1,5 @@
1
+ class FooBar
2
+ def initialize(name)
3
+ @name = name
4
+ end
5
+ end
@@ -0,0 +1,36 @@
1
+ $complex_key_1 = <<EOY
2
+ ? # PLAY SCHEDULE
3
+ - Detroit Tigers
4
+ - Chicago Cubs
5
+ :
6
+ - 2001-07-23
7
+
8
+ ? [ New York Yankees,
9
+ Atlanta Braves ]
10
+ : [ 2001-07-02, 2001-08-12,
11
+ 2001-08-14 ]
12
+ EOY
13
+
14
+ $to_yaml_hash =
15
+ <<EOY
16
+ -
17
+ avg: 0.278
18
+ hr: 65
19
+ name: Mark McGwire
20
+ -
21
+ avg: 0.288
22
+ hr: 63
23
+ name: Sammy Sosa
24
+ EOY
25
+
26
+ $multidocument = <<EOY
27
+ ---
28
+ - Mark McGwire
29
+ - Sammy Sosa
30
+ - Ken Griffey
31
+
32
+ # Team ranking
33
+ ---
34
+ - Chicago Cubs
35
+ - St Louis Cardinals
36
+ EOY
@@ -0,0 +1,2 @@
1
+ project:
2
+ name: RubySpec
@@ -0,0 +1 @@
1
+ require File.expand_path('../fixtures/common', __FILE__)
@@ -0,0 +1,7 @@
1
+ require File.expand_path('../fixtures/common', __FILE__)
2
+ require File.expand_path('../fixtures/strings', __FILE__)
3
+ require File.expand_path('../shared/each_document', __FILE__)
4
+
5
+ describe "YAML.load_documents" do
6
+ it_behaves_like :yaml_each_document, :load_documents
7
+ end
@@ -0,0 +1,12 @@
1
+ require File.expand_path('../fixtures/common', __FILE__)
2
+
3
+ describe "YAML.load_file" do
4
+ after :each do
5
+ rm_r $test_file
6
+ end
7
+
8
+ it "returns a hash" do
9
+ File.open($test_file,'w' ){|io| YAML.dump( {"bar"=>2, "car"=>1}, io ) }
10
+ YAML.load_file($test_file).should == {"bar"=>2, "car"=>1}
11
+ end
12
+ end
data/spec/load_spec.rb ADDED
@@ -0,0 +1,111 @@
1
+ require File.expand_path('../fixtures/common', __FILE__)
2
+ require File.expand_path('../fixtures/strings', __FILE__)
3
+
4
+ describe "YAML.load" do
5
+ after :each do
6
+ rm_r $test_file
7
+ end
8
+
9
+ it "returns a document from current io stream when io provided" do
10
+ File.open($test_file, 'w') do |io|
11
+ YAML.dump( ['badger', 'elephant', 'tiger'], io )
12
+ end
13
+ File.open($test_file) { |yf| YAML.load( yf ) }.should == ['badger', 'elephant', 'tiger']
14
+ end
15
+
16
+ it "loads strings" do
17
+ strings = ["str",
18
+ " str",
19
+ "'str'",
20
+ "str",
21
+ " str",
22
+ "'str'",
23
+ "\"str\"",
24
+ "\n str",
25
+ "--- str",
26
+ "---\nstr",
27
+ "--- \nstr",
28
+ "--- \n str",
29
+ "--- 'str'"
30
+ ]
31
+ strings.each do |str|
32
+ YAML.load(str).should == "str"
33
+ end
34
+ end
35
+
36
+ it "fails on invalid keys" do
37
+ if YAML.to_s == "Psych"
38
+ error = Psych::SyntaxError
39
+ else
40
+ error = ArgumentError
41
+ end
42
+ lambda { YAML.load("key1: value\ninvalid_key") }.should raise_error(error)
43
+ end
44
+
45
+ it "accepts symbols" do
46
+ YAML.load( "--- :locked" ).should == :locked
47
+ end
48
+
49
+ it "accepts numbers" do
50
+ YAML.load("47").should == 47
51
+ YAML.load("-1").should == -1
52
+ end
53
+
54
+ it "accepts collections" do
55
+ expected = ["a", "b", "c"]
56
+ YAML.load("--- \n- a\n- b\n- c\n").should == expected
57
+ YAML.load("--- [a, b, c]").should == expected
58
+ YAML.load("[a, b, c]").should == expected
59
+ end
60
+
61
+ it "parses start markers" do
62
+ YAML.load("---\n").should == nil
63
+ YAML.load("--- ---\n").should == "---"
64
+ YAML.load("--- abc").should == "abc"
65
+ end
66
+
67
+ ruby_version_is "" ... "2.0" do
68
+ it "does not escape symbols" do
69
+ YAML.load("foobar: >= 123").should == { "foobar" => ">= 123"}
70
+ YAML.load("foobar: |= 567").should == { "foobar" => "|= 567"}
71
+ YAML.load("--- \n*.rb").should == "*.rb"
72
+ YAML.load("--- \n&.rb").should == "&.rb"
73
+ end
74
+ end
75
+
76
+ it "works with block sequence shortcuts" do
77
+ block_seq = "- - - one\n - two\n - three"
78
+ YAML.load(block_seq).should == [[["one", "two", "three"]]]
79
+ end
80
+
81
+ it "works on complex keys" do
82
+ expected = {
83
+ [ 'Detroit Tigers', 'Chicago Cubs' ] => [ Date.new( 2001, 7, 23 ) ],
84
+ [ 'New York Yankees', 'Atlanta Braves' ] => [ Date.new( 2001, 7, 2 ),
85
+ Date.new( 2001, 8, 12 ),
86
+ Date.new( 2001, 8, 14 ) ]
87
+ }
88
+ YAML.load($complex_key_1).should == expected
89
+ end
90
+
91
+ it "loads a symbol key that contains spaces" do
92
+ string = ":user name: This is the user name."
93
+ expected = { :"user name" => "This is the user name."}
94
+ YAML.load(string).should == expected
95
+ end
96
+
97
+ describe "with iso8601 timestamp" do
98
+ it "computes the microseconds" do
99
+ [ [YAML.load("2011-03-22t23:32:11.2233+01:00"), 223300],
100
+ [YAML.load("2011-03-22t23:32:11.0099+01:00"), 9900],
101
+ [YAML.load("2011-03-22t23:32:11.000076+01:00"), 76]
102
+ ].should be_computed_by(:usec)
103
+ end
104
+
105
+ ruby_bug "#4571", "1.9.2" do
106
+ it "rounds values smaller than 1 usec to 0 " do
107
+ YAML.load("2011-03-22t23:32:11.000000342222+01:00").usec.should == 0
108
+ end
109
+ end
110
+ end
111
+ end
@@ -0,0 +1 @@
1
+ require File.expand_path('../fixtures/common', __FILE__)
@@ -0,0 +1 @@
1
+ require File.expand_path('../fixtures/common', __FILE__)
@@ -0,0 +1 @@
1
+ require File.expand_path('../fixtures/common', __FILE__)