neerfri-ramf 0.1.0 → 0.1.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.
- data/lib/ramf/deserializer/amf3_reader.rb +0 -1
- data/lib/ramf/flex_objects/flex_anonymous_object.rb +19 -0
- data/lib/ramf/serializer/amf3_writer.rb +2 -0
- data/lib/ramf.rb +44 -56
- data/spec/default_operation_processor_spec.rb +18 -0
- data/spec/extensions/object_extensions_spec.rb +100 -0
- data/spec/flex_objects/byte_array_spec.rb +14 -0
- data/spec/flex_objects/flex_anonymous_object_spec.rb +45 -0
- data/spec/serializer/amf3_writer_spec.rb +8 -1
- metadata +19 -6
|
@@ -120,7 +120,6 @@ module RAMF
|
|
|
120
120
|
class_signature = store :class do
|
|
121
121
|
RAMF::IO::FlexClassSignature.new(readUTF_8_vr(stream), is_dynamic, read_object_member_names(stream,member_count))
|
|
122
122
|
end
|
|
123
|
-
# RAMF::DEBUG_LOG.debug "Created new class signature: #{class_signature.inspect}"
|
|
124
123
|
readU29O_object_values(stream,class_signature)
|
|
125
124
|
end
|
|
126
125
|
|
|
@@ -25,7 +25,26 @@ module RAMF
|
|
|
25
25
|
else
|
|
26
26
|
self["#{method_name}".to_sym]
|
|
27
27
|
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def to_params
|
|
31
|
+
self.inject({}) do |m,pair|
|
|
32
|
+
key = pair.first
|
|
33
|
+
object = pair.last
|
|
34
|
+
case object
|
|
35
|
+
when Hash, Numeric, String, TrueClass, FalseClass, NilClass
|
|
36
|
+
m.merge({key=>object})
|
|
37
|
+
else
|
|
38
|
+
flex_remoting = object.class.flex_remoting
|
|
39
|
+
hash = {}
|
|
40
|
+
flex_remoting.members.each do |member|
|
|
41
|
+
hash[member] = flex_remoting.members_reader.call(object,member)
|
|
42
|
+
end
|
|
43
|
+
hash.merge!(flex_remoting.dynamic_members(object)) if flex_remoting.is_dynamic
|
|
44
|
+
m.merge! key=>hash
|
|
45
|
+
end
|
|
28
46
|
end
|
|
47
|
+
end
|
|
29
48
|
|
|
30
49
|
|
|
31
50
|
# def flex_dynamic_members(scope = :default)
|
|
@@ -46,6 +46,8 @@ module RAMF
|
|
|
46
46
|
when object.is_a?(::IO) || object.is_a?(::StringIO)
|
|
47
47
|
stream.write AMF3_BYTE_ARRAY_MARKER
|
|
48
48
|
writeU29B(object, stream)
|
|
49
|
+
when object.is_a?(Class) || object.is_a?(Module)
|
|
50
|
+
raise(ArgumentError, "Trying to serialize #{object}, which is a Class or Module")
|
|
49
51
|
else
|
|
50
52
|
stream.write AMF3_OBJECT_MARKER
|
|
51
53
|
writeU29O(object,stream)
|
data/lib/ramf.rb
CHANGED
|
@@ -1,62 +1,50 @@
|
|
|
1
1
|
|
|
2
2
|
$:.unshift(File.dirname(__FILE__)) unless $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
|
|
3
|
-
require 'stringio'
|
|
4
|
-
module RAMF; end;
|
|
5
|
-
|
|
6
|
-
#Load configuration class
|
|
7
|
-
require 'ramf/util'
|
|
8
|
-
require 'ramf/configuration'
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
#Extensions to existing Ruby classes.
|
|
12
|
-
require 'ramf/flex_class_traits'
|
|
13
|
-
require 'ramf/extensions/class'
|
|
14
|
-
require 'ramf/extensions/object'
|
|
15
|
-
require 'ramf/extensions/hash'
|
|
16
|
-
require 'ramf/extensions/exception'
|
|
17
|
-
|
|
18
|
-
#RAMF fundemental objects
|
|
19
|
-
require 'ramf/amf_object'
|
|
20
|
-
require 'ramf/amf_header'
|
|
21
|
-
require 'ramf/amf_message'
|
|
22
|
-
require 'ramf/operation_request'
|
|
23
|
-
require 'ramf/operation_processors_manager'
|
|
24
|
-
require 'ramf/default_operation_processor'
|
|
25
|
-
|
|
26
|
-
require 'ramf/io/flex_class_signature'
|
|
27
|
-
require 'ramf/flex_objects/flex_anonymous_object'
|
|
28
|
-
require 'ramf/flex_objects/flex_object'
|
|
29
|
-
require 'ramf/flex_objects/acknowledge_message'
|
|
30
|
-
require 'ramf/flex_objects/error_message'
|
|
31
|
-
require 'ramf/flex_objects/remoting_message'
|
|
32
|
-
require 'ramf/flex_objects/command_message'
|
|
33
|
-
require 'ramf/flex_objects/byte_array'
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
require 'ramf/io/constants'
|
|
37
|
-
require 'ramf/io/common_read_write'
|
|
38
|
-
require 'ramf/io/place_holder'
|
|
39
|
-
require 'ramf/io/reference_table'
|
|
40
|
-
require 'ramf/deserializer'
|
|
41
|
-
require 'ramf/serializer'
|
|
42
|
-
|
|
43
3
|
module RAMF
|
|
44
|
-
class NullLogger
|
|
45
|
-
def debug(message); end;
|
|
46
|
-
end
|
|
47
4
|
|
|
48
|
-
def self.
|
|
49
|
-
|
|
50
|
-
puts "initializing RAMF debug log file"
|
|
51
|
-
require 'fileutils'
|
|
52
|
-
require 'logger'
|
|
53
|
-
log_path = File.join(File.dirname(__FILE__),'../debug/debug.log')
|
|
54
|
-
FileUtils.mkdir_p File.dirname(log_path)
|
|
55
|
-
Logger.new(log_path)
|
|
56
|
-
rescue Exception=>e
|
|
57
|
-
NullLogger.new()
|
|
58
|
-
end
|
|
5
|
+
def self.relative_require(name)
|
|
6
|
+
require File.join(File.dirname(__FILE__), name+".rb")
|
|
59
7
|
end
|
|
60
8
|
|
|
61
|
-
|
|
62
|
-
|
|
9
|
+
#load requirements from ruby
|
|
10
|
+
require 'stringio'
|
|
11
|
+
|
|
12
|
+
#Load configuration class
|
|
13
|
+
relative_require 'ramf/util'
|
|
14
|
+
relative_require 'ramf/configuration'
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
#Extensions to existing Ruby classes.
|
|
18
|
+
relative_require 'ramf/flex_class_traits'
|
|
19
|
+
relative_require 'ramf/extensions/class'
|
|
20
|
+
relative_require 'ramf/extensions/object'
|
|
21
|
+
relative_require 'ramf/extensions/hash'
|
|
22
|
+
relative_require 'ramf/extensions/exception'
|
|
23
|
+
|
|
24
|
+
#RAMF fundemental objects
|
|
25
|
+
relative_require 'ramf/amf_object'
|
|
26
|
+
relative_require 'ramf/amf_header'
|
|
27
|
+
relative_require 'ramf/amf_message'
|
|
28
|
+
relative_require 'ramf/operation_request'
|
|
29
|
+
relative_require 'ramf/operation_processors_manager'
|
|
30
|
+
relative_require 'ramf/default_operation_processor'
|
|
31
|
+
|
|
32
|
+
relative_require 'ramf/io/flex_class_signature'
|
|
33
|
+
relative_require 'ramf/flex_objects/flex_anonymous_object'
|
|
34
|
+
relative_require 'ramf/flex_objects/flex_object'
|
|
35
|
+
relative_require 'ramf/flex_objects/acknowledge_message'
|
|
36
|
+
relative_require 'ramf/flex_objects/error_message'
|
|
37
|
+
relative_require 'ramf/flex_objects/remoting_message'
|
|
38
|
+
relative_require 'ramf/flex_objects/command_message'
|
|
39
|
+
relative_require 'ramf/flex_objects/byte_array'
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
relative_require 'ramf/io/constants'
|
|
43
|
+
relative_require 'ramf/io/common_read_write'
|
|
44
|
+
relative_require 'ramf/io/place_holder'
|
|
45
|
+
relative_require 'ramf/io/reference_table'
|
|
46
|
+
relative_require 'ramf/deserializer'
|
|
47
|
+
relative_require 'ramf/serializer'
|
|
48
|
+
|
|
49
|
+
end
|
|
50
|
+
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
require File.join(File.dirname(__FILE__),'spec_helper')
|
|
2
|
+
|
|
3
|
+
describe RAMF::DefaultOperationProcessor do
|
|
4
|
+
|
|
5
|
+
it "should be registered in RAMF::OperationProcessorsManager" do
|
|
6
|
+
RAMF::OperationProcessorsManager::OPERATION_PROCCESSORS.last.should == RAMF::DefaultOperationProcessor
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
it "should process all requests" do
|
|
10
|
+
RAMF::DefaultOperationProcessor.will_process?(nil).should be_true
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
it "should raise OperationProcessorNotDefined when ever asked to process" do
|
|
14
|
+
lambda {RAMF::DefaultOperationProcessor.process(nil)
|
|
15
|
+
}.should raise_error(RAMF::DefaultOperationProcessor::OperationProcessorNotDefined)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
end
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
require File.join(File.dirname(__FILE__),'../spec_helper')
|
|
2
|
+
|
|
3
|
+
describe Object do
|
|
4
|
+
|
|
5
|
+
before(:each) do
|
|
6
|
+
@object = Object.new
|
|
7
|
+
@object.instance_variable_set("@instance_var","instance_var")
|
|
8
|
+
# @object.class.flex_remoting_members :member
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
describe "flex_members_reader" do
|
|
12
|
+
it "should use a setter with same name" do
|
|
13
|
+
@object.should_receive(:send).with(:member)
|
|
14
|
+
@object.class.flex_remoting.members_reader.call(@object, :member)
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
describe "flex_members_writer" do
|
|
19
|
+
it "should call a method 'member='" do
|
|
20
|
+
@object.should_receive(:send).with("member=","value")
|
|
21
|
+
@object.stub!(:respond_to?).and_return(true)
|
|
22
|
+
@object.class.flex_remoting.members_writer.call(@object, :member, "value")
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
it "should set an instance variable if no setter is available" do
|
|
26
|
+
@object.should_receive(:instance_variable_set).with("@member","value")
|
|
27
|
+
@object.stub!(:respond_to?).and_return(false)
|
|
28
|
+
@object.class.flex_remoting.members_writer.call(@object, :member, "value")
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
describe "flex_dynamic_members_finder" do
|
|
33
|
+
it "should find instance variables" do
|
|
34
|
+
@object.class.flex_remoting.dynamic_members_finders.first.call(@object, :default).should == [:instance_var]
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
describe "flex_dynamic_members_reader" do
|
|
39
|
+
it "should use getter when object responds to :member" do
|
|
40
|
+
@object.should_receive(:send).with(:member)
|
|
41
|
+
@object.stub!(:respond_to?).and_return(true)
|
|
42
|
+
@object.class.flex_remoting.dynamic_members_reader.call(@object, :member)
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
it "should pull value from instance variable when one is defined" do
|
|
46
|
+
@object.should_receive(:instance_variable_get).with("@member")
|
|
47
|
+
@object.stub!(:instance_variable_defined?).and_return(true)
|
|
48
|
+
@object.class.flex_remoting.dynamic_members_reader.call(@object, :member)
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
it "should pull value from [] when object responds to it" do
|
|
52
|
+
@object.should_receive(:[]).with(:member)
|
|
53
|
+
@object.stub!(:respond_to?).with(:member).and_return(false)
|
|
54
|
+
@object.stub!(:respond_to?).with(:[]).and_return(true)
|
|
55
|
+
@object.class.flex_remoting.dynamic_members_reader.call(@object, :member)
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
it "should try to use a setter when everything else fails" do
|
|
59
|
+
@object.stub!(:respond_to?).with(:member).and_return(false)
|
|
60
|
+
@object.stub!(:instance_variable_defined?).and_return(false)
|
|
61
|
+
@object.stub!(:respond_to?).with(:[]).and_return(false)
|
|
62
|
+
@object.should_receive(:send).with(:member)
|
|
63
|
+
@object.class.flex_remoting.dynamic_members_reader.call(@object, :member)
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
it "should issue a warning and return nil when all methods fail" do
|
|
67
|
+
@object.stub!(:respond_to?).with(:member).and_return(false)
|
|
68
|
+
@object.stub!(:instance_variable_defined?).and_return(false)
|
|
69
|
+
@object.stub!(:respond_to?).with(:[]).and_return(false)
|
|
70
|
+
Object.should_receive(:warn)
|
|
71
|
+
@object.should_receive(:send).with(:member).and_raise(NoMethodError)
|
|
72
|
+
@object.class.flex_remoting.dynamic_members_reader.call(@object, :member).should == nil
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
describe "flex_dynamic_members_writer" do
|
|
78
|
+
it "should use a setter with same name" do
|
|
79
|
+
@object.should_receive(:send).with("member=", "value")
|
|
80
|
+
@object.class.flex_remoting.dynamic_members_writer.call(@object, :member, "value")
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
describe "returning method" do
|
|
85
|
+
it "should respond to :returning" do
|
|
86
|
+
@object.should respond_to(:returning)
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
it "should pass the argument to the block" do
|
|
90
|
+
returning(@object) {|obj| obj.should == @object}
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
it "should return the first argument" do
|
|
94
|
+
returning(@object){}.should == @object
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
require File.join(File.dirname(__FILE__),'../spec_helper')
|
|
2
|
+
|
|
3
|
+
describe RAMF::FlexObjects::ByteArray do
|
|
4
|
+
|
|
5
|
+
before(:each) {@byte_array = RAMF::FlexObjects::ByteArray.new("content")}
|
|
6
|
+
|
|
7
|
+
it "should be kind_of IO" do
|
|
8
|
+
@byte_array.kind_of?(::Tempfile).should be_true
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
it "should be rewinded" do
|
|
12
|
+
@byte_array.pos.should == 0
|
|
13
|
+
end
|
|
14
|
+
end
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
require File.join(File.dirname(__FILE__),'../spec_helper')
|
|
2
|
+
require 'ruby-debug'
|
|
3
|
+
|
|
4
|
+
class DummyObject
|
|
5
|
+
def initialize
|
|
6
|
+
@dummy_attribute = "dummy"
|
|
7
|
+
end
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
describe RAMF::FlexObjects::FlexAnonymousObject do
|
|
12
|
+
|
|
13
|
+
it "should extend Hash" do
|
|
14
|
+
RAMF::FlexObjects::FlexAnonymousObject.superclass.should == Hash
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
describe "to_params method" do
|
|
18
|
+
|
|
19
|
+
before(:each) do
|
|
20
|
+
@obj = RAMF::FlexObjects::FlexAnonymousObject.new
|
|
21
|
+
@obj.string_attr = "my_string"
|
|
22
|
+
@obj.numeric_attr = 6.5
|
|
23
|
+
@obj.hash_attr = {:some=>"hash"}
|
|
24
|
+
@obj.true_attr = true
|
|
25
|
+
@obj.false_attr = false
|
|
26
|
+
@obj.nil_attr = nil
|
|
27
|
+
@obj.object_attr = DummyObject.new
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
it "should return instance of Hash" do
|
|
31
|
+
@obj.to_params.should be_an_instance_of(Hash)
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
[:string, :numeric, :hash, :true, :false, :nil].each do |type|
|
|
35
|
+
it "should not change objects of type #{type}" do
|
|
36
|
+
@obj.to_params["#{type}_attr".to_sym].should == @obj.send("#{type}_attr")
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
it "should convert objects to hash" do
|
|
41
|
+
@obj.to_params[:object_attr].should == {:dummy_attribute=>"dummy"}
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
end
|
|
45
|
+
end
|
|
@@ -406,7 +406,7 @@ describe "AMF3Writer" do
|
|
|
406
406
|
@object = {}
|
|
407
407
|
end
|
|
408
408
|
|
|
409
|
-
after(:each) {@method.call(@object, @stream)}
|
|
409
|
+
after(:each) {(!@skip_call) ? @method.call(@object, @stream) : @skip_call=false}
|
|
410
410
|
|
|
411
411
|
it "should write AMF3_INTEGER_MARKER for integer in range" do
|
|
412
412
|
@object = 15
|
|
@@ -561,5 +561,12 @@ describe "AMF3Writer" do
|
|
|
561
561
|
@stream.should_receive(:write).with(RAMF::IO::Constants::AMF3_OBJECT_MARKER)
|
|
562
562
|
@writer.should_receive(:writeU29O).with(@object, @stream)
|
|
563
563
|
end
|
|
564
|
+
|
|
565
|
+
it "should raise when trying to serialize an object of type Class or Module" do
|
|
566
|
+
@skip_call = true
|
|
567
|
+
@object = RAMF
|
|
568
|
+
lambda {@method.call(@object, @stream)}.should raise_error(ArgumentError)
|
|
569
|
+
end
|
|
570
|
+
|
|
564
571
|
end
|
|
565
572
|
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: neerfri-ramf
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.1.
|
|
4
|
+
version: 0.1.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Neer Friedman
|
|
@@ -9,7 +9,7 @@ autorequire:
|
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
11
|
|
|
12
|
-
date: 2008-
|
|
12
|
+
date: 2008-11-14 00:00:00 -08:00
|
|
13
13
|
default_executable:
|
|
14
14
|
dependencies: []
|
|
15
15
|
|
|
@@ -19,8 +19,8 @@ executables: []
|
|
|
19
19
|
|
|
20
20
|
extensions: []
|
|
21
21
|
|
|
22
|
-
extra_rdoc_files:
|
|
23
|
-
|
|
22
|
+
extra_rdoc_files: []
|
|
23
|
+
|
|
24
24
|
files:
|
|
25
25
|
- lib/ramf
|
|
26
26
|
- lib/ramf/operation_processors_manager.rb
|
|
@@ -71,6 +71,7 @@ files:
|
|
|
71
71
|
- spec/deserializer_spec.rb
|
|
72
72
|
- spec/flex_class_traits_spec.rb
|
|
73
73
|
- spec/inherited_class_traits_spec.rb
|
|
74
|
+
- spec/default_operation_processor_spec.rb
|
|
74
75
|
- spec/operation_processors_manager_spec.rb
|
|
75
76
|
- spec/examples
|
|
76
77
|
- spec/examples/examples_helper.rb
|
|
@@ -90,16 +91,23 @@ files:
|
|
|
90
91
|
- spec/fixtures/deserializer2.rb
|
|
91
92
|
- spec/extensions
|
|
92
93
|
- spec/extensions/class_extensions_spec.rb
|
|
94
|
+
- spec/extensions/object_extensions_spec.rb
|
|
93
95
|
- spec/serializer
|
|
94
96
|
- spec/serializer/full_spec.rb
|
|
95
97
|
- spec/serializer/amf3_writer_spec.rb
|
|
96
98
|
- spec/serializer/base_spec.rb
|
|
99
|
+
- spec/flex_objects
|
|
100
|
+
- spec/flex_objects/flex_anonymous_object_spec.rb
|
|
101
|
+
- spec/flex_objects/byte_array_spec.rb
|
|
97
102
|
has_rdoc: true
|
|
98
103
|
homepage: http://ramf.saveanalien.com
|
|
99
104
|
post_install_message:
|
|
100
105
|
rdoc_options:
|
|
101
|
-
- --line-numbers
|
|
102
|
-
- --inline-source
|
|
106
|
+
- - --line-numbers
|
|
107
|
+
- --inline-source
|
|
108
|
+
- "--main README "
|
|
109
|
+
- -x spec
|
|
110
|
+
- README
|
|
103
111
|
require_paths:
|
|
104
112
|
- lib
|
|
105
113
|
required_ruby_version: !ruby/object:Gem::Requirement
|
|
@@ -128,6 +136,7 @@ test_files:
|
|
|
128
136
|
- spec/deserializer_spec.rb
|
|
129
137
|
- spec/flex_class_traits_spec.rb
|
|
130
138
|
- spec/inherited_class_traits_spec.rb
|
|
139
|
+
- spec/default_operation_processor_spec.rb
|
|
131
140
|
- spec/operation_processors_manager_spec.rb
|
|
132
141
|
- spec/examples
|
|
133
142
|
- spec/examples/examples_helper.rb
|
|
@@ -147,7 +156,11 @@ test_files:
|
|
|
147
156
|
- spec/fixtures/deserializer2.rb
|
|
148
157
|
- spec/extensions
|
|
149
158
|
- spec/extensions/class_extensions_spec.rb
|
|
159
|
+
- spec/extensions/object_extensions_spec.rb
|
|
150
160
|
- spec/serializer
|
|
151
161
|
- spec/serializer/full_spec.rb
|
|
152
162
|
- spec/serializer/amf3_writer_spec.rb
|
|
153
163
|
- spec/serializer/base_spec.rb
|
|
164
|
+
- spec/flex_objects
|
|
165
|
+
- spec/flex_objects/flex_anonymous_object_spec.rb
|
|
166
|
+
- spec/flex_objects/byte_array_spec.rb
|