cartage 1.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.
@@ -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: []