ruby_llm-schema 0.2.1 → 0.2.2

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: 51853d66ecd0a91e208955e1f3d1e5f4a61cecf8762e49d1b170ba74408b93b1
4
- data.tar.gz: 05176acf10b4fbf638d486ed469126f352f3dc8c82ac7e4eea83f79bfe69d1c9
3
+ metadata.gz: 21e85e6514346bb33af5e1581ded7de55c9767ebb4775f38c8db7da5d2e38273
4
+ data.tar.gz: 952b4124384522506c914e0108d6d4196be446848774fd7ab4fa82b4dcb55f12
5
5
  SHA512:
6
- metadata.gz: 83e04d000fedfc6a532c6195416249c96ea1ae6511004d29cc8eca5cb9bba73854ec563a633236d4838669fe60a1e32ab879484883926cf7e2924eb709ba9c05
7
- data.tar.gz: 2325e7f6b0b40841e65772c5ba92119ce752f33a15926b25d14348c6ceae016a59c6a4a718b4c5f79c928f145ebfcf384262ca9228878eb03db50e669abf3286
6
+ metadata.gz: e2f3224d8f1b51db4b24b600b080bd304079c2f93aa1cbb3bdb76fecdd0fcfd36811070c42473ea67eb2160330c1bd2297bf2fecd721cfad3ed06b7bf64957cf
7
+ data.tar.gz: 3bff169e66bc57bda428c4c620d33de7c75c6b6e0398a99c3a5fc146d7429dc48619a09cd175c5b667ef8567001b701058c31bf33d4fa6f8d14ec2e02d5b33fa
data/README.md CHANGED
@@ -311,6 +311,77 @@ class CompanySchema < RubyLLM::Schema
311
311
  PersonSchema.new
312
312
  end
313
313
  end
