easy_talk 0.1.7 → 0.1.8

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: f412e6a4ef70f8a8912def5e60e4f9a2fbb80a47c0f22e7f46af9caed9d153fa
4
- data.tar.gz: ee7bfc2e77fef086bff23db293eec6f6d7f47ed47488a803737e2831895feb88
3
+ metadata.gz: da6e2b2c29860236280b654d18e4df4af908ab0246f01e1e5e376805f8359d37
4
+ data.tar.gz: 1a36d4e08f82069391386c3b2bd03becfeaea198657b8db05ff2ebda793d4ec8
5
5
  SHA512:
6
- metadata.gz: feb1884f28b4c0400ccbe3fb651f2d87e4650a25180ed804bab8c7b2493ebc7f0d7fb769271788a7dc0e0e6cdc6c2793fb1cbaa064df881aef2d797242b70860
7
- data.tar.gz: 1c2ac812a423169c0bc0d43afac4f86711acad7bbab28aeb40e249df65258be4cb845903edc585d43f835b2717b9fc4003817b0ae2c704d20a28ff583290f3c5
6
+ metadata.gz: 9026006c5e296adf2f3a7c826757ffe4b17a1387c3621907442ac47293d2d7d89eb4779fe3863ef24f6a8fc34174a7b4e7e22d2aaf0a26a4534ddc65f08ab482
7
+ data.tar.gz: d3cd70fb2ac65241cf395606d0eae55e2282006578f4f78096f9e03256ae6fa91bd371b0874d20aa797667b4972be4ff91c5b38b4396ee1be89a3b4d057d4681
data/.rubocop.yml CHANGED
@@ -1,5 +1,17 @@
1
+ require:
2
+ - rubocop-rake
3
+ - rubocop-rspec
4
+
1
5
  AllCops:
2
6
  TargetRubyVersion: 3.2
7
+
8
+ RSpec/FilePath:
9
+ SpecSuffixOnly: true
10
+
11
+ RSpec/ExampleLength:
12
+ Max: 10
13
+ Exclude:
14
+ - 'spec/easy_talk/examples/**/*'
3
15
 
4
16
  Metrics/BlockLength:
5
17
  Exclude:
@@ -11,4 +23,8 @@ Lint/ConstantDefinitionInBlock:
11
23
 
12
24
  Layout/LineLength:
13
25
  Exclude:
14
- - 'spec/**/*'
26
+ - 'spec/**/*'
27
+
28
+ RSpec/DescribeClass:
29
+ Exclude:
30
+ - 'spec/easy_talk/examples/**/*'
data/CHANGELOG.md CHANGED
@@ -1,3 +1,6 @@
1
+ ## [0.1.8] - 2024-04-24
2
+ - mostly refactoring without changes to the public API.
3
+
1
4
  ## [0.1.7] - 2024-04-16
2
5
  - general cleanup and refactoring.
3
6
 
data/Rakefile CHANGED
@@ -2,11 +2,10 @@
2
2
 
3
3
  require 'bundler/gem_tasks'
4
4
  require 'rspec/core/rake_task'
5
+ require 'rubocop/rake_task'
5
6
 
6
7
  RSpec::Core::RakeTask.new(:spec)
7
8
 
8
- require 'rubocop/rake_task'
9
-
10
9
  RuboCop::RakeTask.new
11
10
 
12
11
  task default: %i[spec rubocop]
@@ -8,7 +8,7 @@ module EasyTalk
8
8
  class ObjectBuilder < BaseBuilder
9
9
  extend T::Sig
10
10
 
11
- attr_reader :klass, :schema
11
+ attr_reader :schema
12
12
 
