asir 1.1.4 → 1.1.5

Sign up to get free protection for your applications and to get access to all the features.
data/ChangeLog CHANGED
@@ -1,3 +1,8 @@
1
+ 2012-12-05 Kurt A. Stephens <ks.github@kurtstephens.com>
2
+
3
+ * v1.1.5: New version.
4
+ * YAML: Support better handling of ASCII-8BIT in Psych.dump.
5
+
1
6
  2012-12-04 Kurt A. Stephens <ks.github@kurtstephens.com>
2
7
 
3
8
  * v1.1.4: New version.
@@ -11,7 +11,7 @@ module ASIR
11
11
  when Message, Result
12
12
  obj = obj.encode_more!
13
13
  end
14
- ::YAML::dump(obj)
14
+ yaml_dump(obj)
15
15
  end
16
16
 
17
17
  def _decode obj
@@ -22,7 +22,35 @@ module ASIR
22
22
  obj
23
23
  end
24
24
  end
25
+
26
+ attr_accessor :yaml_options
27
+ case RUBY_VERSION
28
+ when /^1\.8/
29
+ def yaml_dump obj
30
+ ::YAML::dump obj
31
+ end
32
+ else
33
+ def yaml_dump obj
34
+ ::YAML::dump(obj, nil, yaml_options || EMPTY_HASH)
35
+ end
36
+ end
25
37
  end # class
26
38
  end # class
27
39
  end # module
28
40
 
41
+ if defined? ::Psych
42
+ class Psych::Visitors::YAMLTree
43
+ alias :binary_without_option? :binary?
44
+ def binary? string
45
+ return false if @options[:never_binary]
46
+ result =
47
+ string.index("\x00") ||
48
+ string.count("\x00-\x7F", "^ -~\t\r\n").fdiv(string.length) > 0.3
49
+ unless @options[:ASCII_8BIT_ok]
50
+ result ||= string.encoding == Encoding::ASCII_8BIT
51
+ end
52
+ result
53
+ end
54
+ end
55
+ end
56
+
@@ -1,3 +1,3 @@
1
1
  module ASIR
2
- VERSION = "1.1.4"
2
+ VERSION = "1.1.5"
3
3
  end
@@ -13,7 +13,7 @@ else
13
13
  # require 'ruby-debug' # BROKEN in 1.9.3-head
14
14
  when /^1\.8/
15
15
  gem 'ruby-debug'
16
- gem 'rcov'
16
+ gem 'simplecov'
17
17
  require 'ruby-debug'
18
18
  end
19
19
  end
