jerry 1.0.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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 602f20059904dc280342beeba26963492e75a566
4
+ data.tar.gz: e41a4ebdb936fa0beee388d153cbb505ba8f6c90
5
+ SHA512:
6
+ metadata.gz: 0a96708a2dc2bf0d3e8ce206e7763760ca08bf1570e58fa5ef8dd12530e03d432ab1bbcd6e4085f2f29efce794bfb236bed57a3bf93bde039849e9be70dc7f38
7
+ data.tar.gz: 93da221784a25aecda8d98ac356110a791a0b8e7aeca64923a6e7a81b38d2755ce17f34e6cc9c7f217461a19fc8ea62ab5b822a807608033b08c9e0655da8673
data/.gitignore ADDED
@@ -0,0 +1,38 @@
1
+ # Created by http://www.gitignore.io
2
+
3
+ ### Ruby ###
4
+ *.gem
5
+ *.rbc
6
+ /.config
7
+ /coverage/
8
+ /InstalledFiles
9
+ /pkg/
10
+ /spec/reports/
11
+ /test/tmp/
12
+ /test/version_tmp/
13
+ /tmp/
14
+
15
+ ## Specific to RubyMotion:
16
+ .dat*
17
+ .repl_history
18
+ build/
19
+
20
+ ## Documentation cache and generated files:
21
+ /.yardoc/
22
+ /_yardoc/
23
+ /doc/
24
+ /rdoc/
25
+
26
+ ## Environment normalisation:
27
+ /.bundle/
28
+ /lib/bundler/man/
29
+
30
+ # for a library or gem, you might want to ignore these files since the code is
31
+ # intended to run in multiple environments; otherwise, check them in:
32
+ Gemfile.lock
33
+ .ruby-version
34
+ .ruby-gemset
35
+
36
+ # unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
37
+ .rvmrc
38
+
data/.rspec ADDED
@@ -0,0 +1,3 @@
1
+ --color
2
+ --warnings
3
+ --require spec_helper
data/.travis.yml ADDED
@@ -0,0 +1,6 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.1.2
4
+ - 1.9.3
5
+ - jruby-19mode
6
+ - rbx-2
data/Gemfile ADDED
@@ -0,0 +1,5 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
4
+
5
+ gem 'coveralls', require: false
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2014 Boris Bera
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,117 @@
1
+ Jerry
2
+ =====
3
+
4
+ [![Build Status](https://travis-ci.org/beraboris/jerry.svg?branch=master)](https://travis-ci.org/beraboris/jerry)
5
+ [![Coverage Status](https://coveralls.io/repos/beraboris/jerry/badge.png)](https://coveralls.io/r/beraboris/jerry)
6
+
7
+ Jerry rigs your application together. It's an [Inversion of Control](https://en.wikipedia.org/wiki/Inversion_of_control)
8
+ container for ruby. Just tell Jerry how to build your application and it will set it all up for you.
9
+
10
+ Installation
11
+ ============
12
+
13
+ The usual stuff. Either
14
+
15
+ ```ruby
16
+ gem 'jerry'
17
+ ```
18
+
19
+ then
20
+
21
+ $ bundle install
22
+
23
+ or
24
+
25
+ $ gem install jerry
26
+
27
+ Usage
28
+ =====
29
+
30
+ Let's say you have the following code:
31
+
32
+ ```ruby
33
+ class Window; end
34
+ class Door; end
35
+
36
+ class House
37
+ attr_reader :window, :door
38
+
39
+ def initialize(window, door)
40
+ @window = window
41
+ @door = door
42
+ end
43
+ end
44
+ ```
45
+
46
+ First, require jerry:
47
+
48
+ ```ruby
49
+ require 'jerry'
50
+ ```
51
+
52
+ Then, define a config class. This class tells jerry how to construct your application.
53
+
54
+ ```ruby
55
+ class MyConfig < Jerry::Config
56
+ component(:window) { Window.new }
57
+ component(:door) { Door.new }
58
+ component(:house) { House.new rig(:window), rig(:door) }
59
+ end
60
+ ```
61
+
62
+ The `component` method defines a component. Usually you'll want a component per class. The `rig` method tells jerry to
63
+ build a component.
64
+
65
+ Finally, when you want to build your application, ask jerry to do it for you.
66
+
67
+ ```ruby
68
+ jerry = Jerry.new MyConfig.new
69
+ house = jerry.rig :house
70
+ ```
71
+
72
+ Scopes
73
+ ------
74
+
75
+ The `component` method lets you specify a scope. The scope can either be `:single` or `:instance` and the default is
76
+ `:single`. If you set the scope to `:single` only one instance of the component will be created. If you set it to
77
+ `:instance`, a new instance of the component will be created each time you call `rig`.
78
+
79
+ ```ruby
80
+ class MyConfig < Jerry::Config
81
+ component(:window, scope: :instance) { Window.new }
82
+ component(:door, scope: :single) { Door.new }
83
+ end
84
+ jerry = Jerry.new MyConfig.new
85
+
86
+ window_a = jerry.rig :window
87
+ window_b = jerry.rig :window
88
+ window_a.object_id == window_b.object_id
89
+ #=> false
90
+
91
+ door_a = jerry.rig :door
92
+ door_b = jerry.rig :door
93
+ door_a.object_id == door_b.object_id
94
+ #=> true
95
+ ```
96
+
97
+ Multiple configs
98
+ ----------------
99
+
100
+ Jerry lets you use multiple configs. This way you can organize your configs however you want. You can pass multiple
101
+ configs to `Jerry.new` or you can use `jerry << SomeConfig.new` to add configs to jerry.
102
+
103
+ If two configs define the same component, the config that was inserted last will have priority. With `Jerry.new`, the
104
+ later arguments have priority.
105
+
106
+ ```ruby
107
+ class ConfA < Jerry::Config
108
+ component(:thing) { "from a" }
109
+ end
110
+ class ConfB < Jerry::Config
111
+ component(:thing) { "from b" }
112
+ end
113
+ jerry = Jerry.new ConfA.new, ConfB.new
114
+
115
+ jerry.rig :thing
116
+ #=> "from b"
117
+ ```
data/Rakefile ADDED
@@ -0,0 +1,5 @@
1
+ require 'bundler/gem_tasks'
2
+ require 'rspec/core/rake_task'
3
+
4
+ RSpec::Core::RakeTask.new :spec
5
+ task :default => :spec
data/jerry.gemspec ADDED
@@ -0,0 +1,25 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'jerry/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = 'jerry'
8
+ spec.version = Jerry::VERSION
9
+ spec.authors = ['Boris Bera']
10
+ spec.email = ['bboris@rsoft.ca']
11
+ spec.summary = %q{Jerry rigs your application together. It's an Inversion of Control container.}
12
+ spec.description = %q{Jerry is an Inversion of Control container. It allows you to decouple the code that bootstraps your application from the rest of your application}
13
+ spec.homepage = 'http://github.com/beraboris/jerry'
14
+ spec.license = 'MIT'
15
+
16
+ spec.files = `git ls-files -z`.split("\x0")
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ['lib']
20
+
21
+ spec.add_development_dependency 'bundler', '~> 1.6'
22
+ spec.add_development_dependency 'rake'
23
+ spec.add_development_dependency 'rspec', '~> 3.0.0'
24
+ spec.add_development_dependency 'yard', '~> 0.8.7.4'
25
+ end
@@ -0,0 +1,47 @@
1
+ require 'jerry/sugar'
2
+
3
+ class Jerry
4
+ # Base class for all jerry configs.
5
+ #
6
+ # It defines all of the instance methods for a config
7
+ #
8
+ # @abstract Subclass to define a config
9
+ # @example
10
+ # class MyConfig < Jerry::Config
11
+ # component(:service) { MyService.new }
12
+ # component(:app) { MyApp.new rig(:service) }
13
+ # end
14
+ # @see Jerry::Sugar injected class methods
15
+ class Config
16
+ # Injects Jerry::Sugar into inherited classes
17
+ def self.inherited(subclass)
18
+ subclass.send :extend, Jerry::Sugar
19
+ end
20
+
21
+ # @return [Array<Symbol>] list of components defined by the config
22
+ def components
23
+ self.class.components
24
+ end
25
+
26
+ # Jerry instance the config is part of
27
+ #
28
+ # This gets set by Jerry when it loads a config
29
+ attr_writer :jerry
30
+
31
+ protected
32
+
33
+ # Creates a component
34
+ def rig(component)
35
+ @jerry.rig component
36
+ end
37
+
38
+ # Check if given component exists
39
+ def knows?(component)
40
+ @jerry.knows? component
41
+ end
42
+
43
+ def cache
44
+ @cache ||= {}
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,41 @@
1
+ class Jerry
2
+ class ComponentError < StandardError; end
3
+
4
+ # Contains all the class helper methods that are injected when you inherit from Jerry::Config
5
+ module Sugar
6
+ # @return [Array<Symbol>] list of the components defined by the config
7
+ def components
8
+ @components ||= []
9
+ end
10
+
11
+ # Defines a component
12
+ #
13
+ # @param [Symbol] name name of the component
14
+ # @param [Hash] options options hash see supported options
15
+ # @option options [Symbol] (:single) The scope of the component. Can be either :single or :instance.
16
+ # When the scope is :single, only one instance of the component will be created and every call
17
+ # to Jerry#rig will return the same instance. When the scope is :instance, every call to Jerry#rig
18
+ # will return a new instance.
19
+ # @yield Block used to instantiate the component. This block in only called when Jerry#rig is called.
20
+ # @raise [Jerry::ComponentError] when the block is missing or the scope is invalid
21
+ def component(name, options={}, &block)
22
+ raise Jerry::ComponentError, "could not define component #{name}, block is missing" if block.nil?
23
+
24
+ scope = options[:scope] || :single
25
+ unless [:single, :instance].include? scope
26
+ raise Jerry::ComponentError, "could not define component #{name}, scope #{scope} is unknown"
27
+ end
28
+
29
+ define_method name do
30
+ case scope
31
+ when :single
32
+ cache[name] ||= instance_eval(&block)
33
+ when :instance
34
+ instance_eval(&block)
35
+ end
36
+ end
37
+
38
+ components << name
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,3 @@
1
+ class Jerry
2
+ VERSION = '1.0.0'
3
+ end
data/lib/jerry.rb ADDED
@@ -0,0 +1,52 @@
1
+ require 'jerry/version'
2
+ require 'jerry/config'
3
+
4
+ # Inversion of Control container.
5
+ #
6
+ # This class is in charge of bootstrapping your application. This is done by defining {Jerry::Config configs}.
7
+ #
8
+ # @example
9
+ # class MyConfig < Jerry::Config
10
+ # component(:app) { MyApp.new }
11
+ # end
12
+ # jerry = Jerry.new MyConfig.new
13
+ # jerry.rig :app #=> #<MyApp:...>
14
+ class Jerry
15
+ class RigError < StandardError; end
16
+
17
+ # @param [Jerry::Config] configs Configs used to rig components. Multiple config can be given. If two configs
18
+ # define the same component, the later one will have priority.
19
+ def initialize(*configs)
20
+ @index = {}
21
+
22
+ configs.each { |config| self << config }
23
+ end
24
+
25
+ # Load a config
26
+ #
27
+ # @param [Jerry::Config] config Config to be loaded. If the loaded config defines a component already defined
28
+ # by another config, the component from the new config will take priority.
29
+ def <<(config)
30
+ components = config.components
31
+ components.each { |component| @index[component] = config }
32
+ config.jerry = self
33
+ end
34
+
35
+ # Rigs a component
36
+ #
37
+ # @param [Symbol] component Component to rig.
38
+ # @return The component requested
39
+ # @raise [Jerry::RigError] when the requested component does not exist
40
+ def rig(component)
41
+ raise RigError, "could not find component #{component}" unless knows? component
42
+
43
+ @index[component].public_send component
44
+ end
45
+
46
+ # Checks if a component exists
47
+ #
48
+ # @param [Symbol] component component to check
49
+ def knows?(component)
50
+ @index.has_key? component
51
+ end
52
+ end
@@ -0,0 +1,64 @@
1
+ require 'rspec'
2
+ require 'jerry/config'
3
+
4
+ describe Jerry::Config do
5
+ let(:klass) {Class.new(Jerry::Config)}
6
+
7
+ it 'should extend the its subclass with Jerry::Sugar when inherited' do
8
+ expect(klass.singleton_class.included_modules).to include Jerry::Sugar
9
+ expect(klass).to respond_to :components
10
+ expect(klass).to respond_to :component
11
+ end
12
+
13
+ describe '#components' do
14
+ it 'should call the class contents method' do
15
+ instance = klass.new
16
+
17
+ expect(klass).to receive(:components).and_return([:something])
18
+
19
+ expect(instance.components).to eq([:something])
20
+ end
21
+ end
22
+
23
+ describe '#rig' do
24
+ it 'should call rig on the previously set jerry' do
25
+ jerry = double('jerry')
26
+ config = klass.new
27
+ config.jerry = jerry
28
+
29
+ expect(jerry).to receive(:rig).with(:target)
30
+
31
+ config.instance_eval { rig :target }
32
+ end
33
+
34
+ it 'should return the result from the jerry rig method' do
35
+ jerry = double('jerry')
36
+ allow(jerry).to receive(:rig).with(anything).and_return 42
37
+ config = klass.new
38
+ config.jerry = jerry
39
+
40
+ expect(config.instance_eval { rig :something }).to eq(42)
41
+ end
42
+ end
43
+
44
+ describe '#knows?' do
45
+ it 'should call the knows? method on the previously set jerry' do
46
+ jerry = double('jerry')
47
+ config = klass.new
48
+ config.jerry = jerry
49
+
50
+ expect(jerry).to receive(:knows?).with(:target)
51
+
52
+ config.instance_eval { knows? :target }
53
+ end
54
+
55
+ it 'should return the results from the jerry knows? method' do
56
+ jerry = double('jerry')
57
+ allow(jerry).to receive(:knows?).with(anything).and_return true
58
+ config = klass.new
59
+ config.jerry = jerry
60
+
61
+ expect(config.instance_eval { knows? :something }).to be_truthy
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,132 @@
1
+ require 'rspec'
2
+ require 'jerry'
3
+
4
+ describe Jerry do
5
+ it 'should work with all the pieces' do
6
+ house = Class.new do
7
+ attr_reader :window, :door
8
+
9
+ def initialize(window, door)
10
+ @window = window
11
+ @door = door
12
+ end
13
+ end
14
+ window = Class.new
15
+ door = Class.new
16
+
17
+ config = Class.new(Jerry::Config) do
18
+ component(:window) { window.new }
19
+ component(:door) { door.new }
20
+ component(:house) {
21
+ house.new rig(:window), rig(:door)
22
+ }
23
+ end
24
+ jerry = Jerry.new config.new
25
+
26
+ instance = jerry.rig :house
27
+
28
+ expect(instance).not_to be_nil
29
+ expect(instance).to be_a house
30
+ expect(instance.window).not_to be_nil
31
+ expect(instance.window).to be_a window
32
+ expect(instance.door).not_to be_nil
33
+ expect(instance.door).to be_a door
34
+ end
35
+
36
+ describe '#rig' do
37
+ it 'should raise error if the component does not exist' do
38
+ jerry = Jerry.new
39
+
40
+ expect{jerry.rig :not_actually_a_thing}.to raise_error(Jerry::RigError)
41
+ end
42
+
43
+ it 'should call the component method on the config' do
44
+ config = double('config', components: [:doomsday_device]).as_null_object
45
+ jerry = Jerry.new config
46
+
47
+ expect(config).to receive(:doomsday_device).with(no_args)
48
+
49
+ jerry.rig :doomsday_device
50
+ end
51
+
52
+ it 'should call the component method registered last' do
53
+ target = double('target')
54
+ jerry = Jerry.new double('old config', components: [:target]).as_null_object,
55
+ double('new config', components: [:target], target: target).as_null_object
56
+
57
+ component = jerry.rig :target
58
+
59
+ expect(component).to eq(target)
60
+ end
61
+ end
62
+
63
+ describe '#<<' do
64
+ let(:jerry) { Jerry.new }
65
+
66
+ it 'should fetch the config components' do
67
+ config = double('config').as_null_object
68
+
69
+ expect(config).to receive(:components).and_return([])
70
+
71
+ jerry << config
72
+ end
73
+
74
+ it 'should register components' do
75
+ config = double('config', components: [:target]).as_null_object
76
+
77
+ jerry << config
78
+
79
+ expect(jerry.knows? :target).to be_truthy
80
+ end
81
+
82
+ it 'should overwrite previous components' do
83
+ target = double('target')
84
+ config = double('config', components: [:target], target: target).as_null_object
85
+
86
+ jerry << config
87
+
88
+ expect(jerry.rig :target).to eq(target)
89
+ end
90
+
91
+ it 'should pass an instance of itself to the config' do
92
+ config = double('config', components: []).as_null_object
93
+
94
+ expect(config).to receive(:jerry=).with(jerry)
95
+
96
+ jerry << config
97
+ end
98
+ end
99
+
100
+ describe '#knows?' do
101
+ it 'should be true when the component is defined by a config' do
102
+ jerry = Jerry.new double('config', components: [:target]).as_null_object
103
+
104
+ expect(jerry.knows? :target).to be_truthy
105
+ end
106
+
107
+ it 'should be false if the component is defined by no config' do
108
+ jerry = Jerry.new double('config', components: [:not_target]).as_null_object
109
+
110
+ expect(jerry.knows? :target).to be_falsey
111
+ end
112
+ end
113
+
114
+ describe '#initialize' do
115
+ it 'should register all the config components' do
116
+ configs = 'a'.upto('c').map {|i| double("config #{i}", components: [i.to_sym]).as_null_object}
117
+ jerry = Jerry.new(*configs)
118
+
119
+ expect(jerry.knows? :a).to be_truthy
120
+ expect(jerry.knows? :b).to be_truthy
121
+ expect(jerry.knows? :c).to be_truthy
122
+ end
123
+
124
+ it 'should give priority to the components of later configs' do
125
+ target = double('target')
126
+ jerry = Jerry.new double('old config', components: [:target]).as_null_object,
127
+ double('new config', components: [:target], target: target).as_null_object
128
+
129
+ expect(jerry.rig :target).to eq(target)
130
+ end
131
+ end
132
+ end
@@ -0,0 +1,20 @@
1
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
2
+
3
+ silence_warnings do
4
+ require 'coveralls'
5
+ Coveralls.wear!
6
+ end
7
+
8
+ RSpec.configure do |config|
9
+ config.order = :random
10
+ Kernel.srand config.seed
11
+
12
+ config.expect_with :rspec do |expectations|
13
+ expectations.syntax = :expect
14
+ end
15
+
16
+ config.mock_with :rspec do |mocks|
17
+ mocks.syntax = :expect
18
+ mocks.verify_partial_doubles = true
19
+ end
20
+ end
@@ -0,0 +1,111 @@
1
+ require 'rspec'
2
+ require 'jerry/config'
3
+
4
+ describe Jerry::Sugar do
5
+ let(:sugar) {Class.new Jerry::Config}
6
+
7
+ describe '#component' do
8
+ it 'should create a method with the given name' do
9
+ sugar.component(:my_component) {}
10
+
11
+ expect(sugar.new).to respond_to(:my_component)
12
+ end
13
+
14
+ it 'should add the name to the list of components' do
15
+ sugar.component(:target) {}
16
+
17
+ expect(sugar.components).to include(:target)
18
+ end
19
+
20
+ it 'should raise an error when scope is unknown' do
21
+ expect{sugar.component(:target, scope: :not_a_thing) {}}.to raise_error(Jerry::ComponentError)
22
+ end
23
+
24
+ it 'should raise an error when block is missing' do
25
+ expect{sugar.component :target}.to raise_error(Jerry::ComponentError)
26
+ end
27
+
28
+ describe 'defined method' do
29
+ it 'should have the right self set' do
30
+ sugar.component(:_self) { self }
31
+ instance = sugar.new
32
+
33
+ expect(instance._self).not_to be_a Class
34
+ expect(instance._self).to be_a sugar
35
+ expect(instance._self).to eq(instance)
36
+ end
37
+
38
+ context 'with scope set to :single' do
39
+ it 'should only call the block once' do
40
+ call_count = 0
41
+ sugar.component(:target, scope: :single) {call_count += 1}
42
+ instance = sugar.new
43
+
44
+ 3.times {instance.target}
45
+
46
+ expect(call_count).to eq(1)
47
+ end
48
+
49
+ it 'should keep returning the first created component' do
50
+ call_count = 0
51
+ sugar.component(:target, scope: :single) {call_count += 1}
52
+ instance = sugar.new
53
+
54
+ expect(instance.target).to eq(1)
55
+ expect(instance.target).to eq(1)
56
+ expect(instance.target).to eq(1)
57
+ end
58
+ end
59
+
60
+ context 'with scope set to :instance' do
61
+ it 'should call the block every time' do
62
+ call_count = 0
63
+ sugar.component(:target, scope: :instance) {call_count += 1}
64
+ instance = sugar.new
65
+
66
+ 3.times {instance.target}
67
+
68
+ expect(call_count).to eq(3)
69
+ end
70
+
71
+ it 'should return a new instance every time' do
72
+ call_count = 0
73
+ sugar.component(:target, scope: :instance) {call_count += 1}
74
+ instance = sugar.new
75
+
76
+ expect(instance.target).to eq(1)
77
+ expect(instance.target).to eq(2)
78
+ expect(instance.target).to eq(3)
79
+ end
80
+ end
81
+
82
+ context 'with no scope' do
83
+ it 'should only call the block once' do
84
+ call_count = 0
85
+ sugar.component(:target) {call_count += 1}
86
+ instance = sugar.new
87
+
88
+ 3.times {instance.target}
89
+
90
+ expect(call_count).to eq(1)
91
+ end
92
+
93
+ it 'should keep returning the first created component' do
94
+ call_count = 0
95
+ sugar.component(:target) {call_count += 1}
96
+ instance = sugar.new
97
+
98
+ expect(instance.target).to eq(1)
99
+ expect(instance.target).to eq(1)
100
+ expect(instance.target).to eq(1)
101
+ end
102
+ end
103
+ end
104
+ end
105
+
106
+ describe '#components' do
107
+ it 'should default to an empty array' do
108
+ expect(sugar.components).to eq([])
109
+ end
110
+ end
111
+ end
@@ -0,0 +1,7 @@
1
+ def silence_warnings
2
+ original = $VERBOSE
3
+ $VERBOSE = nil
4
+ result = yield
5
+ $VERBOSE = original
6
+ result
7
+ end
metadata ADDED
@@ -0,0 +1,124 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: jerry
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Boris Bera
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-06-21 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.6'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.6'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 3.0.0
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 3.0.0
55
+ - !ruby/object:Gem::Dependency
56
+ name: yard
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: 0.8.7.4
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: 0.8.7.4
69
+ description: Jerry is an Inversion of Control container. It allows you to decouple
70
+ the code that bootstraps your application from the rest of your application
71
+ email:
72
+ - bboris@rsoft.ca
73
+ executables: []
74
+ extensions: []
75
+ extra_rdoc_files: []
76
+ files:
77
+ - ".gitignore"
78
+ - ".rspec"
79
+ - ".travis.yml"
80
+ - Gemfile
81
+ - LICENSE.txt
82
+ - README.md
83
+ - Rakefile
84
+ - jerry.gemspec
85
+ - lib/jerry.rb
86
+ - lib/jerry/config.rb
87
+ - lib/jerry/sugar.rb
88
+ - lib/jerry/version.rb
89
+ - spec/config_spec.rb
90
+ - spec/jerry_spec.rb
91
+ - spec/spec_helper.rb
92
+ - spec/sugar_spec.rb
93
+ - spec/support/silence_warnings.rb
94
+ homepage: http://github.com/beraboris/jerry
95
+ licenses:
96
+ - MIT
97
+ metadata: {}
98
+ post_install_message:
99
+ rdoc_options: []
100
+ require_paths:
101
+ - lib
102
+ required_ruby_version: !ruby/object:Gem::Requirement
103
+ requirements:
104
+ - - ">="
105
+ - !ruby/object:Gem::Version
106
+ version: '0'
107
+ required_rubygems_version: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - ">="
110
+ - !ruby/object:Gem::Version
111
+ version: '0'
112
+ requirements: []
113
+ rubyforge_project:
114
+ rubygems_version: 2.2.2
115
+ signing_key:
116
+ specification_version: 4
117
+ summary: Jerry rigs your application together. It's an Inversion of Control container.
118
+ test_files:
119
+ - spec/config_spec.rb
120
+ - spec/jerry_spec.rb
121
+ - spec/spec_helper.rb
122
+ - spec/sugar_spec.rb
123
+ - spec/support/silence_warnings.rb
124
+ has_rdoc: