microsoft / microsoft/kiota-ruby

generation - Ruby request builders for collections deserializing return value as a single item

Open
#67 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

help wanted ruby type:bug
Dominant language
Ruby
Stars
5
Forks
8
Avg merge
11h 9m
Merged PRs (30d)
24

Description

OpenAPI doc: https://github.com/microsoft/kiota-samples/blob/main/get-started/quickstart/posts-api.yml

Kiota command (with 1.0.1):

kiota generate -l ruby -c PostsClient -n Client -d ../posts-api.yml -o ./client --co

Using the following code:

# frozen_string_literal: true
require 'microsoft_kiota_abstractions'
require 'microsoft_kiota_faraday'
require_relative './client/posts_client'

auth_provider = MicrosoftKiotaAbstractions::AnonymousAuthenticationProvider.new()
request_adapter = MicrosoftKiotaFaraday::FaradayRequestAdapter.new(auth_provider)
client = Client::PostsClient.new(request_adapter)

# GET /posts
all_posts = client.posts.get.resume
puts all_posts.inspect

All of the data is in the additional_data field.

#<Client::Models::Post:0x00007fe44b39f350 @additional_data={{"userId"=>1, "id"=>1, "title"=>"sunt aut facere repellat provident occaecati excepturi optio reprehenderit", "body"=>"quia et suscipit\nsuscipit recusandae consequuntur expedita et cum\nreprehenderit molestiae ut ut quas totam\nnostrum rerum est autem sunt rem eveniet architecto"}=>nil, {"userId"=>1, "id"=>2, "title"=>"qui est esse", "body"=>"est rerum tempore vitae\nsequi sint nihil reprehenderit dolor beatae ea dolores neque\nfugiat blanditiis voluptate porro vel nihil molestiae ut reiciendis\nqui aperiam non debitis possimus qui neque nisi nulla"}=>nil, {"userId"=>1, "id"=>3, "title"=>"ea molestias quasi exercitationem repellat qui ipsa sit aut", "body"=>"et iusto sed quo iure\nvoluptatem occaecati omnis eligendi aut ad\nvoluptatem doloribus vel accusantium quis pariatur\nmolestiae porro eius odio et labore et velit aut"}=>nil, {"userId"=>1, "id"=>4, "title"=>"eum et est occaecati", "body"=>"ullam et saepe reiciendis voluptatem adipisci\nsit amet autem assumenda provident rerum culpa\nquis hic commodi nesciunt rem tenetur doloremque ipsam iure\nquis sunt voluptatem rerum illo velit"}=>nil, {"userId"=>1, "id"=>5, "title"=>"nesciunt quas odio", "body"=>"repudiandae veniam quaerat sunt sed\nalias aut fugiat sit autem sed est\nvoluptatem omnis possimus esse voluptatibus quis\nest aut tenetur dolor neque"}=>nil, {"userId"=>1, "id"=>6, "title"=>"dolorem eum magni eos aperiam quia", "body"=>"ut aspernatur corporis harum nihil quis provident sequi\nmollitia nobis aliquid molestiae\nperspiciatis et ea nemo ab reprehenderit accusantium quas\nvoluptate dolores velit et doloremque molestiae"}=>nil, {"userId"=>1, "id"=>7, "title"=>"magnam facilis autem", "body"=>"dolore placeat quibusdam ea quo vitae\nmagni quis enim qui quis quo nemo aut saepe\nquidem repellat excepturi ut quia\nsunt ut sequi eos ea sed quas"}=>nil, {"userId"=>1, "id"=>8, "title"=>"dolorem dolore est ipsam", "body"=>"dignissimos aperiam dolorem qui eum\nfacilis quibusdam animi sint suscipit qui sint possimus cum\nquaerat magni maiores excepturi\nipsam ut commodi dolor voluptatum modi aut vitae"}=>nil, {"userId"=>1, "id"=>9, "title"=>"nesciunt iure omnis dolorem tempora et accusantium", "body"=>"consectetur animi nesciunt iure dolore\nenim quia ad\nveniam autem ut quam aut nobis\net est aut quod aut provident voluptas autem voluptas"}=>nil, {"userId"=>1, "id"=>10, "title"=>"optio molestias id quia eum", "body"=>"quo et expedita modi cum officia vel magni\ndoloribus qui repudiandae\nvero nisi sit\nquos veniam quod sed accusamus veritatis error"}=>nil}>

Code for get in posts_request_builder.rb:

def get(request_configuration=nil)
    request_info = self.to_get_request_information(
        request_configuration
    )
    return @request_adapter.send_async(request_info, lambda {|pn| Client::Models::Post.create_from_discriminator_value(pn) }, nil)
end

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by reproducing the issue with the provided posts-api.yml and Kiota command, then inspect the generated get method in posts_request_builder.rb. Done means the collection response exposes populated Post fields instead of placing the collection data in a single model's additional_data field.

Written by the indexing model from the issue text.

Assessment

Tech stack
openapi, ruby
Domain
api, backend-api-design
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
38/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.