asir 1.0.7 → 1.0.8

Sign up to get free protection for your applications and to get access to all the features.
data/ChangeLog CHANGED
@@ -1,3 +1,11 @@
1
+ 2012-11-30 Kurt A. Stephens <ks.github@kurtstephens.com>
2
+
3
+ * v1.0.8: New version.
4
+ * Database: Preliminary support for storing Message and Result objects
5
+ in a database: see gem asir_activerecord.
6
+ * Coder: Use Coder#prepare instead of Object#dup to handle statefulness.
7
+ * CodeMore: Use @receiver_name to disambiguate Modules vs. Instances.
8
+
1
9
  2012-11-27 Kurt A. Stephens <ks.github@kurtstephens.com>
2
10
 
3
11
  * v1.0.7: New version.
data/asir.gemspec CHANGED
@@ -43,6 +43,5 @@ Gem::Specification.new do |s|
43
43
  else
44
44
  gem.add_development_dependency 'ruby-debug19', '>= 0.1'
45
45
  end
46
- # s.add_development_dependency 'simplecov',
47
46
  end
48
47
 
@@ -4,6 +4,7 @@ module ASIR
4
4
  #
5
5
  # Support additional data attached to any object.
6
6
  module AdditionalData
7
+ def _additional_data; @additional_data; end
7
8
  def additional_data
8
9
  @additional_data || EMPTY_HASH
9
10
  end
@@ -7,11 +7,16 @@ module ASIR
7
7
  include ObjectResolving # resolve_object()
8
8
  include CodeBlock # encode_block!, decode_block!
9
9
 
10
+ attr_accessor :receiver_name
11
+
10
12
  def encode_more!
11
13
  obj = encode_block! # may self.dup
12
14
  unless ::String === @receiver_class
13
15
  obj ||= self.dup # dont dup twice.
14
- obj.receiver = @receiver.name if ::Module === @receiver
16
+ if ::Module === @receiver
17
+ obj.receiver_name = true
18
+ obj.receiver = @receiver.name
19
+ end
15
20
  obj.receiver_class = @receiver_class.name
16
21
  if resp = obj.result and resp.message == self
17
22
  resp.message = obj
@@ -23,8 +28,9 @@ module ASIR
23
28
  def decode_more!
24
29
  decode_block!
25
30
  if ::String === @receiver_class
31
+ # pp [ :decode_more!, self ]
26
32
  @receiver_class = resolve_object(@receiver_class)
27
- @receiver = resolve_object(@receiver) if ::Module === @receiver_class
33
+ @receiver = resolve_object(@receiver) if @receiver_name
28
34
  unless @receiver_class === @receiver
29
35
  raise Error, "receiver #{@receiver.class.name} is not a #{@receiver_class}"
30
36
  end
@@ -32,19 +38,28 @@ module ASIR
32
38
  self
33
39
  end
34
40
 
35
- # Returns "Module.selector" if receiver is Module.
36
- # Returns "Class#selector" if receiver is an instance.
37
- def description
41
+ # If receiver is a Module (i.e. class or module message),
42
+ # Returns [ name of the Module, :'.' ]
43
+ # Otherwise
44
+ # Returns [ name of the receiver's Class, :'#' ]
45
+ def message_kind
38
46
  case
39
47
  when ::String === @receiver_class
40
- "#{@receiver_class}.#{@selector}"
48
+ [ @receiver_class, :'.' ]
41
49
  when ::Module === @receiver
42
- "#{@receiver}.#{@selector}"
50
+ [ @receiver.name, :'.' ]
43
51
  else
44
- "#{@receiver_class}\#\#{@selector}"
52
+ [ @receiver_class.name, :'#' ]
45
53
  end
46
54
  end
47
55
 
56
+ # Returns "Module.selector" if receiver is Module.
57
+ # Returns "Class#selector" if receiver is an instance.
58
+ def description
59
+ x = message_kind
60
+ "#{x[0]}#{x[1]}#{@selector}"
61
+ end
62
+
48
63
  # Mixin for Result.
