gamefic-standard 3.2.4 → 3.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (57) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +7 -0
  3. data/Rakefile +5 -2
  4. data/gamefic-standard.gemspec +13 -11
  5. data/lib/gamefic-standard/actions/attack.rb +23 -19
  6. data/lib/gamefic-standard/actions/close.rb +16 -10
  7. data/lib/gamefic-standard/actions/drop.rb +31 -16
  8. data/lib/gamefic-standard/actions/enter.rb +32 -26
  9. data/lib/gamefic-standard/actions/give.rb +41 -0
  10. data/lib/gamefic-standard/actions/go.rb +47 -43
  11. data/lib/gamefic-standard/actions/insert.rb +42 -28
  12. data/lib/gamefic-standard/actions/inventory.rb +13 -8
  13. data/lib/gamefic-standard/actions/leave.rb +44 -37
  14. data/lib/gamefic-standard/actions/lock.rb +22 -16
  15. data/lib/gamefic-standard/actions/look.rb +123 -104
  16. data/lib/gamefic-standard/actions/move.rb +18 -14
  17. data/lib/gamefic-standard/actions/nil.rb +62 -52
  18. data/lib/gamefic-standard/actions/open.rb +34 -24
  19. data/lib/gamefic-standard/actions/place.rb +35 -20
  20. data/lib/gamefic-standard/actions/pronouns.rb +26 -18
  21. data/lib/gamefic-standard/actions/quit.rb +17 -7
  22. data/lib/gamefic-standard/actions/repeat.rb +17 -9
  23. data/lib/gamefic-standard/actions/save-restore-undo.rb +19 -11
  24. data/lib/gamefic-standard/actions/search.rb +31 -21
  25. data/lib/gamefic-standard/actions/take.rb +47 -34
  26. data/lib/gamefic-standard/actions/talk.rb +45 -31
  27. data/lib/gamefic-standard/actions/unlock.rb +31 -21
  28. data/lib/gamefic-standard/actions/wait.rb +15 -5
  29. data/lib/gamefic-standard/actions.rb +33 -0
  30. data/lib/gamefic-standard/articles.rb +45 -37
  31. data/lib/gamefic-standard/enterable.rb +13 -0
  32. data/lib/gamefic-standard/entities/character.rb +3 -0
  33. data/lib/gamefic-standard/entities/container.rb +2 -2
  34. data/lib/gamefic-standard/entities/door.rb +13 -13
  35. data/lib/gamefic-standard/entities/portal.rb +1 -1
  36. data/lib/gamefic-standard/entities/receptacle.rb +1 -1
  37. data/lib/gamefic-standard/entities/room.rb +20 -5
  38. data/lib/gamefic-standard/entities/supporter.rb +1 -1
  39. data/lib/gamefic-standard/entities/thing.rb +1 -5
  40. data/lib/gamefic-standard/introduction.rb +14 -4
  41. data/lib/gamefic-standard/lockable.rb +36 -0
  42. data/lib/gamefic-standard/openable.rb +33 -0
  43. data/lib/gamefic-standard/pathfinder.rb +75 -55
  44. data/lib/gamefic-standard/standardized.rb +65 -0
  45. data/lib/gamefic-standard/version.rb +1 -1
  46. data/lib/gamefic-standard.rb +10 -3
  47. metadata +36 -13
  48. data/lib/gamefic-standard/give.rb +0 -21
  49. data/lib/gamefic-standard/grammar/attributes.rb +0 -37
  50. data/lib/gamefic-standard/grammar/pronoun.rb +0 -101
  51. data/lib/gamefic-standard/grammar.rb +0 -2
  52. data/lib/gamefic-standard/modules/enterable.rb +0 -9
  53. data/lib/gamefic-standard/modules/lockable.rb +0 -34
  54. data/lib/gamefic-standard/modules/openable.rb +0 -19
  55. data/lib/gamefic-standard/modules/standardized.rb +0 -57
  56. data/lib/gamefic-standard/modules.rb +0 -6
  57. data/spec-opal/spec_helper.rb +0 -32
