utopia 2.20.1 → 2.22.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (75) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/bake/utopia/environment.rb +90 -0
  4. data/bake/utopia/node.rb +3 -1
  5. data/bake/utopia/server.rb +61 -0
  6. data/bake/utopia/shell.rb +3 -1
  7. data/bake/utopia/site.rb +188 -0
  8. data/bake/utopia/static.rb +3 -2
  9. data/bake/utopia.rb +3 -1
  10. data/lib/utopia/content/document.rb +2 -19
  11. data/lib/utopia/content/link.rb +4 -19
  12. data/lib/utopia/content/links.rb +2 -19
  13. data/lib/utopia/content/markup.rb +2 -19
  14. data/lib/utopia/content/namespace.rb +2 -19
  15. data/lib/utopia/content/node.rb +4 -20
  16. data/lib/utopia/content/response.rb +2 -19
  17. data/lib/utopia/content/tags.rb +2 -19
  18. data/lib/utopia/content.rb +2 -19
  19. data/lib/utopia/content_length.rb +2 -19
  20. data/lib/utopia/controller/actions.rb +2 -19
  21. data/lib/utopia/controller/base.rb +2 -19
  22. data/lib/utopia/controller/respond.rb +2 -19
  23. data/lib/utopia/controller/rewrite.rb +2 -19
  24. data/lib/utopia/controller/variables.rb +2 -19
  25. data/lib/utopia/controller.rb +2 -19
  26. data/lib/utopia/exceptions/handler.rb +2 -19
  27. data/lib/utopia/exceptions/mailer.rb +2 -19
  28. data/lib/utopia/exceptions.rb +2 -19
  29. data/lib/utopia/extensions/array_split.rb +3 -20
  30. data/lib/utopia/extensions/date_comparisons.rb +3 -20
  31. data/lib/utopia/http.rb +2 -19
  32. data/lib/utopia/locale.rb +2 -19
  33. data/lib/utopia/localization.rb +2 -19
  34. data/lib/utopia/logger.rb +2 -19
  35. data/lib/utopia/middleware.rb +2 -19
  36. data/lib/utopia/path/matcher.rb +2 -19
  37. data/lib/utopia/path.rb +2 -19
  38. data/lib/utopia/redirection.rb +2 -19
  39. data/lib/utopia/responder.rb +2 -19
  40. data/lib/utopia/session/lazy_hash.rb +2 -19
  41. data/lib/utopia/session/serialization.rb +2 -19
  42. data/lib/utopia/session.rb +3 -19
  43. data/lib/utopia/setup.rb +2 -19
  44. data/lib/utopia/shell.rb +2 -19
  45. data/lib/utopia/static/local_file.rb +2 -19
  46. data/lib/utopia/static/mime_types.rb +2 -19
  47. data/lib/utopia/static.rb +2 -19
  48. data/lib/utopia/version.rb +3 -20
  49. data/lib/utopia.rb +3 -20
  50. data/license.md +25 -0
  51. data/readme.md +44 -0
  52. data/setup/site/.gitignore +0 -1
  53. data/setup/site/Guardfile +13 -13
  54. data/setup/site/bake.rb +3 -1
  55. data/setup/site/config/environment.rb +3 -0
  56. data/setup/site/config/{README.md → readme.md} +0 -0
  57. data/setup/site/config/sus.rb +10 -0
  58. data/setup/site/falcon.rb +3 -0
  59. data/setup/site/fixtures/website.rb +39 -0
  60. data/setup/site/gems.rb +8 -7
  61. data/setup/site/{README.md → readme.md} +0 -0
  62. data/setup/site/test/website.rb +28 -0
  63. data.tar.gz.sig +0 -0
  64. metadata +59 -62
  65. metadata.gz.sig +0 -0
  66. data/bake/utopia/test.rb +0 -10
  67. data/bin/utopia +0 -25
  68. data/lib/utopia/command/environment.rb +0 -93
  69. data/lib/utopia/command/server.rb +0 -113
  70. data/lib/utopia/command/site.rb +0 -233
  71. data/lib/utopia/command.rb +0 -67
  72. data/setup/site/.rspec +0 -4
  73. data/setup/site/spec/spec_helper.rb +0 -16
  74. data/setup/site/spec/website_context.rb +0 -54
  75. data/setup/site/spec/website_spec.rb +0 -25
