dsu 3.0.0.alpha.12 → 3.0.0.beta.1

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.
Files changed (53) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +2 -0
  3. data/CHANGELOG.md +2 -0
  4. data/Gemfile +5 -5
  5. data/Gemfile.lock +19 -16
  6. data/lib/dsu/cli.rb +2 -1
  7. data/lib/dsu/crud/json_file.rb +5 -0
  8. data/lib/dsu/migration/base_service.rb +118 -0
  9. data/lib/dsu/migration/migrator.rb +24 -0
  10. data/lib/dsu/migration/raw_helpers/color_theme_hash.rb +13 -0
  11. data/lib/dsu/migration/raw_helpers/configuration_hash.rb +15 -0
  12. data/lib/dsu/migration/raw_helpers/entry_group_hash.rb +13 -0
  13. data/lib/dsu/migration/raw_json_file.rb +15 -0
  14. data/lib/dsu/migration/raw_json_files.rb +56 -0
  15. data/lib/dsu/migration/v20230613121411/service.rb +94 -0
  16. data/lib/dsu/migration/v20240210161248/service.rb +148 -0
  17. data/lib/dsu/models/color_theme.rb +2 -0
  18. data/lib/dsu/models/configuration.rb +6 -0
  19. data/lib/dsu/models/project.rb +2 -2
  20. data/lib/dsu/presenters/project/defaultable.rb +15 -0
  21. data/lib/dsu/presenters/project/use_by_number_presenter.rb +4 -0
  22. data/lib/dsu/presenters/project/use_presenter.rb +4 -0
  23. data/lib/dsu/subcommands/project.rb +3 -6
  24. data/lib/dsu/support/fileable.rb +11 -7
  25. data/lib/dsu/support/project_file_system.rb +2 -5
  26. data/lib/dsu/version.rb +2 -2
  27. data/lib/dsu/views/project/list.rb +4 -4
  28. data/lib/dsu.rb +8 -13
  29. data/lib/locales/en/commands.yml +4 -0
  30. data/lib/locales/en/miscellaneous.yml +1 -2
  31. data/lib/locales/en/subcommands.yml +21 -11
  32. data/lib/seed_data/20230613121411/dsu/migration_version.json +3 -0
  33. data/lib/seed_data/{themes → 20230613121411/dsu/themes}/light.json +2 -2
  34. data/lib/seed_data/20240210161248/dsu/current_project.json +4 -0
  35. data/lib/seed_data/20240210161248/dsu/migration_version.json +3 -0
  36. data/lib/seed_data/20240210161248/dsu/projects/default/project.json +5 -0
  37. data/lib/seed_data/20240210161248/dsu/themes/cherry.json +79 -0
  38. data/lib/seed_data/20240210161248/dsu/themes/christmas.json +79 -0
  39. data/lib/seed_data/20240210161248/dsu/themes/default.json +79 -0
  40. data/lib/seed_data/20240210161248/dsu/themes/lemon.json +79 -0
  41. data/lib/seed_data/20240210161248/dsu/themes/light.json +79 -0
  42. data/lib/seed_data/20240210161248/dsu/themes/matrix.json +79 -0
  43. data/lib/seed_data/20240210161248/dsu/themes/whiteout.json +79 -0
  44. metadata +32 -12
  45. data/lib/dsu/migration/factory.rb +0 -26
  46. data/lib/dsu/migration/service.rb +0 -196
  47. data/lib/dsu/migration/service_20230613121411.rb +0 -178
  48. /data/lib/seed_data/{themes → 20230613121411/dsu/themes}/cherry.json +0 -0
  49. /data/lib/seed_data/{themes → 20230613121411/dsu/themes}/christmas.json +0 -0
  50. /data/lib/seed_data/{themes → 20230613121411/dsu/themes}/default.json +0 -0
  51. /data/lib/seed_data/{themes → 20230613121411/dsu/themes}/lemon.json +0 -0
  52. /data/lib/seed_data/{themes → 20230613121411/dsu/themes}/matrix.json +0 -0
  53. /data/lib/seed_data/{themes → 20230613121411/dsu/themes}/whiteout.json +0 -0
