mokkku 0.0.7 → 0.1.0

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.
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