ai_refactor 0.4.0 → 0.5.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.
@@ -0,0 +1,115 @@
1
+ # frozen_string_literal: true
2
+
3
+ module AIRefactor
4
+ class RunConfiguration
5
+ def self.add_new_option(key)
6
+ self.class.define_method(key) { instance_variable_get("@#{key}") }
7
+ self.class.define_method("#{key}=") { |v| instance_variable_set("@#{key}", v) }
8
+ end
9
+
10
+ attr_reader :refactor,
11
+ :input_file_paths,
12
+ :output_file_path,
13
+ :output_template_path,
14
+ :context_file_paths,
15
+ :context_text,
16
+ :review_prompt,
17
+ :prompt,
18
+ :prompt_file_path,
19
+ :ai_max_attempts,
20
+ :ai_model,
21
+ :ai_temperature,
22
+ :ai_max_tokens,
23
+ :ai_timeout,
24
+ :overwrite,
25
+ :diff,
26
+ :verbose,
27
+ :debug
28
+
29
+ def set!(hash)
30
+ hash.each do |key, value|
31
+ raise StandardError, "Invalid option: #{key}" unless respond_to?("#{key}=")
32
+ send("#{key}=", value)
33
+ end
34
+ end
35
+
36
+ attr_writer :refactor
37
+
38
+ # @deprecated
39
+ def [](key)
40
+ send(key)
41
+ end
42
+
43
+ def input_file_paths=(paths)
44
+ @input_file_paths ||= []
45
+ paths = [paths] unless paths.is_a?(Array)
46
+ @input_file_paths.concat(paths)
47
+ end
48
+
49
+ attr_writer :output_file_path
50
+
51
+ attr_writer :output_template_path
52
+
53
+ def context_file_paths=(paths)
54
+ @context_file_paths ||= []
55
+ paths = [paths] unless paths.is_a?(Array)
56
+ @context_file_paths.concat(paths)
57
+ end
58
+
59
+ def context_text=(text)
60
+ @context_text ||= ""
61
+ @context_text += text
62
+ end
63
+
64
+ attr_writer :review_prompt
65
+ attr_writer :prompt
66
+ attr_writer :prompt_file_path
67
+
68
+ def rspec_run_command
69
+ @rspec_run_command || "bundle exec rspec __FILE__"
70
+ end
71
+
72
+ def minitest_run_command
73
+ @minitest_run_command || "ruby __FILE__"
74
+ end
75
+
76
+ attr_writer :rspec_run_command
77
+ attr_writer :minitest_run_command
78
+
79
+ def ai_max_attempts=(value)
80
+ @ai_max_attempts = value || 3
81
+ end
82
+
83
+ def ai_model=(value)
84
+ @ai_model = value || "gpt-4"
85
+ end
86
+
87
+ def ai_temperature=(value)
88
+ @ai_temperature = value || 0.7
89
+ end
90
+
91
+ def ai_max_tokens=(value)
92
+ @ai_max_tokens = value || 1500
93
+ end
94
+
95
+ def ai_timeout=(value)
96
+ @ai_timeout = value || 60
97
+ end
98
+
99
+ def overwrite=(value)
100
+ @overwrite = value || "a"
101
+ end
102
+
103
+ attr_writer :diff
104
+
105
+ attr_writer :verbose
106
+
107
+ attr_writer :debug
108
+
109
+ def to_options
110
+ instance_variables.each_with_object({}) do |var, hash|
111
+ hash[var.to_s.delete("@").to_sym] = instance_variable_get(var)
112
+ end
113
+ end
114
+ end
115
+ end
@@ -0,0 +1,48 @@
1
+ module AIRefactor
2
+ class TemplatedPath
3
+ def initialize(input_file, refactor_name, template)
4
+ @input_file = input_file
5
+ @refactor_name = refactor_name
6
+ raise ArgumentError unless template.length.positive?
7
+ @template = template
8
+ end
9
+
10
+ def generate
11
+ path_from_template
12
+ end
13
+
14
+ private
15
+
16
+ def path_from_template
17
+ path = @template.dup
18
+ @template.scan(/\[(FILE|NAME|DIR|REFACTOR|EXT)(\|([^|]+)\|([^\]]*))?\]/).each do |match|
19
+ type, sub, old_value, new_value = match
20
+ puts "type: #{type}, sub: #{sub}, old_value: #{old_value}, new_value: #{new_value}"
21
+ value = send(type.downcase.to_sym)
22
+ value = value.gsub(old_value, new_value) if sub
23
+ path.gsub!("[#{type}#{sub}]", value)
24
+ end
25
+ path
26
+ end
27
+
28
+ def file
29
+ File.basename(@input_file)
30
+ end
31
+
32
+ def name
33
+ File.basename(@input_file, ".*")
34
+ end
35
+
36
+ def dir
37
+ File.dirname(@input_file)
38
+ end
39
+
40
+ def refactor
41
+ @refactor_name
42
+ end
43
+
44
+ def ext
45
+ File.extname(@input_file)
46
+ end
47
+ end
48
+ end
@@ -5,7 +5,7 @@ require "open3"
5
5
  module AIRefactor
