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 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