chione 0.0.3 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/History.md +14 -0
- data/lib/chione.rb +1 -1
- data/lib/chione/behaviors.rb +14 -0
- data/lib/chione/component.rb +15 -5
- data/lib/chione/world.rb +30 -8
- data/spec/chione/component_spec.rb +11 -0
- data/spec/chione/world_spec.rb +2 -2
- metadata +7 -7
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 414e1caef54ca7d5f41452376a2309e343bb52812f567012504628b5ec2347ff
|
4
|
+
data.tar.gz: ca11c73c74c4e45c1373e54f224603f059b8eb0338e40b4a8e5cc676dc56c98f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1a21bcb7a924fdeff7f3d1fd4effe157a642baf7ddbc56303cb966b83ad182e41c5b7ab9d9d000dfa7fc963ad36fd1cdab560bdcad2ae2da87a57789a0a8abf5
|
7
|
+
data.tar.gz: 2ba9b26c5f7cbf5be5dd1d6b85857215861a4827e2454c67fd6d529154346921582568f1d47248d34bba8aef6af63bce2d860e2e8569009bc79e6afd6e77acf8
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data.tar.gz.sig
CHANGED
Binary file
|
data/History.md
CHANGED
@@ -1,3 +1,17 @@
|
|
1
|
+
## v0.1.0 [2017-05-22] Michael Granger <ged@FaerieMUD.org>
|
2
|
+
|
3
|
+
Enhancements:
|
4
|
+
|
5
|
+
- Refactor the World start/stop logic to make it easier to override in
|
6
|
+
implementations which have their own process models.
|
7
|
+
- Allow a component's default to be generated by a callable
|
8
|
+
|
9
|
+
Bugfixes:
|
10
|
+
|
11
|
+
- Stringify the Manager or System class in `manager/added` and `system/added`
|
12
|
+
events.
|
13
|
+
|
14
|
+
|
1
15
|
## v0.0.3 [2017-01-04] Michael Granger <ged@FaerieMUD.org>
|
2
16
|
|
3
17
|
Enhancements:
|
data/lib/chione.rb
CHANGED
data/lib/chione/behaviors.rb
CHANGED
data/lib/chione/component.rb
CHANGED
@@ -4,19 +4,21 @@
|
|
4
4
|
require 'loggability'
|
5
5
|
|
6
6
|
require 'chione' unless defined?( Chione )
|
7
|
+
require 'chione/mixins'
|
8
|
+
|
7
9
|
|
8
10
|
# The Component (data) class
|
9
11
|
class Chione::Component
|
10
|
-
extend Loggability
|
12
|
+
extend Loggability,
|
13
|
+
Chione::MethodUtilities
|
11
14
|
|
12
15
|
# Loggability API -- log to the 'chione' logger
|
13
16
|
log_to :chione
|
14
17
|
|
15
18
|
|
19
|
+
##
|
16
20
|
# The Hash of fields implemented by the component
|
17
|
-
|
18
|
-
attr_accessor :fields
|
19
|
-
end
|
21
|
+
singleton_attr_accessor :fields
|
20
22
|
|
21
23
|
|
22
24
|
### Declare a field for the component named +name+, with a default value of
|
@@ -32,7 +34,7 @@ class Chione::Component
|
|
32
34
|
def initialize( values={} )
|
33
35
|
if self.class.fields
|
34
36
|
self.class.fields.each do |name, default|
|
35
|
-
self.method( "#{name}=" ).call( values[name] ||
|
37
|
+
self.method( "#{name}=" ).call( values[name] || default_value(default) )
|
36
38
|
end
|
37
39
|
end
|
38
40
|
end
|
@@ -61,6 +63,14 @@ class Chione::Component
|
|
61
63
|
private
|
62
64
|
#######
|
63
65
|
|
66
|
+
### Process the given +default+ value so it's suitable for use as a default
|
67
|
+
### attribute value.
|
68
|
+
def default_value( default )
|
69
|
+
return default.call( self ) if default.respond_to?( :call )
|
70
|
+
return deep_copy( default )
|
71
|
+
end
|
72
|
+
|
73
|
+
|
64
74
|
### Make a deep copy of the specified +value+.
|
65
75
|
def deep_copy( value )
|
66
76
|
return Marshal.load( Marshal.dump(value) )
|
data/lib/chione/world.rb
CHANGED
@@ -114,6 +114,13 @@ class Chione::World
|
|
114
114
|
end
|
115
115
|
|
116
116
|
|
117
|
+
### Stop any Managers running in the world.
|
118
|
+
def stop_managers
|
119
|
+
self.log.info "Stopping managers."
|
120
|
+
self.managers.each {|_, mgr| mgr.stop }
|
121
|
+
end
|
122
|
+
|
123
|
+
|
117
124
|
### Start any Systems registered with the world.
|
118
125
|
def start_systems
|
119
126
|
self.log.info "Starting %d Systems" % [ self.systems.length ]
|
@@ -127,6 +134,13 @@ class Chione::World
|
|
127
134
|
end
|
128
135
|
|
129
136
|
|
137
|
+
### Stop any Systems running in the world.
|
138
|
+
def stop_systems
|
139
|
+
self.log.info "Stopping systems."
|
140
|
+
self.systems.each {|_, sys| sys.stop }
|
141
|
+
end
|
142
|
+
|
143
|
+
|
130
144
|
### Returns +true+ if the World has been started (but is not necessarily running yet).
|
131
145
|
def started?
|
132
146
|
return @main_thread && @main_thread.alive?
|
@@ -139,22 +153,29 @@ class Chione::World
|
|
139
153
|
end
|
140
154
|
|
141
155
|
|
142
|
-
###
|
143
|
-
def
|
144
|
-
self.
|
145
|
-
self.managers.each {|_, mgr| mgr.stop }
|
146
|
-
|
156
|
+
### Kill the threads other than the main thread in the world's thread list.
|
157
|
+
def kill_world_threads
|
158
|
+
self.log.info "Killing child threads."
|
147
159
|
self.world_threads.list.each do |thr|
|
148
160
|
next if thr == @main_thread
|
161
|
+
self.log.debug " killing: %p" % [ thr ]
|
149
162
|
thr.join( self.class.max_stop_wait )
|
150
163
|
end
|
164
|
+
end
|
165
|
+
|
151
166
|
|
167
|
+
### Stop the world.
|
168
|
+
def stop
|
169
|
+
self.stop_systems
|
170
|
+
self.stop_managers
|
171
|
+
self.kill_world_threads
|
152
172
|
self.stop_timing_loop
|
153
173
|
end
|
154
174
|
|
155
175
|
|
156
176
|
### Halt the main timing loop. By default, this just kills the world's main thread.
|
157
177
|
def stop_timing_loop
|
178
|
+
self.log.info "Stopping the timing loop."
|
158
179
|
@main_thread.kill
|
159
180
|
end
|
160
181
|
|
@@ -184,7 +205,7 @@ class Chione::World
|
|
184
205
|
### Publish an event with the specified +event_name+, calling any subscribers with
|
185
206
|
### the specified +payload+.
|
186
207
|
def publish( event_name, *payload )
|
187
|
-
self.log.debug "Publishing a %p event: %p" % [ event_name, payload ]
|
208
|
+
# self.log.debug "Publishing a %p event: %p" % [ event_name, payload ]
|
188
209
|
@subscriptions.each do |pattern, callbacks|
|
189
210
|
next unless File.fnmatch?( pattern, event_name, File::FNM_EXTGLOB|File::FNM_PATHNAME )
|
190
211
|
|
@@ -194,6 +215,7 @@ class Chione::World
|
|
194
215
|
rescue => err
|
195
216
|
self.log.error "%p while calling %p for a %p event: %s" %
|
196
217
|
[ err.class, callback, event_name, err.message ]
|
218
|
+
self.log.debug " %s" % [ err.backtrace.join("\n ") ]
|
197
219
|
callbacks.delete( callback )
|
198
220
|
end
|
199
221
|
end
|
@@ -281,7 +303,7 @@ class Chione::World
|
|
281
303
|
system_obj.start
|
282
304
|
end
|
283
305
|
|
284
|
-
self.publish( 'system/added', system_type )
|
306
|
+
self.publish( 'system/added', system_type.name )
|
285
307
|
return system_obj
|
286
308
|
end
|
287
309
|
|
@@ -297,7 +319,7 @@ class Chione::World
|
|
297
319
|
manager_obj.start
|
298
320
|
end
|
299
321
|
|
300
|
-
self.publish( 'manager/added', manager_type )
|
322
|
+
self.publish( 'manager/added', manager_type.name )
|
301
323
|
return manager_obj
|
302
324
|
end
|
303
325
|
|
@@ -48,6 +48,17 @@ describe Chione::Component do
|
|
48
48
|
expect( instance2.things ).to be_empty
|
49
49
|
end
|
50
50
|
|
51
|
+
|
52
|
+
it "calls a callable default if it responds to #call" do
|
53
|
+
component_subclass.field( :oid, default: ->(obj) { obj.object_id } )
|
54
|
+
|
55
|
+
instance1 = component_subclass.new
|
56
|
+
instance2 = component_subclass.new( oid: 121212 )
|
57
|
+
|
58
|
+
expect( instance1.oid ).to eq( instance1.object_id )
|
59
|
+
expect( instance2.oid ).to eq( 121212 )
|
60
|
+
end
|
61
|
+
|
51
62
|
end
|
52
63
|
|
53
64
|
end
|
data/spec/chione/world_spec.rb
CHANGED
@@ -379,7 +379,7 @@ describe Chione::World do
|
|
379
379
|
|
380
380
|
sys = world.add_system( test_system )
|
381
381
|
|
382
|
-
expect( event_payload ).to eq([ 'system/added', [test_system] ])
|
382
|
+
expect( event_payload ).to eq([ 'system/added', [test_system.name] ])
|
383
383
|
end
|
384
384
|
|
385
385
|
|
@@ -424,7 +424,7 @@ describe Chione::World do
|
|
424
424
|
|
425
425
|
manager = world.add_manager( test_manager )
|
426
426
|
|
427
|
-
expect( event_payload ).to eq([ 'manager/added', [test_manager] ])
|
427
|
+
expect( event_payload ).to eq([ 'manager/added', [test_manager.name] ])
|
428
428
|
end
|
429
429
|
|
430
430
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: chione
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michael Granger
|
@@ -35,7 +35,7 @@ cert_chain:
|
|
35
35
|
w8aNA5re5+Rt/Vvjxj5AcEnZnZiz5x959NaddQocX32Z1unHw44pzRNUur1GInfW
|
36
36
|
p4vpx2kUSFSAGjtCbDGTNV2AH8w9OU4xEmNz8c5lyoA=
|
37
37
|
-----END CERTIFICATE-----
|
38
|
-
date: 2017-
|
38
|
+
date: 2017-05-22 00:00:00.000000000 Z
|
39
39
|
dependencies:
|
40
40
|
- !ruby/object:Gem::Dependency
|
41
41
|
name: loggability
|
@@ -99,14 +99,14 @@ dependencies:
|
|
99
99
|
requirements:
|
100
100
|
- - "~>"
|
101
101
|
- !ruby/object:Gem::Version
|
102
|
-
version: '0.
|
102
|
+
version: '0.9'
|
103
103
|
type: :development
|
104
104
|
prerelease: false
|
105
105
|
version_requirements: !ruby/object:Gem::Requirement
|
106
106
|
requirements:
|
107
107
|
- - "~>"
|
108
108
|
- !ruby/object:Gem::Version
|
109
|
-
version: '0.
|
109
|
+
version: '0.9'
|
110
110
|
- !ruby/object:Gem::Dependency
|
111
111
|
name: hoe-highline
|
112
112
|
requirement: !ruby/object:Gem::Requirement
|
@@ -169,14 +169,14 @@ dependencies:
|
|
169
169
|
requirements:
|
170
170
|
- - "~>"
|
171
171
|
- !ruby/object:Gem::Version
|
172
|
-
version: '3.
|
172
|
+
version: '3.16'
|
173
173
|
type: :development
|
174
174
|
prerelease: false
|
175
175
|
version_requirements: !ruby/object:Gem::Requirement
|
176
176
|
requirements:
|
177
177
|
- - "~>"
|
178
178
|
- !ruby/object:Gem::Version
|
179
|
-
version: '3.
|
179
|
+
version: '3.16'
|
180
180
|
description: |-
|
181
181
|
An Entity/Component System framework inspired by Artemis.
|
182
182
|
|
@@ -245,7 +245,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
245
245
|
version: '0'
|
246
246
|
requirements: []
|
247
247
|
rubyforge_project:
|
248
|
-
rubygems_version: 2.6.
|
248
|
+
rubygems_version: 2.6.12
|
249
249
|
signing_key:
|
250
250
|
specification_version: 4
|
251
251
|
summary: An Entity/Component System framework inspired by Artemis
|
metadata.gz.sig
CHANGED
Binary file
|