metadata CHANGED
@@ -1,47 +1,47 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: utopia
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.20.1
4
+ version: 2.22.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Samuel Williams
8
8
  - Huba Nagy
9
9
  - Michael Adams
10
10
  - Olle Jonsson
11
- - System Administrator
12
- - k1tsu
11
+ - Pierre Montelle
13
12
  autorequire:
14
13
  bindir: bin
15
14
  cert_chain:
16
15
  - |
17
16
  -----BEGIN CERTIFICATE-----
18
- MIIEhDCCAuygAwIBAgIBATANBgkqhkiG9w0BAQsFADA3MTUwMwYDVQQDDCxzYW11
19
- ZWwud2lsbGlhbXMvREM9b3Jpb250cmFuc2Zlci9EQz1jby9EQz1uejAeFw0yMTA4
20
- MTYwNjMzNDRaFw0yMjA4MTYwNjMzNDRaMDcxNTAzBgNVBAMMLHNhbXVlbC53aWxs
21
- aWFtcy9EQz1vcmlvbnRyYW5zZmVyL0RDPWNvL0RDPW56MIIBojANBgkqhkiG9w0B
22
- AQEFAAOCAY8AMIIBigKCAYEAyXLSS/cw+fXJ5e7hi+U/TeChPWeYdwJojDsFY1xr
23
- xvtqbTTL8gbLHz5LW3QD2nfwCv3qTlw0qI3Ie7a9VMJMbSvgVEGEfQirqIgJXWMj
24
- eNMDgKsMJtC7u/43abRKx7TCURW3iWyR19NRngsJJmaR51yGGGm2Kfsr+JtKKLtL
25
- L188Wm3f13KAx7QJU8qyuBnj1/gWem076hzdA7xi1DbrZrch9GCRz62xymJlrJHn
26
- 9iZEZ7AxrS7vokhMlzSr/XMUihx/8aFKtk+tMLClqxZSmBWIErWdicCGTULXCBNb
27
- E/mljo4zEVKhlTWpJklMIhr55ZRrSarKFuW7en0+tpJrfsYiAmXMJNi4XAYJH7uL
28
- rgJuJwSaa/dMz+VmUoo7VKtSfCoOI+6v5/z0sK3oT6sG6ZwyI47DBq2XqNC6tnAj
29
- w+XmCywiTQrFzMMAvcA7rPI4F0nU1rZId51rOvvfxaONp+wgTi4P8owZLw0/j0m4
30
- 8C20DYi6EYx4AHDXiLpElWh3AgMBAAGjgZowgZcwCQYDVR0TBAIwADALBgNVHQ8E
31
- BAMCBLAwHQYDVR0OBBYEFB6ZaeWKxQjGTI+pmz7cKRmMIywwMC4GA1UdEQQnMCWB
32
- I3NhbXVlbC53aWxsaWFtc0BvcmlvbnRyYW5zZmVyLmNvLm56MC4GA1UdEgQnMCWB
33
- I3NhbXVlbC53aWxsaWFtc0BvcmlvbnRyYW5zZmVyLmNvLm56MA0GCSqGSIb3DQEB
34
- CwUAA4IBgQBVoM+pu3dpdUhZM1w051iw5GfiqclAr1Psypf16Tiod/ho//4oAu6T
35
- 9fj3DPX/acWV9P/FScvqo4Qgv6g4VWO5ZU7z2JmPoTXZtYMunRAmQPFL/gSUc6aK
36
- vszMHIyhtyzRc6DnfW2AiVOjMBjaYv8xXZc9bduniRVPrLR4J7ozmGLh4o4uJp7w
37
- x9KCFaR8Lvn/r0oJWJOqb/DMAYI83YeN2Dlt3jpwrsmsONrtC5S3gOUle5afSGos
38
- bYt5ocnEpKSomR9ZtnCGljds/aeO1Xgpn2r9HHcjwnH346iNrnHmMlC7BtHUFPDg
39
- Ts92S47PTOXzwPBDsrFiq3VLbRjHSwf8rpqybQBH9MfzxGGxTaETQYOd6b4e4Ag6
40
- y92abGna0bmIEb4+Tx9rQ10Uijh1POzvr/VTH4bbIPy9FbKrRsIQ24qDbNJRtOpE
41
- RAOsIl+HOBTb252nx1kIRN5hqQx272AJCbCjKx8egcUQKffFVVCI0nye09v5CK+a
42
- HiLJ8VOFx6w=
17
+ MIIE2DCCA0CgAwIBAgIBATANBgkqhkiG9w0BAQsFADBhMRgwFgYDVQQDDA9zYW11
18
+ ZWwud2lsbGlhbXMxHTAbBgoJkiaJk/IsZAEZFg1vcmlvbnRyYW5zZmVyMRIwEAYK
19
+ CZImiZPyLGQBGRYCY28xEjAQBgoJkiaJk/IsZAEZFgJuejAeFw0yMjA4MDYwNDUz
20
+ MjRaFw0zMjA4MDMwNDUzMjRaMGExGDAWBgNVBAMMD3NhbXVlbC53aWxsaWFtczEd
21
+ MBsGCgmSJomT8ixkARkWDW9yaW9udHJhbnNmZXIxEjAQBgoJkiaJk/IsZAEZFgJj
22
+ bzESMBAGCgmSJomT8ixkARkWAm56MIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIB
23
+ igKCAYEAomvSopQXQ24+9DBB6I6jxRI2auu3VVb4nOjmmHq7XWM4u3HL+pni63X2
24
+ 9qZdoq9xt7H+RPbwL28LDpDNflYQXoOhoVhQ37Pjn9YDjl8/4/9xa9+NUpl9XDIW
25
+ sGkaOY0eqsQm1pEWkHJr3zn/fxoKPZPfaJOglovdxf7dgsHz67Xgd/ka+Wo1YqoE
26
+ e5AUKRwUuvaUaumAKgPH+4E4oiLXI4T1Ff5Q7xxv6yXvHuYtlMHhYfgNn8iiW8WN
27
+ XibYXPNP7NtieSQqwR/xM6IRSoyXKuS+ZNGDPUUGk8RoiV/xvVN4LrVm9upSc0ss
28
+ RZ6qwOQmXCo/lLcDUxJAgG95cPw//sI00tZan75VgsGzSWAOdjQpFM0l4dxvKwHn
29
+ tUeT3ZsAgt0JnGqNm2Bkz81kG4A2hSyFZTFA8vZGhp+hz+8Q573tAR89y9YJBdYM
30
+ zp0FM4zwMNEUwgfRzv1tEVVUEXmoFCyhzonUUw4nE4CFu/sE3ffhjKcXcY//qiSW
31
+ xm4erY3XAgMBAAGjgZowgZcwCQYDVR0TBAIwADALBgNVHQ8EBAMCBLAwHQYDVR0O
32
+ BBYEFO9t7XWuFf2SKLmuijgqR4sGDlRsMC4GA1UdEQQnMCWBI3NhbXVlbC53aWxs
33
+ aWFtc0BvcmlvbnRyYW5zZmVyLmNvLm56MC4GA1UdEgQnMCWBI3NhbXVlbC53aWxs
34
+ aWFtc0BvcmlvbnRyYW5zZmVyLmNvLm56MA0GCSqGSIb3DQEBCwUAA4IBgQB5sxkE
35
+ cBsSYwK6fYpM+hA5B5yZY2+L0Z+27jF1pWGgbhPH8/FjjBLVn+VFok3CDpRqwXCl
36
+ xCO40JEkKdznNy2avOMra6PFiQyOE74kCtv7P+Fdc+FhgqI5lMon6tt9rNeXmnW/
37
+ c1NaMRdxy999hmRGzUSFjozcCwxpy/LwabxtdXwXgSay4mQ32EDjqR1TixS1+smp
38
+ 8C/NCWgpIfzpHGJsjvmH2wAfKtTTqB9CVKLCWEnCHyCaRVuKkrKjqhYCdmMBqCws
39
+ JkxfQWC+jBVeG9ZtPhQgZpfhvh+6hMhraUYRQ6XGyvBqEUe+yo6DKIT3MtGE2+CP
40
+ eX9i9ZWBydWb8/rvmwmX2kkcBbX0hZS1rcR593hGc61JR6lvkGYQ2MYskBveyaxt
41
+ Q2K9NVun/S785AP05vKkXZEFYxqG6EW012U4oLcFl5MySFajYXRYbuUpH6AY+HP8
42
+ voD0MPg1DssDLKwXyt1eKD/+Fq0bFWhwVM/1XiAXL7lyYUyOq24KHgQ2Csg=
43
43
  -----END CERTIFICATE-----
