diff --git a/.gitignore b/.gitignore index f94fb5d..ebb1638 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,4 @@ /volumes .env +.idea \ No newline at end of file diff --git a/lib/milvus.rb b/lib/milvus.rb index fd8d551..34d4c4c 100644 --- a/lib/milvus.rb +++ b/lib/milvus.rb @@ -11,4 +11,5 @@ module Milvus autoload :Entities, "milvus/entities" autoload :Indexes, "milvus/indexes" autoload :Partitions, "milvus/partitions" -end + autoload :Roles, "milvus/roles" +end \ No newline at end of file diff --git a/lib/milvus/client.rb b/lib/milvus/client.rb index 57ecf1a..8a677b0 100644 --- a/lib/milvus/client.rb +++ b/lib/milvus/client.rb @@ -29,6 +29,10 @@ def indexes @indexes ||= Milvus::Indexes.new(client: self) end + def roles + @roles ||= Milvus::Roles.new(client: self) + end + def connection @connection ||= Faraday.new(url: "#{url}/#{API_VERSION}/") do |faraday| if api_key diff --git a/lib/milvus/roles.rb b/lib/milvus/roles.rb new file mode 100644 index 0000000..86e7f78 --- /dev/null +++ b/lib/milvus/roles.rb @@ -0,0 +1,25 @@ +# frozen_string_literal: true + +module Milvus + class Roles < Base + PATH = "roles" + + def list + response = client.connection.post("#{PATH}/list") do |req| + req.body = {} + end + + response.body + end + + def describe(role_name:) + response = client.connection.post("#{PATH}/describe") do |req| + req.body = { + roleName: role_name + } + end + + response.body + end + end +end \ No newline at end of file diff --git a/spec/fixtures/roles/list.json b/spec/fixtures/roles/list.json new file mode 100644 index 0000000..c088b45 --- /dev/null +++ b/spec/fixtures/roles/list.json @@ -0,0 +1 @@ +{"code": 0, "data": ["admin", "public"]} \ No newline at end of file diff --git a/spec/fixtures/users/list.json b/spec/fixtures/users/list.json new file mode 100644 index 0000000..f6b6669 --- /dev/null +++ b/spec/fixtures/users/list.json @@ -0,0 +1 @@ +{ "code": 0, "data": ["root"] } \ No newline at end of file diff --git a/spec/milvus/roles_spec.rb b/spec/milvus/roles_spec.rb new file mode 100644 index 0000000..5d34663 --- /dev/null +++ b/spec/milvus/roles_spec.rb @@ -0,0 +1,40 @@ +# spec/milvus/users_spec.rb + +require "spec_helper" +require "faraday" + +RSpec.describe Milvus::Roles do + let(:connection) { instance_double("Faraday::Connection") } + let(:client) { instance_double("Client", connection: connection) } + let(:roles) { described_class.new(client: client) } + + describe "#list" do + let(:response_body) { File.read("spec/fixtures/roles/list.json") } + let(:response) { instance_double("Faraday::Response", body: response_body) } + + it 'lists users' do + expect(connection).to receive(:post) + .with("roles/list") + .and_yield(Faraday::Request.new) + .and_return(response) + result = roles.list + + expect(result).to eq(response_body) + end + end + + describe "#describe" do + let(:response_body) { File.read("spec/fixtures/roles/describe.json") } + let(:response) { instance_double("Faraday::Response", body: response_body) } + + it 'describes the role' do + expect(connection).to receive(:post) + .with("roles/describe") + .and_yield(Faraday::Request.new) + .and_return(response) + result = roles.describe(role_name: 'public') + + expect(result).to eq(response_body) + end + end +end \ No newline at end of file