hanami-api 0.1.2 → 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 +4 -4
- data/.github/workflows/ci.yml +1 -0
- data/CHANGELOG.md +5 -0
- data/README.md +1 -0
- data/lib/hanami/api.rb +3 -32
- data/lib/hanami/api/dsl.rb +123 -0
- data/lib/hanami/api/version.rb +1 -1
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f2c7e4f7ca1d651ea24fdefb1455358b4c52682c0d1de57658ff7a8fe6253ec4
|
4
|
+
data.tar.gz: d900b1c2455f57e16a5f0f2044fcecd1c79f76bec3fc42fbfea13942bfa75dc5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c919a7b1a5f354e99aa2a34cc0189abed167e6bac9b7ba5c96da0329473b08fbfa8e0ac31913462443d874dcd99cad99db6fddf1fb9acd16254964851c0b065f
|
7
|
+
data.tar.gz: 160ecda952bb09ccf58f7d205f5626c80811ec3bad13e092d60d9fae64c71983b3b2121bf3c2f52eadb558d19b691269fad0e00b0cd80229e7c83128998033f1
|
data/.github/workflows/ci.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,11 @@
|
|
1
1
|
# Hanami::API
|
2
2
|
Minimal, extremely fast, lightweight Ruby framework for HTTP APIs.
|
3
3
|
|
4
|
+
## v0.2.0 - 2021-01-05
|
5
|
+
### Added
|
6
|
+
- [Luca Guidi] Official support for Ruby: MRI 3.0
|
7
|
+
- [Luca Guidi] Introduce `Hanami::API::DSL` which gives the ability to other Ruby web frameworks to use the `Hanami::API` DSL
|
8
|
+
|
4
9
|
## v0.1.2 - 2020-10-21
|
5
10
|
### Fixed
|
6
11
|
- [Luca Guidi] Ensure to be able to instantiate an `Hanami::API` app multiple times
|
data/README.md
CHANGED
data/lib/hanami/api.rb
CHANGED
@@ -9,21 +9,15 @@ module Hanami
|
|
9
9
|
require "hanami/api/error"
|
10
10
|
require "hanami/api/router"
|
11
11
|
require "hanami/api/middleware"
|
12
|
+
require "hanami/api/dsl"
|
12
13
|
|
13
14
|
# @since 0.1.0
|
14
15
|
# @api private
|
15
16
|
def self.inherited(app)
|
16
17
|
super
|
17
18
|
|
18
|
-
app.
|
19
|
-
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
class << self
|
24
|
-
# @since 0.1.1
|
25
|
-
# @api private
|
26
|
-
attr_reader :router
|
19
|
+
app.extend(DSL::ClassMethods)
|
20
|
+
app.include(DSL::InstanceMethods)
|
27
21
|
end
|
28
22
|
|
29
23
|
# Defines a named root route (a GET route for "/")
|
@@ -292,29 +286,6 @@ module Hanami
|
|
292
286
|
@router.use(middleware, *args, &blk)
|
293
287
|
end
|
294
288
|
|
295
|
-
# @since 0.1.0
|
296
|
-
def initialize(router: self.class.router.dup)
|
297
|
-
@router = router
|
298
|
-
|
299
|
-
freeze
|
300
|
-
end
|
301
|
-
|
302
|
-
# @since 0.1.0
|
303
|
-
def freeze
|
304
|
-
@app = @router.to_rack_app
|
305
|
-
@url_helpers = @router.url_helpers
|
306
|
-
@router.remove_instance_variable(:@url_helpers)
|
307
|
-
remove_instance_variable(:@router)
|
308
|
-
@url_helpers.freeze
|
309
|
-
@app.freeze
|
310
|
-
super
|
311
|
-
end
|
312
|
-
|
313
|
-
# @since 0.1.0
|
314
|
-
def call(env)
|
315
|
-
@app.call(env)
|
316
|
-
end
|
317
|
-
|
318
289
|
# TODO: verify if needed here on in block context
|
319
290
|
#
|
320
291
|
# @since 0.1.0
|
@@ -0,0 +1,123 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Hanami
|
4
|
+
class API
|
5
|
+
# Expose Hanami::API features to third party frameworks that need to expose
|
6
|
+
# a routing DSL.
|
7
|
+
#
|
8
|
+
# @since 0.2.0
|
9
|
+
#
|
10
|
+
# @example
|
11
|
+
# # framework.rb
|
12
|
+
# require "hanami/api"
|
13
|
+
#
|
14
|
+
# module Framework
|
15
|
+
# class App
|
16
|
+
# def self.inherited(base)
|
17
|
+
# super
|
18
|
+
# base.extend(Hanami::API::DSL)
|
19
|
+
# end
|
20
|
+
# end
|
21
|
+
# end
|
22
|
+
#
|
23
|
+
# # app.rb
|
24
|
+
# require "framework/app"
|
25
|
+
#
|
26
|
+
# class MyApp < Framework::App
|
27
|
+
# routes do
|
28
|
+
# root { "Hello, World!" }
|
29
|
+
# end
|
30
|
+
# end
|
31
|
+
#
|
32
|
+
# # config.ru
|
33
|
+
# require_relative "./app"
|
34
|
+
#
|
35
|
+
# run MyApp.new
|
36
|
+
module DSL
|
37
|
+
# @since 0.2.0
|
38
|
+
# @api private
|
39
|
+
def self.extended(app)
|
40
|
+
super
|
41
|
+
|
42
|
+
app.extend(ClassMethods)
|
43
|
+
app.extend(ClassMethods::Routes)
|
44
|
+
app.include(InstanceMethods)
|
45
|
+
end
|
46
|
+
|
47
|
+
# @since 0.2.0
|
48
|
+
# @api private
|
49
|
+
module ClassMethods
|
50
|
+
# @since 0.2.0
|
51
|
+
# @api private
|
52
|
+
attr_reader :router
|
53
|
+
|
54
|
+
# @since 0.2.0
|
55
|
+
# @api private
|
56
|
+
def self.extended(app)
|
57
|
+
super
|
58
|
+
|
59
|
+
app.class_eval do
|
60
|
+
@router = Router.new
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
# @since 0.2.0
|
65
|
+
# @api private
|
66
|
+
module Routes
|
67
|
+
# A block to define application routes
|
68
|
+
#
|
69
|
+
# This is ONLY available for third-party frameworks that use
|
70
|
+
# Hanami::API DSL.
|
71
|
+
#
|
72
|
+
# If you use Hanami::API directly, this method isn't available.
|
73
|
+
#
|
74
|
+
# @param blk [Proc] the block to define the routes
|
75
|
+
#
|
76
|
+
# @see Hanami::API::Router
|
77
|
+
#
|
78
|
+
# @since 0.2.0
|
79
|
+
# @api public
|
80
|
+
def routes(&blk)
|
81
|
+
router.instance_eval(&blk)
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
module InstanceMethods
|
87
|
+
# Initialize the app
|
88
|
+
#
|
89
|
+
# @param router [Hanami::API::Router] the application router
|
90
|
+
#
|
91
|
+
# @since 0.2.0
|
92
|
+
# @api public
|
93
|
+
def initialize(router: self.class.router.dup)
|
94
|
+
@router = router
|
95
|
+
|
96
|
+
freeze
|
97
|
+
end
|
98
|
+
|
99
|
+
# @since 0.2.0
|
100
|
+
# @api private
|
101
|
+
def freeze
|
102
|
+
@app = @router.to_rack_app
|
103
|
+
@url_helpers = @router.url_helpers
|
104
|
+
@router.remove_instance_variable(:@url_helpers)
|
105
|
+
remove_instance_variable(:@router)
|
106
|
+
@url_helpers.freeze
|
107
|
+
@app.freeze
|
108
|
+
super
|
109
|
+
end
|
110
|
+
|
111
|
+
# Compatibility with Rack protocol
|
112
|
+
#
|
113
|
+
# @param env [Hash] a Rack env for the current request
|
114
|
+
#
|
115
|
+
# @since 0.2.0
|
116
|
+
# @api public
|
117
|
+
def call(env)
|
118
|
+
@app.call(env)
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|
data/lib/hanami/api/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hanami-api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Luca Guidi
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-01-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: hanami-router
|
@@ -100,6 +100,7 @@ files:
|
|
100
100
|
- hanami-api.gemspec
|
101
101
|
- lib/hanami/api.rb
|
102
102
|
- lib/hanami/api/block/context.rb
|
103
|
+
- lib/hanami/api/dsl.rb
|
103
104
|
- lib/hanami/api/error.rb
|
104
105
|
- lib/hanami/api/middleware.rb
|
105
106
|
- lib/hanami/api/middleware/app.rb
|
@@ -129,7 +130,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
129
130
|
- !ruby/object:Gem::Version
|
130
131
|
version: '0'
|
131
132
|
requirements: []
|
132
|
-
rubygems_version: 3.
|
133
|
+
rubygems_version: 3.2.4
|
133
134
|
signing_key:
|
134
135
|
specification_version: 4
|
135
136
|
summary: Hanami API
|