44
- date: 2022-08-03 00:00:00.000000000 Z
44
+ date: 2023-02-21 00:00:00.000000000 Z
45
45
  dependencies:
46
46
  - !ruby/object:Gem::Dependency
47
47
  name: concurrent-ruby
@@ -49,14 +49,14 @@ dependencies:
49
49
  requirements:
50
50
  - - "~>"
51
51
  - !ruby/object:Gem::Version
52
- version: '1.0'
52
+ version: '1.2'
53
53
  type: :runtime
54
54
  prerelease: false
55
55
  version_requirements: !ruby/object:Gem::Requirement
56
56
  requirements:
57
57
  - - "~>"
58
58
  - !ruby/object:Gem::Version
59
- version: '1.0'
59
+ version: '1.2'
60
60
  - !ruby/object:Gem::Dependency
61
61
  name: console
62
62
  requirement: !ruby/object:Gem::Requirement
@@ -145,16 +145,16 @@ dependencies:
145
145
  name: rack
146
146
  requirement: !ruby/object:Gem::Requirement
147
147
  requirements:
148
- - - ">="
148
+ - - "~>"
149
149
  - !ruby/object:Gem::Version
150
- version: '2.2'
150
+ version: '3.0'
151
151
  type: :runtime
152
152
  prerelease: false
