manioc 0.1.3 → 0.1.4
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/README.md +26 -0
- data/lib/manioc/container.rb +13 -24
- data/lib/manioc/railtie.rb +31 -0
- data/lib/manioc/version.rb +1 -1
- data/lib/manioc.rb +2 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dcde3cb2d574036ff699dd0c8883d33bf1aea1ad
|
4
|
+
data.tar.gz: 7e117373e063b7bcbd5794fba2144042fca3b47b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c2f2737c1d0762eb76a4bba9666c820a4a207220a6e117b4fd29dbb66bc2310a8e348ec11b0651d078d06dca3afb82d95f7c6bf8bd81c92d0471586bc503d5d8
|
7
|
+
data.tar.gz: 4be8a31b032d705231c2848916301418eb60464df6df3e83697ccc65a2c1f8b013207163cffdf1d7fba2a88b059445e0cc5a4fc2976ce5e998379a0842388e7c
|
data/README.md
CHANGED
@@ -36,6 +36,32 @@ prod = dev.with do
|
|
36
36
|
end
|
37
37
|
```
|
38
38
|
|
39
|
+
### Rails
|
40
|
+
|
41
|
+
Manioc includes a few convenience methods for the conventional use case of a Rails application with one container, customized per-environment:
|
42
|
+
|
43
|
+
```ruby
|
44
|
+
# config/application.rb
|
45
|
+
module MyApp
|
46
|
+
class Applicaton
|
47
|
+
container do
|
48
|
+
foo { 0 }
|
49
|
+
bar { foo + 1 }
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
# config/environments/test.rb
|
55
|
+
Rails.application.configure do
|
56
|
+
container do
|
57
|
+
foo { 1000 }
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
# in e.g. a spec file
|
62
|
+
Rails.configuration.container.bar # => 1001
|
63
|
+
```
|
64
|
+
|
39
65
|
## Installation
|
40
66
|
|
41
67
|
Add this line to your application's Gemfile:
|
data/lib/manioc/container.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
module Manioc
|
2
2
|
class Container
|
3
|
-
class DSL
|
3
|
+
class DSL < BasicObject
|
4
4
|
def initialize &block
|
5
5
|
@fields = {}
|
6
6
|
instance_exec(&block)
|
@@ -16,33 +16,30 @@ module Manioc
|
|
16
16
|
end
|
17
17
|
end
|
18
18
|
|
19
|
-
def initialize
|
20
|
-
@constructors = constructors
|
21
|
-
@cache = cache ? {} : nil
|
22
|
-
@preload = preload
|
19
|
+
def initialize constructors: {}, &block
|
20
|
+
@constructors, @cache = constructors, {}
|
23
21
|
|
24
22
|
register(&block) if block
|
25
23
|
finalize
|
26
24
|
end
|
27
25
|
|
28
26
|
def with &block
|
29
|
-
self.class.new
|
30
|
-
constructors: @constructors.dup,
|
31
|
-
cache: !@cache.nil?,
|
32
|
-
preload: @preload,
|
33
|
-
&block
|
27
|
+
self.class.new constructors: @constructors.dup, &block
|
34
28
|
end
|
35
29
|
|
36
30
|
def clone
|
37
31
|
with
|
38
32
|
end
|
39
33
|
|
40
|
-
def reset
|
41
|
-
|
42
|
-
keys = key ? [key] : @cache.keys
|
34
|
+
def reset! *keys
|
35
|
+
keys = @cache.keys if keys.empty?
|
43
36
|
keys.each { |k| @cache.delete k }
|
44
37
|
end
|
45
38
|
|
39
|
+
def preload!
|
40
|
+
@constructors.keys.each { |key| resolve key }
|
41
|
+
end
|
42
|
+
|
46
43
|
def inspect
|
47
44
|
# :nocov:
|
48
45
|
%|<#{self.class.name}(#{@constructors.keys.join(', ')})>|
|
@@ -56,21 +53,13 @@ module Manioc
|
|
56
53
|
end
|
57
54
|
|
58
55
|
def resolve key
|
59
|
-
instance_exec(&@constructors[key])
|
56
|
+
@cache[key] ||= instance_exec(&@constructors[key])
|
60
57
|
end
|
61
58
|
|
62
59
|
def finalize
|
63
60
|
@constructors.freeze
|
64
|
-
@constructors.each do |key
|
65
|
-
|
66
|
-
define_singleton_method(key) { @cache[key] ||= resolve key }
|
67
|
-
else
|
68
|
-
define_singleton_method(key) { resolve key }
|
69
|
-
end
|
70
|
-
|
71
|
-
if @preload
|
72
|
-
public_send key
|
73
|
-
end
|
61
|
+
@constructors.keys.each do |key|
|
62
|
+
define_singleton_method(key) { resolve key }
|
74
63
|
end
|
75
64
|
end
|
76
65
|
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module Manioc
|
2
|
+
class Rails::Application
|
3
|
+
def self.container &setup
|
4
|
+
if setup
|
5
|
+
config.container = config.container.with(&setup)
|
6
|
+
else
|
7
|
+
config.container
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
def container &setup
|
12
|
+
self.class.container(&setup)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
class Railtie < ::Rails::Railtie
|
17
|
+
_app = nil
|
18
|
+
config.before_configuration do |app|
|
19
|
+
_app = app
|
20
|
+
_app.config.container = Manioc::Container.new
|
21
|
+
end
|
22
|
+
|
23
|
+
config.to_prepare do
|
24
|
+
if _app.config.eager_load
|
25
|
+
_app.config.container.preload!
|
26
|
+
else
|
27
|
+
_app.config.container.reset!
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
data/lib/manioc/version.rb
CHANGED
data/lib/manioc.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: manioc
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- James Dabbs
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-08-
|
11
|
+
date: 2017-08-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -85,6 +85,7 @@ files:
|
|
85
85
|
- bin/setup
|
86
86
|
- lib/manioc.rb
|
87
87
|
- lib/manioc/container.rb
|
88
|
+
- lib/manioc/railtie.rb
|
88
89
|
- lib/manioc/struct.rb
|
89
90
|
- lib/manioc/version.rb
|
90
91
|
- manioc.gemspec
|