sbuilder-ial 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
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,13 @@
1
+ module Sbuilder
2
+ module Ial
3
+ module Action
4
+
5
+ # not to to intercepted in Sbuilder::Fp
6
+ class ActionException < Exception; end
7
+
8
+ # intercepted in Sbuilder::Fp
9
+ class ActionError < Sbuilder::Fp::FpException; end
10
+
11
+ end
12
+ end
13
+ end
@@ -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,12 @@
1
+ module Sbuilder
2
+ module Ial
3
+ module Action
4
+ module Render
5
+
6
+ class MustacheException < Exception; end
7
+ class TlaElementException < Exception; end
8
+
9
+ end
10
+ end
11
+ end
12
+ 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