makit 0.0.111 → 0.0.112

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 (140) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +41 -41
  3. data/exe/makit +5 -5
  4. data/lib/makit/apache.rb +28 -28
  5. data/lib/makit/cli/build_commands.rb +500 -500
  6. data/lib/makit/cli/generators/base_generator.rb +74 -74
  7. data/lib/makit/cli/generators/dotnet_generator.rb +50 -50
  8. data/lib/makit/cli/generators/generator_factory.rb +49 -49
  9. data/lib/makit/cli/generators/node_generator.rb +50 -50
  10. data/lib/makit/cli/generators/ruby_generator.rb +77 -77
  11. data/lib/makit/cli/generators/rust_generator.rb +50 -50
  12. data/lib/makit/cli/generators/templates/dotnet_templates.rb +167 -167
  13. data/lib/makit/cli/generators/templates/node_templates.rb +161 -161
  14. data/lib/makit/cli/generators/templates/ruby/gemfile.rb +26 -26
  15. data/lib/makit/cli/generators/templates/ruby/gemspec.rb +40 -40
  16. data/lib/makit/cli/generators/templates/ruby/main_lib.rb +33 -33
  17. data/lib/makit/cli/generators/templates/ruby/rakefile.rb +35 -35
  18. data/lib/makit/cli/generators/templates/ruby/readme.rb +63 -63
  19. data/lib/makit/cli/generators/templates/ruby/test.rb +39 -39
  20. data/lib/makit/cli/generators/templates/ruby/test_helper.rb +29 -29
  21. data/lib/makit/cli/generators/templates/ruby/version.rb +29 -29
  22. data/lib/makit/cli/generators/templates/rust_templates.rb +128 -128
  23. data/lib/makit/cli/main.rb +62 -62
  24. data/lib/makit/cli/project_commands.rb +868 -868
  25. data/lib/makit/cli/repository_commands.rb +661 -661
  26. data/lib/makit/cli/utility_commands.rb +521 -521
  27. data/lib/makit/commands/factory.rb +359 -359
  28. data/lib/makit/commands/middleware/base.rb +73 -73
  29. data/lib/makit/commands/middleware/cache.rb +248 -248
  30. data/lib/makit/commands/middleware/command_logger.rb +320 -323
  31. data/lib/makit/commands/middleware/unified_logger.rb +243 -243
  32. data/lib/makit/commands/middleware/validator.rb +269 -269
  33. data/lib/makit/commands/request.rb +254 -254
  34. data/lib/makit/commands/result.rb +323 -323
  35. data/lib/makit/commands/runner.rb +337 -317
  36. data/lib/makit/commands/strategies/base.rb +160 -160
  37. data/lib/makit/commands/strategies/synchronous.rb +134 -134
  38. data/lib/makit/commands.rb +51 -42
  39. data/lib/makit/configuration/gitlab_helper.rb +60 -60
  40. data/lib/makit/configuration/project.rb +127 -127
  41. data/lib/makit/configuration/rakefile_helper.rb +43 -43
  42. data/lib/makit/configuration/step.rb +34 -34
  43. data/lib/makit/configuration.rb +14 -14
  44. data/lib/makit/content/default_gitignore.rb +7 -7
  45. data/lib/makit/content/default_rakefile.rb +13 -13
  46. data/lib/makit/content/gem_rakefile.rb +16 -16
  47. data/lib/makit/context.rb +1 -1
  48. data/lib/makit/data.rb +49 -49
  49. data/lib/makit/directories.rb +141 -141
  50. data/lib/makit/directory.rb +262 -262
  51. data/lib/makit/docs/files.rb +89 -89
  52. data/lib/makit/docs/rake.rb +102 -102
  53. data/lib/makit/dotnet/project.rb +153 -153
  54. data/lib/makit/dotnet/solution.rb +38 -38
  55. data/lib/makit/dotnet/solution_classlib.rb +239 -239
  56. data/lib/makit/dotnet/solution_console.rb +264 -264
  57. data/lib/makit/dotnet/solution_maui.rb +354 -354
  58. data/lib/makit/dotnet/solution_wasm.rb +275 -275
  59. data/lib/makit/dotnet/solution_wpf.rb +304 -304
  60. data/lib/makit/dotnet.rb +102 -102
  61. data/lib/makit/email.rb +90 -90
  62. data/lib/makit/environment.rb +142 -142
  63. data/lib/makit/examples/runner.rb +370 -370
  64. data/lib/makit/exceptions.rb +45 -45
  65. data/lib/makit/fileinfo.rb +24 -24
  66. data/lib/makit/files.rb +43 -43
  67. data/lib/makit/gems.rb +40 -40
  68. data/lib/makit/git/cli.rb +54 -54
  69. data/lib/makit/git/repository.rb +90 -90
  70. data/lib/makit/git.rb +98 -98
  71. data/lib/makit/gitlab_runner.rb +59 -59
  72. data/lib/makit/humanize.rb +137 -137
  73. data/lib/makit/indexer.rb +47 -47
  74. data/lib/makit/logging/configuration.rb +305 -305
  75. data/lib/makit/logging/formatters/base.rb +39 -39
  76. data/lib/makit/logging/formatters/console_formatter.rb +140 -127
  77. data/lib/makit/logging/formatters/json_formatter.rb +65 -65
  78. data/lib/makit/logging/formatters/plain_text_formatter.rb +71 -71
  79. data/lib/makit/logging/formatters/text_formatter.rb +64 -64
  80. data/lib/makit/logging/log_request.rb +115 -115
  81. data/lib/makit/logging/logger.rb +163 -159
  82. data/lib/makit/logging/sinks/console.rb +72 -72
  83. data/lib/makit/logging/sinks/file_sink.rb +92 -92
  84. data/lib/makit/logging/sinks/unified_file_sink.rb +303 -303
  85. data/lib/makit/logging.rb +530 -521
  86. data/lib/makit/markdown.rb +75 -75
  87. data/lib/makit/mp/basic_object_mp.rb +17 -17
  88. data/lib/makit/mp/command_mp.rb +13 -13
  89. data/lib/makit/mp/command_request.mp.rb +17 -17
  90. data/lib/makit/mp/project_mp.rb +199 -199
  91. data/lib/makit/mp/string_mp.rb +193 -348
  92. data/lib/makit/nuget.rb +74 -74
  93. data/lib/makit/port.rb +32 -32
  94. data/lib/makit/process.rb +163 -163
  95. data/lib/makit/protoc.rb +107 -107
  96. data/lib/makit/rake/cli.rb +196 -196
  97. data/lib/makit/rake.rb +25 -25
  98. data/lib/makit/ruby/cli.rb +185 -185
  99. data/lib/makit/ruby.rb +25 -25
  100. data/lib/makit/secrets.rb +51 -51
  101. data/lib/makit/serializer.rb +130 -117
  102. data/lib/makit/services/builder.rb +186 -186
  103. data/lib/makit/services/error_handler.rb +226 -226
  104. data/lib/makit/services/repository_manager.rb +229 -229
  105. data/lib/makit/services/validator.rb +112 -112
  106. data/lib/makit/setup/classlib.rb +53 -53
  107. data/lib/makit/setup/gem.rb +30 -17
  108. data/lib/makit/setup/runner.rb +45 -40
  109. data/lib/makit/setup.rb +5 -0
  110. data/lib/makit/show.rb +110 -110
  111. data/lib/makit/storage.rb +126 -126
  112. data/lib/makit/symbols.rb +170 -161
  113. data/lib/makit/task_info.rb +128 -128
  114. data/lib/makit/tasks/at_exit.rb +13 -13
  115. data/lib/makit/tasks/build.rb +19 -18
  116. data/lib/makit/tasks/clean.rb +11 -11
  117. data/lib/makit/tasks/hook_manager.rb +393 -239
  118. data/lib/makit/tasks/init.rb +47 -47
  119. data/lib/makit/tasks/integrate.rb +17 -15
  120. data/lib/makit/tasks/pull_incoming.rb +11 -12
  121. data/lib/makit/tasks/setup.rb +6 -6
  122. data/lib/makit/tasks/sync.rb +12 -11
  123. data/lib/makit/tasks/tag.rb +15 -0
  124. data/lib/makit/tasks/task_monkey_patch.rb +79 -79
  125. data/lib/makit/tasks.rb +10 -0
  126. data/lib/makit/test_cache.rb +239 -239
  127. data/lib/makit/tree.rb +37 -37
  128. data/lib/makit/v1/makit.v1_pb.rb +34 -34
  129. data/lib/makit/v1/makit.v1_services_pb.rb +27 -27
  130. data/lib/makit/version.rb +5 -5
  131. data/lib/makit/version_util.rb +21 -0
  132. data/lib/makit/wix.rb +95 -95
  133. data/lib/makit/yaml.rb +29 -29
  134. data/lib/makit/zip.rb +17 -17
  135. data/lib/makit copy.rb +44 -0
  136. data/lib/makit.rb +40 -8
  137. metadata +50 -7
  138. data/lib/makit/command_runner.rb +0 -463
  139. data/lib/makit/commands/compatibility.rb +0 -365
  140. data/lib/makit/task_hooks.rb +0 -125
