metro 0.1.4 → 0.1.5

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.
Files changed (42) hide show
  1. data/changelog.md +9 -0
  2. data/lib/commands/generate_model.rb +2 -2
  3. data/lib/commands/generate_scene.rb +2 -2
  4. data/lib/commands/generate_view.rb +1 -1
  5. data/lib/gosu_ext/color.rb +16 -2
  6. data/lib/metro.rb +50 -10
  7. data/lib/metro/events/event_data.rb +61 -0
  8. data/lib/metro/events/event_relay.rb +10 -3
  9. data/lib/metro/events/hit_list.rb +77 -0
  10. data/lib/metro/models/draws.rb +6 -1
  11. data/lib/metro/models/grid_drawer.rb +57 -0
  12. data/lib/metro/models/image.rb +18 -2
  13. data/lib/metro/models/label.rb +22 -6
  14. data/lib/metro/models/menu.rb +20 -0
  15. data/lib/metro/models/model.rb +47 -6
  16. data/lib/metro/models/model_factory.rb +2 -2
  17. data/lib/metro/models/rectangle_bounds.rb +28 -0
  18. data/lib/metro/scene.rb +46 -11
  19. data/lib/metro/scenes.rb +10 -9
  20. data/lib/metro/transitions/edit_transition_scene.rb +73 -0
  21. data/lib/metro/transitions/scene_transitions.rb +8 -2
  22. data/lib/metro/transitions/transition_scene.rb +2 -1
  23. data/lib/metro/version.rb +1 -1
  24. data/lib/metro/views/json_view.rb +60 -0
  25. data/lib/metro/{scene_view → views}/no_view.rb +12 -4
  26. data/lib/metro/views/parsers.rb +26 -0
  27. data/lib/metro/views/scene_view.rb +107 -0
  28. data/lib/metro/views/view.rb +125 -0
  29. data/lib/metro/views/writers.rb +28 -0
  30. data/lib/metro/views/yaml_view.rb +94 -0
  31. data/lib/metro/window.rb +19 -0
  32. data/metro.gemspec +1 -0
  33. data/spec/core_ext/string_spec.rb +13 -13
  34. data/spec/metro/scene_spec.rb +15 -0
  35. data/spec/metro/scene_views/json_view_spec.rb +27 -0
  36. data/spec/metro/scene_views/yaml_view_spec.rb +1 -1
  37. data/spec/metro/views/view_spec.rb +53 -0
  38. metadata +41 -11
  39. data/lib/core_ext/string.rb +0 -15
  40. data/lib/metro/scene_view/json_view.rb +0 -41
  41. data/lib/metro/scene_view/scene_view.rb +0 -83
  42. data/lib/metro/scene_view/yaml_view.rb +0 -45
data/lib/metro/window.rb CHANGED
@@ -60,5 +60,24 @@ module Metro
60
60
  scene.button_down(id)
61
61
  end
62
62
 
63
+ #
64
+ # Define an acessor that enables/disables the use of a cursor
65
+ # within the window. The value should be truthy/falsy.
66
+ #
67
+ attr_accessor :cursor
68
+
69
+ #
70
+ # Gosu uses this method to determine if the cursor should be shown.
71
+ #
72
+ alias_method :needs_cursor?, :cursor
73
+
74
+ def show_cursor
75
+ self.cursor = true
76
+ end
77
+
78
+ def hide_cursor
79
+ self.cursor = false
80
+ end
81
+
63
82
  end
64
83
  end
data/metro.gemspec CHANGED
@@ -27,6 +27,7 @@ Gem::Specification.new do |gem|
27
27
  gem.add_dependency 'gosu', '~> 0.7'
28
28
  gem.add_dependency 'thor', '~> 0.16.0'
29
29
  gem.add_dependency 'i18n', '~> 0.6.1'
30
+ gem.add_dependency 'active_support', '~> 3.0.0'
30
31
  gem.add_development_dependency 'rspec', '~> 2.11'
