kaiser 0.0.0 → 0.6.4
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 +5 -5
- data/README.md +129 -0
- data/exe/kaiser +87 -0
- data/lib/kaiser/after_dotter.rb +23 -0
- data/lib/kaiser/cli.rb +624 -0
- data/lib/kaiser/cli_options.rb +14 -0
- data/lib/kaiser/cmds/attach.rb +23 -0
- data/lib/kaiser/cmds/db_load.rb +29 -0
- data/lib/kaiser/cmds/db_reset.rb +22 -0
- data/lib/kaiser/cmds/db_reset_hard.rb +21 -0
- data/lib/kaiser/cmds/db_save.rb +26 -0
- data/lib/kaiser/cmds/deinit.rb +22 -0
- data/lib/kaiser/cmds/down.rb +21 -0
- data/lib/kaiser/cmds/init.rb +39 -0
- data/lib/kaiser/cmds/login.rb +21 -0
- data/lib/kaiser/cmds/logs.rb +19 -0
- data/lib/kaiser/cmds/root.rb +21 -0
- data/lib/kaiser/cmds/set.rb +73 -0
- data/lib/kaiser/cmds/show.rb +40 -0
- data/lib/kaiser/cmds/shutdown.rb +26 -0
- data/lib/kaiser/cmds/up.rb +43 -0
- data/lib/kaiser/command_runner.rb +50 -0
- data/lib/kaiser/config.rb +81 -0
- data/lib/kaiser/databases/mysql.rb +45 -0
- data/lib/kaiser/databases/postgres.rb +46 -0
- data/lib/kaiser/docker_control.rb +10 -0
- data/lib/kaiser/dotter.rb +21 -0
- data/lib/kaiser/error.rb +14 -0
- data/lib/kaiser/kaiserfile.rb +107 -0
- data/lib/kaiser/plugin.rb +68 -0
- data/lib/kaiser/plugins/database.rb +30 -0
- data/lib/kaiser/plugins/git_submodule.rb +23 -0
- data/lib/kaiser/service.rb +22 -0
- data/lib/kaiser/version.rb +5 -0
- data/lib/kaiser.rb +52 -5
- metadata +178 -17
@@ -0,0 +1,107 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Kaiser
|
4
|
+
# This class is responsible for parsing the Kaiserfile
|
5
|
+
class Kaiserfile
|
6
|
+
attr_accessor :docker_file_contents,
|
7
|
+
:docker_build_args,
|
8
|
+
:database,
|
9
|
+
:platform,
|
10
|
+
:port,
|
11
|
+
:database_reset_command,
|
12
|
+
:attach_mounts,
|
13
|
+
:server_type,
|
14
|
+
:services
|
15
|
+
|
16
|
+
def initialize(filename)
|
17
|
+
Optimist.die 'No Kaiserfile in current directory' unless File.exist? filename
|
18
|
+
|
19
|
+
@database = {
|
20
|
+
image: 'none',
|
21
|
+
platform: '',
|
22
|
+
port: 1234,
|
23
|
+
data_dir: '/tmp/data',
|
24
|
+
params: '',
|
25
|
+
commands: 'echo "no db"',
|
26
|
+
waitscript: 'echo "no dbwait"',
|
27
|
+
waitscript_params: ''
|
28
|
+
}
|
29
|
+
@attach_mounts = []
|
30
|
+
@params_array = []
|
31
|
+
@server_type = :unknown
|
32
|
+
@database_reset_command = 'echo "no db to reset"'
|
33
|
+
@port = 1234
|
34
|
+
@services = {}
|
35
|
+
|
36
|
+
instance_eval File.read(filename), filename
|
37
|
+
end
|
38
|
+
|
39
|
+
def validate!
|
40
|
+
raise 'No dockerfile specified.' if @docker_file_contents.nil?
|
41
|
+
end
|
42
|
+
|
43
|
+
def plugin(name)
|
44
|
+
require "kaiser/plugins/#{name}"
|
45
|
+
raise "Plugin #{name} is not loaded." unless Plugin.loaded?(name)
|
46
|
+
|
47
|
+
Plugin.all_plugins[name].new(self).on_init
|
48
|
+
end
|
49
|
+
|
50
|
+
def dockerfile(name, options = {})
|
51
|
+
@docker_file_contents = File.read(name)
|
52
|
+
@docker_build_args = options[:args] || {}
|
53
|
+
end
|
54
|
+
|
55
|
+
def attach_mount(from, to)
|
56
|
+
attach_mounts << [from, to]
|
57
|
+
end
|
58
|
+
|
59
|
+
def db(image,
|
60
|
+
data_dir:,
|
61
|
+
port:,
|
62
|
+
platform: '',
|
63
|
+
params: '',
|
64
|
+
commands: '',
|
65
|
+
waitscript: nil,
|
66
|
+
waitscript_params: '')
|
67
|
+
@database = {
|
68
|
+
image: image,
|
69
|
+
platform: platform,
|
70
|
+
port: port,
|
71
|
+
data_dir: data_dir,
|
72
|
+
params: params,
|
73
|
+
commands: commands,
|
74
|
+
waitscript: waitscript,
|
75
|
+
waitscript_params: waitscript_params
|
76
|
+
}
|
77
|
+
end
|
78
|
+
|
79
|
+
def expose(port)
|
80
|
+
@port = port
|
81
|
+
end
|
82
|
+
|
83
|
+
def app_params(value)
|
84
|
+
@params_array << value
|
85
|
+
end
|
86
|
+
|
87
|
+
def params
|
88
|
+
@params_array.join(' ')
|
89
|
+
end
|
90
|
+
|
91
|
+
def db_reset_command(value)
|
92
|
+
@database_reset_command = value
|
93
|
+
end
|
94
|
+
|
95
|
+
def type(value)
|
96
|
+
raise 'Valid server types are: [:http]' if value != :http
|
97
|
+
|
98
|
+
@server_type = value
|
99
|
+
end
|
100
|
+
|
101
|
+
def service(name, image: name)
|
102
|
+
raise "duplicate service #{name.inspect}" if @services.key?(name)
|
103
|
+
|
104
|
+
@services[name] = { image: image }
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Kaiser
|
4
|
+
# To implement a Kaiser plugin you must inherit from this class.
|
5
|
+
# For example,
|
6
|
+
#
|
7
|
+
# class MyPlugin < Plugin
|
8
|
+
# def on_init
|
9
|
+
# puts 'My plugin is loaded!'
|
10
|
+
# end
|
11
|
+
# end
|
12
|
+
#
|
13
|
+
# Then in your Kasierfile
|
14
|
+
#
|
15
|
+
# plugin :my_plugin
|
16
|
+
#
|
17
|
+
# Plugins has access the Kaiserfile DSL. For example,
|
18
|
+
#
|
19
|
+
# class Ruby < Plugin
|
20
|
+
# def on_init
|
21
|
+
# attach_mount 'Gemfile', '/usr/app/Gemfile'
|
22
|
+
# attach_mount 'Gemfile.lock', '/usr/app/Gemfile.lock'
|
23
|
+
# end
|
24
|
+
# end
|
25
|
+
#
|
26
|
+
class Plugin
|
27
|
+
def initialize(kaiserfile)
|
28
|
+
@kaiserfile = kaiserfile
|
29
|
+
end
|
30
|
+
|
31
|
+
def self.loaded?(name)
|
32
|
+
Plugin.all_plugins.key?(name)
|
33
|
+
end
|
34
|
+
|
35
|
+
def self.inherited(plugin)
|
36
|
+
super
|
37
|
+
|
38
|
+
puts "INHERITED #{plugin}"
|
39
|
+
|
40
|
+
# underscore class name
|
41
|
+
name = plugin.to_s.split('::').last
|
42
|
+
.gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2')
|
43
|
+
.gsub(/([a-z\d])([A-Z])/, '\1_\2')
|
44
|
+
.gsub(/([a-z])(\d)/, '\1_\2')
|
45
|
+
.tr('-', '_').downcase
|
46
|
+
|
47
|
+
Plugin.all_plugins[name.to_sym] = plugin
|
48
|
+
end
|
49
|
+
|
50
|
+
def self.all_plugins
|
51
|
+
@all_plugins ||= {}
|
52
|
+
end
|
53
|
+
|
54
|
+
def on_init
|
55
|
+
raise 'Please implement #on_init'
|
56
|
+
end
|
57
|
+
|
58
|
+
def method_missing(method_sym, *arguments, &block) # rubocop:disable all
|
59
|
+
@kaiserfile.send(method_sym, *arguments, &block)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
# Little stub to initialize the namespace
|
65
|
+
module Kaiser
|
66
|
+
module Plugins
|
67
|
+
end
|
68
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'active_support/inflector'
|
4
|
+
|
5
|
+
module Kaiser
|
6
|
+
module Plugins
|
7
|
+
class Database < Plugin
|
8
|
+
def on_init
|
9
|
+
@kaiserfile.define_singleton_method :def_db do |*args|
|
10
|
+
args[0] = { args.first => {} } unless args.first.is_a? Hash
|
11
|
+
|
12
|
+
option = args.first
|
13
|
+
|
14
|
+
driver_name = option.keys.first.to_s
|
15
|
+
|
16
|
+
begin
|
17
|
+
require "kaiser/databases/#{driver_name}"
|
18
|
+
rescue LoadError
|
19
|
+
raise "Unknown database '#{driver_name}'"
|
20
|
+
end
|
21
|
+
|
22
|
+
driver_class = Kaiser::Databases.const_get(driver_name.camelize)
|
23
|
+
db_driver = driver_class.new(option.values.first)
|
24
|
+
|
25
|
+
db(db_driver.image_name, **db_driver.options_hash)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Kaiser
|
4
|
+
module Plugins
|
5
|
+
class GitSubmodule < Plugin
|
6
|
+
def on_init
|
7
|
+
`git submodule status`.lines.each do |line|
|
8
|
+
# The git-submodule man page says uninitialized submodules are prefixed with a -
|
9
|
+
# but I found this unreliable. While testing I pressed Control-C in the middle of
|
10
|
+
# the update command so some submodule would be initialized and others wouldn't.
|
11
|
+
# After that, the status command had removed the - for every submodule.
|
12
|
+
# Therefore we just check if there's files in the directory instead.
|
13
|
+
dir = line.strip.split(' ')[1]
|
14
|
+
if !Dir.exist?(dir) || Dir.empty?(dir) # rubocop:disable Style/Next
|
15
|
+
puts "Found uninitialized git submodule '#{dir}'"
|
16
|
+
puts "please run 'git submodule update --init --recursive'"
|
17
|
+
exit 1
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Kaiser
|
4
|
+
# This class describes an app-specific service
|
5
|
+
class Service
|
6
|
+
attr_reader :name
|
7
|
+
|
8
|
+
def initialize(envname, name, service_info)
|
9
|
+
@envname = envname
|
10
|
+
@name = name
|
11
|
+
@service_info = service_info
|
12
|
+
end
|
13
|
+
|
14
|
+
def shared_name
|
15
|
+
"#{@envname}-#{name}"
|
16
|
+
end
|
17
|
+
|
18
|
+
def image
|
19
|
+
@service_info[:image]
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
data/lib/kaiser.rb
CHANGED
@@ -1,5 +1,52 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'kaiser/error'
|
4
|
+
require 'kaiser/version'
|
5
|
+
require 'kaiser/kaiserfile'
|
6
|
+
require 'kaiser/cli_options'
|
7
|
+
require 'kaiser/cli'
|
8
|
+
require 'kaiser/after_dotter'
|
9
|
+
require 'kaiser/dotter'
|
10
|
+
|
11
|
+
require 'kaiser/config'
|
12
|
+
|
13
|
+
require 'kaiser/cmds/init'
|
14
|
+
require 'kaiser/cmds/deinit'
|
15
|
+
require 'kaiser/cmds/up'
|
16
|
+
require 'kaiser/cmds/down'
|
17
|
+
require 'kaiser/cmds/shutdown'
|
18
|
+
require 'kaiser/cmds/db_save'
|
19
|
+
require 'kaiser/cmds/db_load'
|
20
|
+
require 'kaiser/cmds/db_reset'
|
21
|
+
require 'kaiser/cmds/db_reset_hard'
|
22
|
+
require 'kaiser/cmds/logs'
|
23
|
+
require 'kaiser/cmds/attach'
|
24
|
+
require 'kaiser/cmds/login'
|
25
|
+
require 'kaiser/cmds/show'
|
26
|
+
require 'kaiser/cmds/set'
|
27
|
+
require 'kaiser/cmds/root'
|
28
|
+
|
29
|
+
require 'kaiser/plugin'
|
30
|
+
|
31
|
+
require 'kaiser/service'
|
32
|
+
|
33
|
+
# Kaiser
|
34
|
+
module Kaiser
|
35
|
+
SUB_COMMANDS = {
|
36
|
+
init: Kaiser::Cmds::Init,
|
37
|
+
deinit: Kaiser::Cmds::Deinit,
|
38
|
+
up: Kaiser::Cmds::Up,
|
39
|
+
down: Kaiser::Cmds::Down,
|
40
|
+
shutdown: Kaiser::Cmds::Shutdown,
|
41
|
+
db_save: Kaiser::Cmds::DbSave,
|
42
|
+
db_load: Kaiser::Cmds::DbLoad,
|
43
|
+
db_reset: Kaiser::Cmds::DbReset,
|
44
|
+
db_reset_hard: Kaiser::Cmds::DbResetHard,
|
45
|
+
logs: Kaiser::Cmds::Logs,
|
46
|
+
attach: Kaiser::Cmds::Attach,
|
47
|
+
login: Kaiser::Cmds::Login,
|
48
|
+
show: Kaiser::Cmds::Show,
|
49
|
+
set: Kaiser::Cmds::Set,
|
50
|
+
root: Kaiser::Cmds::Root
|
51
|
+
}.freeze
|
52
|
+
end
|
metadata
CHANGED
@@ -1,27 +1,189 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kaiser
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
|
-
-
|
8
|
-
autorequire:
|
9
|
-
bindir:
|
7
|
+
- David Siaw
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
12
|
-
dependencies:
|
13
|
-
|
14
|
-
|
15
|
-
|
11
|
+
date: 2022-11-18 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: activesupport
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: optimist
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: aruba
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 0.14.6
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 0.14.6
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: aruba-rspec
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: factory_bot
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '4.0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '4.0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: pry-byebug
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: rake
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '13.0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '13.0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: rspec
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - "~>"
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '3.0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - "~>"
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '3.0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: rubocop
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - ">="
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - ">="
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0'
|
139
|
+
description: Monster management system
|
140
|
+
email:
|
141
|
+
- dsiaw@degica.com
|
142
|
+
executables:
|
143
|
+
- kaiser
|
16
144
|
extensions: []
|
17
145
|
extra_rdoc_files: []
|
18
146
|
files:
|
147
|
+
- README.md
|
148
|
+
- exe/kaiser
|
19
149
|
- lib/kaiser.rb
|
20
|
-
|
150
|
+
- lib/kaiser/after_dotter.rb
|
151
|
+
- lib/kaiser/cli.rb
|
152
|
+
- lib/kaiser/cli_options.rb
|
153
|
+
- lib/kaiser/cmds/attach.rb
|
154
|
+
- lib/kaiser/cmds/db_load.rb
|
155
|
+
- lib/kaiser/cmds/db_reset.rb
|
156
|
+
- lib/kaiser/cmds/db_reset_hard.rb
|
157
|
+
- lib/kaiser/cmds/db_save.rb
|
158
|
+
- lib/kaiser/cmds/deinit.rb
|
159
|
+
- lib/kaiser/cmds/down.rb
|
160
|
+
- lib/kaiser/cmds/init.rb
|
161
|
+
- lib/kaiser/cmds/login.rb
|
162
|
+
- lib/kaiser/cmds/logs.rb
|
163
|
+
- lib/kaiser/cmds/root.rb
|
164
|
+
- lib/kaiser/cmds/set.rb
|
165
|
+
- lib/kaiser/cmds/show.rb
|
166
|
+
- lib/kaiser/cmds/shutdown.rb
|
167
|
+
- lib/kaiser/cmds/up.rb
|
168
|
+
- lib/kaiser/command_runner.rb
|
169
|
+
- lib/kaiser/config.rb
|
170
|
+
- lib/kaiser/databases/mysql.rb
|
171
|
+
- lib/kaiser/databases/postgres.rb
|
172
|
+
- lib/kaiser/docker_control.rb
|
173
|
+
- lib/kaiser/dotter.rb
|
174
|
+
- lib/kaiser/error.rb
|
175
|
+
- lib/kaiser/kaiserfile.rb
|
176
|
+
- lib/kaiser/plugin.rb
|
177
|
+
- lib/kaiser/plugins/database.rb
|
178
|
+
- lib/kaiser/plugins/git_submodule.rb
|
179
|
+
- lib/kaiser/service.rb
|
180
|
+
- lib/kaiser/version.rb
|
181
|
+
homepage: https://github.com/kaiser
|
21
182
|
licenses:
|
22
183
|
- MIT
|
23
|
-
metadata:
|
24
|
-
|
184
|
+
metadata:
|
185
|
+
allowed_push_host: https://rubygems.org
|
186
|
+
post_install_message:
|
25
187
|
rdoc_options: []
|
26
188
|
require_paths:
|
27
189
|
- lib
|
@@ -29,16 +191,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
29
191
|
requirements:
|
30
192
|
- - ">="
|
31
193
|
- !ruby/object:Gem::Version
|
32
|
-
version:
|
194
|
+
version: 2.5.8
|
33
195
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
34
196
|
requirements:
|
35
197
|
- - ">="
|
36
198
|
- !ruby/object:Gem::Version
|
37
199
|
version: '0'
|
38
200
|
requirements: []
|
39
|
-
|
40
|
-
|
41
|
-
signing_key:
|
201
|
+
rubygems_version: 3.1.2
|
202
|
+
signing_key:
|
42
203
|
specification_version: 4
|
43
|
-
summary:
|
204
|
+
summary: Manage your monsters
|
44
205
|
test_files: []
|