153
153
  version_requirements: !ruby/object:Gem::Requirement
154
154
  requirements:
155
- - - ">="
155
+ - - "~>"
156
156
  - !ruby/object:Gem::Version
157
- version: '2.2'
157
+ version: '3.0'
158
158
  - !ruby/object:Gem::Dependency
159
159
  name: samovar
160
160
  requirement: !ruby/object:Gem::Requirement
@@ -212,7 +212,7 @@ dependencies:
212
212
  - !ruby/object:Gem::Version
213
213
  version: '0.1'
214
214
  - !ruby/object:Gem::Dependency
215
- name: async-rspec
215
+ name: async-websocket
216
216
  requirement: !ruby/object:Gem::Requirement
217
217
  requirements:
218
218
  - - ">="
@@ -226,7 +226,7 @@ dependencies:
226
226
  - !ruby/object:Gem::Version
227
227
  version: '0'
228
228
  - !ruby/object:Gem::Dependency
229
- name: async-websocket
229
+ name: bake
230
230
  requirement: !ruby/object:Gem::Requirement
231
231
  requirements:
232
232
  - - ">="
@@ -240,7 +240,7 @@ dependencies:
240
240
  - !ruby/object:Gem::Version
241
241
  version: '0'
242
242
  - !ruby/object:Gem::Dependency
243
- name: bake
243
+ name: bundler
244
244
  requirement: !ruby/object:Gem::Requirement
245
245
  requirements:
246
246
  - - ">="
@@ -254,7 +254,7 @@ dependencies:
254
254
  - !ruby/object:Gem::Version
255
255
  version: '0'
256
256
  - !ruby/object:Gem::Dependency
257
- name: bundler
257
+ name: covered
258
258
  requirement: !ruby/object:Gem::Requirement
259
259
  requirements:
260
260
  - - ">="
@@ -268,7 +268,7 @@ dependencies:
268
268
  - !ruby/object:Gem::Version
269
269
  version: '0'
270
270
  - !ruby/object:Gem::Dependency
