manioc 0.1.7 → 0.1.8
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/manioc/railtie.rb +4 -3
- data/lib/manioc/struct.rb +46 -20
- data/lib/manioc/version.rb +1 -1
- 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: 6015ad7a95b419bc25ff766dbb024aaf63e66342
|
4
|
+
data.tar.gz: d07b7e6f417be0d6fec65e5d310080e55901da6f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b2aa342da2aff07b80f076e596fc1d8d47f2393d5f73bdd961fd0d5d1f4dcfc4c2f5b7a7320d280b39d553eb4f3262c32865c8a014c9e7301afa8b70d45b4b1d
|
7
|
+
data.tar.gz: 58687555545596de7b4e91cfc0bc3336de9dfb997c6abcc67dfa9bae0e2066e8438fac758fabcca1b9b6eefeb2bd25be4e4e0262f141e8df304eb9df8535b481
|
data/lib/manioc/railtie.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
module Manioc
|
2
2
|
class Rails::Application
|
3
|
-
def self.container &setup
|
3
|
+
def self.container frozen: true, &setup
|
4
|
+
Manioc.frozen = frozen
|
4
5
|
if setup
|
5
6
|
config.container = config.container.with(&setup)
|
6
7
|
else
|
@@ -8,8 +9,8 @@ module Manioc
|
|
8
9
|
end
|
9
10
|
end
|
10
11
|
|
11
|
-
def container &setup
|
12
|
-
self.class.container(&setup)
|
12
|
+
def container **opts, &setup
|
13
|
+
self.class.container(**opts, &setup)
|
13
14
|
end
|
14
15
|
end
|
15
16
|
|
data/lib/manioc/struct.rb
CHANGED
@@ -1,33 +1,59 @@
|
|
1
1
|
module Manioc
|
2
2
|
class << self
|
3
3
|
def [] *fields, **defaults
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
define_singleton_method(:defaults) { defaults }
|
9
|
-
|
10
|
-
fields.each do |field|
|
11
|
-
attr_reader field
|
12
|
-
end
|
13
|
-
end
|
4
|
+
Struct.configure \
|
5
|
+
fields: fields,
|
6
|
+
defaults: defaults,
|
7
|
+
mutable: false
|
14
8
|
end
|
15
9
|
|
16
|
-
def
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
10
|
+
def mutable *fields, **defaults
|
11
|
+
Struct.configure \
|
12
|
+
fields: fields,
|
13
|
+
defaults: defaults,
|
14
|
+
mutable: true
|
21
15
|
end
|
16
|
+
|
17
|
+
attr_accessor :frozen
|
18
|
+
|
19
|
+
def frozen?; frozen; end
|
22
20
|
end
|
21
|
+
|
23
22
|
self.frozen = true
|
24
23
|
|
25
24
|
class Struct
|
25
|
+
class Config
|
26
|
+
attr_accessor :fields, :defaults, :mutable
|
27
|
+
|
28
|
+
def mutable?; mutable end
|
29
|
+
def immutable?; !mutable? end
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.configure fields: [], defaults: {}, mutable: Manioc.frozen?
|
33
|
+
config = Config.new.tap do |c|
|
34
|
+
c.fields = fields + defaults.keys
|
35
|
+
c.defaults = defaults
|
36
|
+
c.mutable = mutable
|
37
|
+
end
|
38
|
+
|
39
|
+
Class.new Struct do
|
40
|
+
define_singleton_method(:config) { config }
|
41
|
+
|
42
|
+
config.fields.each do |field|
|
43
|
+
if config.mutable
|
44
|
+
attr_accessor field
|
45
|
+
else
|
46
|
+
attr_reader field
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
26
52
|
def initialize **fields
|
27
|
-
fields = self.class.defaults.merge fields
|
53
|
+
fields = self.class.config.defaults.merge fields
|
28
54
|
_validate fields
|
29
55
|
_assign fields
|
30
|
-
freeze if Manioc.frozen?
|
56
|
+
freeze if Manioc.frozen? && self.class.config.immutable?
|
31
57
|
end
|
32
58
|
|
33
59
|
def == other
|
@@ -39,7 +65,7 @@ module Manioc
|
|
39
65
|
end
|
40
66
|
|
41
67
|
def to_h
|
42
|
-
self.class.fields.each_with_object({}) { |field,h| h[field] = public_send field }
|
68
|
+
self.class.config.fields.each_with_object({}) { |field,h| h[field] = public_send field }
|
43
69
|
end
|
44
70
|
|
45
71
|
def inspect
|
@@ -51,12 +77,12 @@ module Manioc
|
|
51
77
|
private
|
52
78
|
|
53
79
|
def _validate fields
|
54
|
-
missing = self.class.fields - fields.keys
|
80
|
+
missing = self.class.config.fields - fields.keys
|
55
81
|
if missing.any?
|
56
82
|
raise KeyError, "#{self}(#{self.class}) missing fields #{missing}"
|
57
83
|
end
|
58
84
|
|
59
|
-
extra = fields.keys - self.class.fields
|
85
|
+
extra = fields.keys - self.class.config.fields
|
60
86
|
if extra.any?
|
61
87
|
raise KeyError, "#{self}(#{self.class}) passed extra fields #{extra}"
|
62
88
|
end
|
data/lib/manioc/version.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.8
|
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-11-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|