universum 0.5.0 → 0.5.1

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
  SHA1:
3
- metadata.gz: 9961651cc18f32bfc222fef5624575241469923a
4
- data.tar.gz: ab74188d3a3324451981a8f67693ae494265ff39
3
+ metadata.gz: b8948db2f1aea78f74fb4f7b28cb3fc9a71305f5
4
+ data.tar.gz: c30a20c747c63c936198d708d577ee83814c5cff
5
5
  SHA512:
6
- metadata.gz: 8317f92d3e8ad3e96f28fc29da3eb7964f624c443f1cc315fac1bcceb9a943a8894f29643c847254c0b8a5be2861e319f408147e88ecf020878d6736460098d6
7
- data.tar.gz: 88481a56b4b6675c2039122b4dca23ec241f9c7fc5882e3c614726ba9201cb1bece06b5d2c14db8cbef250edf3ba87cf05bb6e64be2ac90783232c81ef860178
6
+ metadata.gz: c558a3f8bc24ad303de084f126bf75b7d7cb40c32d6ba8311cb7afbd959072fa8777b6c84ee339b735db91fa79f35af2a926cd16a1fdb7d012b255c58ff00258
7
+ data.tar.gz: 0dd4ed89cf4fe5d82b725c5fe6dde84b92b9488caf03c3acef08de94323fb3048fdf5545ff3cd79539cb9b2d93a8e7ec14c797c17b5e5cb89ae5d3ceabc81a35
data/Rakefile CHANGED
@@ -18,8 +18,8 @@ Hoe.spec 'universum' do
18
18
  self.history_file = 'CHANGELOG.md'
19
19
 
20
20
  self.extra_deps = [
21
- ['safestruct', '>=1.2.0'],
22
- ['units-time', '>=1.0.2'],
21
+ ['safestruct', '>=1.2.2'],
22
+ ['units-time', '>=1.1.0'],
23
23
  ['units-money', '>=0.1.1'],
24
24
  ]
25
25
 
@@ -105,15 +105,24 @@ class Contract
105
105
  # def receive ## @payable default fallback - use different name - why? why not? (e.g. handle/process/etc.)
106
106
  # end
107
107
 
108
- def assert( condition )
108
+
109
+ ####
110
+ ### todo/fix: use module Assertions and include in contract class
111
+ def assert( condition, message=nil )
112
+ ## note: use message to avoid conflict with msg helper/builtin in contract!!!
109
113
  if condition == true
110
114
  ## do nothing
111
115
  else
112
- raise 'Contract Assertion Failed; Contract Halted (Stopped)'
116
+ if message
117
+ raise "Contract Assertion Failed; Contract Halted (Stopped): #{message}"
118
+ else
119
+ raise 'Contract Assertion Failed; Contract Halted (Stopped)'
120
+ end
113
121
  end
114
122
  end
115
123
 
116
124
 
125
+
117
126
  def log( event ) Universum.log( event ); end
118
127
  def msg() Universum.msg; end
119
128
  def block() Universum.block; end
@@ -1,8 +1,11 @@
1
1
  # encoding: utf-8
2
2
 
3
- ###
4
- # e.g. use Address(0)
5
3
 
4
+ ## note: put all "global" Kernel converter methods into Kernel module
5
+ module Kernel
6
+
7
+ ###
8
+ # e.g. use Address(0)
6
9
  def Address( arg )
7
10
  if arg == 0 || arg == '0x0' || arg == '0x0000'
8
11
  '0x0000' ## note: return a string for now and NOT (typed) Address.zero
@@ -16,11 +19,4 @@ def Address( arg )
16
19
  end
17
20
  end
18
21
 
19
-
20
-
21
- ###
22
- ## todo - add a global method_missing handler for (auto-)adding converters for Structs - why? why not?
23
- ## e.g. how to auto-create Vote(0) for Vote.zero or Bet(0) for Bet.zero and so on - why? why not?
24
- ##
25
- ## def Vote( arg ) Vote.zero; end
26
-
22
+ end # module Kernel
@@ -4,7 +4,7 @@
4
4
  ## auto-create/builds struct-like class.
