roda-container 0.0.4 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +15 -7
- data/lib/roda/plugins/container.rb +4 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 332f3de4a0b33b8ee1b9d15d0b4d2458321ad231
|
4
|
+
data.tar.gz: 49cfa204feae3922fd56f179fff187b1a5ec3f07
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f1d0773bec2dc4fe6e5ac3e36a81a4832afb24b78d1098d9be60f83986df68df89d45fe756689a44a62b8b4f9c3d3db718974002b598283f04be6d6c55836105
|
7
|
+
data.tar.gz: 3427710252525289662f4977db2024cc9d8ab83137167254e73d07f501c91918f7e6f3b4f6f61751a945b0f613b133cb82e8929e65c698cc8e81cac1172109bd
|
data/README.md
CHANGED
@@ -1,11 +1,11 @@
|
|
1
|
-
# roda-container
|
1
|
+
# roda-container <a href="https://gitter.im/AMHOL/roda-container" target="_blank">![Join the chat at https://gitter.im/AMHOL/roda-container](https://badges.gitter.im/Join%20Chat.svg)</a>
|
2
2
|
|
3
3
|
A plugin for Roda which turns your application into a (IoC) container
|
4
4
|
|
5
5
|
## Installation
|
6
6
|
|
7
7
|
```ruby
|
8
|
-
gem 'roda-container', '0.0
|
8
|
+
gem 'roda-container', '0.1.0'
|
9
9
|
```
|
10
10
|
|
11
11
|
## Usage
|
@@ -47,13 +47,13 @@ MyApplication.route do |r|
|
|
47
47
|
# Roda responds to the instance method #call, with the call: false
|
48
48
|
# option, calling MyApplication.instance.resolve(:app) will not attempt to call
|
49
49
|
# it, without the option, the application would error
|
50
|
-
|
50
|
+
register(:app, self, call: false) # Roda#register, regiser with the request container
|
51
51
|
end
|
52
52
|
```
|
53
53
|
|
54
54
|
## Thread safety
|
55
55
|
|
56
|
-
Please note the use of
|
56
|
+
Please note the use of and `MyApplication.instance.resolve` above, without the call to `Roda.instance` the item will not be present in the container, as it was registered with the request container (using Roda#register), without this, there is high possiblilty of a thread safety issue when registering anything at runtime. For example:
|
57
57
|
|
58
58
|
```ruby
|
59
59
|
class MyApplication < Roda
|
@@ -62,7 +62,7 @@ end
|
|
62
62
|
|
63
63
|
MyApplication.route do |r|
|
64
64
|
# DO NOT DO THIS, SEE ABOVE ^^^
|
65
|
-
MyApplication.register(:app, self, call: false)
|
65
|
+
MyApplication.register(:app, self, call: false) # Roda.register, register with the global container
|
66
66
|
|
67
67
|
r.on 'users' do
|
68
68
|
# ...
|
@@ -78,9 +78,17 @@ MyApplication.route do |r|
|
|
78
78
|
end
|
79
79
|
```
|
80
80
|
|
81
|
-
Immagine a user hitting `POST /users`, then another user hitting `GET /users/{id}` in quick succession; the first user registers their instance of app with the container, then hits the 5 second sleep, then the second user comes along, registers their instance of app with the container, the request executes and they go on their merry way.
|
81
|
+
Immagine a user hitting `POST /users`, then another user hitting `GET /users/{id}` in quick succession; the first user registers their instance of app with the global container, then hits the 5 second sleep, then the second user comes along, registers their instance of app with the global container, the request executes and they go on their merry way.
|
82
82
|
|
83
|
-
A few seconds later the 5 second sleep is complete, and the first user resolves `:app` from the container, only to find the instance that was registered by the user hitting `GET /users/{id}`, they have just spent 5 minutes meticulously filling out your webform to create their user account, only for their payload to lost in a race condition, needless to say
|
83
|
+
A few seconds later the 5 second sleep is complete, and the first user resolves `:app` from the global container, only to find the application instance that was registered by the user hitting `GET /users/{id}`, they have just spent 5 minutes meticulously filling out your webform to create their user account, only for their payload to be lost in a race condition, needless to say - you don't want this to happen.
|
84
|
+
|
85
|
+
This is preventable by registering anything specific to a request with the request container, this is done using the `Roda#register` method, i.e.
|
86
|
+
|
87
|
+
```ruby
|
88
|
+
MyApplication.route do |r|
|
89
|
+
register(:app, self, call: false) # Roda#register, regiser with the request container
|
90
|
+
end
|
91
|
+
``
|
84
92
|
|
85
93
|
## Contributing
|
86
94
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: roda-container
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andy Holland
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-05-
|
11
|
+
date: 2015-05-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|