@@ -0,0 +1,79 @@
1
+ {
2
+ "version": 20240210161248,
3
+ "description": "Lemon color theme",
4
+ "help": {
5
+ "color": "yellow",
6
+ "mode": "default",
7
+ "background": "default"
8
+ },
9
+ "dsu_header": {
10
+ "color": "white",
11
+ "mode": "bold",
12
+ "background": "yellow"
13
+ },
14
+ "dsu_footer": {
15
+ "color": "yellow",
16
+ "mode": "default",
17
+ "background": "default"
18
+ },
19
+ "header": {
20
+ "color": "yellow",
21
+ "mode": "bold",
22
+ "background": "default"
23
+ },
24
+ "subheader": {
25
+ "color": "yellow",
26
+ "mode": "underline",
27
+ "background": "default"
28
+ },
29
+ "body": {
30
+ "color": "yellow",
31
+ "mode": "default",
32
+ "background": "default"
33
+ },
34
+ "footer": {
35
+ "color": "light_yellow",
36
+ "mode": "default",
37
+ "background": "default"
38
+ },
39
+ "date": {
40
+ "color": "yellow",
41
+ "mode": "bold",
42
+ "background": "default"
43
+ },
44
+ "index": {
45
+ "color": "light_yellow",
46
+ "mode": "default",
47
+ "background": "default"
48
+ },
49
+ "info": {
50
+ "color": "yellow",
51
+ "mode": "default",
52
+ "background": "default"
53
+ },
54
+ "success": {
55
+ "color": "green",
56
+ "mode": "default",
57
+ "background": "default"
58
+ },
59
+ "warning": {
60
+ "color": "yellow",
61
+ "mode": "default",
62
+ "background": "default"
63
+ },
64
+ "error": {
65
+ "color": "light_yellow",
66
+ "mode": "default",
67
+ "background": "red"
68
+ },
69
+ "prompt": {
70
+ "color": "yellow",
71
+ "mode": "bold",
72
+ "background": "default"
73
+ },
74
+ "prompt_options": {
75
+ "color": "white",
76
+ "mode": "bold",
77
+ "background": "default"
78
+ }
79
+ }
@@ -0,0 +1,79 @@
1
+ {
2
+ "version": 20240210161248,
3
+ "description": "Theme for Light backgrounds",
4
+ "help": {
5
+ "color": "default",
6
+ "mode": "default",
7
+ "background": "default"
8
+ },
9
+ "dsu_header": {
10
+ "color": "white",
11
+ "mode": "bold",
12
+ "background": "black"
13
+ },
14
+ "dsu_footer": {
15
+ "color": "default",
16
+ "mode": "default",
17
+ "background": "default"
18
+ },
19
+ "header": {
20
+ "color": "default",
21
+ "mode": "bold",
22
+ "background": "default"
23
+ },
24
+ "subheader": {
25
+ "color": "default",
26
+ "mode": "underline",
27
+ "background": "default"
28
+ },
29
+ "body": {
30
+ "color": "default",
31
+ "mode": "default",
32
+ "background": "default"
33
+ },
34
+ "footer": {
35
+ "color": "default",
36
+ "mode": "default",
37
+ "background": "default"
38
+ },
39
+ "date": {
40
+ "color": "default",
41
+ "mode": "bold",
42
+ "background": "default"
43
+ },
44
+ "index": {
45
+ "color": "default",
46
+ "mode": "italic",
47
+ "background": "default"
48
+ },
49
+ "info": {
50
+ "color": "white",
51
+ "mode": "bold",
52
+ "background": "blue"
53
+ },
54
+ "success": {
55
+ "color": "white",
56
+ "mode": "bold",
57
+ "background": "green"
58
+ },
59
+ "warning": {
60
+ "color": "default",
61
+ "mode": "bold",
62
+ "background": "yellow"
63
+ },
64
+ "error": {
65
+ "color": "light_yellow",
66
+ "mode": "default",
67
+ "background": "red"
68
+ },
69
+ "prompt": {
70
+ "color": "default",
71
+ "mode": "bold",
72
+ "background": "default"
73
+ },
74
+ "prompt_options": {
75
+ "color": "default",
76
+ "mode": "bold",
77
+ "background": "default"
78
+ }
79
+ }
@@ -0,0 +1,79 @@
1
+ {
2
+ "version": 20240210161248,
3
+ "description": "Matrix color theme",
4
+ "help": {
5
+ "color": "green",
6
+ "mode": "default",
7
+ "background": "default"
8
+ },
9
+ "dsu_header": {
10
+ "color": "white",
11
+ "mode": "bold",
12
+ "background": "green"
13
+ },
14
+ "dsu_footer": {
15
+ "color": "green",
16
+ "mode": "default",
17
+ "background": "default"
18
+ },
19
+ "header": {
20
+ "color": "green",
21
+ "mode": "bold",
22
+ "background": "default"
23
+ },
24
+ "subheader": {
25
+ "color": "green",
26
+ "mode": "underline",
27
+ "background": "default"
28
+ },
29
+ "body": {
30
+ "color": "green",
31
+ "mode": "default",
32
+ "background": "default"
33
+ },
34
+ "footer": {
35
+ "color": "light_green",
36
+ "mode": "default",
37
+ "background": "default"
38
+ },
39
+ "date": {
40
+ "color": "green",
41
+ "mode": "bold",
42
+ "background": "default"
43
+ },
44
+ "index": {
45
+ "color": "light_green",
46
+ "mode": "default",
47
+ "background": "default"
48
+ },
49
+ "info": {
50
+ "color": "green",
51
+ "mode": "default",
52
+ "background": "default"
53
+ },
54
+ "success": {
55
+ "color": "green",
56
+ "mode": "default",
57
+ "background": "default"
58
+ },
59
+ "warning": {
60
+ "color": "yellow",
61
+ "mode": "default",
62
+ "background": "default"
63
+ },
64
+ "error": {
65
+ "color": "light_yellow",
66
+ "mode": "default",
67
+ "background": "red"
68
+ },
69
+ "prompt": {
70
+ "color": "green",
71
+ "mode": "bold",
72
+ "background": "default"
73
+ },
74
+ "prompt_options": {
75
+ "color": "white",
76
+ "mode": "bold",
77
+ "background": "default"
78
+ }
79
+ }
@@ -0,0 +1,79 @@
1
+ {
2
+ "version": 20240210161248,
3
+ "description": "Whiteout color theme",
4
+ "help": {
5
+ "color": "white",
6
+ "mode": "default",
7
+ "background": "default"
8
+ },
9
+ "dsu_header": {
10
+ "color": "white",
11
+ "mode": "bold",
12
+ "background": "white"
13
+ },
14
+ "dsu_footer": {
15
+ "color": "white",
16
+ "mode": "default",
17
+ "background": "default"
18
+ },
19
+ "header": {
20
+ "color": "white",
21
+ "mode": "bold",
22
+ "background": "default"
23
+ },
24
+ "subheader": {
25
+ "color": "white",
26
+ "mode": "underline",
27
+ "background": "default"
28
+ },
29
+ "body": {
30
+ "color": "white",
31
+ "mode": "default",
32
+ "background": "default"
33
+ },
34
+ "footer": {
35
+ "color": "light_white",
36
+ "mode": "default",
37
+ "background": "default"
38
+ },
39
+ "date": {
40
+ "color": "white",
41
+ "mode": "bold",
42
+ "background": "default"
43
+ },
44
+ "index": {
45
+ "color": "light_white",
46
+ "mode": "default",
47
+ "background": "default"
48
+ },
49
+ "info": {
50
+ "color": "white",
51
+ "mode": "default",
52
+ "background": "default"
53
+ },
54
+ "success": {
55
+ "color": "green",
56
+ "mode": "default",
57
+ "background": "default"
58
+ },
59
+ "warning": {
60
+ "color": "yellow",
61
+ "mode": "default",
62
+ "background": "default"
63
+ },
64
+ "error": {
65
+ "color": "light_yellow",
66
+ "mode": "default",
67
+ "background": "red"
68
+ },
69
+ "prompt": {
70
+ "color": "white",
71
+ "mode": "bold",
72
+ "background": "default"
73
+ },
74
+ "prompt_options": {
75
+ "color": "white",
76
+ "mode": "bold",
77
+ "background": "default"
78
+ }
79
+ }
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dsu
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.0.alpha.12
4
+ version: 3.0.0.beta.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gene M. Angelo, Jr.
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-02-11 00:00:00.000000000 Z
11
+ date: 2024-02-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -169,9 +169,15 @@ files:
169
169
  - lib/dsu/command_services/add_entry_service.rb