31
32
 
32
33
  gem.files = `git ls-files`.split($/)
@@ -2,52 +2,52 @@ require 'spec_helper'
2
2
 
3
3
  describe String do
4
4
 
5
- describe "#snake_case" do
5
+ describe "#underscore" do
6
6
  context "when given a regular string" do
7
7
  subject { "String" }
8
8
  let(:expected_value) { "string" }
9
9
 
10
- its(:snake_case) { should eq expected_value }
10
+ its(:underscore) { should eq expected_value }
11
11
  end
12
12
 
13
13
  context "when given an already snake cased string" do
14
- subject { "snake_cased" }
15
- let(:expected_value) { "snake_cased" }
14
+ subject { "underscored" }
15
+ let(:expected_value) { "underscored" }
16
16
 
17
- its(:snake_case) { should eq expected_value }
17
+ its(:underscore) { should eq expected_value }
18
18
  end
19
19
 
20
20
  context "when given a camelCased string" do
21
21
  subject { "SnakeCased" }
22
22
  let(:expected_value) { "snake_cased" }
23
23
 
24
- its(:snake_case) { should eq expected_value }
24
+ its(:underscore) { should eq expected_value }
25
25
  end
26
26
 
27
27
  context "when given a partial camel_Cased string" do
28
28
  subject { "snake_Cased" }
29
29
  let(:expected_value) { "snake_cased" }
30
- its(:snake_case) { should eq expected_value }
30
+ its(:underscore) { should eq expected_value }
31
31
  end
32
32
  end
33
33
 
34
- describe "#camel_case" do
34
+ describe "#classify" do
35
35
  context "when given a regular string" do
36
36
  subject { "string" }
37
37
  let(:expected_value) { "String" }
38
- its(:camel_case) { should eq expected_value }
38
+ its(:classify) { should eq expected_value }
39
39
  end
40
40
 
41
- context "when given a snake_cased string" do
41
+ context "when given a underscored string" do
42
42
  subject { "camel_cased" }
43
43
  let(:expected_value) { "CamelCased" }
44
- its(:camel_case) { should eq expected_value }
44
+ its(:classify) { should eq expected_value }
45
45
  end
46
46
 
47
47
  context "when given a partial camel_CasedString" do
48
48
  subject { "camel_CasedString" }
49
- let(:expected_value) { "CamelCasedstring" }
50
- its(:camel_case) { should eq expected_value }
49
+ let(:expected_value) { "CamelCasedString" }
50
+ its(:classify) { should eq expected_value }
51
51
  end
52
52
  end
53
53
  end
@@ -0,0 +1,15 @@
1
+ require 'spec_helper'
2
+
3
+ describe Metro::Scene do
4
+
5
+ class SpecScene < Metro::Scene ; end
6
+
7
+ subject { SpecScene.new }
8
+
9
+ let(:expected_view_name) { "spec" }
10
+ its(:view_name) { should eq expected_view_name }
11
+
12
+ let(:expected_scene_name) { "spec" }
13
+ its(:scene_name) { should eq expected_scene_name }
14
+
15
+ end
@@ -0,0 +1,27 @@
1
+ require 'spec_helper'
2
+
3
+ describe Metro::Views::JSONView do
4
+
5
+ subject { described_class }
6
+ let(:view_name) { "example" }
7
+
8
+ before do
9
+ File.stub(:exists?).and_return(false)
10
+ end
11
+
12
+ describe ".exists?" do
13
+ context "when a view file exists with the extension JSON" do
14
+ before do
15
+ File.stub(:exists?).with(filepath_that_exists).and_return(true)
16
+ end
17
+
18
+ let(:filepath_that_exists) { "#{view_name}.json" }
19
+
20
+ it "should return true" do
21
+ subject.exists?(view_name).should be_true
22
+ end
23
+
24
+ end
25
+ end
26
+
27
+ end
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Metro::SceneView::YAMLView do
3
+ describe Metro::Views::YAMLView do
4
4
 
