ask-tools 0.1.2 → 0.2.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: d96e703071657b83c628b1ee0ef7d810a41b4792e349c2b821211d0289db7888
4
- data.tar.gz: 5f2e7ef5d18005f88e31149721351a0b1f361ac54fdda073294c9d27762acdf5
3
+ metadata.gz: 7672f4d067288ae4d37530eb3884b818355d6a3aeaaefc14594224e7c4794b9d
4
+ data.tar.gz: fe3d5ba56939e98775c4e80edec495d40d14fb8bd6d71b2d594d9a3484fc0d13
5
5
  SHA512:
6
- metadata.gz: 247461f2d7527f39653bf6fcbc35026ca5bd03d4943066d881aa364cf50191845d0707ee21bc233ba620698f6ed3110535f89f28af989de354cc735907166a8f
7
- data.tar.gz: 16a50fc193ed557e585064b2804bab91481f38e57529a55f42c5b39af6698690654faa3d1084ee9bda636d623d6d7aa9e98b404de99bc36064e45a7705b2d772
6
+ metadata.gz: '08a09910d9ace8bbdb32640e3049e30bbefb8fd6a18ea4594f000441b71029815ad0bf9ef22e2ef0c9da727de29f2f1ee3d3aa99f6ac1162a6a7987270384b2e'
7
+ data.tar.gz: dc70926d230847a1a6d114986c8042cc8a91fc7f9ce448b0354d19f6d613906287ff0fd777d0dd737ade6e5fcf693376a8ab4125e6b7102c703bc681a24ede35
@@ -48,6 +48,49 @@ module Ask
48
48
  @provider_params ||= {}
49
49
  end
50
50
 
51
+ def params_schema
52
+ @params_schema ||= begin
53
+ if @params_schema_definition
54
+ deep_stringify_keys(resolve_params_schema(@params_schema_definition))
55
+ elsif @parameters && @parameters.any?
56
+ build_schema_from_params
57
+ else
58
+ nil
59
+ end
60
+ end
61
+ end
62
+
63
+ def build_schema_from_params
64
+ properties = parameters.to_h do |_name, param|
65
+ schema = { type: param.type }
66
+ schema[:description] = param.description if param.description
67
+ schema[:items] = { type: "string" } if param.type == "array"
68
+ [param.name.to_s, schema]
69
+ end
70
+ required = parameters.select { |_, p| p.required }.keys.map(&:to_s)
71
+ { type: "object", properties: properties, required: required, additionalProperties: false }
72
+ end
73
+
74
+ def resolve_params_schema(definition)
75
+ case definition
76
+ when Proc
77
+ schema_class = Ask::Schema.create(&definition)
78
+ schema_class.new.to_json_schema.dig(:schema)
79
+ when Hash then definition
80
+ when ->(d) { d.respond_to?(:to_json_schema) }
81
+ definition.to_json_schema.dig(:schema)
82
+ else nil
83
+ end
84
+ end
85
+
86
+ def deep_stringify_keys(obj)
87
+ case obj
88
+ when Hash then obj.each_with_object({}) { |(k, v), h| h[k.to_s] = deep_stringify_keys(v) }
89
+ when Array then obj.map { |v| deep_stringify_keys(v) }
90
+ else obj
91
+ end
92
+ end
93
+
51
94
  private
52
95
 
53
96
  def validate_param_type!(type, name)
@@ -89,10 +132,11 @@ module Ask
89
132
  self.class.parameters
90
133
  end
91
134
 
92
- def call(args = {})
135
+ def call(args = {}, abort_controller = nil)
93
136
  normalized = normalize_args(args)
94
137
  validation = validate(normalized)
95
138
  return Ask::Result.failure(validation) if validation
139
+ normalized[:_abort_controller] = abort_controller if abort_controller
96
140
  execute(**normalized)
97
141
  rescue Halt => e
98
142
  Ask::Result.ok(data: e.content, metadata: { halted: true })
@@ -100,7 +144,7 @@ module Ask
100
144
  Ask::Result.failure("#{self.class.name.split('::').last} raised #{e.class}: #{e.message}")
101
145
  end
102
146
 
103
- def execute(**)
147
+ def execute(**args)
104
148
  raise NotImplementedError, "#{self.class} must implement #execute(**args)"
105
149
  end
106
150
 
data/lib/ask/version.rb CHANGED
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Ask
4
4
  module Tools
5
- VERSION = "0.1.2"
5
+ VERSION = "0.2.0"
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ask-tools
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kaka Ruto