49
64
  module Result
50
65
  def encode_more!
data/lib/asir/coder.rb CHANGED
@@ -14,6 +14,9 @@ module ASIR
14
14
  obj and _decode obj
15
15
  end
16
16
 
17
+ # If this Coder is stateful, #prepare should return a new instance.
18
+ def prepare; self; end
19
+
17
20
  # Coder subclasses:
18
21
  def _subclass_responsibility *args
19
22
  raise "subclass responsibility"
@@ -0,0 +1,89 @@
1
+ require 'asir/coder'
2
+
3
+ module ASIR
4
+ class Coder
5
+ # !SLIDE
6
+ # Database Coder
7
+ #
8
+ # Construct a database object from a Message or Result object.
9
+ #
10
+ # obj = model.new(:object => partially encoded object, :original_object => original object, :payload => Binary)
11
+ # obj.payload
12
+ #
13
+ # See Transport::Database:
14
+ #
15
+ # obj.save!
16
+ class Database < self
17
+ # The model for Message objects.
18
+ attr_accessor :message_model
19
+ # The model for Result objects.
20
+ attr_accessor :result_model
21
+ # The model for everything else.
22
+ attr_accessor :other_model
23
+
24
+ # The coder object => object_payload, must code to some binary String.
25
+ attr_accessor :payload_coder, :additional_data_coder
26
+
27
+ # Callback: attrs = call(self, obj, attrs : Hash)
28
+ attr_accessor :before_model_new
29
+ # Callback: model_obj = call(self, obj, model_obj)
30
+ attr_accessor :after_model_new
31
+
32
+ def _encode in_obj
33
+ obj = in_obj
34
+ case
35
+ when Message === in_obj && message_model
36
+ model = message_model
37
+ when Result === in_obj && result_model
38
+ model = result_model
39
+ else
40
+ model = other_model
41
+ end
42
+ if model
43
+ obj = in_obj.encode_more!
44
+ # Prepare attributes for Model.
45
+ attrs = { :original_object => in_obj }
46
+
47
+ # Encode AdditionalData.
48
+ if AdditionalData === obj and ad = obj._additional_data
49
+ c = additional_data_coder || payload_coder
50
+ attrs[:additional_data] = c.prepare.encode(ad)
51
+ end
52
+
53
+ # Results need links back to its Message.
54
+ if Result === obj and message = in_obj.message
55
+ attrs[:message_object] = message
56
+ # Do not encode entire Message in ResultModel#payload.
57
+ obj.message = nil
58
+ if message_id = message[:database_id]
59
+ attrs[:message_id] = message_id
60
+ end
61
+ obj[:external_id] ||= message[:external_id]
62
+ # pp [ :Result_attrs, attrs ]
63
+ end
64
+
65
+ # Encode Object payload
66
+ payload = payload_coder.prepare.encode(obj)
67
+ attrs[:object] = obj
68
+ attrs[:payload] = payload
69
+
70
+ if @before_model_new
71
+ attr = @before_model_new.call(self, in_obj, attrs)
72
+ end
73
+ m = model.new(attrs)
74
+ if @after_model_new
75
+ m = @after_model_new.call(self, in_obj, m)
76
+ end
77
+ obj = m
78
+ end
79
+ obj
80
+ end
81
+
82
+ def _decode obj
83
+ payload_coder.prepare.decode(obj.payload)
84
+ end
85
+ end
86
+ # !SLIDE END
87
+ end
88
+ end
89
+
@@ -13,9 +13,6 @@ module ASIR
13
13
  def _decode obj
14
14
  obj
15
15
  end
16
-
17
- # Completely stateless.
18
- def dup; self; end
19
16
  end
20
17
  # !SLIDE END
21
18
  end
@@ -13,9 +13,8 @@ module ASIR
13
13
  end
