love_letter_application 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +11 -0
- data/.rspec +3 -0
- data/.travis.yml +7 -0
- data/Gemfile +5 -0
- data/Gemfile.lock +91 -0
- data/LICENSE.txt +21 -0
- data/README.md +39 -0
- data/Rakefile +6 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/lib/love_letter_application.rb +7 -0
- data/lib/love_letter_application/action_creator.rb +16 -0
- data/lib/love_letter_application/actions/clown.rb +45 -0
- data/lib/love_letter_application/actions/general.rb +29 -0
- data/lib/love_letter_application/actions/knight.rb +31 -0
- data/lib/love_letter_application/actions/marquess.rb +28 -0
- data/lib/love_letter_application/actions/play_card.rb +33 -0
- data/lib/love_letter_application/actions/priestess.rb +36 -0
- data/lib/love_letter_application/actions/princess.rb +32 -0
- data/lib/love_letter_application/actions/soldier.rb +47 -0
- data/lib/love_letter_application/actions/wizard.rb +31 -0
- data/lib/love_letter_application/execute_action.rb +21 -0
- data/lib/love_letter_application/love_letter_imports.rb +641 -0
- data/lib/love_letter_application/models/card.rb +23 -0
- data/lib/love_letter_application/models/effects/discard_and_draw.rb +51 -0
- data/lib/love_letter_application/models/effects/eliminate_player.rb +43 -0
- data/lib/love_letter_application/models/effects/make_player_not_targetable.rb +44 -0
- data/lib/love_letter_application/models/effects/next_player_draw_card.rb +45 -0
- data/lib/love_letter_application/models/effects/play_card.rb +48 -0
- data/lib/love_letter_application/models/effects/round_complete.rb +29 -0
- data/lib/love_letter_application/models/effects/switch_hands.rb +50 -0
- data/lib/love_letter_application/models/game_board.rb +28 -0
- data/lib/love_letter_application/models/player.rb +36 -0
- data/lib/love_letter_application/results/eliminate_player.rb +43 -0
- data/lib/love_letter_application/results/nodes/card_played_node.rb +15 -0
- data/lib/love_letter_application/results/nodes/card_viewed_node.rb +21 -0
- data/lib/love_letter_application/results/nodes/discard_card_node.rb +20 -0
- data/lib/love_letter_application/results/nodes/drawn_card_node.rb +20 -0
- data/lib/love_letter_application/results/nodes/eliminated_player_node.rb +19 -0
- data/lib/love_letter_application/results/nodes/hands_switched_node.rb +22 -0
- data/lib/love_letter_application/results/nodes/knight_drawn_node.rb +15 -0
- data/lib/love_letter_application/results/nodes/knight_victory_node.rb +20 -0
- data/lib/love_letter_application/results/nodes/log_node.rb +20 -0
- data/lib/love_letter_application/results/nodes/next_player_node.rb +19 -0
- data/lib/love_letter_application/results/nodes/play_card_with_no_args_option_node.rb +19 -0
- data/lib/love_letter_application/results/nodes/play_card_with_player_id_and_card_id_option_node.rb +21 -0
- data/lib/love_letter_application/results/nodes/play_card_with_player_id_option_node.rb +20 -0
- data/lib/love_letter_application/results/nodes/player_not_targetable_node.rb +14 -0
- data/lib/love_letter_application/results/nodes/player_victory_node.rb +20 -0
- data/lib/love_letter_application/results/nodes/players_and_scores_node.rb +44 -0
- data/lib/love_letter_application/results/nodes/princess_discarded_node.rb +19 -0
- data/lib/love_letter_application/results/nodes/result_game_board_node.rb +19 -0
- data/lib/love_letter_application/results/process_correct_guess.rb +22 -0
- data/lib/love_letter_application/results/process_draw_after_discard.rb +26 -0
- data/lib/love_letter_application/results/process_incorrect_guess.rb +20 -0
- data/lib/love_letter_application/results/process_knight_showdown.rb +50 -0
- data/lib/love_letter_application/results/process_next_player_turn.rb +57 -0
- data/lib/love_letter_application/results/process_next_turn_options.rb +53 -0
- data/lib/love_letter_application/results/process_princess_discarded.rb +23 -0
- data/lib/love_letter_application/results/process_resolve_wizard.rb +36 -0
- data/lib/love_letter_application/results/process_round_complete_by_depleted_deck.rb +50 -0
- data/lib/love_letter_application/results/process_round_complete_by_elimination.rb +26 -0
- data/lib/love_letter_application/results/process_switch_hands.rb +51 -0
- data/lib/love_letter_application/results/yield_to_block.rb +12 -0
- data/lib/love_letter_application/types/card.rb +20 -0
- data/lib/love_letter_application/types/game_board.rb +59 -0
- data/lib/love_letter_application/types/player.rb +25 -0
- data/lib/love_letter_application/validator/base.rb +19 -0
- data/lib/love_letter_application/validator/builder.rb +50 -0
- data/lib/love_letter_application/validator/get_legal_card_ids.rb +23 -0
- data/lib/love_letter_application/validator/get_legal_card_ids/marquess.rb +18 -0
- data/lib/love_letter_application/validator/play_card.rb +21 -0
- data/lib/love_letter_application/validator/play_card/builder.rb +23 -0
- data/lib/love_letter_application/validator/play_card/no_options.rb +19 -0
- data/lib/love_letter_application/validator/play_card/select_target_player.rb +30 -0
- data/lib/love_letter_application/validator/play_card/select_target_player/builder.rb +44 -0
- data/lib/love_letter_application/validator/play_card/soldier.rb +39 -0
- data/lib/love_letter_application/validator/play_card/soldier/builder.rb +49 -0
- data/lib/love_letter_application/validator/validate_card_id.rb +23 -0
- data/lib/love_letter_application/version.rb +3 -0
- data/love_letter_application.gemspec +43 -0
- metadata +278 -0
@@ -0,0 +1,25 @@
|
|
1
|
+
#frozen string_literal: true
|
2
|
+
|
3
|
+
require 'dry-initializer'
|
4
|
+
require 'love_letter_application/types/card'
|
5
|
+
|
6
|
+
module LoveLetterApplication
|
7
|
+
module Types
|
8
|
+
i = Class::new do
|
9
|
+
@@has_player_methods = ::Types.Interface(:id, :seat, :played_cards, :hand, :active?)
|
10
|
+
|
11
|
+
def call(player)
|
12
|
+
@@has_player_methods.(player)
|
13
|
+
::Types::Coercible::Integer.call(player.id)
|
14
|
+
::Types::Coercible::Integer.call(player.seat)
|
15
|
+
::Types::Array::of(LoveLetterApplication::Types::Card).call(player.played_cards)
|
16
|
+
::Types::Array::of(LoveLetterApplication::Types::Card).call(player.hand)
|
17
|
+
::Types::Strict::Bool.call(player.active?)
|
18
|
+
player
|
19
|
+
end
|
20
|
+
end.new
|
21
|
+
|
22
|
+
LoveLetterApplication::Types::Player = ::Types::Constructor(Class){|value| i.call(value)}
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
@@ -0,0 +1,19 @@
|
|
1
|
+
#frozen string_literal: true
|
2
|
+
|
3
|
+
require 'dry-initializer'
|
4
|
+
|
5
|
+
module LoveLetterApplication
|
6
|
+
class Validator
|
7
|
+
class Base
|
8
|
+
extend Dry::Initializer
|
9
|
+
option :validate_input, type: Types.Interface(:call)
|
10
|
+
option :wrap_result, type: Types.Interface(:call)
|
11
|
+
|
12
|
+
def call(action_hash)
|
13
|
+
result = validate_input.(action_hash)
|
14
|
+
return result if result.failure?
|
15
|
+
wrap_result.(result)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
@@ -0,0 +1,50 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'dry-initializer'
|
4
|
+
require 'love_letter_application/validator/play_card'
|
5
|
+
|
6
|
+
module LoveLetterApplication
|
7
|
+
module Validator
|
8
|
+
class Builder
|
9
|
+
include Dry::Initializer.define -> do
|
10
|
+
option :all_card_validator_builders, type: ::Types::ArrayOfCallable
|
11
|
+
option :get_legal_card_ids, type: ::Types::Callable
|
12
|
+
end
|
13
|
+
|
14
|
+
def call(game_board:, last_action_id:)
|
15
|
+
current_player = game_board.players.find do |player|
|
16
|
+
player.id.to_i.eql?(game_board.current_player_id.to_i)
|
17
|
+
end
|
18
|
+
|
19
|
+
validate_player_action_and_user = GameValidator::Validator::Base::new(
|
20
|
+
legal_options: ['play_card'],
|
21
|
+
current_player_id: game_board.current_player_id,
|
22
|
+
last_action_id: last_action_id)
|
23
|
+
|
24
|
+
legal_card_ids = get_legal_card_ids.(card_list: current_player.hand)
|
25
|
+
|
26
|
+
validate_card_id = ValidateCardId::new(legal_card_ids: legal_card_ids)
|
27
|
+
|
28
|
+
card_validators = all_card_validator_builders
|
29
|
+
.map
|
30
|
+
.with_index{|v, k| [k, v]}
|
31
|
+
.to_h
|
32
|
+
.select{|k, v| legal_card_ids.include?(k)}
|
33
|
+
.map{|k, v| [k, v.call(game_board)]}
|
34
|
+
.to_h
|
35
|
+
|
36
|
+
play_card = PlayCard::new(
|
37
|
+
validate_card_id: validate_card_id,
|
38
|
+
full_validator_for: card_validators)
|
39
|
+
|
40
|
+
full_validator_for =
|
41
|
+
{['play_card', true] => play_card, ['play_card', false] => play_card}
|
42
|
+
|
43
|
+
validate_input = GameValidator::Validator::new(
|
44
|
+
validate_player_action_and_user: validate_player_action_and_user,
|
45
|
+
full_validator_for: full_validator_for)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'dry-initializer'
|
4
|
+
|
5
|
+
module LoveLetterApplication
|
6
|
+
module Validator
|
7
|
+
class GetLegalCardIds
|
8
|
+
include Dry::Initializer.define -> do
|
9
|
+
option :validate_card_combo_for, type: ::Types::ArrayOfCallable
|
10
|
+
end
|
11
|
+
|
12
|
+
def call(card_list:)
|
13
|
+
legal_card_ids = ::Types::ArrayOfStrictInteger.call(card_list.map{|c| c.id.to_i})
|
14
|
+
card_list.uniq.each do |card|
|
15
|
+
legal_card_ids = legal_card_ids
|
16
|
+
.&(validate_card_combo_for[card.id.to_i].call(card_list: card_list))
|
17
|
+
end
|
18
|
+
legal_card_ids.sort
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module LoveLetterApplication
|
4
|
+
module Validator
|
5
|
+
class GetLegalCardIds
|
6
|
+
class Marquess
|
7
|
+
def call(card_list:)
|
8
|
+
if card_list.map{|card| card.rank.to_i}.sum >= 12
|
9
|
+
card_list.map{|card| card.id.to_i}.select{|card_id| card_id.eql?(7)}
|
10
|
+
else
|
11
|
+
card_list.map{|card| card.id.to_i}
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
@@ -0,0 +1,21 @@
|
|
1
|
+
#frozen string_literal: true
|
2
|
+
|
3
|
+
require 'dry-initializer'
|
4
|
+
|
5
|
+
module LoveLetterApplication
|
6
|
+
module Validator
|
7
|
+
class PlayCard
|
8
|
+
extend Dry::Initializer
|
9
|
+
option :validate_card_id, type: ::Types::Callable
|
10
|
+
option :full_validator_for, type: ::Types::Hash
|
11
|
+
|
12
|
+
def call(action_hash)
|
13
|
+
result = validate_card_id.(action_hash)
|
14
|
+
return result if result.failure?
|
15
|
+
validate = full_validator_for[result[:card_id]]
|
16
|
+
validate.(action_hash)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
@@ -0,0 +1,23 @@
|
|
1
|
+
#frozen string_literal: true
|
2
|
+
|
3
|
+
require 'dry-initializer'
|
4
|
+
require 'game_validator/validator/validate_to_action'
|
5
|
+
|
6
|
+
module LoveLetterApplication
|
7
|
+
module Validator
|
8
|
+
class PlayCard
|
9
|
+
class Builder
|
10
|
+
extend Dry::Initializer
|
11
|
+
option :build_raw_validator, type: ::Types::Callable
|
12
|
+
option :wrap_result, type: ::Types::Callable
|
13
|
+
|
14
|
+
def call(model)
|
15
|
+
GameValidator::Validator::ValidateToAction::new(
|
16
|
+
validate: build_raw_validator.(model),
|
17
|
+
wrap: wrap_result)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
@@ -0,0 +1,19 @@
|
|
1
|
+
#frozen string_literal: true
|
2
|
+
|
3
|
+
require 'dry-validation'
|
4
|
+
|
5
|
+
module LoveLetterApplication
|
6
|
+
module Validator
|
7
|
+
class PlayCard
|
8
|
+
class NoOptions < Dry::Validation::Contract
|
9
|
+
params{}
|
10
|
+
|
11
|
+
def accept(visitor, **args)
|
12
|
+
visitor = ::Types.Interface(:handle_no_options_validator).call(visitor)
|
13
|
+
visitor.handle_no_options_validator(self, args)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
@@ -0,0 +1,30 @@
|
|
1
|
+
#frozen string_literal: true
|
2
|
+
|
3
|
+
require 'dry-validation'
|
4
|
+
|
5
|
+
module LoveLetterApplication
|
6
|
+
module Validator
|
7
|
+
class PlayCard
|
8
|
+
class SelectTargetPlayer < Dry::Validation::Contract
|
9
|
+
option :legal_target_player_ids, type: ::Types::Array.of(::Types::Coercible::Integer)
|
10
|
+
|
11
|
+
params do
|
12
|
+
required(:target_player_id).filled(:integer)
|
13
|
+
end
|
14
|
+
|
15
|
+
rule(:target_player_id) do
|
16
|
+
if !legal_target_player_ids.include?(values[:target_player_id])
|
17
|
+
key.failure({text: "target_player_id '#{values[:target_player_id]}' is not permitted",
|
18
|
+
status: 422})
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def accept(visitor, **args)
|
23
|
+
visitor = ::Types.Interface(:handle_select_player_id_validator).call(visitor)
|
24
|
+
visitor.handle_select_player_id_validator(self, args)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
@@ -0,0 +1,44 @@
|
|
1
|
+
#frozen string_literal: true
|
2
|
+
|
3
|
+
require 'dry-initializer'
|
4
|
+
require 'dry-validation'
|
5
|
+
require 'love_letter_application/validator/play_card/select_target_player'
|
6
|
+
|
7
|
+
module LoveLetterApplication
|
8
|
+
module Validator
|
9
|
+
class PlayCard
|
10
|
+
class SelectTargetPlayer < Dry::Validation::Contract
|
11
|
+
class Builder
|
12
|
+
extend Dry::Initializer
|
13
|
+
option :target_self?, as: :target_self, type: ::Types::Strict::Bool
|
14
|
+
option :no_options_validator, type: ::Types::Callable
|
15
|
+
|
16
|
+
def call(model)
|
17
|
+
legal_target_player_ids = get_legal_target_player_ids(model)
|
18
|
+
if legal_target_player_ids.empty?
|
19
|
+
no_options_validator
|
20
|
+
else
|
21
|
+
LoveLetterApplication::Validator::PlayCard::SelectTargetPlayer::new(
|
22
|
+
legal_target_player_ids: legal_target_player_ids)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
def get_legal_target_player_ids(model)
|
28
|
+
legal_target_players = model.players
|
29
|
+
.select(&:active?) # must not be an eliminated player
|
30
|
+
.select(&:targetable?) # can't have immunity to targeting (e.g. with priestess)
|
31
|
+
if !target_self?
|
32
|
+
legal_target_players = legal_target_players
|
33
|
+
.reject{|p| p.id.to_i.eql?(model.current_player_id.to_i)} # can't target self
|
34
|
+
end
|
35
|
+
legal_target_players.map{|p| p.id.to_i}
|
36
|
+
end
|
37
|
+
|
38
|
+
def target_self?;@target_self;end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
@@ -0,0 +1,39 @@
|
|
1
|
+
#frozen string_literal: true
|
2
|
+
|
3
|
+
require 'dry-validation'
|
4
|
+
|
5
|
+
module LoveLetterApplication
|
6
|
+
module Validator
|
7
|
+
class PlayCard
|
8
|
+
class Soldier < Dry::Validation::Contract
|
9
|
+
option :legal_target_player_ids, type: ::Types::Array.of(::Types::Coercible::Integer)
|
10
|
+
option :legal_target_card_ids, type: ::Types::Array.of(::Types::Coercible::Integer)
|
11
|
+
|
12
|
+
params do
|
13
|
+
required(:target_player_id).filled(:integer)
|
14
|
+
required(:target_card_id).filled(:integer)
|
15
|
+
end
|
16
|
+
|
17
|
+
rule(:target_player_id) do
|
18
|
+
if !legal_card_ids.include?(values[:target_player_id])
|
19
|
+
key.failure({text: "target_player_id '#{values[:target_player_id]}' is not permitted",
|
20
|
+
status: 422})
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
rule(:target_card_id) do
|
25
|
+
if !legal_card_ids.include?(values[:target_card_id])
|
26
|
+
key.failure({text: "target_card_id '#{values[:target_card_id]}' is not permitted",
|
27
|
+
status: 422})
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def accept(visitor, **args)
|
32
|
+
visitor = ::Types.Interface(:handle_soldier_validator).call(visitor)
|
33
|
+
visitor.handle_soldier_validator(self, args)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
@@ -0,0 +1,49 @@
|
|
1
|
+
#frozen string_literal: true
|
2
|
+
|
3
|
+
require 'dry-validation'
|
4
|
+
require 'dry-initializer'
|
5
|
+
require 'love_letter_application/validator/play_card/soldier'
|
6
|
+
|
7
|
+
module LoveLetterApplication
|
8
|
+
module Validator
|
9
|
+
class PlayCard
|
10
|
+
class Soldier < Dry::Validation::Contract
|
11
|
+
class Builder
|
12
|
+
include Dry::Initializer.define -> do
|
13
|
+
option :no_options_validator, type: ::Types::Callable
|
14
|
+
end
|
15
|
+
|
16
|
+
def call(model)
|
17
|
+
card_id = LoveLetterApplication::Actions::Soldier::id,
|
18
|
+
legal_target_player_ids = get_legal_target_player_ids(model)
|
19
|
+
if legal_target_player_ids.empty?
|
20
|
+
no_options_validator
|
21
|
+
else
|
22
|
+
LoveLetterApplication::Validator::PlayCard::Soldier::new(
|
23
|
+
legal_target_player_ids: legal_target_player_ids,
|
24
|
+
legal_target_card_ids: get_legal_target_card_ids(model))
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
def get_legal_target_player_ids(model)
|
30
|
+
model.players
|
31
|
+
.select(&:active?) # must not be an eliminated player
|
32
|
+
.select(&:targetable?) # can't have immunity to targeting (e.g. with priestess)
|
33
|
+
.reject{|p| p.id.to_i.eql?(model.current_player_id.to_i)} # can't target self
|
34
|
+
.map{|p| p.id.to_i}
|
35
|
+
end
|
36
|
+
|
37
|
+
def get_legal_target_card_ids(model)
|
38
|
+
legal_target_cards = [model.set_aside_card] + model.draw_pile
|
39
|
+
model.players.each{|p| legal_target_cards += p.played_cards + p.hand}
|
40
|
+
legal_target_cards.select(&:targetable?)
|
41
|
+
.map{|c| c.id.to_i}
|
42
|
+
.uniq
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
@@ -0,0 +1,23 @@
|
|
1
|
+
#frozen string_literal: true
|
2
|
+
|
3
|
+
require 'dry-validation'
|
4
|
+
|
5
|
+
module LoveLetterApplication
|
6
|
+
module Validator
|
7
|
+
class ValidateCardId < Dry::Validation::Contract
|
8
|
+
option :legal_card_ids, type: ::Types::Array.of(::Types::Coercible::Integer)
|
9
|
+
|
10
|
+
params do
|
11
|
+
required(:player_action).filled(:string, eql?: 'play_card')
|
12
|
+
required(:card_id).filled(:integer)
|
13
|
+
end
|
14
|
+
|
15
|
+
rule(:card_id) do
|
16
|
+
if !legal_card_ids.include?(values[:card_id])
|
17
|
+
key.failure({text: "card_id '#{values[:card_id]}' is not permitted", status: 400})
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
@@ -0,0 +1,43 @@
|
|
1
|
+
lib = File.expand_path("lib", __dir__)
|
2
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
3
|
+
require "love_letter_application/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |spec|
|
6
|
+
spec.name = 'love_letter_application'
|
7
|
+
spec.version = LoveLetterApplication::VERSION
|
8
|
+
spec.authors = ['Colin Horner']
|
9
|
+
spec.email = ['25807014+cmcolinh@users.noreply.github.com']
|
10
|
+
|
11
|
+
spec.summary = 'Love Letter application'
|
12
|
+
spec.description = 'Runs the application'
|
13
|
+
#spec.homepage = "TODO: Put your gem's website or public repo URL here."
|
14
|
+
spec.license = 'MIT'
|
15
|
+
|
16
|
+
#spec.metadata["allowed_push_host"] = "TODO: Set to 'http://mygemserver.com'"
|
17
|
+
|
18
|
+
#spec.metadata["homepage_uri"] = spec.homepage
|
19
|
+
#spec.metadata["source_code_uri"] = "TODO: Put your gem's public repo URL here."
|
20
|
+
#spec.metadata["changelog_uri"] = "TODO: Put your gem's CHANGELOG.md URL here."
|
21
|
+
|
22
|
+
# Specify which files should be added to the gem when it is released.
|
23
|
+
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
24
|
+
spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
|
25
|
+
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
26
|
+
end
|
27
|
+
spec.bindir = 'exe'
|
28
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
29
|
+
spec.require_paths = ['lib']
|
30
|
+
|
31
|
+
spec.add_development_dependency 'bundler', '~> 2.0'
|
32
|
+
spec.add_development_dependency 'change_orders'
|
33
|
+
spec.add_development_dependency 'dry-auto_inject'
|
34
|
+
spec.add_development_dependency 'dry-initializer'
|
35
|
+
spec.add_development_dependency 'dry-monads'
|
36
|
+
spec.add_development_dependency 'dry-struct'
|
37
|
+
spec.add_development_dependency 'dry-types'
|
38
|
+
spec.add_development_dependency 'dry-validation'
|
39
|
+
spec.add_development_dependency 'game_validator', '~> 0.6.0'
|
40
|
+
spec.add_development_dependency 'rake', '~> 10.0'
|
41
|
+
spec.add_development_dependency 'rspec', '~> 3.0'
|
42
|
+
end
|
43
|
+
|