314
+
315
+ schema = CompanySchema.new
316
+ schema.to_json_schema
317
+ # =>
318
+ # {
319
+ # "name":"CompanySchema",
320
+ # "description":"nil",
321
+ # "schema":{
322
+ # "type":"object",
323
+ # "properties":{
324
+ # "ceo":{
325
+ # "type":"object",
326
+ # "properties":{
327
+ # "name":{
328
+ # "type":"string"
329
+ # },
330
+ # "age":{
331
+ # "type":"integer"
332
+ # }
333
+ # },
334
+ # "required":[
335
+ # :"name",
336
+ # :"age"
337
+ # ],
338
+ # "additionalProperties":false
339
+ # },
340
+ # "employees":{
341
+ # "type":"array",
342
+ # "items":{
343
+ # "type":"object",
344
+ # "properties":{
345
+ # "name":{
346
+ # "type":"string"
347
+ # },
348
+ # "age":{
349
+ # "type":"integer"
350
+ # }
351
+ # },
352
+ # "required":[
353
+ # :"name",
354
+ # :"age"
355
+ # ],
356
+ # "additionalProperties":false
357
+ # }
358
+ # },
359
+ # "founder":{
360
+ # "type":"object",
361
+ # "properties":{
362
+ # "name":{
363
+ # "type":"string"
364
+ # },
365
+ # "age":{
366
+ # "type":"integer"
367
+ # }
368
+ # },
369
+ # "required":[
370
+ # :"name",
371
+ # :"age"
372
+ # ],
373
+ # "additionalProperties":false
374
+ # }
375
+ # },
376
+ # "required":[
377
+ # :"ceo",
378
+ # :"employees",
379
+ # :"founder"
380
+ # ],
381
+ # "additionalProperties":false,
382
+ # "strict":true
383
+ # }
384
+ # }
314
385
  ```
315
386
 
316
387
  ## JSON Output
@@ -16,6 +16,10 @@ module RubyLLM
16
16
  add_property(name, any_of_schema(description: description, **options, &block), required: required)
17
17
  end
18
18
 
19
+ def one_of(name, description: nil, required: true, **options, &block)
20
+ add_property(name, one_of_schema(description: description, **options, &block), required: required)
21
+ end
22
+
19
23
  def optional(name, description: nil, &block)
20
24
  any_of(name, description: description) do
21
25
  instance_eval(&block)
@@ -96,6 +96,15 @@ module RubyLLM
96
96
  }.compact
97
97
  end
98
98
 
99
+ def one_of_schema(description: nil, &block)
100
+ schemas = collect_schemas_from_block(&block)
101
+
102
+ {
103
+ description: description,
104
+ oneOf: schemas
105
+ }.compact
106
+ end
107
+
99
108
  private
100
109
 
101
110
  def determine_array_items(of, &)
@@ -2,6 +2,6 @@
2
2
 
3
3
  module RubyLlm
4
4
  class Schema
5
- VERSION = "0.2.1"
5
+ VERSION = "0.2.2"
6
6
  end
7
7
  end
@@ -84,7 +84,7 @@ module RubyLLM
84
84
  end
85
85
 
86
86
  def respond_to_missing?(method_name, include_private = false)
87
- %i[string number integer boolean array object any_of null].include?(method_name) || super
87
+ %i[string number integer boolean array object any_of one_of null].include?(method_name) || super
88
88
  end
89
89
  end
90
90
  end
@@ -1,27 +1,33 @@
1
1
  namespace :release do
2
- desc "Release a new version of the gem"
3
- task :version, [:message] do |t, args|
4
- # Load the current version from version.rb
5
- require_relative "../../lib/ruby_llm/schema/version"
6
- version = RubyLlm::Schema::VERSION
7
-
8
- puts "Releasing version #{version}..."
9
-
10
- # Create git tag with optional message
11
- # rake release:version["Fix critical bug in schema validation"]
12
- if args[:message]
13
- system "git tag -a v#{version} -m \"#{args[:message]}\""
14
- puts "Created annotated tag v#{version} with message: #{args[:message]}"
15
- else
16
- system "git tag v#{version}"
17
- puts "Created lightweight tag v#{version}"
2
+ desc "Prepare and push the release branch to trigger the automated pipeline"
3
+ task :prepare do
4
+ abort "Git working directory not clean. Commit or stash changes first." unless `git status --porcelain`.strip.empty?
5
+ abort "Not on main branch. Releases must be run from main branch" unless `git rev-parse --abbrev-ref HEAD`.strip == "main"
6
+
7
+ require_relative "../ruby_llm/schema/version"
8
+ version = RubyLlm::Schema::VERSION or abort "Could not determine version"
9
+
10
+ branch = "release/#{version}"
11
+
12
+ if system("git rev-parse --quiet --verify refs/tags/v#{version} > /dev/null 2>&1")
13
+ abort "Tag v#{version} already exists. Bump the version first."
14
+ end
15
+
16
+ if system("git show-ref --verify --quiet refs/heads/#{branch}")
17
+ abort "Local branch #{branch} already exists. Remove it or choose a new version."
18
+ end
19
+
20
+ sh "git fetch origin"
21
+
22
+ if system("git ls-remote --exit-code --heads origin #{branch} > /dev/null 2>&1")
23
+ abort "Release branch #{branch} already exists on origin. Remove it or choose a new version."
18
24
  end
19
25
 
20
- system "git push origin main"
21
- system "git push origin v#{version}"
26
+ sh "git checkout -b #{branch}"
27
+ sh "git push -u origin #{branch}"
22
28
 
23
- system "gem build ruby_llm-schema.gemspec"
24
- system "gem push ruby_llm-schema-#{version}.gem"
25
- system "rm ruby_llm-schema-#{version}.gem"
29
+ puts "Release branch #{branch} pushed. GitHub Actions will run tests and publish if they pass."
30
+ ensure
31
+ system "git checkout main"
26
32
  end
27
33
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby_llm-schema
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel Friis
8
8
  bindir: exe
9
9
  cert_chain: []
10
- date: 2025-08-26 00:00:00.000000000 Z
10
+ date: 2025-11-11 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
13
  name: rspec