pfab 0.37.0 → 0.39.0
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/Gemfile +3 -1
- data/Gemfile.lock +5 -2
- data/README.markdown +1 -1
- data/lib/pfab/cli.rb +16 -12
- data/lib/pfab/templates/base.rb +8 -4
- data/lib/pfab/templates/cron.rb +4 -4
- data/lib/pfab/templates/daemon.rb +4 -4
- data/lib/pfab/templates/job.rb +8 -5
- data/lib/pfab/templates/web.rb +8 -6
- data/lib/pfab/version.rb +1 -1
- data/lib/pfab/yamls.rb +8 -5
- data/pfab.gemspec +7 -5
- metadata +18 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f561887ca5e83e755c6841adc9bd5f7bb665c7fc983f694fae7a0721a6f31803
|
4
|
+
data.tar.gz: ec200b656730a992810235c3ef54fc586f7cfbd55af8779eb43bb71a65da30e7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: aa72a372ca6dbd79130a87a6aeac08211b79f8d97500ed9e854e1affdb219d495e9cf58338de835a9bebd23a7c56099c5871e16e9b2daa2887f66c92785bc98a
|
7
|
+
data.tar.gz: a6f890f67571a0bbc93c1160f1ff7adebb566f3554f945eb4a6a28b9a8db016eab4f5ef2bf84a2650bea6cd0404ea6ef85e33e5a39ad3fbbc358a8b0274b5c39
|
data/Gemfile
CHANGED
@@ -7,11 +7,13 @@ gem "commander"
|
|
7
7
|
|
8
8
|
gem "activesupport"
|
9
9
|
gem "pry-byebug"
|
10
|
+
gem 'styled_yaml', '~> 0.0.1'
|
11
|
+
|
10
12
|
# Add dependencies to develop your gem here.
|
11
13
|
# Include everything needed to run rake, tests, features, etc.
|
12
14
|
group :development do
|
13
15
|
gem "rdoc", "~> 3.12"
|
14
|
-
gem "bundler", "~>
|
16
|
+
gem "bundler", "~> 2.3"
|
15
17
|
gem "juwelier", "~> 2.4.9", git: "https://github.com/flajann2/juwelier"
|
16
18
|
gem "simplecov", ">= 0"
|
17
19
|
gem "test-unit", ">= 0"
|
data/Gemfile.lock
CHANGED
@@ -53,7 +53,8 @@ GEM
|
|
53
53
|
faraday-net_http_persistent (1.2.0)
|
54
54
|
faraday-patron (1.0.0)
|
55
55
|
faraday-rack (1.0.0)
|
56
|
-
git (1.
|
56
|
+
git (1.18.0)
|
57
|
+
addressable (~> 2.8)
|
57
58
|
rchardet (~> 1.8)
|
58
59
|
github_api (0.19.0)
|
59
60
|
addressable (~> 2.4)
|
@@ -106,6 +107,7 @@ GEM
|
|
106
107
|
json (>= 1.8, < 3)
|
107
108
|
simplecov-html (~> 0.10.0)
|
108
109
|
simplecov-html (0.10.2)
|
110
|
+
styled_yaml (0.0.1)
|
109
111
|
test-unit (3.2.9)
|
110
112
|
power_assert
|
111
113
|
thread_safe (0.3.6)
|
@@ -117,12 +119,13 @@ PLATFORMS
|
|
117
119
|
|
118
120
|
DEPENDENCIES
|
119
121
|
activesupport
|
120
|
-
bundler (~>
|
122
|
+
bundler (~> 2.3)
|
121
123
|
commander
|
122
124
|
juwelier (~> 2.4.9)!
|
123
125
|
pry-byebug
|
124
126
|
rdoc (~> 3.12)
|
125
127
|
simplecov
|
128
|
+
styled_yaml (~> 0.0.1)
|
126
129
|
test-unit
|
127
130
|
|
128
131
|
BUNDLED WITH
|
data/README.markdown
CHANGED
data/lib/pfab/cli.rb
CHANGED
@@ -3,6 +3,7 @@ require "net/http"
|
|
3
3
|
require "yaml"
|
4
4
|
require "json"
|
5
5
|
require 'active_support/core_ext/hash/indifferent_access'
|
6
|
+
require 'styled_yaml'
|
6
7
|
|
7
8
|
module Pfab
|
8
9
|
class CLI
|
@@ -87,7 +88,7 @@ module Pfab
|
|
87
88
|
|
88
89
|
first_pod = get_first_pod(app_name)
|
89
90
|
|
90
|
-
|
91
|
+
kubectl("logs -f #{first_pod}")
|
91
92
|
end
|
92
93
|
end
|
93
94
|
|
@@ -99,7 +100,7 @@ module Pfab
|
|
99
100
|
set_kube_context
|
100
101
|
app_name = get_app_name
|
101
102
|
|
102
|
-
|
103
|
+
kubectl "rollout restart deployment.apps/#{app_name}"
|
103
104
|
end
|
104
105
|
end
|
105
106
|
|
@@ -116,7 +117,7 @@ module Pfab
|
|
116
117
|
set_kube_context
|
117
118
|
app_name = get_app_name
|
118
119
|
first_pod = get_first_pod app_name
|
119
|
-
|
120
|
+
kubectl "exec -it #{first_pod} -- #{options.command || '/bin/sh'}"
|
120
121
|
end
|
121
122
|
end
|
122
123
|
|
@@ -141,11 +142,11 @@ module Pfab
|
|
141
142
|
selector = "application=#{@application_yaml['name']}"
|
142
143
|
|
143
144
|
if options.watch
|
144
|
-
|
145
|
+
kubectl "get pods -l #{selector} -w"
|
145
146
|
elsif $verbose
|
146
|
-
|
147
|
+
kubectl "describe pods -l #{selector}"
|
147
148
|
else
|
148
|
-
|
149
|
+
kubectl "get ingresses,jobs,services,cronjobs,deployments,pods -l #{selector}"
|
149
150
|
end
|
150
151
|
end
|
151
152
|
end
|
@@ -184,9 +185,9 @@ module Pfab
|
|
184
185
|
puts "THIS APPLIES TO THE ENTIRE NAMESPACE"
|
185
186
|
types = %w(Failed Pending Succeeded)
|
186
187
|
types.each do |type|
|
187
|
-
|
188
|
+
kubectl("get pods --field-selector status.phase=#{type}")
|
188
189
|
if agree("Delete those?")
|
189
|
-
|
190
|
+
kubectl("delete pods --field-selector status.phase=#{type}")
|
190
191
|
puts "Deleted"
|
191
192
|
end
|
192
193
|
end
|
@@ -205,9 +206,9 @@ module Pfab
|
|
205
206
|
app = deployables[app_name]
|
206
207
|
if app[:deployable_type] == "cron"
|
207
208
|
deployed_name = deployed_name(app)
|
208
|
-
|
209
|
+
kubectl("delete cronjob -l deployed-name=#{deployed_name}")
|
209
210
|
end
|
210
|
-
|
211
|
+
kubectl("apply -f .application-k8s-#{$env}-#{app_name}.yaml")
|
211
212
|
puts_and_system("git tag release-#{$env}-#{app_name}-#{Time.now.strftime("%Y-%m-%d-%H-%M-%S")} HEAD")
|
212
213
|
puts_and_system("git push origin --tags")
|
213
214
|
end
|
@@ -323,6 +324,10 @@ module Pfab
|
|
323
324
|
@_config ||= YAML.load(File.read(File.join(Dir.home, ".pfab.yaml")))
|
324
325
|
end
|
325
326
|
|
327
|
+
def kubectl cmd
|
328
|
+
puts_and_system "kubectl #{cmd} --namespace=#{yy.namespace}"
|
329
|
+
end
|
330
|
+
|
326
331
|
def puts_and_system cmd
|
327
332
|
puts cmd
|
328
333
|
if $dryrun
|
@@ -368,8 +373,7 @@ module Pfab
|
|
368
373
|
end
|
369
374
|
|
370
375
|
def get_pods(app)
|
371
|
-
|
372
|
-
puts get_pods_str
|
376
|
+
kubectl "get pods -o json -l deployed-name=#{app}"
|
373
377
|
pods_str = `#{get_pods_str}`
|
374
378
|
JSON.parse(pods_str)
|
375
379
|
end
|
data/lib/pfab/templates/base.rb
CHANGED
@@ -17,12 +17,16 @@ module Pfab
|
|
17
17
|
app_vars.dig(@data["env"], key) || app_vars[key]
|
18
18
|
end
|
19
19
|
|
20
|
-
def
|
21
|
-
@data[
|
20
|
+
def get_namespace
|
21
|
+
@data['namespace']
|
22
22
|
end
|
23
23
|
|
24
|
-
def
|
25
|
-
|
24
|
+
def get_command()
|
25
|
+
cmd = get("command")
|
26
|
+
if cmd.kind_of?(Array)
|
27
|
+
return cmd
|
28
|
+
end
|
29
|
+
return cmd.split(" ")
|
26
30
|
end
|
27
31
|
|
28
32
|
def cpu(req_type)
|
data/lib/pfab/templates/cron.rb
CHANGED
@@ -2,7 +2,7 @@ module Pfab
|
|
2
2
|
module Templates
|
3
3
|
class Cron < Base
|
4
4
|
def write_to(f)
|
5
|
-
f <<
|
5
|
+
f << StyledYAML.dump(job.deep_stringify_keys)
|
6
6
|
end
|
7
7
|
|
8
8
|
def application_type
|
@@ -23,7 +23,7 @@ module Pfab
|
|
23
23
|
"deploy-id" => deploy_id,
|
24
24
|
"tags.datadoghq.com/env": @data['env'],
|
25
25
|
"tags.datadoghq.com/service": @data['deployed_name'],
|
26
|
-
"tags.datadoghq.com/version":
|
26
|
+
"tags.datadoghq.com/version": StyledYAML.double_quoted(@data['sha'])
|
27
27
|
}
|
28
28
|
},
|
29
29
|
spec: {
|
@@ -49,7 +49,7 @@ module Pfab
|
|
49
49
|
"application-type" => "cron",
|
50
50
|
"tags.datadoghq.com/env": @data['env'],
|
51
51
|
"tags.datadoghq.com/service": @data['deployed_name'],
|
52
|
-
"tags.datadoghq.com/version":
|
52
|
+
"tags.datadoghq.com/version": StyledYAML.double_quoted(@data['sha'])
|
53
53
|
},
|
54
54
|
},
|
55
55
|
spec: {
|
@@ -58,7 +58,7 @@ module Pfab
|
|
58
58
|
{
|
59
59
|
image: image_name,
|
60
60
|
name: @data['deployed_name'],
|
61
|
-
command:
|
61
|
+
command: get_command,
|
62
62
|
env: env_vars,
|
63
63
|
resources: resources,
|
64
64
|
},
|
@@ -2,7 +2,7 @@ module Pfab
|
|
2
2
|
module Templates
|
3
3
|
class Daemon < Base
|
4
4
|
def write_to(f)
|
5
|
-
f <<
|
5
|
+
f << StyledYAML.dump(deployment.deep_stringify_keys)
|
6
6
|
end
|
7
7
|
|
8
8
|
def application_type
|
@@ -23,7 +23,7 @@ module Pfab
|
|
23
23
|
"deploy-id" => deploy_id,
|
24
24
|
"tags.datadoghq.com/env": @data['env'],
|
25
25
|
"tags.datadoghq.com/service": @data['deployed_name'],
|
26
|
-
"tags.datadoghq.com/version":
|
26
|
+
"tags.datadoghq.com/version": StyledYAML.double_quoted(@data['sha'])
|
27
27
|
}
|
28
28
|
},
|
29
29
|
spec: {
|
@@ -45,7 +45,7 @@ module Pfab
|
|
45
45
|
"application-type" => "daemon",
|
46
46
|
"tags.datadoghq.com/env": @data['env'],
|
47
47
|
"tags.datadoghq.com/service": @data['deployed_name'],
|
48
|
-
"tags.datadoghq.com/version":
|
48
|
+
"tags.datadoghq.com/version": StyledYAML.double_quoted(@data['sha'])
|
49
49
|
},
|
50
50
|
},
|
51
51
|
spec: {
|
@@ -54,7 +54,7 @@ module Pfab
|
|
54
54
|
{
|
55
55
|
image: image_name,
|
56
56
|
name: @data['deployed_name'],
|
57
|
-
command:
|
57
|
+
command: get_command,
|
58
58
|
env: env_vars,
|
59
59
|
resources: resources,
|
60
60
|
}
|
data/lib/pfab/templates/job.rb
CHANGED
@@ -2,7 +2,7 @@ module Pfab
|
|
2
2
|
module Templates
|
3
3
|
class Job < Base
|
4
4
|
def write_to(f)
|
5
|
-
f <<
|
5
|
+
f << StyledYAML.dump(job.deep_stringify_keys)
|
6
6
|
end
|
7
7
|
|
8
8
|
def application_type
|
@@ -23,10 +23,13 @@ module Pfab
|
|
23
23
|
"deploy-id" => deploy_id,
|
24
24
|
"tags.datadoghq.com/env": @data['env'],
|
25
25
|
"tags.datadoghq.com/service": @data['deployed_name'],
|
26
|
-
"tags.datadoghq.com/version":
|
26
|
+
"tags.datadoghq.com/version": StyledYAML.double_quoted(@data['sha'])
|
27
27
|
}
|
28
28
|
},
|
29
29
|
spec: {
|
30
|
+
ttlSecondsAfterFinished: get('ttlSecondsAfterFinished'),
|
31
|
+
completions: get('completions') || 1,
|
32
|
+
parallelism: get('parallelism') || 1,
|
30
33
|
template: {
|
31
34
|
metadata: {
|
32
35
|
name: "#{@data['deployed_name']}-#{@data['sha']}",
|
@@ -37,7 +40,7 @@ module Pfab
|
|
37
40
|
"application-type" => "job",
|
38
41
|
"tags.datadoghq.com/env": @data['env'],
|
39
42
|
"tags.datadoghq.com/service": @data['deployed_name'],
|
40
|
-
"tags.datadoghq.com/version":
|
43
|
+
"tags.datadoghq.com/version": StyledYAML.double_quoted(@data['sha'])
|
41
44
|
},
|
42
45
|
},
|
43
46
|
spec: {
|
@@ -46,7 +49,7 @@ module Pfab
|
|
46
49
|
{
|
47
50
|
image: image_name,
|
48
51
|
name: @data['deployed_name'],
|
49
|
-
command:
|
52
|
+
command: get_command,
|
50
53
|
env: env_vars,
|
51
54
|
resources: resources,
|
52
55
|
},
|
@@ -55,7 +58,7 @@ module Pfab
|
|
55
58
|
}.compact,
|
56
59
|
},
|
57
60
|
backoffLimit: 0,
|
58
|
-
},
|
61
|
+
}.compact,
|
59
62
|
}
|
60
63
|
end
|
61
64
|
end
|
data/lib/pfab/templates/web.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require "rubygems/safe_yaml"
|
2
|
+
|
1
3
|
module Pfab
|
2
4
|
module Templates
|
3
5
|
class Web < Base
|
@@ -5,13 +7,13 @@ module Pfab
|
|
5
7
|
if get("host").nil?
|
6
8
|
puts "No host to deploy to for #{@data['deployed_name']}. Skipping."
|
7
9
|
else
|
8
|
-
f <<
|
10
|
+
f << StyledYAML.dump(service.deep_stringify_keys)
|
9
11
|
if not app_vars.has_key?('generateIngressEnabled') || app_vars['generateIngressEnabled']
|
10
|
-
f <<
|
12
|
+
f << StyledYAML.dump(ingress.deep_stringify_keys)
|
11
13
|
else
|
12
14
|
puts "skipping ingress because ingress_disabled = #{@data['generateIngressEnabled']}"
|
13
15
|
end
|
14
|
-
f <<
|
16
|
+
f << StyledYAML.dump(deployment.deep_stringify_keys)
|
15
17
|
end
|
16
18
|
end
|
17
19
|
|
@@ -198,7 +200,7 @@ module Pfab
|
|
198
200
|
"deploy-id" => deploy_id,
|
199
201
|
"tags.datadoghq.com/env": @data['env'],
|
200
202
|
"tags.datadoghq.com/service": @data['deployed_name'],
|
201
|
-
"tags.datadoghq.com/version":
|
203
|
+
"tags.datadoghq.com/version": StyledYAML.double_quoted(@data['sha'])
|
202
204
|
}
|
203
205
|
},
|
204
206
|
spec: {
|
@@ -225,7 +227,7 @@ module Pfab
|
|
225
227
|
"application-type" => "web",
|
226
228
|
"tags.datadoghq.com/env": @data['env'],
|
227
229
|
"tags.datadoghq.com/service": @data['deployed_name'],
|
228
|
-
"tags.datadoghq.com/version":
|
230
|
+
"tags.datadoghq.com/version": StyledYAML.double_quoted(@data['sha'])
|
229
231
|
},
|
230
232
|
},
|
231
233
|
spec: {
|
@@ -234,7 +236,7 @@ module Pfab
|
|
234
236
|
{
|
235
237
|
image: image_name,
|
236
238
|
name: @data['deployed_name'],
|
237
|
-
command:
|
239
|
+
command: get_command,
|
238
240
|
env: env_vars,
|
239
241
|
resources: resources,
|
240
242
|
ports: [
|
data/lib/pfab/version.rb
CHANGED
data/lib/pfab/yamls.rb
CHANGED
@@ -4,6 +4,8 @@ module Pfab
|
|
4
4
|
|
5
5
|
def initialize(apps:, application_yaml:, image_name:, env:, sha:, config:)
|
6
6
|
@apps = apps
|
7
|
+
namespace = application_yaml.dig(env.to_s, "namespace") || application_yaml["namespace"]
|
8
|
+
raise "No namespace founds" unless namespace
|
7
9
|
@base_data = {
|
8
10
|
"env" => env.to_s,
|
9
11
|
'image_name' => image_name,
|
@@ -11,7 +13,8 @@ module Pfab
|
|
11
13
|
'container_repository' => config["container.repository"],
|
12
14
|
'config' => config,
|
13
15
|
'application' => application_yaml["name"],
|
14
|
-
'application_yaml' => application_yaml
|
16
|
+
'application_yaml' => application_yaml,
|
17
|
+
'namespace' => namespace,
|
15
18
|
}
|
16
19
|
end
|
17
20
|
|
@@ -27,8 +30,11 @@ module Pfab
|
|
27
30
|
data
|
28
31
|
end
|
29
32
|
|
30
|
-
def
|
33
|
+
def namespace
|
34
|
+
@base_data['namespace']
|
35
|
+
end
|
31
36
|
|
37
|
+
def generate(keys)
|
32
38
|
keys.each do |key|
|
33
39
|
props = @apps[key]
|
34
40
|
data = data_for(key, props)
|
@@ -48,9 +54,6 @@ module Pfab
|
|
48
54
|
end
|
49
55
|
filename
|
50
56
|
end
|
51
|
-
|
52
57
|
end
|
53
|
-
|
54
|
-
|
55
58
|
end
|
56
59
|
end
|
data/pfab.gemspec
CHANGED
@@ -2,16 +2,16 @@
|
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
3
3
|
# Instead, edit Juwelier::Tasks in Rakefile, and run 'rake gemspec'
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
|
-
# stub: pfab 0.
|
5
|
+
# stub: pfab 0.39.0 ruby lib
|
6
6
|
|
7
7
|
Gem::Specification.new do |s|
|
8
8
|
s.name = "pfab".freeze
|
9
|
-
s.version = "0.
|
9
|
+
s.version = "0.39.0"
|
10
10
|
|
11
11
|
s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
|
12
12
|
s.require_paths = ["lib".freeze]
|
13
13
|
s.authors = ["Jeff Dwyer".freeze]
|
14
|
-
s.date = "2023-
|
14
|
+
s.date = "2023-04-14"
|
15
15
|
s.description = "k8s helper".freeze
|
16
16
|
s.email = "jdwyer@prefab.cloud".freeze
|
17
17
|
s.executables = ["pfab".freeze]
|
@@ -55,8 +55,9 @@ Gem::Specification.new do |s|
|
|
55
55
|
s.add_runtime_dependency(%q<commander>.freeze, [">= 0"])
|
56
56
|
s.add_runtime_dependency(%q<activesupport>.freeze, [">= 0"])
|
57
57
|
s.add_runtime_dependency(%q<pry-byebug>.freeze, [">= 0"])
|
58
|
+
s.add_runtime_dependency(%q<styled_yaml>.freeze, ["~> 0.0.1"])
|
58
59
|
s.add_development_dependency(%q<rdoc>.freeze, ["~> 3.12"])
|
59
|
-
s.add_development_dependency(%q<bundler>.freeze, ["~>
|
60
|
+
s.add_development_dependency(%q<bundler>.freeze, ["~> 2.3"])
|
60
61
|
s.add_development_dependency(%q<juwelier>.freeze, ["~> 2.4.9"])
|
61
62
|
s.add_development_dependency(%q<simplecov>.freeze, [">= 0"])
|
62
63
|
s.add_development_dependency(%q<test-unit>.freeze, [">= 0"])
|
@@ -64,8 +65,9 @@ Gem::Specification.new do |s|
|
|
64
65
|
s.add_dependency(%q<commander>.freeze, [">= 0"])
|
65
66
|
s.add_dependency(%q<activesupport>.freeze, [">= 0"])
|
66
67
|
s.add_dependency(%q<pry-byebug>.freeze, [">= 0"])
|
68
|
+
s.add_dependency(%q<styled_yaml>.freeze, ["~> 0.0.1"])
|
67
69
|
s.add_dependency(%q<rdoc>.freeze, ["~> 3.12"])
|
68
|
-
s.add_dependency(%q<bundler>.freeze, ["~>
|
70
|
+
s.add_dependency(%q<bundler>.freeze, ["~> 2.3"])
|
69
71
|
s.add_dependency(%q<juwelier>.freeze, ["~> 2.4.9"])
|
70
72
|
s.add_dependency(%q<simplecov>.freeze, [">= 0"])
|
71
73
|
s.add_dependency(%q<test-unit>.freeze, [">= 0"])
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pfab
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.39.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jeff Dwyer
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-04-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: commander
|
@@ -52,6 +52,20 @@ dependencies:
|
|
52
52
|
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: styled_yaml
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 0.0.1
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 0.0.1
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
70
|
name: rdoc
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -72,14 +86,14 @@ dependencies:
|
|
72
86
|
requirements:
|
73
87
|
- - "~>"
|
74
88
|
- !ruby/object:Gem::Version
|
75
|
-
version: '
|
89
|
+
version: '2.3'
|
76
90
|
type: :development
|
77
91
|
prerelease: false
|
78
92
|
version_requirements: !ruby/object:Gem::Requirement
|
79
93
|
requirements:
|
80
94
|
- - "~>"
|
81
95
|
- !ruby/object:Gem::Version
|
82
|
-
version: '
|
96
|
+
version: '2.3'
|
83
97
|
- !ruby/object:Gem::Dependency
|
84
98
|
name: juwelier
|
85
99
|
requirement: !ruby/object:Gem::Requirement
|