pie 0.1.3 → 0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/README.md CHANGED
@@ -38,6 +38,6 @@ Core team
38
38
  * Sarah Mei
39
39
 
40
40
  Contributors
41
- * Dan Steinicke
42
41
  * Akira Matsuda
43
42
  * Chad Fowler
43
+
data/bin/pie ADDED
@@ -0,0 +1,31 @@
1
+ #!/usr/bin/env ruby
2
+ if RUBY_VERSION < "1.9.0"
3
+ puts "Error: pie requires Ruby 1.9, please use RVM."
4
+ exit
5
+ end
6
+
7
+ if ARGV.size == 0
8
+ puts "Usage: pie myfile"
9
+ exit
10
+ end
11
+
12
+ pie_file = ARGV.first
13
+ pie_file = "#{pie_file}.pie" unless File.exist?(pie_file)
14
+
15
+ unless File.exist?(pie_file)
16
+ puts "Unknown file #{ARGV.first}, please try again."
17
+ exit
18
+ end
19
+
20
+ begin
21
+ require 'pie'
22
+ rescue LoadError
23
+ $LOAD_PATH.unshift File.expand_path(File.join(File.dirname(__FILE__), "..", "lib"))
24
+ require 'pie'
25
+ end
26
+
27
+ include Pie
28
+ load pie_file
29
+
30
+ require 'pie_server'
31
+ WebApp.run! :port => 31415
@@ -0,0 +1,31 @@
1
+ #!/usr/bin/env ruby
2
+ if RUBY_VERSION < "1.9.0"
3
+ puts "Error: pie requires Ruby 1.9, please use RVM."
4
+ exit
5
+ end
6
+
7
+ if ARGV.size == 0
8
+ puts "Usage: pie myfile"
9
+ exit
10
+ end
11
+
12
+ pie_file = ARGV.first
13
+ pie_file = "#{pie_file}.pie" unless File.exist?(pie_file)
14
+
15
+ unless File.exist?(pie_file)
16
+ puts "Unknown file #{ARGV.first}, please try again."
17
+ exit
18
+ end
19
+
20
+ begin
21
+ require 'pie'
22
+ rescue LoadError
23
+ $LOAD_PATH.unshift File.expand_path(File.join(File.dirname(__FILE__), "..", "lib"))
24
+ require 'pie'
25
+ end
26
+
27
+ include Pie
28
+ load pie_file
29
+
30
+ require 'pie_server'
31
+ WebApp.run!
@@ -0,0 +1,56 @@
1
+ module Pie
2
+
3
+ class DeadEnd < String
4
+ def dead_end?
5
+ true
6
+ end
7
+ end
8
+
9
+ class Direction < String
10
+ def opposite(display_name = nil)
11
+ if display_name
12
+ @display_name = display_name
13
+ else
14
+ @display_name
15
+ end
16
+ end
17
+ def dead_end?
18
+ false
19
+ end
20
+ end
21
+
22
+ def direction(forward, back)
23
+ dir = Direction.new(forward)
24
+ dir.opposite(back)
25
+ dir
26
+ end
27
+
28
+ def north
29
+ @north ||= direction('Go North', 'Go South')
30
+ end
31
+
32
+ def south
33
+ @south ||= direction('Go South', 'Go North')
34
+ end
35
+ def east
36
+ @east ||= direction('Go East', 'Go West')
37
+ end
38
+ def west
39
+ @west ||= direction('Go West', 'Go East')
40
+ end
41
+ def dead_end(name)
42
+ DeadEnd.new(name)
43
+ end
44
+ def north!
45
+ dead_end(north)
46
+ end
47
+ def south!
48
+ dead_end(south)
49
+ end
50
+ def east!
51
+ dead_end(east)
52
+ end
53
+ def west!
54
+ dead_end(west)
55
+ end
56
+ end
data/lib/pie.rb CHANGED
@@ -1,171 +1,52 @@
1
- require 'sinatra/base'
2
- require 'player'
3
-
4
- #puts "----------------- Ruby version = #{RUBY_VERSION}"
5
- #raise ScriptError, "Pie requires Ruby 1.9 or higher" if RUBY_VERSION < "1.9.0"
6
- NO_WAY_BACK = ""
7
- class Pie
1
+ module Pie
8
2
 
9
-
10
- attr_accessor :places
11
- attr_accessor :images
12
- attr_accessor :default_template
13
-
14
- def initialize
15
- @default_template = :image_page
16
- @places = Places.new
17
- @map = Map.new(@places)
18
- @images = {}
19
- end
20
-
21
- class WebApp < Sinatra::Base
22
- set :root, File.join(File.expand_path(File.dirname(__FILE__)), "..")
23
-
24
- get '/' do
25
- "hello"
26
- end
27
-
28
- get '/:place_name' do
29
- name = params[:place_name].to_sym
30
- $current = name unless name.nil?
31
- puts "current place name is #{$current}"
32
- puts "current place is #{$pie.places[$current]}"
33
- puts "--- skip out"; return if $pie.places[$current].nil?
34
- puts "current links are #{$pie.places[$current].links.inspect}"
35
- puts "displaying template: #{$pie.default_template.inspect}"
36
- erb $pie.default_template
37
- end
38
- end
39
-
40
- at_exit { WebApp.run! if !$0.include?("spec")}
41
-
42
- class Map
43
-
44
- def initialize places
45
- @places = places
46
- end
47
-
48
- def path endpoints
49
- puts "---> path #{endpoints.inspect}"
50
- puts @places.inspect
51
- #if h.size != 2
52
- # return puts "path must have two and only two endpoints."
53
- #end
54
- start_place_key, end_place_key = endpoints.keys
55
- label_for_end, label_for_start = endpoints.values
56
-
57
- start_place = @places[start_place_key]
58
- end_place = @places[end_place_key]
59
- raise ArgumentError, "there is no place named '#{start_place_key}'" if start_place.nil?
60
- raise ArgumentError, "there is no place named '#{end_place_key}'" if end_place.nil?
61
-
62
- start_place[:links][end_place_key] = label_for_end unless label_for_end.empty?
63
- end_place[:links][start_place_key] = label_for_start unless label_for_start.empty?
64
- end
3
+ def self.[](key)
4
+ (@map ||= {})[key]
65
5
  end
66
6
 
67
- class Place < Hash
68
- def initialize
69
- self[:links] = {}
70
- end
71
- def links
72
- result = self[:links]
73
- end
74
-
7
+ def self.[]=(key, value)
8
+ (@map ||= {})[key] = value
75
9
  end
76
-
77
- class Places < Hash
78
- def method_missing name, options = {}
79
- unless options.is_a? Hash
80
- puts "options for creating a place must have key and value"
81
- return
82
- end
83
- puts "making a #{name} with #{options.inspect}"
84
- place = Place.new
85
- place.merge! options
86
- self[name.to_sym] = place
87
- end
88
-
89
- def [] string_or_symbol
90
- super string_or_symbol.to_sym
91
- end
92
-
93
- def after(place_name)
94
- index = keys.index(place_name.to_sym)
95
- next_place_name = keys[index + 1]
96
- self[next_place_name] unless next_place_name.nil?
97
- end
98
-
99
- def before(place_name)
100
- index = keys.index(place_name.to_sym)
101
- index = index - 1
102
- if index < 0
103
- nil
104
- else
105
- prev_place_name = keys[index]
106
- self[prev_place_name]
107
- end
10
+
11
+ def template(name = nil)
12
+ if name
13
+ Pie[:template] = name.to_sym
14
+ else
15
+ Pie[:template] || :image_page
108
16
  end
109
17
  end
110
-
111
- def template(template_name)
112
- puts "--> set default template #{template_name.to_sym}"
113
- @default_template = template_name.to_sym
114
- end
115
-
116
- def create_places(&block)
117
- @places.instance_eval(&block)
118
- end
119
-
120
- def map(&block)
121
- puts "-------- creating map --------"
122
- @map.instance_eval(&block)
18
+
19
+ def images
20
+ Pie[:images] ||= {}
123
21
  end
124
-
125
- def image(image_hash)
126
- puts "--- set image"
127
- puts image_hash.inspect
128
- @images.merge!(image_hash)
22
+
23
+ def image(image_maps)
24
+ images.merge!(image_maps)
129
25
  end
130
26
 
131
- def current
132
- @current ||= @places.keys.first
27
+ def place(options)
28
+ Place.new(options)
133
29
  end
134
-
135
- def move_to(new_place_key)
136
- @current = new_place_key
30
+
31
+ def current_place(name=nil)
32
+ puts "current_place"
33
+ puts places.inspect
34
+ if name
35
+ Pie[:current_place] = places[name.to_sym]
36
+ else
37
+ Pie[:current_place]
38
+ end
137
39
  end
138
40
 
139
- def current_image
140
- puts "------- current_image"
141
- puts $current.inspect
142
- puts @images.inspect
143
- @images[$current.to_sym]
41
+ def current_image
42
+ images[current_place.name] if current_place
144
43
  end
145
-
146
- def current_description
147
- puts "------- current_description"
148
- puts $current.inspect
149
- place = @places[$current.to_sym]
150
- puts @place.inspect
151
- place[:description] unless place.nil?
44
+
45
+ def places
46
+ Pie[:places] ||= {}
152
47
  end
48
+
153
49
  end
154
50
 
155
- def make_pie(&block)
156
- foo = 1
157
- puts "-------------------------- making pie ---------------------------- "
158
- $pie = Pie.new
159
- $pie.instance_eval(&block)
160
- puts "-------------------------- pie complete ---------------------------- "
161
- end
162
-
163
- def more_pie(&block)
164
- puts "-------------------------- more pie ---------------------------- "
165
- if $pie.nil?
166
- puts "How can you make more pie when you haven't made any pie yet?"
167
- return
168
- end
169
- $pie.instance_eval(&block)
170
- puts "-------------------------- pie complete ---------------------------- "
171
- end
51
+ require 'place'
52
+ require 'direction'
@@ -1,171 +1,50 @@
1
- require 'sinatra/base'
2
- require 'player'
3
-
4
- #puts "----------------- Ruby version = #{RUBY_VERSION}"
5
- #raise ScriptError, "Pie requires Ruby 1.9 or higher" if RUBY_VERSION < "1.9.0"
6
- NO_WAY_BACK = ""
7
- class Pie
1
+ module Pie
8
2
 
9
-
10
- attr_accessor :places
11
- attr_accessor :images
12
- attr_accessor :default_template
13
-
14
- def initialize
15
- @default_template = :image_page
16
- @places = Places.new
17
- @map = Map.new(@places)
18
- end
19
-
20
- class WebApp < Sinatra::Base
21
- set :root, File.join(File.expand_path(File.dirname(__FILE__)), "..")
22
-
23
- get '/' do
24
- "hello"
25
- end
26
-
27
- get '/:place_name' do
28
- name = params[:place_name].to_sym
29
- $current = name unless name.nil?
30
- puts "current place name is #{$current}"
31
- puts "current place is #{$pie.places[$current]}"
32
- puts "--- skip out"; return if $pie.places[$current].nil?
33
- puts "current links are #{$pie.places[$current].links.inspect}"
34
- puts "displaying template: #{$pie.default_template.inspect}"
35
- erb $pie.default_template
36
- end
37
- end
38
-
39
- at_exit { WebApp.run! if !$0.include?("spec")}
40
-
41
- class Map
42
-
43
- def initialize places
44
- @places = places
45
- end
46
-
47
- def path endpoints
48
- puts "---> path #{endpoints.inspect}"
49
- puts @places.inspect
50
- #if h.size != 2
51
- # return puts "path must have two and only two endpoints."
52
- #end
53
- start_place_key, end_place_key = endpoints.keys
54
- label_for_end, label_for_start = endpoints.values
55
-
56
- start_place = @places[start_place_key]
57
- end_place = @places[end_place_key]
58
- raise ArgumentError, "there is no place named '#{start_place_key}'" if start_place.nil?
59
- raise ArgumentError, "there is no place named '#{end_place_key}'" if end_place.nil?
60
-
61
- start_place[:links][end_place_key] = label_for_end unless label_for_end.empty?
62
- end_place[:links][start_place_key] = label_for_start unless label_for_start.empty?
63
- end
3
+ def self.[](key)
4
+ (@map ||= {})[key]
64
5
  end
65
6
 
66
- class Place < Hash
67
- def initialize
68
- self[:links] = {}
69
- end
70
- def links
71
- result = self[:links]
72
- end
73
-
7
+ def self.[]=(key, value)
8
+ (@map ||= {})[key] = value
74
9
  end
75
-
76
- class Places < Hash
77
- def method_missing name, options = {}
78
- unless options.is_a? Hash
79
- puts "options for creating a place must have key and value"
80
- return
81
- end
82
- puts "making a #{name} with #{options.inspect}"
83
- place = Place.new
84
- place.merge! options
85
- self[name.to_sym] = place
86
- end
87
-
88
- def [] string_or_symbol
89
- super string_or_symbol.to_sym
90
- end
91
-
92
- def after(place_name)
93
- index = keys.index(place_name.to_sym)
94
- next_place_name = keys[index + 1]
95
- self[next_place_name] unless next_place_name.nil?
96
- end
97
-
98
- def before(place_name)
99
- index = keys.index(place_name.to_sym)
100
- index = index - 1
101
- if index < 0
102
- nil
103
- else
104
- prev_place_name = keys[index]
105
- self[prev_place_name]
106
- end
10
+
11
+ def template(name = nil)
12
+ if name
13
+ Pie[:template] = name.to_sym
14
+ else
15
+ Pie[:template] || :image_page
107
16
  end
108
17
  end
109
-
110
- def template(template_name)
111
- puts "--> set default template #{template_name.to_sym}"
112
- @default_template = template_name.to_sym
113
- end
114
-
115
- def create_places(&block)
116
- @places.instance_eval(&block)
117
- end
118
-
119
- def map(&block)
120
- puts "-------- creating map --------"
121
- @map.instance_eval(&block)
18
+
19
+ def images
20
+ Pie[:images] ||= {}
122
21
  end
123
-
124
- def image(image_hash)
125
- @images ||= {}
126
- puts "--- set image"
127
- puts image_hash.inspect
128
- @images.merge!(image_hash)
22
+
23
+ def image(image_maps)
24
+ images.merge!(image_maps)
129
25
  end
130
26
 
131
- def current
132
- @current ||= @places.keys.first
27
+ def place(options)
28
+ Place.new(options)
133
29
  end
134
-
135
- def move_to(new_place_key)
136
- @current = new_place_key
30
+
31
+ def current_place(name=nil)
32
+ if name
33
+ Pie[:current_place] = places[name.to_sym]
34
+ else
35
+ Pie[:current_place]
36
+ end
137
37
  end
138
38
 
139
- def current_image
140
- puts "------- current_image"
141
- puts $current.inspect
142
- puts @images.inspect
143
- @images[$current.to_sym]
39
+ def current_image
40
+ images[current_place.name] if current_place
144
41
  end
145
-
146
- def current_description
147
- puts "------- current_description"
148
- puts $current.inspect
149
- place = @places[$current.to_sym]
150
- puts @place.inspect
151
- place[:description] unless place.nil?
42
+
43
+ def places
44
+ Pie[:places] ||= {}
152
45
  end
46
+
153
47
  end
154
48
 
155
- def make_pie(&block)
156
- foo = 1
157
- puts "-------------------------- making pie ---------------------------- "
158
- $pie = Pie.new
159
- $pie.instance_eval(&block)
160
- puts "-------------------------- pie complete ---------------------------- "
161
- end
162
-
163
- def more_pie(&block)
164
- puts "-------------------------- more pie ---------------------------- "
165
- if $pie.nil?
166
- puts "How can you make more pie when you haven't made any pie yet?"
167
- return
168
- end
169
- $pie.instance_eval(&block)
170
- puts "-------------------------- pie complete ---------------------------- "
171
- end
49
+ require 'place'
50
+ require 'direction'
@@ -0,0 +1,20 @@
1
+ require 'sinatra/base'
2
+
3
+ class WebApp < Sinatra::Base
4
+ set :root, File.join(File.expand_path(File.dirname(__FILE__)), "..")
5
+
6
+ get '/' do
7
+ "hello"
8
+ end
9
+
10
+ get '/:place_name' do
11
+ name = params[:place_name].to_sym
12
+ current_place(name) unless name.nil?
13
+ puts "current place name is #{current_place.name}"
14
+ puts "current place is #{current_place.description}"
15
+ puts "--- skip out"; return if current_place.nil?
16
+ puts "current links are #{current_place.paths.inspect}"
17
+ puts "displaying template: #{template.inspect}"
18
+ erb template
19
+ end
20
+ end
@@ -0,0 +1,21 @@
1
+ require 'sinatra/base'
2
+
3
+ class WebApp < Sinatra::Base
4
+ set :root, File.join(File.expand_path(File.dirname(__FILE__)), "..")
5
+
6
+ get '/' do
7
+ "hello"
8
+ end
9
+
10
+ get '/:place_name' do
11
+ name = params[:place_name].to_sym
12
+ puts "going to place with name #{name}"
13
+ current_place(name) unless name.nil?
14
+ puts "current place name is #{current_place.name}"
15
+ puts "current place is #{current_place.description}"
16
+ puts "--- skip out"; return if current_place.nil?
17
+ puts "current links are #{current_place.paths.inspect}"
18
+ puts "displaying template: #{template.inspect}"
19
+ erb template
20
+ end
21
+ end
@@ -0,0 +1,47 @@
1
+ class Pie::Place
2
+
3
+ attr_reader :name, :description, :paths
4
+
5
+ def initialize(options)
6
+ @paths = {}
7
+ extract_standard_options(options)
8
+ extract_name_and_description(options)
9
+ build_place_method
10
+ register_place
11
+ end
12
+
13
+ def to_s
14
+ @name
15
+ end
16
+
17
+ def path(nodes)
18
+ nodes.each do |place_name, direction|
19
+ paths[place_name] = direction
20
+ places[place_name].paths[name] = direction.opposite unless direction.dead_end?
21
+ end
22
+ end
23
+
24
+ private
25
+
26
+ def extract_name_and_description(options)
27
+ raise "You seem to have extras option in this place!" unless options.length == 1
28
+ @name = options.keys.first
29
+ @description = options.values.first
30
+ end
31
+
32
+ def extract_standard_options(options)
33
+ end
34
+
35
+ def build_place_method
36
+ Pie.module_eval %{
37
+ def #{name}
38
+ places[:#{name}]
39
+ end
40
+ }
41
+ end
42
+
43
+ def register_place
44
+ places[name] = self
45
+ end
46
+
47
+ end
@@ -52,13 +52,15 @@
52
52
 
53
53
  <body>
54
54
  <div id="background">
55
- <img src="<%= $pie.current_image %>" />
55
+ <% if current_image %>
56
+ <img src="<%= current_image %>" />
57
+ <% end %>
56
58
  </div>
57
59
  <div id="content">
58
- <p><%= $pie.current_description %></p>
60
+ <p><%= current_place.description %></p>
59
61
  <p>
60
- <% $pie.places[$current].links.each do |place_name, label| %>
61
- <%= " <a href='#{place_name}'>#{label.to_s}</a> " %>
62
+ <% current_place.paths.each do |place_name, label| %>
63
+ <%= " <a href='#{place_name}'>#{label}</a> " %>
62
64
  <% end %>
63
65
  </p>
64
66
  </div>
metadata CHANGED
@@ -4,9 +4,8 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 0
7
- - 1
8
- - 3
9
- version: 0.1.3
7
+ - 2
8
+ version: "0.2"
10
9
  platform: ruby
11
10
  authors:
12
11
  - Sarah Allen, Sarah Mei
@@ -14,27 +13,30 @@ autorequire:
14
13
  bindir: bin
15
14
  cert_chain: []
16
15
 
17
- date: 2010-09-12 00:00:00 -07:00
16
+ date: 2010-09-19 00:00:00 -07:00
18
17
  default_executable:
19
18
  dependencies: []
20
19
 
21
20
  description:
22
21
  email:
23
- executables: []
24
-
22
+ executables:
23
+ - pie
25
24
  extensions: []
26
25
 
27
26
  extra_rdoc_files: []
28
27
 
29
28
  files:
29
+ - lib/direction.rb
30
30
  - lib/pie.rb
31
31
  - lib/pie.rb~
32
- - lib/player.rb
32
+ - lib/pie_server.rb
33
+ - lib/pie_server.rb~
34
+ - lib/place.rb
35
+ - bin/pie
36
+ - bin/pie~
33
37
  - views/full_screen.erb
34
38
  - views/game_screen.erb
35
- - views/game_screen.erb~
36
39
  - views/image_page.erb
37
- - views/image_page.erb~
38
40
  - README.md
39
41
  - MIT-LICENSE.txt
40
42
  has_rdoc: true
@@ -1,13 +0,0 @@
1
- class Pie
2
- class Player
3
- def description
4
- "You are an egg."
5
- end
6
- end
7
-
8
- def player
9
- @player ||= Player.new
10
-
11
- end
12
-
13
- end
@@ -1,67 +0,0 @@
1
- <!DOCTYPE html>
2
-
3
- <html lang="en">
4
- <head>
5
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
6
- <title><%= $current %></title>
7
- <style type="text/css" media="screen">
8
-
9
- body {
10
- background: #000;
11
- }
12
-
13
- div#background {
14
- position: fixed;
15
- top: 0;
16
- left: 0;
17
- width: 100%;
18
- height: 100%
19
- }
20
-
21
- div#background img {
22
-
23
- /* Set up proportionate scaling */
24
- width: auto;
25
- height: 100%;
26
-
27
- /* Set up positioning */
28
- margin-left: auto;
29
- margin-right: auto;
30
- display: block;
31
- }
32
-
33
- div#content {
34
- /* This is the only important rule */
35
- /* We need our content to show up on top of the background */
36
- position: relative;
37
-
38
- /* These have no effect on the functionality */
39
- width: 80%;
40
- margin: 0 auto;
41
- background: #fff;
42
- padding: 20px;
43
- font-family: helvetica, arial, sans-serif;
44
- font-size: 12pt;
45
- line-height: 14pt;
46
- -moz-box-shadow: #000 4px 4px 10px;
47
- -webkit-box-shadow: #000 4px 4px 10px;
48
- }
49
-
50
- </style>
51
- </head>
52
-
53
- <body>
54
- <div id="background">
55
- <img src="<%= $pie.current_image %>" />
56
- </div>
57
- <div id="content">
58
- <p><%= $pie.current_description %></p>
59
- <p>
60
- <% $pie.places[$current].links.each do |place_name, label| %>
61
- <%= " <a href='#{place_name}'>#{label.to_s}</a> " %>
62
- <% end %>
63
- </p>
64
- </div>
65
- </body>
66
-
67
- </html>
@@ -1,57 +0,0 @@
1
- <!DOCTYPE html>
2
-
3
- <html lang="en">
4
- <head>
5
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
6
- <title><%= $current %></title>
7
- <style type="text/css" media="screen">
8
-
9
-
10
- img.bg {
11
- /* Set rules to fill background */
12
- min-height: 100%;
13
- min-width: 1024px;
14
-
15
- /* Set up proportionate scaling */
16
- width: 100%;
17
- height: auto;
18
-
19
- /* Set up positioning */
20
- position: fixed;
21
- top: 0;
22
- left: 0;
23
- }
24
-
25
- @media screen and (max-width: 1024px){
26
- img.bg {
27
- left: 50%;
28
- margin-left: -512px; }
29
- }
30
-
31
- div#content {
32
- /* This is the only important rule */
33
- /* We need our content to show up on top of the background */
34
- position: relative;
35
-
36
- /* These have no effect on the functionality */
37
- width: 100%;
38
- margin: 0 auto;
39
- padding: 20px;
40
- font-family: helvetica, arial, sans-serif;
41
- font-size: 32pt;
42
- line-height: 40pt;
43
- text-align: center;
44
- text-shadow: 1px 1px #fff
45
- }
46
-
47
- </style>
48
- </head>
49
-
50
- <body>
51
- <img src="<%= $pie.current_image %>" class="bg" />
52
- <div id="content">
53
- <p><%= $pie.current_description %></p>
54
- </div>
55
- </body>
56
-
57
- </html>