mini_object 0.1.7 → 0.2.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 +4 -4
- data/.gitignore +2 -0
- data/README.md +16 -3
- data/lib/mini_object/injectable.rb +42 -35
- data/lib/mini_object/version.rb +1 -1
- data/spec/mini_object/injectable_spec.rb +14 -0
- metadata +2 -6
- data/.yardoc/checksums +0 -7
- data/.yardoc/object_types +0 -0
- data/.yardoc/objects/root.dat +0 -0
- data/.yardoc/proxy_types +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 641197eea3b92f92e1cfccd6622181bbadf32559
|
4
|
+
data.tar.gz: 7aa21aa227c67909a99509b048511cd7b09868f6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5f052d7fbc726f3aa84dd495214dd227167525515eb6c95c1482b2b8b11e6d5aec1ec9a7a0b01ca1842b87dca78318af87aef9f14add60e8fe26337b8c6d924a
|
7
|
+
data.tar.gz: 9a084406d0481a2ccc7fbc77679724dadbeeeb96f6cb3a7d37f7ff80b6f3a24a4f9bb8fafe65295be48f15dee2f4b8dfac8edbdbb9200e96f62ae1f9e37aad07
|
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -40,11 +40,24 @@ class UsersRepository
|
|
40
40
|
end
|
41
41
|
|
42
42
|
users_repo = UsersRepository.new
|
43
|
+
|
44
|
+
# Regular assignment:
|
45
|
+
users_repo.store = Redis.new
|
46
|
+
|
47
|
+
# Lambda assignment: The given block will be
|
48
|
+
# evaluated each time you call users_repo.store
|
43
49
|
users_repo.store{ app.stores.redis }
|
44
|
-
```
|
45
50
|
|
46
|
-
|
47
|
-
|
51
|
+
# Mass assignent
|
52
|
+
users_repo.attributes = store: Redis.new
|
53
|
+
|
54
|
+
# Default blocks: Will also be executed each time
|
55
|
+
class UsersRepository
|
56
|
+
include Injectable
|
57
|
+
attr_injectable(:store) { Redis.new }
|
58
|
+
end
|
59
|
+
|
60
|
+
```
|
48
61
|
|
49
62
|
|
50
63
|
## RemarkableInspect
|
@@ -11,66 +11,73 @@ module MiniObject
|
|
11
11
|
klass.extend self
|
12
12
|
end
|
13
13
|
|
14
|
-
def self.getsetter_definition_for name
|
14
|
+
def self.getsetter_definition_for name, default_block
|
15
15
|
lambda do |value = NULL, &block|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
end
|
22
|
-
else
|
23
|
-
if value == NULL
|
24
|
-
p = instance_variable_get("@#{name}_proc") ||
|
25
|
-
self.class.instance_variable_get("@#{name}_default_proc") ||
|
26
|
-
raise("No #{name} defined yet for #{inspect}")
|
27
|
-
p.call
|
28
|
-
else
|
29
|
-
send("#{name}=", value)
|
30
|
-
end
|
31
|
-
end
|
16
|
+
if value == NULL && block == nil
|
17
|
+
get_attribute name, default_block
|
18
|
+
else
|
19
|
+
set_attribute name, value, block
|
20
|
+
end
|
32
21
|
end
|
33
22
|
end
|
34
23
|
|
35
24
|
def self.setter_definition_for name
|
36
25
|
lambda do |value|
|
37
|
-
|
38
|
-
value
|
26
|
+
set_attribute name, value
|
39
27
|
end
|
40
28
|
end
|
41
29
|
|
42
30
|
def cattr_injectable name, &block
|
43
|
-
define_singleton_method name, &Injectable.getsetter_definition_for(name)
|
31
|
+
define_singleton_method name, &Injectable.getsetter_definition_for(name, block)
|
44
32
|
define_singleton_method "#{name}=", &Injectable.setter_definition_for(name)
|
33
|
+
define_method name, -> { self.class.name }
|
45
34
|
send(name, &block) if block
|
46
35
|
end
|
47
36
|
|
48
37
|
def attr_injectable name, &block
|
49
|
-
define_method name, &Injectable.getsetter_definition_for(name)
|
38
|
+
define_method name, &Injectable.getsetter_definition_for(name, block)
|
50
39
|
define_method "#{name}=", &Injectable.setter_definition_for(name)
|
51
40
|
instance_variable_set("@#{name}_default_proc", block) if block
|
52
41
|
end
|
53
42
|
|
54
|
-
def
|
55
|
-
|
56
|
-
|
57
|
-
define_singleton_method "#{name}=" do |value|
|
58
|
-
instance_variable_set var_name, value
|
43
|
+
def attributes= attrs
|
44
|
+
attrs.each do |k,v|
|
45
|
+
public_send "#{k}=", v
|
59
46
|
end
|
47
|
+
end
|
60
48
|
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
49
|
+
private
|
50
|
+
|
51
|
+
def get_attribute name, default_block
|
52
|
+
if eval "defined? @#{name}"
|
53
|
+
# Get via variable
|
54
|
+
instance_variable_get :"@#{name}"
|
55
|
+
elsif eval "defined? @#{name}_proc"
|
56
|
+
# Get via proc
|
57
|
+
instance_variable_get(:"@#{name}_proc").call
|
58
|
+
elsif default_block
|
59
|
+
default_block.call
|
60
|
+
else
|
61
|
+
raise "Dependency #{name} not defined yet"
|
67
62
|
end
|
68
63
|
end
|
69
64
|
|
70
|
-
def
|
71
|
-
|
72
|
-
|
65
|
+
def set_attribute name, value = NULL, block = nil
|
66
|
+
if value == NULL
|
67
|
+
# Set via proc
|
68
|
+
instance_variable_set :"@#{name}_proc", block
|
69
|
+
remove_instance_variable :"@#{name}" if eval "defined? @#{name}"
|
70
|
+
elsif value == nil && block
|
71
|
+
# Set via proc
|
72
|
+
instance_variable_set :"@#{name}_proc", block
|
73
|
+
remove_instance_variable :"@#{name}" if eval "defined? @#{name}"
|
74
|
+
else
|
75
|
+
# Set via variable
|
76
|
+
instance_variable_set :"@#{name}", value
|
77
|
+
remove_instance_variable :"@#{name}_proc" if eval "defined? @#{name}_proc"
|
73
78
|
end
|
79
|
+
|
80
|
+
block || value
|
74
81
|
end
|
75
82
|
end
|
76
83
|
end
|
data/lib/mini_object/version.rb
CHANGED
@@ -50,6 +50,15 @@ RSpec.describe 'Injectable' do
|
|
50
50
|
|
51
51
|
subject { subject_class.new }
|
52
52
|
it_behaves_like 'having an injectable name'
|
53
|
+
|
54
|
+
it 'allows giving a default' do
|
55
|
+
subject_class.class_eval do
|
56
|
+
a_surname = 'Smith'
|
57
|
+
attr_injectable(:surname) { a_surname }
|
58
|
+
end
|
59
|
+
|
60
|
+
expect(subject.surname).to eq 'Smith'
|
61
|
+
end
|
53
62
|
end
|
54
63
|
|
55
64
|
context 'cattr_accessor within a class' do
|
@@ -62,6 +71,11 @@ RSpec.describe 'Injectable' do
|
|
62
71
|
|
63
72
|
subject { subject_class }
|
64
73
|
it_behaves_like 'having an injectable name'
|
74
|
+
|
75
|
+
it 'delegates getter to the class' do
|
76
|
+
subject_class.name = 'John'
|
77
|
+
expect(subject_class.new.name).to eq 'John'
|
78
|
+
end
|
65
79
|
end
|
66
80
|
|
67
81
|
describe '#attributes=' do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mini_object
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Manuel Morales
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-08-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: forwarding_dsl
|
@@ -76,10 +76,6 @@ extra_rdoc_files: []
|
|
76
76
|
files:
|
77
77
|
- ".gitignore"
|
78
78
|
- ".travis.yml"
|
79
|
-
- ".yardoc/checksums"
|
80
|
-
- ".yardoc/object_types"
|
81
|
-
- ".yardoc/objects/root.dat"
|
82
|
-
- ".yardoc/proxy_types"
|
83
79
|
- Gemfile
|
84
80
|
- LICENSE.txt
|
85
81
|
- README.md
|
data/.yardoc/checksums
DELETED
@@ -1,7 +0,0 @@
|
|
1
|
-
lib/lazy.rb 7e4d5fabe9a99f5a2751823cd1ea4e67f446ee2e
|
2
|
-
lib/inline.rb df7b92b051d5e5072ad5b486576a801fb3a336a7
|
3
|
-
lib/section.rb b05f398196140a836f5e125c20f9988f7a7ef000
|
4
|
-
lib/version.rb 2b03a00fee65075ba6f4715792ec212a3b47d654
|
5
|
-
lib/resolver.rb c4cf365fd98c2d454e2d11404be070b3d46690f6
|
6
|
-
lib/injectable.rb c95a2ea2a7500684d293be0c89196887c72ee68a
|
7
|
-
lib/mini_object.rb c4541e47c74f1d904221f2067ad9c0fc0e551ea9
|
data/.yardoc/object_types
DELETED
Binary file
|
data/.yardoc/objects/root.dat
DELETED
Binary file
|
data/.yardoc/proxy_types
DELETED
Binary file
|