@@ -0,0 +1,107 @@
1
+ require File.expand_path('../spec_helper', __FILE__)
2
+ require 'asir/coder/yaml'
3
+
4
+ describe "ASIR::Coder::Yaml" do
5
+ before(:each) do
6
+ @enc = ASIR::Coder::Yaml.new
7
+ @dec = @enc.dup
8
+ end
9
+
10
+ basic_objs = [ ]
11
+
12
+ [
13
+ [ nil, '' ],
14
+ true,
15
+ false,
16
+ 123,
17
+ 123.45,
18
+ 'String',
19
+ [ :Symbol, ':Symbol' ],
20
+ ].each do | x |
21
+ x, str = *x
22
+ str ||= x.to_s
23
+ str = "--- #{str}\n"
24
+ str << "...\n" if RUBY_VERSION !~ /^1\.8/
25
+ basic_objs << [ x, str ]
26
+ it "should handle #{x.inspect}" do
27
+ out = @enc.prepare.encode(x)
28
+ out.should == str
29
+ @dec.prepare.decode(out).should == x
30
+ end
31
+ end
32
+
33
+ it 'should handle :never_binary.' do
34
+ @enc.yaml_options = { :never_binary => true }
35
+ out = do_message
36
+ out.should =~ /^ :ascii_8bit: hostname/m
37
+ case RUBY_VERSION
38
+ when /^1\.8/
39
+ out.should =~ /^ :binary: !binary /m
40
+ else
41
+ out.should =~ /^ :binary: ! "\\x04/m
42
+ end
43
+ end
44
+
45
+ it 'should handle :ascii_8bit_ok.' do
46
+ @enc.yaml_options = { :ASCII_8BIT_ok => true }
47
+ out = do_message
48
+ out.should =~ /^ :ascii_8bit: hostname/m
49
+ out.should =~ /^ :binary: !binary /m
50
+ end
51
+
52
+ def do_message
53
+ rcvr = "String"
54
+ sel = :eval
55
+ args = [ "2 + 2" ]
56
+ msg = ASIR::Message.new(rcvr, sel, args, nil, nil)
57
+ str = 'hostname'
58
+ if str.respond_to?(:force_encoding)
59
+ str = str.force_encoding("ASCII-8BIT")
60
+ end
61
+ msg[:ascii_8bit] = str
62
+ str = Marshal.dump(@dec)
63
+ if str.respond_to?(:encoding)
64
+ str.encoding.inspect.should == "#<Encoding:ASCII-8BIT>"
65
+ end
66
+ msg[:binary] = str
67
+ msg[:source_backtrace] = caller
68
+ out = @enc.prepare.encode(msg)
69
+ end
70
+
71
+ if ''.methods.include?(:force_encoding)
72
+ it 'should extend Psych with :never_binary option.' do
73
+ require 'socket'
74
+ hostname = Socket.gethostname
75
+ enc = hostname.encoding
76
+ enc.inspect.should == "#<Encoding:ASCII-8BIT>"
77
+
78
+ str = enc.inspect
79
+ str.force_encoding(hostname.encoding)
80
+ str.encoding.inspect.should == "#<Encoding:ASCII-8BIT>"
81
+
82
+ yaml = ::YAML.dump(str)
83
+ yaml.should == "--- !binary |-\n IzxFbmNvZGluZzpBU0NJSS04QklUPg==\n"
84
+
85
+ yaml = ::YAML.dump(str, nil, :never_binary => true)
86
+ yaml.should == "--- ! '#<Encoding:ASCII-8BIT>'\n"
87
+ end
88
+
89
+ it 'should handle :never_binary options.' do
90
+ str = '8bitascii'.force_encoding('ASCII-8BIT')
91
+
92
+ @enc.yaml_options = @dec.yaml_options = nil
93
+ out = @enc.prepare.encode(str)
94
+ out.should == "--- !binary |-\n OGJpdGFzY2lp\n"
95
+ @dec.prepare.decode(str).should == str
96
+
97
+ @enc.yaml_options = { :never_binary => true }
98
+ @dec.yaml_options = @enc.yaml_options
99
+ out = @enc.prepare.encode(str)
100
+ out.should == "--- 8bitascii\n...\n"
101
+ inp = @dec.prepare.decode(str)
102
+ inp.should == str
103
+ inp.encoding.inspect.should == "#<Encoding:UTF-8>"
104
+ end
105
+ end
106
+ end
107
+
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: asir
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.4
4
+ version: 1.1.5
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-12-04 00:00:00.000000000 Z
12
+ date: 2012-12-06 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: uuid
@@ -297,6 +297,7 @@ files:
297
297
  - spec/thread_variable_spec.rb
298
298
  - spec/transport_spec.rb
299
299
  - spec/xml_spec.rb
300
+ - spec/yaml_spec.rb
300
301
  - stylesheets/slides.css
301
302
  homepage: http://github.com/kstephens/abstracting_services_in_ruby
302
303
  licenses: []
@@ -313,7 +314,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
313
314
  version: '0'
314
315
  segments:
315
316
  - 0
316
- hash: -2732914043627439555
317
+ hash: -3496337274665454137
317
318
  required_rubygems_version: !ruby/object:Gem::Requirement
318
319
  none: false
319
320
  requirements:
@@ -322,7 +323,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
322
323
  version: '0'
323
324
  segments:
324
325
  - 0
325
- hash: -2732914043627439555
326
+ hash: -3496337274665454137
326
327
  requirements: []
327
328
  rubyforge_project:
328
329
  rubygems_version: 1.8.24
@@ -342,3 +343,4 @@ test_files:
342
343
  - spec/thread_variable_spec.rb
343
344
  - spec/transport_spec.rb
344
345
  - spec/xml_spec.rb
346
+ - spec/yaml_spec.rb