@@ -1,101 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Grammar
4
- # Functions to select pronouns based on an entity's attributes, such as
5
- # gender.
6
- #
7
- module Pronoun
8
- extend self
9
-
10
- # @param entity [#person, #plural?, #gender]
11
- # @return [String]
12
- def subjective(entity)
13
- map(entity)[:subjective]
14
- end
15
- alias they subjective
16
- alias he subjective
17
- alias she subjective
18
-
19
- # @param entity [#person, #plural?, #gender]
20
- # @return [String]
21
- def subjective_(entity)
22
- subjective(entity).cap_first
23
- end
24
- alias they_ subjective_
25
- alias he_ subjective_
26
- alias she_ subjective_
27
-
28
- # @param entity [#person, #plural?, #gender]
29
- # @return [String]
30
- def objective(entity)
31
- map(entity)[:objective]
32
- end
33
- alias them objective
34
-
35
- # @param entity [#person, #plural?, #gender]
36
- # @return [String]
37
- def objective_(entity)
38
- objective(entity).cap_first
39
- end
40
- alias them_ objective_
41
-
42
- # @param entity [#person, #plural?, #gender]
43
- # @return [String]
44
- def possessive(entity)
45
- map(entity)[:possessive]
46
- end
47
- alias their possessive
48
-
49
- # @param entity [#person, #plural?, #gender]
50
- # @return [String]
51
- def possessive_(entity)
52
- possessive(entity).cap_first
53
- end
54
- alias their_ possessive_
55
-
56
- # @param entity [#person, #plural?, #gender]
57
- # @return [String]
58
- def reflexive(entity)
59
- map(entity)[:reflexive]
60
- end
61
- alias themselves reflexive
62
- alias themself reflexive
63
-
64
- # @param entity [#person, #plural?, #gender]
65
- # @return [String]
66
- def reflexive_(entity)
67
- reflexive(entity).cap_first
68
- end
69
- alias themselves_ reflexive_
70
- alias themself_ reflexive_
71
-
72
- # @param entity [#person, #plural?, #gender]
73
- # @return [Hash]
74
- def map(entity)
75
- plurality = (entity.plural? ? :plural : :singular)
76
- maps[[(entity.person || 3), plurality, entity.gender]] ||
77
- maps[[(entity.person || 3), plurality]]
78
- end
79
-
80
- private
81
-
82
- def maps
83
- @maps ||= {
84
- [1, :singular] => Hash[map_keys.zip(%w[I me my myself])],
85
- [2, :singular] => Hash[map_keys.zip(%w[you you your yourself])],
86
- [3, :singular] => Hash[map_keys.zip(%w[it it its itself])],
87
- [3, :singular, :male] => Hash[map_keys.zip(%w[he him his himself])],
88
- [3, :singular, :female] => Hash[map_keys.zip(%w[she her her herself])],
89
- [3, :singular, :other] => Hash[map_keys.zip(%w[they them their themselves])],
90
- [3, :singular, :neutral] => Hash[map_keys.zip(%w[it it its itself])],
91
- [1, :plural] => Hash[map_keys.zip(%w[we us our ourselves])],
92
- [2, :plural] => Hash[map_keys.zip(%w[you you your yourselves])],
93
- [3, :plural] => Hash[map_keys.zip(%w[they them their themselves])]
94
- }
95
- end
96
-
97
- def map_keys
98
- @map_keys ||= %i[subjective objective possessive reflexive]
99
- end
100
- end
101
- end
@@ -1,2 +0,0 @@
1
- require 'gamefic-standard/grammar/attributes'
2
- require 'gamefic-standard/grammar/pronoun'
@@ -1,9 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Enterable
4
- attr_writer :enterable
5
-
6
- def enterable?
7
- @enterable ||= false
8
- end
9
- end
@@ -1,34 +0,0 @@
1
- # A module for entities that are both openable and lockable.
2
- #
3
- module Lockable
4
- include Openable
5
-
6
- attr_accessor :lock_key
7
-
8
- def locked=(bool)
9
- @locked = bool
10
- if @locked == true
11
- @open = false
12
- end
13
- @locked
14
- end
15
-
16
- def open=(bool)
17
- @open = bool
18
- @locked = false if @open == true
19
- @open
20
- end
21
-
22
- def locked?
23
- @locked ||= false
24
- end
25
-
26
- def unlocked?
27
- !locked?
28
- end
29
-
30
- def lock_key?
31
- !@lock_key.nil?
32
- end
33
- alias has_lock_key? lock_key?
34
- end
@@ -1,19 +0,0 @@
1
- # A module for entities that are openable.
2
- #
3
- module Openable
4
- def open= bool
5
- @open = bool
6
- end
7
-
8
- def open?
9
- @open ||= false
10
- end
11
-
12
- def closed?
13
- !open?
14
- end
15
-
16
- def accessible?
17
- open?
18
- end
19
- end
@@ -1,57 +0,0 @@
1
- module Standardized
2
- # @return [Boolean]
3
- attr_writer :itemized
4
-
5
- # @return [Boolean]
6
- attr_writer :portable
7
-
8
- # An optional description to use when itemizing entities in room
9
- # descriptions. The locale_description will be used instead of adding
10
- # the entity's name to a list.
11
- #
12
- # @return [String, nil]
13
- attr_accessor :locale_description
14
-
15
- # Itemized entities are automatically listed in room descriptions.
16
- #
17
- # @return [Boolean]
18
- def itemized?
19
- @itemized
20
- end
21
-
22
- # Portable entities can be taken with TAKE actions.
23
- #
24
- # @return [Boolean]
25
- def portable?
26
- @portable
27
- end
28
-
29
- # @return [Boolean]
30
- def attached?
31
- @attached ||= false
32
- end
33
-
34
- # @param bool [Boolean]
35
- def attached=(bool)
36
- @attached = if parent.nil?
37
- # @todo Log attachment failure
38
- false
39
- else
40
- bool
41
- end
42
- end
43
-
44
- def parent=(new_parent)
45
- self.attached = false unless new_parent == parent
46
- super
47
- end
48
-
49
- # The entity's parent room (i.e., the closest ascendant that is a Room).
50
- #
51
- # @return [Room]
52
- def room
53
- ascendant = parent
54
- ascendant = ascendant.parent until ascendant.is_a?(Room) || ascendant.nil?
55
- ascendant
56
- end
57
- end
@@ -1,6 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'gamefic-standard/modules/standardized'
4
- require 'gamefic-standard/modules/enterable'
5
- require 'gamefic-standard/modules/openable'
6
- require 'gamefic-standard/modules/lockable'
@@ -1,32 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'gamefic-standard'
4
-
5
- class TestPlot < Gamefic::Plot
6
- include Gamefic::Standard
7
- end
8
-
9
- RSpec.configure do |config|
10
- # Run specs in random order to surface order dependencies. If you find an
11
- # order dependency and want to debug it, you can fix the order by providing
12
- # the seed, which is printed after each run.
13
- # --seed 1234
14
- config.order = :random
15
-
16
- # Seed global randomization in this process using the `--seed` CLI option.
17
- # Setting this allows you to use `--seed` to deterministically reproduce
18
- # test failures related to randomization by passing the same `--seed` value
19
- # as the one that triggered the failure.
20
- Kernel.srand config.seed
21
-
22
- # Disable RSpec exposing methods globally on `Module` and `main`
23
- config.disable_monkey_patching!
24
-
25
- config.expect_with :rspec do |c|
26
- c.syntax = :expect
27
- end
28
-
29
- config.after :each do
30
- TestPlot.blocks.clear
31
- end
32
- end