inform-runtime 1.6.0 → 1.6.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.
- checksums.yaml +4 -4
- data/README.md +0 -1
- data/lib/story_teller/builtins.rb +6 -7
- data/lib/story_teller/events.rb +1 -4
- data/lib/story_teller/inform/ephemeral/module.rb +1 -0
- data/lib/story_teller/inform/ephemeral/object.rb +1 -0
- data/lib/story_teller/io.rb +40 -12
- data/lib/story_teller/library/directives.rb +26 -2
- data/lib/story_teller/logging.rb +21 -16
- data/lib/story_teller/session.rb +1 -1
- data/lib/story_teller/stdlib.rb +0 -8
- data/lib/story_teller/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 30d774723c5ea67091209135a26685ab0e250a780e3fbadb8a1752fbda94a505
|
|
4
|
+
data.tar.gz: 7b40b742e14c98abeef2f5695923a502032334c61e48c00a11d53d40501442cc
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 87cdf76656079aca4ccccee3feed0f6dfd6e9f3698b0fb8b46317996316be50a1b7ae00777cbc8ac53dbfa76c09d18bbdda152ee13842f5c5be857cbdaefb83b
|
|
7
|
+
data.tar.gz: a18a9f118a5ba0c17271cf9c7a2e632da133ed41d19a4bd22fd2ae8b0e3ca651439e5d79469c7ec29b2084818ff2708e971e2b36373ac9823c9875986a27772e
|
data/README.md
CHANGED
|
@@ -280,7 +280,7 @@ module Builtins
|
|
|
280
280
|
def visibility_ceiling=(visibility_ceiling)
|
|
281
281
|
e = Thread.current[:event]
|
|
282
282
|
@visibility_ceiling = visibility_ceiling
|
|
283
|
-
e.visibility_ceiling = visibility_ceiling
|
|
283
|
+
e.visibility_ceiling = visibility_ceiling unless e.nil?
|
|
284
284
|
end
|
|
285
285
|
|
|
286
286
|
def topic
|
|
@@ -288,14 +288,13 @@ module Builtins
|
|
|
288
288
|
end
|
|
289
289
|
alias text topic
|
|
290
290
|
|
|
291
|
-
def number(
|
|
292
|
-
if !
|
|
293
|
-
self.properties[:number] =
|
|
291
|
+
def number(n = nil)
|
|
292
|
+
if !n.nil? && self.object? && self.defining_object?
|
|
293
|
+
self.properties[:number] = n
|
|
294
294
|
return
|
|
295
295
|
end
|
|
296
|
-
return special_number1 if
|
|
297
|
-
|
|
298
|
-
''
|
|
296
|
+
return special_number1 if n.nil?
|
|
297
|
+
capture_output { EnglishNumber(n) }
|
|
299
298
|
end
|
|
300
299
|
|
|
301
300
|
def special
|
data/lib/story_teller/events.rb
CHANGED
data/lib/story_teller/io.rb
CHANGED
|
@@ -19,12 +19,14 @@
|
|
|
19
19
|
# You should have received a copy of the GNU General Public License
|
|
20
20
|
# along with the StoryTeller. If not, see <http://www.gnu.org/licenses/>.
|
|
21
21
|
|
|
22
|
+
require 'stringio'
|
|
23
|
+
|
|
22
24
|
# The StoryTeller module
|
|
23
25
|
module StoryTeller
|
|
24
26
|
# The IO module
|
|
25
27
|
module IO
|
|
26
28
|
class << self
|
|
27
|
-
attr_accessor :
|
|
29
|
+
attr_accessor :default_channel
|
|
28
30
|
end
|
|
29
31
|
|
|
30
32
|
def session
|
|
@@ -46,18 +48,44 @@ module StoryTeller
|
|
|
46
48
|
subscribed_connections
|
|
47
49
|
end
|
|
48
50
|
|
|
49
|
-
def out(s)
|
|
50
|
-
|
|
51
|
-
|
|
51
|
+
def out(s, ch = channel(StoryTeller::IO.default_channel))
|
|
52
|
+
ch&.write(s)
|
|
53
|
+
true
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def channel(default = nil)
|
|
57
|
+
overrides = Thread.current[:channel_overrides]
|
|
58
|
+
return overrides[self] if overrides&.key?(self)
|
|
59
|
+
|
|
60
|
+
@channel ||= current_session || default || $stdout
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
# rubocop: disable Metrics/MethodLength
|
|
64
|
+
def capture_output(buffer = StringIO.new)
|
|
65
|
+
overrides = Thread.current[:channel_overrides] ||= {}.compare_by_identity
|
|
66
|
+
previous = overrides[self]
|
|
67
|
+
had_previous = overrides.key?(self)
|
|
68
|
+
|
|
69
|
+
begin
|
|
70
|
+
overrides[self] = buffer
|
|
71
|
+
yield
|
|
72
|
+
buffer.string
|
|
73
|
+
ensure
|
|
74
|
+
if had_previous
|
|
75
|
+
overrides[self] = previous
|
|
76
|
+
else
|
|
77
|
+
overrides.delete(self)
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
# rubocop: enable Metrics/MethodLength
|
|
52
82
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
$stdout.write(s)
|
|
83
|
+
def current_session
|
|
84
|
+
session || begin
|
|
85
|
+
if self.respond_to?(:inflib) && !self.inflib.equal?(self)
|
|
86
|
+
self.inflib&.session
|
|
87
|
+
end
|
|
59
88
|
end
|
|
60
|
-
true
|
|
61
89
|
end
|
|
62
90
|
|
|
63
91
|
def inform(s = '')
|
|
@@ -96,7 +124,7 @@ module StoryTeller
|
|
|
96
124
|
end
|
|
97
125
|
|
|
98
126
|
def print_routine_result(value)
|
|
99
|
-
return value unless value.is_a?(String)
|
|
127
|
+
return value unless value.is_a?(String) || value.is_a?(Array)
|
|
100
128
|
|
|
101
129
|
print value
|
|
102
130
|
new_line
|
|
@@ -63,6 +63,28 @@ module StoryTeller
|
|
|
63
63
|
# rubocop: enable Metrics/AbcSize
|
|
64
64
|
# rubocop: enable Metrics/MethodLength
|
|
65
65
|
|
|
66
|
+
# rubocop: disable Metrics/MethodLength
|
|
67
|
+
def Array(constant, *values)
|
|
68
|
+
inform_name = constant.to_sym
|
|
69
|
+
ruby_name = if constant.to_s.match?(/\A[A-Za-z0-9_]*\z/)
|
|
70
|
+
inform_name
|
|
71
|
+
else
|
|
72
|
+
constant.to_s.upcase.to_sym
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
log.debug "Setting constant ::Object.#{ruby_name} to #{values}"
|
|
76
|
+
log.debug " inform_name: #{inform_name}"
|
|
77
|
+
reset_constant(ruby_name, values, ::Object)
|
|
78
|
+
|
|
79
|
+
return values if inform_name == ruby_name
|
|
80
|
+
|
|
81
|
+
install_global_reader(inform_name, ruby_name, ::Object)
|
|
82
|
+
rescue StandardError => e
|
|
83
|
+
log.error "Unexpected error resetting constant #{constant}", e
|
|
84
|
+
nil
|
|
85
|
+
end
|
|
86
|
+
# rubocop: enable Metrics/MethodLength
|
|
87
|
+
|
|
66
88
|
def Attribute(attribute)
|
|
67
89
|
StoryTeller::Library.declarations.add_attribute(attribute)
|
|
68
90
|
end
|
|
@@ -88,11 +110,13 @@ module StoryTeller
|
|
|
88
110
|
target.const_get(ruby_name)
|
|
89
111
|
rescue RuntimeError => _e
|
|
90
112
|
# Ignore error
|
|
113
|
+
value
|
|
91
114
|
rescue StandardError => _e
|
|
92
115
|
# Ignore error
|
|
116
|
+
value
|
|
93
117
|
end
|
|
94
118
|
|
|
95
|
-
reset_constant(ruby_name, value, target)
|
|
119
|
+
reset_constant(ruby_name, value, target) unless value.nil?
|
|
96
120
|
|
|
97
121
|
return value if inform_name == ruby_name
|
|
98
122
|
|
|
@@ -126,7 +150,7 @@ module StoryTeller
|
|
|
126
150
|
# rubocop: enable Metrics/MethodLength
|
|
127
151
|
|
|
128
152
|
def install_global_reader(inform_name, ruby_name, target = ::Object)
|
|
129
|
-
reader = -> { target.
|
|
153
|
+
reader = -> { target.instance_eval { const_get(ruby_name) } }
|
|
130
154
|
|
|
131
155
|
Kernel.define_method(inform_name, &reader)
|
|
132
156
|
Kernel.send(:private, inform_name)
|
data/lib/story_teller/logging.rb
CHANGED
|
@@ -165,26 +165,29 @@ class Logger
|
|
|
165
165
|
end
|
|
166
166
|
end
|
|
167
167
|
|
|
168
|
-
#
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
original_error(TraceHelpers.generate_message(error_or_message, error))
|
|
176
|
-
TraceHelpers.extract_backtrace(error, []).each do |trace|
|
|
177
|
-
original_error(trace) unless trace.nil?
|
|
168
|
+
# module LoggerErrorBacktrace
|
|
169
|
+
module LoggerErrorBacktrace
|
|
170
|
+
def error(message = nil, error = nil, &block)
|
|
171
|
+
if message.respond_to?(:message)
|
|
172
|
+
error = message
|
|
173
|
+
message = error.message
|
|
178
174
|
end
|
|
179
|
-
end
|
|
180
175
|
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
TraceHelpers.extract_backtrace(
|
|
184
|
-
|
|
176
|
+
result = super(message, &block)
|
|
177
|
+
|
|
178
|
+
TraceHelpers.extract_backtrace(error)&.each do |trace|
|
|
179
|
+
add(Logger::ERROR, trace)
|
|
185
180
|
end
|
|
181
|
+
|
|
182
|
+
result
|
|
186
183
|
end
|
|
184
|
+
end
|
|
185
|
+
|
|
186
|
+
Logger.include(LoggerErrorBacktrace)
|
|
187
187
|
|
|
188
|
+
# Add extra severity to the standard Logger class.
|
|
189
|
+
# Also add support for including backtraces implicitly.
|
|
190
|
+
module TraceLogging
|
|
188
191
|
SEV_LABEL_EXTRA = (Logger::SEV_LABEL + %w(TRACE)).freeze
|
|
189
192
|
def format_severity(severity)
|
|
190
193
|
SEV_LABEL_EXTRA[severity] || super
|
|
@@ -195,6 +198,8 @@ class ExtraLogger < Logger
|
|
|
195
198
|
end
|
|
196
199
|
end
|
|
197
200
|
|
|
201
|
+
Logger.include(TraceLogging)
|
|
202
|
+
|
|
198
203
|
# The LoggingHelpers module
|
|
199
204
|
module LoggingHelpers
|
|
200
205
|
if defined?(Java)
|
|
@@ -221,7 +226,7 @@ module LoggingHelpers
|
|
|
221
226
|
def init_ruby_logger(obj, level = nil, logger_name = nil, source_location = nil)
|
|
222
227
|
logger_name = get_formatted_logger_name(obj, logger_name)
|
|
223
228
|
logger_name = source_location.split(FORWARD_SLASH_PATTERN).last if logger_name.empty?
|
|
224
|
-
log =
|
|
229
|
+
log = Logger.new($stdout, progname: logger_name)
|
|
225
230
|
log.level = normalize_ruby_log_level(level) unless level.nil?
|
|
226
231
|
log.formatter = method(:ruby_log_formatter)
|
|
227
232
|
log
|
data/lib/story_teller/session.rb
CHANGED
data/lib/story_teller/stdlib.rb
CHANGED
data/lib/story_teller/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: inform-runtime
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.6.
|
|
4
|
+
version: 1.6.2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Nels Nelson
|
|
@@ -43,14 +43,14 @@ dependencies:
|
|
|
43
43
|
requirements:
|
|
44
44
|
- - "~>"
|
|
45
45
|
- !ruby/object:Gem::Version
|
|
46
|
-
version: 0.1.
|
|
46
|
+
version: 0.1.5
|
|
47
47
|
type: :runtime
|
|
48
48
|
prerelease: false
|
|
49
49
|
version_requirements: !ruby/object:Gem::Requirement
|
|
50
50
|
requirements:
|
|
51
51
|
- - "~>"
|
|
52
52
|
- !ruby/object:Gem::Version
|
|
53
|
-
version: 0.1.
|
|
53
|
+
version: 0.1.5
|
|
54
54
|
- !ruby/object:Gem::Dependency
|
|
55
55
|
name: logger
|
|
56
56
|
requirement: !ruby/object:Gem::Requirement
|