5
5
  ##
6
6
  ## Example:
7
- ## Roll = Event.new( :id, :rolled )
7
+ ## Event.new( :Roll, :id, :rolled )
8
8
  ## auto-creates/builds:
9
9
  ##
10
10
  ## class Event; end
@@ -23,6 +23,7 @@
23
23
  ## pp roll.rolled #=> 2345
24
24
 
25
25
 
26
+ module Safe
26
27
  ## base class for events
27
28
  class Event
28
29
  ## return a new Struct-like read-only class
@@ -30,7 +31,7 @@ class Event
30
31
  ###################
31
32
  ## meta-programming "macro" - build class (on the fly)
32
33
  ##
33
- def self.build_class( *fields )
34
+ def self.build_class( class_name, *fields )
34
35
  klass = Class.new( Event ) do
35
36
  define_method( :initialize ) do |*args|
36
37
  fields.zip( args ).each do |field, arg|
@@ -51,6 +52,10 @@ class Event
51
52
  old_new( *args )
52
53
  end
53
54
 
55
+ ## note: use Safe (module) and NOT Object for namespacing
56
+ ## use include Safe to make all structs global
57
+ Safe.const_set( class_name, klass ) ## returns klass (plus sets global constant class name)
58
+
54
59
  klass
55
60
  end
56
61
 
@@ -59,3 +64,21 @@ class Event
59
64
  alias_method :new, :build_class # replace original version with create
60
65
  end
61
66
  end # class Event
67
+
68
+ module SafeHelper
69
+ def event( class_name, *args )
70
+ ########################################
71
+ # note: lets you use:
72
+ # enum :Color, :red, :green, :blue
73
+ # -or-
74
+ # enum :Color, [:red, :green, :blue]
75
+ if args[0].is_a?( Array )
76
+ fields = args[0]
77
+ else
78
+ fields = args
79
+ end
80
+
81
+ Event.new( class_name, *fields )
82
+ end
83
+ end # module SafeHelper
84
+ end # module Safe
@@ -8,7 +8,7 @@ class Universum
8
8
 
9
9
  MAJOR = 0
10
10
  MINOR = 5
11
- PATCH = 0
11
+ PATCH = 1
12
12
  VERSION = [MAJOR,MINOR,PATCH].join('.')
13
13
 
14
14
  def self.version
@@ -1,13 +1,15 @@
1
1
  #########################
2
2
  # Ballot Contract
3
3
 
4
- Struct.new( :Voter,
5
- weight: 0,
6
- voted: false,
7
- vote: 0,
8
- delegate: Address(0))
4
+ struct :Voter,
5
+ weight: 0,
6
+ voted: false,
7
+ vote: 0,
8
+ delegate: Address(0)
9
+
10
+ struct :Proposal,
11
+ vote_count: 0
9
12
 
10
- Struct.new( :Proposal, vote_count: 0 )
11
13
 
12
14
  ## Create a new ballot with $(num_proposals) different proposals.
13
15
  def setup( num_proposals )
@@ -9,9 +9,12 @@ require 'helper'
9
9
 
10
10
 
11
11
  class TestEvent < MiniTest::Test
12
+ include Safe
12
13
 
13
- BetPlaced = Event.new( :id, :user, :cap, :amount )
14
- Roll = Event.new( :id, :rolled )
14
+ ## Event.new( :BetPlaced, :id, :user, :cap, :amount )
15
+ ## Event.new( :Roll, :id, :rolled )
16
+ event :BetPlaced, :id, :user, :cap, :amount
17
+ event :Roll, :id, :rolled
15
18
 
16
19
 
17
20
  def test_bet_placed
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: universum
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.5.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gerald Bauer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-03-10 00:00:00.000000000 Z
11
+ date: 2019-03-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: safestruct
@@ -16,28 +16,28 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 1.2.0
19
+ version: 1.2.2
20
20
  type: :runtime
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.2.0
26
+ version: 1.2.2
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: units-time
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: 1.0.2
33
+ version: 1.1.0
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: 1.0.2
40
+ version: 1.1.0
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: units-money
43
43
  requirement: !ruby/object:Gem::Requirement