chione 0.2.0 → 0.3.0
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.
- checksums.yaml +4 -4
 - checksums.yaml.gz.sig +0 -0
 - data.tar.gz.sig +0 -0
 - data/ChangeLog +71 -1
 - data/History.md +22 -0
 - data/Manifest.txt +2 -1
 - data/Rakefile +6 -1
 - data/lib/chione.rb +27 -5
 - data/lib/chione/archetype.rb +71 -0
 - data/lib/chione/assemblage.rb +2 -65
 - data/lib/chione/component.rb +8 -0
 - data/lib/chione/entity.rb +7 -2
 - data/lib/chione/system.rb +6 -0
 - data/lib/chione/world.rb +8 -7
 - data/spec/chione/archetype_spec.rb +72 -0
 - data/spec/chione/entity_spec.rb +56 -14
 - data/spec/chione/system_spec.rb +35 -1
 - data/spec/chione/world_spec.rb +6 -6
 - data/spec/chione_spec.rb +29 -0
 - data/spec/spec_helper.rb +3 -0
 - metadata +19 -4
 - metadata.gz.sig +0 -0
 - data/spec/chione/assemblage_spec.rb +0 -60
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA1:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 9b24299f45b2755cca922ee6762900f1afb4b2b7
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: e4bb1a2a39c594b2ecee9e898b358f138c9d6ce7
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: fde13065c29d54acf5e355456f146740ed8a6f4a02084dff417944fae714e9395f566b2b717eef18ea398e4a7e9940f8f57871e1d9eb140ce60aa99bdaf45856
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 19d74ac66382bd50991a149ff5082346ba6eb67cbf0a629852051f19361bde42e3b7ec1e2b3279f128dbca377e94e8057df88b8eca349bed45480f0cb5caea4f
         
     | 
    
        checksums.yaml.gz.sig
    CHANGED
    
    | 
         Binary file 
     | 
    
        data.tar.gz.sig
    CHANGED
    
    | 
         Binary file 
     | 
    
        data/ChangeLog
    CHANGED
    
    | 
         @@ -1,8 +1,78 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            2017-05-31  Michael Granger  <ged@FaerieMUD.org>
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            	* .hgtags:
         
     | 
| 
      
 4 
     | 
    
         
            +
            	Added tag v0.3.0 for changeset c91f71b3d7d9
         
     | 
| 
      
 5 
     | 
    
         
            +
            	[06fdcde9eb00] [tip]
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            	* .hgsigs:
         
     | 
| 
      
 8 
     | 
    
         
            +
            	Added signature for changeset 0d453cae95c3
         
     | 
| 
      
 9 
     | 
    
         
            +
            	[c91f71b3d7d9] [v0.3.0]
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
            	* Rakefile, chione.gemspec:
         
     | 
| 
      
 12 
     | 
    
         
            +
            	Update gemspec
         
     | 
| 
      
 13 
     | 
    
         
            +
            	[0d453cae95c3]
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
            	* History.md, Manifest.txt, lib/chione.rb:
         
     | 
| 
      
 16 
     | 
    
         
            +
            	Bump the minor version, update history.
         
     | 
| 
      
 17 
     | 
    
         
            +
            	[e102f20bc862]
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
            	* lib/chione.rb, lib/chione/archetype.rb, lib/chione/assemblage.rb,
         
     | 
| 
      
 20 
     | 
    
         
            +
            	spec/chione/archetype_spec.rb:
         
     | 
| 
      
 21 
     | 
    
         
            +
            	Add more backward-compat for Chione::Assemblage
         
     | 
| 
      
 22 
     | 
    
         
            +
            	[a2e8b35fb950] [github/master]
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
            	* .gems, Manifest.txt, Rakefile, chione.gemspec, lib/chione.rb,
         
     | 
| 
      
 25 
     | 
    
         
            +
            	lib/chione/archetype.rb, lib/chione/assemblage.rb,
         
     | 
| 
      
 26 
     | 
    
         
            +
            	lib/chione/entity.rb, lib/chione/world.rb,
         
     | 
| 
      
 27 
     | 
    
         
            +
            	spec/chione/archetype_spec.rb, spec/chione/assemblage_spec.rb,
         
     | 
| 
      
 28 
     | 
    
         
            +
            	spec/chione/entity_spec.rb, spec/chione/world_spec.rb,
         
     | 
| 
      
 29 
     | 
    
         
            +
            	spec/spec_helper.rb:
         
     | 
| 
      
 30 
     | 
    
         
            +
            	Rename Assemblage to Archetype to follow Artemis's naming.
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
            	Also add 'deprecatable' to track deprecations.
         
     | 
| 
      
 33 
     | 
    
         
            +
            	[687db9f6d955]
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
            	* lib/chione/entity.rb, lib/chione/system.rb, lib/chione/world.rb,
         
     | 
| 
      
 36 
     | 
    
         
            +
            	spec/chione/entity_spec.rb, spec/chione/system_spec.rb:
         
     | 
| 
      
 37 
     | 
    
         
            +
            	Add some flexibility to working with Components.
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
            	- Add a Chione::Component() coercion method
         
     | 
| 
      
 40 
     | 
    
         
            +
            	- Allow a component to be added to an entity by name or class
         
     | 
| 
      
 41 
     | 
    
         
            +
            	- Rename Entity#get_component to #find_component to more accurately
         
     | 
| 
      
 42 
     | 
    
         
            +
            	reflect what it does. Aliased to the old name for backward
         
     | 
| 
      
 43 
     | 
    
         
            +
            	compatibility, but the alias will likely be removed before 1.0.
         
     | 
| 
      
 44 
     | 
    
         
            +
            	- Add an #entities method to System for easy iteration by subclasses.
         
     | 
| 
      
 45 
     | 
    
         
            +
            	- Change the return value of World#entities_for to an Enumerator for
         
     | 
| 
      
 46 
     | 
    
         
            +
            	future optimizations.
         
     | 
| 
      
 47 
     | 
    
         
            +
            	[0f1b93f7118f]
         
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
      
 49 
     | 
    
         
            +
            	* lib/chione/component.rb:
         
     | 
| 
      
 50 
     | 
    
         
            +
            	Add a missing private method to Component
         
     | 
| 
      
 51 
     | 
    
         
            +
            	[476c7503fa52]
         
     | 
| 
      
 52 
     | 
    
         
            +
             
     | 
| 
      
 53 
     | 
    
         
            +
            2017-05-30  Michael Granger  <ged@FaerieMUD.org>
         
     | 
| 
      
 54 
     | 
    
         
            +
             
     | 
| 
      
 55 
     | 
    
         
            +
            	* lib/chione.rb, spec/chione_spec.rb:
         
     | 
| 
      
 56 
     | 
    
         
            +
            	Add a Component coercion method
         
     | 
| 
      
 57 
     | 
    
         
            +
            	[48f58a3494f1]
         
     | 
| 
      
 58 
     | 
    
         
            +
             
     | 
| 
       1 
59 
     | 
    
         
             
            2017-05-26  Michael Granger  <ged@FaerieMUD.org>
         
     | 
| 
       2 
60 
     | 
    
         | 
| 
      
 61 
     | 
    
         
            +
            	* .hgtags:
         
     | 
| 
      
 62 
     | 
    
         
            +
            	Added tag v0.2.0 for changeset 94e6caba943c
         
     | 
| 
      
 63 
     | 
    
         
            +
            	[582fdd9c20c8]
         
     | 
| 
      
 64 
     | 
    
         
            +
             
     | 
| 
      
 65 
     | 
    
         
            +
            	* .hgsigs:
         
     | 
| 
      
 66 
     | 
    
         
            +
            	Added signature for changeset 89f0f18003f0
         
     | 
| 
      
 67 
     | 
    
         
            +
            	[94e6caba943c] [v0.2.0]
         
     | 
| 
      
 68 
     | 
    
         
            +
             
     | 
| 
      
 69 
     | 
    
         
            +
            	* History.md, Rakefile, chione.gemspec:
         
     | 
| 
      
 70 
     | 
    
         
            +
            	Re-prep for 0.2.0 release.
         
     | 
| 
      
 71 
     | 
    
         
            +
            	[89f0f18003f0]
         
     | 
| 
      
 72 
     | 
    
         
            +
             
     | 
| 
       3 
73 
     | 
    
         
             
            	* Rakefile, chione.gemspec:
         
     | 
| 
       4 
74 
     | 
    
         
             
            	Update gemspec
         
     | 
| 
       5 
     | 
    
         
            -
            	[068af8eec0e0] 
     | 
| 
      
 75 
     | 
    
         
            +
            	[068af8eec0e0]
         
     | 
| 
       6 
76 
     | 
    
         | 
| 
       7 
77 
     | 
    
         
             
            2017-05-25  Michael Granger  <ged@FaerieMUD.org>
         
     | 
| 
       8 
78 
     | 
    
         | 
    
        data/History.md
    CHANGED
    
    | 
         @@ -1,3 +1,25 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            ##  v0.3.0 [2017-05-31] Michael Granger <ged@FaerieMUD.org>
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            Changes:
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            - Rename Assemblage to Archetype to follow Artemis's naming.
         
     | 
| 
      
 6 
     | 
    
         
            +
            - Rename Entity#get_component to #find_component to more accurately
         
     | 
| 
      
 7 
     | 
    
         
            +
              reflect what it does. Aliased to the old name for backward
         
     | 
| 
      
 8 
     | 
    
         
            +
              compatibility, but the alias will likely be removed before 1.0.
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
            Enhancements:
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
            - Add a Chione::Component() coercion method
         
     | 
| 
      
 13 
     | 
    
         
            +
            - Allow a component to be added to an entity by name or class
         
     | 
| 
      
 14 
     | 
    
         
            +
            - Add an #entities method to System for easy iteration by subclasses.
         
     | 
| 
      
 15 
     | 
    
         
            +
            - Change the return value of World#entities_for to an Enumerator for
         
     | 
| 
      
 16 
     | 
    
         
            +
              future optimizations.
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
            Bugfixes:
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
            - Add a missing private method to Component
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
       1 
23 
     | 
    
         
             
            ##  v0.2.0 [2017-05-26] Michael Granger <ged@FaerieMUD.org>
         
     | 
| 
       2 
24 
     | 
    
         | 
| 
       3 
25 
     | 
    
         
             
            Enhancements:
         
     | 
    
        data/Manifest.txt
    CHANGED
    
    | 
         @@ -6,6 +6,7 @@ Manifest.txt 
     | 
|
| 
       6 
6 
     | 
    
         
             
            README.md
         
     | 
| 
       7 
7 
     | 
    
         
             
            Rakefile
         
     | 
| 
       8 
8 
     | 
    
         
             
            lib/chione.rb
         
     | 
| 
      
 9 
     | 
    
         
            +
            lib/chione/archetype.rb
         
     | 
| 
       9 
10 
     | 
    
         
             
            lib/chione/aspect.rb
         
     | 
| 
       10 
11 
     | 
    
         
             
            lib/chione/assemblage.rb
         
     | 
| 
       11 
12 
     | 
    
         
             
            lib/chione/behaviors.rb
         
     | 
| 
         @@ -15,8 +16,8 @@ lib/chione/manager.rb 
     | 
|
| 
       15 
16 
     | 
    
         
             
            lib/chione/mixins.rb
         
     | 
| 
       16 
17 
     | 
    
         
             
            lib/chione/system.rb
         
     | 
| 
       17 
18 
     | 
    
         
             
            lib/chione/world.rb
         
     | 
| 
      
 19 
     | 
    
         
            +
            spec/chione/archetype_spec.rb
         
     | 
| 
       18 
20 
     | 
    
         
             
            spec/chione/aspect_spec.rb
         
     | 
| 
       19 
     | 
    
         
            -
            spec/chione/assemblage_spec.rb
         
     | 
| 
       20 
21 
     | 
    
         
             
            spec/chione/component_spec.rb
         
     | 
| 
       21 
22 
     | 
    
         
             
            spec/chione/entity_spec.rb
         
     | 
| 
       22 
23 
     | 
    
         
             
            spec/chione/manager_spec.rb
         
     | 
    
        data/Rakefile
    CHANGED
    
    | 
         @@ -35,6 +35,7 @@ hoespec = Hoe.spec 'chione' do |spec| 
     | 
|
| 
       35 
35 
     | 
    
         
             
            	spec.dependency 'configurability', '~> 3.0'
         
     | 
| 
       36 
36 
     | 
    
         
             
            	spec.dependency 'pluggability',    '~> 0.4'
         
     | 
| 
       37 
37 
     | 
    
         
             
            	spec.dependency 'uuid',            '~> 2.3'
         
     | 
| 
      
 38 
     | 
    
         
            +
            	spec.dependency 'deprecatable',    '~> 1.0'
         
     | 
| 
       38 
39 
     | 
    
         | 
| 
       39 
40 
     | 
    
         
             
            	spec.dependency 'hoe-deveiate',            '~> 1.0',  :developer
         
     | 
| 
       40 
41 
     | 
    
         
             
            	spec.dependency 'simplecov',               '~> 0.12',  :developer
         
     | 
| 
         @@ -84,9 +85,12 @@ if File.directory?( '.hg' ) 
     | 
|
| 
       84 
85 
     | 
    
         
             
            	end
         
     | 
| 
       85 
86 
     | 
    
         
             
            end
         
     | 
| 
       86 
87 
     | 
    
         | 
| 
      
 88 
     | 
    
         
            +
            file __FILE__
         
     | 
| 
      
 89 
     | 
    
         
            +
            file 'lib/chione.rb'
         
     | 
| 
      
 90 
     | 
    
         
            +
            file 'Manifest.txt'
         
     | 
| 
       87 
91 
     | 
    
         | 
| 
       88 
92 
     | 
    
         
             
            task :gemspec => GEMSPEC
         
     | 
| 
       89 
     | 
    
         
            -
            file GEMSPEC => __FILE__
         
     | 
| 
      
 93 
     | 
    
         
            +
            file GEMSPEC => [ __FILE__, 'Manifest.txt', 'lib/chione.rb' ]
         
     | 
| 
       90 
94 
     | 
    
         
             
            task GEMSPEC do |task|
         
     | 
| 
       91 
95 
     | 
    
         
             
            	Rake.application.trace "Updating gemspec"
         
     | 
| 
       92 
96 
     | 
    
         
             
            	spec = $hoespec.spec
         
     | 
| 
         @@ -100,3 +104,4 @@ task GEMSPEC do |task| 
     | 
|
| 
       100 
104 
     | 
    
         
             
            end
         
     | 
| 
       101 
105 
     | 
    
         | 
| 
       102 
106 
     | 
    
         
             
            CLOBBER.include( GEMSPEC.to_s )
         
     | 
| 
      
 107 
     | 
    
         
            +
             
     | 
    
        data/lib/chione.rb
    CHANGED
    
    | 
         @@ -3,23 +3,26 @@ 
     | 
|
| 
       3 
3 
     | 
    
         | 
| 
       4 
4 
     | 
    
         
             
            require 'uuid'
         
     | 
| 
       5 
5 
     | 
    
         
             
            require 'loggability'
         
     | 
| 
      
 6 
     | 
    
         
            +
            require 'deprecatable'
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
            Deprecatable.options.has_at_exit_report = false
         
     | 
| 
       6 
9 
     | 
    
         | 
| 
       7 
10 
     | 
    
         
             
            # An Entity/Component System inspired by Artemis
         
     | 
| 
       8 
11 
     | 
    
         
             
            module Chione
         
     | 
| 
       9 
12 
     | 
    
         
             
            	extend Loggability
         
     | 
| 
       10 
13 
     | 
    
         | 
| 
       11 
     | 
    
         
            -
            	#  
     | 
| 
       12 
     | 
    
         
            -
            	 
     | 
| 
      
 14 
     | 
    
         
            +
            	# Gem version
         
     | 
| 
      
 15 
     | 
    
         
            +
            	VERSION = '0.3.0'
         
     | 
| 
       13 
16 
     | 
    
         | 
| 
       14 
17 
     | 
    
         | 
| 
       15 
     | 
    
         
            -
            	#  
     | 
| 
       16 
     | 
    
         
            -
            	 
     | 
| 
      
 18 
     | 
    
         
            +
            	# Loggability API -- set up a log host
         
     | 
| 
      
 19 
     | 
    
         
            +
            	log_as :chione
         
     | 
| 
       17 
20 
     | 
    
         | 
| 
       18 
21 
     | 
    
         | 
| 
       19 
22 
     | 
    
         
             
            	require 'chione/mixins'
         
     | 
| 
       20 
23 
     | 
    
         | 
| 
       21 
24 
     | 
    
         
             
            	autoload :Aspect,     'chione/aspect'
         
     | 
| 
       22 
     | 
    
         
            -
            	autoload : 
     | 
| 
      
 25 
     | 
    
         
            +
            	autoload :Archetype,  'chione/archetype'
         
     | 
| 
       23 
26 
     | 
    
         
             
            	autoload :Component,  'chione/component'
         
     | 
| 
       24 
27 
     | 
    
         
             
            	autoload :Entity,     'chione/entity'
         
     | 
| 
       25 
28 
     | 
    
         
             
            	autoload :Manager,    'chione/manager'
         
     | 
| 
         @@ -31,6 +34,25 @@ module Chione 
     | 
|
| 
       31 
34 
     | 
    
         
             
            	class << self; attr_reader :uuid ; end
         
     | 
| 
       32 
35 
     | 
    
         
             
            	@uuid = UUID.new
         
     | 
| 
       33 
36 
     | 
    
         | 
| 
      
 37 
     | 
    
         
            +
             
     | 
| 
      
 38 
     | 
    
         
            +
            	### Coerce the specified +object+ into a Chione::Component and return it.
         
     | 
| 
      
 39 
     | 
    
         
            +
            	def self::Component( object )
         
     | 
| 
      
 40 
     | 
    
         
            +
            		return object if object.is_a?( Chione::Component )
         
     | 
| 
      
 41 
     | 
    
         
            +
            		return Chione::Component.create( object ) if
         
     | 
| 
      
 42 
     | 
    
         
            +
            			object.is_a?( Class ) || object.is_a?( String ) || object.is_a?( Symbol )
         
     | 
| 
      
 43 
     | 
    
         
            +
            		raise TypeError, "can't convert %p into Chione::Component" % [ object.class ]
         
     | 
| 
      
 44 
     | 
    
         
            +
            	end
         
     | 
| 
      
 45 
     | 
    
         
            +
             
     | 
| 
      
 46 
     | 
    
         
            +
             
     | 
| 
      
 47 
     | 
    
         
            +
            	### Warn about deprecated constants.
         
     | 
| 
      
 48 
     | 
    
         
            +
            	def self::const_missing( name )
         
     | 
| 
      
 49 
     | 
    
         
            +
            		super unless name == :Assemblage
         
     | 
| 
      
 50 
     | 
    
         
            +
            		warn "Chione::Assemblage has been renamed to Chione::Archetype. " \
         
     | 
| 
      
 51 
     | 
    
         
            +
            			"This alias will be removed before 1.0\n" \
         
     | 
| 
      
 52 
     | 
    
         
            +
            			"Used at #{caller(1).first}"
         
     | 
| 
      
 53 
     | 
    
         
            +
            		return Chione::Archetype
         
     | 
| 
      
 54 
     | 
    
         
            +
            	end
         
     | 
| 
      
 55 
     | 
    
         
            +
             
     | 
| 
       34 
56 
     | 
    
         
             
            end # module Chione
         
     | 
| 
       35 
57 
     | 
    
         | 
| 
       36 
58 
     | 
    
         
             
            # vim: set nosta noet ts=4 sw=4:
         
     | 
| 
         @@ -0,0 +1,71 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # -*- ruby -*-
         
     | 
| 
      
 2 
     | 
    
         
            +
            #encoding: utf-8
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            require 'pluggability'
         
     | 
| 
      
 5 
     | 
    
         
            +
            require 'loggability'
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            require 'chione' unless defined?( Chione )
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
            # An Archetype mixin for defining factories for common entity configurations.
         
     | 
| 
      
 11 
     | 
    
         
            +
            module Chione::Archetype
         
     | 
| 
      
 12 
     | 
    
         
            +
            	extend Loggability,
         
     | 
| 
      
 13 
     | 
    
         
            +
            	       Pluggability
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
            	# Loggability API -- log to the chione logger
         
     | 
| 
      
 16 
     | 
    
         
            +
            	log_to :chione
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
            	# Pluggability API -- load subclasses from the 'chione/archetype' directory
         
     | 
| 
      
 19 
     | 
    
         
            +
            	plugin_prefixes 'chione/archetype', 'chione/assemblage'
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
            	### Extension callback -- add archetype functionality to an extended +object+.
         
     | 
| 
      
 23 
     | 
    
         
            +
            	def self::extended( object )
         
     | 
| 
      
 24 
     | 
    
         
            +
            		super
         
     | 
| 
      
 25 
     | 
    
         
            +
            		object.extend( Loggability )
         
     | 
| 
      
 26 
     | 
    
         
            +
            		object.log_to( :chione )
         
     | 
| 
      
 27 
     | 
    
         
            +
            		object.components ||= {}
         
     | 
| 
      
 28 
     | 
    
         
            +
            	end
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
            	### Inclusion callback -- add the components from this archetype to those in
         
     | 
| 
      
 32 
     | 
    
         
            +
            	### the specified +mod+.
         
     | 
| 
      
 33 
     | 
    
         
            +
            	def included( mod )
         
     | 
| 
      
 34 
     | 
    
         
            +
            		super
         
     | 
| 
      
 35 
     | 
    
         
            +
            		self.log.debug "Including %d components in %p" % [ self.components.length, mod ]
         
     | 
| 
      
 36 
     | 
    
         
            +
            		self.components.each do |component_type, args|
         
     | 
| 
      
 37 
     | 
    
         
            +
            			self.log.debug "Adding %p to %p from %p" % [ component_type, mod, self ]
         
     | 
| 
      
 38 
     | 
    
         
            +
            			mod.add( component_type, *args )
         
     | 
| 
      
 39 
     | 
    
         
            +
            		end
         
     | 
| 
      
 40 
     | 
    
         
            +
            	end
         
     | 
| 
      
 41 
     | 
    
         
            +
             
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
            	##
         
     | 
| 
      
 44 
     | 
    
         
            +
            	# The Hash of component types and initialization values to add to entities
         
     | 
| 
      
 45 
     | 
    
         
            +
            	# constructed by this Archetype.
         
     | 
| 
      
 46 
     | 
    
         
            +
            	attr_accessor :components
         
     | 
| 
      
 47 
     | 
    
         
            +
             
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
      
 49 
     | 
    
         
            +
            	### Add a +component_type+ to the list used when constructing a new entity from
         
     | 
| 
      
 50 
     | 
    
         
            +
            	### the current Archetype. The component will be instantiated using the specified
         
     | 
| 
      
 51 
     | 
    
         
            +
            	### +init_args+.
         
     | 
| 
      
 52 
     | 
    
         
            +
            	def add( component_type, *init_args )
         
     | 
| 
      
 53 
     | 
    
         
            +
            		self.components[ component_type ] = init_args
         
     | 
| 
      
 54 
     | 
    
         
            +
            	end
         
     | 
| 
      
 55 
     | 
    
         
            +
             
     | 
| 
      
 56 
     | 
    
         
            +
             
     | 
| 
      
 57 
     | 
    
         
            +
            	### Construct a new entity for the specified +world+ with all of the archetype's
         
     | 
| 
      
 58 
     | 
    
         
            +
            	### components.
         
     | 
| 
      
 59 
     | 
    
         
            +
            	def construct_for( world )
         
     | 
| 
      
 60 
     | 
    
         
            +
            		entity = world.create_entity
         
     | 
| 
      
 61 
     | 
    
         
            +
            		self.components.each do |component_type, args|
         
     | 
| 
      
 62 
     | 
    
         
            +
            			component = component_type.new( *args )
         
     | 
| 
      
 63 
     | 
    
         
            +
            			entity.add_component( component )
         
     | 
| 
      
 64 
     | 
    
         
            +
            		end
         
     | 
| 
      
 65 
     | 
    
         
            +
             
     | 
| 
      
 66 
     | 
    
         
            +
            		return entity
         
     | 
| 
      
 67 
     | 
    
         
            +
            	end
         
     | 
| 
      
 68 
     | 
    
         
            +
             
     | 
| 
      
 69 
     | 
    
         
            +
            end # module Chione::Archetype
         
     | 
| 
      
 70 
     | 
    
         
            +
             
     | 
| 
      
 71 
     | 
    
         
            +
             
     | 
    
        data/lib/chione/assemblage.rb
    CHANGED
    
    | 
         @@ -1,69 +1,6 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # -*- ruby -*-
         
     | 
| 
       2 
2 
     | 
    
         
             
            #encoding: utf-8
         
     | 
| 
       3 
3 
     | 
    
         | 
| 
       4 
     | 
    
         
            -
             
     | 
| 
       5 
     | 
    
         
            -
            require ' 
     | 
| 
      
 4 
     | 
    
         
            +
            # Replaced by chione/archetype
         
     | 
| 
      
 5 
     | 
    
         
            +
            require 'chione/archetype'
         
     | 
| 
       6 
6 
     | 
    
         | 
| 
       7 
     | 
    
         
            -
            require 'chione' unless defined?( Chione )
         
     | 
| 
       8 
     | 
    
         
            -
             
     | 
| 
       9 
     | 
    
         
            -
             
     | 
| 
       10 
     | 
    
         
            -
            # An Assemblage mixin for defining factories for common entity configurations.
         
     | 
| 
       11 
     | 
    
         
            -
            module Chione::Assemblage
         
     | 
| 
       12 
     | 
    
         
            -
            	extend Loggability,
         
     | 
| 
       13 
     | 
    
         
            -
            	       Pluggability
         
     | 
| 
       14 
     | 
    
         
            -
             
     | 
| 
       15 
     | 
    
         
            -
            	# Loggability API -- log to the chione logger
         
     | 
| 
       16 
     | 
    
         
            -
            	log_to :chione
         
     | 
| 
       17 
     | 
    
         
            -
             
     | 
| 
       18 
     | 
    
         
            -
            	# Pluggability API -- load subclasses from the 'chione/assemblage' directory
         
     | 
| 
       19 
     | 
    
         
            -
            	plugin_prefixes 'chione/assemblage'
         
     | 
| 
       20 
     | 
    
         
            -
             
     | 
| 
       21 
     | 
    
         
            -
             
     | 
| 
       22 
     | 
    
         
            -
            	### Extension callback -- add assemblage functionality to an extended +object+.
         
     | 
| 
       23 
     | 
    
         
            -
            	def self::extended( object )
         
     | 
| 
       24 
     | 
    
         
            -
            		super
         
     | 
| 
       25 
     | 
    
         
            -
            		object.extend( Loggability )
         
     | 
| 
       26 
     | 
    
         
            -
            		object.log_to( :chione )
         
     | 
| 
       27 
     | 
    
         
            -
            		object.components ||= {}
         
     | 
| 
       28 
     | 
    
         
            -
            	end
         
     | 
| 
       29 
     | 
    
         
            -
             
     | 
| 
       30 
     | 
    
         
            -
             
     | 
| 
       31 
     | 
    
         
            -
            	### Inclusion callback -- add the components from this assemblage to those in
         
     | 
| 
       32 
     | 
    
         
            -
            	### the specified +mod+.
         
     | 
| 
       33 
     | 
    
         
            -
            	def included( mod )
         
     | 
| 
       34 
     | 
    
         
            -
            		super
         
     | 
| 
       35 
     | 
    
         
            -
            		self.log.debug "Including %d components in %p" % [ self.components.length, mod ]
         
     | 
| 
       36 
     | 
    
         
            -
            		self.components.each do |component_type, args|
         
     | 
| 
       37 
     | 
    
         
            -
            			self.log.debug "Adding %p to %p from %p" % [ component_type, mod, self ]
         
     | 
| 
       38 
     | 
    
         
            -
            			mod.add( component_type, *args )
         
     | 
| 
       39 
     | 
    
         
            -
            		end
         
     | 
| 
       40 
     | 
    
         
            -
            	end
         
     | 
| 
       41 
     | 
    
         
            -
             
     | 
| 
       42 
     | 
    
         
            -
             
     | 
| 
       43 
     | 
    
         
            -
            	##
         
     | 
| 
       44 
     | 
    
         
            -
            	# The Hash of component types and initialization values to add to entities
         
     | 
| 
       45 
     | 
    
         
            -
            	# constructed by this Assemblage.
         
     | 
| 
       46 
     | 
    
         
            -
            	attr_accessor :components
         
     | 
| 
       47 
     | 
    
         
            -
             
     | 
| 
       48 
     | 
    
         
            -
             
     | 
| 
       49 
     | 
    
         
            -
            	### Add a +component_type+ to the list used when constructing a new entity from
         
     | 
| 
       50 
     | 
    
         
            -
            	### the current Assemblage. The component will be instantiated using the specified
         
     | 
| 
       51 
     | 
    
         
            -
            	### +init_args+.
         
     | 
| 
       52 
     | 
    
         
            -
            	def add( component_type, *init_args )
         
     | 
| 
       53 
     | 
    
         
            -
            		self.components[ component_type ] = init_args
         
     | 
| 
       54 
     | 
    
         
            -
            	end
         
     | 
| 
       55 
     | 
    
         
            -
             
     | 
| 
       56 
     | 
    
         
            -
             
     | 
| 
       57 
     | 
    
         
            -
            	### Construct a new entity for the specified +world+ with all of the assemblage's
         
     | 
| 
       58 
     | 
    
         
            -
            	### components.
         
     | 
| 
       59 
     | 
    
         
            -
            	def construct_for( world )
         
     | 
| 
       60 
     | 
    
         
            -
            		entity = world.create_entity
         
     | 
| 
       61 
     | 
    
         
            -
            		self.components.each do |component_type, args|
         
     | 
| 
       62 
     | 
    
         
            -
            			component = component_type.new( *args )
         
     | 
| 
       63 
     | 
    
         
            -
            			entity.add_component( component )
         
     | 
| 
       64 
     | 
    
         
            -
            		end
         
     | 
| 
       65 
     | 
    
         
            -
             
     | 
| 
       66 
     | 
    
         
            -
            		return entity
         
     | 
| 
       67 
     | 
    
         
            -
            	end
         
     | 
| 
       68 
     | 
    
         
            -
             
     | 
| 
       69 
     | 
    
         
            -
            end # module Chione::Assemblage
         
     | 
    
        data/lib/chione/component.rb
    CHANGED
    
    | 
         @@ -80,4 +80,12 @@ class Chione::Component 
     | 
|
| 
       80 
80 
     | 
    
         
             
            		return Marshal.load( Marshal.dump(value) )
         
     | 
| 
       81 
81 
     | 
    
         
             
            	end
         
     | 
| 
       82 
82 
     | 
    
         | 
| 
      
 83 
     | 
    
         
            +
             
     | 
| 
      
 84 
     | 
    
         
            +
            	### Return a slice of the specified +string+ truncated to at most +maxlen+
         
     | 
| 
      
 85 
     | 
    
         
            +
            	### characters. Returns the unchanged +string+ if it's not longer than +maxlen+.
         
     | 
| 
      
 86 
     | 
    
         
            +
            	def truncate_string( string, maxlen )
         
     | 
| 
      
 87 
     | 
    
         
            +
            		return string unless string.length > maxlen
         
     | 
| 
      
 88 
     | 
    
         
            +
            		return string[ 0, maxlen - 3 ] + '...'
         
     | 
| 
      
 89 
     | 
    
         
            +
            	end
         
     | 
| 
      
 90 
     | 
    
         
            +
             
     | 
| 
       83 
91 
     | 
    
         
             
            end # class Chione::Component
         
     | 
    
        data/lib/chione/entity.rb
    CHANGED
    
    | 
         @@ -1,6 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # -*- ruby -*-
         
     | 
| 
       2 
2 
     | 
    
         
             
            #encoding: utf-8
         
     | 
| 
       3 
3 
     | 
    
         | 
| 
      
 4 
     | 
    
         
            +
            require 'deprecatable'
         
     | 
| 
       4 
5 
     | 
    
         
             
            require 'loggability'
         
     | 
| 
       5 
6 
     | 
    
         
             
            require 'securerandom'
         
     | 
| 
       6 
7 
     | 
    
         | 
| 
         @@ -8,7 +9,8 @@ require 'chione' unless defined?( Chione ) 
     | 
|
| 
       8 
9 
     | 
    
         | 
| 
       9 
10 
     | 
    
         
             
            # The Entity (identity) class
         
     | 
| 
       10 
11 
     | 
    
         
             
            class Chione::Entity
         
     | 
| 
       11 
     | 
    
         
            -
            	extend Loggability
         
     | 
| 
      
 12 
     | 
    
         
            +
            	extend Loggability,
         
     | 
| 
      
 13 
     | 
    
         
            +
            	       Deprecatable
         
     | 
| 
       12 
14 
     | 
    
         | 
| 
       13 
15 
     | 
    
         
             
            	# Loggability API -- send logs to the Chione logger
         
     | 
| 
       14 
16 
     | 
    
         
             
            	log_to :chione
         
     | 
| 
         @@ -47,6 +49,7 @@ class Chione::Entity 
     | 
|
| 
       47 
49 
     | 
    
         
             
            	### Add the specified +component+ to the entity. It will replace any existing component
         
     | 
| 
       48 
50 
     | 
    
         
             
            	### of the same type.
         
     | 
| 
       49 
51 
     | 
    
         
             
            	def add_component( component )
         
     | 
| 
      
 52 
     | 
    
         
            +
            		component = Chione::Component( component )
         
     | 
| 
       50 
53 
     | 
    
         
             
            		self.components[ component.class ] = component
         
     | 
| 
       51 
54 
     | 
    
         
             
            		self.world.add_component_for( self, component )
         
     | 
| 
       52 
55 
     | 
    
         
             
            	end
         
     | 
| 
         @@ -54,11 +57,13 @@ class Chione::Entity 
     | 
|
| 
       54 
57 
     | 
    
         | 
| 
       55 
58 
     | 
    
         
             
            	### Fetch the first Component of the specified +types+ that belongs to the entity. If the
         
     | 
| 
       56 
59 
     | 
    
         
             
            	### Entity doesn't have any of the specified types of Component, raises a KeyError.
         
     | 
| 
       57 
     | 
    
         
            -
            	def  
     | 
| 
      
 60 
     | 
    
         
            +
            	def find_component( *types )
         
     | 
| 
       58 
61 
     | 
    
         
             
            		found_type = types.find {|type| self.components[type] } or
         
     | 
| 
       59 
62 
     | 
    
         
             
            			raise KeyError, "entity %s doesn't have any of %p" % [ self.id, types ]
         
     | 
| 
       60 
63 
     | 
    
         
             
            		return self.components[ found_type ]
         
     | 
| 
       61 
64 
     | 
    
         
             
            	end
         
     | 
| 
      
 65 
     | 
    
         
            +
            	alias_method :get_component, :find_component
         
     | 
| 
      
 66 
     | 
    
         
            +
            	deprecate :get_component, message: 'Use #find_component instead', removal_version: '1.0'
         
     | 
| 
       62 
67 
     | 
    
         | 
| 
       63 
68 
     | 
    
         | 
| 
       64 
69 
     | 
    
         
             
            	### Returns +true+ if this entity has the specified +component+.
         
     | 
    
        data/lib/chione/system.rb
    CHANGED
    
    
    
        data/lib/chione/world.rb
    CHANGED
    
    | 
         @@ -274,10 +274,10 @@ class Chione::World 
     | 
|
| 
       274 
274 
     | 
    
         | 
| 
       275 
275 
     | 
    
         | 
| 
       276 
276 
     | 
    
         
             
            	### Return a new Chione::Entity for the receiving World, using the optional
         
     | 
| 
       277 
     | 
    
         
            -
            	### + 
     | 
