cartage 1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,47 @@
1
+ require 'minitest_config'
2
+ require 'cartage/config'
3
+
4
+ describe Cartage::Config do
5
+ before do
6
+ @data = {
7
+ "x" => 1,
8
+ "arr" => %w(a b c),
9
+ "plugins" => {
10
+ "test" => {
11
+ "x" => 2
12
+ }
13
+ },
14
+ "development" => {
15
+ "x" => 3,
16
+ "plugins" => {
17
+ "test" => OpenStruct.new("x" => 4)
18
+ }
19
+ }
20
+ }
21
+
22
+ @odata = Cartage::Config.send(:ostructify, @data)
23
+ @config = Cartage::Config.new(@odata)
24
+ @hdata = Marshal.load(Marshal.dump(@data))
25
+ @hdata['development']['plugins']['test'] = { "x" => 4 }
26
+ end
27
+
28
+ describe '#ostructify (private)' do
29
+ it 'converts hash structures correctly' do
30
+ expected = OpenStruct.new(x: 1)
31
+ expected.arr = %w(a b c)
32
+ expected.plugins = OpenStruct.new
33
+ expected.plugins.test = OpenStruct.new(x: 2)
34
+ expected.development = OpenStruct.new(x: 3)
35
+ expected.development.plugins = OpenStruct.new
36
+ expected.development.plugins.test = OpenStruct.new(x: 4)
37
+
38
+ assert_equal expected, @odata
39
+ end
40
+ end
41
+
42
+ describe '#to_h' do
43
+ it 'completely converts a Config object to hash' do
44
+ assert_equal @hdata, @config.to_h
45
+ end
46
+ end
47
+ end
metadata ADDED
@@ -0,0 +1,348 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: cartage
3
+ version: !ruby/object:Gem::Version
4
+ version: '1.0'
5
+ platform: ruby
6
+ authors:
7
+ - Austin Ziegler
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-03-24 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: cmdparse
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '3.0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '3.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: minitest
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '5.5'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '5.5'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rdoc
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '4.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '4.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rake
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '10.0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '10.0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: hoe-doofus
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '1.0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '1.0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: hoe-gemspec2
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '1.1'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '1.1'
97
+ - !ruby/object:Gem::Dependency
98
+ name: hoe-git
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '1.5'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '1.5'
111
+ - !ruby/object:Gem::Dependency
112
+ name: hoe-geminabox
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '0.3'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '0.3'
125
+ - !ruby/object:Gem::Dependency
126
+ name: hoe-travis
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: '1.2'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: '1.2'
139
+ - !ruby/object:Gem::Dependency
140
+ name: minitest-autotest
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - "~>"
144
+ - !ruby/object:Gem::Version
145
+ version: '1.0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - "~>"
151
+ - !ruby/object:Gem::Version
152
+ version: '1.0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: minitest-bisect
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - "~>"
158
+ - !ruby/object:Gem::Version
159
+ version: '1.2'
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - "~>"
165
+ - !ruby/object:Gem::Version
166
+ version: '1.2'
167
+ - !ruby/object:Gem::Dependency
168
+ name: minitest-focus
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - "~>"
172
+ - !ruby/object:Gem::Version
173
+ version: '1.1'
174
+ type: :development
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - "~>"
179
+ - !ruby/object:Gem::Version
180
+ version: '1.1'
181
+ - !ruby/object:Gem::Dependency
182
+ name: minitest-moar
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - "~>"
186
+ - !ruby/object:Gem::Version
187
+ version: '0.0'
188
+ type: :development
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - "~>"
193
+ - !ruby/object:Gem::Version
194
+ version: '0.0'
195
+ - !ruby/object:Gem::Dependency
196
+ name: minitest-pretty_diff
197
+ requirement: !ruby/object:Gem::Requirement
198
+ requirements:
199
+ - - "~>"
200
+ - !ruby/object:Gem::Version
201
+ version: '0.1'
202
+ type: :development
203
+ prerelease: false
204
+ version_requirements: !ruby/object:Gem::Requirement
205
+ requirements:
206
+ - - "~>"
207
+ - !ruby/object:Gem::Version
208
+ version: '0.1'
209
+ - !ruby/object:Gem::Dependency
210
+ name: simplecov
211
+ requirement: !ruby/object:Gem::Requirement
212
+ requirements:
213
+ - - "~>"
214
+ - !ruby/object:Gem::Version
215
+ version: '0.7'
216
+ type: :development
217
+ prerelease: false
218
+ version_requirements: !ruby/object:Gem::Requirement
219
+ requirements:
220
+ - - "~>"
221
+ - !ruby/object:Gem::Version
222
+ version: '0.7'
223
+ - !ruby/object:Gem::Dependency
224
+ name: hoe
225
+ requirement: !ruby/object:Gem::Requirement
226
+ requirements:
227
+ - - "~>"
228
+ - !ruby/object:Gem::Version
229
+ version: '3.13'
230
+ type: :development
231
+ prerelease: false
232
+ version_requirements: !ruby/object:Gem::Requirement
233
+ requirements:
234
+ - - "~>"
235
+ - !ruby/object:Gem::Version
236
+ version: '3.13'
237
+ description: |-
238
+ Cartage provides a plug-in based tool to reliably create a package for a
239
+ Bundler-based Ruby application that can be used in deployment with a
240
+ configuration tool like Ansible, Chef, Puppet, or Salt. The package is created
241
+ with its dependencies bundled in +vendor/bundle+, so it can be deployed in
242
+ environments with strict access control rules and without requiring development
243
+ tool access.
244
+
245
+ Cartage has learned its tricks from Heroku, Capistrano, and Hoe. From Hoe, it
246
+ learned to keep a manifest to control what is packaged (as well as its plug-in
247
+ system). From Heroku, it learned to keep a simple ignore file. From Capistrano,
248
+ it learned to mark the Git hashref as a file in its built package, and to
249
+ timestamp the packages.
250
+
251
+ Cartage follows a relatively simple set of steps when creating a package:
252
+
253
+ 1. Copy the application files to the work area. The application’s files are
254
+ specified in +Manifest.txt+ and filtered against the exclusion list
255
+ (+.cartignore+). If there is no +.cartignore+, try to use +.slugignore+. If
256
+ there is no +.slugignore+, Cartage will use a sensible default exclusion
257
+ list. To override the use of this exclusion list, an empty +.cartignore+
258
+ file must be present.
259
+
260
+ 2. The Git hashref is written to the work area (as +release_hashref+) and to
261
+ the package staging area.
262
+
263
+ 3. Files that have been modified are restored to pristine condition in the
264
+ work area. The source files are not touched. (This ensures that
265
+ +config/database.yml+, for example, will not be the version used by a
266
+ continuous integration system.)
267
+
268
+ 4. Bundler is fetched into the work area, and the bundle is installed into the
269
+ work area’s +vendor/bundle+ without the +development+ and +test+
270
+ environments. If a bundle cache is kept (by default, one is), the resulting
271
+ +vendor/bundle+ will be put into a bundle cache so that future bundle
272
+ installs are faster.
273
+
274
+ 5. A timestamped tarball is created from the contents of the work area. It can
275
+ then be copied to a more permanent or accessible location.
276
+
277
+ Cartage is extremely opinionated about its tools and environment:
278
+
279
+ * The packages are created with +tar+ and +bzip2+ using <tt>tar cfj</tt>.
280
+ * Cartage only understands +git+, which is used for creating
281
+ <tt>release_hashref</tt>s, +Manifest.txt+ creation and comparison, and even
282
+ default application name detection (from the name of the origin remote).
283
+ email:
284
+ - aziegler@kineticcafe.com
285
+ executables:
286
+ - cartage
287
+ extensions: []
288
+ extra_rdoc_files:
289
+ - Cartage.yml.rdoc
290
+ - Contributing.rdoc
291
+ - History.rdoc
292
+ - Licence.rdoc
293
+ - Manifest.txt
294
+ - README.rdoc
295
+ files:
296
+ - ".autotest"
297
+ - ".gemtest"
298
+ - ".minitest.rb"
299
+ - ".travis.yml"
300
+ - Cartage.yml.rdoc
301
+ - Contributing.rdoc
302
+ - Gemfile
303
+ - History.rdoc
304
+ - Licence.rdoc
305
+ - Manifest.txt
306
+ - README.rdoc
307
+ - Rakefile
308
+ - bin/cartage
309
+ - cartage.yml.sample
310
+ - lib/cartage.rb
311
+ - lib/cartage/command.rb
312
+ - lib/cartage/config.rb
313
+ - lib/cartage/manifest.rb
314
+ - lib/cartage/manifest/commands.rb
315
+ - lib/cartage/pack_command.rb
316
+ - lib/cartage/plugin.rb
317
+ - test/minitest_config.rb
318
+ - test/test_cartage.rb
319
+ - test/test_cartage_config.rb
320
+ homepage: https://github.com/KineticCafe/cartage/
321
+ licenses:
322
+ - MIT
323
+ metadata: {}
324
+ post_install_message:
325
+ rdoc_options:
326
+ - "--main"
327
+ - README.rdoc
328
+ require_paths:
329
+ - lib
330
+ required_ruby_version: !ruby/object:Gem::Requirement
331
+ requirements:
332
+ - - ">="
333
+ - !ruby/object:Gem::Version
334
+ version: '0'
335
+ required_rubygems_version: !ruby/object:Gem::Requirement
336
+ requirements:
337
+ - - ">="
338
+ - !ruby/object:Gem::Version
339
+ version: '0'
340
+ requirements: []
341
+ rubyforge_project:
342
+ rubygems_version: 2.2.2
343
+ signing_key:
344
+ specification_version: 4
345
+ summary: Cartage provides a plug-in based tool to reliably create a package for a
346
+ Bundler-based Ruby application that can be used in deployment with a configuration
347
+ tool like Ansible, Chef, Puppet, or Salt
348
+ test_files: []