rack-app 0.22.0 → 0.23.0

Sign up to get free protection for your applications and to get access to all the features.
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