Changeset 28021 for lang/ruby/starframe
- Timestamp:
- 01/06/09 21:24:25 (4 years ago)
- Location:
- lang/ruby/starframe
- Files:
-
- 2 removed
- 5 modified
-
lib/starframe/eventable.rb (deleted)
-
lib/starframe/renderable.rb (modified) (4 diffs)
-
lib/starframe/sprite/collection.rb (modified) (1 diff)
-
lib/starframe/updatable.rb (modified) (3 diffs)
-
test/starframe/test_eventable.rb (deleted)
-
test/starframe/test_renderable.rb (modified) (5 diffs)
-
test/starframe/test_updatable.rb (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
lang/ruby/starframe/lib/starframe/renderable.rb
r27966 r28021 1 1 # = StarFrame::Updatable -- 描画モジュール 2 3 2 require "forwardable" 4 require "starframe/eventable"5 3 6 4 module StarFrame #:nodoc: … … 27 25 module Renderable 28 26 extend Forwardable 29 extend Eventable 27 28 #:stopdoc: 29 def self.included klass 30 klass.extend ClassMethods 31 end 32 #:startdoc: 30 33 31 34 attr_accessor :screen 35 32 36 def_delegators :@screen, 33 37 :fill, :fill_rect, … … 35 39 :render_in_perspective, :transform_in_perspective 36 40 37 ##38 # :method:39 41 # 描画する。 40 define_event :render 42 # 43 # このメソッドは、サブクラスで再定義しないでください。 44 def render 45 renderable_methods = self.class._renderable_methods 46 renderable_methods[:before].each{|method| __send__ method } 47 rendered 48 ensure 49 renderable_methods[:after].each{|method| __send__ method } 50 end 51 52 def rendered #:nodoc: 53 end 41 54 42 55 module ClassMethods 43 ## 44 # :method: reader 45 # 描画イベント及び描画イベントフックを定義する 56 @@method_count = 0 57 58 #:stopdoc: 59 attr_reader :_renderable_methods 60 61 private 62 def self.extended klass 63 klass.instance_variable_set :@_renderable_methods, {:before => [], :after => []} 64 end 65 66 def inherited klass 67 renderable_methods = @_renderable_methods.dup 68 renderable_methods[:before] = renderable_methods[:before].dup 69 renderable_methods[:after] = renderable_methods[:after].dup 70 klass.instance_variable_set :@_renderable_methods, renderable_methods 71 super 72 end 73 #:startdoc: 74 75 # 描画イベントを定義する 46 76 # 47 77 # :call-seq: … … 62 92 # # イベント後フック定義 63 93 # end 64 private 94 def render hook_type = nil, method_name = nil, &block 95 if hook_type 96 if method_name 97 raise ArgumentError if block 98 else 99 raise ArgumentError unless block 100 method_name = :"_renderable_method_#{@@method_count}" 101 @@method_count += 1 102 end 103 104 case hook_type 105 when :before 106 @_renderable_methods[hook_type].unshift method_name 107 when :after 108 @_renderable_methods[hook_type].push method_name 109 else 110 raise TypeError 111 end 112 else 113 raise ArgumentError if method_name 114 raise ArgumentError unless block 115 method_name = :rendered 116 end 117 define_method method_name, &block if block 118 end 65 119 66 ##67 # :method: register_render_hook68 # 描画イベントフックを定義する。69 #70 # :call-seq:71 # register_render_hook(hook_type, method_name)72 #73 120 public 74 75 ## 121 # 描画イベントフックを定義する 122 def register_render_hook hook_type, method_name 123 render hook_type, method_name 124 end 76 125 end 77 126 end -
lang/ruby/starframe/lib/starframe/sprite/collection.rb
r27950 r28021 1 require "starframe/eventable"2 1 require "starframe/updatable" 3 2 -
lang/ruby/starframe/lib/starframe/updatable.rb
r27966 r28021 1 1 # = StarFrame::Updatable -- 更新モジュール 2 3 require "starframe/eventable"4 2 5 3 module StarFrame #:nodoc: … … 25 23 # end 26 24 module Updatable 27 extend Eventable 25 #:stopdoc: 26 def self.included klass 27 klass.extend ClassMethods 28 end 29 #:startdoc: 28 30 29 ##30 # :method: update31 31 # 更新する。 32 define_event :update 32 # 33 # このメソッドは、サブクラスで再定義しないでください。 34 def update 35 updatable_methods = self.class._updatable_methods 36 updatable_methods[:before].each{|method| __send__ method } 37 updated 38 ensure 39 updatable_methods[:after].each{|method| __send__ method } 40 end 33 41 alias call update 34 42 43 def updated #:nodoc: 44 end 45 35 46 module ClassMethods 36 ## 37 # :method: update 47 @@method_count = 0 48 49 #:stopdoc: 50 attr_reader :_updatable_methods 51 52 private 53 def self.extended klass 54 klass.instance_variable_set :@_updatable_methods, {:before => [], :after => []} 55 end 56 57 def inherited klass 58 updatable_methods = @_updatable_methods.dup 59 updatable_methods[:before] = updatable_methods[:before].dup 60 updatable_methods[:after] = updatable_methods[:after].dup 61 klass.instance_variable_set :@_updatable_methods, updatable_methods 62 super 63 end 64 #:startdoc: 65 38 66 # 更新イベント及び更新イベントフックを定義する 39 67 # … … 55 83 # # イベント後フック定義 56 84 # end 57 private 85 def update hook_type = nil, method_name = nil, &block 86 if hook_type 87 if method_name 88 raise ArgumentError if block 89 else 90 raise ArgumentError unless block 91 method_name = :"_updatable_method_#{@@method_count}" 92 @@method_count += 1 93 end 94 95 case hook_type 96 when :before 97 @_updatable_methods[hook_type].unshift method_name 98 when :after 99 @_updatable_methods[hook_type].push method_name 100 else 101 raise TypeError 102 end 103 else 104 raise ArgumentError if method_name 105 raise ArgumentError unless block 106 method_name = :updated 107 end 108 define_method method_name, &block if block 109 end 58 110 59 ##60 # :method: register_update_hook61 # 更新イベントフックを定義する。62 #63 # :call-seq:64 # register_update_hook(hook_type, method_name)65 #66 111 public 67 68 ## 112 # 更新イベントフックを定義する 113 def register_update_hook hook_type, method_name 114 update hook_type, method_name 115 end 69 116 end 70 117 end -
lang/ruby/starframe/test/starframe/test_renderable.rb
r27966 r28021 91 91 92 92 def test_renderable_object_should_have_renderable_methods 93 actual = RenderableObject.instance_variable_get(:@_render _hook_methods)93 actual = RenderableObject.instance_variable_get(:@_renderable_methods) 94 94 expected = {:before => [], :after => []} 95 95 assert_equal expected, actual … … 108 108 109 109 def test_rendered_event_should_return_block 110 assert_equal :rendered, RenderableObject.new. _render_main110 assert_equal :rendered, RenderableObject.new.rendered 111 111 end 112 112 def test_render_should_send_rendered_event … … 160 160 161 161 def test_rendered_hook_should_register_renderable_methods 162 actual = HookedRenderableObject.instance_variable_get(:@_render _hook_methods)162 actual = HookedRenderableObject.instance_variable_get(:@_renderable_methods) 163 163 assert_equal 2, actual[:before].size 164 164 assert_equal 2, actual[:after].size … … 166 166 def test_rendered_hook_should_define_methods 167 167 hooked_object = HookedRenderableObject.new 168 actual = HookedRenderableObject.instance_variable_get(:@_render _hook_methods)168 actual = HookedRenderableObject.instance_variable_get(:@_renderable_methods) 169 169 assert_equal true, actual[:before].all?{ |method_name| hooked_object.respond_to? method_name } 170 170 assert_equal true, actual[:after].all?{ |method_name| hooked_object.respond_to? method_name } … … 172 172 173 173 def test_rendered_before_hook_should_return_block 174 actual = HookedRenderableObject.instance_variable_get(:@_render _hook_methods)174 actual = HookedRenderableObject.instance_variable_get(:@_renderable_methods) 175 175 assert_equal :before, HookedRenderableObject.new.__send__(actual[:before][-1]) 176 176 end 177 177 def test_rendered_after_hook_should_return_block 178 actual = HookedRenderableObject.instance_variable_get(:@_render _hook_methods)178 actual = HookedRenderableObject.instance_variable_get(:@_renderable_methods) 179 179 assert_equal :after, HookedRenderableObject.new.__send__(actual[:after][0]) 180 180 end 181 181 182 182 def test_rendered_before_hook_with_method_name_should_return_method 183 actual = HookedRenderableObject.instance_variable_get(:@_render _hook_methods)183 actual = HookedRenderableObject.instance_variable_get(:@_renderable_methods) 184 184 assert_equal :before2, HookedRenderableObject.new.__send__(actual[:before][-2]) 185 185 end 186 186 def test_rendered_after_hook_with_method_name_should_return_method 187 actual = HookedRenderableObject.instance_variable_get(:@_render _hook_methods)187 actual = HookedRenderableObject.instance_variable_get(:@_renderable_methods) 188 188 assert_equal :after2, HookedRenderableObject.new.__send__(actual[:after][1]) 189 189 end -
lang/ruby/starframe/test/starframe/test_updatable.rb
r27966 r28021 60 60 61 61 def test_updatable_object_should_have_updatable_methods 62 actual = UpdatableObject.instance_variable_get(:@_updat e_hook_methods)62 actual = UpdatableObject.instance_variable_get(:@_updatable_methods) 63 63 expected = {:before => [], :after => []} 64 64 assert_equal expected, actual … … 80 80 81 81 def test_updated_event_should_return_block 82 assert_equal :updated, UpdatableObject.new. _update_main82 assert_equal :updated, UpdatableObject.new.updated 83 83 end 84 84 def test_update_should_send_updated_event … … 135 135 136 136 def test_updated_hook_should_register_updatable_methods 137 actual = HookedUpdatableObject.instance_variable_get(:@_updat e_hook_methods)137 actual = HookedUpdatableObject.instance_variable_get(:@_updatable_methods) 138 138 assert_equal 2, actual[:before].size 139 139 assert_equal 2, actual[:after].size … … 141 141 def test_updated_hook_should_define_methods 142 142 hooked_object = HookedUpdatableObject.new 143 actual = HookedUpdatableObject.instance_variable_get(:@_updat e_hook_methods)143 actual = HookedUpdatableObject.instance_variable_get(:@_updatable_methods) 144 144 assert_equal true, actual[:before].all?{ |method_name| hooked_object.respond_to? method_name } 145 145 assert_equal true, actual[:after].all?{ |method_name| hooked_object.respond_to? method_name } … … 147 147 148 148 def test_updated_before_hook_should_return_block 149 actual = HookedUpdatableObject.instance_variable_get(:@_updat e_hook_methods)149 actual = HookedUpdatableObject.instance_variable_get(:@_updatable_methods) 150 150 assert_equal :before, HookedUpdatableObject.new.__send__(actual[:before][-1]) 151 151 end 152 152 def test_updated_after_hook_should_return_block 153 actual = HookedUpdatableObject.instance_variable_get(:@_updat e_hook_methods)153 actual = HookedUpdatableObject.instance_variable_get(:@_updatable_methods) 154 154 assert_equal :after, HookedUpdatableObject.new.__send__(actual[:after][0]) 155 155 end 156 156 157 157 def test_updated_before_hook_with_method_name_should_return_method 158 actual = HookedUpdatableObject.instance_variable_get(:@_updat e_hook_methods)158 actual = HookedUpdatableObject.instance_variable_get(:@_updatable_methods) 159 159 assert_equal :before2, HookedUpdatableObject.new.__send__(actual[:before][-2]) 160 160 end 161 161 def test_updated_after_hook_with_method_name_should_return_method 162 actual = HookedUpdatableObject.instance_variable_get(:@_updat e_hook_methods)162 actual = HookedUpdatableObject.instance_variable_get(:@_updatable_methods) 163 163 assert_equal :after2, HookedUpdatableObject.new.__send__(actual[:after][1]) 164 164 end
![(please configure the [header_logo] section in trac.ini)](/share/chrome/site/your_project_logo.png)