gamefic 1.1.0 → 1.2.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
- data/bin/gamefic +3 -4
- data/lib/gamefic/shell.rb +64 -14
- data/lib/gamefic/version.rb +1 -1
- data/lib/gamefic.rb +2 -1
- metadata +91 -24
- data/lib/gamefic/shell/command/base.rb +0 -38
- data/lib/gamefic/shell/command/play.rb +0 -51
- data/lib/gamefic/shell/command.rb +0 -4
- data/lib/gamefic/shell/registry.rb +0 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6840c99f360ddbe9171237724e2462369b6e9436
|
4
|
+
data.tar.gz: dae8127b46901506eaf847fbb1c56db6591d69af
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7276ad50d8871721e1999184e3e37ae6fafd8523a816d35708a2c0ac3766c1453cbe3449a73c2205481266cf2200c14309f53accc8ad15573ae1db4cdfc85f33
|
7
|
+
data.tar.gz: d5ce49c27cff38d30024bd418b2b979e20b3acd78f2c14e2b16ff82662086084965fa767a4d8bbe6e6b6bc4ff88cb48952cdb7f5bf349d64577a922005d9bd3e
|
data/bin/gamefic
CHANGED
@@ -3,8 +3,7 @@
|
|
3
3
|
require 'gamefic'
|
4
4
|
require 'gamefic/shell'
|
5
5
|
|
6
|
-
|
6
|
+
# Make play the default command if the first argument is an existing file
|
7
|
+
args = %w(play help).include?(ARGV[0]) || ARGV.count.zero? || !File.exist?(ARGV[0]) ? ARGV : ARGV.dup.unshift('play')
|
7
8
|
|
8
|
-
|
9
|
-
|
10
|
-
shell.execute
|
9
|
+
Gamefic::Shell.start(args)
|
data/lib/gamefic/shell.rb
CHANGED
@@ -1,25 +1,75 @@
|
|
1
|
+
require 'thor'
|
2
|
+
require 'gamefic/engine/tty'
|
3
|
+
require 'zip'
|
4
|
+
require 'tmpdir'
|
5
|
+
require 'yaml'
|
6
|
+
|
1
7
|
module Gamefic
|
8
|
+
class Shell < Thor
|
9
|
+
map %w[--version -v] => :version
|
2
10
|
|
3
|
-
|
4
|
-
|
11
|
+
desc "--version, -v", "Print the version"
|
12
|
+
def version
|
13
|
+
puts "gamefic #{Gamefic::VERSION}"
|
14
|
+
end
|
5
15
|
|
6
|
-
|
7
|
-
|
16
|
+
desc 'play FILE_NAME', 'Execute a compiled (.gfic) game'
|
17
|
+
option :verbose, type: :boolean, aliases: :v, desc: "Don't suppress Ruby exceptions"
|
18
|
+
def play(file)
|
19
|
+
Dir.mktmpdir 'gamefic_' do |dir|
|
20
|
+
puts 'Loading...'
|
21
|
+
decompress file, dir
|
22
|
+
run_game(dir)
|
23
|
+
end
|
24
|
+
rescue StandardError => e
|
25
|
+
puts "'#{file}' does not appear to be a valid Gamefic file."
|
26
|
+
show_exception(e) if options[:verbose]
|
27
|
+
end
|
28
|
+
|
29
|
+
desc 'info FILE_NAME', 'Print information about a (.gfic) game'
|
30
|
+
option :verbose, type: :boolean, aliases: :v, desc: "Don't suppress Ruby exceptions"
|
31
|
+
def info(file)
|
32
|
+
Dir.mktmpdir 'gamefic_' do |dir|
|
33
|
+
decompress file, dir
|
34
|
+
metadata = YAML.load_file File.join(dir, 'metadata.yaml')
|
35
|
+
metadata.each { |k, v|
|
36
|
+
puts "#{k}: #{v}"
|
37
|
+
}
|
38
|
+
end
|
39
|
+
rescue StandardError, Zip::Error => e
|
40
|
+
puts "'#{file}' does not appear to be a valid Gamefic file."
|
41
|
+
show_exception(e) if options[:verbose]
|
8
42
|
end
|
9
43
|
|
10
|
-
|
11
|
-
|
44
|
+
# Custom error message for invalid command or filename
|
45
|
+
def method_missing(symbol, *args)
|
46
|
+
raise UndefinedCommandError, "Could not find command or file named \"#{symbol}\"."
|
12
47
|
end
|
13
48
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
49
|
+
private
|
50
|
+
|
51
|
+
def show_exception(exception)
|
52
|
+
puts exception.inspect
|
53
|
+
puts exception.backtrace.join("\n")
|
54
|
+
end
|
55
|
+
|
56
|
+
def decompress(zipfile, destination)
|
57
|
+
Zip::File.open(zipfile) do |z|
|
58
|
+
z.each do |entry|
|
59
|
+
FileUtils.mkdir_p File.join(destination, File.dirname(entry.name))
|
60
|
+
full_path = File.join(destination, entry.name)
|
61
|
+
entry.extract full_path unless File.exist?(full_path)
|
62
|
+
end
|
21
63
|
end
|
22
64
|
end
|
65
|
+
|
66
|
+
def run_game(directory)
|
67
|
+
story = Plot.new(Source::File.new(File.join(directory, 'scripts')))
|
68
|
+
story.script 'main'
|
69
|
+
story.metadata = YAML.load_file File.join(directory, 'metadata.yaml')
|
70
|
+
engine = Tty::Engine.new story
|
71
|
+
puts "\n"
|
72
|
+
engine.run
|
73
|
+
end
|
23
74
|
end
|
24
|
-
|
25
75
|
end
|
data/lib/gamefic/version.rb
CHANGED
data/lib/gamefic.rb
CHANGED
metadata
CHANGED
@@ -1,57 +1,129 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gamefic
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Fred Snyder
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-12-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: thor
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - ~>
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '0.19'
|
20
|
+
- - ">="
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 0.19.4
|
20
23
|
type: :runtime
|
21
24
|
prerelease: false
|
22
25
|
version_requirements: !ruby/object:Gem::Requirement
|
23
26
|
requirements:
|
24
|
-
- - ~>
|
27
|
+
- - "~>"
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0.19'
|
30
|
+
- - ">="
|
25
31
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
32
|
+
version: 0.19.4
|
27
33
|
- !ruby/object:Gem::Dependency
|
28
34
|
name: rubyzip
|
29
35
|
requirement: !ruby/object:Gem::Requirement
|
30
36
|
requirements:
|
31
|
-
- -
|
37
|
+
- - "~>"
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '1.2'
|
40
|
+
- - ">="
|
32
41
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
42
|
+
version: 1.2.0
|
34
43
|
type: :runtime
|
35
44
|
prerelease: false
|
36
45
|
version_requirements: !ruby/object:Gem::Requirement
|
37
46
|
requirements:
|
38
|
-
- -
|
47
|
+
- - "~>"
|
39
48
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
49
|
+
version: '1.2'
|
50
|
+
- - ">="
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: 1.2.0
|
41
53
|
- !ruby/object:Gem::Dependency
|
42
54
|
name: rspec
|
43
55
|
requirement: !ruby/object:Gem::Requirement
|
44
56
|
requirements:
|
45
|
-
- -
|
57
|
+
- - "~>"
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
version: '3.5'
|
60
|
+
- - ">="
|
46
61
|
- !ruby/object:Gem::Version
|
47
|
-
version:
|
62
|
+
version: 3.5.0
|
48
63
|
type: :development
|
49
64
|
prerelease: false
|
50
65
|
version_requirements: !ruby/object:Gem::Requirement
|
51
66
|
requirements:
|
52
|
-
- -
|
67
|
+
- - "~>"
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '3.5'
|
70
|
+
- - ">="
|
71
|
+
- !ruby/object:Gem::Version
|
72
|
+
version: 3.5.0
|
73
|
+
- !ruby/object:Gem::Dependency
|
74
|
+
name: rake
|
75
|
+
requirement: !ruby/object:Gem::Requirement
|
76
|
+
requirements:
|
77
|
+
- - "~>"
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
version: '11.3'
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 11.3.0
|
83
|
+
type: :development
|
84
|
+
prerelease: false
|
85
|
+
version_requirements: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '11.3'
|
90
|
+
- - ">="
|
91
|
+
- !ruby/object:Gem::Version
|
92
|
+
version: 11.3.0
|
93
|
+
- !ruby/object:Gem::Dependency
|
94
|
+
name: poltergeist
|
95
|
+
requirement: !ruby/object:Gem::Requirement
|
96
|
+
requirements:
|
97
|
+
- - "~>"
|
98
|
+
- !ruby/object:Gem::Version
|
99
|
+
version: '1.11'
|
100
|
+
type: :development
|
101
|
+
prerelease: false
|
102
|
+
version_requirements: !ruby/object:Gem::Requirement
|
103
|
+
requirements:
|
104
|
+
- - "~>"
|
105
|
+
- !ruby/object:Gem::Version
|
106
|
+
version: '1.11'
|
107
|
+
- !ruby/object:Gem::Dependency
|
108
|
+
name: codeclimate-test-reporter
|
109
|
+
requirement: !ruby/object:Gem::Requirement
|
110
|
+
requirements:
|
111
|
+
- - "~>"
|
112
|
+
- !ruby/object:Gem::Version
|
113
|
+
version: '1.0'
|
114
|
+
- - ">="
|
115
|
+
- !ruby/object:Gem::Version
|
116
|
+
version: 1.0.0
|
117
|
+
type: :development
|
118
|
+
prerelease: false
|
119
|
+
version_requirements: !ruby/object:Gem::Requirement
|
120
|
+
requirements:
|
121
|
+
- - "~>"
|
122
|
+
- !ruby/object:Gem::Version
|
123
|
+
version: '1.0'
|
124
|
+
- - ">="
|
53
125
|
- !ruby/object:Gem::Version
|
54
|
-
version:
|
126
|
+
version: 1.0.0
|
55
127
|
description: An adventure game and interactive fiction framework
|
56
128
|
email: fsnyder@gamefic.com
|
57
129
|
executables:
|
@@ -129,10 +201,6 @@ files:
|
|
129
201
|
- lib/gamefic/script/text.rb
|
130
202
|
- lib/gamefic/serialized.rb
|
131
203
|
- lib/gamefic/shell.rb
|
132
|
-
- lib/gamefic/shell/command.rb
|
133
|
-
- lib/gamefic/shell/command/base.rb
|
134
|
-
- lib/gamefic/shell/command/play.rb
|
135
|
-
- lib/gamefic/shell/registry.rb
|
136
204
|
- lib/gamefic/source.rb
|
137
205
|
- lib/gamefic/source/base.rb
|
138
206
|
- lib/gamefic/source/file.rb
|
@@ -152,19 +220,18 @@ require_paths:
|
|
152
220
|
- lib
|
153
221
|
required_ruby_version: !ruby/object:Gem::Requirement
|
154
222
|
requirements:
|
155
|
-
- -
|
223
|
+
- - ">="
|
156
224
|
- !ruby/object:Gem::Version
|
157
|
-
version: 2.
|
225
|
+
version: 2.1.0
|
158
226
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
159
227
|
requirements:
|
160
|
-
- -
|
228
|
+
- - ">="
|
161
229
|
- !ruby/object:Gem::Version
|
162
230
|
version: '0'
|
163
231
|
requirements: []
|
164
232
|
rubyforge_project:
|
165
|
-
rubygems_version: 2.
|
233
|
+
rubygems_version: 2.5.1
|
166
234
|
signing_key:
|
167
235
|
specification_version: 4
|
168
236
|
summary: Gamefic
|
169
237
|
test_files: []
|
170
|
-
has_rdoc:
|
@@ -1,38 +0,0 @@
|
|
1
|
-
require 'gamefic/shell'
|
2
|
-
require 'slop'
|
3
|
-
|
4
|
-
class Gamefic::Shell::Command::Base
|
5
|
-
# Execute the command
|
6
|
-
#
|
7
|
-
def run input
|
8
|
-
raise "Unimplemented command"
|
9
|
-
end
|
10
|
-
|
11
|
-
# Get the options for the command
|
12
|
-
#
|
13
|
-
# @return [Slop::Options]
|
14
|
-
def options
|
15
|
-
@options ||= Slop::Options.new
|
16
|
-
end
|
17
|
-
|
18
|
-
# Get the help documentation for this command.
|
19
|
-
#
|
20
|
-
# @return [String]
|
21
|
-
def help
|
22
|
-
optons.to_s
|
23
|
-
end
|
24
|
-
|
25
|
-
protected
|
26
|
-
|
27
|
-
# @return [Slope::Result]
|
28
|
-
def parse input
|
29
|
-
parser.parse input
|
30
|
-
end
|
31
|
-
|
32
|
-
private
|
33
|
-
|
34
|
-
# @return [Slop::Parser]
|
35
|
-
def parser
|
36
|
-
@parser ||= Slop::Parser.new(options)
|
37
|
-
end
|
38
|
-
end
|
@@ -1,51 +0,0 @@
|
|
1
|
-
require 'zip'
|
2
|
-
require 'tmpdir'
|
3
|
-
require 'gamefic/engine/tty'
|
4
|
-
require 'gamefic/shell'
|
5
|
-
require 'yaml'
|
6
|
-
|
7
|
-
class Gamefic::Shell::Command::Play < Gamefic::Shell::Command::Base
|
8
|
-
include Gamefic
|
9
|
-
|
10
|
-
def run input
|
11
|
-
result = parse input
|
12
|
-
file = result.arguments[1]
|
13
|
-
raise "File not specified." if file.nil?
|
14
|
-
raise "'#{file}' does not exist." if !File.exist?(file)
|
15
|
-
raise "'#{file}' is a directory." if File.directory?(file)
|
16
|
-
play file
|
17
|
-
end
|
18
|
-
|
19
|
-
private
|
20
|
-
|
21
|
-
def decompress(zipfile, destination)
|
22
|
-
Zip::File.open(zipfile) do |z|
|
23
|
-
z.each do |entry|
|
24
|
-
FileUtils.mkdir_p File.join(destination, File.dirname(entry.name))
|
25
|
-
full_path = File.join(destination, entry.name)
|
26
|
-
if !File.exist?(full_path)
|
27
|
-
entry.extract full_path
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
def play file
|
34
|
-
Dir.mktmpdir 'gamefic_' do |dir|
|
35
|
-
puts "Loading..."
|
36
|
-
story = Plot.new(Source::File.new(File.join(dir, 'scripts')))
|
37
|
-
begin
|
38
|
-
decompress file, dir
|
39
|
-
rescue Exception => e
|
40
|
-
puts "'#{file}' does not appear to be a valid Gamefic file."
|
41
|
-
#puts "Error: #{e.message}"
|
42
|
-
#exit 1
|
43
|
-
end
|
44
|
-
story.script 'main'
|
45
|
-
story.metadata = YAML.load_file File.join(dir, 'metadata.yaml')
|
46
|
-
engine = Tty::Engine.new story
|
47
|
-
puts "\n"
|
48
|
-
engine.run
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|