170
170
  - lib/dsu/crud/json_file.rb
171
171
  - lib/dsu/env.rb
172
- - lib/dsu/migration/factory.rb
173
- - lib/dsu/migration/service.rb
174
- - lib/dsu/migration/service_20230613121411.rb
172
+ - lib/dsu/migration/base_service.rb
173
+ - lib/dsu/migration/migrator.rb
174
+ - lib/dsu/migration/raw_helpers/color_theme_hash.rb
175
+ - lib/dsu/migration/raw_helpers/configuration_hash.rb
176
+ - lib/dsu/migration/raw_helpers/entry_group_hash.rb
177
+ - lib/dsu/migration/raw_json_file.rb
178
+ - lib/dsu/migration/raw_json_files.rb
179
+ - lib/dsu/migration/v20230613121411/service.rb
180
+ - lib/dsu/migration/v20240210161248/service.rb
175
181
  - lib/dsu/migration/version.rb
176
182
  - lib/dsu/models/color_theme.rb
177
183
  - lib/dsu/models/configuration.rb
@@ -197,6 +203,7 @@ files:
197
203
  - lib/dsu/presenters/import/import_entry.rb
198
204
  - lib/dsu/presenters/import/import_file.rb
199
205
  - lib/dsu/presenters/project/create_presenter.rb
