ruby_yacht 0.3.0 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/doc/TODO.md +1 -8
- data/lib/ruby_yacht/dsl/app.rb +37 -10
- data/lib/ruby_yacht/dsl/configuration.rb +21 -21
- data/lib/ruby_yacht/dsl/database.rb +53 -0
- data/lib/ruby_yacht/dsl/dsl.rb +14 -8
- data/lib/ruby_yacht/dsl/hook.rb +35 -15
- data/lib/ruby_yacht/dsl/project.rb +23 -10
- data/lib/ruby_yacht/dsl/{app_type.rb → server_type.rb} +39 -29
- data/lib/ruby_yacht/dsl.rb +1 -1
- data/lib/ruby_yacht/images/app/Dockerfile.erb +9 -5
- data/lib/ruby_yacht/images/app-dependencies/Dockerfile.erb +2 -2
- data/lib/ruby_yacht/images/database/Dockerfile.erb +12 -11
- data/lib/ruby_yacht/images/web/Dockerfile.erb +6 -2
- data/lib/ruby_yacht/images/web/add_app.rb +7 -1
- data/lib/ruby_yacht/images/web/app_config.erb +2 -0
- data/lib/ruby_yacht/plugins/mysql/scripts/setup.bash +11 -0
- data/lib/ruby_yacht/plugins/mysql.rb +27 -0
- data/lib/ruby_yacht/plugins/rails/scripts/install_gems.rb +6 -1
- data/lib/ruby_yacht/plugins/rails/scripts/load_seeds.rb +6 -4
- data/lib/ruby_yacht/plugins/rails/scripts/prepare_rails_for_launch.rb +1 -0
- data/lib/ruby_yacht/plugins/rails/scripts/update_rails_config.rb +1 -5
- data/lib/ruby_yacht/plugins/rails.rb +12 -4
- data/lib/ruby_yacht/plugins.rb +2 -1
- data/lib/ruby_yacht/runner/build_images.rb +32 -26
- data/lib/ruby_yacht/runner/checkout.rb +5 -4
- data/lib/ruby_yacht/runner/run_containers.rb +7 -6
- data/lib/ruby_yacht/runner/services.rb +2 -2
- data/lib/ruby_yacht/runner/shell.rb +5 -4
- data/lib/ruby_yacht/runner/update_hosts.rb +2 -1
- data/ruby_yacht.gemspec +1 -1
- data/spec/dsl/app_spec.rb +96 -10
- data/spec/dsl/configuration_spec.rb +53 -55
- data/spec/dsl/database_spec.rb +70 -12
- data/spec/dsl/hook_spec.rb +36 -19
- data/spec/dsl/project_spec.rb +26 -18
- data/spec/dsl/{app_type_spec.rb → server_type_spec.rb} +52 -28
- data/spec/fixtures/app-dependencies-dockerfile-rails +3 -0
- data/spec/fixtures/database-dockerfile +1 -8
- data/spec/fixtures/database-dockerfile-mysql +30 -0
- data/spec/fixtures/database-dockerfile-rails +1 -5
- data/spec/fixtures/database-dockerfile-with-seed-hooks +1 -8
- data/spec/fixtures/mars-before-startup-with-custom-file-copy +6 -0
- data/spec/fixtures/mars-dockerfile +0 -4
- data/spec/fixtures/mars-dockerfile-rails +2 -2
- data/spec/fixtures/mars-dockerfile-with-after-checkout-hooks +0 -4
- data/spec/fixtures/mars-dockerfile-with-before-startup-hooks +0 -4
- data/spec/fixtures/mars-dockerfile-with-custom-file-copy +23 -0
- data/spec/fixtures/mars-dockerfile-with-local-database +27 -0
- data/spec/fixtures/mars-dockerfile-with-remote-database +27 -0
- data/spec/fixtures/web-dockerfile-with-eponymous-app +20 -0
- data/spec/plugins/mysql_spec.rb +64 -0
- data/spec/plugins/rails_spec.rb +103 -43
- data/spec/runner/build_images_spec.rb +142 -11
- data/spec/runner/checkout_spec.rb +4 -4
- data/spec/runner/run_containers_spec.rb +21 -2
- data/spec/runner/runner_spec.rb +1 -1
- data/spec/runner/services_spec.rb +7 -2
- data/spec/runner/shell_spec.rb +3 -3
- data/spec/runner/update_hosts_spec.rb +26 -0
- data/spec/support/test_project.rb +16 -20
- metadata +20 -5
- data/lib/ruby_yacht/images/database/setup.bash +0 -15
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 84782d5ec6a5667641c4e5ac79af922256a343b9
|
4
|
+
data.tar.gz: fac43df97940c4e8bcb21b1173b3e8f5c67a9c7a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 09cffa04290fe6a276ca9cf586ddb6ec5ea78df49dc7889a2100c91b3e58ffbd252532352e27900f53cdc191d3d1fd40243e581d0cf949df19f739232d84cd76
|
7
|
+
data.tar.gz: 84c1952058526225483a7a284352f59b47a4d4d9bd788f9cecc8fcdec60eac7bd689b11090e99164faf625cef9722eeca43d7a5d0aaf9ed3e317632359608bc4
|
data/Gemfile.lock
CHANGED
data/doc/TODO.md
CHANGED
@@ -8,17 +8,10 @@ for open tickets.
|
|
8
8
|
approach
|
9
9
|
* Look into issues with running shell command that has its own command-line
|
10
10
|
flags.
|
11
|
-
* Add formal documentation on configuration DSL.
|
12
11
|
|
13
12
|
# Plugins
|
14
13
|
|
15
|
-
*
|
16
|
-
|
17
|
-
# More Command Line Options
|
18
|
-
|
19
|
-
* Getting status of containers
|
20
|
-
* Starting / stopping individual containers
|
21
|
-
* Clearing backups of the hosts file
|
14
|
+
* Better support for rails apps with no database
|
22
15
|
|
23
16
|
# More customization
|
24
17
|
|
data/lib/ruby_yacht/dsl/app.rb
CHANGED
@@ -14,11 +14,14 @@ module RubyYacht
|
|
14
14
|
# when building it.
|
15
15
|
#
|
16
16
|
# For instance, this would be `rails` for a Rails app.
|
17
|
-
attr_accessor :
|
17
|
+
attr_accessor :server_type
|
18
18
|
|
19
19
|
# The port that the app listens on.
|
20
20
|
attr_accessor :port
|
21
21
|
|
22
|
+
# The name of the database that this app uses as its data store.
|
23
|
+
attr_accessor :database_name
|
24
|
+
|
22
25
|
# This method gets the name of the image / container that this app will run
|
23
26
|
# in.
|
24
27
|
#
|
@@ -26,7 +29,23 @@ module RubyYacht
|
|
26
29
|
#
|
27
30
|
# * *project: RubyYacht::Project* The project the app is running in.
|
28
31
|
def container_name(project)
|
29
|
-
|
32
|
+
if project.system_prefix == self.name
|
33
|
+
return "#{project.system_prefix}"
|
34
|
+
else
|
35
|
+
return "#{project.system_prefix}-#{self.name}"
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
# This method gets the database that the app connects to.
|
40
|
+
#
|
41
|
+
# ### Parameters
|
42
|
+
#
|
43
|
+
# * *project: RubyYacht::Project* The project the app is running in.
|
44
|
+
#
|
45
|
+
# ### Returns
|
46
|
+
# RubyYacht::Database
|
47
|
+
def database(project)
|
48
|
+
project.databases.find { |database| database.name == database_name }
|
30
49
|
end
|
31
50
|
|
32
51
|
# This class provide's the DSL for configuring an app.
|
@@ -43,9 +62,9 @@ module RubyYacht
|
|
43
62
|
# ### Parameters
|
44
63
|
#
|
45
64
|
# * *name: String* The name of the app.
|
46
|
-
def initialize(name,
|
65
|
+
def initialize(name, server_type = nil)
|
47
66
|
@name = name.to_sym
|
48
|
-
@
|
67
|
+
@server_type = server_type
|
49
68
|
load_custom_attributes
|
50
69
|
end
|
51
70
|
|
@@ -57,9 +76,15 @@ module RubyYacht
|
|
57
76
|
add_attribute :repository_name
|
58
77
|
|
59
78
|
##
|
60
|
-
# :method:
|
61
|
-
# You can call `
|
62
|
-
|
79
|
+
# :method: database_name
|
80
|
+
# You can call `database 'foo'` to tell the app to use the database server
|
81
|
+
# named `foo`.
|
82
|
+
add_attribute :database_name, nil, false
|
83
|
+
|
84
|
+
##
|
85
|
+
# :method: server_type
|
86
|
+
# You can call `server_type :foo` to set the app's `server_type`.
|
87
|
+
add_attribute :server_type
|
63
88
|
|
64
89
|
##
|
65
90
|
# :method: port
|
@@ -73,11 +98,13 @@ module RubyYacht
|
|
73
98
|
#
|
74
99
|
# If they haven't, this will raise an exception.
|
75
100
|
#
|
76
|
-
# It also checks that the
|
101
|
+
# It also checks that the server type has been defined in the
|
102
|
+
# configuration.
|
77
103
|
def check_required_attributes
|
78
104
|
super
|
79
|
-
|
80
|
-
|
105
|
+
server_type = RubyYacht.configuration.find_server_type(@server_type)
|
106
|
+
unless server_type && server_type.container_type == :app
|
107
|
+
raise "App has invalid server type `#{@server_type}`"
|
81
108
|
end
|
82
109
|
end
|
83
110
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require_relative 'project'
|
2
2
|
require_relative 'hook'
|
3
|
-
require_relative '
|
3
|
+
require_relative 'server_type'
|
4
4
|
|
5
5
|
module RubyYacht
|
6
6
|
# This class stores the configuration for the system.
|
@@ -16,7 +16,7 @@ module RubyYacht
|
|
16
16
|
def clear
|
17
17
|
@projects = []
|
18
18
|
@hooks = []
|
19
|
-
@
|
19
|
+
@server_types = []
|
20
20
|
end
|
21
21
|
|
22
22
|
# The projects that are part of this system.
|
@@ -29,7 +29,7 @@ module RubyYacht
|
|
29
29
|
|
30
30
|
# The app types that we can support.
|
31
31
|
# Each entry is a Symbol.
|
32
|
-
attr_accessor :
|
32
|
+
attr_accessor :server_types
|
33
33
|
|
34
34
|
# This method pulls up the hooks that we have defined.
|
35
35
|
#
|
@@ -52,17 +52,17 @@ module RubyYacht
|
|
52
52
|
end
|
53
53
|
end
|
54
54
|
|
55
|
-
# This method finds an
|
55
|
+
# This method finds an server type by name.
|
56
56
|
#
|
57
57
|
# ### Parameters
|
58
58
|
#
|
59
|
-
# * **name: Symbol** The name of the
|
59
|
+
# * **name: Symbol** The name of the server type to return.
|
60
60
|
#
|
61
61
|
# ### Returns
|
62
62
|
#
|
63
|
-
# The RubyYacht::
|
64
|
-
def
|
65
|
-
self.
|
63
|
+
# The RubyYacht::ServerType with that name.
|
64
|
+
def find_server_type(name)
|
65
|
+
self.server_types.find { |type| type.name == name }
|
66
66
|
end
|
67
67
|
|
68
68
|
# This method provides a DSL for top-level configuration.
|
@@ -96,20 +96,20 @@ module RubyYacht
|
|
96
96
|
add_object_list :hook, RubyYacht::Hook::DSL
|
97
97
|
|
98
98
|
##
|
99
|
-
# :method:
|
99
|
+
# :method: server_type
|
100
100
|
#
|
101
|
-
# This method adds
|
101
|
+
# This method adds a server type to the configuration.
|
102
102
|
#
|
103
103
|
# This takes type's name as its argument. It also takes a block which you
|
104
104
|
# can use to configure the type, using
|
105
|
-
# RubyYacht::
|
106
|
-
add_object_list :
|
105
|
+
# RubyYacht::ServerType::DSL.
|
106
|
+
add_object_list :server_type, RubyYacht::ServerType::DSL
|
107
107
|
|
108
108
|
# The path for files and other resources from configuration hooks.
|
109
109
|
attr_accessor :hook_folder
|
110
110
|
|
111
111
|
# The app type for hooks that we are defining in the current block.
|
112
|
-
attr_accessor :
|
112
|
+
attr_accessor :hook_server_type
|
113
113
|
|
114
114
|
# This method sets default attributes for a group of hooks.
|
115
115
|
#
|
@@ -121,7 +121,7 @@ module RubyYacht
|
|
121
121
|
# * **folder: String** The full path to the script folder.
|
122
122
|
# * **block** A block for adding the hooks.
|
123
123
|
def add_hooks(options = {}, &block)
|
124
|
-
keys = [:folder, :
|
124
|
+
keys = [:folder, :server_type]
|
125
125
|
old_options = {}
|
126
126
|
keys.each do |key|
|
127
127
|
old_options[key] = self.send("hook_#{key}")
|
@@ -174,16 +174,16 @@ module RubyYacht
|
|
174
174
|
add_hook :during, event_type, &block
|
175
175
|
end
|
176
176
|
|
177
|
-
creates_object Configuration, %w(projects hooks
|
177
|
+
creates_object Configuration, %w(projects hooks server_types)
|
178
178
|
|
179
179
|
private
|
180
180
|
|
181
181
|
def add_hook(event_time, event_type, &block)
|
182
182
|
folder = hook_folder
|
183
|
-
type =
|
183
|
+
type = hook_server_type
|
184
184
|
hook event_time, event_type do
|
185
185
|
script_folder folder
|
186
|
-
|
186
|
+
server_type type
|
187
187
|
instance_eval(&block)
|
188
188
|
end
|
189
189
|
end
|
@@ -203,11 +203,11 @@ module RubyYacht
|
|
203
203
|
self.configuration.send("#{field}=", self.configuration.send(field) + new_configuration.send(field))
|
204
204
|
end
|
205
205
|
|
206
|
-
new_configuration.
|
207
|
-
if self.configuration.
|
208
|
-
raise "
|
206
|
+
new_configuration.server_types.each do |type|
|
207
|
+
if self.configuration.server_types.any? { |existing| existing.name == type.name }
|
208
|
+
raise "Server type already registered: #{type.name}"
|
209
209
|
end
|
210
|
-
self.configuration.
|
210
|
+
self.configuration.server_types << type
|
211
211
|
end
|
212
212
|
end
|
213
213
|
|
@@ -9,17 +9,31 @@ module RubyYacht
|
|
9
9
|
# The name of the database
|
10
10
|
attr_accessor :name
|
11
11
|
|
12
|
+
# The type of database server we're using.
|
13
|
+
attr_accessor :server_type
|
14
|
+
|
12
15
|
# The username we use to connect to the database
|
13
16
|
attr_accessor :username
|
14
17
|
|
15
18
|
# The password we use to connect to the database
|
16
19
|
attr_accessor :password
|
20
|
+
|
21
|
+
# The database-specific part of the container name for this database.
|
22
|
+
attr_accessor :container_label
|
17
23
|
|
18
24
|
# Whether the database is running on the same machine as the app servers.
|
19
25
|
def local?
|
20
26
|
host == 'localhost'
|
21
27
|
end
|
22
28
|
|
29
|
+
# This method gets the name of the container and image for this database.
|
30
|
+
#
|
31
|
+
# This will be the project's prefix followed by the database's container
|
32
|
+
# label.
|
33
|
+
def container_name(project)
|
34
|
+
"#{project.system_prefix}-#{container_label}"
|
35
|
+
end
|
36
|
+
|
23
37
|
# This class provides a DSL for configuring a database.
|
24
38
|
#
|
25
39
|
# You can access this DSL by calling `database` within `RubyYacht::Project::DSL`.
|
@@ -28,6 +42,18 @@ module RubyYacht
|
|
28
42
|
include RubyYacht::DSL::Base
|
29
43
|
extend RubyYacht::DSL::Base::ClassMethods
|
30
44
|
|
45
|
+
# This initializer starts the DSL for the database.
|
46
|
+
#
|
47
|
+
# ### Parameters
|
48
|
+
#
|
49
|
+
# * **name: String** The name of the database.
|
50
|
+
# * **server_type: Symbol** The type of database server this is.
|
51
|
+
def initialize(name, server_type = nil)
|
52
|
+
@name = name
|
53
|
+
@server_type = server_type
|
54
|
+
load_custom_attributes
|
55
|
+
end
|
56
|
+
|
31
57
|
##
|
32
58
|
# :method: host
|
33
59
|
# You can call `host 'db.test.com'` to set the database's host.
|
@@ -39,6 +65,12 @@ module RubyYacht
|
|
39
65
|
# named `my_database`.
|
40
66
|
add_attribute :name
|
41
67
|
|
68
|
+
#
|
69
|
+
# :method: server_type
|
70
|
+
# You can call `server_type` :sqlite` to tell the apps to use the database
|
71
|
+
# server type sqlite.
|
72
|
+
add_attribute :server_type
|
73
|
+
|
42
74
|
##
|
43
75
|
# :method: username
|
44
76
|
# You can call `username 'db-user'` to tell the apps to connect to the
|
@@ -51,7 +83,28 @@ module RubyYacht
|
|
51
83
|
# password `testpass`.
|
52
84
|
add_attribute :password
|
53
85
|
|
86
|
+
##
|
87
|
+
# :method: container_label
|
88
|
+
# You can call `container_label 'mysql'` to give this database a container
|
89
|
+
# name that is {project}-mysql.
|
90
|
+
add_attribute :container_label, :database
|
91
|
+
|
54
92
|
creates_object Database
|
93
|
+
|
94
|
+
# This method checks that all of the required attributes have been set on
|
95
|
+
# the object.
|
96
|
+
#
|
97
|
+
# If they haven't, this will raise an exception.
|
98
|
+
#
|
99
|
+
# It also checks that the server type has been defined in the
|
100
|
+
# configuration.
|
101
|
+
def check_required_attributes
|
102
|
+
super
|
103
|
+
server_type = RubyYacht.configuration.find_server_type(@server_type)
|
104
|
+
unless server_type && server_type.container_type == :database
|
105
|
+
raise "Database has invalid server type `#{@server_type}`"
|
106
|
+
end
|
107
|
+
end
|
55
108
|
end
|
56
109
|
end
|
57
110
|
end
|
data/lib/ruby_yacht/dsl/dsl.rb
CHANGED
@@ -188,6 +188,14 @@ module RubyYacht
|
|
188
188
|
@copied_attributes = attributes
|
189
189
|
@created_type = type
|
190
190
|
end
|
191
|
+
|
192
|
+
# This method gets the attribute that server types can use to specify
|
193
|
+
# custom attributes for this DSL type.
|
194
|
+
#
|
195
|
+
# The default is `server_attributes`.
|
196
|
+
def custom_attribute_method
|
197
|
+
:server_attributes
|
198
|
+
end
|
191
199
|
end
|
192
200
|
|
193
201
|
# This initializer creates a new DSL instance.
|
@@ -207,14 +215,12 @@ module RubyYacht
|
|
207
215
|
end
|
208
216
|
|
209
217
|
if self.class.created_type
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
if app_type.respond_to?("#{dsl_type}_attributes")
|
215
|
-
attributes = app_type.send(method_name)
|
218
|
+
RubyYacht.configuration.server_types.each do |server_type|
|
219
|
+
next if @server_type && server_type.name != @server_type
|
220
|
+
if server_type.respond_to?(self.class.custom_attribute_method)
|
221
|
+
attributes = server_type.send(self.class.custom_attribute_method)
|
216
222
|
attributes.each do |attribute|
|
217
|
-
attribute = attribute.merge(name: "#{
|
223
|
+
attribute = attribute.merge(name: "#{server_type.name}_#{attribute[:name]}")
|
218
224
|
load_custom_attribute(attribute)
|
219
225
|
end
|
220
226
|
end
|
@@ -263,7 +269,7 @@ module RubyYacht
|
|
263
269
|
defaults.each do |name, value|
|
264
270
|
copy =
|
265
271
|
case value
|
266
|
-
when TrueClass, FalseClass, Fixnum
|
272
|
+
when TrueClass, FalseClass, Fixnum, Symbol
|
267
273
|
value
|
268
274
|
else
|
269
275
|
value.dup
|
data/lib/ruby_yacht/dsl/hook.rb
CHANGED
@@ -16,19 +16,19 @@ module RubyYacht
|
|
16
16
|
# The type of event that this hook is attached to.
|
17
17
|
attr_accessor :event_type
|
18
18
|
|
19
|
-
# The type of
|
20
|
-
attr_accessor :
|
19
|
+
# The type of server that this hook applies to.
|
20
|
+
attr_accessor :server_type
|
21
21
|
|
22
|
-
# The path to the
|
23
|
-
attr_accessor :
|
22
|
+
# The path to the file that we should copy into the image for this hook.
|
23
|
+
attr_accessor :copied_file_path
|
24
24
|
|
25
25
|
# The command that we should run for this hook.
|
26
26
|
attr_accessor :command
|
27
27
|
|
28
28
|
# The name of the file containing the code for this hook.
|
29
|
-
def
|
30
|
-
return '' unless
|
31
|
-
File.basename(
|
29
|
+
def copied_file_name
|
30
|
+
return '' unless copied_file_path
|
31
|
+
File.basename(copied_file_path)
|
32
32
|
end
|
33
33
|
|
34
34
|
# This class provides a DSL for configuring hooks.
|
@@ -46,16 +46,15 @@ module RubyYacht
|
|
46
46
|
def initialize(event_time, event_type)
|
47
47
|
@event_time = event_time
|
48
48
|
@event_type = event_type
|
49
|
-
@script_path = nil
|
50
49
|
load_custom_attributes
|
51
50
|
end
|
52
51
|
|
53
52
|
##
|
54
|
-
# :method:
|
53
|
+
# :method: server_type
|
55
54
|
#
|
56
|
-
# You can call `
|
55
|
+
# You can call `server_type :rails` to signify that this hook applies to
|
57
56
|
# rails apps.
|
58
|
-
add_attribute :
|
57
|
+
add_attribute :server_type
|
59
58
|
|
60
59
|
##
|
61
60
|
# :method: command
|
@@ -64,6 +63,22 @@ module RubyYacht
|
|
64
63
|
# command `whoami`. You can also set the command through `run_script`, if
|
65
64
|
# the hook runs a script file included with the plugin.
|
66
65
|
add_attribute :command
|
66
|
+
|
67
|
+
##
|
68
|
+
# :method: copy_file
|
69
|
+
#
|
70
|
+
# You can call `copy_file 'foo.txt'` to signify that this hook should
|
71
|
+
# copy a file called `foo.txt` from the hook's script folder to
|
72
|
+
# `/var/docker`.
|
73
|
+
#
|
74
|
+
# You can pair this with a command if you want to move it from that
|
75
|
+
# location in /var/docker into a custom location inside your code folder.
|
76
|
+
#
|
77
|
+
# The file copying happens at the time the image has built.
|
78
|
+
#
|
79
|
+
# When setting this attribute, you must provide another command using the
|
80
|
+
# `command` method.
|
81
|
+
add_attribute :copy_file, nil, false
|
67
82
|
|
68
83
|
##
|
69
84
|
# :method: script_folder
|
@@ -82,7 +97,7 @@ module RubyYacht
|
|
82
97
|
#
|
83
98
|
# * **name: String** The filename of the script.
|
84
99
|
def run_script(name)
|
85
|
-
@
|
100
|
+
@copy_file = name
|
86
101
|
@command = "/var/docker/#{name}"
|
87
102
|
end
|
88
103
|
|
@@ -94,12 +109,17 @@ module RubyYacht
|
|
94
109
|
# This will also check that the app type is valid.
|
95
110
|
def check_required_attributes
|
96
111
|
super
|
97
|
-
unless RubyYacht.configuration.
|
98
|
-
raise "Hook has invalid app type `#{@
|
112
|
+
unless RubyYacht.configuration.find_server_type(@server_type)
|
113
|
+
raise "Hook has invalid app type `#{@server_type}`"
|
99
114
|
end
|
100
115
|
end
|
116
|
+
|
117
|
+
def create_object
|
118
|
+
@copied_file_path = File.join(@script_folder || '.', @copy_file) if @copy_file
|
119
|
+
super
|
120
|
+
end
|
101
121
|
|
102
|
-
creates_object RubyYacht::Hook, %w(event_time event_type
|
122
|
+
creates_object RubyYacht::Hook, %w(event_time event_type copied_file_path server_type command)
|
103
123
|
end
|
104
124
|
end
|
105
125
|
end
|
@@ -27,13 +27,14 @@ module RubyYacht
|
|
27
27
|
# keeping it entirely inside the container.
|
28
28
|
attr_accessor :check_out_locally
|
29
29
|
|
30
|
-
# The configuration for the
|
31
|
-
attr_accessor :
|
30
|
+
# The configuration for the databases. Each entry is a RubyYacht::Database.
|
31
|
+
attr_accessor :databases
|
32
32
|
|
33
33
|
# The configuration for the apps. Each entry is a RubyYacht::App.
|
34
34
|
attr_accessor :apps
|
35
35
|
|
36
|
-
# The configuration for the DNS for the apps. This is a
|
36
|
+
# The configuration for the DNS for the apps. This is a
|
37
|
+
# RubyYacht::DnsServer.
|
37
38
|
attr_accessor :dns_server
|
38
39
|
|
39
40
|
# The name of the primary app for the project.
|
@@ -108,12 +109,10 @@ module RubyYacht
|
|
108
109
|
##
|
109
110
|
# :method: database
|
110
111
|
#
|
111
|
-
# You can call `database` to configure
|
112
|
+
# You can call `database` to configure a database for the project.
|
112
113
|
# This takes a block for configuring the database, which allows you to
|
113
114
|
# call methods in RubyYacht::Database::DSL
|
114
|
-
|
115
|
-
# You must call this in your project config.
|
116
|
-
add_object :database, RubyYacht::Database::DSL
|
115
|
+
add_object_list :database, RubyYacht::Database::DSL
|
117
116
|
|
118
117
|
##
|
119
118
|
# :method: dns_server
|
@@ -133,12 +132,26 @@ module RubyYacht
|
|
133
132
|
# For the app type with the name `foo`, this will create a `foo_app`
|
134
133
|
# method on the DSL that builds an app with the type `foo`.
|
135
134
|
def load_app_initializers
|
136
|
-
RubyYacht.configuration.
|
137
|
-
|
138
|
-
|
135
|
+
RubyYacht.configuration.server_types.each do |server_type|
|
136
|
+
method_name = "#{server_type.name}_#{server_type.container_type}"
|
137
|
+
define_singleton_method method_name do |name, &block|
|
138
|
+
self.public_send(
|
139
|
+
server_type.container_type,
|
140
|
+
name,
|
141
|
+
server_type.name,
|
142
|
+
&block
|
143
|
+
)
|
139
144
|
end
|
140
145
|
end
|
141
146
|
end
|
147
|
+
|
148
|
+
# This method gets the attribute that server types can use to specify
|
149
|
+
# custom attributes for this DSL type.
|
150
|
+
#
|
151
|
+
# This DSL uses `project_attributes`.
|
152
|
+
def self.custom_attribute_method
|
153
|
+
:project_attributes
|
154
|
+
end
|
142
155
|
end
|
143
156
|
end
|
144
157
|
end
|