mokkku 0.0.7 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6bc74f6aa066c531790d02be4d8b461978dd586b0a8c3f4275b0e74d2d12d5c7
4
- data.tar.gz: 630c84be5245471760c79f245caacc240b733cded99c11db2761fb9655d70a12
3
+ metadata.gz: 4cd54dda1bd58c2eb99881690a02c99b7962c018bdf07132122d5240d6885c2f
4
+ data.tar.gz: 5c61996856695c6f53b8015eaa9c7923bf48a067969e8a9f4337db82cfc58b54
5
5
  SHA512:
6
- metadata.gz: f738b67f66cc8dac9d73104eda8f01152cd173ecba1787f8b6be2acecf9f9726552cdcf51d0ab91de36db91c925872e93e122bae5a39abecb7a0c47ebea9eabb
7
- data.tar.gz: dd6b831f50e46b375dafa703eb165f6be1f4dd6097f50201f7fdef5ab40f6b7364b30371f94acd8a088afe615891ebc37079372508828d06ffc0500c817e5097
6
+ metadata.gz: 15a72e5e0e60cb7a2ef7b9febcc3dc17dfa01d3393358ee4a147654e2e915eafee3c7d55a9fb174b83433d2e724117fa79c4f33ca23d89d7be4b731b2ed2f0dc
7
+ data.tar.gz: 76acb0e6fba9015ee604d9f19eaf9834ef66c8d1a752cade074753f4d7d69f19f2f783e1d7846a2c81beb4c9cab4f93a9aa7d44d6b8017440af5141c33775d6d
@@ -12,20 +12,25 @@ module Mokkku
12
12
  options[:models].each do |model_name|
13
13
  columns = Object.const_get(model_name).columns
14
14
  prompt = ::Mokkku::Cli::Prompt.generate(model_name, columns, options.fetch(:mocks_count, 10), options.fetch(:language, 'english'))
15
- generator = ::Mokkku::Generators::Builder.call(
16
- generator: options[:llm_model],
17
- api_key: options[:llm_api_key],
18
- prompt: prompt
19
- )
20
15
 
21
- yaml_mock = generator.call(api_key: options[:llm_api_key], prompt: prompt)
22
- mock_file_name = model_name.to_s.gsub(/([a-z\d])([A-Z])/, '\1_\2').downcase
16
+ if options.key?(:llm_model) && options.key?(:llm_api_key)
17
+ generator = ::Mokkku::Generators::Builder.call(
18
+ generator: options[:llm_model],
19
+ api_key: options[:llm_api_key],
20
+ prompt: prompt
21
+ )
23
22
 
24
- puts "Write mocks for #{model_name} model in #{mock_file_name}.yml"
25
- File.write(
26
- File.join(options.fetch(:mocks_path, './spec/mocks'), "#{mock_file_name}.yml"),
27
- ::Mokkku::YamlSanitizer.sanitize(yaml_mock)
28
- )
23
+ yaml_mock = generator.call(api_key: options[:llm_api_key], prompt: prompt)
24
+ mock_file_name = model_name.to_s.gsub(/([a-z\d])([A-Z])/, '\1_\2').downcase
25
+
26
+ puts "Write mocks for #{model_name} model in #{mock_file_name}.yml"
27
+ File.write(
28
+ File.join(options.fetch(:mocks_path, './spec/mocks'), "#{mock_file_name}.yml"),
29
+ ::Mokkku::YamlSanitizer.sanitize(yaml_mock)
30
+ )
31
+ else
32
+ puts "Prompt for #{model_name} model: \n\n#{prompt}"
33
+ end
29
34
  end
30
35
 
31
36
  puts 'Done!'
@@ -7,8 +7,8 @@ module Mokkku
7
7
 
8
8
  def self.validate_options!(options)
9
9
  raise ModelsNotProvided if options.fetch(:models, []).empty?
10
- raise InvalidLlmModel unless %w[gpt gemini claude].include?(options[:llm_model].to_s.downcase)
11
- raise LlmApiKeyNotProvided if options[:llm_api_key].to_s == ''
10
+ raise InvalidLlmModel if options.key?(:llm_model) && !%w[gpt gemini claude].include?(options[:llm_model].to_s.downcase)
11
+ raise LlmApiKeyNotProvided if options[:llm_api_key].to_s == '' && options.key?(:llm_model)
12
12
  end
13
13
  end
14
14
  end
@@ -1,6 +1,10 @@
1
1
  module Mokkku
2
2
  class MockedObject
3
- def initialize(mocks)
3
+ attr_reader :mocked_class
4
+ attr_accessor :selected_object
5
+
6
+ def initialize(mocked_class, mocks)
7
+ @mocked_class = mocked_class
4
8
  @mocks = mocks
5
9
  @selected_object = nil
6
10
  end
@@ -18,12 +22,7 @@ module Mokkku
18
22
  end
19
23
 
20
24
  def method_missing(method_name, *args, &block)
21
- if @selected_object.nil?
22
- @selected_object = mocked_objects.sample(random: Mokkku::Random)
23
- @selected_object.public_send(method_name)
24
- else
25
- @selected_object.public_send(method_name)
26
- end
25
+ @selected_object.public_send(method_name)
27
26
  end
28
27
  end
29
28
  end
@@ -0,0 +1,61 @@
1
+ require 'set'
2
+
3
+ module Mokkku
4
+ class UniqueUtils
5
+ RetryLimitExceeded = Class.new(StandardError)
6
+
7
+ class << self
8
+ def add_instance(generator, max_retries)
9
+ instances[generator.mocked_class] ||= Mokkku::UniqueUtils.new(generator, max_retries)
10
+ end
11
+
12
+ def instances
13
+ Thread.current[:mokkku_unique_utils] ||= {}
14
+ end
15
+
16
+ def clear
17
+ instances.each_value(&:clear)
18
+ instances.clear
19
+ end
20
+ end
21
+
22
+ def initialize(generator, max_retries)
23
+ @generator = generator
24
+ @max_retries = max_retries
25
+ end
26
+
27
+ def clear
28
+ previous_results.clear
29
+ end
30
+
31
+ private
32
+
33
+ def method_missing(name, *args, **kwargs)
34
+ if @generator.selected_object.nil? && @generator.send(:mocked_objects).first.to_h.keys.include?(name)
35
+ @max_retries.times do
36
+ next_object = @generator.send(:mocked_objects).sample(random: Mokkku::Random)
37
+
38
+ next if previous_results.include?(next_object)
39
+
40
+ previous_results << next_object
41
+ @generator.instance_variable_set(:@selected_object, next_object)
42
+ break
43
+ end
44
+
45
+ if @generator.selected_object.nil?
46
+ raise RetryLimitExceeded, "Retry limit exceeded for #{name}"
47
+ end
48
+ end
49
+
50
+ @generator.public_send(name, *args, **kwargs)
51
+ end
52
+
53
+ def respond_to_missing?(name, *args)
54
+ @generator.respond_to?(name, *args) || super
55
+ end
56
+
57
+ def previous_results
58
+ @previous_results ||= Set.new
59
+ end
60
+ end
61
+ end
data/lib/mokkku/utils.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  require 'yaml'
2
2
  require_relative 'mocked_object'
3
+ require_relative 'uniq_utils'
3
4
 
4
5
  module Mokkku
5
6
  module Utils
@@ -11,11 +12,12 @@ module Mokkku
11
12
  mock_path = File.join(Mokkku.configuration.mocks_path, "#{mock_file_name}.yml")
12
13
  data = File.read(mock_path)
13
14
  parsed_data = YAML.safe_load(data, symbolize_names: true)
14
- mocked_object = Mokkku::MockedObject.new(parsed_data)
15
+ mocked_object = Mokkku::MockedObject.new(const_name.to_s, parsed_data)
16
+ unique_mocked_object = Mokkku::UniqueUtils.add_instance(mocked_object, 100)
15
17
 
16
- const_set const_name, mocked_object
18
+ const_set const_name, unique_mocked_object
17
19
 
18
- mocked_object
20
+ unique_mocked_object
19
21
  end
20
22
  end
21
23
  end
@@ -3,7 +3,7 @@ module Mokkku
3
3
  module_function
4
4
 
5
5
  def to_s
6
- '0.0.7'
6
+ '0.1.0'
7
7
  end
8
8
  end
9
9
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mokkku
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.7
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Paweł Dąbrowski
@@ -103,6 +103,7 @@ files:
103
103
  - lib/mokkku/generators/gemini.rb
104
104
  - lib/mokkku/generators/gpt.rb
105
105
  - lib/mokkku/mocked_object.rb
106
+ - lib/mokkku/uniq_utils.rb
106
107
  - lib/mokkku/utils.rb
107
108
  - lib/mokkku/version.rb
108
109
  - lib/mokkku/yaml_sanitizer.rb