norikra 0.1.2-java → 0.1.3-java
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/README.md +76 -9
- data/lib/norikra/cli.rb +3 -0
- data/lib/norikra/fieldset.rb +7 -5
- data/lib/norikra/typedef_manager.rb +3 -3
- data/lib/norikra/version.rb +1 -1
- data/spec/fieldset_spec.rb +27 -0
- data/spec/typedef_manager_spec.rb +1 -1
- metadata +39 -5
- checksums.yaml +0 -7
data/README.md
CHANGED
@@ -22,7 +22,6 @@ For JRuby installation, you can use `rbenv`, `rvm` and `xbuild`, or install JRub
|
|
22
22
|
|
23
23
|
* JRuby: http://jruby.org/
|
24
24
|
* rbenv: https://github.com/sstephenson/rbenv/
|
25
|
-
* rvm: https://rvm.io/rvm/install/
|
26
25
|
* xbuild: https://github.com/tagomoris/xbuild
|
27
26
|
|
28
27
|
### Command line options
|
@@ -55,6 +54,27 @@ For other options, see help:
|
|
55
54
|
|
56
55
|
norikra help start
|
57
56
|
|
57
|
+
### How to execute norikra server and tests in development
|
58
|
+
|
59
|
+
Fix code and tests:
|
60
|
+
|
61
|
+
1. clone this repository
|
62
|
+
1. run `bundle install` w/ jruby
|
63
|
+
1. add/fix spec in `spec/*_spec.rb`
|
64
|
+
1. fix code in `lib`
|
65
|
+
1. run `bundle exec rake`
|
66
|
+
|
67
|
+
Run tests faster than 2 or more times:
|
68
|
+
|
69
|
+
1. execute `spork`
|
70
|
+
1. execute `script/spec_server_pry` in another terminal
|
71
|
+
1. run `rspec` in pry console (executed fastly after second times)
|
72
|
+
|
73
|
+
Execute norikra server with target/query continuation:
|
74
|
+
|
75
|
+
1. `bundle exec rake devserver`
|
76
|
+
1. `Ctrl-C` and re-execute for updated code
|
77
|
+
|
58
78
|
## Clients
|
59
79
|
|
60
80
|
Use `Norikra::Client` and `norikra-client` cli command. These are available on both of JRuby and CRuby.
|
@@ -104,24 +124,71 @@ And send more events:
|
|
104
124
|
|
105
125
|
Query 'www.search' matches the last event automatically.
|
106
126
|
|
127
|
+
## Performance
|
128
|
+
|
129
|
+
Threads option available with `norikra start`. Simple specifiers for performance with threadings:
|
130
|
+
|
131
|
+
norikra start --micro # or --small, --middle, --large (default: 'micro')
|
132
|
+
|
133
|
+
Norikra server has 3 types of threads:
|
134
|
+
|
135
|
+
* engine: 4 query engine thread types on Esper
|
136
|
+
* inbound: input data handler for queries
|
137
|
+
* outbound: output data handler for queries
|
138
|
+
* router: event handler which decides which query needs that events
|
139
|
+
* timer: executer for queries with time_batches and other timing events
|
140
|
+
* rpc: data input/output rpc handler threads on Jetty
|
141
|
+
* web: web ui request handler threads on Jetty
|
142
|
+
|
143
|
+
In many cases, norikra server handling high rate events needs large number of rpc threads to handle input/output rpc requests. WebUI don't need threads rather than default in almost all of cases.
|
144
|
+
|
145
|
+
Engine threads depends on queries running on norikra, input/output event data rate and target numbers. For more details, see Esper's API Documents: http://esper.codehaus.org/esper-4.10.0/doc/reference/en-US/html/api.html#api-threading
|
146
|
+
|
147
|
+
Norikra's simple specifiers details of threadings are:
|
148
|
+
|
149
|
+
* micro: development and testing
|
150
|
+
* engine: all processings on single threads
|
151
|
+
* rpc: 2 threads
|
152
|
+
* web: 2 threads
|
153
|
+
* small: low rate events on virtual servers
|
154
|
+
* engine: inbound 1, outbound 1, route 1, timer 1 threads
|
155
|
+
* rpc: 2 threads
|
156
|
+
* web: 2 threads
|
157
|
+
* middle: high rate events on physical servers
|
158
|
+
* engine: inbound 4, outbound 2, route 2, timer 2 threads
|
159
|
+
* rpc: 4 threads
|
160
|
+
* web: 2 threads
|
161
|
+
* large: inbound heavy traffic and huge amount of queries
|
162
|
+
* engine: inbound 6, outbound 6, route 4, timer 4 threads
|
163
|
+
* rpc: 8 threads
|
164
|
+
* web: 2 threads
|
165
|
+
|
166
|
+
To specify sizes of each threads, use `--*-threads=NUM` options. For more details, see: `norikra help start`.
|
167
|
+
|
107
168
|
## User Defined Functions
|
108
169
|
|
109
|
-
UDFs/UDAFs can be loaded as plugin gems over rubygems or as private plugins.
|
170
|
+
UDFs/UDAFs can be loaded as plugin gems over rubygems or as private plugins.
|
171
|
+
In fact, Norikra's UDFs/UDAFs are Esper's plugin with a JRuby class to indicate plugin metadata.
|
110
172
|
|
111
|
-
|
173
|
+
For details how to write your own UDF/UDAF for norikra and to release it as gem, see README of `norikra-udf-mock`.
|
174
|
+
https://github.com/norikra/norikra-udf-mock
|
112
175
|
|
113
|
-
##
|
176
|
+
## Tips
|
114
177
|
|
115
|
-
|
178
|
+
We need to write this document on http://norikra.github.io
|
116
179
|
|
117
|
-
|
180
|
+
### Esper query syntax
|
118
181
|
|
119
|
-
|
182
|
+
* String concatination operator: `||`
|
120
183
|
|
121
|
-
|
122
|
-
|
184
|
+
## Changes
|
185
|
+
|
186
|
+
* v0.1.2:
|
187
|
+
* Fix CLI start command to detect jruby path collectly (behind rbenv/rvm and others)
|
123
188
|
* v0.1.1:
|
124
189
|
* Fix types more explicitly for users ('int/long' -> 'integer', 'float/double' -> 'float')
|
190
|
+
* v0.1.0:
|
191
|
+
* First release for production
|
125
192
|
|
126
193
|
## Copyright
|
127
194
|
|
data/lib/norikra/cli.rb
CHANGED
@@ -42,6 +42,9 @@ module Norikra
|
|
42
42
|
option :'outbound-threads', :type => :numeric, :default => nil, :desc => 'number of threads for outbound data'
|
43
43
|
option :'route-threads', :type => :numeric, :default => nil, :desc => 'number of threads for events routing for query execution'
|
44
44
|
option :'timer-threads', :type => :numeric, :default => nil, :desc => 'number of threads for internal timers for query execution'
|
45
|
+
### about capacity options of esper's capacity-bound queue processing, see Esper's thread reference.
|
46
|
+
# http://esper.codehaus.org/esper-4.10.0/doc/reference/en-US/html/configuration.html#config-engine-threading-advanced
|
47
|
+
# default nil: unbound queueing
|
45
48
|
option :'inbound-thread-capacity', :type => :numeric, :default => nil
|
46
49
|
option :'outbound-thread-capacity', :type => :numeric, :default => nil
|
47
50
|
option :'route-thread-capacity', :type => :numeric, :default => nil
|
data/lib/norikra/fieldset.rb
CHANGED
@@ -4,10 +4,10 @@ require 'norikra/field'
|
|
4
4
|
module Norikra
|
5
5
|
class FieldSet
|
6
6
|
attr_accessor :summary, :fields
|
7
|
-
attr_accessor :target, :level
|
7
|
+
attr_accessor :target, :level, :query_unique_keys
|
8
8
|
|
9
9
|
# fieldset doesn't have container fields
|
10
|
-
def initialize(fields, default_optional=nil, rebounds=0)
|
10
|
+
def initialize(fields, default_optional=nil, rebounds=0, query_unique_keys=[])
|
11
11
|
@fields = {}
|
12
12
|
# fields.keys are raw key for container access chains
|
13
13
|
fields.keys.each do |key|
|
@@ -29,12 +29,13 @@ module Norikra
|
|
29
29
|
@target = nil
|
30
30
|
@level = nil
|
31
31
|
@rebounds = rebounds
|
32
|
+
@query_unique_keys = query_unique_keys
|
32
33
|
@event_type_name = nil
|
33
34
|
end
|
34
35
|
|
35
36
|
def dup
|
36
37
|
fields = Hash[@fields.map{|key,field| [key, {:type => field.type, :optional => field.optional}]}]
|
37
|
-
self.class.new(fields, nil, @rebounds)
|
38
|
+
self.class.new(fields, nil, @rebounds, @query_unique_keys)
|
38
39
|
end
|
39
40
|
|
40
41
|
def self.leaves(container)
|
@@ -127,7 +128,7 @@ module Norikra
|
|
127
128
|
#TODO: have a bug?
|
128
129
|
def ==(other)
|
129
130
|
return false if self.class != other.class
|
130
|
-
self.summary == other.summary
|
131
|
+
self.summary == other.summary && self.query_unique_keys == other.query_unique_keys
|
131
132
|
end
|
132
133
|
|
133
134
|
def definition
|
@@ -157,8 +158,9 @@ module Norikra
|
|
157
158
|
raise ArgumentError, "unknown fieldset bind level: #{level}, for target #{target}"
|
158
159
|
end
|
159
160
|
@rebounds += 1 if update_type_name
|
161
|
+
query_unique_key = @query_unique_keys ? @query_unique_keys.join("\t") : ''
|
160
162
|
|
161
|
-
@event_type_name = prefix + Digest::MD5.hexdigest([target, level.to_s, @rebounds.to_s, @summary].join("\t"))
|
163
|
+
@event_type_name = prefix + Digest::MD5.hexdigest([target, level.to_s, @rebounds.to_s, query_unique_key, @summary].join("\t"))
|
162
164
|
self
|
163
165
|
end
|
164
166
|
|
@@ -82,7 +82,7 @@ module Norikra
|
|
82
82
|
|
83
83
|
mapping = {}
|
84
84
|
fields_set.each do |target,fields|
|
85
|
-
mapping[target] = generate_query_fieldset(target, fields.sort.uniq)
|
85
|
+
mapping[target] = generate_query_fieldset(target, fields.sort.uniq, query.name, query.group)
|
86
86
|
end
|
87
87
|
mapping
|
88
88
|
end
|
@@ -106,7 +106,7 @@ module Norikra
|
|
106
106
|
guessed
|
107
107
|
end
|
108
108
|
|
109
|
-
def generate_query_fieldset(target, field_name_list)
|
109
|
+
def generate_query_fieldset(target, field_name_list, query_name, query_group)
|
110
110
|
# all fields of field_name_list should exists in definitions of typedef fields
|
111
111
|
# for this premise, call 'bind_fieldset' for data fieldset before this method.
|
112
112
|
required_fields = {}
|
@@ -117,7 +117,7 @@ module Norikra
|
|
117
117
|
end
|
118
118
|
end
|
119
119
|
end
|
120
|
-
Norikra::FieldSet.new(required_fields)
|
120
|
+
Norikra::FieldSet.new(required_fields, nil, 0, [query_name, (query_group || '')])
|
121
121
|
end
|
122
122
|
|
123
123
|
def base_fieldset(target)
|
data/lib/norikra/version.rb
CHANGED
data/spec/fieldset_spec.rb
CHANGED
@@ -42,12 +42,27 @@ describe Norikra::FieldSet do
|
|
42
42
|
set = Norikra::FieldSet.new({'x' => 'string', 'y' => 'long', 'a' => 'Boolean'})
|
43
43
|
set2 = Norikra::FieldSet.new({'a' => 'string', 'b' => 'int', 'c' => 'float', 'd' => 'bool', 'e' => 'integer'})
|
44
44
|
|
45
|
+
q_set1 = Norikra::FieldSet.new({'x' => 'string', 'y' => 'long'}, nil, 0, ['set1', 'g1'])
|
46
|
+
q_set2 = Norikra::FieldSet.new({'x' => 'string', 'y' => 'long'}, nil, 0, ['set2', nil])
|
47
|
+
q_set3 = Norikra::FieldSet.new({'x' => 'string', 'y' => 'long'}, nil, 0, ['set3', nil])
|
48
|
+
|
45
49
|
describe '#dup' do
|
46
50
|
it 'make duplicated object with different internal instance' do
|
47
51
|
x = set.dup
|
48
52
|
expect(x.fields.object_id).not_to eql(set.fields.object_id)
|
49
53
|
expect(x.fields).to eq(set.fields)
|
50
54
|
end
|
55
|
+
|
56
|
+
it 'make duplicated object with query name and group' do
|
57
|
+
expect(q_set1.dup.instance_eval{ @query_unique_keys }).to eql(['set1', 'g1'])
|
58
|
+
expect(q_set2.dup.instance_eval{ @query_unique_keys }).to eql(['set2', nil])
|
59
|
+
|
60
|
+
expect(q_set2 == q_set3).to be_false
|
61
|
+
|
62
|
+
expect(q_set1 == q_set1.dup).to be_true
|
63
|
+
expect(q_set2 == q_set2.dup).to be_true
|
64
|
+
expect(q_set3 == q_set3.dup).to be_true
|
65
|
+
end
|
51
66
|
end
|
52
67
|
|
53
68
|
describe '.leaves' do
|
@@ -252,6 +267,18 @@ describe Norikra::FieldSet do
|
|
252
267
|
expect(x.instance_eval{ @event_type_name }).not_to be_nil
|
253
268
|
expect(x.instance_eval{ @event_type_name }).to match(/q_[0-9a-f]{32}/) # MD5 hexdump
|
254
269
|
end
|
270
|
+
|
271
|
+
it 'sets different event_type_name for different query names and groups for query fieldsets w/ same field set' do
|
272
|
+
x = q_set1.dup
|
273
|
+
y = q_set2.dup
|
274
|
+
z = q_set3.dup
|
275
|
+
x.bind('TargetExample', :query)
|
276
|
+
y.bind('TargetExample', :query)
|
277
|
+
z.bind('TargetExample', :query)
|
278
|
+
|
279
|
+
expect(x.instance_eval{ @event_type_name }).not_to eql(y.instance_eval{ @event_type_name })
|
280
|
+
expect(x.instance_eval{ @event_type_name }).not_to eql(z.instance_eval{ @event_type_name })
|
281
|
+
end
|
255
282
|
end
|
256
283
|
|
257
284
|
describe '#rebind' do
|
@@ -218,7 +218,7 @@ describe Norikra::TypedefManager do
|
|
218
218
|
|
219
219
|
describe '#generate_query_fieldset' do
|
220
220
|
it 'returns fieldset instance with all required(non-optional) fields of target, and fields of query requires' do
|
221
|
-
r = manager.generate_query_fieldset('sample', ['a', 'b','f'])
|
221
|
+
r = manager.generate_query_fieldset('sample', ['a', 'b','f'], 'qname1', nil)
|
222
222
|
expect(r.fields.size).to eql(4) # a,b,c,f
|
223
223
|
expect(r.summary).to eql('a:string,b:string,c:float,f:boolean')
|
224
224
|
end
|
metadata
CHANGED
@@ -1,14 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: norikra
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
prerelease:
|
5
|
+
version: 0.1.3
|
5
6
|
platform: java
|
6
7
|
authors:
|
7
8
|
- TAGOMORI Satoshi
|
8
9
|
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
|
-
date: 2013-12-
|
12
|
+
date: 2013-12-31 00:00:00.000000000 Z
|
12
13
|
dependencies:
|
13
14
|
- !ruby/object:Gem::Dependency
|
14
15
|
name: mizuno
|
@@ -17,11 +18,13 @@ dependencies:
|
|
17
18
|
- - ~>
|
18
19
|
- !ruby/object:Gem::Version
|
19
20
|
version: '0.6'
|
21
|
+
none: false
|
20
22
|
requirement: !ruby/object:Gem::Requirement
|
21
23
|
requirements:
|
22
24
|
- - ~>
|
23
25
|
- !ruby/object:Gem::Version
|
24
26
|
version: '0.6'
|
27
|
+
none: false
|
25
28
|
prerelease: false
|
26
29
|
type: :runtime
|
27
30
|
- !ruby/object:Gem::Dependency
|
@@ -31,11 +34,13 @@ dependencies:
|
|
31
34
|
- - '>='
|
32
35
|
- !ruby/object:Gem::Version
|
33
36
|
version: '0'
|
37
|
+
none: false
|
34
38
|
requirement: !ruby/object:Gem::Requirement
|
35
39
|
requirements:
|
36
40
|
- - '>='
|
37
41
|
- !ruby/object:Gem::Version
|
38
42
|
version: '0'
|
43
|
+
none: false
|
39
44
|
prerelease: false
|
40
45
|
type: :runtime
|
41
46
|
- !ruby/object:Gem::Dependency
|
@@ -45,11 +50,13 @@ dependencies:
|
|
45
50
|
- - '>='
|
46
51
|
- !ruby/object:Gem::Version
|
47
52
|
version: '0'
|
53
|
+
none: false
|
48
54
|
requirement: !ruby/object:Gem::Requirement
|
49
55
|
requirements:
|
50
56
|
- - '>='
|
51
57
|
- !ruby/object:Gem::Version
|
52
58
|
version: '0'
|
59
|
+
none: false
|
53
60
|
prerelease: false
|
54
61
|
type: :runtime
|
55
62
|
- !ruby/object:Gem::Dependency
|
@@ -59,11 +66,13 @@ dependencies:
|
|
59
66
|
- - '>='
|
60
67
|
- !ruby/object:Gem::Version
|
61
68
|
version: 0.0.5
|
69
|
+
none: false
|
62
70
|
requirement: !ruby/object:Gem::Requirement
|
63
71
|
requirements:
|
64
72
|
- - '>='
|
65
73
|
- !ruby/object:Gem::Version
|
66
74
|
version: 0.0.5
|
75
|
+
none: false
|
67
76
|
prerelease: false
|
68
77
|
type: :runtime
|
69
78
|
- !ruby/object:Gem::Dependency
|
@@ -73,11 +82,13 @@ dependencies:
|
|
73
82
|
- - ~>
|
74
83
|
- !ruby/object:Gem::Version
|
75
84
|
version: 0.1.0
|
85
|
+
none: false
|
76
86
|
requirement: !ruby/object:Gem::Requirement
|
77
87
|
requirements:
|
78
88
|
- - ~>
|
79
89
|
- !ruby/object:Gem::Version
|
80
90
|
version: 0.1.0
|
91
|
+
none: false
|
81
92
|
prerelease: false
|
82
93
|
type: :runtime
|
83
94
|
- !ruby/object:Gem::Dependency
|
@@ -87,11 +98,13 @@ dependencies:
|
|
87
98
|
- - '>='
|
88
99
|
- !ruby/object:Gem::Version
|
89
100
|
version: '0'
|
101
|
+
none: false
|
90
102
|
requirement: !ruby/object:Gem::Requirement
|
91
103
|
requirements:
|
92
104
|
- - '>='
|
93
105
|
- !ruby/object:Gem::Version
|
94
106
|
version: '0'
|
107
|
+
none: false
|
95
108
|
prerelease: false
|
96
109
|
type: :runtime
|
97
110
|
- !ruby/object:Gem::Dependency
|
@@ -101,11 +114,13 @@ dependencies:
|
|
101
114
|
- - '>='
|
102
115
|
- !ruby/object:Gem::Version
|
103
116
|
version: '0'
|
117
|
+
none: false
|
104
118
|
requirement: !ruby/object:Gem::Requirement
|
105
119
|
requirements:
|
106
120
|
- - '>='
|
107
121
|
- !ruby/object:Gem::Version
|
108
122
|
version: '0'
|
123
|
+
none: false
|
109
124
|
prerelease: false
|
110
125
|
type: :runtime
|
111
126
|
- !ruby/object:Gem::Dependency
|
@@ -115,11 +130,13 @@ dependencies:
|
|
115
130
|
- - '>='
|
116
131
|
- !ruby/object:Gem::Version
|
117
132
|
version: '0'
|
133
|
+
none: false
|
118
134
|
requirement: !ruby/object:Gem::Requirement
|
119
135
|
requirements:
|
120
136
|
- - '>='
|
121
137
|
- !ruby/object:Gem::Version
|
122
138
|
version: '0'
|
139
|
+
none: false
|
123
140
|
prerelease: false
|
124
141
|
type: :runtime
|
125
142
|
- !ruby/object:Gem::Dependency
|
@@ -129,11 +146,13 @@ dependencies:
|
|
129
146
|
- - ~>
|
130
147
|
- !ruby/object:Gem::Version
|
131
148
|
version: '1.3'
|
149
|
+
none: false
|
132
150
|
requirement: !ruby/object:Gem::Requirement
|
133
151
|
requirements:
|
134
152
|
- - ~>
|
135
153
|
- !ruby/object:Gem::Version
|
136
154
|
version: '1.3'
|
155
|
+
none: false
|
137
156
|
prerelease: false
|
138
157
|
type: :development
|
139
158
|
- !ruby/object:Gem::Dependency
|
@@ -143,11 +162,13 @@ dependencies:
|
|
143
162
|
- - '>='
|
144
163
|
- !ruby/object:Gem::Version
|
145
164
|
version: '0'
|
165
|
+
none: false
|
146
166
|
requirement: !ruby/object:Gem::Requirement
|
147
167
|
requirements:
|
148
168
|
- - '>='
|
149
169
|
- !ruby/object:Gem::Version
|
150
170
|
version: '0'
|
171
|
+
none: false
|
151
172
|
prerelease: false
|
152
173
|
type: :development
|
153
174
|
- !ruby/object:Gem::Dependency
|
@@ -157,11 +178,13 @@ dependencies:
|
|
157
178
|
- - ~>
|
158
179
|
- !ruby/object:Gem::Version
|
159
180
|
version: '2.0'
|
181
|
+
none: false
|
160
182
|
requirement: !ruby/object:Gem::Requirement
|
161
183
|
requirements:
|
162
184
|
- - ~>
|
163
185
|
- !ruby/object:Gem::Version
|
164
186
|
version: '2.0'
|
187
|
+
none: false
|
165
188
|
prerelease: false
|
166
189
|
type: :development
|
167
190
|
- !ruby/object:Gem::Dependency
|
@@ -171,11 +194,13 @@ dependencies:
|
|
171
194
|
- - '>='
|
172
195
|
- !ruby/object:Gem::Version
|
173
196
|
version: '0'
|
197
|
+
none: false
|
174
198
|
requirement: !ruby/object:Gem::Requirement
|
175
199
|
requirements:
|
176
200
|
- - '>='
|
177
201
|
- !ruby/object:Gem::Version
|
178
202
|
version: '0'
|
203
|
+
none: false
|
179
204
|
prerelease: false
|
180
205
|
type: :development
|
181
206
|
- !ruby/object:Gem::Dependency
|
@@ -185,11 +210,13 @@ dependencies:
|
|
185
210
|
- - '>='
|
186
211
|
- !ruby/object:Gem::Version
|
187
212
|
version: '0'
|
213
|
+
none: false
|
188
214
|
requirement: !ruby/object:Gem::Requirement
|
189
215
|
requirements:
|
190
216
|
- - '>='
|
191
217
|
- !ruby/object:Gem::Version
|
192
218
|
version: '0'
|
219
|
+
none: false
|
193
220
|
prerelease: false
|
194
221
|
type: :development
|
195
222
|
description: 'CEP: Complex Event Processor with Esper EPL qeury language, messagepack
|
@@ -334,7 +361,6 @@ files:
|
|
334
361
|
homepage: http://norikra.github.io/
|
335
362
|
licenses:
|
336
363
|
- GPLv2
|
337
|
-
metadata: {}
|
338
364
|
post_install_message:
|
339
365
|
rdoc_options: []
|
340
366
|
require_paths:
|
@@ -344,17 +370,25 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
344
370
|
requirements:
|
345
371
|
- - '>='
|
346
372
|
- !ruby/object:Gem::Version
|
373
|
+
segments:
|
374
|
+
- 0
|
375
|
+
hash: 2
|
347
376
|
version: '0'
|
377
|
+
none: false
|
348
378
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
349
379
|
requirements:
|
350
380
|
- - '>='
|
351
381
|
- !ruby/object:Gem::Version
|
382
|
+
segments:
|
383
|
+
- 0
|
384
|
+
hash: 2
|
352
385
|
version: '0'
|
386
|
+
none: false
|
353
387
|
requirements: []
|
354
388
|
rubyforge_project:
|
355
|
-
rubygems_version:
|
389
|
+
rubygems_version: 1.8.24
|
356
390
|
signing_key:
|
357
|
-
specification_version:
|
391
|
+
specification_version: 3
|
358
392
|
summary: CEP engine/server with Esper and JRuby
|
359
393
|
test_files:
|
360
394
|
- spec/field_spec.rb
|
checksums.yaml
DELETED
@@ -1,7 +0,0 @@
|
|
1
|
-
---
|
2
|
-
SHA1:
|
3
|
-
metadata.gz: e528e20d062b04aa923fc369e3848b79af3988a5
|
4
|
-
data.tar.gz: 6b630871d14d48df16ca71521c0fbf1d9927e9cc
|
5
|
-
SHA512:
|
6
|
-
metadata.gz: bb30da37af4e23c1a8c1f121afe314e88f31123547d4c6a588cbadca36134c543b3a34edfda9197e5ee1afdbe4883f38ed0096789de4331889363f0b73d06530
|
7
|
-
data.tar.gz: 3bc139cc9b58f567dcf340aa256275445df156dc524923edce8a99100d6a52f356938407f4436aaa931b6419e897ac85340fa9d7900bb9a71b27e23888bbcf22
|