milkshake 0.1.6 → 0.1.7
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.
- data/VERSION +1 -1
- data/lib/milkshake/app/actions.rb +55 -55
- data/lib/milkshake/app/helpers.rb +9 -0
- data/lib/milkshake/cache.rb +6 -5
- data/lib/milkshake/dependency_resolver.rb +5 -5
- data/lib/milkshake/environment.rb +8 -8
- data/lib/milkshake/extender.rb +6 -6
- data/lib/milkshake/linker.rb +1 -1
- data/lib/milkshake/loader.rb +3 -2
- data/lib/milkshake/rails_extentions/configuration.rb +10 -3
- data/lib/milkshake/rails_extentions/initializer.rb +6 -5
- data/lib/milkshake/template.rb +2 -2
- data/lib/milkshake.rb +2 -0
- data/milkshake.gemspec +2 -28
- metadata +2 -2
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.7
|
@@ -8,31 +8,17 @@ module Milkshake
|
|
8
8
|
override_app_path! path
|
9
9
|
assert_new_app_path!
|
10
10
|
|
11
|
-
system(%{rails "#{self.options.app}" > /dev/null})
|
11
|
+
system(%{rails _#{Milkshake::RAILS_VERSION}_ "#{self.options.app}" > /dev/null})
|
12
12
|
good_say('Rails app successfully created!')
|
13
13
|
|
14
|
-
goto_rails do
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
File.unlink('public/images/rails.png')
|
23
|
-
end
|
24
|
-
if File.file?('public/javascripts/controls.js')
|
25
|
-
File.unlink('public/javascripts/controls.js')
|
26
|
-
end
|
27
|
-
if File.file?('public/javascripts/dragdrop.js')
|
28
|
-
File.unlink('public/javascripts/dragdrop.js')
|
29
|
-
end
|
30
|
-
if File.file?('public/javascripts/effects.js')
|
31
|
-
File.unlink('public/javascripts/effects.js')
|
32
|
-
end
|
33
|
-
if File.file?('public/javascripts/prototype.js')
|
34
|
-
File.unlink('public/javascripts/prototype.js')
|
35
|
-
end
|
14
|
+
goto_rails do |rails_root|
|
15
|
+
safe_rm(rails_root + 'config/locales/en.yml')
|
16
|
+
safe_rm(rails_root + 'public/index.html')
|
17
|
+
safe_rm(rails_root + 'public/images/rails.png')
|
18
|
+
safe_rm(rails_root + 'public/javascripts/controls.js')
|
19
|
+
safe_rm(rails_root + 'public/javascripts/dragdrop.js')
|
20
|
+
safe_rm(rails_root + 'public/javascripts/effects.js')
|
21
|
+
safe_rm(rails_root + 'public/javascripts/prototype.js')
|
36
22
|
|
37
23
|
Milkshake::Template.evaluate('routes.rb'
|
38
24
|
).write_to('config/routes.rb')
|
@@ -60,26 +46,16 @@ module Milkshake
|
|
60
46
|
def install_gem!(name)
|
61
47
|
assert_valid_gem_name! name
|
62
48
|
|
63
|
-
goto_rails do
|
49
|
+
goto_rails do |rails_root|
|
64
50
|
|
65
51
|
Milkshake::Template.evaluate('jeweler.rake',
|
66
|
-
|
67
|
-
:author => ask_unless_given(
|
68
|
-
'Author', self.options.author, self.class.default_author),
|
69
|
-
:email => ask_unless_given(
|
70
|
-
'Email', self.options.email, self.class.default_email),
|
71
|
-
:summary => ask_unless_given(
|
72
|
-
'Summary', self.options.summary, 'FIX_ME_SUMMARY'),
|
73
|
-
:description => ask_unless_given(
|
74
|
-
'Description', self.options.description, 'FIX_ME_DESCRIPTION'),
|
75
|
-
:website => ask_unless_given(
|
76
|
-
'Website', self.options.website, 'FIX_ME_WEBSITE')
|
52
|
+
gem_options(name)
|
77
53
|
).write_to('lib/tasks/jeweler.rake')
|
78
54
|
|
79
55
|
FileUtils.mkdir_p('rails/initializers')
|
80
56
|
FileUtils.touch('rails/init.rb')
|
81
|
-
|
82
|
-
|
57
|
+
safe_rm(rails_root + 'app/controllers/application_controller.rb')
|
58
|
+
safe_rm(rails_root + 'app/helpers/application_helper.rb')
|
83
59
|
|
84
60
|
if self.options.git or shell.yes?('Initialize git? [yN]:')
|
85
61
|
system(%{ git init > /dev/null })
|
@@ -97,18 +73,18 @@ module Milkshake
|
|
97
73
|
|
98
74
|
def install_host!
|
99
75
|
goto_rails do |rails_root|
|
100
|
-
(rails_root + 'README')
|
101
|
-
(rails_root + 'Rakefile')
|
102
|
-
(rails_root + 'app')
|
103
|
-
(rails_root + 'config/locales')
|
104
|
-
(rails_root + 'db/seeds.rb')
|
105
|
-
(rails_root + 'doc')
|
106
|
-
(rails_root + 'lib')
|
107
|
-
(rails_root + 'public/images')
|
108
|
-
(rails_root + 'public/javascripts')
|
109
|
-
(rails_root + 'public/stylesheets')
|
110
|
-
(rails_root + 'test')
|
111
|
-
(rails_root + 'vendor')
|
76
|
+
safe_rm(rails_root + 'README')
|
77
|
+
safe_rm(rails_root + 'Rakefile')
|
78
|
+
safe_rm(rails_root + 'app')
|
79
|
+
safe_rm(rails_root + 'config/locales')
|
80
|
+
safe_rm(rails_root + 'db/seeds.rb')
|
81
|
+
safe_rm(rails_root + 'doc')
|
82
|
+
safe_rm(rails_root + 'lib')
|
83
|
+
safe_rm(rails_root + 'public/images')
|
84
|
+
safe_rm(rails_root + 'public/javascripts')
|
85
|
+
safe_rm(rails_root + 'public/stylesheets')
|
86
|
+
safe_rm(rails_root + 'test')
|
87
|
+
safe_rm(rails_root + 'vendor')
|
112
88
|
end
|
113
89
|
|
114
90
|
good_say('Rails app successfully stripped!')
|
@@ -185,32 +161,32 @@ module Milkshake
|
|
185
161
|
|
186
162
|
goto_rails do |rails_path|
|
187
163
|
|
188
|
-
(rails_path
|
164
|
+
safe_rm(rails_path + 'db')
|
189
165
|
make_symlink!(
|
190
166
|
rails_path + 'db',
|
191
167
|
shared_path + 'private')
|
192
168
|
|
193
|
-
(rails_path
|
169
|
+
safe_rm(rails_path + 'log')
|
194
170
|
make_symlink!(
|
195
171
|
rails_path + 'log',
|
196
172
|
shared_path + 'log')
|
197
173
|
|
198
|
-
(rails_path
|
174
|
+
safe_rm(rails_path + 'public/system')
|
199
175
|
make_symlink!(
|
200
176
|
rails_path + 'public/system',
|
201
177
|
shared_path + 'public')
|
202
178
|
|
203
|
-
(rails_path
|
179
|
+
safe_rm(rails_path + 'config/settings')
|
204
180
|
make_symlink!(
|
205
181
|
rails_path + 'config/settings',
|
206
182
|
shared_path + 'settings')
|
207
183
|
|
208
|
-
(rails_path
|
184
|
+
safe_rm(rails_path + 'config/milkshake.yml')
|
209
185
|
make_symlink!(
|
210
186
|
rails_path + 'config/milkshake.yml',
|
211
187
|
shared_path + 'settings/milkshake.yml')
|
212
188
|
|
213
|
-
(rails_path
|
189
|
+
safe_rm(rails_path + 'config/database.yml')
|
214
190
|
make_symlink!(
|
215
191
|
rails_path + 'config/database.yml',
|
216
192
|
shared_path + 'settings/database.yml')
|
@@ -218,6 +194,30 @@ module Milkshake
|
|
218
194
|
end
|
219
195
|
end
|
220
196
|
|
197
|
+
private
|
198
|
+
|
199
|
+
def gem_options(name)
|
200
|
+
{
|
201
|
+
:name =>
|
202
|
+
name,
|
203
|
+
|
204
|
+
:author =>
|
205
|
+
ask_unless_given('Author', self.options.author, self.class.default_author),
|
206
|
+
|
207
|
+
:email =>
|
208
|
+
ask_unless_given('Email', self.options.email, self.class.default_email),
|
209
|
+
|
210
|
+
:summary =>
|
211
|
+
ask_unless_given('Summary', self.options.summary, 'FIX_ME_SUMMARY'),
|
212
|
+
|
213
|
+
:description =>
|
214
|
+
ask_unless_given('Description', self.options.description, 'FIX_ME_DESCRIPTION'),
|
215
|
+
|
216
|
+
:website =>
|
217
|
+
ask_unless_given('Website', self.options.website, 'FIX_ME_WEBSITE')
|
218
|
+
}
|
219
|
+
end
|
220
|
+
|
221
221
|
end
|
222
222
|
end
|
223
223
|
end
|
@@ -108,6 +108,15 @@ module Milkshake
|
|
108
108
|
make_symlink! old_path, new_path
|
109
109
|
end
|
110
110
|
|
111
|
+
def safe_rm(path)
|
112
|
+
path = Pathname.new(path) unless Pathname === path
|
113
|
+
if path.file? or path.symlink?
|
114
|
+
path.unlink
|
115
|
+
elsif path.directory?
|
116
|
+
path.rmtree
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
111
120
|
end
|
112
121
|
end
|
113
122
|
end
|
data/lib/milkshake/cache.rb
CHANGED
@@ -7,7 +7,7 @@ module Milkshake
|
|
7
7
|
def initialize(path)
|
8
8
|
@path = path
|
9
9
|
begin
|
10
|
-
File.open(@path, 'r') { |
|
10
|
+
File.open(@path, 'r') { |file| @entries = Marshal.load(file.read) }
|
11
11
|
raise 'wrong type' unless Hash === @entries
|
12
12
|
rescue
|
13
13
|
@entries = {}
|
@@ -16,10 +16,11 @@ module Milkshake
|
|
16
16
|
end
|
17
17
|
|
18
18
|
def key(name)
|
19
|
-
|
20
|
-
|
19
|
+
name = name.to_s
|
20
|
+
if @entries.key?(name)
|
21
|
+
@entries[name]
|
21
22
|
elsif block_given?
|
22
|
-
@entries[name
|
23
|
+
@entries[name] = yield
|
23
24
|
else
|
24
25
|
nil
|
25
26
|
end
|
@@ -43,7 +44,7 @@ module Milkshake
|
|
43
44
|
end
|
44
45
|
|
45
46
|
def persist!
|
46
|
-
File.open(@path, 'w+') { |
|
47
|
+
File.open(@path, 'w+') { |file| file.write Marshal.dump(@entries) }
|
47
48
|
end
|
48
49
|
|
49
50
|
end
|
@@ -14,12 +14,12 @@ module Milkshake
|
|
14
14
|
end
|
15
15
|
|
16
16
|
def initialize(gems)
|
17
|
-
specs = gems.collect do |
|
18
|
-
find_gemspec(
|
17
|
+
specs = gems.collect do |name,options|
|
18
|
+
find_gemspec(name,options)
|
19
19
|
end.compact
|
20
20
|
|
21
21
|
@names = specs.collect { |spec| spec.name }
|
22
|
-
@specs = specs.inject({}) { |
|
22
|
+
@specs = specs.inject({}) { |memo, spec| memo[spec.name] = spec ; memo }
|
23
23
|
@gems = gems
|
24
24
|
end
|
25
25
|
|
@@ -56,8 +56,8 @@ module Milkshake
|
|
56
56
|
raise "Failed to resolve dependency: #{name} #{options.inspect}"
|
57
57
|
end
|
58
58
|
|
59
|
-
specs.sort! do |
|
60
|
-
|
59
|
+
specs.sort! do |left,right|
|
60
|
+
right.version <=> left.version
|
61
61
|
end
|
62
62
|
|
63
63
|
gemspec = specs.first
|
@@ -36,16 +36,16 @@ module Milkshake
|
|
36
36
|
resolver ||= DependencyResolver.load_for(@options['gems'])
|
37
37
|
specs = resolver.specs
|
38
38
|
@gemspecs = specs
|
39
|
-
specs.inject({}) { |
|
39
|
+
specs.inject({}) { |memo, (name, spec)| memo[name] = spec.version.to_s ; memo }
|
40
40
|
end
|
41
41
|
|
42
|
-
@gemspecs ||= @gemspec_versions.inject({}) do |
|
42
|
+
@gemspecs ||= @gemspec_versions.inject({}) do |memo, (name, version)|
|
43
43
|
specs = index.search(Gem::Dependency.new(name, version))
|
44
|
-
specs.sort! do |
|
45
|
-
|
44
|
+
specs.sort! do |left,right|
|
45
|
+
right.version <=> left.version
|
46
46
|
end
|
47
|
-
|
48
|
-
|
47
|
+
memo[name] = specs.first
|
48
|
+
memo
|
49
49
|
end
|
50
50
|
|
51
51
|
@order = @cache.key('environment.gems.order') do
|
@@ -67,8 +67,8 @@ module Milkshake
|
|
67
67
|
end
|
68
68
|
|
69
69
|
def gem_dependencies
|
70
|
-
@order.inject([]) do |
|
71
|
-
|
70
|
+
@order.inject([]) do |deps, name|
|
71
|
+
deps << Rails::GemDependency.new(name, @gems[name])
|
72
72
|
end
|
73
73
|
end
|
74
74
|
|
data/lib/milkshake/extender.rb
CHANGED
@@ -14,13 +14,13 @@ module Milkshake
|
|
14
14
|
# for passenger
|
15
15
|
def extend_rails!
|
16
16
|
Object.const_set('Rails', Module.new)
|
17
|
-
|
18
|
-
def
|
19
|
-
if (
|
17
|
+
rails_mod = Object.const_get('Rails')
|
18
|
+
def rails_mod.singleton_method_added(meth)
|
19
|
+
if (meth.to_s == 'boot!') and !@injected_milkshake
|
20
20
|
@injected_milkshake = true
|
21
|
-
|
22
|
-
|
23
|
-
|
21
|
+
klass = (class << self ; self ; end)
|
22
|
+
klass.send :alias_method, "milkshakeless_#{meth}", meth
|
23
|
+
klass.send :define_method, meth do
|
24
24
|
milkshakeless_boot!
|
25
25
|
Milkshake.load!
|
26
26
|
Milkshake.extender.extend_railties!
|
data/lib/milkshake/linker.rb
CHANGED
data/lib/milkshake/loader.rb
CHANGED
@@ -24,8 +24,9 @@ module Milkshake
|
|
24
24
|
self.environment.gemspecs.each do |gemspec|
|
25
25
|
paths.concat Dir.glob(File.join(gemspec.full_gem_path, *relative_path))
|
26
26
|
end
|
27
|
-
|
28
|
-
paths.concat Dir.glob(File.join(
|
27
|
+
rails_root = Rails.root
|
28
|
+
paths.concat Dir.glob(File.join(rails_root, 'rails/init.rb'))
|
29
|
+
paths.concat Dir.glob(File.join(rails_root, *relative_path))
|
29
30
|
paths
|
30
31
|
end
|
31
32
|
end
|
@@ -4,9 +4,9 @@ module Milkshake
|
|
4
4
|
module Configuration
|
5
5
|
|
6
6
|
def self.included(base)
|
7
|
-
%w( default_gems default_i18n default_load_paths ).each do |
|
8
|
-
base.send :alias_method, "#{
|
9
|
-
base.send :alias_method,
|
7
|
+
%w( default_gems default_i18n default_load_paths ).each do |meth|
|
8
|
+
base.send :alias_method, "#{meth}_without_milkshake", meth
|
9
|
+
base.send :alias_method, meth, "#{meth}_with_milkshake"
|
10
10
|
end
|
11
11
|
end
|
12
12
|
|
@@ -27,6 +27,13 @@ module Milkshake
|
|
27
27
|
|
28
28
|
# inject fallback application controller
|
29
29
|
def default_load_paths_with_milkshake
|
30
|
+
Milkshake.environment.gemspecs.each do |gemspec|
|
31
|
+
app_path = File.join(gemspec.full_gem_path, 'app', 'controllers', 'application_controller.rb')
|
32
|
+
if File.file?(app_path)
|
33
|
+
return default_load_paths_without_milkshake
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
30
37
|
path = File.expand_path(File.join(File.dirname(__FILE__), *%w( .. rails_fallbacks )))
|
31
38
|
default_load_paths_without_milkshake.push(path)
|
32
39
|
end
|
@@ -4,9 +4,9 @@ module Milkshake
|
|
4
4
|
module Initializer
|
5
5
|
|
6
6
|
def self.included(base)
|
7
|
-
%w( require_frameworks check_for_unbuilt_gems load_application_initializers process ).each do |
|
8
|
-
base.send :alias_method, "#{
|
9
|
-
base.send :alias_method,
|
7
|
+
%w( require_frameworks check_for_unbuilt_gems load_application_initializers process ).each do |meth|
|
8
|
+
base.send :alias_method, "#{meth}_without_milkshake", meth
|
9
|
+
base.send :alias_method, meth, "#{meth}_with_milkshake"
|
10
10
|
end
|
11
11
|
end
|
12
12
|
|
@@ -30,7 +30,7 @@ module Milkshake
|
|
30
30
|
|
31
31
|
def process_with_milkshake
|
32
32
|
process_without_milkshake
|
33
|
-
rescue Exception =>
|
33
|
+
rescue Exception => exception
|
34
34
|
begin
|
35
35
|
Milkshake.cache.restore!
|
36
36
|
Milkshake.environment.reload!
|
@@ -38,9 +38,10 @@ module Milkshake
|
|
38
38
|
Snapshots.load(Milkshake.linker.current_snapshot)
|
39
39
|
end
|
40
40
|
rescue Exception
|
41
|
+
nil
|
41
42
|
end
|
42
43
|
|
43
|
-
raise
|
44
|
+
raise exception
|
44
45
|
end
|
45
46
|
|
46
47
|
end
|
data/lib/milkshake/template.rb
CHANGED
@@ -30,7 +30,7 @@ module Milkshake
|
|
30
30
|
|
31
31
|
def evaluate(context={})
|
32
32
|
result = @template.dup
|
33
|
-
result.gsub!(/\{\{([a-zA-Z0-9_.-]+)\}\}/) do |
|
33
|
+
result.gsub!(/\{\{([a-zA-Z0-9_.-]+)\}\}/) do |match|
|
34
34
|
(context[$1] || context[$1.to_sym]).to_s
|
35
35
|
end
|
36
36
|
result.extend SourceFile
|
@@ -40,7 +40,7 @@ module Milkshake
|
|
40
40
|
module SourceFile
|
41
41
|
def write_to(path)
|
42
42
|
FileUtils.mkdir_p(File.dirname(path))
|
43
|
-
File.open(path, 'w+') { |
|
43
|
+
File.open(path, 'w+') { |file| file.write self }
|
44
44
|
self
|
45
45
|
end
|
46
46
|
end
|
data/lib/milkshake.rb
CHANGED
data/milkshake.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{milkshake}
|
8
|
-
s.version = "0.1.
|
8
|
+
s.version = "0.1.7"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Simon Menke"]
|
12
|
-
s.date = %q{
|
12
|
+
s.date = %q{2010-01-21}
|
13
13
|
s.default_executable = %q{milkshake}
|
14
14
|
s.description = %q{Compose rails applications using several smaller rails applications}
|
15
15
|
s.email = %q{simon@mrhenry.be}
|
@@ -27,58 +27,32 @@ Gem::Specification.new do |s|
|
|
27
27
|
"VERSION",
|
28
28
|
"bin/milkshake",
|
29
29
|
"lib/milkshake.rb",
|
30
|
-
"lib/milkshake.rb",
|
31
|
-
"lib/milkshake/app.rb",
|
32
30
|
"lib/milkshake/app.rb",
|
33
31
|
"lib/milkshake/app/actions.rb",
|
34
|
-
"lib/milkshake/app/actions.rb",
|
35
|
-
"lib/milkshake/app/defaults.rb",
|
36
32
|
"lib/milkshake/app/defaults.rb",
|
37
33
|
"lib/milkshake/app/helpers.rb",
|
38
|
-
"lib/milkshake/app/helpers.rb",
|
39
|
-
"lib/milkshake/automagic.rb",
|
40
34
|
"lib/milkshake/automagic.rb",
|
41
35
|
"lib/milkshake/cache.rb",
|
42
|
-
"lib/milkshake/cache.rb",
|
43
36
|
"lib/milkshake/dependency_resolver.rb",
|
44
|
-
"lib/milkshake/dependency_resolver.rb",
|
45
|
-
"lib/milkshake/environment.rb",
|
46
37
|
"lib/milkshake/environment.rb",
|
47
38
|
"lib/milkshake/extender.rb",
|
48
|
-
"lib/milkshake/extender.rb",
|
49
39
|
"lib/milkshake/linker.rb",
|
50
|
-
"lib/milkshake/linker.rb",
|
51
|
-
"lib/milkshake/loader.rb",
|
52
40
|
"lib/milkshake/loader.rb",
|
53
41
|
"lib/milkshake/rails_extentions/boot.rb",
|
54
|
-
"lib/milkshake/rails_extentions/boot.rb",
|
55
42
|
"lib/milkshake/rails_extentions/configuration.rb",
|
56
|
-
"lib/milkshake/rails_extentions/configuration.rb",
|
57
|
-
"lib/milkshake/rails_extentions/initializer.rb",
|
58
43
|
"lib/milkshake/rails_extentions/initializer.rb",
|
59
44
|
"lib/milkshake/rails_extentions/migrations.rb",
|
60
|
-
"lib/milkshake/rails_extentions/migrations.rb",
|
61
|
-
"lib/milkshake/rails_fallbacks/application_controller.rb",
|
62
45
|
"lib/milkshake/rails_fallbacks/application_controller.rb",
|
63
46
|
"lib/milkshake/rubygems_extentions/specification.rb",
|
64
|
-
"lib/milkshake/rubygems_extentions/specification.rb",
|
65
|
-
"lib/milkshake/template.rb",
|
66
47
|
"lib/milkshake/template.rb",
|
67
48
|
"lib/milkshake/validator.rb",
|
68
|
-
"lib/milkshake/validator.rb",
|
69
49
|
"milkshake.gemspec",
|
70
50
|
"templates/gitignore",
|
71
|
-
"templates/gitignore",
|
72
|
-
"templates/gitignore_for_data",
|
73
51
|
"templates/gitignore_for_data",
|
74
52
|
"templates/jeweler.rake",
|
75
|
-
"templates/jeweler.rake",
|
76
53
|
"templates/milkshake.yml",
|
77
|
-
"templates/milkshake.yml",
|
78
|
-
"templates/preinitializer.rb",
|
79
54
|
"templates/preinitializer.rb",
|
80
55
|
"templates/routes.rb",
|
81
|
-
"templates/routes.rb",
|
82
56
|
"test/milkshake_test.rb",
|
83
57
|
"test/test_helper.rb"
|
84
58
|
]
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: milkshake
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Simon Menke
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date:
|
12
|
+
date: 2010-01-21 00:00:00 +01:00
|
13
13
|
default_executable: milkshake
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|