14
14
 
15
15
  def _decode obj
16
- parser = ::JSON.parser.new(obj)
17
- ary = parser.parse
18
- ary.first
16
+ ::JSON.parser.new(obj).
17
+ parse.first
19
18
  end
20
19
  end
21
20
  # !SLIDE END
@@ -13,9 +13,6 @@ module ASIR
13
13
  def _decode obj
14
14
  nil
15
15
  end
16
-
17
- # Completely stateless.
18
- def dup; self; end
19
16
  end
20
17
  # !SLIDE END
21
18
  end
@@ -207,6 +207,8 @@ module ASIR
207
207
  @cls_tag_map[cls_name.freeze] ||= resolve_object(cls_name.gsub('.', '::'))
208
208
  end
209
209
 
210
+ # This coder is stateful.
211
+ def prepare; dup; end
210
212
  end
211
213
  # !SLIDE END
212
214
  end
@@ -28,7 +28,7 @@ module ASIR
28
28
  message.create_identifier! if needs_message_identifier? message
29
29
  @before_send_message.call(self, message) if @before_send_message
30
30
  relative_message_delay! message
31
- message_payload = encoder.dup.encode(message)
31
+ message_payload = encoder.prepare.encode(message)
32
32
  opaque_result = _send_message(message, message_payload)
33
33
  receive_result(message, opaque_result)
34
34
  end
@@ -41,7 +41,7 @@ module ASIR
41
41
  @message_count ||= 0; @message_count += 1
42
42
  additional_data = { }
43
43
  if req_and_state = _receive_message(stream, additional_data)
44
- message = req_and_state[0] = encoder.dup.decode(req_and_state.first)
44
+ message = req_and_state[0] = encoder.prepare.decode(req_and_state.first)
45
45
  message.additional_data!.update(additional_data) if message
46
46
  if @after_receive_message
47
47
  @after_receive_message.call(self, message)
@@ -59,11 +59,14 @@ module ASIR
59
59
  if @one_way && message.block
60
60
  message.block.call(result)
61
61
  else
62
- result.message = nil # avoid sending back entire Message.
63
- result_payload = decoder.dup.encode(result)
62
+ # avoid sending back entire Message.
63
+ result.message = nil unless @coder_needs_result_message
64
+ result_payload = decoder.prepare.encode(result)
64
65
  _send_result(message, result, result_payload, stream, message_state)
65
66
  end
66
67
  end
68
+ attr_accessor :coder_needs_result_message
69
+
67
70
  # !SLIDE END
68
71
 
69
72
  # !SLIDE
@@ -74,7 +77,7 @@ module ASIR
74
77
  # * Extract Result result or exception.
75
78
  def receive_result message, opaque_result
76
79
  result_payload = _receive_result(message, opaque_result)
77
- result = decoder.dup.decode(result_payload)
80
+ result = decoder.prepare.decode(result_payload)
78
81
  if result && ! message.one_way
79
82
  if exc = result.exception
80
83
  invoker.invoke!(exc, self)
@@ -0,0 +1,48 @@
1
+ require 'asir'
2
+
3
+ module ASIR
4
+ class Transport
5
+ # Transport that stores to any model class that responds to:
6
+ #
7
+ # obj.save!
8
+ # obj.database_id
9
+ #
10
+ # See Coder::Database
11
+ #
12
+ class Database < self
13
+ attr_accessor :before_message_save, :after_message_save
14
+ attr_accessor :before_result_save, :after_result_save
15
+
16
+ def initialize *args
17
+ super
18
+ self.coder_needs_result_message = true
19
+ self.needs_message_identifier = true
20
+ end
21
+
22
+ def _send_message message, message_payload
23
+ if @before_message_save
24
+ @before_message_save.call(self, message, message_payload)
25
+ end
26
+ message_payload.save!
27
+ # message[:database_id] ||= message_payload.database_id
28
+ if @after_message_save
29
+ @after_message_save.call(self, message, message_payload)
30
+ end
31
+ nil # message_state
32
+ end
33
+
34
+ def _send_result message, result, result_payload, stream, message_state
35
+ return if one_way? or message.one_way?
36
+ if @before_result_save
37
+ @before_result_save.call(self, message, result, result_payload)
38
+ end
39
+ result_payload.save!
40
+ result[:database_id] = result_payload.database_id
41
+ if @after_result_save
42
+ @after_result_save.call(self, message, result, result_payload)
43
+ end
44
+ nil
45
+ end
46
+ end
47
+ end
48
+ end
data/lib/asir/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module ASIR
2
- VERSION = "1.0.7"
2
+ VERSION = "1.0.8"
3
3
  end