13
13
  VALID_OPTIONS = {
14
14
  properties: { type: T::Hash[Symbol, T.untyped], key: :properties },
@@ -17,6 +17,16 @@ require_relative 'builders/union_builder'
17
17
 
18
18
  # frozen_string_literal: true
19
19
 
20
+ # EasyTalk module provides classes for building JSON schema properties.
21
+ #
22
+ # This module contains the `Property` class, which is used to build a JSON schema property.
23
+ # It also defines a constant `TYPE_TO_BUILDER` which maps property types to their respective builders.
24
+ #
25
+ # Example usage:
26
+ # property = EasyTalk::Property.new(:name, 'String', minLength: 3, maxLength: 50)
27
+ # property.build
28
+ #
29
+ # @see EasyTalk::Property
20
30
  module EasyTalk
21
31
  # Property class for building a JSON schema property.
22
32
  class Property
@@ -56,22 +66,36 @@ module EasyTalk
56
66
  raise ArgumentError, 'property type is missing' if type.blank?
57
67
  end
58
68
 
69
+ # Builds the property based on the specified type, constraints, and builder.
70
+ #
71
+ # If the type responds to the `schema` method, it returns the schema of the type.
72
+ # Otherwise, it returns 'object'.
73
+ #
74
+ # If a builder is specified, it uses the builder to build the property.
75
+ # The arguments passed to the builder depend on whether the builder is a collection type or not.
76
+ #
77
+ # @return [Object] The built property.
59
78
  def build
60
- if builder
61
- if builder.collection_type?
62
- builder.new(name, type, constraints).build
63
- else
64
- builder.new(name, constraints).build
65
- end
66
- else
67
- type.respond_to?(:schema) ? type.schema : 'object'
68
- end
79
+ return type.respond_to?(:schema) ? type.schema : 'object' unless builder
80
+
81
+ args = builder.collection_type? ? [name, type, constraints] : [name, constraints]
82
+ builder.new(*args).build
69
83
  end
70
84
 
85
+ # Converts the object to a JSON representation.
86
+ #
87
+ # @param _args [Array] Optional arguments
88
+ # @return [Hash] The JSON representation of the object
71
89
  def as_json(*_args)
72
90
  build.as_json
73
91
  end
74
92
 
93
+ # Returns the builder associated with the property type.
94
+ #
95
+ # The builder is responsible for constructing the property based on its type.
96
+ # It looks up the builder based on the type's class name or name.
97
+ #
98
+ # @return [Builder] The builder associated with the property type.
75
99
  def builder
76
100
  TYPE_TO_BUILDER[type.class.name.to_s] || TYPE_TO_BUILDER[type.name.to_s]
77
101
  end
@@ -2,7 +2,13 @@
2
2
 
3
3
  module EasyTalk
4
4
  module Tools
5
+ # FunctionBuilder is a module that builds a hash with the function type and function details.
6
+ # The return value is typically passed as argument to LLM function calling APIs.
5
7
  module FunctionBuilder
8
+ # Creates a new function object based on the given model.
9
+ #
10
+ # @param [Model] model The EasyTalk model containing the function details.
11
+ # @return [Hash] The function object.
6
12
  def self.new(model)
7
13
  {
8
14
  type: 'function',
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module EasyTalk
4
- VERSION = '0.1.7'
4
+ VERSION = '0.1.8'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: easy_talk
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.7
4
+ version: 0.1.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sergio Bayona
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-04-16 00:00:00.000000000 Z
11
+ date: 2024-04-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -58,14 +58,14 @@ dependencies:
58
58
  requirements:
59
59
  - - ">="
60
60
  - !ruby/object:Gem::Version
61
- version: 3.10.1
61
+ version: '3.10'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - ">="
67
67
  - !ruby/object:Gem::Version
68
- version: 3.10.1
68
+ version: '3.10'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rake
71
71
  requirement: !ruby/object:Gem::Requirement
@@ -80,6 +80,90 @@ dependencies:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
82
  version: '13.1'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rspec
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '3.0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '3.0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rspec-json_expectations
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '2.0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '2.0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: rspec-mocks
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '3.13'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '3.13'
125
+ - !ruby/object:Gem::Dependency
126
+ name: rubocop
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: '1.21'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: '1.21'
139
+ - !ruby/object:Gem::Dependency
140
+ name: rubocop-rake
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - "~>"
144
+ - !ruby/object:Gem::Version
145
+ version: '0.6'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - "~>"
151
+ - !ruby/object:Gem::Version
152
+ version: '0.6'
153
+ - !ruby/object:Gem::Dependency
154
+ name: rubocop-rspec
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - "~>"
158
+ - !ruby/object:Gem::Version
159
+ version: '2.29'
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - "~>"
165
+ - !ruby/object:Gem::Version
166
+ version: '2.29'
83
167
  description: Generate json-schema from plain Ruby classes.
84
168
  email:
85
169
  - bayona.sergio@gmail.com
@@ -93,7 +177,6 @@ files:
93
177
  - LICENSE.txt
94
178
  - README.md
95
179
  - Rakefile
96
- - easy_talk.gemspec
97
180
  - lib/easy_talk.rb
98
181
  - lib/easy_talk/builders/all_of_builder.rb
99
182
  - lib/easy_talk/builders/any_of_builder.rb
@@ -146,7 +229,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
146
229
  - !ruby/object:Gem::Version
147
230
  version: '0'
148
231
  requirements: []
149
- rubygems_version: 3.5.3
232
+ rubygems_version: 3.5.9
150
233
  signing_key:
151
234
  specification_version: 4
152
235
  summary: Generate json-schema from Ruby classes.
data/easy_talk.gemspec DELETED
@@ -1,39 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative 'lib/easy_talk/version'
4
-
5
- Gem::Specification.new do |spec|
6
- spec.name = 'easy_talk'
7
- spec.version = EasyTalk::VERSION
8
- spec.authors = ['Sergio Bayona']
9
- spec.email = ['bayona.sergio@gmail.com']
10
-
11
- spec.summary = 'Generate json-schema from Ruby classes.'
12
- spec.description = 'Generate json-schema from plain Ruby classes.'
13
- spec.homepage = 'https://github.com/sergiobayona/easy_talk'
14
- spec.license = 'MIT'
15
- spec.required_ruby_version = '>= 3.2'
16
-
17
- spec.metadata['allowed_push_host'] = 'https://rubygems.org'
18
-
19
- spec.metadata['homepage_uri'] = spec.homepage
20
- spec.metadata['source_code_uri'] = 'https://github.com/sergiobayona/easy_talk'
21
- spec.metadata['changelog_uri'] = 'https://github.com/sergiobayona/easy_talk/blob/main/CHANGELOG.md'
22
-
23
- # Specify which files should be added to the gem when it is released.
24
- # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
25
- spec.files = Dir.chdir(__dir__) do
26
- `git ls-files -z`.split("\x0").reject do |f|
27
- (File.expand_path(f) == __FILE__) ||
28
- f.start_with?(*%w[bin/ spec/ .git .github Gemfile])
29
- end
30
- end
31
-
32
- spec.require_paths = ['lib']
33
-
34
- spec.add_dependency 'activesupport', '~> 7.0'
35
- spec.add_dependency 'json-schema', '~> 4'
36
- spec.add_dependency 'sorbet-runtime', '~> 0.5'
37
- spec.add_development_dependency 'pry-byebug', '>= 3.10.1'
38
- spec.add_development_dependency 'rake', '~> 13.1'
39
- end