5
5
  subject { described_class }
6
6
  let(:view_name) { "example" }
@@ -0,0 +1,53 @@
1
+ require 'spec_helper'
2
+
3
+ describe Metro::View do
4
+ before do
5
+ subject.name = "spec"
6
+ end
7
+
8
+ let(:expected_view_path) { "views/spec" }
9
+ its(:view_path) { should eq expected_view_path }
10
+
11
+ describe "#parser" do
12
+ before do
13
+ subject.stub(:supported_parsers) { [ mock(exists?: false), expected_parser ] }
14
+ end
15
+
16
+ let(:expected_parser) { mock(exists?: true) }
17
+
18
+ it "should return the first parser which has a existing view" do
19
+ subject.parser.should eq expected_parser
20
+ end
21
+ end
22
+
23
+ describe "#writer" do
24
+
25
+ context "when the parser has a format that matches a writer" do
26
+ before do
27
+ subject.stub(:parser) { mock(format: :json) }
28
+ subject.stub(:supported_writers) { [ mock(format: :yaml), expected_writer ] }
29
+ end
30
+
31
+ let(:expected_writer) { mock(format: :json) }
32
+
33
+ it "should match the parser format" do
34
+ subject.writer.format.should eq :json
35
+ end
36
+ end
37
+
38
+ context "when the format has been specified" do
39
+ before do
40
+ subject.stub(:parser) { mock(format: :json) }
41
+ subject.stub(:supported_writers) { [ expected_writer, mock(format: :json) ] }
42
+ end
43
+
44
+ let(:expected_writer) { mock(format: :yaml) }
45
+
46
+ it "should match the format (ignoring the parser format)" do
47
+ subject.format = :yaml
48
+ subject.writer.format.should eq :yaml
49
+ end
50
+ end
51
+ end
52
+
53
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: metro
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.1.5
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-10-29 00:00:00.000000000 Z
12
+ date: 2012-11-02 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: gosu
@@ -59,6 +59,22 @@ dependencies:
59
59
  - - ~>
60
60
  - !ruby/object:Gem::Version
61
61
  version: 0.6.1
62
+ - !ruby/object:Gem::Dependency
63
+ name: active_support
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ~>
68
+ - !ruby/object:Gem::Version
69
+ version: 3.0.0
70
+ type: :runtime
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ~>
76
+ - !ruby/object:Gem::Version
77
+ version: 3.0.0
62
78
  - !ruby/object:Gem::Dependency
63
79
  name: rspec
64
80
  requirement: !ruby/object:Gem::Requirement
@@ -100,7 +116,6 @@ files:
100
116
  - lib/commands/generate_view.rb
101
117
  - lib/commands/thor.rb
102
118
  - lib/core_ext/numeric.rb
103
- - lib/core_ext/string.rb
104
119
  - lib/gosu_ext/color.rb
105
120
  - lib/gosu_ext/gosu_constants.rb
106
121
  - lib/locale/en.yml
@@ -116,9 +131,11 @@ files:
116
131
  - lib/metro/asset_path.rb
117
132
  - lib/metro/events/control_definition.rb
118
133
  - lib/metro/events/controls.rb
134
+ - lib/metro/events/event_data.rb
119
135
  - lib/metro/events/event_factory.rb
120
136
  - lib/metro/events/event_relay.rb
121
137
  - lib/metro/events/has_events.rb
138
+ - lib/metro/events/hit_list.rb
122
139
  - lib/metro/events/unknown_sender.rb
123
140
  - lib/metro/game.rb
124
141
  - lib/metro/game/dsl.rb
@@ -126,6 +143,7 @@ files:
126
143
  - lib/metro/missing_scene.rb
127
144
  - lib/metro/models/draws.rb
128
145
  - lib/metro/models/generic.rb
146
+ - lib/metro/models/grid_drawer.rb
129
147
  - lib/metro/models/image.rb
