gamefic 2.2.0 → 2.2.3

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 361eaf767babb3c8b5d7e47616d326a85e1b42269da33c518de33f16f9568451
4
- data.tar.gz: 96f4d79e833f93c41714c5781cf863d7e0b8832e90c746f6bafe6164e10095b5
3
+ metadata.gz: a57ab533bcfbcbd650cf3ee60c5a639b3ddd40ad3ad96d0d4e42e6658547f3d9
4
+ data.tar.gz: 904c5211a6bde65f870ae8bab1218423afd6618c6ddd79c44b01174bb069256b
5
5
  SHA512:
6
- metadata.gz: b9ad845f6f0271da17b64268b911f5d3fe40fbfd7fd563b411f6ef02e15b8a117abcd924d3586072040f428aafc0a92827458639f9f2c0ba9fa4883af7f33e05
7
- data.tar.gz: 6f65996ac0ee16805763dd25fa89b1809a89acd0e44cb5d55f83ce22636aeadb6e43b733a15d44e6a397a636d5abde899c332d3601af60bcc4322a0c0ad1fb72
6
+ metadata.gz: afc3e6a06d6ac451827cea70db94b8c9e4b10c795dac9812df0c24f8c1e0ce654748dfae53c4c0565bbfff8abb5d2f853f866c1aac8b398c5cf8331ee3ea1795
7
+ data.tar.gz: dd790a5574ae81e91b61d01c7f18adba0abcd7e43650e72934329dfd84c9515adb54b6e1e0938814c9d6c6582d23801c66a470a28ae99700659fa0c462830660
data/.rubocop.yml CHANGED
@@ -10,7 +10,4 @@ Style/StringLiterals:
10
10
 
11
11
  Style/Documentation:
12
12
  Description: 'Document classes and non-namespace modules.'
13
- Enabled: false
14
-
15
- Style/MethodDefParentheses:
16
- Enabled: false
13
+ Enabled: false
data/CHANGELOG.md CHANGED
@@ -1,3 +1,12 @@
1
+ ## 2.2.3 - July 9, 2022
2
+ - Fix Ruby version incompatibilities
3
+
4
+ ## 2.2.2 - September 6, 2021
5
+ - Darkroom indexes non-static elements
6
+
7
+ ## 2.2.1 - September 5, 2021
8
+ - Retain unknown values in restored snapshots
9
+
1
10
  ## 2.2.0 - September 4, 2021
2
11
  - Dynamically inherit default attributes
3
12
 
@@ -3,9 +3,10 @@ module Gamefic
3
3
  #
4
4
  class Plot
5
5
  class Darkroom
6
- # @return [Gamefic::Plot]
6
+ # @return [Plot]
7
7
  attr_reader :plot
8
8
 
9
+ # @param plot [Plot]
9
10
  def initialize plot
10
11
  @plot = plot
11
12
  end
@@ -14,20 +15,9 @@ module Gamefic
14
15
  #
15
16
  # @return [Hash]
16
17
  def save
17
- index = plot.static + plot.players
18
- plot.to_serial(index)
19
18
  {
20
19
  'program' => {}, # @todo Metadata for version control, etc.
21
- 'index' => index.map do |i|
22
- if i.is_a?(Gamefic::Serialize)
23
- {
24
- 'class' => i.class.to_s,
25
- 'ivars' => i.serialize_instance_variables(index)
26
- }
27
- else
28
- i.to_serial(index)
29
- end
30
- end
20
+ 'index' => index.map { |obj| serialize_indexed(obj) }
31
21
  }
32
22
  end
33
23
 
@@ -75,6 +65,56 @@ module Gamefic
75
65
  end
76
66
  end
77
67
  end