271
- name: covered
271
+ name: falcon
272
272
  requirement: !ruby/object:Gem::Requirement
273
273
  requirements:
274
274
  - - ">="
@@ -282,7 +282,7 @@ dependencies:
282
282
  - !ruby/object:Gem::Version
283
283
  version: '0'
284
284
  - !ruby/object:Gem::Dependency
285
- name: falcon
285
+ name: sus
286
286
  requirement: !ruby/object:Gem::Requirement
287
287
  requirements:
288
288
  - - ">="
@@ -296,37 +296,33 @@ dependencies:
296
296
  - !ruby/object:Gem::Version
297
297
  version: '0'
298
298
  - !ruby/object:Gem::Dependency
299
- name: rspec
299
+ name: sus-fixtures-async-http
300
300
  requirement: !ruby/object:Gem::Requirement
301
301
  requirements:
302
- - - "~>"
302
+ - - ">="
303
303
  - !ruby/object:Gem::Version
304
- version: '3.6'
304
+ version: '0'
305
305
  type: :development
306
306
  prerelease: false
307
307
  version_requirements: !ruby/object:Gem::Requirement
308
308
  requirements:
309
- - - "~>"
309
+ - - ">="
310
310
  - !ruby/object:Gem::Version
311
- version: '3.6'
311
+ version: '0'
312
312
  description:
313
313
  email:
314
- executables:
315
- - utopia
314
+ executables: []
316
315
  extensions: []
317
316
  extra_rdoc_files: []
318
317
  files:
319
318
  - bake/utopia.rb
319
+ - bake/utopia/environment.rb
320
320
  - bake/utopia/node.rb
321
+ - bake/utopia/server.rb
321
322
  - bake/utopia/shell.rb
323
+ - bake/utopia/site.rb
322
324
  - bake/utopia/static.rb
323
- - bake/utopia/test.rb
324
- - bin/utopia
325
325
  - lib/utopia.rb
326
- - lib/utopia/command.rb
327
- - lib/utopia/command/environment.rb
328
- - lib/utopia/command/server.rb
329
- - lib/utopia/command/site.rb
330
326
  - lib/utopia/content.rb
331
327
  - lib/utopia/content/document.rb
332
328
  - lib/utopia/content/link.rb
@@ -368,16 +364,18 @@ files:
368
364
  - lib/utopia/static/local_file.rb
369
365
  - lib/utopia/static/mime_types.rb
370
366
  - lib/utopia/version.rb
367
+ - license.md
368
+ - readme.md
371
369
  - setup/server/git/hooks/post-receive
372
370
  - setup/site/.gitignore
373
- - setup/site/.rspec
374
371
  - setup/site/Guardfile
375
- - setup/site/README.md
376
372
  - setup/site/bake.rb
377
373
  - setup/site/config.ru
378
- - setup/site/config/README.md
379
374
  - setup/site/config/environment.rb
375
+ - setup/site/config/readme.md
376
+ - setup/site/config/sus.rb
380
377
  - setup/site/falcon.rb
378
+ - setup/site/fixtures/website.rb
381
379
  - setup/site/gems.rb
382
380
  - setup/site/lib/readme.txt
383
381
  - setup/site/pages/_heading.xnode
@@ -391,9 +389,8 @@ files:
391
389
  - setup/site/public/_static/utopia-background.svg
392
390
  - setup/site/public/_static/utopia.svg
393
391
  - setup/site/public/readme.txt
394
- - setup/site/spec/spec_helper.rb
395
- - setup/site/spec/website_context.rb
396
- - setup/site/spec/website_spec.rb
392
+ - setup/site/readme.md
393
+ - setup/site/test/website.rb
397
394
  homepage: https://github.com/ioquatix/utopia
398
395
  licenses:
399
396
  - MIT
@@ -407,14 +404,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
407
404
  requirements:
408
405
  - - ">="
409
406
  - !ruby/object:Gem::Version
410
- version: '2.5'
407
+ version: '2.7'
411
408
  required_rubygems_version: !ruby/object:Gem::Requirement
412
409
  requirements:
413
410
  - - ">="
414
411
  - !ruby/object:Gem::Version