6
6
  module TestRunners
7
7
  class MinitestRunner
8
- def initialize(file_path, command_template: "bundle exec rails test __FILE__")
8
+ def initialize(file_path, command_template: "ruby __FILE__")
9
9
  @file_path = file_path
10
10
  @command_template = command_template
11
11
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module AIRefactor
4
- VERSION = "0.4.0"
4
+ VERSION = "0.5.1"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ai_refactor
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.5.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stephen Ierodiaconou
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-08-15 00:00:00.000000000 Z
11
+ date: 2023-09-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: colorize
@@ -89,9 +89,15 @@ files:
89
89
  - README.md
90
90
  - Rakefile
91
91
  - ai_refactor.gemspec
92
+ - examples/.gitignore
93
+ - examples/ex1_convert_a_rspec_test_to_minitest.yml
94
+ - examples/ex1_input_spec.rb
95
+ - examples/rails_helper.rb
96
+ - examples/test_helper.rb
92
97
  - exe/ai_refactor
93
98
  - lib/ai_refactor.rb
94
99
  - lib/ai_refactor/cli.rb
100
+ - lib/ai_refactor/command_file_parser.rb
95
101
  - lib/ai_refactor/context.rb
96
102
  - lib/ai_refactor/file_processor.rb
97
103
  - lib/ai_refactor/logger.rb
@@ -100,7 +106,7 @@ files:
100
106
  - lib/ai_refactor/prompts/input.md
101
107
  - lib/ai_refactor/refactors.rb
102
108
  - lib/ai_refactor/refactors/base_refactor.rb
103
- - lib/ai_refactor/refactors/generic.rb
109
+ - lib/ai_refactor/refactors/custom.rb
104
110
  - lib/ai_refactor/refactors/minitest/write_test_for_class.md
105
111
  - lib/ai_refactor/refactors/minitest/write_test_for_class.rb
106
112
  - lib/ai_refactor/refactors/project/write_changelog_from_history.md
@@ -109,6 +115,12 @@ files:
109
115
  - lib/ai_refactor/refactors/rails/minitest/rspec_to_minitest.rb
110
116
  - lib/ai_refactor/refactors/rspec/minitest_to_rspec.md
111
117
  - lib/ai_refactor/refactors/rspec/minitest_to_rspec.rb
118
+ - lib/ai_refactor/refactors/ruby/refactor_ruby.md
119
+ - lib/ai_refactor/refactors/ruby/refactor_ruby.rb
120
+ - lib/ai_refactor/refactors/ruby/write_ruby.md
121
+ - lib/ai_refactor/refactors/ruby/write_ruby.rb
122
+ - lib/ai_refactor/run_configuration.rb
123
+ - lib/ai_refactor/templated_path.rb
112
124
  - lib/ai_refactor/test_runners/minitest_runner.rb
113
125
  - lib/ai_refactor/test_runners/rspec_runner.rb
114
126
  - lib/ai_refactor/test_runners/test_run_diff_report.rb
@@ -135,7 +147,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
135
147
  - !ruby/object:Gem::Version
136
148
  version: '0'
137
149
  requirements: []
138
- rubygems_version: 3.4.10
150
+ rubygems_version: 3.4.19
139
151
  signing_key:
140
152
  specification_version: 4
141
153
  summary: Use AI to convert a Rails RSpec test suite to minitest.