| 
       278 
     | 
    
         
            -
            	def create_entity(  
     | 
| 
       279 
     | 
    
         
            -
            		entity = if  
     | 
| 
       280 
     | 
    
         
            -
            				 
     | 
| 
      
 277 
     | 
    
         
            +
            	### +archetype+ to populate it with components if it's specified.
         
     | 
| 
      
 278 
     | 
    
         
            +
            	def create_entity( archetype=nil )
         
     | 
| 
      
 279 
     | 
    
         
            +
            		entity = if archetype
         
     | 
| 
      
 280 
     | 
    
         
            +
            				archetype.construct_for( self )
         
     | 
| 
       281 
281 
     | 
    
         
             
            			else
         
     | 
| 
       282 
282 
     | 
    
         
             
            				self.create_blank_entity
         
     | 
| 
       283 
283 
     | 
    
         
             
            			end
         
     | 
| 
         @@ -323,15 +323,16 @@ class Chione::World 
     | 
|
| 
       323 
323 
     | 
    
         
             
            	### Register the specified +component+ as having been added to the specified
         
     | 
| 
       324 
324 
     | 
    
         
             
            	### +entity+.
         
     | 
| 
       325 
325 
     | 
    
         
             
            	def add_component_for( entity, component )
         
     | 
| 
      
 326 
     | 
    
         
            +
            		self.log.debug "Adding %p for %p" % [ component.class, entity ]
         
     | 
| 
       326 
327 
     | 
    
         
             
            		@entities_by_component[ component.class ].add( entity )
         
     | 
| 
       327 
328 
     | 
    
         
             
            	end
         
     | 
| 
       328 
329 
     | 
    
         | 
| 
       329 
330 
     | 
    
         | 
| 
       330 
     | 
    
         
            -
            	### Return the Entities that have a Component composition that 
     | 
| 
       331 
     | 
    
         
            -
            	### the specified +system+'s aspect.
         
     | 
| 
      
 331 
     | 
    
         
            +
            	### Return an Enumerator of the Entities that have a Component composition that
         
     | 
| 
      
 332 
     | 
    
         
            +
            	### is compatible with the specified +system+'s aspect.
         
     | 
| 
       332 
333 
     | 
    
         
             
            	def entities_for( system )
         
     | 
| 
       333 
334 
     | 
    
         
             
            		system = system.class unless system.is_a?( Class )
         
     | 
| 
       334 
     | 
    
         
            -
            		return self.entities_with( system.aspect )
         
     | 
| 
      
 335 
     | 
    
         
            +
            		return self.entities_with( system.aspect ).to_enum
         
     | 
| 
       335 
336 
     | 
    
         
             
            	end
         
     | 
| 
       336 
337 
     | 
    
         | 
| 
       337 
338 
     | 
    
         | 
| 
         @@ -0,0 +1,72 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            #!/usr/bin/env rspec -cfd
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            require_relative '../spec_helper'
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            require 'chione/archetype'
         
     | 
| 
      
 6 
     | 
    
         
            +
            require 'chione/component'
         
     | 
| 
      
 7 
     | 
    
         
            +
            require 'chione/entity'
         
     | 
| 
      
 8 
     | 
    
         
            +
            require 'chione/world'
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
            describe Chione::Archetype do
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
            	let( :world ) { Chione::World.new }
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
            	let( :location_component ) do
         
     | 
| 
      
 15 
     | 
    
         
            +
            		Class.new( Chione::Component ) do
         
     | 
| 
      
 16 
     | 
    
         
            +
            			field :x, default: 0
         
     | 
| 
      
 17 
     | 
    
         
            +
            			field :y, default: 0
         
     | 
| 
      
 18 
     | 
    
         
            +
            		end
         
     | 
| 
      
 19 
     | 
    
         
            +
            	end
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
            	let( :tags_component ) do
         
     | 
| 
      
 22 
     | 
    
         
            +
            		Class.new( Chione::Component ) do
         
     | 
| 
      
 23 
     | 
    
         
            +
            			field :tags, default: []
         
     | 
| 
      
 24 
     | 
    
         
            +
            		end
         
     | 
| 
      
 25 
     | 
    
         
            +
            	end
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
            	it "acts as a factory for entities with pre-set components" do
         
     | 
| 
      
 29 
     | 
    
         
            +
            		archetype = Module.new
         
     | 
| 
      
 30 
     | 
    
         
            +
            		archetype.extend( described_class )
         
     | 
| 
      
 31 
     | 
    
         
            +
            		archetype.add( location_component, x: 10, y: 8 )
         
     | 
| 
      
 32 
     | 
    
         
            +
            		archetype.add( tags_component, tags: [:foo, :bar] )
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
            		entity = archetype.construct_for( world )
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
            		expect( entity ).to be_a( Chione::Entity )
         
     | 
| 
      
 37 
     | 
    
         
            +
            		expect( entity.world ).to be( world )
         
     | 
| 
      
 38 
     | 
    
         
            +
            		expect( entity.components ).to include( location_component, tags_component )
         
     | 
| 
      
 39 
     | 
    
         
            +
            	end
         
     | 
| 
      
 40 
     | 
    
         
            +
             
     | 
| 
      
 41 
     | 
    
         
            +
             
     | 
| 
      
 42 
     | 
    
         
            +
            	it "can include other archetypes" do
         
     | 
| 
      
 43 
     | 
    
         
            +
            		general_archetype = Module.new
         
     | 
| 
      
 44 
     | 
    
         
            +
            		general_archetype.extend( described_class )
         
     | 
| 
      
 45 
     | 
    
         
            +
            		general_archetype.add( location_component, x: 10, y: 8 )
         
     | 
| 
      
 46 
     | 
    
         
            +
             
     | 
| 
      
 47 
     | 
    
         
            +
            		specific_archetype = Module.new
         
     | 
| 
      
 48 
     | 
    
         
            +
            		specific_archetype.extend( described_class )
         
     | 
| 
      
 49 
     | 
    
         
            +
            		specific_archetype.send( :include, general_archetype )
         
     | 
| 
      
 50 
     | 
    
         
            +
            		specific_archetype.add( tags_component, tags: [:foo, :bar] )
         
     | 
| 
      
 51 
     | 
    
         
            +
             
     | 
| 
      
 52 
     | 
    
         
            +
            		entity = specific_archetype.construct_for( world )
         
     | 
| 
      
 53 
     | 
    
         
            +
             
     | 
| 
      
 54 
     | 
    
         
            +
            		expect( entity ).to be_a( Chione::Entity )
         
     | 
| 
      
 55 
     | 
    
         
            +
            		expect( entity.world ).to be( world )
         
     | 
| 
      
 56 
     | 
    
         
            +
            		expect( entity.components ).to include( location_component, tags_component )
         
     | 
| 
      
 57 
     | 
    
         
            +
            	end
         
     | 
| 
      
 58 
     | 
    
         
            +
             
     | 
| 
      
 59 
     | 
    
         
            +
             
     | 
| 
      
 60 
     | 
    
         
            +
            	it "is still loadable as an `Assemblage`" do
         
     | 
| 
      
 61 
     | 
    
         
            +
            		expect {
         
     | 
| 
      
 62 
     | 
    
         
            +
            			expect( Chione::Assemblage ).to equal( described_class )
         
     | 
| 
      
 63 
     | 
    
         
            +
            		}.to output( /has been renamed/i ).to_stderr
         
     | 
| 
      
 64 
     | 
    
         
            +
            	end
         
     | 
| 
      
 65 
     | 
    
         
            +
             
     | 
| 
      
 66 
     | 
    
         
            +
             
     | 
| 
      
 67 
     | 
    
         
            +
            	it "still looks in the chione/assemblage directory for derivatives" do
         
     | 
| 
      
 68 
     | 
    
         
            +
            		expect( described_class.plugin_prefixes ).to include( 'chione/assemblage' )
         
     | 
| 
      
 69 
     | 
    
         
            +
            	end
         
     | 
| 
      
 70 
     | 
    
         
            +
             
     | 
| 
      
 71 
     | 
    
         
            +
            end
         
     | 
| 
      
 72 
     | 
    
         
            +
             
     | 
    
        data/spec/chione/entity_spec.rb
    CHANGED
    
    | 
         @@ -8,27 +8,47 @@ require 'chione/component' 
     | 
|
| 
       8 
8 
     | 
    
         | 
| 
       9 
9 
     | 
    
         
             
            describe Chione::Entity do
         
     | 
| 
       10 
10 
     | 
    
         | 
| 
      
 11 
     | 
    
         
            +
            	before( :all ) do
         
     | 
| 
      
 12 
     | 
    
         
            +
            		@component_classes = Chione::Component.derivatives.dup
         
     | 
| 
      
 13 
     | 
    
         
            +
            	end
         
     | 
| 
      
 14 
     | 
    
         
            +
            	before( :each ) do
         
     | 
| 
      
 15 
     | 
    
         
            +
            		Chione::Component.derivatives.clear
         
     | 
| 
      
 16 
     | 
    
         
            +
            	end
         
     | 
| 
      
 17 
     | 
    
         
            +
            	after( :all ) do
         
     | 
| 
      
 18 
     | 
    
         
            +
            		Chione::Component.derivatives.replace( @component_classes )
         
     | 
| 
      
 19 
     | 
    
         
            +
            	end
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
       11 
22 
     | 
    
         
             
            	let( :world ) { Chione::World.new }
         
     | 
| 
       12 
23 
     | 
    
         | 
| 
       13 
24 
     | 
    
         
             
            	let( :location_component ) do
         
     | 
| 
       14 
     | 
    
         
            -
            		Class.new( Chione::Component ) do
         
     | 
| 
      
 25 
     | 
    
         
            +
            		klass = Class.new( Chione::Component ) do
         
     | 
| 
      
 26 
     | 
    
         
            +
            			def self::name; "Location"; end
         
     | 
| 
       15 
27 
     | 
    
         
             
            			field :x, default: 0
         
     | 
| 
       16 
28 
     | 
    
         
             
            			field :y, default: 0
         
     | 
| 
       17 
29 
     | 
    
         
             
            		end
         
     | 
| 
      
 30 
     | 
    
         
            +
            		Chione::Component.derivatives['location'] = klass
         
     | 
| 
      
 31 
     | 
    
         
            +
            		klass
         
     | 
| 
       18 
32 
     | 
    
         
             
            	end
         
     | 
| 
       19 
33 
     | 
    
         | 
| 
       20 
34 
     | 
    
         
             
            	let( :tags_component ) do
         
     | 
| 
       21 
     | 
    
         
            -
            		Class.new( Chione::Component ) do
         
     | 
| 
      
 35 
     | 
    
         
            +
            		klass = Class.new( Chione::Component ) do
         
     | 
| 
      
 36 
     | 
    
         
            +
            			def self::name; "Tags"; end
         
     | 
| 
       22 
37 
     | 
    
         
             
            			field :tags, default: []
         
     | 
| 
       23 
38 
     | 
    
         
             
            		end
         
     | 
| 
      
 39 
     | 
    
         
            +
            		Chione::Component.derivatives['tags'] = klass
         
     | 
| 
      
 40 
     | 
    
         
            +
            		klass
         
     | 
| 
       24 
41 
     | 
    
         
             
            	end
         
     | 
| 
       25 
42 
     | 
    
         | 
| 
       26 
43 
     | 
    
         
             
            	let( :bounding_box_component ) do
         
     | 
| 
       27 
     | 
    
         
            -
            		Class.new( Chione::Component ) do
         
     | 
| 
      
 44 
     | 
    
         
            +
            		klass = Class.new( Chione::Component ) do
         
     | 
| 
      
 45 
     | 
    
         
            +
            			def self::name; "BoundingBox"; end
         
     | 
| 
       28 
46 
     | 
    
         
             
            			field :width, default: 1
         
     | 
| 
       29 
47 
     | 
    
         
             
            			field :height, default: 1
         
     | 
| 
       30 
48 
     | 
    
         
             
            			field :depth, default: 1
         
     | 
| 
       31 
49 
     | 
    
         
             
            		end
         
     | 
| 
      
 50 
     | 
    
         
            +
            		Chione::Component.derivatives['bounding_box'] = klass
         
     | 
| 
      
 51 
     | 
    
         
            +
            		klass
         
     | 
| 
       32 
52 
     | 
    
         
             
            	end
         
     | 
| 
       33 
53 
     | 
    
         | 
| 
       34 
54 
     | 
    
         | 
| 
         @@ -58,8 +78,20 @@ describe Chione::Entity do 
     | 
|
| 
       58 
78 
     | 
    
         | 
| 
       59 
79 
     | 
    
         | 
| 
       60 
80 
     | 
    
         
             
            		it "can have components added to it" do
         
     | 
| 
       61 
     | 
    
         
            -
            			entity.add_component( location_component 
     | 
| 
       62 
     | 
    
         
            -
            			entity.add_component( tags_component 
     | 
| 
      
 81 
     | 
    
         
            +
            			entity.add_component( location_component )
         
     | 
| 
      
 82 
     | 
    
         
            +
            			entity.add_component( tags_component )
         
     | 
| 
      
 83 
     | 
    
         
            +
             
     | 
| 
      
 84 
     | 
    
         
            +
            			expect( entity ).to have_component( location_component )
         
     | 
| 
      
 85 
     | 
    
         
            +
            			expect( entity ).to have_component( tags_component )
         
     | 
| 
      
 86 
     | 
    
         
            +
            		end
         
     | 
| 
      
 87 
     | 
    
         
            +
             
     | 
| 
      
 88 
     | 
    
         
            +
             
     | 
| 
      
 89 
     | 
    
         
            +
            		it "can have components added to it by name" do
         
     | 
| 
      
 90 
     | 
    
         
            +
            			location_component()
         
     | 
| 
      
 91 
     | 
    
         
            +
            			tags_component()
         
     | 
| 
      
 92 
     | 
    
         
            +
             
     | 
| 
      
 93 
     | 
    
         
            +
            			entity.add_component( :location )
         
     | 
| 
      
 94 
     | 
    
         
            +
            			entity.add_component( :tags )
         
     | 
| 
       63 
95 
     | 
    
         | 
| 
       64 
96 
     | 
    
         
             
            			expect( entity ).to have_component( location_component )
         
     | 
| 
       65 
97 
     | 
    
         
             
            			expect( entity ).to have_component( tags_component )
         
     | 
| 
         @@ -67,8 +99,18 @@ describe Chione::Entity do 
     | 
|
| 
       67 
99 
     | 
    
         | 
| 
       68 
100 
     | 
    
         | 
| 
       69 
101 
     | 
    
         
             
            		it "lets components be fetched from it" do
         
     | 
| 
       70 
     | 
    
         
            -
            			entity.add_component( location_component 
     | 
| 
       71 
     | 
    
         
            -
            			entity.add_component( tags_component 
     | 
| 
      
 102 
     | 
    
         
            +
            			entity.add_component( location_component )
         
     | 
| 
      
 103 
     | 
    
         
            +
            			entity.add_component( tags_component )
         
     | 
| 
      
 104 
     | 
    
         
            +
             
     | 
| 
      
 105 
     | 
    
         
            +
            			expect(
         
     | 
| 
      
 106 
     | 
    
         
            +
            				entity.find_component( location_component )
         
     | 
| 
      
 107 
     | 
    
         
            +
            			).to eq( entity.components[location_component] )
         
     | 
| 
      
 108 
     | 
    
         
            +
            		end
         
     | 
| 
      
 109 
     | 
    
         
            +
             
     | 
| 
      
 110 
     | 
    
         
            +
             
     | 
| 
      
 111 
     | 
    
         
            +
            		it "supports backward-compatible component-fetcher method" do
         
     | 
| 
      
 112 
     | 
    
         
            +
            			entity.add_component( location_component )
         
     | 
| 
      
 113 
     | 
    
         
            +
            			entity.add_component( tags_component )
         
     | 
| 
       72 
114 
     | 
    
         | 
| 
       73 
115 
     | 
    
         
             
            			expect(
         
     | 
| 
       74 
116 
     | 
    
         
             
            				entity.get_component( location_component )
         
     | 
| 
         @@ -77,29 +119,29 @@ describe Chione::Entity do 
     | 
|
| 
       77 
119 
     | 
    
         | 
| 
       78 
120 
     | 
    
         | 
| 
       79 
121 
     | 
    
         
             
            		it "lets one of a list of components be fetched from it" do
         
     | 
| 
       80 
     | 
    
         
            -
            			entity.add_component( location_component 
     | 
| 
       81 
     | 
    
         
            -
            			entity.add_component( tags_component 
     | 
| 
      
 122 
     | 
    
         
            +
            			entity.add_component( location_component )
         
     | 
| 
      
 123 
     | 
    
         
            +
            			entity.add_component( tags_component )
         
     | 
| 
       82 
124 
     | 
    
         | 
| 
       83 
125 
     | 
    
         
             
            			expect(
         
     | 
| 
       84 
     | 
    
         
            -
            				entity. 
     | 
| 
      
 126 
     | 
    
         
            +
            				entity.find_component( bounding_box_component, location_component )
         
     | 
| 
       85 
127 
     | 
    
         
             
            			).to eq( entity.components[location_component] )
         
     | 
| 
       86 
128 
     | 
    
         
             
            		end
         
     | 
| 
       87 
129 
     | 
    
         | 
| 
       88 
130 
     | 
    
         | 
| 
       89 
131 
     | 
    
         
             
            		it "raises a KeyError if it doesn't have a fetched component" do
         
     | 
| 
       90 
     | 
    
         
            -
            			entity.add_component( tags_component 
     | 
| 
      
 132 
     | 
    
         
            +
            			entity.add_component( tags_component )
         
     | 
| 
       91 
133 
     | 
    
         | 
| 
       92 
134 
     | 
    
         
             
            			expect {
         
     | 
| 
       93 
     | 
    
         
            -
            				entity. 
     | 
| 
      
 135 
     | 
    
         
            +
            				entity.find_component( location_component )
         
     | 
| 
       94 
136 
     | 
    
         
             
            			}.to raise_error( KeyError, /#{entity.id} doesn't have/i )
         
     | 
| 
       95 
137 
     | 
    
         
             
            		end
         
     | 
| 
       96 
138 
     | 
    
         | 
| 
       97 
139 
     | 
    
         | 
| 
       98 
140 
     | 
    
         
             
            		it "raises a KeyError if it doesn't have any of several fetched components" do
         
     | 
| 
       99 
     | 
    
         
            -
            			entity.add_component( tags_component 
     | 
| 
      
 141 
     | 
    
         
            +
            			entity.add_component( tags_component )
         
     | 
| 
       100 
142 
     | 
    
         | 
| 
       101 
143 
     | 
    
         
             
            			expect {
         
     | 
| 
       102 
     | 
    
         
            -
            				entity. 
     | 
| 
      
 144 
     | 
    
         
            +
            				entity.find_component( location_component, bounding_box_component )
         
     | 
| 
       103 
145 
     | 
    
         
             
            			}.to raise_error( KeyError, /#{entity.id} doesn't have any of/i )
         
     | 
| 
       104 
146 
     | 
    
         
             
            		end
         
     | 
| 
       105 
147 
     | 
    
         | 
    
        data/spec/chione/system_spec.rb
    CHANGED
    
    | 
         @@ -27,11 +27,12 @@ describe Chione::System do 
     | 
|
| 
       27 
27 
     | 
    
         
             
            	end
         
     | 
| 
       28 
28 
     | 
    
         | 
| 
       29 
29 
     | 
    
         | 
| 
       30 
     | 
    
         
            -
            	describe " 
     | 
| 
      
 30 
     | 
    
         
            +
            	describe "subclass" do
         
     | 
| 
       31 
31 
     | 
    
         | 
| 
       32 
32 
     | 
    
         
             
            		let( :subclass ) do
         
     | 
| 
       33 
33 
     | 
    
         
             
            			Class.new(described_class)
         
     | 
| 
       34 
34 
     | 
    
         
             
            		end
         
     | 
| 
      
 35 
     | 
    
         
            +
            		let( :world ) { Chione::World.new }
         
     | 
| 
       35 
36 
     | 
    
         | 
| 
       36 
37 
     | 
    
         | 
| 
       37 
38 
     | 
    
         
             
            		it "has a default Aspect which matches all entities" do
         
     | 
| 
         @@ -57,6 +58,39 @@ describe Chione::System do 
     | 
|
| 
       57 
58 
     | 
    
         
             
            		end
         
     | 
| 
       58 
59 
     | 
    
         | 
| 
       59 
60 
     | 
    
         | 
| 
      
 61 
     | 
    
         
            +
            		describe "instance" do
         
     | 
| 
      
 62 
     | 
    
         
            +
             
     | 
| 
      
 63 
     | 
    
         
            +
            			let( :subclass ) do
         
     | 
| 
      
 64 
     | 
    
         
            +
            				subclass = super()
         
     | 
| 
      
 65 
     | 
    
         
            +
            				subclass.aspect all_of: volition_component,
         
     | 
| 
      
 66 
     | 
    
         
            +
            					one_of: [ tags_component, location_component ]
         
     | 
| 
      
 67 
     | 
    
         
            +
            				subclass
         
     | 
| 
      
 68 
     | 
    
         
            +
            			end
         
     | 
| 
      
 69 
     | 
    
         
            +
             
     | 
| 
      
 70 
     | 
    
         
            +
            			let( :instance ) do
         
     | 
| 
      
 71 
     | 
    
         
            +
            				subclass.new( world )
         
     | 
| 
      
 72 
     | 
    
         
            +
            			end
         
     | 
| 
      
 73 
     | 
    
         
            +
             
     | 
| 
      
 74 
     | 
    
         
            +
             
     | 
| 
      
 75 
     | 
    
         
            +
            			it "can enumerate the entities from the world that match its aspect" do
         
     | 
| 
      
 76 
     | 
    
         
            +
            				ent1 = world.create_entity
         
     | 
| 
      
 77 
     | 
    
         
            +
            				ent1.add_component( volition_component )
         
     | 
| 
      
 78 
     | 
    
         
            +
            				ent1.add_component( tags_component )
         
     | 
| 
      
 79 
     | 
    
         
            +
             
     | 
| 
      
 80 
     | 
    
         
            +
            				ent2 = world.create_entity
         
     | 
| 
      
 81 
     | 
    
         
            +
            				ent2.add_component( volition_component )
         
     | 
| 
      
 82 
     | 
    
         
            +
            				ent2.add_component( location_component )
         
     | 
| 
      
 83 
     | 
    
         
            +
             
     | 
| 
      
 84 
     | 
    
         
            +
            				ent3 = world.create_entity
         
     | 
| 
      
 85 
     | 
    
         
            +
            				ent3.add_component( volition_component )
         
     | 
| 
      
 86 
     | 
    
         
            +
             
     | 
| 
      
 87 
     | 
    
         
            +
            				expect( instance.entities ).to be_a( Enumerator )
         
     | 
| 
      
 88 
     | 
    
         
            +
            				expect( instance.entities ).to contain_exactly( ent1, ent2 )
         
     | 
| 
      
 89 
     | 
    
         
            +
            			end
         
     | 
| 
      
 90 
     | 
    
         
            +
             
     | 
| 
      
 91 
     | 
    
         
            +
             
     | 
| 
      
 92 
     | 
    
         
            +
            		end
         
     | 
| 
      
 93 
     | 
    
         
            +
             
     | 
| 
       60 
94 
     | 
    
         
             
            	end
         
     | 
| 
       61 
95 
     | 
    
         | 
| 
       62 
96 
     | 
    
         
             
            end
         
     | 
    
        data/spec/chione/world_spec.rb
    CHANGED
    
    | 
         @@ -5,7 +5,7 @@ require_relative '../spec_helper' 
     | 
|
| 
       5 
5 
     | 
    
         
             
            require 'chione/world'
         
     | 
| 
       6 
6 
     | 
    
         | 
| 
       7 
7 
     | 
    
         
             
            require 'chione/aspect'
         
     | 
| 
       8 
     | 
    
         
            -
            require 'chione/ 
     | 
| 
      
 8 
     | 
    
         
            +
            require 'chione/archetype'
         
     | 
| 
       9 
9 
     | 
    
         
             
            require 'chione/component'
         
     | 
| 
       10 
10 
     | 
    
         
             
            require 'chione/entity'
         
     | 
| 
       11 
11 
     | 
    
         
             
            require 'chione/manager'
         
     | 
| 
         @@ -82,9 +82,9 @@ describe Chione::World do 
     | 
|
| 
       82 
82 
     | 
    
         
             
            		end
         
     | 
| 
       83 
83 
     | 
    
         
             
            	end
         
     | 
| 
       84 
84 
     | 
    
         | 
| 
       85 
     | 
    
         
            -
            	let( : 
     | 
| 
      
 85 
     | 
    
         
            +
            	let( :archetype ) do
         
     | 
| 
       86 
86 
     | 
    
         
             
            		mod = Module.new
         
     | 
| 
       87 
     | 
    
         
            -
            		mod.extend( Chione:: 
     | 
| 
      
 87 
     | 
    
         
            +
            		mod.extend( Chione::Archetype )
         
     | 
| 
       88 
88 
     | 
    
         
             
            		mod.add( location_component, x: 10, y: 8 )
         
     | 
| 
       89 
89 
     | 
    
         
             
            		mod.add( tags_component, tags: [:foo, :bar] )
         
     | 
| 
       90 
90 
     | 
    
         
             
            		mod
         
     | 
| 
         @@ -255,11 +255,11 @@ describe Chione::World do 
     | 
|
| 
       255 
255 
     | 
    
         
             
            		end
         
     | 
| 
       256 
256 
     | 
    
         | 
| 
       257 
257 
     | 
    
         | 
| 
       258 
     | 
    
         
            -
            		it "can create entities using an  
     | 
| 
       259 
     | 
    
         
            -
            			entity = world.create_entity(  
     | 
| 
      
 258 
     | 
    
         
            +
            		it "can create entities using an Archetype" do
         
     | 
| 
      
 259 
     | 
    
         
            +
            			entity = world.create_entity( archetype )
         
     | 
| 
       260 
260 
     | 
    
         | 
| 
       261 
261 
     | 
    
         
             
            			expect( entity ).to be_a( Chione::Entity )
         
     | 
| 
       262 
     | 
    
         
            -
            			expect( entity.components.keys ).to include( * 
     | 
| 
      
 262 
     | 
    
         
            +
            			expect( entity.components.keys ).to include( *archetype.components.keys )
         
     | 
| 
       263 
263 
     | 
    
         
             
            		end
         
     | 
| 
       264 
264 
     | 
    
         | 
| 
       265 
265 
     | 
    
         | 
    
        data/spec/chione_spec.rb
    CHANGED
    
    | 
         @@ -5,6 +5,35 @@ require_relative 'spec_helper' 
     | 
|
| 
       5 
5 
     | 
    
         
             
            require 'chione'
         
     | 
| 
       6 
6 
     | 
    
         | 
| 
       7 
7 
     | 
    
         
             
            describe Chione do
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
            	after( :all ) do
         
     | 
| 
      
 10 
     | 
    
         
            +
            		Chione::Component.derivatives.clear
         
     | 
| 
      
 11 
     | 
    
         
            +
            	end
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
            	it "can coerce Chione::Component classes into instances" do
         
     | 
| 
      
 15 
     | 
    
         
            +
            		component_class = Class.new( Chione::Component )
         
     | 
| 
      
 16 
     | 
    
         
            +
            		expect( Chione::Component(component_class) ).to be_instance_of( component_class )
         
     | 
| 
      
 17 
     | 
    
         
            +
            	end
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
            	it "can coerce Chione::Component class names into instances" do
         
     | 
| 
      
 21 
     | 
    
         
            +
            		component_class = Class.new( Chione::Component ) do
         
     | 
| 
      
 22 
     | 
    
         
            +
            			def self::name; "Thermidore"; end
         
     | 
| 
      
 23 
     | 
    
         
            +
            		end
         
     | 
| 
      
 24 
     | 
    
         
            +
            		Chione::Component.derivatives[ 'thermidore' ] = component_class
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
            		expect( Chione::Component(:thermidore) ).to be_instance_of( component_class )
         
     | 
| 
      
 27 
     | 
    
         
            +
            	end
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
            	it "returns coerced Chione::Component unchanged" do
         
     | 
| 
      
 31 
     | 
    
         
            +
            		component_class = Class.new( Chione::Component )
         
     | 
| 
      
 32 
     | 
    
         
            +
            		instance = component_class.new
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
            		expect( Chione::Component(instance) ).to equal( instance )
         
     | 
| 
      
 35 
     | 
    
         
            +
            	end
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
       8 
37 
     | 
    
         
             
            end
         
     | 
| 
       9 
38 
     | 
    
         | 
| 
       10 
39 
     | 
    
         
             
            # vim: set nosta noet ts=4 sw=4:
         
     | 
    
        data/spec/spec_helper.rb
    CHANGED
    
    | 
         @@ -4,10 +4,13 @@ 
     | 
|
| 
       4 
4 
     | 
    
         
             
            require 'pathname'
         
     | 
| 
       5 
5 
     | 
    
         
             
            require 'simplecov' if ENV['COVERAGE']
         
     | 
| 
       6 
6 
     | 
    
         
             
            require 'rspec'
         
     | 
| 
      
 7 
     | 
    
         
            +
            require 'deprecatable'
         
     | 
| 
       7 
8 
     | 
    
         
             
            require 'loggability/spechelpers'
         
     | 
| 
       8 
9 
     | 
    
         | 
| 
       9 
10 
     | 
    
         
             
            require 'chione'
         
     | 
| 
       10 
11 
     | 
    
         | 
| 
      
 12 
     | 
    
         
            +
            Deprecatable.options.alert_frequency = :never
         
     | 
| 
      
 13 
     | 
    
         
            +
            Deprecatable.options.has_at_exit_report = false
         
     | 
| 
       11 
14 
     | 
    
         | 
| 
       12 
15 
     | 
    
         
             
            module Chione::TestHelpers
         
     | 
| 
       13 
16 
     | 
    
         
             
            end
         
     | 
    
        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. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.3.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-05- 
     | 
| 
      
 38 
     | 
    
         
            +
            date: 2017-05-31 00:00:00.000000000 Z
         
     | 
| 
       39 
39 
     | 
    
         
             
            dependencies:
         
     | 
| 
       40 
40 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       41 
41 
     | 
    
         
             
              name: loggability
         
     | 
| 
         @@ -93,6 +93,20 @@ dependencies: 
     | 
|
| 
       93 
93 
     | 
    
         
             
                - - "~>"
         
     | 
| 
       94 
94 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       95 
95 
     | 
    
         
             
                    version: '2.3'
         
     | 
| 
      
 96 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency
         
     | 
| 
      
 97 
     | 
    
         
            +
              name: deprecatable
         
     | 
| 
      
 98 
     | 
    
         
            +
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
      
 99 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 100 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
      
 101 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 102 
     | 
    
         
            +
                    version: '1.0'
         
     | 
| 
      
 103 
     | 
    
         
            +
              type: :runtime
         
     | 
| 
      
 104 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 105 
     | 
    
         
            +
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
      
 106 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 107 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
      
 108 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 109 
     | 
    
         
            +
                    version: '1.0'
         
     | 
| 
       96 
110 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       97 
111 
     | 
    
         
             
              name: hoe-mercurial
         
     | 
| 
       98 
112 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
         @@ -218,6 +232,7 @@ files: 
     | 
|
| 
       218 
232 
     | 
    
         
             
            - README.md
         
     | 
| 
       219 
233 
     | 
    
         
             
            - Rakefile
         
     | 
| 
       220 
234 
     | 
    
         
             
            - lib/chione.rb
         
     | 
| 
      
 235 
     | 
    
         
            +
            - lib/chione/archetype.rb
         
     | 
| 
       221 
236 
     | 
    
         
             
            - lib/chione/aspect.rb
         
     | 
| 
       222 
237 
     | 
    
         
             
            - lib/chione/assemblage.rb
         
     | 
| 
       223 
238 
     | 
    
         
             
            - lib/chione/behaviors.rb
         
     | 
| 
         @@ -227,8 +242,8 @@ files: 
     | 
|
| 
       227 
242 
     | 
    
         
             
            - lib/chione/mixins.rb
         
     | 
| 
       228 
243 
     | 
    
         
             
            - lib/chione/system.rb
         
     | 
| 
       229 
244 
     | 
    
         
             
            - lib/chione/world.rb
         
     | 
| 
      
 245 
     | 
    
         
            +
            - spec/chione/archetype_spec.rb
         
     | 
| 
       230 
246 
     | 
    
         
             
            - spec/chione/aspect_spec.rb
         
     | 
| 
       231 
     | 
    
         
            -
            - spec/chione/assemblage_spec.rb
         
     | 
| 
       232 
247 
     | 
    
         
             
            - spec/chione/component_spec.rb
         
     | 
| 
       233 
248 
     | 
    
         
             
            - spec/chione/entity_spec.rb
         
     | 
| 
       234 
249 
     | 
    
         
             
            - spec/chione/manager_spec.rb
         
     | 
| 
         @@ -259,7 +274,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement 
     | 
|
| 
       259 
274 
     | 
    
         
             
                  version: '0'
         
     | 
| 
       260 
275 
     | 
    
         
             
            requirements: []
         
     | 
| 
       261 
276 
     | 
    
         
             
            rubyforge_project: 
         
     | 
| 
       262 
     | 
    
         
            -
            rubygems_version: 2.6. 
     | 
| 
      
 277 
     | 
    
         
            +
            rubygems_version: 2.6.11
         
     | 
| 
       263 
278 
     | 
    
         
             
            signing_key: 
         
     | 
| 
       264 
279 
     | 
    
         
             
            specification_version: 4
         
     | 
| 
       265 
280 
     | 
    
         
             
            summary: An Entity/Component System framework inspired by Artemis
         
     | 
    
        metadata.gz.sig
    CHANGED
    
    | 
         Binary file 
     | 
| 
         @@ -1,60 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            #!/usr/bin/env rspec -cfd
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
            require_relative '../spec_helper'
         
     | 
| 
       4 
     | 
    
         
            -
             
     | 
| 
       5 
     | 
    
         
            -
            require 'chione/assemblage'
         
     | 
| 
       6 
     | 
    
         
            -
            require 'chione/component'
         
     | 
| 
       7 
     | 
    
         
            -
            require 'chione/entity'
         
     | 
| 
       8 
     | 
    
         
            -
            require 'chione/world'
         
     | 
| 
       9 
     | 
    
         
            -
             
     | 
| 
       10 
     | 
    
         
            -
            describe Chione::Assemblage do
         
     | 
| 
       11 
     | 
    
         
            -
             
     | 
| 
       12 
     | 
    
         
            -
            	let( :world ) { Chione::World.new }
         
     | 
| 
       13 
     | 
    
         
            -
             
     | 
| 
       14 
     | 
    
         
            -
            	let( :location_component ) do
         
     | 
| 
       15 
     | 
    
         
            -
            		Class.new( Chione::Component ) do
         
     | 
| 
       16 
     | 
    
         
            -
            			field :x, default: 0
         
     | 
| 
       17 
     | 
    
         
            -
            			field :y, default: 0
         
     | 
| 
       18 
     | 
    
         
            -
            		end
         
     | 
| 
       19 
     | 
    
         
            -
            	end
         
     | 
| 
       20 
     | 
    
         
            -
             
     | 
| 
       21 
     | 
    
         
            -
            	let( :tags_component ) do
         
     | 
| 
       22 
     | 
    
         
            -
            		Class.new( Chione::Component ) do
         
     | 
| 
       23 
     | 
    
         
            -
            			field :tags, default: []
         
     | 
| 
       24 
     | 
    
         
            -
            		end
         
     | 
| 
       25 
     | 
    
         
            -
            	end
         
     | 
| 
       26 
     | 
    
         
            -
             
     | 
| 
       27 
     | 
    
         
            -
             
     | 
| 
       28 
     | 
    
         
            -
            	it "acts as a factory for entities with pre-set components" do
         
     | 
| 
       29 
     | 
    
         
            -
            		assemblage = Module.new
         
     | 
| 
       30 
     | 
    
         
            -
            		assemblage.extend( described_class )
         
     | 
| 
       31 
     | 
    
         
            -
            		assemblage.add( location_component, x: 10, y: 8 )
         
     | 
| 
       32 
     | 
    
         
            -
            		assemblage.add( tags_component, tags: [:foo, :bar] )
         
     | 
| 
       33 
     | 
    
         
            -
             
     | 
| 
       34 
     | 
    
         
            -
            		entity = assemblage.construct_for( world )
         
     | 
| 
       35 
     | 
    
         
            -
             
     | 
| 
       36 
     | 
    
         
            -
            		expect( entity ).to be_a( Chione::Entity )
         
     | 
| 
       37 
     | 
    
         
            -
            		expect( entity.world ).to be( world )
         
     | 
| 
       38 
     | 
    
         
            -
            		expect( entity.components ).to include( location_component, tags_component )
         
     | 
| 
       39 
     | 
    
         
            -
            	end
         
     | 
| 
       40 
     | 
    
         
            -
             
     | 
| 
       41 
     | 
    
         
            -
             
     | 
| 
       42 
     | 
    
         
            -
            	it "can include other assemblages" do
         
     | 
| 
       43 
     | 
    
         
            -
            		general_assemblage = Module.new
         
     | 
| 
       44 
     | 
    
         
            -
            		general_assemblage.extend( described_class )
         
     | 
| 
       45 
     | 
    
         
            -
            		general_assemblage.add( location_component, x: 10, y: 8 )
         
     | 
| 
       46 
     | 
    
         
            -
             
     | 
| 
       47 
     | 
    
         
            -
            		specific_assemblage = Module.new
         
     | 
| 
       48 
     | 
    
         
            -
            		specific_assemblage.extend( described_class )
         
     | 
| 
       49 
     | 
    
         
            -
            		specific_assemblage.send( :include, general_assemblage )
         
     | 
| 
       50 
     | 
    
         
            -
            		specific_assemblage.add( tags_component, tags: [:foo, :bar] )
         
     | 
| 
       51 
     | 
    
         
            -
             
     | 
| 
       52 
     | 
    
         
            -
            		entity = specific_assemblage.construct_for( world )
         
     | 
| 
       53 
     | 
    
         
            -
             
     | 
| 
       54 
     | 
    
         
            -
            		expect( entity ).to be_a( Chione::Entity )
         
     | 
| 
       55 
     | 
    
         
            -
            		expect( entity.world ).to be( world )
         
     | 
| 
       56 
     | 
    
         
            -
            		expect( entity.components ).to include( location_component, tags_component )
         
     | 
| 
       57 
     | 
    
         
            -
            	end
         
     | 
| 
       58 
     | 
    
         
            -
             
     | 
| 
       59 
     | 
    
         
            -
            end
         
     | 
| 
       60 
     | 
    
         
            -
             
     |