sinject 0.2.1 → 0.2.2

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: 84ae556b8e2fd2b90c6a6098c655a72133e3190c
4
- data.tar.gz: d6994c60f60a5dad2d1cb7179c166c1255301585
3
+ metadata.gz: ae615b99554095a49b4dfdcc5a9a9ea78e4a08d1
4
+ data.tar.gz: 30d3a94b536b9144b89a6ec56f652f3f769421d0
5
5
  SHA512:
6
- metadata.gz: bc23325620a024329a2acb4c49fe97fbed19e647353e943da931cb7c9ed900175ccfcd4dc2ced889a1366a35237f696933e3c401247693b841435be9c491ea7b
7
- data.tar.gz: 1e8ba21b96980fbd99b62a18f59cb28b6c9f0549301a8882b09255262ec0ccdbc89a1b30e8d652748fd8c659883dd49cdd89dbb6789403ca99c4df056118bcb5
6
+ metadata.gz: c4087a95afe29888fcb5a2a80a9c8171a762e82ce1be89fae688f35fa97615d20ada0e325ce7bbc2840a1d6335109f242561f5b92a8e802133ee925c3ee31aeb
7
+ data.tar.gz: fb588c3e58110e11bcb3bb3e38c69b7d14a80499b1fb03a605e97f0079fda8d949e97dfc480a94ff4a606ab89be3715651f8858ca073022d3bef5c594b502be5
data/README.md CHANGED
@@ -56,7 +56,7 @@ Dependencies with a custom initialization block must return an object of the reg
56
56
 
57
57
  **Dependency Contracts**
58
58
 
59
- Dependency contracts can be defined to validate registered dependencies are valid for the task they are being registered for.
59
+ Dependency contracts can be defined to validate registered dependencies are valid for the task they are being registered for. *(If you are familiar with other type based languages then you can think of this as a kind of Interface)*
60
60
 
61
61
  To create a dependency contract you need to create a new class with empty methods for each of the methods that the dependency needs to respond to in order to fulfill it's role:
62
62
 
@@ -75,6 +75,27 @@ Sinject will then validate that the registered dependency meets the requirements
75
75
  - `DependencyContractMissingMethodsException` is raised when 1 or more methods from the contract could not be found on the dependency.
76
76
  - `DependencyContractInvalidParametersException` is raised when the parameters of a contract method do not match the parameters found on a dependency method.
77
77
 
78
+ **Dependency Groups**
79
+
80
+ Dependency registrations groups can be created to allow groups of dependencies to be set without the need for manual registration *(e.g. to include with a gem for auto registration)*, or to allow different dependency groups to bd loaded in different circumstances *(e.g. per environment)*.
81
+
82
+ To create a dependency group create a class that inherits from the DependencyGroup base class and implement the *'register'* & *'is_valid'* methods.
83
+
84
+ For example:
85
+
86
+ #create a development only dependency group
87
+ class DevelopmentDependencies < DependencyGroup
88
+ def register(container)
89
+ container.register(:cache_store, LocalCacheStore, true)
90
+ container.register(:logger, TerminalLogger, true)
91
+ end
92
+
93
+ def is_valid?
94
+ Rails.env.development?
95
+ end
96
+ end
97
+
98
+ Only dependency groups that return **True** from the is_valid? method will be loaded.
78
99
 
79
100
  **Assigning dependencies**
80
101
 
data/lib/sinject.rb CHANGED
@@ -85,6 +85,15 @@ class SinjectContainer
85
85
  end
86
86
  end
87
87
 
88
+ def load_groups
89
+ DependencyGroup.descendants.each do |g|
90
+ group = g.new
91
+ if group.is_valid?
92
+ group.register(SinjectContainer.instance)
93
+ end
94
+ end
95
+ end
96
+
88
97
  private
89
98
 
90
99
  def validate_contract(dependency_class, contract_class)
@@ -205,3 +214,19 @@ class DependencyInitializeException < StandardError
205
214
  end
206
215
 
207
216
  end
217
+
218
+ class DependencyGroup
219
+
220
+ def register(container)
221
+
222
+ end
223
+
224
+ def is_valid?
225
+ return true
226
+ end
227
+
228
+ def self.descendants
229
+ ObjectSpace.each_object(Class).select { |klass| klass < self }
230
+ end
231
+
232
+ end
@@ -1,3 +1,3 @@
1
1
  module Sinject
2
- VERSION = "0.2.1"
2
+ VERSION = "0.2.2"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sinject
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - vaughan britton
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-02-09 00:00:00.000000000 Z
11
+ date: 2016-02-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler