sbuilder-ial 0.0.1
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 +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
|