130
148
  - lib/metro/models/key_value_coding.rb
131
149
  - lib/metro/models/label.rb
@@ -133,17 +151,22 @@ files:
133
151
  - lib/metro/models/model.rb
134
152
  - lib/metro/models/model_factory.rb
135
153
  - lib/metro/models/rectangle.rb
154
+ - lib/metro/models/rectangle_bounds.rb
136
155
  - lib/metro/scene.rb
137
- - lib/metro/scene_view/json_view.rb
138
- - lib/metro/scene_view/no_view.rb
139
- - lib/metro/scene_view/scene_view.rb
140
- - lib/metro/scene_view/yaml_view.rb
141
156
  - lib/metro/scenes.rb
142
157
  - lib/metro/template_message.rb
158
+ - lib/metro/transitions/edit_transition_scene.rb
143
159
  - lib/metro/transitions/fade_transition_scene.rb
144
160
  - lib/metro/transitions/scene_transitions.rb
145
161
  - lib/metro/transitions/transition_scene.rb
146
162
  - lib/metro/version.rb
163
+ - lib/metro/views/json_view.rb
164
+ - lib/metro/views/no_view.rb
165
+ - lib/metro/views/parsers.rb
166
+ - lib/metro/views/scene_view.rb
167
+ - lib/metro/views/view.rb
168
+ - lib/metro/views/writers.rb
169
+ - lib/metro/views/yaml_view.rb
147
170
  - lib/metro/window.rb
148
171
  - lib/templates/game/README.md.tt
149
172
  - lib/templates/game/assets/brand.jpg
@@ -163,16 +186,21 @@ files:
163
186
  - spec/core_ext/string_spec.rb
164
187
  - spec/gosu_ext/color_spec.rb
165
188
  - spec/metro/models/key_value_coding_spec.rb
189
+ - spec/metro/scene_spec.rb
190
+ - spec/metro/scene_views/json_view_spec.rb
166
191
  - spec/metro/scene_views/yaml_view_spec.rb
192
+ - spec/metro/views/view_spec.rb
167
193
  - spec/spec_helper.rb
168
194
  homepage: https://github.com/burtlo/metro
169
195
  licenses: []
170
196
  post_install_message: ! " ______ ___ _____\n ___ |/ /_____ __ /_______________\n
171
197
  \ __ /|_/ / _ _ \\_ __/__ ___/_ __ \\\n _ / / / / __// /_ _ / /
172
198
  /_/ /\n /_/ /_/ \\___/ \\__/ /_/ \\____/\n\n Thank you for installing
173
- metro 0.1.4 / 2012-10-28.\n ---------------------------------------------------------------------\n
174
- \ Changes:\n \n * Removed dependency on the sender gem so metro is playable
175
- on Windows\n \n\n ---------------------------------------------------------------------\n"
199
+ metro 0.1.5 / 2012-11-01.\n ---------------------------------------------------------------------\n
200
+ \ Changes:\n \n * Metro.reload! will reload all game classes\n * Scenes can
201
+ now an editable state where the position of items can be\n updated and saved.\n
202
+ \ * Event blocks can optionally receive an event object. The event object\n includes
203
+ modifier key information.\n \n \n\n ---------------------------------------------------------------------\n"
176
204
  rdoc_options: []
177
205
  require_paths:
178
206
  - lib
@@ -201,6 +229,8 @@ test_files:
201
229
  - spec/core_ext/string_spec.rb
202
230
  - spec/gosu_ext/color_spec.rb
203
231
  - spec/metro/models/key_value_coding_spec.rb
232
+ - spec/metro/scene_spec.rb
233
+ - spec/metro/scene_views/json_view_spec.rb
204
234
  - spec/metro/scene_views/yaml_view_spec.rb
235
+ - spec/metro/views/view_spec.rb
205
236
  - spec/spec_helper.rb
