mumukit-core 1.16.0 → 1.17.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c8762883c6da4331b8264e69ece0988c4f19e2b3abdcf12969b51676449cd215
4
- data.tar.gz: 882d86f7a47f655fc3c3786f0e013753aa27b40c82c1e4bb14620d62c5f2e425
3
+ metadata.gz: e155445df55585a847f88773beee7cc43efcb8da5d20e400c4151f25d4843538
4
+ data.tar.gz: 36bdd8bf00c694e8e54bc9205a3b01168e6bdb54308d5a96f9ffdd0a9868d17f
5
5
  SHA512:
6
- metadata.gz: 6dc88c3ff9aa3365a6edba10c6efebf81af43f3a5721d65b8c09640a232a9838fe59ebd793ab381ec46cb2bd59848b83c7a376d11003839a8a0aff7c5bffd60e
7
- data.tar.gz: 4e259211500f82fa937d911389e94403222d1fc7b006a81e9c21956c2004a714bfa431587a7a5f2afefac5922a737093d46b4ccd6e68486ffa0480056c87ff37
6
+ metadata.gz: 7868ff5fac67e2aca6e2d07699083bccb83ab5cc2c7a0912e34b73f4936a557c65db1cb5051e555c780e6470b73c81be61365e63ac344621d6c346ba7ed803d0
7
+ data.tar.gz: c0e664b65c2fc9f8f789f831982f44affa800c6edeaf593224236aaad4594bae0d08799ea4bb109febf07530e314115c991eea3b0534b85af54ce346ff78027e
@@ -3,12 +3,28 @@ require 'active_support/all'
3
3
 
4
4
  module Mumukit
5
5
  module Core
6
+ class << self
7
+ def test_mode!
8
+ Class.class_eval do
9
+ break if method_defined? :__mumukit_core_contract_new__
10
+ alias_method :__mumukit_core_contract_new__, :new
11
+
12
+ def new(*args, &block)
13
+ validate_complies_with_contract!
14
+ __mumukit_core_contract_new__(*args, &block)
15
+ end
16
+ end
17
+ end
18
+ end
6
19
  end
7
20
  end
8
21
 
22
+ Mumukit::Core.test_mode! if %w(RACK_ENV RAILS_ENV).any? { |it| ENV[it] == 'test' }
23
+
9
24
  require_relative './core/status'
10
25
  require_relative './core/object'
11
26
  require_relative './core/module'
27
+ require_relative './core/class'
12
28
  require_relative './core/json'
13
29
  require_relative './core/hash'
14
30
  require_relative './core/string'
@@ -0,0 +1,8 @@
1
+ class Class
2
+ class ContractBreachError < Exception
3
+ end
4
+
5
+ def validate_complies_with_contract!
6
+ raise ContractBreachError.new "class #{name} does not implement contract #{contract_breaches}!" if breaches_contract?
7
+ end
8
+ end
@@ -93,4 +93,26 @@ class Module
93
93
  raise "method #{selector} was not previously defined here" unless method_defined?(selector)
94
94
  define_method selector, &block
95
95
  end
96
+
97
+ def contract
98
+ @contract ||= []
99
+ end
100
+
101
+ attr_writer :contract
102
+
103
+ def implements(*selectors)
104
+ self.contract += selectors
105
+ end
106
+
107
+ def full_contract
108
+ ancestors.flat_map(&:contract).uniq
109
+ end
110
+
111
+ def breaches_contract?
112
+ !contract_breaches.empty?
113
+ end
114
+
115
+ def contract_breaches
116
+ full_contract.reject { |it| method_defined? it }
117
+ end
96
118
  end
@@ -1,4 +1,4 @@
1
- [:passed, :passed_with_warnings, :failed, :errored, :aborted].each do |sym|
1
+ [:passed, :passed_with_warnings, :failed, :errored, :aborted, :skipped].each do |sym|
2
2
  s = sym.to_s.freeze
3
3
  selector = "#{s}?"
4
4
  NilClass.class_eval do
@@ -1,5 +1,5 @@
1
1
  module Mumukit
2
2
  module Core
3
- VERSION = '1.16.0'
3
+ VERSION = '1.17.0'
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mumukit-core
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.16.0
4
+ version: 1.17.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Franco Leonardo Bulgarelli
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-08-09 00:00:00.000000000 Z
11
+ date: 2020-04-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.7'
19
+ version: '2.0'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '1.7'
26
+ version: '2.0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -148,6 +148,7 @@ files:
148
148
  - lib/mumukit/core.rb
149
149
  - lib/mumukit/core/activemodel.rb
150
150
  - lib/mumukit/core/array.rb
151
+ - lib/mumukit/core/class.rb
151
152
  - lib/mumukit/core/configurable.rb
152
153
  - lib/mumukit/core/file.rb
153
154
  - lib/mumukit/core/hash.rb