claiss 1.1.1 → 1.1.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +83 -22
- data/lib/claiss/commands.rb +9 -8
- data/lib/claiss/version.rb +2 -2
- data/lib/claiss.rb +226 -46
- metadata +33 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0717123d37af9bf85c7fb958ec88949a9a4b9275eb703e8e38dd7940705e59d0
|
4
|
+
data.tar.gz: ac451a336575e5832c26532db241cce0fe8a74eaf01a43ae2fff294b666e1461
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d753b2af4c9ce85474b0a1bb66d35d0b0ae5e6aa1601dcd81484571155beae2daae314a545122b39f6928e5c97aadd4c60d7221a29fb8563d5feb7b578c8665a
|
7
|
+
data.tar.gz: bc58050fe555a8b8af015dc5efa50716168b642dfb4fe3b682edc8847aefdacefef5d0b3bef581169750ab2efcedded9c66880aec29683cce77a179d16e11d9f
|
data/README.md
CHANGED
@@ -1,56 +1,117 @@
|
|
1
|
-
# CLAISS
|
1
|
+
# CLAISS CLI Refactor Application Toolbox
|
2
2
|
|
3
|
-
CLAISS is a Ruby CLI application
|
3
|
+
**CLAISS** is a Ruby-based CLI application and toolbox designed to manage CLAISS Refactored applications and deployments. It provides powerful refactoring capabilities with improved performance and safety features. Please note that some features may have limited compatibility depending on the environment. Use with caution!
|
4
4
|
|
5
5
|
## Installation
|
6
6
|
|
7
|
-
Install the gem by running the following command in your terminal:
|
7
|
+
Install the CLAISS gem by running the following command in your terminal:
|
8
8
|
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
```sh
|
10
|
+
$ gem install claiss
|
11
|
+
```
|
12
12
|
|
13
13
|
## Usage
|
14
14
|
|
15
15
|
### Refactor
|
16
16
|
|
17
|
-
The `refactor` command
|
17
|
+
The `refactor` command allows you to rename and replace text terms within files and filenames in a specified directory. This command will refactor all exact occurrences of specified terms, including filenames. For example, "Abc" is treated differently from "AbC", "ABc", or "abc".
|
18
|
+
|
19
|
+
**Note:** The `refactor` command ignores the `.git/` and `node_modules/` directories to avoid modifying critical or third-party files.
|
18
20
|
|
19
21
|
Basic usage:
|
20
22
|
|
21
|
-
|
23
|
+
```sh
|
24
|
+
$ claiss refactor <path> <rules>
|
25
|
+
```
|
26
|
+
|
27
|
+
- `<path>`: Path to the directory to refactor (required)
|
28
|
+
- `<rules>`: Name of the rules file (without .json extension) (required)
|
29
|
+
- `--destination`: Destination path for refactored files (optional)
|
22
30
|
|
23
|
-
|
31
|
+
Examples:
|
32
|
+
|
33
|
+
```sh
|
34
|
+
$ claiss refactor path/to/project my_project
|
35
|
+
$ claiss refactor path/to/project my_project --destination path/to/output
|
36
|
+
```
|
24
37
|
|
25
38
|
#### Using a JSON Dictionary
|
26
39
|
|
27
|
-
You can create a JSON file
|
40
|
+
You can create a JSON file that specifies the terms you want to refactor. This JSON file should be structured as a simple key-value pair object, where each key is the term to be replaced and the value is the replacement term. The terms are processed in the order they appear in the file.
|
41
|
+
|
42
|
+
The JSON file should be placed in the `~/.claiss/` directory by default.
|
28
43
|
|
29
|
-
Example
|
44
|
+
Example `~/.claiss/my_project.json`:
|
30
45
|
|
31
|
-
|
46
|
+
```json
|
47
|
+
{
|
48
|
+
"old_term": "new_term",
|
49
|
+
"OldClassName": "NewClassName",
|
50
|
+
"OLD_CONSTANT": "NEW_CONSTANT"
|
51
|
+
}
|
52
|
+
```
|
32
53
|
|
33
|
-
|
54
|
+
#### New Features and Improvements
|
34
55
|
|
35
|
-
|
56
|
+
1. **Progress Bar**: The refactoring process now displays a progress bar, giving you a visual indication of the operation's status.
|
36
57
|
|
37
|
-
|
58
|
+
2. **Parallel Processing**: Large projects are now processed using parallel execution, significantly improving performance on multi-core systems.
|
38
59
|
|
39
|
-
|
60
|
+
3. **Improved Encoding Handling**: The tool now better handles files with different encodings, falling back to binary reading for files with invalid UTF-8 sequences.
|
61
|
+
|
62
|
+
4. **Truncated Logging**: Log messages now show truncated file paths for improved readability, especially in projects with deep directory structures.
|
63
|
+
|
64
|
+
5. **Automatic Cleanup**: After refactoring, any empty directories left behind are automatically removed to keep your project structure clean.
|
40
65
|
|
41
66
|
### Fix Ruby Permissions
|
42
67
|
|
43
|
-
The `fix_ruby_permissions` command adjusts file permissions for a Ruby
|
68
|
+
The `fix_ruby_permissions` command adjusts file permissions for a Ruby or Rails project. It ensures that directories have the correct execute permissions and that files retain their appropriate read/write/execute permissions.
|
69
|
+
|
70
|
+
```sh
|
71
|
+
$ claiss fix_ruby_permissions [path]
|
72
|
+
```
|
73
|
+
|
74
|
+
- `[path]`: Path to the Ruby project (optional, default: current directory)
|
44
75
|
|
45
|
-
|
76
|
+
Example:
|
46
77
|
|
47
|
-
|
78
|
+
```sh
|
79
|
+
$ claiss fix_ruby_permissions
|
80
|
+
$ claiss fix_ruby_permissions path/to/ruby/project
|
81
|
+
```
|
48
82
|
|
49
|
-
**Note:** This command uses `chmod` and may
|
83
|
+
**Note:** This command uses `chmod` and may encounter issues on systems that do not distinguish between uppercase and lowercase filenames or support spaces in filenames (e.g., certain end-user operating systems). If you encounter errors, particularly with filenames like `MyImage copy.svg`, manually fix those file permissions and re-run the command.
|
84
|
+
|
85
|
+
### Generate JSON
|
86
|
+
|
87
|
+
The `generate_json` command helps create a new JSON file with an empty key-value pair for refactoring:
|
88
|
+
|
89
|
+
```sh
|
90
|
+
$ claiss generate_json [options]
|
91
|
+
```
|
92
|
+
|
93
|
+
Options:
|
94
|
+
- `--output`: Name of the output JSON file (default: rules)
|
95
|
+
- `--path`: Path to save the JSON file (default: ~/.claiss/)
|
96
|
+
|
97
|
+
Examples:
|
98
|
+
|
99
|
+
```sh
|
100
|
+
$ claiss generate_json
|
101
|
+
$ claiss generate_json --output my_custom_rules
|
102
|
+
$ claiss generate_json --path /custom/path/ --output my_rules
|
103
|
+
```
|
104
|
+
|
105
|
+
This command generates a new JSON file that can be used as a template for creating refactoring rules.
|
50
106
|
|
51
107
|
## Upcoming Features
|
52
108
|
|
53
|
-
We
|
109
|
+
We are continuously working to improve CLAISS and add new functionalities. Some planned features include:
|
110
|
+
|
111
|
+
1. Enhanced error handling and reporting
|
112
|
+
2. Support for more complex refactoring rules
|
113
|
+
|
114
|
+
Stay tuned for updates!
|
54
115
|
|
55
116
|
## Contributing
|
56
117
|
|
@@ -58,7 +119,7 @@ Bug reports and pull requests are welcome on GitHub at [https://github.com/Julio
|
|
58
119
|
|
59
120
|
## License
|
60
121
|
|
61
|
-
|
122
|
+
This gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
|
62
123
|
|
63
124
|
## Author
|
64
125
|
|
data/lib/claiss/commands.rb
CHANGED
@@ -1,9 +1,10 @@
|
|
1
1
|
module CLAISS
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
end
|
2
|
+
module Commands
|
3
|
+
extend Dry::CLI::Registry
|
4
|
+
|
5
|
+
register "version", CLAISS::Version, aliases: ["v", "-v", "--version"]
|
6
|
+
register "refactor", CLAISS::Refactor
|
7
|
+
register "fix_ruby_permissions", CLAISS::FixRubyPermissions
|
8
|
+
register "generate_json", CLAISS::GenerateJson
|
9
|
+
end
|
10
|
+
end
|
data/lib/claiss/version.rb
CHANGED
@@ -1,3 +1,3 @@
|
|
1
1
|
module CLAISS
|
2
|
-
VERSION = "1.1.
|
3
|
-
end
|
2
|
+
VERSION = "1.1.3"
|
3
|
+
end
|
data/lib/claiss.rb
CHANGED
@@ -1,9 +1,21 @@
|
|
1
|
-
require "bundler/setup"
|
2
1
|
require "dry/cli"
|
3
|
-
require "
|
2
|
+
require "bundler/setup"
|
3
|
+
require 'pathname'
|
4
4
|
require 'json'
|
5
|
+
require "fileutils"
|
6
|
+
require 'logger'
|
7
|
+
require 'parallel'
|
8
|
+
require 'ruby-progressbar'
|
5
9
|
|
10
|
+
# CLAISS module provides CLI commands for refactoring and managing Ruby projects
|
6
11
|
module CLAISS
|
12
|
+
IGNORED_DIRECTORIES = [".git/", "node_modules/"]
|
13
|
+
DEFAULT_JSON_DIR = File.join(Dir.home, '.claiss')
|
14
|
+
|
15
|
+
# Initialize logger
|
16
|
+
LOGGER = Logger.new(STDOUT)
|
17
|
+
LOGGER.level = Logger::INFO # Set to Logger::DEBUG for more verbose output
|
18
|
+
|
7
19
|
class Error < StandardError; end
|
8
20
|
|
9
21
|
class Version < Dry::CLI::Command
|
@@ -15,90 +27,258 @@ module CLAISS
|
|
15
27
|
end
|
16
28
|
|
17
29
|
class Refactor < Dry::CLI::Command
|
18
|
-
desc "
|
19
|
-
|
20
|
-
argument :
|
21
|
-
|
22
|
-
|
23
|
-
|
30
|
+
desc "Refactor files and filenames"
|
31
|
+
|
32
|
+
argument :path, type: :string, required: true, desc: "Path to the directory to refactor"
|
33
|
+
argument :rules, type: :string, required: true, desc: "Name of the rules file (without .json extension)"
|
34
|
+
option :destination, type: :string, desc: "Destination path for refactored files"
|
35
|
+
|
36
|
+
example [
|
37
|
+
"path/to/project autokeras",
|
38
|
+
"path/to/project autokeras --destination path/to/output"
|
39
|
+
]
|
40
|
+
|
41
|
+
def call(path:, rules:, destination: nil, **)
|
24
42
|
origin_path = File.expand_path(path)
|
25
|
-
destination_path = File.expand_path(
|
43
|
+
destination_path = destination ? File.expand_path(destination) : nil
|
44
|
+
|
45
|
+
json_file = File.join(DEFAULT_JSON_DIR, "#{rules}.json")
|
46
|
+
dict = load_dictionary(json_file)
|
47
|
+
|
48
|
+
files = get_files_to_process(origin_path)
|
49
|
+
process_files_in_parallel(files, dict, origin_path, destination_path)
|
50
|
+
remove_empty_directories(destination_path || origin_path)
|
51
|
+
|
52
|
+
puts "Done! Files have been refactored#{destination_path ? ' to the destination' : ' in place'}."
|
53
|
+
end
|
26
54
|
|
27
|
-
|
28
|
-
process_files(origin_path, dict)
|
55
|
+
private
|
29
56
|
|
30
|
-
|
57
|
+
def get_files_to_process(origin_path)
|
58
|
+
Dir.glob(File.join(origin_path, '**', '*'), File::FNM_DOTMATCH).reject do |file_name|
|
59
|
+
File.directory?(file_name) || IGNORED_DIRECTORIES.any? { |dir| file_name.include?(dir) }
|
60
|
+
end
|
31
61
|
end
|
32
62
|
|
33
|
-
|
63
|
+
def process_files_in_parallel(files, dict, origin_path, destination_path)
|
64
|
+
progress_bar = ProgressBar.create(
|
65
|
+
total: files.size,
|
66
|
+
format: "%a %b\u{15E7}%i %p%% %t",
|
67
|
+
progress_mark: ' ',
|
68
|
+
remainder_mark: "\u{FF65}"
|
69
|
+
)
|
70
|
+
|
71
|
+
Parallel.each(files, in_threads: Parallel.processor_count) do |file_name|
|
72
|
+
refactor_file(file_name, dict, origin_path, destination_path)
|
73
|
+
progress_bar.increment
|
74
|
+
end
|
75
|
+
end
|
34
76
|
|
35
77
|
def load_dictionary(json_file)
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
78
|
+
LOGGER.info("Attempting to load dictionary from: #{json_file}")
|
79
|
+
|
80
|
+
unless File.exist?(json_file)
|
81
|
+
error_message = "JSON file not found: #{json_file}"
|
82
|
+
LOGGER.error(error_message)
|
83
|
+
raise Errno::ENOENT, error_message
|
84
|
+
end
|
85
|
+
|
86
|
+
begin
|
87
|
+
file_content = File.read(json_file)
|
88
|
+
LOGGER.debug("File content: #{file_content}")
|
89
|
+
|
90
|
+
parsed_content = JSON.parse(file_content)
|
91
|
+
LOGGER.info("Successfully parsed JSON file")
|
92
|
+
|
93
|
+
if parsed_content.empty?
|
94
|
+
LOGGER.warn("The loaded dictionary is empty")
|
95
|
+
else
|
96
|
+
LOGGER.info("Loaded dictionary with #{parsed_content.size} key-value pairs")
|
97
|
+
end
|
98
|
+
|
99
|
+
parsed_content
|
100
|
+
rescue JSON::ParserError => e
|
101
|
+
error_message = "Error parsing JSON file '#{json_file}': #{e.message}"
|
102
|
+
LOGGER.error(error_message)
|
103
|
+
LOGGER.debug("JSON content that failed to parse: #{file_content}")
|
104
|
+
raise JSON::ParserError, error_message
|
105
|
+
rescue StandardError => e
|
106
|
+
error_message = "Unexpected error while loading dictionary from '#{json_file}': #{e.message}"
|
107
|
+
LOGGER.error(error_message)
|
108
|
+
LOGGER.debug(e.backtrace.join("\n"))
|
109
|
+
raise
|
40
110
|
end
|
41
111
|
end
|
42
112
|
|
43
|
-
def
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
break if search.empty?
|
49
|
-
print "Term to replace: "
|
50
|
-
replace = STDIN.gets.chomp
|
51
|
-
dict[search] = replace
|
113
|
+
def process_files(origin_path, dict, destination_path)
|
114
|
+
Dir.glob(File.join(origin_path, '**', '*'), File::FNM_DOTMATCH) do |file_name|
|
115
|
+
next if File.directory?(file_name)
|
116
|
+
next if IGNORED_DIRECTORIES.any? { |dir| file_name.include?(dir) }
|
117
|
+
refactor_file(file_name, dict, origin_path, destination_path)
|
52
118
|
end
|
53
|
-
dict
|
54
119
|
end
|
55
120
|
|
56
|
-
def
|
57
|
-
|
58
|
-
|
59
|
-
|
121
|
+
def refactor_file(file_name, dict, origin_path, destination_path)
|
122
|
+
begin
|
123
|
+
# First, try to read the file as UTF-8
|
124
|
+
text = File.read(file_name, encoding: 'UTF-8')
|
125
|
+
rescue Encoding::InvalidByteSequenceError
|
126
|
+
# If UTF-8 reading fails, fall back to binary reading and force UTF-8 encoding
|
127
|
+
# This approach helps handle files with mixed or unknown encodings
|
128
|
+
truncated_file_name = File.basename(file_name)
|
129
|
+
LOGGER.warn("Invalid UTF-8 byte sequence in ...#{truncated_file_name}. Falling back to binary reading.")
|
130
|
+
text = File.read(file_name, encoding: 'BINARY')
|
131
|
+
text.force_encoding('UTF-8')
|
132
|
+
# Replace any invalid or undefined characters with empty string
|
133
|
+
text.encode!('UTF-8', invalid: :replace, undef: :replace, replace: '')
|
134
|
+
end
|
135
|
+
|
136
|
+
text_changed = false
|
137
|
+
dict.each do |search, replace|
|
138
|
+
if text.gsub!(/#{Regexp.escape(search)}/, replace)
|
139
|
+
text_changed = true
|
140
|
+
end
|
141
|
+
end
|
142
|
+
|
143
|
+
relative_path = Pathname.new(file_name).relative_path_from(Pathname.new(origin_path))
|
144
|
+
new_relative_path = replace_in_path(relative_path.to_s, dict)
|
145
|
+
|
146
|
+
if destination_path
|
147
|
+
new_file_name = File.join(destination_path, new_relative_path)
|
148
|
+
else
|
149
|
+
new_file_name = File.join(origin_path, new_relative_path)
|
150
|
+
end
|
151
|
+
|
152
|
+
new_dir = File.dirname(new_file_name)
|
153
|
+
FileUtils.mkdir_p(new_dir) unless File.directory?(new_dir)
|
154
|
+
|
155
|
+
if text_changed || new_file_name != file_name
|
156
|
+
File.write(new_file_name, text)
|
157
|
+
if destination_path || new_file_name != file_name
|
158
|
+
truncated_old = "...#{File.basename(file_name)}"
|
159
|
+
truncated_new = "...#{File.basename(new_file_name)}"
|
160
|
+
LOGGER.info("File #{destination_path ? 'copied' : 'renamed'} from #{truncated_old} to #{truncated_new}")
|
161
|
+
else
|
162
|
+
truncated_file = "...#{File.basename(file_name)}"
|
163
|
+
LOGGER.info("File contents updated: #{truncated_file}")
|
164
|
+
end
|
165
|
+
File.delete(file_name) if !destination_path && new_file_name != file_name
|
60
166
|
end
|
167
|
+
rescue => e
|
168
|
+
truncated_file = "...#{File.basename(file_name)}"
|
169
|
+
LOGGER.error("Error processing file #{truncated_file}: #{e.message}")
|
170
|
+
LOGGER.debug(e.backtrace.join("\n"))
|
61
171
|
end
|
62
172
|
|
63
|
-
def
|
64
|
-
|
65
|
-
|
173
|
+
def replace_in_path(path, dict)
|
174
|
+
dict.reduce(path) do |s, (search, replace)|
|
175
|
+
s.gsub(/#{Regexp.escape(search)}/, replace)
|
176
|
+
end
|
177
|
+
end
|
66
178
|
|
67
|
-
|
68
|
-
|
69
|
-
|
179
|
+
def remove_empty_directories(path)
|
180
|
+
Dir.glob(File.join(path, '**', '*'), File::FNM_DOTMATCH).reverse_each do |dir_name|
|
181
|
+
next unless File.directory?(dir_name)
|
182
|
+
next if IGNORED_DIRECTORIES.any? { |ignored_dir| dir_name.include?(ignored_dir) }
|
183
|
+
if (Dir.entries(dir_name) - %w[. ..]).empty?
|
184
|
+
Dir.rmdir(dir_name)
|
185
|
+
puts "Removed empty directory: #{dir_name}"
|
186
|
+
end
|
70
187
|
end
|
188
|
+
end
|
189
|
+
end
|
71
190
|
|
72
|
-
|
73
|
-
|
74
|
-
|
191
|
+
class GenerateJson < Dry::CLI::Command
|
192
|
+
desc "Generate a new JSON file with an empty key-value pair"
|
193
|
+
|
194
|
+
option :output, type: :string, default: "rules", desc: "Name of the output JSON file (default: rules)"
|
195
|
+
option :path, type: :string, desc: "Path to save the JSON file (default: ~/.claiss/)"
|
196
|
+
|
197
|
+
example [
|
198
|
+
"",
|
199
|
+
"--output my_custom_rules",
|
200
|
+
"--path /custom/path/ --output my_rules"
|
201
|
+
]
|
202
|
+
|
203
|
+
def call(path:, rules:, destination: nil, **)
|
204
|
+
origin_path = File.expand_path(path)
|
205
|
+
destination_path = destination ? File.expand_path(destination) : nil
|
206
|
+
|
207
|
+
json_file = File.join(DEFAULT_JSON_DIR, "#{rules}.json")
|
208
|
+
|
209
|
+
begin
|
210
|
+
dict = load_dictionary(json_file)
|
211
|
+
rescue Errno::ENOENT => e
|
212
|
+
puts e.message
|
213
|
+
puts "Please make sure the JSON file exists in the ~/.claiss directory."
|
214
|
+
exit(1)
|
215
|
+
rescue JSON::ParserError => e
|
216
|
+
puts e.message
|
217
|
+
puts "Please check the JSON file for syntax errors."
|
218
|
+
exit(1)
|
219
|
+
rescue StandardError => e
|
220
|
+
puts "An unexpected error occurred: #{e.message}"
|
221
|
+
puts "Please check the log for more details."
|
222
|
+
exit(1)
|
223
|
+
end
|
224
|
+
|
225
|
+
process_files(origin_path, dict, destination_path)
|
226
|
+
remove_empty_directories(destination_path || origin_path)
|
227
|
+
|
228
|
+
puts "Done! Files have been refactored#{destination_path ? ' to the destination' : ' in place'}."
|
229
|
+
end
|
230
|
+
|
231
|
+
private
|
232
|
+
|
233
|
+
def ensure_json_extension(filename)
|
234
|
+
return filename if filename.end_with?('.json')
|
235
|
+
"#{filename}.json"
|
75
236
|
end
|
76
237
|
end
|
77
238
|
|
78
239
|
class FixRubyPermissions < Dry::CLI::Command
|
79
240
|
desc "Fix permissions for a Ruby project"
|
80
|
-
argument :path, required: true, desc: "The path of your Ruby project"
|
81
241
|
|
82
|
-
|
83
|
-
|
242
|
+
argument :path, type: :string, required: false, default: ".", desc: "Path to the Ruby project (default: current directory)"
|
243
|
+
|
244
|
+
example [
|
245
|
+
"",
|
246
|
+
"path/to/ruby/project"
|
247
|
+
]
|
248
|
+
|
249
|
+
def call(path: ".", **)
|
84
250
|
path = File.expand_path(path)
|
85
251
|
|
86
252
|
Dir.glob(File.join(path, '**', '*'), File::FNM_DOTMATCH) do |item|
|
87
253
|
next if item == '.' || item == '..'
|
254
|
+
next if item.include?("node_modules/") # Ignore node_modules folder
|
88
255
|
if File.directory?(item)
|
89
256
|
File.chmod(0755, item)
|
90
257
|
else
|
91
|
-
|
258
|
+
fix_file_permissions(item)
|
92
259
|
end
|
93
260
|
end
|
94
261
|
|
95
262
|
executable_files = ['bundle', 'rails', 'rake', 'spring']
|
96
263
|
executable_files.each do |file|
|
97
264
|
file_path = File.join(path, 'bin', file)
|
98
|
-
|
265
|
+
if File.exist?(file_path)
|
266
|
+
File.chmod(0755, file_path)
|
267
|
+
puts "Made #{file_path} executable"
|
268
|
+
end
|
99
269
|
end
|
100
270
|
|
101
|
-
puts "Permissions fixed for #{path}"
|
271
|
+
puts "Permissions fixed for Ruby project at #{path}"
|
272
|
+
end
|
273
|
+
|
274
|
+
private
|
275
|
+
|
276
|
+
def fix_file_permissions(file)
|
277
|
+
if File.extname(file) == '.rb' || file.include?('/bin/')
|
278
|
+
File.chmod(0755, file)
|
279
|
+
else
|
280
|
+
File.chmod(0644, file)
|
281
|
+
end
|
102
282
|
end
|
103
283
|
end
|
104
284
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: claiss
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
4
|
+
version: 1.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Júlio Papel
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-
|
11
|
+
date: 2024-11-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: dry-cli
|
@@ -52,6 +52,34 @@ dependencies:
|
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: 2.6.3
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: parallel
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 1.26.3
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 1.26.3
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: ruby-progressbar
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 1.13.0
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 1.13.0
|
55
83
|
description: CLI application Toolbox to manage CLAISS AI applications and deployments.
|
56
84
|
Some features may not work in all environments. Use with caution!
|
57
85
|
email:
|
@@ -74,7 +102,7 @@ licenses:
|
|
74
102
|
metadata:
|
75
103
|
source_code_uri: https://github.com/JulioPapel/claiss.git
|
76
104
|
documentation_uri: https://github.com/JulioPapel/claiss/blob/main/readme.md
|
77
|
-
post_install_message:
|
105
|
+
post_install_message:
|
78
106
|
rdoc_options: []
|
79
107
|
require_paths:
|
80
108
|
- lib
|
@@ -90,7 +118,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
90
118
|
version: '0'
|
91
119
|
requirements: []
|
92
120
|
rubygems_version: 3.1.2
|
93
|
-
signing_key:
|
121
|
+
signing_key:
|
94
122
|
specification_version: 4
|
95
123
|
summary: CLAISS AI CLI application Toolbox
|
96
124
|
test_files: []
|