burg 0.1.0 → 0.2.0

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: adcdef656fd51e5166d911ffc1a567f1f23cdfc89ad29f37542beef48ab54310
4
- data.tar.gz: 8de348b359d22b2cc1aa4965a3bb386bc8d172bd70dbb639d14c96cc4667aeec
3
+ metadata.gz: 912b97a94d6115e8ce81684885bb9ca0654453cff84c4f1b84f9b4dce92ca678
4
+ data.tar.gz: b095a0f6be28d357bbacc2fe12434b346e521f9008a257ff8459767860206611
5
5
  SHA512:
6
- metadata.gz: 3f7a1539f9af351a6a2cfd1b276c5b76df29445c026d648bb1a0e9896b150fe732812239b4d603743bddce6ace6b5671c1956dd12aa1a5af9d88e0ab80b59615
7
- data.tar.gz: 86876b9f240a952da6544e653986e68d12f84d88bf4da1f43ead4f64ba0c29cae89183df867997de142b4660d13d494cfe459b189e1c88b2c9d4176651ab2dda
6
+ metadata.gz: 21fc8f8cea1caf480c62fd82689b29b564a5518a5d69f7e8fac61d8154d8926b5f29e9dab12465460b3b9ec1ddcbf5e3798d510af79b16214ba6547a543ee502
7
+ data.tar.gz: d30fe131fc41ef0fc30dd981b09b8a6af211b7a1256197e4752da278284b3754aeb531f038583a4abfbde41c00d7bd686e8fa718445bc3a74dbfc397ae4d83eb
@@ -0,0 +1,52 @@
1
+ require "concurrent/atomic/read_write_lock"
2
+
3
+ module Burg
4
+ class AppLoader
5
+ def initialize(path:, enable_reloading:)
6
+ @loader = Zeitwerk::Loader.new
7
+
8
+ @loader.push_dir path
9
+ @loader.enable_reloading if enable_reloading
10
+ @loader.inflector.inflect(**inflections)
11
+ @loader.setup
12
+
13
+ @reload_lock = Concurrent::ReadWriteLock.new
14
+
15
+ if @loader.reloading_enabled?
16
+ @start_loading = Once.new do
17
+ Listen.to(*@loader.dirs) do
18
+ @dirty = true
19
+ end.start
20
+ end
21
+ else
22
+ @loader.eager_load
23
+ end
24
+ end
25
+
26
+ attr_reader :reload_lock
27
+
28
+ def reload!
29
+ @start_loading&.call
30
+
31
+ return unless @dirty
32
+
33
+ reload_lock.with_write_lock do
34
+ @dirty = false
35
+ @loader.reload
36
+ end
37
+ end
38
+
39
+ def reloading_enabled?
40
+ @loader.reloading_enabled?
41
+ end
42
+
43
+ private
44
+
45
+ # FIXME: This needs to be made configurable.
46
+ # Note: This configures inflections for whole segments. Inflecting "xml" as
47
+ # "XML" will only change paths like "foo/xml.rb", not "foo/my_xml_parser.rb".
48
+ def inflections = {
49
+ "vii_action" => "VIIAction"
50
+ }
51
+ end
52
+ end
@@ -0,0 +1,16 @@
1
+ module Burg
2
+ class AppLoaderMiddleware
3
+ def initialize(app, loader)
4
+ @app = app
5
+ @loader = loader
6
+ end
7
+
8
+ def call(env)
9
+ @loader.reload!
10
+
11
+ @loader.reload_lock.with_read_lock {
12
+ @app.call(env)
13
+ }
14
+ end
15
+ end
16
+ end
data/lib/burg/once.rb ADDED
@@ -0,0 +1,18 @@
1
+ module Burg
2
+ class Once
3
+ def initialize(&block)
4
+ @block = block
5
+ @mutex = Mutex.new
6
+ end
7
+
8
+ def call
9
+ @mutex&.synchronize do
10
+ return unless @mutex
11
+
12
+ @block.call
13
+
14
+ @mutex = nil
15
+ end
16
+ end
17
+ end
18
+ end
data/lib/burg/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Burg
4
- VERSION = "0.1.0"
4
+ VERSION = "0.2.0"
5
5
  end
data/lib/burg.rb CHANGED
@@ -1,8 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative "burg/version"
3
+ require "zeitwerk"
4
+ loader = Zeitwerk::Loader.for_gem
5
+ loader.setup
4
6
 
5
7
  module Burg
6
- class Error < StandardError; end
7
- # Your code goes here...
8
8
  end
metadata CHANGED
@@ -1,14 +1,42 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: burg
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jared Norman
8
8
  bindir: exe
9
9
  cert_chain: []
10
10
  date: 1980-01-02 00:00:00.000000000 Z
11
- dependencies: []
11
+ dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: concurrent-ruby
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - ">="
17
+ - !ruby/object:Gem::Version
18
+ version: '0'
19
+ type: :runtime
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - ">="
24
+ - !ruby/object:Gem::Version
25
+ version: '0'
26
+ - !ruby/object:Gem::Dependency
27
+ name: zeitwerk
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: '0'
12
40
  description: The worst Ruby web framework
13
41
  email:
14
42
  - hey@jardo.dev
@@ -22,6 +50,9 @@ files:
22
50
  - README.md
23
51
  - Rakefile
24
52
  - lib/burg.rb
53
+ - lib/burg/app_loader.rb
54
+ - lib/burg/app_loader_middleware.rb
55
+ - lib/burg/once.rb
25
56
  - lib/burg/version.rb
26
57
  homepage: https://github.com/jarednorman/burg
27
58
  licenses: