query_guard 0.4.0 → 0.4.1

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: c9f5db2a91b0ae200669351d71161970cbccaa4da494081abb2371ba08356868
4
- data.tar.gz: 9bf75098d98f45ad8e9669eee937cf4516fb6508d706a4dafcfcb33951b4af04
3
+ metadata.gz: 79d63cabb79b03e6cfb0aa9e287217efd8d5fb88bac144a53c32c8a1ec4d23a3
4
+ data.tar.gz: 829966b61062c1b218dda997b89b59ce68dfc50eed75818b5bda5e4298760567
5
5
  SHA512:
6
- metadata.gz: bc20bd6bce97cbe713c8cfb76622739be00c2d1e79dde3b0823c721558a15cf34ea74ee02d113db13cdf92a1619df4ab2e24b76c2a3477fe99369902a13b0b39
7
- data.tar.gz: 3fbd1f63298255c18b952b71964a7e664196e6988cf5cc3f6f22541983b2e6c7e51341d41957fb2cad72d488da0fc6d27ecdbe17940dc8f16082bbe5981e1a27
6
+ metadata.gz: fb886b1ff360e67f5cc6bf7b473b038311162299491ec3b95d9babba4002c1ab44a0defe809280ce78b59899a40a4ea69bf256c1c849214530a7b6a5a693eb4b
7
+ data.tar.gz: f16e015977e291d12a603aef909f71c74563ba8c6263b5096a4b63b2816eac44362ffa2ab479da811d0faf7951b677b95461368b5fd7b1879c5dc804639e1003
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+ require "net/http"
3
+ require "uri"
4
+ require "json"
5
+
6
+ module QueryGuard
7
+ class Client
8
+ DEFAULT_TIMEOUT = 5 # seconds
9
+
10
+ def initialize(base_url:, api_key:, project:, env:)
11
+ @base_url = base_url.sub(%r{/\z}, "")
12
+ @api_key = api_key
13
+ @project = project
14
+ @env = env
15
+ end
16
+
17
+ # Example call used by your Subscriber/Middleware
18
+ def post(path, payload)
19
+ uri = URI.parse("#{@base_url}#{path}")
20
+ req = Net::HTTP::Post.new(uri)
21
+ req["Content-Type"] = "application/json"
22
+ req["Authorization"] = "Bearer #{@api_key}" if @api_key
23
+ req.body = JSON.generate(payload.merge(project: @project, env: @env))
24
+
25
+ http = Net::HTTP.new(uri.host, uri.port)
26
+ http.use_ssl = (uri.scheme == "https")
27
+ http.open_timeout = DEFAULT_TIMEOUT
28
+ http.read_timeout = DEFAULT_TIMEOUT
29
+
30
+ res = http.request(req)
31
+ unless res.is_a?(Net::HTTPSuccess)
32
+ warn "[QueryGuard] POST #{uri} -> #{res.code} #{res.body}"
33
+ end
34
+ res
35
+ rescue => e
36
+ warn "[QueryGuard] HTTP error: #{e.class}: #{e.message}"
37
+ nil
38
+ end
39
+ end
40
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module QueryGuard
4
- VERSION = "0.4.0"
4
+ VERSION = "0.4.1"
5
5
  end
data/lib/query_guard.rb CHANGED
@@ -5,42 +5,54 @@ require "query_guard/version"
5
5
  require "query_guard/config"
6
6
  require "query_guard/subscriber"
7
7
  require "query_guard/middleware"
8
+ require "query_guard/client"
8
9
 
9
10
  module QueryGuard
10
- mattr_accessor :config, default: Config.new
11
- mattr_accessor :client
11
+ class << self
12
+ attr_accessor :client
13
+ # Keep config as a normal module ivar; no mattr_*
14
+ def config
15
+ @config ||= Config.new
16
+ end
12
17
 
13
- def self.configure
14
- yield(config)
15
- self.client = Client.new(
16
- base_url: config.base_url,
17
- api_key: config.api_key,
18
- project: config.project,
19
- env: config.env
20
- )
21
- self
22
- end
18
+ def configure
19
+ yield(config)
20
+ # Build a reusable HTTP client (whatever your Client class is)
21
+ @client = Client.new(
22
+ base_url: config.base_url,
23
+ api_key: config.api_key,
24
+ project: config.project,
25
+ env: config.env
26
+ )
27
+ self
28
+ end
29
+
30
+ def install!(app = nil)
31
+ # Ensure config exists even if user didn't call configure
32
+ config
33
+
34
+ # Install SQL subscriber once
35
+ Subscriber.install!(config)
23
36
 
24
- def self.install!(app = nil)
25
- # Install SQL subscriber once
26
- Subscriber.install!(config)
37
+ # Insert middleware
38
+ if defined?(Rails) && Rails.respond_to?(:application) && Rails.application
39
+ Rails.application.config.middleware.use(QueryGuard::Middleware, config)
40
+ elsif app
41
+ app.use(QueryGuard::Middleware, config)
42
+ end
27
43
 
28
- # Install middleware (Rails or Rack)
29
- if defined?(Rails) && Rails.respond_to?(:application) && Rails.application
30
- # Use a Railtie-less insert for safety if called early
31
- Rails.application.config.middleware.use(QueryGuard::Middleware, config)
32
- elsif app
33
- app.use(QueryGuard::Middleware, config)
44
+ self
34
45
  end
35
- self
36
46
  end
37
47
  end
38
48
 
39
49
  # Auto-install for Rails via Railtie
40
50
  if defined?(Rails::Railtie)
41
- class QueryGuard::Railtie < Rails::Railtie
42
- initializer "query_guard.install" do |app|
43
- QueryGuard.install!(app)
51
+ module QueryGuard
52
+ class Railtie < Rails::Railtie
53
+ initializer "query_guard.install" do |app|
54
+ QueryGuard.install!(app)
55
+ end
44
56
  end
45
57
  end
46
58
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: query_guard
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chitradevi36
@@ -59,6 +59,7 @@ files:
59
59
  - Rakefile
60
60
  - config/initializers/query_guard.rb
61
61
  - lib/query_guard.rb
62
+ - lib/query_guard/client.rb
62
63
  - lib/query_guard/config.rb
63
64
  - lib/query_guard/middleware.rb
64
65
  - lib/query_guard/subscriber.rb