mumukit-core 1.16.0 → 1.17.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 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