415
412
  version: '0'
416
413
  requirements: []
417
- rubygems_version: 3.3.7
414
+ rubygems_version: 3.5.0.dev
418
415
  signing_key:
419
416
  specification_version: 4
420
417
  summary: Utopia is a framework for building dynamic content-driven websites.
metadata.gz.sig CHANGED
Binary file
data/bake/utopia/test.rb DELETED
@@ -1,10 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # Enable coverage
4
- def coverage
5
- ENV['COVERAGE'] = 'PartialSummary'
6
- end
7
-
8
- def test
9
- system("rspec") or abort
10
- end
data/bin/utopia DELETED
@@ -1,25 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- # Copyright, 2015, by Samuel G. D. Williams. <http://www.codeotaku.com>
4
- #
5
- # Permission is hereby granted, free of charge, to any person obtaining a copy
6
- # of this software and associated documentation files (the "Software"), to deal
7
- # in the Software without restriction, including without limitation the rights
8
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- # copies of the Software, and to permit persons to whom the Software is
10
- # furnished to do so, subject to the following conditions:
11
- #
12
- # The above copyright notice and this permission notice shall be included in
13
- # all copies or substantial portions of the Software.
14
- #
15
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
- # THE SOFTWARE.
22
-
23
- require_relative '../lib/utopia/command'
24
-
25
- Utopia::Command.call
@@ -1,93 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # Copyright, 2016, by Samuel G. D. Williams. <http://www.codeotaku.com>
4
- #
5
- # Permission is hereby granted, free of charge, to any person obtaining a copy
6
- # of this software and associated documentation files (the "Software"), to deal
7
- # in the Software without restriction, including without limitation the rights
8
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- # copies of the Software, and to permit persons to whom the Software is
10
- # furnished to do so, subject to the following conditions:
11
- #
12
- # The above copyright notice and this permission notice shall be included in
13
- # all copies or substantial portions of the Software.
14
- #
15
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
- # THE SOFTWARE.
22
-
23
- require 'securerandom'
24
- require 'yaml/store'
25
- require 'console'
26
-
27
- module Utopia
28
- module Command
29
- # Set environment variables within the server deployment.
30
- class Environment < Samovar::Command
31
- self.description = "Update environment variables in config/environment.yaml"
32
-
33
- options do
34
- option '-e/--environment-name <name>', "The environment file to modify.", default: 'environment'
35
- option '-d/--defaults', "Initialize any recommended defaults."
36
- end
37
-
38
- many :variables, "A list of environment KEY=VALUE pairs to set."
39
-
40
- def self.defaults(destination_root)
41
- # Set some useful defaults for the environment.
42
- self["--environment-name", "testing", "--defaults"].call(destination_root)
43
- self["--environment-name", "development", "--defaults"].call(destination_root)
44
- end
45
-
46
- def environment_name
47
- @options[:environment_name]
48
- end
49
-
50
- # Setup `config/environment.yaml` according to specified options.
51
- def update_environment(root, name = self.environment_name)
52
- environment_path = File.join(root, "config", "#{name}.yaml")
53
- FileUtils.mkpath File.dirname(environment_path)
54
-
55
- store = YAML::Store.new(environment_path)
56
-
57
- store.transaction do
58
- yield store, name, environment_path
59
- end
60
- end
61
-
62
- def call(root = parent.root)
63
- update_environment(root) do |store, name, path|
64
- if @options[:defaults]
65
- # Set some useful defaults for the environment.
66
- store['UTOPIA_SESSION_SECRET'] ||= SecureRandom.hex(40)
67
- end
68
-
69
- variables&.each do |variable|
70
- key, value = variable.split('=', 2)
71
-
72
- if value
73
- puts "ENV[#{key.inspect}] will default to #{value.inspect} unless otherwise specified."
74
- store[key] = value
75
- else
76
- puts "ENV[#{key.inspect}] will be unset unless otherwise specified."
77
- store.delete(key)
78
- end
79
- end
80
-
81
- Console.logger.debug(self) do |buffer|
82
- buffer.puts "Environment #{name} (#{path}):"
83
- store.roots.each do |key|
84
- value = store[key]
85
-
86
- buffer.puts "#{key}=#{value.inspect}"
87
- end
88
- end
89
- end
90
- end
91
- end
92
- end
93
- end
@@ -1,113 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # Copyright, 2016, by Samuel G. D. Williams. <http://www.codeotaku.com>
4
- #
5
- # Permission is hereby granted, free of charge, to any person obtaining a copy
6
- # of this software and associated documentation files (the "Software"), to deal
7
- # in the Software without restriction, including without limitation the rights
8
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- # copies of the Software, and to permit persons to whom the Software is
10
- # furnished to do so, subject to the following conditions:
11
- #
12
- # The above copyright notice and this permission notice shall be included in
13
- # all copies or substantial portions of the Software.
14
- #
15
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
- # THE SOFTWARE.
22
-
23
- require_relative 'site'
24
-
25
- require 'fileutils'
26
-
27
- require 'samovar'
28
-
29
- module Utopia
30
- module Command
31
- # Server setup commands.
32
- class Server < Samovar::Command
33
- # Create a server.
34
- class Create < Samovar::Command
35
- self.description = "Create a remote Utopia website suitable for deployment using git."
36
-
37
- def call
38
- destination_root = parent.root
39
-
40
- FileUtils.mkdir_p File.join(destination_root, "public")
41
-
42
- Update[parent: parent].call
43
-
44
- # Print out helpful git remote add message:
45
- hostname = `hostname`.chomp
46
- puts "Now add the git remote to your local repository:\n\tgit remote add production ssh://#{hostname}#{destination_root}"
47
- puts "Then push to it:\n\tgit push --set-upstream production master"
48
- end
49
- end
50
-
51
- # Update a server.
52
- class Update < Samovar::Command
53
- self.description = "Update the git hooks in an existing server repository."
54
-
55
- def template_root
56
- # The root directory of the template server deployment:
57
- File.join(SETUP_ROOT, 'server')
58
- end
59
-
60
- def call
61
- destination_root = parent.root
62
-
63
- Dir.chdir(destination_root) do
64
- # It's okay to call this on an existing repo, it will only update config as required to enable --shared.
65
- # --shared allows multiple users to access the site with the same group.
66
- system("git", "init", "--shared") or fail "could not initialize repository"
67
-
68
- system("git", "config", "receive.denyCurrentBranch", "ignore") or fail "could not set configuration"
69
- system("git", "config", "core.worktree", destination_root) or fail "could not set configuration"
70
-
71
- # Doing this invokes a lot of behaviour that isn't always ideal...
72
- # system("bundle", "config", "set", "--local", "deployment", "true")
73
- system("bundle", "config", "set", "--local", "without", "development")
74
-
75
- # In theory, to convert from non-shared to shared:
76
- # chgrp -R <group-name> . # Change files and directories' group
77
- # chmod -R g+w . # Change permissions
78
- # chmod g-w .git/objects/pack/* # Git pack files should be immutable
79
- # chmod g+s `find . -type d` # New files get group id of directory
80
- end
81
-
82
- # Set some useful defaults for the environment.
83
- environment = Environment[]
84
- environment.update_environment(destination_root) do |store|
85
- store['VARIANT'] ||= 'production'
86
- store['UTOPIA_SESSION_SECRET'] ||= SecureRandom.hex(40)
87
- end
88
-
89
- # Copy git hooks:
90
- system("cp", "-r", File.join(template_root, 'git', 'hooks'), File.join(destination_root, '.git')) or fail "could not copy git hooks"
91
- # finally set everything in the .git directory to be group writable
92
- # This failed for me and I had to do sudo chown http:http .git -R first.
93
- system("chmod", "-Rf", "g+w", File.join(destination_root, '.git')) or fail "could not update permissions of .git directory"
94
- end
95
- end
96
-
97
- self.description = "Manage server deployments."
98
-
99
- nested :command, {
100
- 'create' => Create,
101
- 'update' => Update
102
- }
103
-
104
- def root
105
- @parent.root
106
- end
107
-
108
- def call
109
- @command.call
110
- end
111
- end
112
- end
113
- end