sbuilder-ial 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/VERSION +1 -0
- data/lib/action/exception.rb +13 -0
- data/lib/action/extender.rb +30 -0
- data/lib/action/file_path.rb +35 -0
- data/lib/action/model_builder.rb +74 -0
- data/lib/action/render/exception.rb +12 -0
- data/lib/action/render/producer.rb +193 -0
- data/lib/action/render/producer_ethereum.rb +404 -0
- data/lib/action/render/producer_ethereum_const.rb +221 -0
- data/lib/action/render/renderer.rb +142 -0
- data/lib/action/render/tla_element_generator.rb +1306 -0
- data/lib/action/script_eval.rb +32 -0
- data/lib/action/text.rb +17 -0
- data/lib/action/tla_rules.rb +512 -0
- data/lib/action/translator.rb +160 -0
- data/lib/app/app.rb +259 -0
- data/lib/ethereum/api.rb +669 -0
- data/lib/ethereum.rb +1 -0
- data/lib/fp/compositable.rb +185 -0
- data/lib/fp/error.rb +19 -0
- data/lib/fp/exception.rb +9 -0
- data/lib/fp/result.rb +19 -0
- data/lib/fp/sequence.rb +65 -0
- data/lib/ial/build.rb +12 -0
- data/lib/ial/exception.rb +13 -0
- data/lib/model/constants.rb +72 -0
- data/lib/model/model.rb +74 -0
- data/lib/model/model_dsl.rb +1038 -0
- data/lib/model/sexp.rb +58 -0
- data/lib/plugin/plugin.rb +273 -0
- data/lib/sbuilder-ial.rb +44 -0
- data/lib/utils/logger.rb +82 -0
- data/sbuilder-ial.gemspec +36 -0
- metadata +137 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: adc5f01a4ed93c98bd2b23bdd27c918d4afae217
|
4
|
+
data.tar.gz: d33fea2b83e302205afbdc53c5f3dc68cd50f1fc
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 721d8942e0cd0802840f415e5b1137eca3de78949d3d332391429eccd0a37d0c1a294048ded007a09e977937f7819be0d9256d4d855eaf0d90e706ebbad06569
|
7
|
+
data.tar.gz: bc3102e19c1f065fe7486e5098871df145f23415e2f67fcb74e68dfff968fe713a1496c507fe5be5967480f6ee74d65ce8fe5e91694817f568d2c984b310032b
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.0.1
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module Sbuilder
|
2
|
+
module Ial
|
3
|
+
module Action
|
4
|
+
|
5
|
+
# not catched in 'Fp'
|
6
|
+
class ExtenderException < ActionException; end
|
7
|
+
# catched in 'Fp'
|
8
|
+
class ExtenderError < ActionError; end
|
9
|
+
|
10
|
+
class Extender
|
11
|
+
|
12
|
+
# start in application mode
|
13
|
+
def self.start
|
14
|
+
extender = Extender.new
|
15
|
+
extender
|
16
|
+
end
|
17
|
+
|
18
|
+
def defineDomain( domainDefinition )
|
19
|
+
warn "#{__method__}: Not implemented domainDefinition=#{domainDefinition}"
|
20
|
+
end
|
21
|
+
|
22
|
+
def defineSnippet( metatype, appName, snippetBody, specName )
|
23
|
+
warn "#{__method__}: Not implemented snippetBody =#{snippetBody}"
|
24
|
+
end
|
25
|
+
|
26
|
+
end # class
|
27
|
+
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
##
|
2
|
+
# A compositable wrapping a string pointing to a file, with a method
|
3
|
+
# 'readlines' to slurp file content to an array.
|
4
|
+
|
5
|
+
module Sbuilder
|
6
|
+
module Ial
|
7
|
+
module Action
|
8
|
+
|
9
|
+
class FilePath
|
10
|
+
|
11
|
+
def self.from_string( str )
|
12
|
+
File.exist?( str ) ? new( str ) : new( Error( "Error: trying to access a non existing file #{str}" ))
|
13
|
+
end
|
14
|
+
|
15
|
+
# @return [String:Array] lines
|
16
|
+
def readlines( filename = nil )
|
17
|
+
filename = value if filename.nil?
|
18
|
+
File.readlines( filename )
|
19
|
+
end
|
20
|
+
|
21
|
+
|
22
|
+
# # @return [String|Error] content of file name wrapped OR error
|
23
|
+
# def to_s
|
24
|
+
# return Error(value) if isError
|
25
|
+
# File.open( value, 'rb' ).read
|
26
|
+
# end
|
27
|
+
|
28
|
+
include Sbuilder::Fp::Compositable
|
29
|
+
|
30
|
+
end
|
31
|
+
|
32
|
+
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,74 @@
|
|
1
|
+
module Sbuilder
|
2
|
+
module Ial
|
3
|
+
module Action
|
4
|
+
class ModelBuilder
|
5
|
+
|
6
|
+
# # @attr [Sbuilder::Ial::Action::Validator] validator
|
7
|
+
# attr_accessor :validator
|
8
|
+
|
9
|
+
def self.start
|
10
|
+
parser = ModelBuilder.new( Sbuilder::Ial::Model::Model.start )
|
11
|
+
# parser.validator = Sbuilder::Ial::Action::Validator.start
|
12
|
+
parser
|
13
|
+
end
|
14
|
+
|
15
|
+
|
16
|
+
# ------------------------------------------------------------------
|
17
|
+
# parseSexps && parseSexp
|
18
|
+
|
19
|
+
# Wrap result of 'validator.updateVo' to Result/Error
|
20
|
+
# compositable
|
21
|
+
def updateVo( vo )
|
22
|
+
Sbuilder::Fp.Result(vo)
|
23
|
+
# begin
|
24
|
+
# updatedVoret = validator.updateVo( getModel, vo )
|
25
|
+
# ret = Sbuilder::Fp.Result( updatedVoret )
|
26
|
+
# rescue PropertyError => err
|
27
|
+
# ret = Sbuilder::Fp.Error( err )
|
28
|
+
# end
|
29
|
+
# ret
|
30
|
+
end
|
31
|
+
|
32
|
+
|
33
|
+
# Currently no-operation
|
34
|
+
def validateVo( vo )
|
35
|
+
Sbuilder::Fp.Result(vo)
|
36
|
+
# begin
|
37
|
+
# validationResult = validator.validateVo( getModel, vo )
|
38
|
+
# ret = validationResult ? Result( vo ) : Error( vo )
|
39
|
+
# rescue PropertyError => err
|
40
|
+
# ret = Sbuilder::Fp.Error( err )
|
41
|
+
# end
|
42
|
+
# ret
|
43
|
+
end
|
44
|
+
|
45
|
+
# ------------------------------------------------------------------
|
46
|
+
# defineVo && defineVos
|
47
|
+
|
48
|
+
def defineVo( vo )
|
49
|
+
return if vo.nil?
|
50
|
+
value.define( vo.type, vo.name, vo )
|
51
|
+
vo
|
52
|
+
# self
|
53
|
+
end
|
54
|
+
def defineVos( vos )
|
55
|
+
defined = vos.map { |vo| defineVo( vo ) }
|
56
|
+
# Sbuilder::Fp.Result( value )
|
57
|
+
end
|
58
|
+
|
59
|
+
# @return [Result(Sbuilder::Ial::Model::Model)] model being build using 'defineVo'
|
60
|
+
def getModelBuilt
|
61
|
+
Sbuilder::Fp.Result( getModel )
|
62
|
+
end
|
63
|
+
|
64
|
+
def getModel
|
65
|
+
value
|
66
|
+
end
|
67
|
+
|
68
|
+
include Sbuilder::Fp::Compositable
|
69
|
+
|
70
|
+
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
@@ -0,0 +1,193 @@
|
|
1
|
+
module Sbuilder
|
2
|
+
module Ial
|
3
|
+
module Action
|
4
|
+
module Render
|
5
|
+
|
6
|
+
class Producer
|
7
|
+
|
8
|
+
extend Forwardable # for easy delegation
|
9
|
+
|
10
|
+
def_delegators :tla,
|
11
|
+
:partials, # @attr [Hash]
|
12
|
+
# tla code rendering
|
13
|
+
:gen_empty_set,
|
14
|
+
:gen_set,
|
15
|
+
:gen_sequence,
|
16
|
+
:gen_list,
|
17
|
+
:gen_nilElement,
|
18
|
+
:gen_op_set_minus,
|
19
|
+
:gen_operator,
|
20
|
+
:gen_macro_call,
|
21
|
+
:gen_operator_call,
|
22
|
+
:gen_expression2,
|
23
|
+
:gen_identifier,
|
24
|
+
:gen_service_name,
|
25
|
+
:gen_state_variable,
|
26
|
+
:gen_record_definition,
|
27
|
+
:gen_name_op_operand,
|
28
|
+
# names
|
29
|
+
:gen_specname,
|
30
|
+
:gen_interface_input_variable_name,
|
31
|
+
:gen_interface_abort_label,
|
32
|
+
:gen_interface_fail_label,
|
33
|
+
:gen_interface_end_label,
|
34
|
+
:gen_plainname,
|
35
|
+
#
|
36
|
+
:gen_constant,
|
37
|
+
:gen_str,
|
38
|
+
:gen_parenthesis,
|
39
|
+
# :gen_service_entry,
|
40
|
+
:gen_service_procedure,
|
41
|
+
:gen_free_text,
|
42
|
+
:gen_debug_msg,
|
43
|
+
:gen_print,
|
44
|
+
:gen_assert,
|
45
|
+
:gen_commented,
|
46
|
+
:gen_traced_stmt,
|
47
|
+
:gen_labeled_stmt, # add label to stmt
|
48
|
+
:gen_label, # skip which is followed by label
|
49
|
+
:gen_label_it, # wrapts stmt to require label after
|
50
|
+
:gen_goto,
|
51
|
+
:gen_either,
|
52
|
+
:gen_skip,
|
53
|
+
# :gen_check_resume,
|
54
|
+
:gen_assign,
|
55
|
+
:gen_record_field_definition,
|
56
|
+
:gen_record_named_field,
|
57
|
+
:gen_record_field,
|
58
|
+
:gen_stmts,
|
59
|
+
:gen_operator_dummy,
|
60
|
+
:gen_construct_contract,
|
61
|
+
:gen_new_record,
|
62
|
+
:gen_procedure_call,
|
63
|
+
:gen_if,
|
64
|
+
:gen_not,
|
65
|
+
:gen_IF,
|
66
|
+
:gen_TRUE,
|
67
|
+
:gen_FALSE,
|
68
|
+
:gen_EXCEPT,
|
69
|
+
:gen_and,
|
70
|
+
:gen_bin_op,
|
71
|
+
:gen_unary_op,
|
72
|
+
:gen_set_iterate,
|
73
|
+
:gen_set_map,
|
74
|
+
:gen_macro,
|
75
|
+
:gen_serviceProcedureLabelStatements
|
76
|
+
|
77
|
+
|
78
|
+
|
79
|
+
|
80
|
+
# @attr [TlaElementGenerator] tla
|
81
|
+
attr_reader :tla
|
82
|
+
|
83
|
+
# @attr [Hash] validMetatypes metatype->String
|
84
|
+
attr_accessor :validMetatypes
|
85
|
+
|
86
|
+
# @attr [String:Array] metatypeKeys
|
87
|
+
# @option metatypeKeys [0] app
|
88
|
+
# @option metatypeKeys [1] tx_function
|
89
|
+
attr_accessor :metatypeKeys
|
90
|
+
|
91
|
+
|
92
|
+
METATYPE_ETH = 'ial'
|
93
|
+
# METATYPE_TX_ENTRY = 'ial-tx-entry'
|
94
|
+
# METATYPE_TX_EXIT = 'ial-tx-exit'
|
95
|
+
METATYPE_TX_FUNC = 'ial-tx-func'
|
96
|
+
|
97
|
+
METATYPES = {
|
98
|
+
METATYPE_ETH => { :name => "Intermediate API Language ethereum implementation", :prefix => 'ial' },
|
99
|
+
METATYPE_TX_FUNC => { :name => "Intermediate API Language transaction function", :prefix => 'ial_tx_func' },
|
100
|
+
# METATYPE_TX_ENTRY => { :name => "Intermediate API Language transaction entry", :prefix => 'ial_tx_enter', :framework => Sbuilder::FacadeConstants::META_MODEL_SERVICE_IMPLEMENTATION },
|
101
|
+
# METATYPE_TX_EXIT => { :name => "Intermediate API Language transaction exit", :prefix => 'ial_tx_exit', :framework => Sbuilder::FacadeConstants::META_MODEL_SERVICE_COMPLETION },
|
102
|
+
|
103
|
+
}
|
104
|
+
|
105
|
+
|
106
|
+
# ------------------------------------------------------------------
|
107
|
+
# @!group Construct & configure
|
108
|
+
|
109
|
+
def initialize( options = {}, metatypes=nil )
|
110
|
+
tla = Sbuilder::Ial::Action::Render::TlaElementGenerator.start
|
111
|
+
setTla( tla )
|
112
|
+
self.metatypeKeys = [ METATYPE_ETH, METATYPE_TX_FUNC ]
|
113
|
+
initMetatypes( metatypes )
|
114
|
+
end
|
115
|
+
|
116
|
+
# @param [TlaElementGenerator] tla element generator
|
117
|
+
def setTla( tla )
|
118
|
+
@tla = tla
|
119
|
+
end
|
120
|
+
|
121
|
+
# @param [Hash] metatypes key-value to init
|
122
|
+
private def initMetatypes( metatypes )
|
123
|
+
return if metatypes.nil?
|
124
|
+
self.metatypeKeys = [ metatypes, "#{metatypes}_func"]
|
125
|
+
self.validMetatypes = {
|
126
|
+
metatypeKeys[0] => { :name => "Intermediate API Language ethereum implementation for #{metatypes}", :prefix=> metatypeKeys[0] },
|
127
|
+
metatypeKeys[1] => { :name => "Intermediate API Language ethereum implementation for #{metatypes}", :prefix=> metatypeKeys[1] },
|
128
|
+
}
|
129
|
+
end
|
130
|
+
|
131
|
+
# @!endgroup
|
132
|
+
|
133
|
+
# ------------------------------------------------------------------
|
134
|
+
# @!group Metatypes
|
135
|
+
|
136
|
+
# Return non-frameworked metatypes (to be loaded to
|
137
|
+
# sbuilder-framework)
|
138
|
+
#
|
139
|
+
# @return [Hash] metatypes
|
140
|
+
# @option metatypes [String|Symbol] key
|
141
|
+
# @option metatypes [Symbol] :name
|
142
|
+
# @option metatypes [Symbol] :prefix optional
|
143
|
+
def rule_metatypes
|
144
|
+
# metatypes = getMetatypes
|
145
|
+
# metatypes.keys.inject( {}) { |memo,k| memo[k] = metatypes[k] if metatypes[k][:framework].nil?; memo }
|
146
|
+
getMetatypes
|
147
|
+
end
|
148
|
+
|
149
|
+
# @return [Hash] validMetatypes i.e. all metatypes used when
|
150
|
+
# producing ethereum code
|
151
|
+
private def getMetatypes
|
152
|
+
return validMetatypes unless validMetatypes.nil?
|
153
|
+
METATYPES
|
154
|
+
end
|
155
|
+
|
156
|
+
# Pass +metatype+ trough, and ensure it exists +metatypes+
|
157
|
+
def setMetatype( metatype )
|
158
|
+
raise TlaElementException,
|
159
|
+
<<-EOS unless (getMetatypes && getMetatypes.key?( metatype ))
|
160
|
+
Unknown metatype '#{metatype}' type '#{metatype.class}'
|
161
|
+
|
162
|
+
valid metatypes =: #{getMetatypes ? getMetatypes.keys.join(',') : 'non metatypes found - use setValidMetatypes to define metatypes '}
|
163
|
+
|
164
|
+
EOS
|
165
|
+
# map to :framework metatype - if possible
|
166
|
+
getMetatypes[metatype][:framework].nil? ? metatype : getMetatypes[metatype][:framework]
|
167
|
+
end
|
168
|
+
|
169
|
+
def metaTxFunc
|
170
|
+
# METATYPE_TX_FUNC
|
171
|
+
metatypeKeys[1]
|
172
|
+
end
|
173
|
+
def metaTxEntry
|
174
|
+
Sbuilder::FacadeConstants::META_MODEL_SERVICE_IMPLEMENTATION
|
175
|
+
# METATYPE_TX_ENTRY
|
176
|
+
end
|
177
|
+
def metaTxExit
|
178
|
+
Sbuilder::FacadeConstants::META_MODEL_SERVICE_COMPLETION
|
179
|
+
# METATYPE_TX_EXIT
|
180
|
+
end
|
181
|
+
def metaApp
|
182
|
+
# METATYPE_ETH
|
183
|
+
metatypeKeys[0]
|
184
|
+
end
|
185
|
+
|
186
|
+
# @!endgroup
|
187
|
+
|
188
|
+
end
|
189
|
+
|
190
|
+
end
|
191
|
+
end
|
192
|
+
end
|
193
|
+
end
|