rack-app 0.22.0 → 0.23.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
  SHA1:
3
- metadata.gz: dc6e00653368212644684d6ba3c19c409eee6bad
4
- data.tar.gz: 165212d0e3eaba27ff27f0b3e2534d70864be7dc
3
+ metadata.gz: fa7ed787ed29cd062ef3cbc6f721693f4a1d70df
4
+ data.tar.gz: e79de1870917b30fe6a4f940c16775deed6a49ae
5
5
  SHA512:
6
- metadata.gz: 09b60839ee3b5a49f95c891f0b2c8a93be41503572c6943b313d42d0925e7be2a7c75625262da893c49bf2eac9707f53ad8ddae25d6c87fe0c8439fcb975c660
7
- data.tar.gz: 5e808fc8b28adde7e389fd97f219ab9fde05d0a67d44bdab870e5e5aa18093f23f85aa5e1cfb9f1c5063dad9caf161d83792220704b60a571e6ade5dcc3d1134
6
+ metadata.gz: 030aa3836cb585f3a3c0d006efdae86646efe531fa48c97418f93dae495604fd8526cf7afdeb05a8adc6dd69b9349f5e1d25a31c4265f41968c3536cda00bf63
7
+ data.tar.gz: 58fd6808e3716ae0de6d4c90edd2ac61edfa353013502499ef1027b775c5b806111f481e7d80fa37dfd23ded75ba32f8457555d74eee072ff985fc11bde9231d
data/README.md CHANGED
@@ -45,6 +45,41 @@ Or install it yourself as:
45
45
 
46
46
  Yes, in fact it's already powering heroku hosted micro-services.
47
47
 
48
+ ## Principles
49
+
50
+ * Keep It Simple
51
+ * No Code bloat
52
+ * No on run time processing, or keep at the bare minimum
53
+ * Fully BDD (Behaviour Driven Design)
54
+ * build in test module to ease the development with easy to use tests
55
+ * Easy to Learn
56
+ * rack-app use well known and easy to understand conventions, such as sinatra like DSL
57
+ * Principle Of Least Surprise
58
+ * Modular design
59
+ * Only dependency is rack, nothing more
60
+ * Open development
61
+ * Try to create Examples for every feature so even the "sketch to learn new" types can feel in comfort
62
+
63
+ ## Features
64
+
65
+ * easy to understand syntax
66
+ * module method level endpoint definition inspirited heavily by the Sinatra DSL
67
+ * unified error handling
68
+ * syntax sugar for default header definitions
69
+ * namespaces for endpoint request path declarations so it can be dry and unified
70
+ * no Class method bloat, so you can enjoy pure ruby without any surprises
71
+ * App mounting so you can crete separated controllers for different task
72
+ * Null time look up routing
73
+ * allows as many endpoint registration to you as you want, without impact on route look up speed
74
+ * only basic sets for instance method lvl for the must need tools, such as params, payload
75
+ * simple to use class level response serializer
76
+ * so you can choose what type of serialization you want without any enforced convention
77
+ * static file serving so you can mount even filesystem based endpoints too
78
+ * built in testing module so your app can easily written with BDD approach
79
+ * made with performance in mind so your app don't lose time by your framework
80
+ * per endpoint middleware definitions
81
+ * you can define middleware stack before endpoints and it will only applied to them, similar like protected method workflow
82
+
48
83
  ## Usage
49
84
 
50
85
  config.ru
@@ -180,20 +215,26 @@ end
180
215
 
181
216
  ## [Benchmarking](https://github.com/adamluzsi/rack-app.rb-benchmark)
182
217
 
183
- | name | user | system | total | real |
184
- |------------------|----------------------------|------------------------|-----------------------|------------------------|
185
- | rack | 3.150000000000001e-05 | 1.3000000000000003e-06 | 3.280000000000001e-05 | 3.602101e-05 |
186
- | rack-app | 0.0005159999999999999 | 1.4000000000000005e-05 | 0.0005300000000000001 | 0.0005141295 |
187
- | ramaze | 0.0005166999999999999 | 1.98e-05 | 0.0005365 | 0.0005347348 |
188
- | brooklyn | 0.0007564 | 3.700000000000001e-06 | 0.0007601000000000001 | 0.0007743060099999998 |
189
- | nancy | 0.000812 | 5.900000000000001e-06 | 0.0008179000000000001 | 0.0008314749300000001 |
190
- | scorched | 0.0008451000000000001 | 4.699999999999999e-06 | 0.0008498000000000001 | 0.00085131501 |
191
- | sinatra | 0.0008465000000000001 | 7.000000000000001e-06 | 0.0008535000000000001 | 0.00086448211 |
192
- | hobbit | 0.0013664 | 4.5e-06 | 0.0013709 | 0.0013804752700000004 |
193
- | grape | 0.0018807 | 2.7800000000000005e-05 | 0.0019085 | 0.0019229531400000001 |
194
- | rails | 0.0018995000000000001 | 7.06e-05 | 0.0019701 | 0.00198401458 |
195
- | camping | 0.002921 | 7.24e-05 | 0.0029934000000000002 | 0.0030896778800000003 |
196
- | cuba | 0.0034559000000000005 | 2.8600000000000004e-05 | 0.0034845 | 0.00349655002 |
218
+ the benchmarking was taken on the following hardware specification:
219
+ * Processor: 2,7 GHz Intel Core i5
220
+ * Memory: 16 GB 1867 MHz DDR3
221
+ * Ruby: ruby 2.1.2p95 (2014-05-08 revision 45877) [x86_64-darwin15.0]
222
+ * Endpoint declaration count: 1000
223
+
224
+ | name | version | current / fastest | user | system | total | real |
225
+ | ---------------------- | ---------------------- | ---------------------- | ---------------------- | ---------------------- | ---------------------- | ---------------------- |
226
+ | rack | 1.6.4 | 1.0 | 4.4999999999994597e-10 | 4.999999999999855e-11 | 5.000000000001581e-10 | 4.669824999999623e-10 |
227
+ | rack-app | 0.23.0 | 5.64 | 2.6249999999995462e-09 | 5.0000000000003155e-11 | 2.674999999999656e-09 | 2.6337825000000033e-09 |
228
+ | ramaze | 2012.12.08 | 10.761 | 4.7250000000004294e-09 | 3.249999999997837e-10 | 5.0499999999999815e-09 | 5.025382500000196e-09 |
229
+ | brooklyn | 0.0.1 | 135.196 | 6.202499999997365e-08 | 2.5000000000010383e-10 | 6.227499999994257e-08 | 6.31342025000291e-08 |
230
+ | nancy | 0.3.0 | 141.491 | 6.44500000000412e-08 | 4.0000000000002173e-10 | 6.485000000002128e-08 | 6.607404000000881e-08 |
231
+ | rails | 4.2.5.1 | 149.063 | 6.475000000004323e-08 | 2.54999999999825e-09 | 6.729999999999027e-08 | 6.960978250001378e-08 |
232
+ | hobbit | 0.6.1 | 152.009 | 6.86499999999909e-08 | 5.50000000000627e-10 | 6.920000000002929e-08 | 7.09855800000375e-08 |
233
+ | scorched | 0.25 | 206.02 | 9.227499999997586e-08 | 6.249999999997911e-10 | 9.289999999997338e-08 | 9.620763750005751e-08 |
234
+ | sinatra | 1.4.7 | 252.893 | 1.1582499999996941e-07 | 9.000000000006287e-10 | 1.167249999999214e-07 | 1.1809659249996387e-07 |
235
+ | grape | 0.14.0 | 999.893 | 4.5052499999980065e-07 | 4.900000000001301e-09 | 4.554249999998522e-07 | 4.66932680000025e-07 |
236
+ | camping | 2.1.532 | 2246.199 | 1.0080499999997654e-06 | 1.4049999999999699e-08 | 1.0220999999995006e-06 | 1.0489356725004438e-06 |
237
+ | cuba | 3.5.0 | 2951.837 | 1.3101249999997173e-06 | 1.302499999999637e-08 | 1.3231499999997228e-06 | 1.3784562299989904e-06 |
197
238
 
198
239
  ## Roadmap
199
240
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.22.0
1
+ 0.23.0
@@ -1,4 +1,5 @@
1
1
  require 'rack'
2
+ require 'rack/builder'
2
3
  require 'rack/request'
3
4
  require 'rack/response'
4
5
  class Rack::App
@@ -100,6 +101,7 @@ class Rack::App
100
101
  :error_handler => error,
101
102
  :description => @last_description,
102
103
  :serializer => serializer,
104
+ :middleware => middleware,
103
105
  :app_class => self
104
106
  }
105
107
 
@@ -156,6 +158,12 @@ class Rack::App
156
158
  nil
157
159
  end
158
160
 
161
+ def middleware(&block)
162
+ @builder ||= Rack::Builder.new
163
+ block.call(@builder) unless block.nil?
164
+ @builder
165
+ end
166
+
159
167
  end
160
168
 
161
169
  def params
@@ -7,16 +7,25 @@ class Rack::App::Endpoint
7
7
  def initialize(properties)
8
8
  @properties = properties
9
9
 
10
- @error_handler = properties[:error_handler]
11
- @serializer = properties[:serializer]
12
10
  @api_class = properties[:app_class]
13
- @headers = properties[:default_headers]
11
+ @error_handler = properties[:error_handler] || Rack::App::ErrorHandler.new
12
+ @serializer = properties[:serializer] || Rack::App::Serializer.new
13
+ @headers = properties[:default_headers] || {}
14
+
15
+ @middleware = (properties[:middleware] || Rack::Builder.new).dup
16
+ @middleware.run(lambda { |env| self.execute(env) })
14
17
 
15
18
  @path_params_matcher = {}
16
19
  @endpoint_method_name = register_method_to_app_class(properties[:user_defined_logic])
20
+
21
+ @app = @middleware.to_app
22
+ end
23
+
24
+ def call(env)
25
+ @app.call(env)
17
26
  end
18
27
 
19
- def call(request_env)
28
+ def execute(request_env)
20
29
 
21
30
  request = Rack::Request.new(request_env)
22
31
  response = Rack::Response.new
@@ -4,12 +4,9 @@ not_found_properties = {
4
4
  response.status= 404
5
5
  return '404 Not Found'
6
6
  },
7
- :default_headers => {},
8
7
  :request_method => 'GET',
9
- :error_handler => Rack::App::ErrorHandler.new,
10
8
  :request_path => '\404',
11
9
  :description => 'page not found',
12
- :serializer => Rack::App::Serializer.new,
13
10
  :app_class => app_class
14
11
  }
15
12
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rack-app
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.22.0
4
+ version: 0.23.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adam Luzsi
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2016-02-21 00:00:00.000000000 Z
12
+ date: 2016-02-23 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler