obvious 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/obvious.yml +1 -1
- data/CHANGELOG.md +19 -0
- data/Gemfile.lock +1 -16
- data/README.md +4 -35
- data/Rakefile +8 -0
- data/lib/obvious/contract.rb +30 -31
- data/lib/obvious/obj.rb +12 -14
- data/lib/obvious/version.rb +1 -1
- data/lib/obvious.rb +0 -1
- data/obvious.gemspec +4 -6
- data/test/contract_test.rb +62 -0
- data/test/entity_test.rb +76 -0
- data/test/obj_test.rb +65 -0
- metadata +16 -42
- data/bin/obvious +0 -7
- data/lib/generators/application_generator.rb +0 -199
- data/lib/generators/descriptor.rb +0 -131
- data/lib/generators/helpers/application.rb +0 -47
- data/lib/obvious/files/Rakefile +0 -4
- data/lib/obvious/files/external/fs_plug.rb +0 -99
- data/lib/obvious/files/external/mongo_plug.rb +0 -62
- data/lib/obvious/files/external/mysql_plug.rb +0 -38
- data/lib/obvious/files/external/s3_plug.rb +0 -94
- data/spec/.spec_helper.rb.swp +0 -0
- data/spec/contract_spec.rb +0 -63
- data/spec/entity_spec.rb +0 -75
- data/spec/generators/descriptor_spec.rb +0 -34
- data/spec/obj_spec.rb +0 -64
- data/spec/spec_helper.rb +0 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9a0c1346518213e685185d08916b2c573697ca5d6be5763f8cfe245febeac4f0
|
4
|
+
data.tar.gz: 2125df9f05284d2e34b16edb85ee14f73d1d1f2a296df90c7a2b4e2a795ab81f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1f8684fe2bc370eb3d2cec4933e3281a00b0633a5829cdee580b36632d330e6b71ba605612bd1ef5f5cfa6884ed66369a50117f68d3b1a9a9ec73a0c3e5bdfda
|
7
|
+
data.tar.gz: f393f71805593ff5b748477ebe9486148c356fdb73b1fb09f108453611ceabf4cce982768914c10de719012b0782659bf57ab4e91357871173551d60fb4503ff
|
data/CHANGELOG.md
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
# Changelog
|
2
|
+
|
3
|
+
All notable changes to this project will be documented in this file.
|
4
|
+
|
5
|
+
## [0.2.0]
|
6
|
+
|
7
|
+
### Added
|
8
|
+
|
9
|
+
### Changed
|
10
|
+
|
11
|
+
- Updated README to be current
|
12
|
+
- Removed generators from Obvious
|
13
|
+
- Refactored Obvious::Obj#define to be simpler
|
14
|
+
- Replaced RSPec with Minitest for testing
|
15
|
+
|
16
|
+
### Fixed
|
17
|
+
|
18
|
+
- Fixed namespace issues with Contract errors
|
19
|
+
- Updated project URL on Rubygems listing
|
data/Gemfile.lock
CHANGED
@@ -1,25 +1,11 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
obvious (0.
|
4
|
+
obvious (0.2.0)
|
5
5
|
|
6
6
|
GEM
|
7
7
|
remote: https://rubygems.org/
|
8
8
|
specs:
|
9
|
-
diff-lcs (1.5.0)
|
10
|
-
rspec (3.10.0)
|
11
|
-
rspec-core (~> 3.10.0)
|
12
|
-
rspec-expectations (~> 3.10.0)
|
13
|
-
rspec-mocks (~> 3.10.0)
|
14
|
-
rspec-core (3.10.1)
|
15
|
-
rspec-support (~> 3.10.0)
|
16
|
-
rspec-expectations (3.10.1)
|
17
|
-
diff-lcs (>= 1.2.0, < 2.0)
|
18
|
-
rspec-support (~> 3.10.0)
|
19
|
-
rspec-mocks (3.10.2)
|
20
|
-
diff-lcs (>= 1.2.0, < 2.0)
|
21
|
-
rspec-support (~> 3.10.0)
|
22
|
-
rspec-support (3.10.3)
|
23
9
|
|
24
10
|
PLATFORMS
|
25
11
|
ruby
|
@@ -28,7 +14,6 @@ PLATFORMS
|
|
28
14
|
|
29
15
|
DEPENDENCIES
|
30
16
|
obvious!
|
31
|
-
rspec
|
32
17
|
|
33
18
|
BUNDLED WITH
|
34
19
|
2.3.4
|
data/README.md
CHANGED
@@ -1,20 +1,9 @@
|
|
1
1
|
# Obvious
|
2
2
|
|
3
|
-
Obvious is an architecture framework. The goal is to provide architectural
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
You can get a full explanation of Obvious at http://obvious.retromocha.com
|
8
|
-
|
9
|
-
|
10
|
-
# Notice:
|
11
|
-
|
12
|
-
This project is no longer under active development is only made available for historical purposes.
|
13
|
-
|
14
|
-
Right now [Brian is working on a little of this](http://brianknapp.me/now/) and [Shawn is working on a little of that](http://shawnbaden.com/now/).
|
15
|
-
|
16
|
-
Most of our spare energy goes to the [Unbranded Pocket Notebook](https://www.amazon.com/dp/B00ZGE1914/) and the [Unbranded Pocket Journal](https://www.amazon.com/dp/B016LB2XYW).
|
17
|
-
|
3
|
+
Obvious is an architecture framework. The goal is to provide architectural
|
4
|
+
structure for a highly testable system that is obvious to understand and where
|
5
|
+
both the front end UI and back end infrastructure are treated as implementation
|
6
|
+
details independent of the app logic itself.
|
18
7
|
|
19
8
|
## Installation
|
20
9
|
|
@@ -25,23 +14,3 @@ Add this line to your application's Gemfile:
|
|
25
14
|
And then execute:
|
26
15
|
|
27
16
|
$ bundle
|
28
|
-
|
29
|
-
Or install it yourself as:
|
30
|
-
|
31
|
-
$ gem install obvious
|
32
|
-
|
33
|
-
## Usage
|
34
|
-
|
35
|
-
Obvious is designed to be used in two ways - as a gem you require in your Obvious projects and also as an Obvious project
|
36
|
-
generation tool.
|
37
|
-
|
38
|
-
The project generation tool is run by executing...
|
39
|
-
|
40
|
-
$ obvious generate
|
41
|
-
|
42
|
-
in a directory containing a decriptors directory. You can read more about descriptors on the Obvious page or see an example
|
43
|
-
in the Obvious Status example app: https://github.com/RetroMocha/obvious_status.
|
44
|
-
|
45
|
-
Currently the footprint of the Obvious library is quite small. The most important things defined so far are the Contract class
|
46
|
-
and the Hash.has_shape? method. The rest of what makes an Obvious app interesting is the structure itself, not the libraries Obvious
|
47
|
-
provides.
|
data/Rakefile
CHANGED
data/lib/obvious/contract.rb
CHANGED
@@ -94,8 +94,8 @@ module Obvious
|
|
94
94
|
def call_method method, input, input_shape, output_shape
|
95
95
|
if input != nil && input_shape != nil
|
96
96
|
has_shape, error_field = input.has_shape? input_shape, true
|
97
|
-
unless has_shape
|
98
|
-
raise ContractInputError, "incorrect input data format field #{error_field}"
|
97
|
+
unless has_shape
|
98
|
+
raise Obvious::ContractInputError, "incorrect input data format field #{error_field}"
|
99
99
|
end
|
100
100
|
|
101
101
|
result = self.send method, input
|
@@ -106,11 +106,11 @@ module Obvious
|
|
106
106
|
# check output
|
107
107
|
# output should never be nil
|
108
108
|
if result == nil
|
109
|
-
raise ContractOutputError, 'incorrect output data format'
|
109
|
+
raise Obvious::ContractOutputError, 'incorrect output data format'
|
110
110
|
end
|
111
111
|
|
112
112
|
if result === {}
|
113
|
-
raise DataNotFoundError, 'data was not found'
|
113
|
+
raise Obvious::DataNotFoundError, 'data was not found'
|
114
114
|
end
|
115
115
|
|
116
116
|
# we are looking for result to be a True object
|
@@ -118,7 +118,7 @@ module Obvious
|
|
118
118
|
if output_shape == result
|
119
119
|
return result
|
120
120
|
else
|
121
|
-
raise ContractOutputError, 'incorrect output data format'
|
121
|
+
raise Obvious::ContractOutputError, 'incorrect output data format'
|
122
122
|
end
|
123
123
|
end
|
124
124
|
|
@@ -128,20 +128,20 @@ module Obvious
|
|
128
128
|
inner_shape = output_shape[0]
|
129
129
|
result.each do |item|
|
130
130
|
has_shape, error_field = item.has_shape? inner_shape, true
|
131
|
-
unless has_shape
|
132
|
-
raise ContractOutputError, "incorrect output data format field #{error_field}"
|
131
|
+
unless has_shape
|
132
|
+
raise Obvious::ContractOutputError, "incorrect output data format field #{error_field}"
|
133
133
|
end
|
134
134
|
end
|
135
135
|
|
136
136
|
return result
|
137
137
|
end
|
138
|
-
raise ContractOutputError, 'incorrect output data format'
|
138
|
+
raise Obvious::ContractOutputError, 'incorrect output data format'
|
139
139
|
end
|
140
140
|
|
141
141
|
# we want result to be true or false
|
142
142
|
if output_shape == :true_false
|
143
143
|
unless result == true || result == false
|
144
|
-
raise ContractOutputError, 'incorrect output data format'
|
144
|
+
raise Obvious::ContractOutputError, 'incorrect output data format'
|
145
145
|
end
|
146
146
|
|
147
147
|
return result
|
@@ -149,8 +149,8 @@ module Obvious
|
|
149
149
|
|
150
150
|
# we want result to be output_shape's shape
|
151
151
|
has_shape, error_field = result.has_shape? output_shape, true
|
152
|
-
unless has_shape
|
153
|
-
raise ContractOutputError, "incorrect output data format field #{error_field}"
|
152
|
+
unless has_shape
|
153
|
+
raise Obvious::ContractOutputError, "incorrect output data format field #{error_field}"
|
154
154
|
end
|
155
155
|
|
156
156
|
result
|
@@ -158,6 +158,15 @@ module Obvious
|
|
158
158
|
|
159
159
|
end
|
160
160
|
|
161
|
+
|
162
|
+
class ContractInputError < StandardError
|
163
|
+
end
|
164
|
+
|
165
|
+
class ContractOutputError < StandardError
|
166
|
+
end
|
167
|
+
|
168
|
+
class DataNotFoundError < StandardError
|
169
|
+
end
|
161
170
|
end
|
162
171
|
|
163
172
|
# via https://github.com/citizen428/shenanigans/blob/master/lib/shenanigans/hash/has_shape_pred.rb
|
@@ -178,28 +187,28 @@ class Hash
|
|
178
187
|
if return_field
|
179
188
|
return r, f
|
180
189
|
else
|
181
|
-
return r
|
190
|
+
return r
|
182
191
|
end
|
183
192
|
}
|
184
|
-
|
193
|
+
|
185
194
|
# I added an empty check
|
186
195
|
if self.empty?
|
187
196
|
return return_value.call shape.empty?, nil
|
188
|
-
end
|
189
|
-
|
197
|
+
end
|
198
|
+
|
190
199
|
self.each do |k, v|
|
191
200
|
return return_value.call false, k if shape[k] == nil
|
192
|
-
end
|
201
|
+
end
|
193
202
|
|
194
203
|
shape.each do |k, v|
|
195
204
|
# hash_value
|
196
205
|
hv = self[k]
|
197
|
-
return return_value.call false, k unless self.has_key? k
|
206
|
+
return return_value.call false, k unless self.has_key? k
|
198
207
|
|
199
208
|
next if hv === nil
|
200
209
|
|
201
|
-
if Hash === hv
|
202
|
-
return hv.has_shape?(v, return_field)
|
210
|
+
if Hash === hv
|
211
|
+
return hv.has_shape?(v, return_field)
|
203
212
|
else
|
204
213
|
return return_value.call false, k unless v === hv
|
205
214
|
end
|
@@ -211,18 +220,8 @@ class Hash
|
|
211
220
|
def nil_fields? list
|
212
221
|
list.each do |field|
|
213
222
|
return true, field unless self[field]
|
214
|
-
end
|
215
|
-
|
223
|
+
end
|
224
|
+
|
216
225
|
return false, nil
|
217
226
|
end
|
218
227
|
end
|
219
|
-
|
220
|
-
class ContractInputError < StandardError
|
221
|
-
end
|
222
|
-
|
223
|
-
class ContractOutputError < StandardError
|
224
|
-
end
|
225
|
-
|
226
|
-
class DataNotFoundError < StandardError
|
227
|
-
end
|
228
|
-
|
data/lib/obvious/obj.rb
CHANGED
@@ -5,31 +5,29 @@ module Obvious
|
|
5
5
|
base.extend ClassMethods
|
6
6
|
end
|
7
7
|
end
|
8
|
-
|
8
|
+
|
9
9
|
module ClassMethods
|
10
10
|
|
11
|
-
def define method, input = {}, &block
|
12
|
-
define_method(method)
|
11
|
+
def define method, input = {}, &block
|
12
|
+
define_method(method) do |method_input = {}|
|
13
13
|
block_input = {}
|
14
|
-
method_input.each do |k,v|
|
15
|
-
if input[k].nil?
|
14
|
+
method_input.each do |k,v|
|
15
|
+
if input[k].nil?
|
16
16
|
raise ArgumentError.new "invalid input field #{k}"
|
17
|
-
end
|
18
|
-
|
19
|
-
unless v.is_a? input[k][1]
|
20
|
-
raise ArgumentError.new "invalid type for #{k} expected #{input[k][1]}"
|
21
|
-
end
|
17
|
+
end
|
22
18
|
|
23
|
-
|
19
|
+
unless v.is_a? input[k]
|
20
|
+
raise ArgumentError.new "invalid type for #{k} expected #{input[k]}"
|
21
|
+
end
|
24
22
|
end
|
25
|
-
|
23
|
+
|
26
24
|
input.each do |k,v|
|
27
|
-
if
|
25
|
+
if method_input[k].nil?
|
28
26
|
raise ArgumentError.new "missing input field #{k}"
|
29
27
|
end
|
30
28
|
end
|
31
29
|
|
32
|
-
self.instance_exec
|
30
|
+
self.instance_exec method_input, &block
|
33
31
|
end
|
34
32
|
end
|
35
33
|
|
data/lib/obvious/version.rb
CHANGED
data/lib/obvious.rb
CHANGED
data/obvious.gemspec
CHANGED
@@ -6,16 +6,14 @@ require 'obvious/version'
|
|
6
6
|
Gem::Specification.new do |gem|
|
7
7
|
gem.name = "obvious"
|
8
8
|
gem.version = Obvious::VERSION
|
9
|
-
gem.authors = ["Brian Knapp"]
|
10
|
-
gem.email = ["brianknapp@gmail.com"]
|
9
|
+
gem.authors = ["Brian Knapp", "Shawn Baden"]
|
10
|
+
gem.email = ["brianknapp@gmail.com", "shawnbaden@hotmail.com"]
|
11
11
|
gem.description = "A set of tools to build apps using the Obvious Architecture"
|
12
12
|
gem.summary = "Clean Architecture framework"
|
13
|
-
gem.homepage = "
|
14
|
-
|
13
|
+
gem.homepage = "https://github.com/RetroMocha/obvious"
|
14
|
+
gem.license = "MIT"
|
15
15
|
gem.files = `git ls-files`.split($/)
|
16
16
|
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
17
17
|
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
18
18
|
gem.require_paths = ["lib"]
|
19
|
-
|
20
|
-
gem.add_development_dependency "rspec"
|
21
19
|
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require_relative '../lib/obvious/contract'
|
3
|
+
|
4
|
+
class TestContract < Obvious::Contract
|
5
|
+
contract_for :test, {
|
6
|
+
input: { id: Integer },
|
7
|
+
output: { id: Integer, value: String }
|
8
|
+
}
|
9
|
+
|
10
|
+
def test input
|
11
|
+
{ id: 1, value: 'this is a test' }
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
class ContractTest < Minitest::Test
|
16
|
+
def test_valid_input
|
17
|
+
result = TestContract.new.test(id: 1)
|
18
|
+
assert_equal({id: 1, value: 'this is a test'}, result)
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_invalid_input
|
22
|
+
assert_raises Obvious::ContractInputError do
|
23
|
+
TestContract.new.test(Hash.new)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_empty_hash_return
|
28
|
+
assert_raises Obvious::DataNotFoundError do
|
29
|
+
tc = TestContract.new
|
30
|
+
tc.stub :test_alias, {} do
|
31
|
+
tc.test(id: 1)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_nil_return
|
37
|
+
assert_raises Obvious::ContractOutputError do
|
38
|
+
tc = TestContract.new
|
39
|
+
tc.stub :test_alias, nil do
|
40
|
+
tc.test(id: 1)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
class HashTest < Minitest::Test
|
47
|
+
def test_valid_has_shape
|
48
|
+
assert({id: 1}.has_shape?(id: Integer))
|
49
|
+
end
|
50
|
+
|
51
|
+
def test_invalid_has_shape
|
52
|
+
refute({id: 1}.has_shape?(id: String))
|
53
|
+
end
|
54
|
+
|
55
|
+
def test_has_shape_allow_nil_values
|
56
|
+
assert({id: nil}.has_shape?({id: String}))
|
57
|
+
end
|
58
|
+
|
59
|
+
def test_has_shape_return_invalid_field
|
60
|
+
assert_equal([false, :id], { id: 1 }.has_shape?({id: String}, true))
|
61
|
+
end
|
62
|
+
end
|
data/test/entity_test.rb
ADDED
@@ -0,0 +1,76 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require_relative '../lib/obvious/entity'
|
3
|
+
|
4
|
+
class Thing < Obvious::Entity
|
5
|
+
value :id, Integer
|
6
|
+
value :name, String
|
7
|
+
end
|
8
|
+
|
9
|
+
class Thing2 < Obvious::Entity
|
10
|
+
value :foo , String
|
11
|
+
|
12
|
+
validation :something, -> {
|
13
|
+
if foo != "hello world"
|
14
|
+
msg = "Validation Error: Invalid value for foo, should be 'hello world'"
|
15
|
+
raise Obvious::ValidationError.new msg
|
16
|
+
end
|
17
|
+
}
|
18
|
+
|
19
|
+
def modify_foo
|
20
|
+
@values[:foo] = 100
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
class Thing3 < Obvious::Entity
|
25
|
+
value :foo , String
|
26
|
+
|
27
|
+
validation :something, -> {
|
28
|
+
@values[:foo] = 12
|
29
|
+
}
|
30
|
+
end
|
31
|
+
|
32
|
+
|
33
|
+
# Test code begins here
|
34
|
+
|
35
|
+
class EntityTest < Minitest::Test
|
36
|
+
def test_valid_input
|
37
|
+
t = Thing.new(name: 'Thing', id: 1)
|
38
|
+
assert_equal('Thing', t.name)
|
39
|
+
assert_equal(1, t.id)
|
40
|
+
end
|
41
|
+
|
42
|
+
def test_invalid_input_types
|
43
|
+
assert_raises Obvious::TypeError do
|
44
|
+
Thing.new(name: nil, id: nil)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def test_invalid_extra_field
|
49
|
+
assert_raises Obvious::ShapeError do
|
50
|
+
Thing.new(name: 'Thing', id: 1, extra: 'should explode')
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
def test_method_modify_value
|
55
|
+
assert_raises RuntimeError do
|
56
|
+
Thing2.new(foo: 'hello world').modify_foo
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def test_to_hash
|
61
|
+
t = Thing.new(name: 'Thing', id: 1)
|
62
|
+
assert_equal({name: 'Thing', id: 1}, t.to_hash)
|
63
|
+
end
|
64
|
+
|
65
|
+
def test_failed_validation
|
66
|
+
assert_raises Obvious::ValidationError do
|
67
|
+
Thing2.new(foo: 'not valid I promise!')
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
def test_modify_value_inside_validation
|
72
|
+
assert_raises RuntimeError do
|
73
|
+
Thing3.new(foo: 'hello world')
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
data/test/obj_test.rb
ADDED
@@ -0,0 +1,65 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require_relative '../lib/obvious/obj'
|
3
|
+
|
4
|
+
class TestObj
|
5
|
+
include Obvious::Obj
|
6
|
+
|
7
|
+
def initialize
|
8
|
+
@local = 'set!'
|
9
|
+
end
|
10
|
+
|
11
|
+
define :defined_method, foo: String, bar: Integer do |input|
|
12
|
+
input
|
13
|
+
end
|
14
|
+
|
15
|
+
define :defined_local do |input|
|
16
|
+
@local
|
17
|
+
end
|
18
|
+
|
19
|
+
define :early_return_example do |input|
|
20
|
+
next true
|
21
|
+
false
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
class ObjTest < Minitest::Test
|
26
|
+
def test_valid_input
|
27
|
+
result = TestObj.new.defined_method foo: 'hello', bar: 12
|
28
|
+
assert_equal({foo: 'hello', bar: 12}, result)
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_access_instance_variables
|
32
|
+
result = TestObj.new.defined_local
|
33
|
+
assert_equal('set!', result)
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_missing_parameters
|
37
|
+
error = assert_raises ArgumentError do
|
38
|
+
TestObj.new.defined_method foo: 'hello'
|
39
|
+
end
|
40
|
+
assert_equal('missing input field bar', error.message)
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_extra_parameters
|
44
|
+
error = assert_raises ArgumentError do
|
45
|
+
TestObj.new.defined_method foo: 'hello', bar: 12, extra: 'fail'
|
46
|
+
end
|
47
|
+
assert_equal('invalid input field extra', error.message)
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_invalid_types
|
51
|
+
error = assert_raises ArgumentError do
|
52
|
+
TestObj.new.defined_method foo: 1, bar: 12
|
53
|
+
end
|
54
|
+
assert_equal('invalid type for foo expected String', error.message)
|
55
|
+
|
56
|
+
error = assert_raises ArgumentError do
|
57
|
+
TestObj.new.defined_method foo: 'hello', bar: nil
|
58
|
+
end
|
59
|
+
assert_equal('invalid type for bar expected Integer', error.message)
|
60
|
+
end
|
61
|
+
|
62
|
+
def test_early_return
|
63
|
+
assert(TestObj.new.early_return_example)
|
64
|
+
end
|
65
|
+
end
|
metadata
CHANGED
@@ -1,67 +1,44 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: obvious
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brian Knapp
|
8
|
+
- Shawn Baden
|
8
9
|
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
|
-
date: 2022-
|
12
|
-
dependencies:
|
13
|
-
- !ruby/object:Gem::Dependency
|
14
|
-
name: rspec
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - ">="
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '0'
|
20
|
-
type: :development
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - ">="
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: '0'
|
12
|
+
date: 2022-02-02 00:00:00.000000000 Z
|
13
|
+
dependencies: []
|
27
14
|
description: A set of tools to build apps using the Obvious Architecture
|
28
15
|
email:
|
29
16
|
- brianknapp@gmail.com
|
30
|
-
|
31
|
-
|
17
|
+
- shawnbaden@hotmail.com
|
18
|
+
executables: []
|
32
19
|
extensions: []
|
33
20
|
extra_rdoc_files: []
|
34
21
|
files:
|
35
22
|
- ".github/workflows/obvious.yml"
|
36
23
|
- ".gitignore"
|
24
|
+
- CHANGELOG.md
|
37
25
|
- Gemfile
|
38
26
|
- Gemfile.lock
|
39
27
|
- LICENSE.txt
|
40
28
|
- README.md
|
41
29
|
- Rakefile
|
42
|
-
- bin/obvious
|
43
|
-
- lib/generators/application_generator.rb
|
44
|
-
- lib/generators/descriptor.rb
|
45
|
-
- lib/generators/helpers/application.rb
|
46
30
|
- lib/obvious.rb
|
47
31
|
- lib/obvious/contract.rb
|
48
32
|
- lib/obvious/entity.rb
|
49
|
-
- lib/obvious/files/Rakefile
|
50
|
-
- lib/obvious/files/external/fs_plug.rb
|
51
|
-
- lib/obvious/files/external/mongo_plug.rb
|
52
|
-
- lib/obvious/files/external/mysql_plug.rb
|
53
|
-
- lib/obvious/files/external/s3_plug.rb
|
54
33
|
- lib/obvious/obj.rb
|
55
34
|
- lib/obvious/version.rb
|
56
35
|
- obvious.gemspec
|
57
|
-
-
|
58
|
-
-
|
59
|
-
-
|
60
|
-
|
61
|
-
|
62
|
-
-
|
63
|
-
homepage: http://obvious.retromocha.com/
|
64
|
-
licenses: []
|
36
|
+
- test/contract_test.rb
|
37
|
+
- test/entity_test.rb
|
38
|
+
- test/obj_test.rb
|
39
|
+
homepage: https://github.com/RetroMocha/obvious
|
40
|
+
licenses:
|
41
|
+
- MIT
|
65
42
|
metadata: {}
|
66
43
|
post_install_message:
|
67
44
|
rdoc_options: []
|
@@ -83,9 +60,6 @@ signing_key:
|
|
83
60
|
specification_version: 4
|
84
61
|
summary: Clean Architecture framework
|
85
62
|
test_files:
|
86
|
-
-
|
87
|
-
-
|
88
|
-
-
|
89
|
-
- spec/generators/descriptor_spec.rb
|
90
|
-
- spec/obj_spec.rb
|
91
|
-
- spec/spec_helper.rb
|
63
|
+
- test/contract_test.rb
|
64
|
+
- test/entity_test.rb
|
65
|
+
- test/obj_test.rb
|