206
+ - lib/dsu/presenters/project/defaultable.rb
200
207
  - lib/dsu/presenters/project/delete_by_number_presenter.rb
201
208
  - lib/dsu/presenters/project/delete_presenter.rb
202
209
  - lib/dsu/presenters/project/list_presenter.rb
@@ -292,13 +299,24 @@ files:
292
299
  - lib/locales/en/presenters.yml
293
300
  - lib/locales/en/services.yml
294
301
  - lib/locales/en/subcommands.yml
295
- - lib/seed_data/themes/cherry.json
296
- - lib/seed_data/themes/christmas.json
297
- - lib/seed_data/themes/default.json
298
- - lib/seed_data/themes/lemon.json
299
- - lib/seed_data/themes/light.json
300
- - lib/seed_data/themes/matrix.json
301
- - lib/seed_data/themes/whiteout.json
302
+ - lib/seed_data/20230613121411/dsu/migration_version.json
303
+ - lib/seed_data/20230613121411/dsu/themes/cherry.json
304
+ - lib/seed_data/20230613121411/dsu/themes/christmas.json
305
+ - lib/seed_data/20230613121411/dsu/themes/default.json
306
+ - lib/seed_data/20230613121411/dsu/themes/lemon.json
307
+ - lib/seed_data/20230613121411/dsu/themes/light.json
308
+ - lib/seed_data/20230613121411/dsu/themes/matrix.json
309
+ - lib/seed_data/20230613121411/dsu/themes/whiteout.json
310
+ - lib/seed_data/20240210161248/dsu/current_project.json
311
+ - lib/seed_data/20240210161248/dsu/migration_version.json
312
+ - lib/seed_data/20240210161248/dsu/projects/default/project.json
313
+ - lib/seed_data/20240210161248/dsu/themes/cherry.json
314
+ - lib/seed_data/20240210161248/dsu/themes/christmas.json
315
+ - lib/seed_data/20240210161248/dsu/themes/default.json
316
+ - lib/seed_data/20240210161248/dsu/themes/lemon.json
317
+ - lib/seed_data/20240210161248/dsu/themes/light.json
318
+ - lib/seed_data/20240210161248/dsu/themes/matrix.json
319
+ - lib/seed_data/20240210161248/dsu/themes/whiteout.json
302
320
  - project.bak
303
321
  - sig/dsu.rbs
304
322
  homepage: https://github.com/gangelo/dsu
@@ -340,6 +358,8 @@ post_install_message: |
340
358
  Thank you!
341
359
 
342
360
  <3 Gene
361
+
362
+ dsu now uses "Projects"! Run `dsu help project` to get started.
343
363
  rdoc_options: []
344
364
  require_paths:
345
365
  - lib
@@ -1,26 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative '../models/migration_version'
4
- require_relative 'service_20230613121411'
5
- require_relative 'version'
6
-
7
- module Dsu
8
- module Migration
9
- class Factory
10
- class << self
11
- def migrate_if!(options: {})
12
- version = options.fetch(:version, migration_version)
13
- if version == 20230613121411 # rubocop:disable Style/NumericLiterals
14
- Service20230613121411.new(options: options).migrate!
15
- end
16
- end
17
-
18
- private
19
-
20
- def migration_version
21
- @migration_version ||= Models::MigrationVersion.new.version
22
- end
23
- end
24
- end
25
- end
26
- end
@@ -1,196 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'fileutils'
4
- require 'json'
5
- require_relative '../migration/version'
6
- require_relative '../models/configuration'
7
- require_relative '../models/migration_version'
8
- require_relative '../support/fileable'
9
-
10
- module Dsu
11
- module Migration
12
- MIGRATION_VERSION_REGEX = /(\A\d+)/
13
-
14
- class Service
15
- include Support::Fileable
16
-
17
- def initialize(options: {})
18
- @options = options || {}
19
- @migration_version = Models::MigrationVersion.new(options: options)
20
- @start_migration_version = @migration_version.version
21
- end
22
-
23
- def call
24
- unless self.class.run_migrations?
25
- puts 'Nothing to do.'
26
- return
27
- end
28
-
29
- run_migrations!
30
- end
31
-
32
- class << self
33
- def run_migrations?
34
- Models::MigrationVersion.new.version < 20230613121411 # rubocop:disable Style/NumericLiterals
35
- end
36
- end
37
-
38
- private
39
-
40
- attr_reader :migration_version, :options, :start_migration_version
41
-
42
- def run_migrations!
43
- puts "dsu version: #{Dsu::VERSION}"
44
- puts
45
-
46
- puts 'Running migrations...'
47
- puts
48
-
49
- puts "Current migration version: #{start_migration_version}"
50
- puts "Migrating to version: #{Dsu::Migration::VERSION}"
51
- puts
52
-
53
- backup!
54
- cleanup!
55
- migrate!
56
-
57
- new_migration_version = Models::MigrationVersion.new(version: Dsu::Migration::VERSION).tap(&:save!).version
58
-
59
- puts "Migration version after migration is: #{new_migration_version}"
60
- puts 'Migration completed successfully.'
61
- rescue StandardError => e
62
- warn "Migration completed with errors: #{e.message}"
63
- end
64
-
65
- def backup!
66
- backup_config!
67
- puts
68
-
69
- backup_entry_groups!
70
- puts
71
-
72
- backup_themes!
73
- puts
74
- end
75
-
76
- def backup_config!
77
- puts 'Backing up config...'
78
- if File.exist?(config_path)
79
- backup_path = File.join(current_backup_folder, config_file_name)
80
- puts "Backing up #{config_path} to #{backup_path}..."
81
- FileUtils.cp(config_path, backup_path)
82
- else
83
- puts 'No config to backup.'
84
- end
85
- end
86
-
87
- def backup_entry_groups!
88
- puts 'Backing up entry groups...'
89
- if Dir.exist?(entries_folder)
90
- backup_folder = File.join(current_backup_folder, File.basename(entries_folder))
91
- puts "Backing up #{entries_folder} to #{backup_folder}..."
92
- FileUtils.mkdir_p(backup_folder)
93
- FileUtils.cp_r("#{entries_folder}/.", backup_folder)
94
- else
95
- puts 'No entries to backup.'
96
- end
97
- end
98
-
99
- def backup_themes!
100
- puts 'Backing up themes...'
101
- if Dir.exist?(themes_folder)
102
- backup_folder = File.join(current_backup_folder, File.basename(themes_folder))
103
- puts "Backing up #{themes_folder} to #{backup_folder}..."
104
- FileUtils.mkdir_p(backup_folder)
105
- FileUtils.cp_r("#{themes_folder}/.", backup_folder)
106
- else
107
- puts 'No entries to backup.'
108
- end
109
- end
110
-
111
- def before_migration_version
112
- @before_migration_version ||= migration_version_instance.version
113
- end
114
-
115
- def cleanup!
116
- puts 'Cleaning up old config file...'
117
- File.delete(config_path) if File.file?(config_path)
118
- puts 'Done.'
119
- puts
120
-
121
- puts 'Cleaning up old entries...'
122
- entry_files = Dir.glob(File.join(entries_folder, '*'))
123
- entry_files.each do |entry_file|
124
- File.delete(entry_file) if File.file?(entry_file)
125
- end
126
- puts 'Done.'
127
- puts
128
-
129
- puts 'Cleaning up old themes...'
130
- theme_files = Dir.glob(File.join(themes_folder, '*'))
131
- theme_files.each do |theme_file|
132
- File.delete(theme_file) if File.file?(theme_file)
133
- end
134
- puts 'Done.'
135
- puts
136
- end
137
-
138
- def create_backup_folder!
139
- FileUtils.mkdir_p(backup_folder(version: current_migration_version))
140
- end
141
-
142
- def current_backup_folder
143
- @current_backup_folder ||= begin
144
- create_backup_folder!
145
- backup_folder(version: current_migration_version)
146
- end
147
- end
148
-
149
- def current_migration_version
150
- migration_version_instance.version
151
- end
152
-
153
- # Migrate
154
-
155
- def migrate!
156
- FileUtils.mkdir_p(dsu_folder)
157
- FileUtils.mkdir_p(themes_folder)
158
- FileUtils.mkdir_p(entries_folder)
159
-
160
- migrate_themes!
161
- migrate_config!
162
- migrate_entry_groups!
163
- end
164
-
165
- def migrate_config!
166
- puts 'Migrating config...'
167
- Models::Configuration.new.save!
168
- puts 'Done.'
169
- end
170
-
171
- def migrate_entry_groups!
172
- puts 'Migrating entry groups...'
173
- # source_folder = File.join(seed_data_folder, 'entries')
174
- # puts "Copying entries from #{source_folder} to #{entries_folder}..."
175
- # FileUtils.cp_r("#{source_folder}/.", entries_folder)
176
- # puts 'Done.'
177
- description = "Migrated DSU to version #{Dsu::Migration::VERSION}"
178
- entry = Models::Entry.new(description: description)
179
- Models::EntryGroup.new(time: Time.now, entries: [entry]).save!
180
- puts 'Done.'
181
- end
182
-
183
- def migrate_themes!
184
- puts 'Migrating themes...'
185
- source_folder = File.join(seed_data_folder, 'themes')
186
- puts "Copying themes from #{source_folder} to #{themes_folder}..."
187
- FileUtils.cp_r("#{source_folder}/.", themes_folder)
188
- puts 'Done.'
189
- end
190
-
191
- def migration_version_instance
192
- @migration_version_instance ||= Models::MigrationVersion.new
193
- end
194
- end
195
- end
196
- end