rietveld 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: 0f831ee5bab34effe5e45935530fa692b5148d03
4
+ data.tar.gz: 7249be7df3e42e3a8cc62872ea36c3ec8dfad061
5
+ SHA512:
6
+ metadata.gz: 5bb4ddb9985c21de6e899c26f6f2e4f6f2dbeb383bf73a65bd9490612a04292c5eaed5fe36c555ca267d7621877dee9a2443f53055eebc13fdf49895666f86f7
7
+ data.tar.gz: fa16fccfea98bc912b3601b6862ab6edec15369d15b72bb04fdc3060c5944bbb31b1d36311df7ad86b9307f30dac6ac726eacd53a6bf145ab97aaab62ecbef53
data/.gitignore ADDED
@@ -0,0 +1,17 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --format progress
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in ..gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2014 Marten Schilstra
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,13 @@
1
+ ## Installation
2
+
3
+ Add this line to your application's Gemfile:
4
+
5
+ gem 'rietveld'
6
+
7
+ And then execute:
8
+
9
+ $ bundle
10
+
11
+ Or install it yourself as:
12
+
13
+ $ gem install rietveld
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,32 @@
1
+ module Rietveld
2
+ class Context
3
+ class << self
4
+ def roles
5
+ @roles ||= {}
6
+ end
7
+
8
+ def role(role_name, &block)
9
+ roles[role_name] = Class.new(Rietveld::Role, &block)
10
+
11
+ define_method(role_name) do
12
+ instance_variable_get("@#{role_name}")
13
+ end
14
+ end
15
+ end
16
+
17
+ def roles
18
+ self.class.roles
19
+ end
20
+
21
+ def role?(name)
22
+ roles.key?(name)
23
+ end
24
+
25
+ def initialize(**args)
26
+ roles.each do |role_name, role_klass|
27
+ role_object = role_klass.new(args[role_name], self)
28
+ instance_variable_set("@#{role_name}", role_object)
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,365 @@
1
+ module Rietveld # :nodoc:
2
+
3
+ ##
4
+ # The Role class implements a DCI Role with the Delegator pattern.
5
+ #
6
+ # It tries to be as transparent as possible to the object it delegates to. For
7
+ # instance most BasicObject and Kernel methods are directly forwarded. Though
8
+ # methods concerning methods and / or instance variables return values from
9
+ # the delegator and the object it delegates to.
10
+
11
+ class Role < BasicObject
12
+ # Inherit from Basic Object and include Kernel, this is to avoid Rails
13
+ # injecting unwanted methods into our precious Role class
14
+ include ::Kernel
15
+
16
+ # The object acting out this role
17
+ attr_accessor :__role_player__
18
+
19
+ # Returns the context this role is playing in
20
+ attr_accessor :__context__
21
+
22
+ def initialize(role_player, context = nil)
23
+ self.__role_player__ = role_player
24
+ self.__context__ = context
25
+ end
26
+
27
+ # Returns the __role_player__ without its role object wrapping it.
28
+ def unwrap
29
+ __role_player__
30
+ end
31
+
32
+ # Returns the class of the role itself
33
+ alias_method :role_class, :class
34
+
35
+ # Gets a method defined on the role itself
36
+ alias_method :role_method, :method
37
+
38
+ # Get an array of methods defined on the role itself
39
+ alias_method :role_methods, :methods
40
+
41
+ # Get an array of protected methods defined on the role itself
42
+ alias_method :role_protected_methods, :protected_methods
43
+
44
+ # Get an array of public methods defined on the role itself
45
+ alias_method :role_public_methods, :public_methods
46
+
47
+ # Get an array of private methods defined on the role itself
48
+ alias_method :role_private_methods, :private_methods
49
+
50
+ # Is the other role equal? to this one
51
+ alias_method :role_equal?, :equal?
52
+
53
+ # Is the other role eql? to this one
54
+ alias_method :role_eql?, :eql?
55
+
56
+ # Get the hash for the role
57
+ alias_method :role_hash, :hash
58
+
59
+ # Gets the instance variables defined on the role itself
60
+ alias_method :role_instance_variables, :instance_variables
61
+
62
+ # Get an instance variable defined on the role
63
+ alias_method :role_instance_variable_get, :instance_variable_get
64
+
65
+ # Set an instance variable defined on the role
66
+ alias_method :role_instance_variable_set, :instance_variable_set
67
+
68
+ # Remove an instance variable defined on the role
69
+ alias_method :remove_role_instance_variable, :remove_instance_variable
70
+
71
+ # Is given instance variable defined on the role
72
+ alias_method :role_instance_variable_defined?, :instance_variable_defined?
73
+
74
+ # Get the singleton class of the role
75
+ alias_method :role_singleton_class, :singleton_class
76
+
77
+ # Gets the singleton methods defined on the role itself
78
+ alias_method :role_singleton_methods, :singleton_methods
79
+
80
+ # Gets a singleton method defined on the role itself
81
+ alias_method :role_singleton_method, :singleton_method
82
+
83
+ ##--
84
+ ## From BasicObject
85
+ ##++
86
+
87
+ # See BasicObject#==, forwarded to __role_player__
88
+ def ==(other)
89
+ __role_player__ == other
90
+ end
91
+
92
+ # See BasicObject#equal?, forwarded to __role_player__
93
+ def equal?(other)
94
+ __role_player__.equal?(other)
95
+ end
96
+
97
+ # See BasicObject#class, forwarded to __role_player__
98
+ def class
99
+ __role_player__.class
100
+ end
101
+
102
+ # See BasicObject#!, forwarded to __role_player__
103
+ def !
104
+ !__role_player__
105
+ end
106
+
107
+ # See BasicObject#!=, forwarded to __role_player__
108
+ def !=(other)
109
+ __role_player__ != other
110
+ end
111
+
112
+ private
113
+
114
+ # See BasicObject#singleton_method_added, forwarded to __role_player__
115
+ def singleton_method_added(sym)
116
+ __role_player__.singleton_method_added(sym)
117
+ end
118
+
119
+ # See BasicObject#singleton_method_removed, forwarded to __role_player__
120
+ def singleton_method_removed(sym)
121
+ __role_player__.singleton_method_removed(sym)
122
+ end
123
+
124
+ # See BasicObject#singleton_method_undefined, forwarded to __role_player__
125
+ def singleton_method_undefined(sym)
126
+ __role_player__.singleton_method_undefined(sym)
127
+ end
128
+
129
+ # If the role itself does not have a given method defined, it will try to
130
+ # delegate it to the role_player
131
+ def method_missing(name, *args, &block)
132
+ if __role_player__.respond_to?(name)
133
+ __role_player__.__send__(name, *args, &block)
134
+ elsif __context__.role?(name)
135
+ __context__.send(name)
136
+ else
137
+ super
138
+ end
139
+ end
140
+
141
+ public
142
+
143
+ # True if either role object or role_player responds to given method
144
+ def respond_to?(name, include_all = false)
145
+ __role_player__.respond_to?(name, include_all) || super
146
+ end
147
+
148
+ # True if either role object or role_player responds to given missing method
149
+ def respond_to_missing?(name, include_private = false)
150
+ __role_player__.respond_to_missing?(name, include_private) || super
151
+ end
152
+
153
+ ##--
154
+ ## From Kernel
155
+ ##++
156
+
157
+ # See Kernel#nil?, forwarded to __role_player__
158
+ def nil?
159
+ __role_player__.nil?
160
+ end
161
+
162
+ # See Kernel#===, forwarded to __role_player__
163
+ def ===(other)
164
+ __role_player__ === other
165
+ end
166
+
167
+ # See Kernel#=~, forwarded to __role_player__
168
+ def =~(other)
169
+ __role_player__ =~ other
170
+ end
171
+
172
+ # See Kernel#!~, forwarded to __role_player__
173
+ def !~(other)
174
+ __role_player__ !~ other
175
+ end
176
+
177
+ # See Kernel#eql?, forwarded to __role_player__
178
+ def eql?(other)
179
+ __role_player__.eql?(other)
180
+ end
181
+
182
+ # See Kernel#hash, forwarded to __role_player__
183
+ def hash
184
+ __role_player__.hash
185
+ end
186
+
187
+ # See Kernel#<=>, forwarded to __role_player__
188
+ def <=>(other)
189
+ __role_player__ <=> other
190
+ end
191
+
192
+ # Returns the class of the __role_player__
193
+ def class
194
+ __role_player__.class
195
+ end
196
+
197
+ # Returns the singleton_class of the __role_player__
198
+ def singleton_class
199
+ __role_player__.singleton_class
200
+ end
201
+
202
+ # Returns a clone of role object with a clone of the __role_player__
203
+ def clone
204
+ role_clone = super
205
+ role_clone.__role_player__ = __role_player__.clone
206
+ role_clone
207
+ end
208
+
209
+ # Returns a dup of __role_player__
210
+ def dup
211
+ __role_player__.dup
212
+ end
213
+
214
+ # See Kernel#taint, forwarded to __role_player__
215
+ def taint
216
+ super
217
+ __role_player__.taint
218
+ end
219
+
220
+ # See Kernel#tainted?, forwarded to __role_player__
221
+ def tainted?
222
+ super || __role_player__.tainted?
223
+ end
224
+
225
+ # See Kernel#untaint, forwarded to __role_player__
226
+ def untaint
227
+ super
228
+ __role_player__.untaint
229
+ end
230
+
231
+ # See Kernel#freeze, forwarded to __role_player__
232
+ def freeze
233
+ super
234
+ __role_player__.freeze
235
+ end
236
+
237
+ # See Kernel#unfreeze, forwarded to __role_player__
238
+ def unfreeze
239
+ super || __role_player__.frozen?
240
+ end
241
+
242
+ # See Kernel#to_s, forwarded to __role_player__
243
+ def to_s
244
+ __role_player__.to_s
245
+ end
246
+
247
+ # See Kernel#inspect, forwarded to __role_player__
248
+ #
249
+ # Returns a string in the form of:
250
+ # #<ExampleRole:0x37d837e #<ExampleObject>>
251
+ def inspect
252
+ "#<#{role_class.name}:0x#{__id__.to_s(16)} #{__role_player__.inspect}>"
253
+ end
254
+
255
+ # See Kernel#methods, returns the union of the methods from the role object
256
+ # and __role_player__
257
+ def methods
258
+ super | __role_player__.methods
259
+ end
260
+
261
+ # See Kernel#singleton_methods, returns the union of the singleton methods
262
+ # from the role object and __role_player__
263
+ def singleton_methods
264
+ __role_player__.singleton_methods
265
+ end
266
+
267
+ # See Kernel#protected_methods, returns the union of the protected_methods
268
+ # from the role object and __role_player__
269
+ def protected_methods
270
+ super | __role_player__.protected_methods
271
+ end
272
+
273
+ # See Kernel#private_methods, returns the union of the private_methods
274
+ # from the role object and __role_player__
275
+ def private_methods
276
+ super | __role_player__.private_methods
277
+ end
278
+
279
+ # See Kernel#private_methods, returns the union of the private_methods
280
+ # from the role object and __role_player__
281
+ def public_methods
282
+ super | __role_player__.public_methods
283
+ end
284
+
285
+ # See Kernel#instance_variables, returns the union of the instance_variables
286
+ # from the role object and __role_player__
287
+ def instance_variables
288
+ super | __role_player__.instance_variables
289
+ end
290
+
291
+ # See Kernel#instance_variable_get, prefers to return an instance variable
292
+ # defined on __role_player__, otherwise will lookup instance variables on
293
+ # role
294
+ def instance_variable_get(name)
295
+ __role_player__.instance_variable_get(name) || super
296
+ end
297
+
298
+ # See Kernel#instance_variable_set, prefers to set an instance variable
299
+ # on __role_player__, if an instance variable with the same name on the role
300
+ # object is already set, it wil set one on the role.
301
+ def instance_variable_set(name, value)
302
+ if role_instance_variable_defined?(name)
303
+ super
304
+ else
305
+ __role_player__.instance_variable_set(name, value)
306
+ end
307
+ end
308
+
309
+ # See Kernel#instance_variable_defined?, returns true if an instance
310
+ # variable is defined on either __role_player__ or the role object
311
+ def instance_variable_defined?(name)
312
+ super || __role_player__.instance_variable_defined?(name)
313
+ end
314
+
315
+ # See Kernel#remove_instance_variable, if the instance variable is defined
316
+ # on the role object, it wil remove that one, else it will remove one
317
+ # defined on __role_player__
318
+ def remove_instance_variable(name)
319
+ if role_instance_variable_defined?(name)
320
+ super
321
+ else
322
+ __role_player__.remove_instance_variable(name)
323
+ end
324
+ end
325
+
326
+ # See Kernel#instance_of?, forwarded to __role_player__
327
+ def instance_of?(type)
328
+ __role_player__.instance_of?(type)
329
+ end
330
+
331
+ # See Kernel#kind_of?, forwarded to __role_player__
332
+ def kind_of?(type)
333
+ __role_player__.kind_of?(type)
334
+ end
335
+
336
+ # See Kernel#is_a?, forwarded to __role_player__
337
+ def is_a?(type)
338
+ __role_player__.is_a?(type)
339
+ end
340
+
341
+ # See Kernel#method, if given method is defined on role object, it will
342
+ # return that one, otherwise the one from __role_player__
343
+ def method(name)
344
+ super
345
+ rescue
346
+ __role_player__.method(name)
347
+ end
348
+
349
+ # See Kernel#public_method, if given public_method is defined on role
350
+ # object, it will return that one, otherwise the one from __role_player__
351
+ def public_method(name)
352
+ super
353
+ rescue
354
+ __role_player__.public_method(name)
355
+ end
356
+
357
+ # See Kernel#singleton_method, if given singleton_method is defined on role
358
+ # object, it will return that one, otherwise the one from __role_player__
359
+ def singleton_method(name)
360
+ super
361
+ rescue
362
+ __role_player__.singleton_method(name)
363
+ end
364
+ end
365
+ end
@@ -0,0 +1,3 @@
1
+ module Rietveld
2
+ VERSION = "1.0.0"
3
+ end
data/lib/rietveld.rb ADDED
@@ -0,0 +1,6 @@
1
+ require 'rietveld/version'
2
+ require 'rietveld/role'
3
+ require 'rietveld/context'
4
+
5
+ module Rietveld
6
+ end
data/rietveld.gemspec ADDED
@@ -0,0 +1,26 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'rietveld/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "rietveld"
8
+ spec.version = Rietveld::VERSION
9
+ spec.authors = ["Marten Schilstra"]
10
+ spec.email = ["mail@martenschilstra.nl"]
11
+ spec.summary = %q{
12
+ A practical implementation of DCI for Ruby
13
+ }
14
+ spec.description = ""
15
+ spec.homepage = ""
16
+ spec.license = "MIT"
17
+
18
+ spec.files = `git ls-files -z`.split("\x0")
19
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
20
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
21
+ spec.require_paths = ["lib"]
22
+
23
+ spec.add_development_dependency 'bundler', '~> 1.5'
24
+ spec.add_development_dependency 'rake'
25
+ spec.add_development_dependency 'rspec', '~> 3.0.0beta'
26
+ end
@@ -0,0 +1,66 @@
1
+ require 'spec_helper'
2
+
3
+ class BankAccount
4
+ attr_accessor :balance
5
+
6
+ def initialize(initial_balance = 0)
7
+ self.balance = initial_balance
8
+ end
9
+
10
+ def increase_balance(amount)
11
+ self.balance += amount
12
+ end
13
+
14
+ def decrease_balance(amount)
15
+ increase_balance(-amount)
16
+ end
17
+ end
18
+
19
+ class MoneyTransferContext < Rietveld::Context
20
+ role :source_account do
21
+ def withdraw(amount)
22
+ if balance >= amount
23
+ decrease_balance(amount)
24
+ amount
25
+ else
26
+ raise 'Insufficient funds'
27
+ end
28
+ end
29
+
30
+ def transfer(amount)
31
+ destination_account.deposit(withdraw(amount))
32
+ end
33
+ end
34
+
35
+ role :destination_account do
36
+ def deposit(amount)
37
+ increase_balance(amount)
38
+ end
39
+ end
40
+
41
+ def transfer(amount)
42
+ source_account.transfer(amount)
43
+ end
44
+ end
45
+
46
+
47
+ describe MoneyTransferContext do
48
+ let(:source_account) { BankAccount.new(200) }
49
+ let(:destination_account) { BankAccount.new(100) }
50
+
51
+ let(:context) { MoneyTransferContext.new(
52
+ source_account: source_account,
53
+ destination_account: destination_account) }
54
+
55
+ context 'when transfering' do
56
+ before { context.transfer(50) }
57
+
58
+ it 'deposits given amount into destination account' do
59
+ expect(destination_account.balance).to be(150)
60
+ end
61
+
62
+ it 'withdraws given amount from source account' do
63
+ expect(source_account.balance).to be(150)
64
+ end
65
+ end
66
+ end
data/spec/role_spec.rb ADDED
@@ -0,0 +1,120 @@
1
+ require 'spec_helper'
2
+
3
+ class ExampleClass
4
+ def object_method
5
+ "object_method"
6
+ end
7
+
8
+ def set_object_instance_variable(val)
9
+ @object_instance_var = val
10
+ end
11
+
12
+ def get_object_instance_variable
13
+ @object_instance_var
14
+ end
15
+ end
16
+
17
+ class ExampleRole < Rietveld::Role
18
+ def role_method
19
+ object_method
20
+ end
21
+
22
+ def set_role_instance_variable(val)
23
+ @role_instance_var = val
24
+ end
25
+
26
+ def get_role_instance_variable
27
+ @role_instance_var
28
+ end
29
+ end
30
+
31
+ describe Rietveld::Role do
32
+ let(:object) { ExampleClass.new }
33
+ let(:role) { ExampleRole.new(object) }
34
+
35
+ context 'straight delegates' do
36
+ example '#==' do
37
+ expect(role == object).to be(object == object)
38
+ end
39
+
40
+ example '#equal?' do
41
+ expect(role.equal?(object)).to be(object.equal?(object))
42
+ end
43
+
44
+ example '#eql?' do
45
+ expect(role.eql?(object)).to be(object.eql?(object))
46
+ end
47
+
48
+ example '#class' do
49
+ expect(role.class).to be(object.class)
50
+ expect(role.class).to be(ExampleClass)
51
+ end
52
+ end
53
+
54
+ context 'hybrid delegates' do
55
+ describe '#methods' do
56
+ it 'should include methods of the role_player' do
57
+ expect(role.methods).to include(*object.methods)
58
+ end
59
+
60
+ it 'should include methods of the role' do
61
+ expect(role.methods).to include(*role.role_methods)
62
+ end
63
+
64
+ it 'should be a union of role_player and role methods' do
65
+ methods = role.role_methods | object.methods
66
+ expect(role.methods).to contain_exactly(*methods)
67
+ end
68
+ end
69
+ end
70
+
71
+ context 'delegation' do
72
+ it 'delegates to object methods' do
73
+ expect(role.object_method).to eq(object.object_method)
74
+ end
75
+
76
+ it 'responds to object methods' do
77
+ expect(role).to respond_to(:object_method)
78
+ end
79
+ end
80
+
81
+ context 'ivars' do
82
+ context 'belonging to object' do
83
+ before { object.set_object_instance_variable('test') }
84
+
85
+ it 'has #instance_variable_defined?' do
86
+ expect(role).to be_instance_variable_defined('@object_instance_var')
87
+ end
88
+
89
+ it 'can access with #instance_variable_get' do
90
+ expect(role.instance_variable_get('@object_instance_var')).to eq('test')
91
+ end
92
+
93
+ it 'can change with #instance_variable_set' do
94
+ role.instance_variable_set('@object_instance_var', 'changed')
95
+ expect(object.get_object_instance_variable).to eq('changed')
96
+ end
97
+ end
98
+
99
+ context 'belonging to role' do
100
+ before { role.set_role_instance_variable('test') }
101
+
102
+ it 'has #instance_variable_defined?' do
103
+ expect(role).to be_instance_variable_defined('@role_instance_var')
104
+ end
105
+
106
+ it 'object has not #instance_variable_defined?' do
107
+ expect(object).to_not be_instance_variable_defined('@role_instance_var')
108
+ end
109
+
110
+ it 'can access with #instance_variable_get' do
111
+ expect(role.instance_variable_get('@role_instance_var')).to eq('test')
112
+ end
113
+
114
+ it 'can change with #instance_variable_set' do
115
+ role.instance_variable_set('@role_instance_var', 'changed')
116
+ expect(role.get_role_instance_variable).to eq('changed')
117
+ end
118
+ end
119
+ end
120
+ end
@@ -0,0 +1,8 @@
1
+ require 'rietveld'
2
+
3
+ RSpec.configure do |config|
4
+ config.run_all_when_everything_filtered = true
5
+ config.filter_run :focus
6
+
7
+ config.order = 'random'
8
+ end
metadata ADDED
@@ -0,0 +1,103 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rietveld
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Marten Schilstra
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-04-02 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.5'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.5'
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.0beta
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.0beta
55
+ description: ''
56
+ email:
57
+ - mail@martenschilstra.nl
58
+ executables: []
59
+ extensions: []
60
+ extra_rdoc_files: []
61
+ files:
62
+ - ".gitignore"
63
+ - ".rspec"
64
+ - Gemfile
65
+ - LICENSE.txt
66
+ - README.md
67
+ - Rakefile
68
+ - lib/rietveld.rb
69
+ - lib/rietveld/context.rb
70
+ - lib/rietveld/role.rb
71
+ - lib/rietveld/version.rb
72
+ - rietveld.gemspec
73
+ - spec/example_context_specs/money_transfer_spec.rb
74
+ - spec/role_spec.rb
75
+ - spec/spec_helper.rb
76
+ homepage: ''
77
+ licenses:
78
+ - MIT
79
+ metadata: {}
80
+ post_install_message:
81
+ rdoc_options: []
82
+ require_paths:
83
+ - lib
84
+ required_ruby_version: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
89
+ required_rubygems_version: !ruby/object:Gem::Requirement
90
+ requirements:
91
+ - - ">="
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
94
+ requirements: []
95
+ rubyforge_project:
96
+ rubygems_version: 2.2.1
97
+ signing_key:
98
+ specification_version: 4
99
+ summary: A practical implementation of DCI for Ruby
100
+ test_files:
101
+ - spec/example_context_specs/money_transfer_spec.rb
102
+ - spec/role_spec.rb
103
+ - spec/spec_helper.rb