68
+
69
+ private
70
+
71
+ def index
72
+ @index ||= begin
73
+ populate_full_index_from(plot)
74
+ Set.new(plot.static + plot.players).merge(full_index).to_a
75
+ end
76
+ end
77
+
78
+ def full_index
79
+ @full_index ||= Set.new
80
+ end
81
+
82
+ def populate_full_index_from(object)
83
+ return if full_index.include?(object)
84
+ if object.is_a?(Array) || object.is_a?(Set)
85
+ object.each { |ele| populate_full_index_from(ele) }
86
+ elsif object.is_a?(Hash)
87
+ object.each_pair do |k, v|
88
+ populate_full_index_from(k)
89
+ populate_full_index_from(v)
90
+ end
91
+ else
92
+ if object.is_a?(Gamefic::Serialize)
93
+ full_index.add object unless object.is_a?(Module) && object.name
94
+ object.instance_variables.each do |v|
95
+ next if object.class.excluded_from_serial.include?(v)
96
+ populate_full_index_from(object.instance_variable_get(v))
97
+ end
98
+ else
99
+ object.instance_variables.each do |v|
100
+ populate_full_index_from(object.instance_variable_get(v))
101
+ end
102
+ end
103
+ end
104
+ end
105
+
106
+ def serialize_indexed object
107
+ if object.is_a?(Gamefic::Serialize)
108
+ # Serialized objects in the index should be a full serialization.
109
+ # Serialize#to_serial rturns a reference to the indexed object.
110
+ {
111
+ 'class' => object.class.to_s,
112
+ 'ivars' => object.serialize_instance_variables(index)
113
+ }
114
+ else
115
+ object.to_serial(index)
116
+ end
117
+ end
78
118
  end
79
119
  end
80
120
  end
@@ -76,8 +76,9 @@ Gamefic::Scriptable.module_exec do
76
76
  instance = self
77
77
  theater ||= Object.new
78
78
  theater.instance_exec do
79
- define_singleton_method :method_missing do |symbol, *args, &block|
80
- instance.public_send :public_send, symbol, *args, &block
79
+ define_singleton_method :method_missing do |symbol, *args, **splat, &block|
80
+ result = instance.public_send :public_send, symbol, *args, **splat, &block
81
+ result
81
82
  end
82
83
  end
83
84
  theater.extend Gamefic::Serialize
@@ -15,7 +15,6 @@ module Gamefic
15
15
  'name' => name
16
16
  }
17
17
  else
18
- index.push self if self.is_a?(Gamefic::Serialize)
19
18
  {
20
19
  'class' => serialized_class(index),
21
20
  'ivars' => serialize_instance_variables(index)
@@ -89,7 +88,6 @@ class Object
89
88
  end
90
89
  raise "Unable to find class #{self['class']} #{self}" if klass.nil?
91
90
  object = klass.allocate
92
- index.push object if object.is_a?(Gamefic::Serialize)
93
91
  end
94
92
  end
95
93
  self['ivars'].each_pair do |k, v|
@@ -103,7 +101,6 @@ class Object
103
101
  return index.index(match[1].to_i) if match
104
102
  match = self.match(/#<SYM:([a-z0-9_\?\!]+)>/i)
105
103
  return match[1].to_sym if match
106
- return nil if self == '#<UNKNOWN>'
107
104
  self
108
105
  else
109
106
  # true, false, or nil
@@ -19,7 +19,7 @@ module Gamefic
19
19
  @next_cue = next_cue
20
20
  @concluded = false
21
21
  @more = more
22
- configure more
22
+ configure **more
23
23
  run_scripts
24
24
  playbook.freeze
25
25
  self.introduce introduce unless introduce.nil?
@@ -97,7 +97,7 @@ module Gamefic
97
97
  # Subclasses can override this method to handle additional configuration
98
98
  # options.
99
99
  #
100
- def configure more
100
+ def configure **more
101
101
  end
102
102
  end
103
103
  end
@@ -1,3 +1,3 @@
1
1
  module Gamefic
2
- VERSION = '2.2.0'
2
+ VERSION = '2.2.3'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gamefic
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.2.0
4
+ version: 2.2.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Fred Snyder
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-09-04 00:00:00.000000000 Z
11
+ date: 2022-07-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -149,7 +149,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
149
149
  - !ruby/object:Gem::Version
150
150
  version: '0'
151
151
  requirements: []
152
- rubygems_version: 3.1.6
152
+ rubygems_version: 3.3.7
153
153
  signing_key:
154
154
  specification_version: 4
155
155
  summary: Gamefic