data/spec/json_spec.rb CHANGED
@@ -19,9 +19,9 @@ describe "ASIR::Coder::JSON" do
19
19
  str = "[#{str}]"
20
20
  basic_objs << [ x, str ]
21
21
  it "should handle #{x.inspect}" do
22
- out = @enc.encode(x)
22
+ out = @enc.prepare.encode(x)
23
23
  out.should == str
24
- @dec.decode(out).should == x
24
+ @dec.prepare.decode(out).should == x
25
25
  end
26
26
  end
27
27
 
@@ -35,9 +35,9 @@ describe "ASIR::Coder::JSON" do
35
35
  str = "[#{str}]"
36
36
  basic_objs << [ x, str ]
37
37
  it "should handle #{x.inspect}" do
38
- out = @enc.encode(x)
38
+ out = @enc.prepare.encode(x)
39
39
  out.should == str
40
- y = @dec.decode(out)
40
+ y = @dec.prepare.decode(out)
41
41
  y = y.to_sym if Symbol === x
42
42
  y.should == x
43
43
  end
@@ -51,18 +51,18 @@ describe "ASIR::Coder::JSON" do
51
51
  str = "[#{str}]"
52
52
  basic_objs << [ x, str ]
53
53
  it "should handle #{x.inspect}" do
54
- out = @enc.encode(x)
54
+ out = @enc.prepare.encode(x)
55
55
  out.should == str
56
- y = @dec.decode(out)
56
+ y = @dec.prepare.decode(out)
57
57
  y.should == x
58
58
  end
59
59
  end
60
60
 
61
61
  it "should handle empty Array" do
62
62
  x = [ ]
63
- out = @enc.encode(x)
63
+ out = @enc.prepare.encode(x)
64
64
  out.should == "[[]]"
65
- @dec.decode(out).should == x
65
+ @dec.prepare.decode(out).should == x
66
66
  end
67
67
 
68
68
  it "should handle Array" do
@@ -82,14 +82,14 @@ describe "ASIR::Coder::JSON" do
82
82
 
83
83
  it "should handle Hash" do
84
84
  x = Hash[ *basic_objs.flatten.reverse ]
85
- out = @enc.encode(x)
85
+ out = @enc.prepare.encode(x)
86
86
  out.should =~ %r{\A\[\{}
87
87
  out.should =~ %r{\}\]\Z}
88
88
  basic_objs.each do | v, str |
89
89
  # out.should =~ %r{#{k.inspect}:}
