gamefic 2.2.0 → 2.2.3

Sign up to get free protection for your applications and to get access to all the features.
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