lwes 0.8.2 → 0.8.3
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/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
|