xrpc 0.1.5 → 0.1.6

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: 888100afa57e9d231ced56deeb8c2081106e80010a39222471b96f52f4a4ec0e
4
- data.tar.gz: e67558c7515a072013cb7cec64348c15e5a0a50c0a63704a653a4ba3102b7e16
3
+ metadata.gz: 0f3d51cb6ae781b3eb9c5d63e2169cb50190953addaa2c893818b6e3da7e6e4b
4
+ data.tar.gz: dd43f705448252a67bca0b722dc7feb8042722d76d55d8b9e79d21994a15affb
5
5
  SHA512:
6
- metadata.gz: afedadd059ba04cd2089b45493f9e452a7f5cf415273a53581af91349d6b6fa5a025ec91ed905e6cb3dc42fe73a9f04b2d4dd6454bdec1444fb2ecb01c59b94f
7
- data.tar.gz: 5aa3f9656bad8a5512c50dd7e2aab8b529912d4877cf032bf287176640b8d79c87f72dad615221a49c666831e45aae004e5e6ad8874a9a22ea83ab959351c529
6
+ metadata.gz: e1622cf6190d363d507d1db065d00e8db8acbb744ed049c85de0fc71b206d3ae693ea79dd9a66d3f9be14f488821fedc1b70a6d6c6c8adbdda7bfaef9cf7c3f4
7
+ data.tar.gz: eb7834ed2d23dbb57ca42686603ba8cdae429a7070923f44d0db5efb3e5fce8d08f2cee1c5f6f843d468c719315e23d3fcec69e6d362fae91ceaa7e92efa70f0
@@ -0,0 +1,60 @@
1
+ module XRPC
2
+ def self.xrpc_proc(lexicon, type, args_list, server = "https://bsky.social")
3
+ case type
4
+ when :query
5
+ return XRPC::Query.new(lexicon, args_list, server)
6
+ when :procedure
7
+ return XRPC::Procedure.new(lexicon, args_list, server)
8
+ else
9
+ raise ArgumentError, "Invalid type: #{type}. Expected :query or :procedure."
10
+ end
11
+ end
12
+
13
+ def self.xrpc_object_from_json(json_hash)
14
+ json_hash[:id] ? lexicon = json_hash[:id] : lexicon = json_hash["id"]
15
+ json_hash[:defs] ? defs = json_hash[:defs] : defs = json_hash["defs"]
16
+ defs[:main] ? main_def = defs[:main] : main_def = defs["main"]
17
+ main_def[:type] ? type = main_def[:type].to_sym : type = main_def["type"].to_sym
18
+ main_def[:parameters] ? args_list = main_def[:parameters][:required] : args_list = main_def["parameters"]["required"]
19
+ xrpc_proc(lexicon, type, args_list)
20
+ end
21
+ end
22
+
23
+ module XRPC
24
+ class BaseLexicon
25
+ attr_accessor :lexicon, :args_list, :server, :headers
26
+
27
+ def initialize(lexicon, args_list, server, headers: { "Content-Type" => "application/json" })
28
+ @lexicon = lexicon
29
+ @args_list = args_list
30
+ @server = server
31
+ @headers = headers
32
+ end
33
+
34
+ def call(*args, **kwargs)
35
+ make_request(Hash[args_list.zip(args)].merge kwargs)
36
+ end
37
+
38
+ def make_request(payload)
39
+ raise NotImplementedError, "Subclasses must implement the .make_request method."
40
+ end
41
+
42
+ private
43
+
44
+ def base_url
45
+ "#{server}/xrpc/#{lexicon}"
46
+ end
47
+ end
48
+
49
+ class Query < BaseLexicon
50
+ def make_request(payload)
51
+ HTTParty.get(base_url, query: payload, headers: headers).parsed_response
52
+ end
53
+ end
54
+
55
+ class Procedure < BaseLexicon
56
+ def make_request(payload)
57
+ HTTParty.post(base_url, body: payload, headers: headers).parsed_response
58
+ end
59
+ end
60
+ end
data/lib/xrpc/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module XRPC
4
- VERSION = "0.1.5"
4
+ VERSION = "0.1.6"
5
5
  end
data/lib/xrpc.rb CHANGED
@@ -1 +1,2 @@
1
1
  require "xrpc/client"
2
+ require "xrpc/lexicon"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: xrpc
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.5
4
+ version: 0.1.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Shreyan Jain
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-07-10 00:00:00.000000000 Z
11
+ date: 2023-07-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: json
@@ -61,6 +61,7 @@ extra_rdoc_files: []
61
61
  files:
62
62
  - "./lib/xrpc.rb"
63
63
  - "./lib/xrpc/client.rb"
64
+ - "./lib/xrpc/lexicon.rb"
64
65
  - "./lib/xrpc/server.rb"
65
66
  - "./lib/xrpc/version.rb"
66
67
  homepage: https://github.com/ShreyanJain9/xrpc