206
- has_rdoc:
@@ -1,15 +0,0 @@
1
- class String
2
-
3
- def snake_case
4
- snaked_string = self.gsub(/([A-Z\d]+)([A-Z][a-z])/,'\1_\2')
5
- snaked_string.gsub!(/([a-z\d])([A-Z])/,'\1_\2')
6
- snaked_string.downcase
7
- end
8
-
9
- def camel_case
10
- camel_string = self.to_s.gsub(/Scene$/i,'')
11
- camel_string = camel_string.sub(/^[a-z\d]*/) { $&.capitalize }
12
- camel_string = camel_string.gsub(/(?:_|(\/))([a-z\d]*)/i) { "#{$1}#{$2.capitalize}" }.gsub('/', '::')
13
- end
14
-
15
- end
@@ -1,41 +0,0 @@
1
- require 'json'
2
-
3
- module Metro
4
- module SceneView
5
-
6
- #
7
- # Provides support for a JSON Representation of a view.
8
- #
9
- class JSONView
10
-
11
- #
12
- # Determine if a view exists for this specified format
13
- #
14
- # @param [String] view_name the name of the view to find
15
- # @return a true if the json view exists and false if it does not exist.
16
- #
17
- def self.exists?(view_name)
18
- File.exists? json_view_name(view_name)
19
- end
20
-
21
- #
22
- # Parse the contents of the view given the name.
23
- #
24
- # @param [String] view_name the name of the view to read
25
- # @return a Hash that contains the contents of the view.
26
- #
27
- def self.parse(view_name)
28
- JSON.parse File.read json_view_name(view_name)
29
- end
30
-
31
- #
32
- # A helper method to generate the name of the json view file. In this case
33
- # it is the view name with the suffix .json.
34
- #
35
- def self.json_view_name(view_name)
36
- File.extname(view_name) == "" ? "#{view_name}.json" : view_name
37
- end
38
- end
39
-
40
- end
41
- end
@@ -1,83 +0,0 @@
1
- require_relative 'yaml_view'
2
- require_relative 'json_view'
3
- require_relative 'no_view'
4
-
5
- module Metro
6
-
7
- #
8
- # SceneView provides support for a Scene to have a view as well as giving
9
- # additional tools to also help draw that view.
10
- #
11
- module SceneView
12
-
13
- #
14
- # When the module is included insure that all the class helper methods are added
15
- # at the same time.
16
- #
17
- def self.included(base)
18
- base.extend ClassMethods
19
- end
20
-
21
- #
22
- # Supported view formats
23
- #
24
- def _view_parsers
25
- self.class._view_parsers
26
- end
27
-
28
- #
29
- # Loads and caches the view content based on the avilable view parsers and
30
- # the view files defined.
31
- #
32
- # @return a Hash of view content.
33
- #
34
- def view
35
- self.class.view
36
- end
37
-
38
- module ClassMethods
39
-
40
- #
41
- # A Scene by default uses the name of the Scene to find it's associated
42
- # view.
43
- #
44
- # @example Custom View Name
45
- #
46
- # class ClosingScene < Metro::Scene
47
- # view_name 'alternative'
48
- # end
49
- #
50
- # ClosingScene.view_name # => views/alternative
51
- #
52
- def view_name(filename = nil)
53
- if filename
54
- @view_name = File.join "views", filename.to_s
55
- else
56
- @view_name ||= File.join "views", scene_name
57
- end
58
- end
59
-
60
- #
61
- # Supported view formats
62
- #
63
- def _view_parsers
64
- [ YAMLView, JSONView, NoView ]
65
- end
66
-
67
- #
68
- # Loads and caches the view content based on the avilable view parsers and
69
- # the view files defined.
70
- #
71
- # @return a Hash of view content.
72
- #
73
- def view
74
- @view ||= begin
75
- parser = _view_parsers.find { |parser| parser.exists? view_name }
76
- parser.parse view_name
77
- end
78
- end
79
-
80
- end
81
-
82
- end
83
- end