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 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