lwes 0.8.2 → 0.8.3
Sign up to get free protection for your applications and to get access to all the features.
- data/ChangeLog +4 -0
- data/ext/lwes_ext/emitter.c +19 -15
- data/lwes.gemspec +1 -1
- data/test/unit/test_event.rb +17 -0
- metadata +3 -5
data/ChangeLog
CHANGED
data/ext/lwes_ext/emitter.c
CHANGED
@@ -1,4 +1,9 @@
|
|
1
1
|
#include "lwes_ruby.h"
|
2
|
+
#ifdef HAVE_RUBY_UTIL_H
|
3
|
+
# include <ruby/util.h>
|
4
|
+
#else
|
5
|
+
# include "util.h"
|
6
|
+
#endif
|
2
7
|
|
3
8
|
static VALUE ENC; /* LWES_ENCODING */
|
4
9
|
static ID id_TYPE_DB, id_TYPE_LIST, id_NAME, id_HAVE_ENCODING;
|
@@ -41,16 +46,6 @@ static void dump_enc(VALUE enc, LWES_BYTE_P buf, size_t *off)
|
|
41
46
|
lwesrb_dump_num(LWES_INT_16_TOKEN, enc, buf, off);
|
42
47
|
}
|
43
48
|
|
44
|
-
static char *my_strdup(const char *str)
|
45
|
-
{
|
46
|
-
long len = strlen(str) + 1;
|
47
|
-
char *rv = xmalloc(len);
|
48
|
-
|
49
|
-
memcpy(rv, str, len);
|
50
|
-
|
51
|
-
return rv;
|
52
|
-
}
|
53
|
-
|
54
49
|
/* the underlying struct for LWES::Emitter */
|
55
50
|
struct _rb_lwes_emitter {
|
56
51
|
struct lwes_emitter *emitter;
|
@@ -376,6 +371,7 @@ static VALUE emitter_ltlt(VALUE self, VALUE event)
|
|
376
371
|
static VALUE emitter_emit(int argc, VALUE *argv, VALUE self)
|
377
372
|
{
|
378
373
|
volatile VALUE raise_inspect;
|
374
|
+
char *err;
|
379
375
|
VALUE name = Qnil;
|
380
376
|
VALUE event = Qnil;
|
381
377
|
argc = rb_scan_args(argc, argv, "11", &name, &event);
|
@@ -405,7 +401,15 @@ static VALUE emitter_emit(int argc, VALUE *argv, VALUE self)
|
|
405
401
|
* struct created
|
406
402
|
*/
|
407
403
|
event = rb_funcall(name, id_new, 1, event);
|
408
|
-
|
404
|
+
if (TYPE(event) == T_STRUCT)
|
405
|
+
return emit_struct(self, event);
|
406
|
+
if (rb_obj_is_kind_of(event, cLWES_Event))
|
407
|
+
return emit_event(self, event);
|
408
|
+
name = rb_class_name(name);
|
409
|
+
err = StringValuePtr(name);
|
410
|
+
rb_raise(rb_eArgError,
|
411
|
+
"%s created a bad event: %s",
|
412
|
+
err, RAISE_INSPECT(event));
|
409
413
|
default:
|
410
414
|
if (rb_obj_is_kind_of(name, cLWES_Event))
|
411
415
|
return emit_event(self, name);
|
@@ -467,9 +471,9 @@ static VALUE init_copy(VALUE dest, VALUE obj)
|
|
467
471
|
struct _rb_lwes_emitter *src = _rle(obj);
|
468
472
|
|
469
473
|
memcpy(dst, src, sizeof(*dst));
|
470
|
-
dst->address =
|
474
|
+
dst->address = ruby_strdup(src->address);
|
471
475
|
if (dst->iface)
|
472
|
-
dst->iface =
|
476
|
+
dst->iface = ruby_strdup(src->iface);
|
473
477
|
lwesrb_emitter_create(dst);
|
474
478
|
|
475
479
|
assert(dst->emitter && dst->emitter != src->emitter &&
|
@@ -496,7 +500,7 @@ static VALUE _create(VALUE self, VALUE options)
|
|
496
500
|
address = rb_hash_aref(options, ID2SYM(rb_intern("address")));
|
497
501
|
if (TYPE(address) != T_STRING)
|
498
502
|
rb_raise(rb_eTypeError, ":address must be a string");
|
499
|
-
rle->address =
|
503
|
+
rle->address = ruby_strdup(StringValueCStr(address));
|
500
504
|
|
501
505
|
iface = rb_hash_aref(options, ID2SYM(rb_intern("iface")));
|
502
506
|
switch (TYPE(iface)) {
|
@@ -504,7 +508,7 @@ static VALUE _create(VALUE self, VALUE options)
|
|
504
508
|
rle->iface = NULL;
|
505
509
|
break;
|
506
510
|
case T_STRING:
|
507
|
-
rle->iface =
|
511
|
+
rle->iface = ruby_strdup(StringValueCStr(iface));
|
508
512
|
break;
|
509
513
|
default:
|
510
514
|
rb_raise(rb_eTypeError, ":iface must be a String or nil");
|
data/lwes.gemspec
CHANGED
data/test/unit/test_event.rb
CHANGED
@@ -141,6 +141,23 @@ class TestEvent < Test::Unit::TestCase
|
|
141
141
|
receiver.close
|
142
142
|
end
|
143
143
|
|
144
|
+
def test_emit_class_from_hash_subclassed
|
145
|
+
receiver = UDPSocket.new
|
146
|
+
receiver.bind(nil, @options[:port])
|
147
|
+
emitter = LWES::Emitter.new(@options)
|
148
|
+
tmp = { :t_string => 'hello' }
|
149
|
+
|
150
|
+
tdb = LWES::TypeDB.new("#{File.dirname(__FILE__)}/test1.esf")
|
151
|
+
ev1 = LWES::Event.subclass :name => "Event1", :db => tdb
|
152
|
+
emitter.emit ev1, tmp
|
153
|
+
buf, _ = receiver.recvfrom(65536)
|
154
|
+
parsed = LWES::Event.parse(buf)
|
155
|
+
assert_instance_of ev1, parsed
|
156
|
+
assert_equal parsed.to_hash, ev1.new(tmp).to_hash
|
157
|
+
ensure
|
158
|
+
receiver.close
|
159
|
+
end
|
160
|
+
|
144
161
|
def teardown
|
145
162
|
new_classes = LWES::Event::CLASSES
|
146
163
|
new_classes.each_key { |k| Object.__send__ :remove_const, k.to_sym }
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: lwes
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.8.
|
5
|
+
version: 0.8.3
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Erik S. Chang
|
@@ -11,8 +11,7 @@ autorequire:
|
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
13
|
|
14
|
-
date:
|
15
|
-
default_executable:
|
14
|
+
date: 2012-06-04 00:00:00 Z
|
16
15
|
dependencies:
|
17
16
|
- !ruby/object:Gem::Dependency
|
18
17
|
name: rake-compiler
|
@@ -79,7 +78,6 @@ files:
|
|
79
78
|
- test/unit/test_type_db.rb
|
80
79
|
- test/unit/test_type_db_events.rb
|
81
80
|
- ext/lwes_ext/lwes-0.23.1.tar.gz
|
82
|
-
has_rdoc: true
|
83
81
|
homepage: http://lwes.rubyforge.org/
|
84
82
|
licenses: []
|
85
83
|
|
@@ -103,7 +101,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
103
101
|
requirements: []
|
104
102
|
|
105
103
|
rubyforge_project: lwes
|
106
|
-
rubygems_version: 1.
|
104
|
+
rubygems_version: 1.8.11
|
107
105
|
signing_key:
|
108
106
|
specification_version: 3
|
109
107
|
summary: Ruby bindings for the Light Weight Event System
|