mini_object 0.1.7 → 0.2.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: 0d51df89f964c18a9186c9cb8782dd16e2c32100
4
- data.tar.gz: fb72060694d07d1def66092a17ee838267dbb7e3
3
+ metadata.gz: 641197eea3b92f92e1cfccd6622181bbadf32559
4
+ data.tar.gz: 7aa21aa227c67909a99509b048511cd7b09868f6
5
5
  SHA512:
6
- metadata.gz: e724032d3ba98db3e6fa2b3826aa883edad0e09e7a9636eb273de543243e5c43e2e0fb0c0f470e412bb21d31c2567e279370ce0975d8f48f5a54ba9cac0549f5
7
- data.tar.gz: c2e3267038033ca58ad204a225fd831bdbaa2ccd4a18be9dda98b95bae1876fcca7ebbf7563fefdda7067dde4418fce0b534a05ed0eadd27c8e2f11e9727fdb7
6
+ metadata.gz: 5f052d7fbc726f3aa84dd495214dd227167525515eb6c95c1482b2b8b11e6d5aec1ec9a7a0b01ca1842b87dca78318af87aef9f14add60e8fe26337b8c6d924a
7
+ data.tar.gz: 9a084406d0481a2ccc7fbc77679724dadbeeeb96f6cb3a7d37f7ff80b6f3a24a4f9bb8fafe65295be48f15dee2f4b8dfac8edbdbb9200e96f62ae1f9e37aad07
data/.gitignore CHANGED
@@ -3,3 +3,5 @@ pkg
3
3
  Gemfile.lock
4
4
  vendor
5
5
  .bundle
6
+ .yardoc
7
+ doc
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
- In the example, if `app.stores.persistent` changes, the repository
47
- will inmediately see the new store.
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
- if block
17
- if value == NULL || value == nil
18
- instance_variable_set("@#{name}_proc", block)
19
- else
20
- send("#{name}=", value)
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
- instance_variable_set("@#{name}_proc", lambda{ value })
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 let name, &block
55
- var_name = :"@#{name}"
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
- define_singleton_method name do
62
- if instance_variable_defined? var_name
63
- instance_variable_get var_name
64
- else
65
- instance_variable_set var_name, block.call(self)
66
- end
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 attributes= attrs
71
- attrs.each do |k,v|
72
- public_send "#{k}=", v
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
@@ -1,3 +1,3 @@
1
1
  module MiniObject
2
- VERSION = "0.1.7"
2
+ VERSION = "0.2.0"
3
3
  end
@@ -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.1.7
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-07-09 00:00:00.000000000 Z
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
Binary file
data/.yardoc/proxy_types DELETED
Binary file