@@ -1,112 +1,112 @@
1
- # frozen_string_literal: true
2
-
3
- module Makit
4
- module Services
5
- # Service class responsible for validating all input parameters
6
- # Used by various Makit operations to ensure data integrity
7
- class Validator
8
- # Git-related validation constants
9
- COMMIT_HASH_LENGTH = 40
10
- COMMIT_LATEST = "latest"
11
- MAX_PAGINATION_LIMIT = 1000
12
- MAX_DIRECTORY_PATH_LENGTH = 255
13
-
14
- class << self
15
- # Validate directory parameter for initialization operations
16
- #
17
- # @param directory [String] the directory path to validate
18
- # @raise [ArgumentError] if directory parameter is invalid
19
- def validate_directory_parameter(directory)
20
- raise ArgumentError, "directory parameter cannot be nil" if directory.nil?
21
- raise ArgumentError, "directory parameter cannot be empty" if directory.to_s.strip.empty?
22
- raise ArgumentError, "directory path contains invalid characters" if directory.to_s.include?("\0")
23
- raise ArgumentError, "directory path is too long" if directory.to_s.length > MAX_DIRECTORY_PATH_LENGTH
24
- end
25
-
26
- # Validate URL parameter for git repository operations
27
- #
28
- # @param url [String] the repository URL to validate
29
- # @raise [ArgumentError] if URL parameter is invalid
30
- def validate_url_parameter(url)
31
- raise ArgumentError, "URL parameter cannot be nil" if url.nil?
32
- raise ArgumentError, "URL parameter cannot be empty" if url.to_s.strip.empty?
33
-
34
- url_str = url.to_s.strip
35
- # Basic URL format validation - accept git@, https://, http://, and simple names like "user/repo"
36
- valid_patterns = [
37
- %r{\Agit@[\w.-]+:[\w._/-]+\.git\z}, # SSH format: git@github.com:user/repo.git
38
- %r{\Ahttps?://[\w.-]+/[\w._/-]+(\.git)?\z}, # HTTPS format: https://github.com/user/repo
39
- %r{\A[\w.-]+/[\w._-]+\z}, # Simple format: user/repo
40
- ]
41
-
42
- return if valid_patterns.any? { |pattern| url_str.match?(pattern) }
43
-
44
- raise ArgumentError, "Invalid URL format: #{url_str}"
45
- end
46
-
47
- # Validate commit parameter for git operations
48
- #
49
- # @param commit [String] the commit hash or "latest" to validate
50
- # @raise [ArgumentError] if commit parameter is invalid
51
- def validate_commit_parameter(commit)
52
- raise ArgumentError, "commit parameter cannot be nil" if commit.nil?
53
-
54
- commit_str = commit.to_s.strip
55
- raise ArgumentError, "commit parameter cannot be empty" if commit_str.empty?
56
-
57
- # Allow "latest" or valid commit hash formats
58
- return if commit_str == COMMIT_LATEST
59
- return if commit_str.match?(/\A[0-9a-f]{7,#{COMMIT_HASH_LENGTH}}\z/i)
60
-
61
- raise ArgumentError, "Invalid commit format: #{commit_str}. Must be 'latest' or a valid git commit hash."
62
- end
63
-
64
- # Validate pagination parameters for log operations
65
- #
66
- # @param limit [Integer] maximum number of items to retrieve
67
- # @param skip [Integer] number of items to skip
68
- # @raise [ArgumentError] if pagination parameters are invalid
69
- def validate_pagination_parameters(limit, skip)
70
- unless limit.is_a?(Integer) && limit.positive?
71
- raise ArgumentError,
72
- "limit parameter must be a positive integer"
73
- end
74
- raise ArgumentError, "skip parameter must be a non-negative integer" unless skip.is_a?(Integer) && skip >= 0
75
- raise ArgumentError, "limit parameter is too large" if limit > MAX_PAGINATION_LIMIT
76
- end
77
-
78
- # Validate that a directory exists and is accessible
79
- #
80
- # @param directory [String] the directory path to check
81
- # @param description [String] human-readable description for error messages
82
- # @raise [Makit::DirectoryError] if directory doesn't exist or isn't accessible
83
- def validate_directory_exists(directory, description = "directory")
84
- return if Dir.exist?(directory)
85
-
86
- raise Makit::DirectoryError, "#{description} does not exist: #{directory}"
87
- end
88
-
89
- # Validate boolean parameters
90
- #
91
- # @param value [Object] the value to check
92
- # @param parameter_name [String] the parameter name for error messages
93
- # @raise [ArgumentError] if value is not boolean
94
- def validate_boolean_parameter(value, parameter_name)
95
- return if [true, false].include?(value)
96
-
97
- raise ArgumentError, "#{parameter_name} must be true or false, got #{value.class}"
98
- end
99
-
100
- # Validate string parameters that cannot be empty
101
- #
102
- # @param value [String] the string value to validate
103
- # @param parameter_name [String] the parameter name for error messages
104
- # @raise [ArgumentError] if string is nil or empty
105
- def validate_required_string(value, parameter_name)
106
- raise ArgumentError, "#{parameter_name} cannot be nil" if value.nil?
107
- raise ArgumentError, "#{parameter_name} cannot be empty" if value.to_s.strip.empty?
108
- end
109
- end
110
- end
111
- end
112
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Makit
4
+ module Services
5
+ # Service class responsible for validating all input parameters
6
+ # Used by various Makit operations to ensure data integrity
7
+ class Validator
8
+ # Git-related validation constants
9
+ COMMIT_HASH_LENGTH = 40
10
+ COMMIT_LATEST = "latest"
11
+ MAX_PAGINATION_LIMIT = 1000
12
+ MAX_DIRECTORY_PATH_LENGTH = 255
13
+
14
+ class << self
15
+ # Validate directory parameter for initialization operations
16
+ #
17
+ # @param directory [String] the directory path to validate
18
+ # @raise [ArgumentError] if directory parameter is invalid
19
+ def validate_directory_parameter(directory)
20
+ raise ArgumentError, "directory parameter cannot be nil" if directory.nil?
21
+ raise ArgumentError, "directory parameter cannot be empty" if directory.to_s.strip.empty?
22
+ raise ArgumentError, "directory path contains invalid characters" if directory.to_s.include?("\0")
23
+ raise ArgumentError, "directory path is too long" if directory.to_s.length > MAX_DIRECTORY_PATH_LENGTH
24
+ end
25
+
26
+ # Validate URL parameter for git repository operations
27
+ #
28
+ # @param url [String] the repository URL to validate
29
+ # @raise [ArgumentError] if URL parameter is invalid
30
+ def validate_url_parameter(url)
31
+ raise ArgumentError, "URL parameter cannot be nil" if url.nil?
32
+ raise ArgumentError, "URL parameter cannot be empty" if url.to_s.strip.empty?
33
+
34
+ url_str = url.to_s.strip
35
+ # Basic URL format validation - accept git@, https://, http://, and simple names like "user/repo"
36
+ valid_patterns = [
37
+ %r{\Agit@[\w.-]+:[\w._/-]+\.git\z}, # SSH format: git@github.com:user/repo.git
38
+ %r{\Ahttps?://[\w.-]+/[\w._/-]+(\.git)?\z}, # HTTPS format: https://github.com/user/repo
39
+ %r{\A[\w.-]+/[\w._-]+\z}, # Simple format: user/repo
40
+ ]
41
+
42
+ return if valid_patterns.any? { |pattern| url_str.match?(pattern) }
43
+
44
+ raise ArgumentError, "Invalid URL format: #{url_str}"
45
+ end
46
+
47
+ # Validate commit parameter for git operations
48
+ #
49
+ # @param commit [String] the commit hash or "latest" to validate
50
+ # @raise [ArgumentError] if commit parameter is invalid
51
+ def validate_commit_parameter(commit)
52
+ raise ArgumentError, "commit parameter cannot be nil" if commit.nil?
53
+
54
+ commit_str = commit.to_s.strip
55
+ raise ArgumentError, "commit parameter cannot be empty" if commit_str.empty?
56
+
57
+ # Allow "latest" or valid commit hash formats
58
+ return if commit_str == COMMIT_LATEST
59
+ return if commit_str.match?(/\A[0-9a-f]{7,#{COMMIT_HASH_LENGTH}}\z/i)
60
+
61
+ raise ArgumentError, "Invalid commit format: #{commit_str}. Must be 'latest' or a valid git commit hash."
62
+ end
63
+
64
+ # Validate pagination parameters for log operations
65
+ #
66
+ # @param limit [Integer] maximum number of items to retrieve
67
+ # @param skip [Integer] number of items to skip
68
+ # @raise [ArgumentError] if pagination parameters are invalid
69
+ def validate_pagination_parameters(limit, skip)
70
+ unless limit.is_a?(Integer) && limit.positive?
71
+ raise ArgumentError,
72
+ "limit parameter must be a positive integer"
73
+ end
74
+ raise ArgumentError, "skip parameter must be a non-negative integer" unless skip.is_a?(Integer) && skip >= 0
75
+ raise ArgumentError, "limit parameter is too large" if limit > MAX_PAGINATION_LIMIT
76
+ end
77
+
78
+ # Validate that a directory exists and is accessible
79
+ #
80
+ # @param directory [String] the directory path to check
81
+ # @param description [String] human-readable description for error messages
82
+ # @raise [Makit::DirectoryError] if directory doesn't exist or isn't accessible
83
+ def validate_directory_exists(directory, description = "directory")
84
+ return if Dir.exist?(directory)
85
+
86
+ raise Makit::DirectoryError, "#{description} does not exist: #{directory}"
87
+ end
88
+
89
+ # Validate boolean parameters
90
+ #
91
+ # @param value [Object] the value to check
92
+ # @param parameter_name [String] the parameter name for error messages
93
+ # @raise [ArgumentError] if value is not boolean
94
+ def validate_boolean_parameter(value, parameter_name)
95
+ return if [true, false].include?(value)
96
+
97
+ raise ArgumentError, "#{parameter_name} must be true or false, got #{value.class}"
98
+ end
99
+
100
+ # Validate string parameters that cannot be empty
101
+ #
102
+ # @param value [String] the string value to validate
103
+ # @param parameter_name [String] the parameter name for error messages
104
+ # @raise [ArgumentError] if string is nil or empty
105
+ def validate_required_string(value, parameter_name)
106
+ raise ArgumentError, "#{parameter_name} cannot be nil" if value.nil?
107
+ raise ArgumentError, "#{parameter_name} cannot be empty" if value.to_s.strip.empty?
108
+ end
109
+ end
110
+ end
111
+ end
112
+ end
@@ -1,53 +1,53 @@
1
- # frozen_string_literal: true
2
- require_relative "../configuration/project"
3
-
4
- module Makit
5
- module Setup
6
- class ClassLib
7
- def self.run
8
- #puts "Setting up Nuget project..."
9
- project = Makit::Configuration::Project.default
10
- Makit::DotNet::Project.new_project("classlib", project.name, "source/#{project.name}", "--framework net8.0")
11
- Makit::DotNet::Project.new_project("TUnit", "#{project.name}.Tests", "tests/#{project.name}")
12
- Makit::DotNet::Project.add_reference("tests/#{project.name}/#{project.name}.Tests.csproj", "source/#{project.name}/#{project.name}.csproj")
13
- update_build_step(project)
14
- update_test_step(project)
15
-
16
- project.save
17
- Makit::Logging.default_logger.info("Project setup completed")
18
- end
19
-
20
- def self.update_build_step(project)
21
- build_commands = Array.new
22
- build_commands << "dotnet build source/#{project.name}/#{project.name}.csproj --configuration Release"
23
- steps = project.steps
24
- if steps.any? { |step| step.name == "build" }
25
- build_step = steps.find { |step| step.name == "build" }
26
- build_step.commands = build_commands
27
- else
28
- build_step = Makit::Configuration::Step.new(name: "build", description: "Build the project artifacts", commands: build_commands)
29
- build_step.commands = build_commands
30
- project.add_step(build_step)
31
- end
32
- build_step.commands = build_commands
33
-
34
- project.save
35
- end
36
-
37
- def self.update_test_step(project)
38
- test_commands = Array.new
39
- test_commands << "dotnet test tests/#{project.name}/#{project.name}.Tests.csproj"
40
- steps = project.steps
41
- if steps.any? { |step| step.name == "test" }
42
- test_step = steps.find { |step| step.name == "test" }
43
- test_step.commands = test_commands
44
- else
45
- test_step = Makit::Configuration::Step.new(name: "test", description: "Run the project tests", commands: test_commands)
46
- test_step.commands = test_commands
47
- project.add_step(test_step)
48
- end
49
- project.save
50
- end
51
- end
52
- end
53
- end
1
+ # frozen_string_literal: true
2
+ require_relative "../configuration/project"
3
+
4
+ module Makit
5
+ module Setup
6
+ class ClassLib
7
+ def self.run
8
+ #puts "Setting up Nuget project..."
9
+ project = Makit::Configuration::Project.default
10
+ Makit::DotNet::Project.new_project("classlib", project.name, "source/#{project.name}", "--framework net8.0")
11
+ Makit::DotNet::Project.new_project("TUnit", "#{project.name}.Tests", "tests/#{project.name}")
12
+ Makit::DotNet::Project.add_reference("tests/#{project.name}/#{project.name}.Tests.csproj", "source/#{project.name}/#{project.name}.csproj")
13
+ update_build_step(project)
14
+ update_test_step(project)
15
+
16
+ project.save
17
+ Makit::Logging.default_logger.info("Project setup completed")
18
+ end
19
+
20
+ def self.update_build_step(project)
21
+ build_commands = Array.new
22
+ build_commands << "dotnet build source/#{project.name}/#{project.name}.csproj --configuration Release"
23
+ steps = project.steps
24
+ if steps.any? { |step| step.name == "build" }
25
+ build_step = steps.find { |step| step.name == "build" }
26
+ build_step.commands = build_commands
27
+ else
28
+ build_step = Makit::Configuration::Step.new(name: "build", description: "Build the project artifacts", commands: build_commands)
29
+ build_step.commands = build_commands
30
+ project.add_step(build_step)
31
+ end
32
+ build_step.commands = build_commands
33
+
34
+ project.save
35
+ end
36
+
37
+ def self.update_test_step(project)
38
+ test_commands = Array.new
39
+ test_commands << "dotnet test tests/#{project.name}/#{project.name}.Tests.csproj"
40
+ steps = project.steps
41
+ if steps.any? { |step| step.name == "test" }
42
+ test_step = steps.find { |step| step.name == "test" }
43
+ test_step.commands = test_commands
44
+ else
45
+ test_step = Makit::Configuration::Step.new(name: "test", description: "Run the project tests", commands: test_commands)
46
+ test_step.commands = test_commands
47
+ project.add_step(test_step)
48
+ end
49
+ project.save
50
+ end
51
+ end
52
+ end
53
+ end
@@ -7,14 +7,14 @@ module Makit
7
7
  def self.run
8
8
  project = Makit::Configuration::Project.default
9
9
  Makit::Logging.default_logger.info("Setting up Ruby gem project: #{project.name}")
10
-
10
+
11
11
  # Create basic gem structure
12
12
  create_gem_structure(project)
13
-
13
+
14
14
  # Update build and test steps
15
15
  update_build_step(project)
16
16
  update_test_step(project)
17
-
17
+
18
18
  project.save
19
19
  Makit::Logging.default_logger.info("Ruby gem project setup completed")
20
20
  end
@@ -26,7 +26,7 @@ module Makit
26
26
  FileUtils.mkdir_p("lib/#{project.name}")
27
27
  FileUtils.mkdir_p("test")
28
28
  FileUtils.mkdir_p("exe")
29
-
29
+
30
30
  # Create basic gem files
31
31
  create_gemspec(project)
32
32
  create_gemfile(project)
@@ -66,7 +66,9 @@ module Makit
66
66
  end
67
67
  GEMSPEC
68
68
 
69
- File.write("#{project.name}.gemspec", gemspec_content)
69
+ gemspec_path = "#{project.name}.gemspec"
70
+ return if File.exist?(gemspec_path)
71
+ File.write(gemspec_path, gemspec_content)
70
72
  end
71
73
 
72
74
  def self.create_gemfile(project)
@@ -79,10 +81,14 @@ module Makit
79
81
  gemspec
80
82
  GEMFILE
81
83
 
84
+ return if File.exist?("Gemfile")
82
85
  File.write("Gemfile", gemfile_content)
83
86
  end
84
87
 
85
88
  def self.create_main_lib(project)
89
+ main_lib_path = "lib/#{project.name}.rb"
90
+ return if File.exist?(main_lib_path)
91
+
86
92
  main_lib_content = <<~MAIN_LIB
87
93
  # frozen_string_literal: true
88
94
 
@@ -94,10 +100,13 @@ module Makit
94
100
  end
95
101
  MAIN_LIB
96
102
 
97
- File.write("lib/#{project.name}.rb", main_lib_content)
103
+ File.write(main_lib_path, main_lib_content)
98
104
  end
99
105
 
100
106
  def self.create_version_file(project)
107
+ version_path = "lib/#{project.name}/version.rb"
108
+ return if File.exist?(version_path)
109
+
101
110
  version_content = <<~VERSION
102
111
  # frozen_string_literal: true
103
112
 
@@ -106,10 +115,12 @@ module Makit
106
115
  end
107
116
  VERSION
108
117
 
109
- File.write("lib/#{project.name}/version.rb", version_content)
118
+ File.write(version_path, version_content)
110
119
  end
111
120
 
112
121
  def self.create_rakefile(project)
122
+ return if File.exist?("Rakefile")
123
+
113
124
  rakefile_content = <<~RAKEFILE
114
125
  # frozen_string_literal: true
115
126
 
@@ -127,6 +138,8 @@ module Makit
127
138
  end
128
139
 
129
140
  def self.create_test_helper(project)
141
+ return if File.exist?("test/test_helper.rb")
142
+
130
143
  test_helper_content = <<~TEST_HELPER
131
144
  # frozen_string_literal: true
132
145
 
@@ -207,18 +220,18 @@ module Makit
207
220
 
208
221
  def self.update_build_step(project)
209
222
  build_commands = [
210
- "bundle exec rake build"
223
+ "bundle exec rake build",
211
224
  ]
212
-
225
+
213
226
  steps = project.steps
214
227
  if steps.any? { |step| step.name == "build" }
215
228
  build_step = steps.find { |step| step.name == "build" }
216
229
  build_step.commands = build_commands
217
230
  else
218
231
  build_step = Makit::Configuration::Step.new(
219
- name: "build",
220
- description: "Build the gem",
221
- commands: build_commands
232
+ name: "build",
233
+ description: "Build the gem",
234
+ commands: build_commands,
222
235
  )
223
236
  project.add_step(build_step)
224
237
  end
@@ -228,18 +241,18 @@ module Makit
228
241
 
229
242
  def self.update_test_step(project)
230
243
  test_commands = [
231
- "bundle exec rake test"
244
+ "bundle exec rake test",
232
245
  ]
233
-
246
+
234
247
  steps = project.steps
235
248
  if steps.any? { |step| step.name == "test" }
236
249
  test_step = steps.find { |step| step.name == "test" }
237
250
  test_step.commands = test_commands
238
251
  else
239
252
  test_step = Makit::Configuration::Step.new(
240
- name: "test",
241
- description: "Run the tests",
242
- commands: test_commands
253
+ name: "test",
254
+ description: "Run the tests",
255
+ commands: test_commands,
243
256
  )
244
257
  project.add_step(test_step)
245
258
  end
@@ -1,40 +1,45 @@
1
- # frozen_string_literal: true
2
- require_relative "classlib"
3
- require_relative "gem"
4
-
5
- module Makit
6
- module Setup
7
- class Runner
8
- def self.run
9
-
10
- # open .makit.json and get project type, to determine which setup to run
11
- if File.exist?(".makit.json")
12
- begin
13
- project = Makit::Serializer.open(".makit.json", Makit::Configuration::Project)
14
-
15
- # Check if the file contains compact JSON and resave as pretty JSON
16
- current_content = File.read(".makit.json")
17
- pretty_content = project.to_json_pretty
18
-
19
- # Only rewrite if the content is different (i.e., if it was compact)
20
- if current_content.strip != pretty_content.strip
21
- File.write(".makit.json", pretty_content)
22
- end
23
- rescue
24
- raise "Error opening .makit.json"
25
- end
26
- project_type = project.project_type
27
- case project_type
28
- when "classlib"
29
- Makit::Setup::ClassLib.run
30
- when "gem"
31
- Makit::Setup::Gem.run
32
- else
33
- Makit::Logging.default_logger.warn("Unsupported project type: #{project_type}")
34
- #puts "Unsupported project type: #{project_type}"
35
- end
36
- end
37
- end
38
- end
39
- end
40
- end
1
+ # frozen_string_literal: true
2
+ require_relative "classlib"
3
+ require_relative "gem"
4
+
5
+ module Makit
6
+ module Setup
7
+ class Runner
8
+ def self.run
9
+
10
+ # open .makit.json and get project type, to determine which setup to run
11
+ if File.exist?(".makit.json")
12
+ begin
13
+ project = Makit::Serializer.open(".makit.json", Makit::Configuration::Project)
14
+
15
+ # Update version to match VERSION constant if it exists
16
+ if defined?(Makit::VERSION)
17
+ project.version = Makit::VERSION
18
+ end
19
+
20
+ # Check if the file contains compact JSON and resave as pretty JSON
21
+ current_content = File.read(".makit.json")
22
+ pretty_content = project.to_json_pretty
23
+
24
+ # Only rewrite if the content is different (i.e., if it was compact or version changed)
25
+ if current_content.strip != pretty_content.strip
26
+ File.write(".makit.json", pretty_content)
27
+ end
28
+ rescue
29
+ raise "Error opening .makit.json"
30
+ end
31
+ project_type = project.project_type
32
+ case project_type
33
+ when "classlib"
34
+ Makit::Setup::ClassLib.run
35
+ when "gem"
36
+ Makit::Setup::Gem.run
37
+ else
38
+ Makit::Logging.default_logger.warn("Unsupported project type: #{project_type}")
39
+ #puts "Unsupported project type: #{project_type}"
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "setup/runner"
4
+ require_relative "setup/classlib"
5
+ require_relative "setup/gem"