90
90
  out.should =~ %r{#{str}}
91
91
  end
92
- y = @dec.decode(out)
92
+ y = @dec.prepare.decode(out)
93
93
  y.should == x.inject({}){|h, (k, v)| h[k] = Symbol === v ? v.to_s : v; h }
94
94
  end
95
95
 
@@ -105,12 +105,26 @@ describe "ASIR::Coder::JSON" do
105
105
  x.h = Hash[ *basic_objs.flatten.reverse ]
106
106
  x.o = ASIR::Coder::Test::Object.new
107
107
  x.o.a = 123
108
- out = @enc.encode(x)
108
+ out = @enc.prepare.encode(x)
109
+ if out =~ %r{#<ASIR::Coder::Test::Object}
110
+ out.should =~ %r{\A\[\"#<ASIR::Coder::Test::Object:[^>]+>\"\]\Z}
111
+ else
112
+ out.should =~ %r{"a":\[null,true,false,1234,1.234,"symbol","String"\]}
113
+ out.should =~ %r{"h":\{}
114
+ out.should =~ %r{"\[1234\]":1234}
115
+ out.should =~ %r{"\[1.234\]":1.234}
116
+ out.should =~ %r{"\[null\]":null}
117
+ out.should =~ %r{"\[\\"String\\"\]":"String"}
118
+ out.should =~ %r{"\[\\"symbol\\"\]":"symbol"}
119
+ out.should =~ %r{"\[null\]":null}
120
+ out.should =~ %r{"\[true\]":true}
121
+ out.should =~ %r{"\[null\]":null}
122
+ end
123
+
109
124
  # FIXME:
110
- out.should =~ %r{\A\[\"#<ASIR::Coder::Test::Object:[^>]+>\"\]\Z}
111
125
  #out.should =~ %r{<#{x.class.name.gsub('::', '.')} id=\"#{x.object_id}\" >}
112
126
  #out.should =~ %r{</#{x.class.name.gsub('::', '.')}>}
113
- y = @dec.decode(out)
127
+ y = @dec.prepare.decode(out)
114
128
  (String === y).should == true
115
129
  =begin
116
130
  FIXME:
data/spec/message_spec.rb CHANGED
@@ -64,5 +64,34 @@ describe "ASIR::Message" do
64
64
  exc.exception_message.should == "#{cls.name} #{msg}"
65
65
  exc.exception_backtrace.class.should == Array
66
66
  end
67
+
68
+ it 'should return appropriate message_kind and #description.' do
69
+ self.object = ASIR::Coder.new
70
+ self.message = ASIR::Message.new(object, nil, nil, nil, nil)
71
+ message.selector = :instance_message!
72
+
73
+ x = message.description
74
+ x.should == "ASIR::Coder#instance_message!"
75
+ message.encode_more!
76
+ message.description.should == x
77
+
78
+ self.object = ASIR::Coder
79
+ self.message = ASIR::Message.new(object, nil, nil, nil, nil)
80
+ message.selector = :class_message!
81
+
82
+ x = message.description
83
+ x.should == "ASIR::Coder.class_message!"
84
+ message.encode_more!
85
+ message.description.should == x
86
+
87
+ self.object = ASIR
88
+ self.message = ASIR::Message.new(object, nil, nil, nil, nil)
89
+ message.selector = :module_message!
90
+
91
+ x = message.description
92
+ x.should == "ASIR.module_message!"
93
+ message.encode_more!
94
+ message.description.should == x
95
+ end
67
96
  end
68
97
 
data/spec/spec_helper.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  require 'rubygems'
2
2
  require 'debug_helper'
3
- $: << File.expand_path('../../lib', __FILE__)
3
+ $:.unshift File.expand_path('../../lib', __FILE__)
4
4
 
5
5
  require 'asir'
6
6
 
data/spec/xml_spec.rb CHANGED
@@ -16,9 +16,9 @@ describe "ASIR::Coder::XML" do
16
16
  ].each do | x |
17
17
  basic_objs << x
18
18
  it "should handle #{x.inspect}" do
19
- xml = @enc.encode(x)
19
+ xml = @enc.prepare.encode(x)
20
20
  xml.should == "<#{x.class.name} />"
21
- @dec.decode(xml).should == x
21
+ @dec.prepare.decode(xml).should == x
22
22
  end
23
23
  end
24
24
 
@@ -28,9 +28,9 @@ describe "ASIR::Coder::XML" do
28
28
  ].each do | x |
29
29
  basic_objs << x
30
30
  it "should handle #{x.inspect}" do
31
- xml = @enc.encode(x)
31
+ xml = @enc.prepare.encode(x)
32
32
  xml.should == "<#{x.class.name} v=\"#{x.to_s}\" />"
33
- @dec.decode(xml).should == x
33
+ @dec.prepare.decode(xml).should == x
34
34
  end
35
35
  end
36
36
 
@@ -39,9 +39,9 @@ describe "ASIR::Coder::XML" do
39
39
  ].each do | x |
40
40
  basic_objs << x
41
41
  it "should handle #{x.inspect}" do
42
- xml = @enc.encode(x)
42
+ xml = @enc.prepare.encode(x)
43
43
  xml.should == "<#{x.class.name} >#{x.to_s}</#{x.class.name}>"
44
- @dec.decode(xml).should == x
44
+ @dec.prepare.decode(xml).should == x
45
45
  end
46
46
  end
47
47
 
@@ -50,36 +50,36 @@ describe "ASIR::Coder::XML" do
50
50
  ].each do | x |
51
51
  basic_objs << x
52
52
  it "should handle #{x.inspect}" do
53
- xml = @enc.encode(x)
53
+ xml = @enc.prepare.encode(x)
54
54
  xml.should == "<#{x.class.name} id=\"1\" >#{x.to_s}</#{x.class.name}>"
55
- @dec.decode(xml).should == x
55
+ @dec.prepare.decode(xml).should == x
56
56
  end
57
57
  end
58
58
 
59
59
  it "should handle empty Array" do
60
60
  x = [ ]
61
- xml = @enc.encode(x)
61
+ xml = @enc.prepare.encode(x)
62
62
  xml.should == "<#{x.class.name} id=\"1\" ></#{x.class.name}>"
63
- @dec.decode(xml).should == x
63
+ @dec.prepare.decode(xml).should == x
64
64
  end
65
65
 
66
66
  it "should handle Array" do
67
67
  x = [ *basic_objs ]
68
- xml = @enc.encode(x)
68
+ xml = @enc.prepare.encode(x)
69
69
  xml.should =~ %r{\A<#{x.class.name} id=\"1\" ><NilClass /><TrueClass /><FalseClass /><Fixnum v="1234" /><Float v="1.234" /><Symbol >symbol</Symbol><String id=\"[^"]+\" >String</String></#{x.class.name}>\Z} # " emacs
70
- @dec.decode(xml).should == x
70
+ @dec.prepare.decode(xml).should == x
71
71
  end
72
72
 
73
73
  it "should handle empty Hash" do
74
74
  x = { }
75
- xml = @enc.encode(x)
75
+ xml = @enc.prepare.encode(x)
76
76
  xml.should == "<#{x.class.name} id=\"1\" ></#{x.class.name}>"
77
- @dec.decode(xml).should == x
77
+ @dec.prepare.decode(xml).should == x
78
78
  end
79
79
 
80
80
  it "should handle Hash" do
81
81
  x = Hash[ *basic_objs.map{|e| e.inspect}.zip(basic_objs).flatten ]
82
- xml = @enc.encode(x)
82
+ xml = @enc.prepare.encode(x)
83
83
  xml.should =~ %r{\A<#{x.class.name} id=\"1\" >}
84
84
  xml.should =~ %r{</#{x.class.name}>\Z}
85
85
  basic_objs.each do | v |
@@ -88,7 +88,7 @@ describe "ASIR::Coder::XML" do
88
88
  xml.should =~ Regexp.new(vx)
89
89
  xml.should =~ %r{ >#{v.inspect}</String>}
90
90
  end
91
- @dec.decode(xml).should == x
91
+ @dec.prepare.decode(xml).should == x
92
92
  end
93
93
 
94
94
  class ASIR::Coder::XML::Test
@@ -101,10 +101,10 @@ describe "ASIR::Coder::XML" do
101
101
  x.h = Hash[ *basic_objs.map{|e| e.inspect}.zip(basic_objs).flatten ]
102
102
  x.o = ASIR::Coder::XML::Test.new
103
103
  x.o.a = 123
104
- xml = @enc.encode(x)
104
+ xml = @enc.prepare.encode(x)
105
105
  xml.should =~ %r{<#{x.class.name.gsub('::', '.')} id=\"1\" >}
106
106
  xml.should =~ %r{</#{x.class.name.gsub('::', '.')}>}
107
- y = @dec.decode(xml)
107
+ y = @dec.prepare.decode(xml)
108
108
  y.a.should == x.a
109
109
  y.h.should == x.h
110
110
  y.o.class.should == ASIR::Coder::XML::Test
@@ -117,8 +117,8 @@ describe "ASIR::Coder::XML" do
117
117
  x = Hash[ *basic_objs.map{|e| e.inspect}.zip(basic_objs).flatten ]
118
118
  y = [ 1, 2 ]
119
119
  x = [ x, x, y, y ]
120
- xml = @enc.encode(x)
121
- y = @dec.decode(xml)
120
+ xml = @enc.prepare.encode(x)
121
+ y = @dec.prepare.decode(xml)
122
122
  y[0].object_id.should == y[1].object_id
123
123
  y[2].object_id.should == y[3].object_id
124
124
  end
@@ -126,8 +126,8 @@ describe "ASIR::Coder::XML" do
126
126
  it "should handle self-referencing Array." do
127
127
  x = [ 1 ]
128
128
  x << x
129
- xml = @enc.encode(x)
130
- y = @dec.decode(xml)
129
+ xml = @enc.prepare.encode(x)
130
+ y = @dec.prepare.decode(xml)
131
131
  y[0].should == x[0]
132
132
  y[1].object_id.should == y.object_id
133
133
  end
@@ -135,8 +135,8 @@ describe "ASIR::Coder::XML" do
135
135
  it "should handle self-referencing Hash." do
136
136
  x = { :a => 1 }
137
137
  x[:self] = x
138
- xml = @enc.encode(x)
139
- y = @dec.decode(xml)
138
+ xml = @enc.prepare.encode(x)
139
+ y = @dec.prepare.decode(xml)
140
140
  y[:a].should == x[:a]
141
141
  y[:self].object_id.should == y.object_id
142
142
  end
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.0.7
4
+ version: 1.0.8
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-11-27 00:00:00.000000000 Z
12
+ date: 2012-11-30 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: uuid
@@ -286,6 +286,7 @@ files:
286
286
  - lib/asir/coder.rb
287
287
  - lib/asir/coder/base64.rb
288
288
  - lib/asir/coder/chain.rb
289
+ - lib/asir/coder/database.rb
289
290
  - lib/asir/coder/identity.rb
290
291
  - lib/asir/coder/json.rb
291
292
  - lib/asir/coder/marshal.rb
@@ -319,6 +320,7 @@ files:
319
320
  - lib/asir/transport/composite.rb
320
321
  - lib/asir/transport/conduit.rb
321
322
  - lib/asir/transport/connection_oriented.rb
323
+ - lib/asir/transport/database.rb
322
324
  - lib/asir/transport/delay.rb
323
325
  - lib/asir/transport/delegation.rb
324
326
  - lib/asir/transport/demux.rb
@@ -367,7 +369,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
367
369
  version: '0'
368
370
  segments:
369
371
  - 0
370
- hash: -2492323202029114126
372
+ hash: 885978386070956346
371
373
  required_rubygems_version: !ruby/object:Gem::Requirement
372
374
  none: false
373
375
  requirements:
@@ -376,7 +378,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
376
378
  version: '0'
377
379
  segments:
378
380
  - 0
379
- hash: -2492323202029114126
381
+ hash: 885978386070956346
380
382
  requirements: []
381
383
  rubyforge_project:
382
384
  rubygems_version: 1.8.24