tinybird 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/tinybird/callable.rb +19 -0
- data/lib/tinybird/configuration.rb +26 -0
- data/lib/tinybird/event/create.rb +27 -0
- data/lib/tinybird/event.rb +15 -0
- data/lib/tinybird/http_client.rb +35 -0
- data/lib/tinybird/query/get.rb +41 -0
- data/lib/tinybird/query.rb +15 -0
- data/lib/tinybird/requestable.rb +61 -0
- data/lib/tinybird/response.rb +22 -0
- data/lib/tinybird/version.rb +1 -1
- data/lib/tinybird.rb +16 -1
- metadata +11 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: '08ce180c2ced2aeb456764d97c50976aa56d5e534e9499fd3aba3b06937373f2'
|
4
|
+
data.tar.gz: 72bd467c7d10f9f2bf6d6aeacf52e27603a9c9a4b465274e4e5b0d982df29668
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e82be52459f3d7ff31e368f5cff3a0cf311850428271b921bc57584e640208fccfc65728b578ee9fd3edc181fcab7a2e4c764f5e722906a407ef9b81bd7941f8
|
7
|
+
data.tar.gz: 3c9e5bfdb537b5588af1ac8c08e907fcfef941b9564f4a0b8ed522ea65fdd5faaf4c9939f3bc6c117ec30ed2a8aebed18ceba64efe4adf9c3c2a15a89ca266fd
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Tinybird
|
4
|
+
module Callable
|
5
|
+
def self.included(base)
|
6
|
+
base.extend(ClassMethods)
|
7
|
+
end
|
8
|
+
|
9
|
+
module ClassMethods
|
10
|
+
def call(*args, **)
|
11
|
+
if args.empty?
|
12
|
+
new(**).call
|
13
|
+
else
|
14
|
+
new(*args, **).call
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# lib/tinybird/configuration.rb
|
2
|
+
|
3
|
+
module Tinybird
|
4
|
+
class Configuration
|
5
|
+
attr_accessor :auth_token, :base_url
|
6
|
+
|
7
|
+
def initialize
|
8
|
+
@auth_token = ENV.fetch("TINYBIRD_AUTH_TOKEN", nil)
|
9
|
+
@base_url = ENV.fetch("TINYBIRD_BASE_URL", "https://api.tinybird.co/v0")
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
class << self
|
14
|
+
attr_writer :configuration
|
15
|
+
|
16
|
+
def configuration
|
17
|
+
@configuration ||= Configuration.new
|
18
|
+
end
|
19
|
+
|
20
|
+
alias_method :config, :configuration
|
21
|
+
|
22
|
+
def configure
|
23
|
+
yield configuration
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# lib/tinybird/event/create.rb
|
2
|
+
|
3
|
+
module Tinybird
|
4
|
+
module Event
|
5
|
+
class Create
|
6
|
+
include Tinybird::Callable
|
7
|
+
include Tinybird::Requestable
|
8
|
+
|
9
|
+
requestable method: :post
|
10
|
+
|
11
|
+
attr_reader :body, :event_name, :wait, :headers
|
12
|
+
|
13
|
+
def initialize(body, event_name:, wait: false, headers: {})
|
14
|
+
@body = body
|
15
|
+
@event_name = event_name
|
16
|
+
@wait = wait
|
17
|
+
@headers = headers
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def path_segment
|
23
|
+
"v0/events?name=#{event_name}&wait=#{wait}"
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "tinybird/event/create"
|
4
|
+
|
5
|
+
module Tinybird
|
6
|
+
module Event
|
7
|
+
class << self
|
8
|
+
def create(body, event_name:, wait: false, headers: {})
|
9
|
+
Create.call(body, event_name: event_name, wait: wait, headers: headers)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
private_constant :Create
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Tinybird
|
4
|
+
class HttpClient
|
5
|
+
attr_reader :uri
|
6
|
+
|
7
|
+
def initialize(uri)
|
8
|
+
@uri = uri
|
9
|
+
end
|
10
|
+
|
11
|
+
def get(headers = {})
|
12
|
+
request = Net::HTTP::Get.new(uri, headers)
|
13
|
+
make_request(request)
|
14
|
+
end
|
15
|
+
|
16
|
+
def post(body, headers = {})
|
17
|
+
request = Net::HTTP::Post.new(uri, headers)
|
18
|
+
request.body = body.to_json
|
19
|
+
make_request(request)
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def make_request(request)
|
25
|
+
request["Authorization"] = "Bearer #{Tinybird.config.auth_token}"
|
26
|
+
request["User-Agent"] = "tinybird-ruby/#{Tinybird::VERSION}"
|
27
|
+
|
28
|
+
Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == "https") do |http|
|
29
|
+
http.request(request).then do |response|
|
30
|
+
Response.new(response)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Tinybird
|
4
|
+
module Query
|
5
|
+
class Get
|
6
|
+
include Tinybird::Callable
|
7
|
+
include Tinybird::Requestable
|
8
|
+
|
9
|
+
requestable method: :get
|
10
|
+
|
11
|
+
ALLOWED_FORMATS = %w[CSV CSVWithoutHeader CSVWithNames JSON TSV TSVWithoutHeader TSVWithNames PrettyCompact JSONEachRow Parquet].freeze
|
12
|
+
|
13
|
+
attr_reader :sql, :format, :headers
|
14
|
+
|
15
|
+
def initialize(sql: "", format: "JSON", headers: {})
|
16
|
+
@sql = sql
|
17
|
+
@format = format
|
18
|
+
@headers = headers
|
19
|
+
validate_format!
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def path_segment
|
25
|
+
"v0/sql?q=#{formatted_sql}"
|
26
|
+
end
|
27
|
+
|
28
|
+
def body
|
29
|
+
nil
|
30
|
+
end
|
31
|
+
|
32
|
+
def formatted_sql
|
33
|
+
"#{sql} FORMAT #{format}"
|
34
|
+
end
|
35
|
+
|
36
|
+
def validate_format!
|
37
|
+
raise InvalidFormatError, "Invalid format: #{format}. Supported formats are: #{ALLOWED_FORMATS.join(", ")}" unless ALLOWED_FORMATS.include?(format)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "tinybird/query/get"
|
4
|
+
|
5
|
+
module Tinybird
|
6
|
+
module Query
|
7
|
+
class << self
|
8
|
+
def get(sql: "", format: "JSON", headers: {})
|
9
|
+
Get.call(sql: sql, format: format, headers: headers)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
private_constant :Get
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Tinybird
|
4
|
+
module Requestable
|
5
|
+
def self.included(base)
|
6
|
+
base.extend(ClassMethods)
|
7
|
+
end
|
8
|
+
|
9
|
+
module ClassMethods
|
10
|
+
DEFAULT_REQUEST_METHODS = %i[get post delete].freeze
|
11
|
+
|
12
|
+
private
|
13
|
+
|
14
|
+
def requestable(**options)
|
15
|
+
method = options.fetch(:method, DEFAULT_REQUEST_METHODS)
|
16
|
+
define_http_method(method)
|
17
|
+
end
|
18
|
+
|
19
|
+
def define_http_method(method)
|
20
|
+
define_method(:http_method) do
|
21
|
+
method
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def call(**args)
|
27
|
+
uri = URI(endpoint)
|
28
|
+
client = Tinybird::HttpClient.new(uri)
|
29
|
+
if http_method == :get
|
30
|
+
client.send(http_method, headers)
|
31
|
+
else
|
32
|
+
client.send(http_method, body, headers)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
private
|
37
|
+
|
38
|
+
def base_url
|
39
|
+
Tinybird.config.base_url.sub(/\/$/, "")
|
40
|
+
end
|
41
|
+
|
42
|
+
def endpoint
|
43
|
+
[
|
44
|
+
base_url,
|
45
|
+
path_segment
|
46
|
+
].join("/")
|
47
|
+
end
|
48
|
+
|
49
|
+
def path_segment
|
50
|
+
raise NotImplementedError, "#{self.class} must implement #path_segment"
|
51
|
+
end
|
52
|
+
|
53
|
+
def body
|
54
|
+
raise NotImplementedError, "#{self.class} must implement #body"
|
55
|
+
end
|
56
|
+
|
57
|
+
def headers
|
58
|
+
raise NotImplementedError, "#{self.class} must implement #headers"
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Tinybird
|
4
|
+
class Response
|
5
|
+
attr_reader :status, :headers, :body, :message
|
6
|
+
|
7
|
+
def initialize(response)
|
8
|
+
@status = response.code.to_i
|
9
|
+
@headers = response.to_hash
|
10
|
+
@message = response.message
|
11
|
+
@body = begin
|
12
|
+
JSON.parse(response.body)
|
13
|
+
rescue JSON::ParserError
|
14
|
+
response.body
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def inspect
|
19
|
+
"#<#{self.class}:0x#{object_id.to_s(16)} #{status} #{message} readbody=true>"
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
data/lib/tinybird/version.rb
CHANGED
data/lib/tinybird.rb
CHANGED
@@ -1,7 +1,22 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
3
|
+
require "json"
|
4
|
+
require "net/http"
|
5
|
+
require "uri"
|
6
|
+
|
7
|
+
require "tinybird/version"
|
8
|
+
require "tinybird/configuration"
|
9
|
+
require "tinybird/http_client"
|
10
|
+
require "tinybird/response"
|
11
|
+
|
12
|
+
require "tinybird/callable"
|
13
|
+
require "tinybird/requestable"
|
14
|
+
|
15
|
+
require "tinybird/query"
|
16
|
+
require "tinybird/event"
|
4
17
|
|
5
18
|
module Tinybird
|
6
19
|
class Error < StandardError; end
|
20
|
+
|
21
|
+
class InvalidFormatError < Error; end
|
7
22
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tinybird
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Drew Monroe
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-08-
|
11
|
+
date: 2024-08-06 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: A Ruby client for the Tinybird API
|
14
14
|
email:
|
@@ -32,6 +32,15 @@ files:
|
|
32
32
|
- bin/standardrb
|
33
33
|
- docker-compose.yml
|
34
34
|
- lib/tinybird.rb
|
35
|
+
- lib/tinybird/callable.rb
|
36
|
+
- lib/tinybird/configuration.rb
|
37
|
+
- lib/tinybird/event.rb
|
38
|
+
- lib/tinybird/event/create.rb
|
39
|
+
- lib/tinybird/http_client.rb
|
40
|
+
- lib/tinybird/query.rb
|
41
|
+
- lib/tinybird/query/get.rb
|
42
|
+
- lib/tinybird/requestable.rb
|
43
|
+
- lib/tinybird/response.rb
|
35
44
|
- lib/tinybird/version.rb
|
36
45
|
- tinybird.gemspec
|
37
46
|
homepage: https://github.com/dvmonroe/tinybird-ruby
|