minfra-cli 0.2.1 → 0.2.2
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 +4 -4
- data/CHANGELOG.md +1 -2
- data/bin/run_tests +1 -1
- data/lib/minfra/cli/commands/kube.rb +14 -8
- data/lib/minfra/cli/version.rb +1 -1
- data/lib/minfra/cli.rb +1 -3
- data/lib/orchparty/dsl_parser_kubernetes.rb +18 -1
- data/lib/orchparty/kubernetes_application.rb +7 -11
- data/lib/orchparty.rb +71 -45
- metadata +3 -6
- data/.rspec +0 -2
- data/Gemfile +0 -59
- data/Gemfile.lock +0 -171
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4c095831fd4a669abd1381046091e615395c93e367051ee051bf48c458167d63
|
4
|
+
data.tar.gz: 3b7219fba8adb56249c8be8f249751613c9f9e529d7a8d9341f44c32e69271ac
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 45aacbd112f2797e1b177f477b9456cb955a20576a11442c8c4799609bbe6a226177d29c3ac1ff27a9b2270a1fd2fd2ac6fe4bd1ab5e813e823ff13bfd1e960c
|
7
|
+
data.tar.gz: 81bd7e7366bf87ca8c048289e74ec3bc2e5819456c6b386063e1831d8465bb2cb4cc18cd573ada93a5aefdd0c5392bba50be02348a31616ff447f60975ab65e2
|
data/CHANGELOG.md
CHANGED
data/bin/run_tests
CHANGED
@@ -61,7 +61,7 @@ volumes << "..:/code" unless ENV["BUILD_ID"]
|
|
61
61
|
|
62
62
|
# Run docker pull on cache
|
63
63
|
if @cache_tag
|
64
|
-
run("docker pull
|
64
|
+
run("docker pull TBD/#{@project_name}:#{@cache_tag}")
|
65
65
|
end
|
66
66
|
|
67
67
|
erb = ERB.new(File.open("#{__dir__}/../spec/docker-compose.yml").read, 0, '>')
|
@@ -87,13 +87,13 @@ module Minfra
|
|
87
87
|
|
88
88
|
method = options["install"] ? "install" : "upgrade"
|
89
89
|
File.open(stack.compose_path(blank: true),"w") do |f|
|
90
|
-
Orchparty.
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
90
|
+
Orchparty::App.new(cluster_name: cluster,
|
91
|
+
application_name: stack.name,
|
92
|
+
force_variable_definition: false,
|
93
|
+
file_name: stack.stack_rb_path.to_s,
|
94
|
+
options: options
|
95
|
+
).
|
96
|
+
print( method: method, out_io: f)
|
97
97
|
end
|
98
98
|
#run_cmd(generate_cmd, :bash)
|
99
99
|
bash_cmd = ["cd #{stack.release_path}"]
|
@@ -128,7 +128,13 @@ module Minfra
|
|
128
128
|
|
129
129
|
message = "deploying stack #{stack.name}: #{reason_message}."
|
130
130
|
Minfra::Cli::Document.document(@config,"started #{message}")
|
131
|
-
Orchparty.
|
131
|
+
orch=Orchparty::App.new(cluster_name: cluster,
|
132
|
+
application_name: stack.name,
|
133
|
+
force_variable_definition: false,
|
134
|
+
file_name: stack.stack_rb_path.to_s,
|
135
|
+
options: options
|
136
|
+
)
|
137
|
+
orch.send(method)
|
132
138
|
Minfra::Cli::Document.document(@config,"finished #{message}")
|
133
139
|
end
|
134
140
|
end
|
data/lib/minfra/cli/version.rb
CHANGED
data/lib/minfra/cli.rb
CHANGED
@@ -19,6 +19,7 @@ require_relative 'cli/plugins'
|
|
19
19
|
require 'active_support'
|
20
20
|
require 'active_support/core_ext'
|
21
21
|
|
22
|
+
require "#{ENV['MINFRA_PATH']}/config/preload.rb" if File.exist?("#{ENV['MINFRA_PATH']}/config/preload.rb")
|
22
23
|
|
23
24
|
module Minfra
|
24
25
|
module Cli
|
@@ -74,9 +75,6 @@ end
|
|
74
75
|
Minfra::Cli::Plugins.load
|
75
76
|
Minfra::Cli.scan
|
76
77
|
require_relative 'cli/main_command'
|
77
|
-
|
78
|
-
require "#{ENV['MINFRA_PATH']}/config/preload.rb" if File.exist?("#{ENV['MINFRA_PATH']}/config/preload.rb")
|
79
|
-
|
80
78
|
Minfra::Cli.resolve
|
81
79
|
|
82
80
|
|
@@ -188,6 +188,7 @@ module Orchparty
|
|
188
188
|
self
|
189
189
|
end
|
190
190
|
|
191
|
+
|
191
192
|
def wait(&block)
|
192
193
|
name = SecureRandom.hex
|
193
194
|
result = ServiceBuilder.build(name, "wait", block)
|
@@ -214,7 +215,6 @@ module Orchparty
|
|
214
215
|
end
|
215
216
|
|
216
217
|
def service(name, &block)
|
217
|
-
|
218
218
|
chart_name = @application.name
|
219
219
|
unless @application.services[chart_name]
|
220
220
|
@application.services[chart_name] = AST.chart(name: chart_name, _type: "chart" )
|
@@ -332,6 +332,14 @@ module Orchparty
|
|
332
332
|
def initialize(name, type)
|
333
333
|
super AST.service(name: name, _type: type)
|
334
334
|
end
|
335
|
+
|
336
|
+
# 1. rememebring the secrets in environment_secrets (so these environments can be created differentyly
|
337
|
+
# 2. create Secret sections
|
338
|
+
def environment_secrets(&block)
|
339
|
+
result = HashBuilder.build(block)
|
340
|
+
@node.environment_secrets = result
|
341
|
+
self
|
342
|
+
end
|
335
343
|
end
|
336
344
|
|
337
345
|
class ServiceMixinBuilder < CommonBuilder
|
@@ -356,6 +364,15 @@ module Orchparty
|
|
356
364
|
@node._services << name
|
357
365
|
self
|
358
366
|
end
|
367
|
+
|
368
|
+
def secrets(name, &block)
|
369
|
+
result = ServiceBuilder.build(name, "chart-secret", block)
|
370
|
+
@application.services[name] = result
|
371
|
+
@application._service_order << name
|
372
|
+
@node._services << name
|
373
|
+
self
|
374
|
+
end
|
375
|
+
|
359
376
|
end
|
360
377
|
end
|
361
378
|
end
|
@@ -32,6 +32,7 @@ module Orchparty
|
|
32
32
|
if(file_path.end_with?(".erb"))
|
33
33
|
helm.application = OpenStruct.new(cluster_name: cluster_name, namespace: namespace)
|
34
34
|
template = Erubis::Eruby.new(File.read(file_path))
|
35
|
+
template.filename = file_path
|
35
36
|
yaml = template.result(helm.get_binding)
|
36
37
|
file = Tempfile.new("kube-deploy.yaml")
|
37
38
|
file.write(yaml)
|
@@ -117,14 +118,6 @@ module Orchparty
|
|
117
118
|
@out_io.puts upgrade_cmd(label)
|
118
119
|
end
|
119
120
|
|
120
|
-
def upgrade(label)
|
121
|
-
@out_io.puts system(upgrade_cmd(label))
|
122
|
-
end
|
123
|
-
|
124
|
-
def install(label)
|
125
|
-
@out_io.puts system(install_cmd(label))
|
126
|
-
end
|
127
|
-
|
128
121
|
def upgrade_cmd(label)
|
129
122
|
"kubectl --namespace #{namespace} --context #{cluster_name} label --overwrite #{label[:resource]} #{label[:name]} #{label["value"]}"
|
130
123
|
end
|
@@ -184,7 +177,6 @@ module Orchparty
|
|
184
177
|
output_chart_path: output_chart_path,
|
185
178
|
chart_name: chart.name,
|
186
179
|
)
|
187
|
-
|
188
180
|
params.each do |app_name, subparams|
|
189
181
|
subparams[:chart] = chart
|
190
182
|
generate_documents_from_erbs(
|
@@ -203,12 +195,13 @@ module Orchparty
|
|
203
195
|
end
|
204
196
|
|
205
197
|
kind = params.fetch(:kind)
|
206
|
-
|
207
198
|
Dir[File.join(templates_path, kind, '*.erb')].each do |template_path|
|
199
|
+
puts "Rendering Template: #{template_path}"
|
208
200
|
template_name = File.basename(template_path, '.erb')
|
209
201
|
output_path = File.join(output_chart_path, 'templates', "#{app_name}-#{template_name}")
|
210
202
|
|
211
203
|
template = Erubis::Eruby.new(File.read(template_path))
|
204
|
+
template.filename = template_path
|
212
205
|
params.app_name = app_name
|
213
206
|
params.templates_path = templates_path
|
214
207
|
begin
|
@@ -216,7 +209,7 @@ module Orchparty
|
|
216
209
|
rescue Exception
|
217
210
|
puts "#{template_path} has a problem: #{$!.inspect}"
|
218
211
|
raise
|
219
|
-
end
|
212
|
+
end
|
220
213
|
File.write(output_path, document)
|
221
214
|
end
|
222
215
|
end
|
@@ -226,6 +219,7 @@ module Orchparty
|
|
226
219
|
output_path = File.join(output_chart_path, 'Chart.yaml')
|
227
220
|
|
228
221
|
template = Erubis::Eruby.new(File.read(template_path))
|
222
|
+
template.filename = template_path
|
229
223
|
params = Hashie::Mash.new(chart_name: chart_name)
|
230
224
|
document = template.result(CleanBinding.new.get_binding(params))
|
231
225
|
File.write(output_path, document)
|
@@ -249,6 +243,7 @@ module Orchparty
|
|
249
243
|
|
250
244
|
def upgrade(chart)
|
251
245
|
build_chart(chart) do |chart_path|
|
246
|
+
system("cp -a #{chart_path} /tmp/latest-chart")
|
252
247
|
@out_io.puts system("helm upgrade --namespace #{namespace} --kube-context #{cluster_name} #{chart.name} #{chart_path}")
|
253
248
|
end
|
254
249
|
end
|
@@ -299,6 +294,7 @@ class KubernetesApplication
|
|
299
294
|
services = combine_charts(app_config)
|
300
295
|
services.each do |name|
|
301
296
|
service = app_config[:services][name]
|
297
|
+
puts "Service: #{name} #{method}"
|
302
298
|
"::Orchparty::Services::#{service._type.classify}".constantize.new(cluster_name: cluster_name, namespace: namespace, file_path: file_path, app_config: app_config, out_io: @out_io).send(method, service)
|
303
299
|
end
|
304
300
|
end
|
data/lib/orchparty.rb
CHANGED
@@ -1,59 +1,85 @@
|
|
1
|
-
|
2
|
-
require "orchparty/version"
|
3
|
-
require "orchparty/ast"
|
4
|
-
require "orchparty/context"
|
5
|
-
require "orchparty/transformations"
|
6
|
-
require "orchparty/dsl_parser"
|
7
|
-
require "orchparty/dsl_parser_kubernetes"
|
8
|
-
require "orchparty/plugin"
|
9
|
-
require "orchparty/kubernetes_application"
|
10
|
-
require "hash"
|
1
|
+
# frozen_string_literal: true
|
11
2
|
|
12
|
-
|
3
|
+
require 'deep_merge'
|
4
|
+
require 'orchparty/version'
|
5
|
+
require 'orchparty/ast'
|
6
|
+
require 'orchparty/context'
|
7
|
+
require 'orchparty/transformations'
|
8
|
+
require 'orchparty/dsl_parser'
|
9
|
+
require 'orchparty/dsl_parser_kubernetes'
|
10
|
+
require 'orchparty/plugin'
|
11
|
+
require 'orchparty/kubernetes_application'
|
12
|
+
require 'hash'
|
13
13
|
|
14
|
-
|
15
|
-
Gem::Specification.map {|f| f.matches_for_glob("orchparty/plugins/*.rb") }.flatten.map{|file_name| File.basename(file_name, ".*").to_sym }.each do |plugin_name|
|
16
|
-
plugin(plugin_name)
|
17
|
-
end
|
18
|
-
end
|
14
|
+
module Orchparty
|
19
15
|
|
20
16
|
def self.options
|
21
|
-
@@options
|
17
|
+
@@options
|
22
18
|
end
|
23
|
-
def self.
|
24
|
-
|
19
|
+
def self.options=(opt)
|
20
|
+
@@options=opt
|
25
21
|
end
|
22
|
+
|
23
|
+
class App
|
24
|
+
attr_reader :options
|
26
25
|
|
27
|
-
|
28
|
-
|
29
|
-
|
26
|
+
def initialize(cluster_name:, application_name:, force_variable_definition:, file_name:, options: {})
|
27
|
+
@cluster_name = cluster_name
|
28
|
+
@application_name = application_name
|
29
|
+
@force_variable_definiton = force_variable_definition
|
30
|
+
@file_name = file_name
|
31
|
+
@options = options
|
32
|
+
Orchparty.options=options
|
33
|
+
|
34
|
+
load_plugins
|
35
|
+
end
|
30
36
|
|
31
|
-
|
32
|
-
|
33
|
-
|
37
|
+
def plugins
|
38
|
+
Orchparty::Plugin.plugins
|
39
|
+
end
|
34
40
|
|
35
|
-
|
36
|
-
|
37
|
-
|
41
|
+
def print(method:, out_io:)
|
42
|
+
app(out_io: out_io).print(method)
|
43
|
+
end
|
38
44
|
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
app = KubernetesApplication.new(app_config: app_config, namespace: application_name, cluster_name: cluster_name, file_name: file_name)
|
43
|
-
app.install
|
44
|
-
end
|
45
|
+
def install
|
46
|
+
app.install
|
47
|
+
end
|
45
48
|
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
49
|
+
def upgrade
|
50
|
+
app.upgrade
|
51
|
+
end
|
52
|
+
|
53
|
+
private
|
54
|
+
|
55
|
+
def app(out_io: STDOUT)
|
56
|
+
parsed = Orchparty::Kubernetes::DSLParser.new(@file_name).parse
|
57
|
+
app_config = Transformations.transform_kubernetes(parsed, force_variable_definition: @force_variable_definition).applications[@application_name]
|
58
|
+
KubernetesApplication.new(app_config: app_config, namespace: @application_name, cluster_name: @cluster_name, file_name: @file_name, out_io: out_io)
|
59
|
+
end
|
60
|
+
|
61
|
+
def generate(plugin_name, options, plugin_options)
|
62
|
+
plugins[plugin_name].generate(ast(options), plugin_options)
|
63
|
+
end
|
52
64
|
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
65
|
+
def ast(filename:, application:, force_variable_definition: nil)
|
66
|
+
Transformations.transform(Orchparty::DSLParser.new(filename).parse,
|
67
|
+
force_variable_definition: force_variable_definition).applications[application]
|
68
|
+
end
|
69
|
+
|
70
|
+
def load_plugins
|
71
|
+
Gem::Specification.map do |f|
|
72
|
+
f.matches_for_glob('orchparty/plugins/*.rb')
|
73
|
+
end.flatten.map do |file_name|
|
74
|
+
File.basename(file_name,
|
75
|
+
'.*').to_sym
|
76
|
+
end.each do |plugin_name|
|
77
|
+
plugin(plugin_name)
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
def plugin(name)
|
82
|
+
Orchparty::Plugin.load_plugin(name)
|
83
|
+
end
|
58
84
|
end
|
59
85
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: minfra-cli
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Peter Schrammel
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-07-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: thor
|
@@ -110,11 +110,8 @@ extra_rdoc_files: []
|
|
110
110
|
files:
|
111
111
|
- ".dockerignore"
|
112
112
|
- ".gitignore"
|
113
|
-
- ".rspec"
|
114
113
|
- CHANGELOG.md
|
115
114
|
- Dockerfile
|
116
|
-
- Gemfile
|
117
|
-
- Gemfile.lock
|
118
115
|
- bin/build
|
119
116
|
- bin/console
|
120
117
|
- bin/container_exec
|
@@ -191,7 +188,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
191
188
|
- !ruby/object:Gem::Version
|
192
189
|
version: '0'
|
193
190
|
requirements: []
|
194
|
-
rubygems_version: 3.2
|
191
|
+
rubygems_version: 3.1.2
|
195
192
|
signing_key:
|
196
193
|
specification_version: 4
|
197
194
|
summary: A cli framework for k8s based development and deployment.
|
data/.rspec
DELETED
data/Gemfile
DELETED
@@ -1,59 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
source 'https://rubygems.org'
|
3
|
-
|
4
|
-
#gemspec
|
5
|
-
gem "thor"
|
6
|
-
gem "table_print", "1.5.6"
|
7
|
-
gem "rest-client", "~>2.0"
|
8
|
-
gem "hashie", "~>3.5"
|
9
|
-
gem "bootsnap"
|
10
|
-
gem "gli", "~> 2.16.0"
|
11
|
-
gem "activesupport"
|
12
|
-
gem "erubis"
|
13
|
-
|
14
|
-
gem 'byebug', require: true # convenience
|
15
|
-
gem 'graphiti'
|
16
|
-
gem 'faraday'
|
17
|
-
|
18
|
-
|
19
|
-
group :test do
|
20
|
-
gem 'rspec'
|
21
|
-
gem 'rubocop'
|
22
|
-
gem 'timecop'
|
23
|
-
end
|
24
|
-
|
25
|
-
group :development, :test do
|
26
|
-
gem 'guard-rspec', require: false
|
27
|
-
gem 'pry'
|
28
|
-
gem 'pry-doc'
|
29
|
-
end
|
30
|
-
|
31
|
-
if false && ENV["MINFRA_WITH_PLUGINS"]=="true" # this is only set when we run the exe (not on bundle install...)
|
32
|
-
require 'ostruct'
|
33
|
-
require 'json'
|
34
|
-
require 'byebug'
|
35
|
-
|
36
|
-
[Pathname.new(ENV["MINFRA_PATH"]).join("config","minfra_plugins.json"),
|
37
|
-
Pathname.new(ENV["MINFRA_PATH"]).join("me","minfra_plugins.json")].each do |file|
|
38
|
-
|
39
|
-
next unless File.exist?(file)
|
40
|
-
|
41
|
-
plugins=JSON.parse(File.read(file))
|
42
|
-
plugins["plugins"].each do |spec|
|
43
|
-
opts=spec["opts"] || {}
|
44
|
-
opts.merge(require: false)
|
45
|
-
if opts["path"]
|
46
|
-
gem spec["name"], spec["version"], opts
|
47
|
-
else
|
48
|
-
begin
|
49
|
-
Gem::Specification.find_by_name(spec["name"]) unless ENV["MINFRA_SETUP"]
|
50
|
-
gem spec["name"], spec["version"], opts
|
51
|
-
rescue Gem::MissingSpecError
|
52
|
-
STDERR.puts("Can't load plugin: #{spec["name"]}, #{spec["version"]}; run 'minfra plugin setup'")
|
53
|
-
end
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|
57
|
-
end
|
58
|
-
|
59
|
-
|
data/Gemfile.lock
DELETED
@@ -1,171 +0,0 @@
|
|
1
|
-
GEM
|
2
|
-
remote: https://rubygems.org/
|
3
|
-
specs:
|
4
|
-
activesupport (6.1.0)
|
5
|
-
concurrent-ruby (~> 1.0, >= 1.0.2)
|
6
|
-
i18n (>= 1.6, < 2)
|
7
|
-
minitest (>= 5.1)
|
8
|
-
tzinfo (~> 2.0)
|
9
|
-
zeitwerk (~> 2.3)
|
10
|
-
ast (2.4.0)
|
11
|
-
bootsnap (1.4.6)
|
12
|
-
msgpack (~> 1.0)
|
13
|
-
byebug (11.1.3)
|
14
|
-
coderay (1.1.3)
|
15
|
-
concurrent-ruby (1.1.7)
|
16
|
-
diff-lcs (1.3)
|
17
|
-
domain_name (0.5.20190701)
|
18
|
-
unf (>= 0.0.5, < 1.0.0)
|
19
|
-
dry-configurable (0.13.0)
|
20
|
-
concurrent-ruby (~> 1.0)
|
21
|
-
dry-core (~> 0.6)
|
22
|
-
dry-container (0.9.0)
|
23
|
-
concurrent-ruby (~> 1.0)
|
24
|
-
dry-configurable (~> 0.13, >= 0.13.0)
|
25
|
-
dry-core (0.7.1)
|
26
|
-
concurrent-ruby (~> 1.0)
|
27
|
-
dry-inflector (0.2.1)
|
28
|
-
dry-logic (1.2.0)
|
29
|
-
concurrent-ruby (~> 1.0)
|
30
|
-
dry-core (~> 0.5, >= 0.5)
|
31
|
-
dry-types (1.5.1)
|
32
|
-
concurrent-ruby (~> 1.0)
|
33
|
-
dry-container (~> 0.3)
|
34
|
-
dry-core (~> 0.5, >= 0.5)
|
35
|
-
dry-inflector (~> 0.1, >= 0.1.2)
|
36
|
-
dry-logic (~> 1.0, >= 1.0.2)
|
37
|
-
erubis (2.7.0)
|
38
|
-
faraday (2.0.1)
|
39
|
-
faraday-net_http (~> 2.0)
|
40
|
-
ruby2_keywords (>= 0.0.4)
|
41
|
-
faraday-net_http (2.0.1)
|
42
|
-
ffi (1.14.2)
|
43
|
-
formatador (0.2.5)
|
44
|
-
gli (2.16.1)
|
45
|
-
graphiti (1.3.5)
|
46
|
-
activesupport (>= 4.1)
|
47
|
-
concurrent-ruby (~> 1.0)
|
48
|
-
dry-types (>= 0.15.0, < 2.0)
|
49
|
-
graphiti_errors (~> 1.1.0)
|
50
|
-
jsonapi-renderer (~> 0.2, >= 0.2.2)
|
51
|
-
jsonapi-serializable (~> 0.3.0)
|
52
|
-
graphiti_errors (1.1.2)
|
53
|
-
jsonapi-serializable (~> 0.1)
|
54
|
-
guard (2.16.2)
|
55
|
-
formatador (>= 0.2.4)
|
56
|
-
listen (>= 2.7, < 4.0)
|
57
|
-
lumberjack (>= 1.0.12, < 2.0)
|
58
|
-
nenv (~> 0.1)
|
59
|
-
notiffany (~> 0.0)
|
60
|
-
pry (>= 0.9.12)
|
61
|
-
shellany (~> 0.0)
|
62
|
-
thor (>= 0.18.1)
|
63
|
-
guard-compat (1.2.1)
|
64
|
-
guard-rspec (4.7.3)
|
65
|
-
guard (~> 2.1)
|
66
|
-
guard-compat (~> 1.1)
|
67
|
-
rspec (>= 2.99.0, < 4.0)
|
68
|
-
hashie (3.5.7)
|
69
|
-
http-accept (1.7.0)
|
70
|
-
http-cookie (1.0.3)
|
71
|
-
domain_name (~> 0.5)
|
72
|
-
i18n (1.8.5)
|
73
|
-
concurrent-ruby (~> 1.0)
|
74
|
-
jaro_winkler (1.5.4)
|
75
|
-
jsonapi-renderer (0.2.2)
|
76
|
-
jsonapi-serializable (0.3.1)
|
77
|
-
jsonapi-renderer (~> 0.2.0)
|
78
|
-
listen (3.3.3)
|
79
|
-
rb-fsevent (~> 0.10, >= 0.10.3)
|
80
|
-
rb-inotify (~> 0.9, >= 0.9.10)
|
81
|
-
lumberjack (1.2.8)
|
82
|
-
method_source (1.0.0)
|
83
|
-
mime-types (3.3.1)
|
84
|
-
mime-types-data (~> 3.2015)
|
85
|
-
mime-types-data (3.2020.0425)
|
86
|
-
minitest (5.14.2)
|
87
|
-
msgpack (1.3.3)
|
88
|
-
nenv (0.3.0)
|
89
|
-
netrc (0.11.0)
|
90
|
-
notiffany (0.1.3)
|
91
|
-
nenv (~> 0.1)
|
92
|
-
shellany (~> 0.0)
|
93
|
-
parallel (1.19.1)
|
94
|
-
parser (2.7.1.2)
|
95
|
-
ast (~> 2.4.0)
|
96
|
-
pry (0.13.1)
|
97
|
-
coderay (~> 1.1)
|
98
|
-
method_source (~> 1.0)
|
99
|
-
pry-doc (1.1.0)
|
100
|
-
pry (~> 0.11)
|
101
|
-
yard (~> 0.9.11)
|
102
|
-
rainbow (3.0.0)
|
103
|
-
rb-fsevent (0.10.4)
|
104
|
-
rb-inotify (0.10.1)
|
105
|
-
ffi (~> 1.0)
|
106
|
-
rest-client (2.1.0)
|
107
|
-
http-accept (>= 1.7.0, < 2.0)
|
108
|
-
http-cookie (>= 1.0.2, < 2.0)
|
109
|
-
mime-types (>= 1.16, < 4.0)
|
110
|
-
netrc (~> 0.8)
|
111
|
-
rexml (3.2.4)
|
112
|
-
rspec (3.9.0)
|
113
|
-
rspec-core (~> 3.9.0)
|
114
|
-
rspec-expectations (~> 3.9.0)
|
115
|
-
rspec-mocks (~> 3.9.0)
|
116
|
-
rspec-core (3.9.2)
|
117
|
-
rspec-support (~> 3.9.3)
|
118
|
-
rspec-expectations (3.9.2)
|
119
|
-
diff-lcs (>= 1.2.0, < 2.0)
|
120
|
-
rspec-support (~> 3.9.0)
|
121
|
-
rspec-mocks (3.9.1)
|
122
|
-
diff-lcs (>= 1.2.0, < 2.0)
|
123
|
-
rspec-support (~> 3.9.0)
|
124
|
-
rspec-support (3.9.3)
|
125
|
-
rubocop (0.82.0)
|
126
|
-
jaro_winkler (~> 1.5.1)
|
127
|
-
parallel (~> 1.10)
|
128
|
-
parser (>= 2.7.0.1)
|
129
|
-
rainbow (>= 2.2.2, < 4.0)
|
130
|
-
rexml
|
131
|
-
ruby-progressbar (~> 1.7)
|
132
|
-
unicode-display_width (>= 1.4.0, < 2.0)
|
133
|
-
ruby-progressbar (1.10.1)
|
134
|
-
ruby2_keywords (0.0.5)
|
135
|
-
shellany (0.0.1)
|
136
|
-
table_print (1.5.6)
|
137
|
-
thor (1.0.1)
|
138
|
-
timecop (0.9.1)
|
139
|
-
tzinfo (2.0.4)
|
140
|
-
concurrent-ruby (~> 1.0)
|
141
|
-
unf (0.1.4)
|
142
|
-
unf_ext
|
143
|
-
unf_ext (0.0.7.7)
|
144
|
-
unicode-display_width (1.7.0)
|
145
|
-
yard (0.9.25)
|
146
|
-
zeitwerk (2.4.2)
|
147
|
-
|
148
|
-
PLATFORMS
|
149
|
-
ruby
|
150
|
-
|
151
|
-
DEPENDENCIES
|
152
|
-
activesupport
|
153
|
-
bootsnap
|
154
|
-
byebug
|
155
|
-
erubis
|
156
|
-
faraday
|
157
|
-
gli (~> 2.16.0)
|
158
|
-
graphiti
|
159
|
-
guard-rspec
|
160
|
-
hashie (~> 3.5)
|
161
|
-
pry
|
162
|
-
pry-doc
|
163
|
-
rest-client (~> 2.0)
|
164
|
-
rspec
|
165
|
-
rubocop
|
166
|
-
table_print (= 1.5.6)
|
167
|
-
thor
|
168
|
-
timecop
|
169
|
-
|
170
|
-
BUNDLED WITH
|
171
|
-
2.1.4
|