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
data/lib/model/sexp.rb
ADDED
@@ -0,0 +1,58 @@
|
|
1
|
+
module Sbuilder
|
2
|
+
module Ial
|
3
|
+
module Model
|
4
|
+
class Sexp < Array
|
5
|
+
|
6
|
+
def initialize(*args)
|
7
|
+
super(args)
|
8
|
+
end
|
9
|
+
|
10
|
+
##
|
11
|
+
# Returns the node type of the Sexp.
|
12
|
+
|
13
|
+
def sexp_type
|
14
|
+
first
|
15
|
+
end
|
16
|
+
|
17
|
+
##
|
18
|
+
# Returns the Sexp body, ie the values without the node type.
|
19
|
+
|
20
|
+
def sexp_body
|
21
|
+
self[1..-1]
|
22
|
+
end
|
23
|
+
|
24
|
+
# @return [Sexp|Nil] sexp_body.first for corresponding 'prop'
|
25
|
+
def sexp_property( prop )
|
26
|
+
sexp_element = sexp_body && sexp_body.select{ |e| e.is_a?(Sexp) && e.sexp_type == prop }.first
|
27
|
+
sexp_element.sexp_body.first unless sexp_element.nil?
|
28
|
+
end
|
29
|
+
|
30
|
+
# @return [Sexp:Array] sexp_body for corresponding 'prop'
|
31
|
+
def sexp_properties( prop )
|
32
|
+
sexp_element = sexp_body && sexp_body.select{ |e| e.is_a?(Sexp) && e.sexp_type == prop }
|
33
|
+
# [[:sexp, [:sexp1, ...], [:sexp1, ...]]] --> [:sexp, [:sexp1, ...], [:sexp1, ...]]
|
34
|
+
sexp_element.flatten(1)[1..-1]
|
35
|
+
end
|
36
|
+
|
37
|
+
|
38
|
+
# alias :head :sexp_type
|
39
|
+
# alias :rest :sexp_body
|
40
|
+
|
41
|
+
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
45
|
+
|
46
|
+
# Important shortcut
|
47
|
+
def s(*args)
|
48
|
+
Model::Sexp.new(*args )
|
49
|
+
end
|
50
|
+
module_function :s
|
51
|
+
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
|
56
|
+
def s(*args)
|
57
|
+
Sbuilder::Ial::Model::Sexp.new(*args )
|
58
|
+
end
|
@@ -0,0 +1,273 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
require 'sbuilder'
|
3
|
+
|
4
|
+
module Sbuilder
|
5
|
+
module Ial
|
6
|
+
|
7
|
+
class Plugin < Sbuilder::LoaderPluginRoot
|
8
|
+
|
9
|
+
TRANSLATE_SNIPPETS =
|
10
|
+
[
|
11
|
+
:base_snippets,
|
12
|
+
:library_snippets,
|
13
|
+
:variables_snippets,
|
14
|
+
:macros_snippets,
|
15
|
+
:operators_snippets,
|
16
|
+
:transaction_entry_snippets,
|
17
|
+
:transaction_function_snippets,
|
18
|
+
:transaction_exit_snippets,
|
19
|
+
]
|
20
|
+
|
21
|
+
# mix api loader plugin services
|
22
|
+
include ApiLoaderPluginMixer
|
23
|
+
|
24
|
+
# mix snippet loader plugin services
|
25
|
+
include SnippetLoaderPluginMixer
|
26
|
+
|
27
|
+
# @attr [Hash] options set in constructor
|
28
|
+
attr_reader :options
|
29
|
+
|
30
|
+
|
31
|
+
# @attr [String|String:Array] rubypaths configuration setting
|
32
|
+
attr_accessor :rubypaths
|
33
|
+
|
34
|
+
# @attr [String] metatypes set in configuration
|
35
|
+
attr_accessor :metatypes
|
36
|
+
|
37
|
+
# @attr [object] applicationConfiguration to pass to Ruby IAL application modules
|
38
|
+
attr_accessor :applicationConfiguration
|
39
|
+
|
40
|
+
# # @əttr [Sbuilder::Ial::App::App] loaded appstate after loading
|
41
|
+
attr_accessor :app
|
42
|
+
|
43
|
+
# @əttr [Sbuilder::Ial::Model::Model] app holding the state
|
44
|
+
attr_accessor :model
|
45
|
+
|
46
|
+
|
47
|
+
# ------------------------------------------------------------------
|
48
|
+
# Validation
|
49
|
+
PLUGIN_CONFIGURATION_REQUIRED= [ 'rubypaths', 'metatypes', ]
|
50
|
+
PLUGIN_CONFIGURATION_ALLOWED=[ 'application' ]
|
51
|
+
|
52
|
+
# ------------------------------------------------------------------
|
53
|
+
# @!group Construct && configure
|
54
|
+
|
55
|
+
def initialize( options={} )
|
56
|
+
super( options )
|
57
|
+
@options = options
|
58
|
+
logger.info "#{__method__}: sbuilder-ial plugin created @options=#{@options}"
|
59
|
+
|
60
|
+
end
|
61
|
+
|
62
|
+
|
63
|
+
# Class level configuration
|
64
|
+
#
|
65
|
+
# @param [Hash] configuration given in 'extend.loaders'
|
66
|
+
#
|
67
|
+
# @option configuration [String] solc_command path to solc
|
68
|
+
# executable
|
69
|
+
#
|
70
|
+
def self.configure( configuration )
|
71
|
+
# validateProperties( configuration, Constants::VALIDATION[:class_configure][:required], Constants::VALIDATION[:class_configure][:allowed] )
|
72
|
+
# @@solc_command = configuration['solc_command'] if configuration.is_a?(Hash ) && configuration.key?( 'solc_command' )
|
73
|
+
end
|
74
|
+
|
75
|
+
# Instance level configuration
|
76
|
+
#
|
77
|
+
# @param [Hash] configuration for object instance
|
78
|
+
def configure( configuration )
|
79
|
+
|
80
|
+
logger.info "#{__method__}: sbuilder-ial plugin configuration=#{configuration}"
|
81
|
+
validateProperties( configuration, PLUGIN_CONFIGURATION_REQUIRED, PLUGIN_CONFIGURATION_ALLOWED )
|
82
|
+
|
83
|
+
# array of filepath from which to load IAL model
|
84
|
+
self.rubypaths = configuration['rubypaths']
|
85
|
+
|
86
|
+
self.metatypes = configuration['metatypes'] if configuration['metatypes']
|
87
|
+
|
88
|
+
# configuration passed to Ruby ial modules
|
89
|
+
self.applicationConfiguration = configuration['application']
|
90
|
+
|
91
|
+
# Init application state (model) from 'rubypaths'
|
92
|
+
initModel( rubypaths )
|
93
|
+
end
|
94
|
+
|
95
|
+
|
96
|
+
# @!endgroup
|
97
|
+
|
98
|
+
# ------------------------------------------------------------------
|
99
|
+
# @!group sbuilder extension poinsts
|
100
|
+
|
101
|
+
# API loader extension point
|
102
|
+
|
103
|
+
def load( sbuilderConfig )
|
104
|
+
|
105
|
+
logger.info "#{__method__} API loader extension point: sbuilderConfig=#{sbuilderConfig}"
|
106
|
+
|
107
|
+
apiLoader
|
108
|
+
|
109
|
+
end
|
110
|
+
|
111
|
+
# Snippet loader extension point
|
112
|
+
#
|
113
|
+
# Implemtnation assumes that +process+ method has been called
|
114
|
+
# earlier, and uses +snippets+ getter to retrive TLA generate
|
115
|
+
# element to load into sbuilder.
|
116
|
+
#
|
117
|
+
# Overrides abstract method in parent class.
|
118
|
+
#
|
119
|
+
# @param [Hash:Array] snippetDefitions given in sbuilder.yaml
|
120
|
+
#
|
121
|
+
# @return [Boolean] true after success
|
122
|
+
#
|
123
|
+
def doRegisterSnippets( snippetDefitions )
|
124
|
+
|
125
|
+
logger.info "#{__method__} snippet extension point snippetDefitions=#{snippetDefitions}"
|
126
|
+
|
127
|
+
loadSnippets
|
128
|
+
|
129
|
+
end
|
130
|
+
# @!endgroup
|
131
|
+
|
132
|
+
# ------------------------------------------------------------------
|
133
|
+
# @!group plugin load ial
|
134
|
+
|
135
|
+
##
|
136
|
+
# Init application state (model) from 'rbFiles'
|
137
|
+
|
138
|
+
def initModel( rbFiles )
|
139
|
+
|
140
|
+
# Init app
|
141
|
+
logger.info "#{__method__}: start app with option=#{options}"
|
142
|
+
self.app = Sbuilder::Ial::App::App.start( options, metatypes: metatypes, applicationConfiguration: applicationConfiguration )
|
143
|
+
|
144
|
+
# Load [files] -> Model|Error
|
145
|
+
loadInput( rbFiles )
|
146
|
+
end
|
147
|
+
|
148
|
+
# Load Intermediate Api Language input from 'files'
|
149
|
+
#
|
150
|
+
# @param [String:Array] files path to IAL language input files
|
151
|
+
def loadInput( files )
|
152
|
+
|
153
|
+
app.loadIalImplementation( files ).pipe() do |v|
|
154
|
+
logger.debug "#{__method__}: loadIalImplementation=#{v}" if logger.debug?
|
155
|
+
end.and_then do |ialImplementation|
|
156
|
+
# process array of dsl objects - build model
|
157
|
+
app.buildModel(ialImplementation)
|
158
|
+
end.pipe do |v|
|
159
|
+
logger.debug "#{__method__}: buildModel=#{v}" if logger.debug?
|
160
|
+
end.and_then do
|
161
|
+
# Extract model from app
|
162
|
+
self.model = app.getModel
|
163
|
+
end.pipe do |v|
|
164
|
+
logger.debug "#{__method__}: getModel=#{v}"
|
165
|
+
end.or_else do |err|
|
166
|
+
# Collect Errors in self.model
|
167
|
+
|
168
|
+
self.model = Error(
|
169
|
+
err.select do |e|
|
170
|
+
e.is_a? Exception || e.respond_to?( :isError ) && e.isError
|
171
|
+
end.map do |e|
|
172
|
+
Error( e )
|
173
|
+
end
|
174
|
+
)
|
175
|
+
end
|
176
|
+
|
177
|
+
end
|
178
|
+
|
179
|
+
def apiLoader
|
180
|
+
# puts "app, =#{app}, model=#{model}"
|
181
|
+
return ( Error( "nil" ) ) if model.nil?
|
182
|
+
|
183
|
+
#
|
184
|
+
model.and_then do
|
185
|
+
app.translateModel( model, [ :domains_defines ] ).flatten.each do |domain|
|
186
|
+
logger.info( "#{__method__} defineDomain=#{domain}")
|
187
|
+
facade.defineDomain( domain[:name], domain[:values] )
|
188
|
+
end
|
189
|
+
Result( "domains" )
|
190
|
+
end.and_then do
|
191
|
+
|
192
|
+
app.translateModel( model, [ :api_definitions ] ).flatten.each do |definition|
|
193
|
+
|
194
|
+
# definition is a Hash with ':name' and ':properties' -keys
|
195
|
+
logger.info( "#{__method__} add definition=#{definition}")
|
196
|
+
currentDefinition = facade.newDefinition( definition[:name] )
|
197
|
+
Sequence( definition[:properties] ).and_then do |property|
|
198
|
+
# Property is a struct with 'name' and 'domain' methods, validation should
|
199
|
+
raise "Application error - validation should prevent property.domain.nil?" if property.domain.nil?
|
200
|
+
logger.info( "#{__method__} definitino '#{definition[:name] }' property =#{property}")
|
201
|
+
newParameter = facade.newParameter( property.name )
|
202
|
+
facade.addParameter( currentDefinition, newParameter, property.domain.name )
|
203
|
+
end
|
204
|
+
|
205
|
+
facade.modelDefinition( currentDefinition )
|
206
|
+
end
|
207
|
+
Result( "definitions" )
|
208
|
+
end.and_then do
|
209
|
+
|
210
|
+
app.translateModel( model, [ :transaction_interfaces ] ).flatten.each do |interface|
|
211
|
+
logger.info( "#{__method__} define interface=#{interface}")
|
212
|
+
currentInterface = facade.newInterface( interface[:path], interface[:operation] )
|
213
|
+
Sequence( interface[:request].properties ).and_then do |property|
|
214
|
+
logger.debug( "#{__method__} property.name=#{property.name}, property.domain=#{property && property.domain ? property.domain.name : "-" } property.definition=#{property && property.definition ? property.definition.name : "-" } ") if logger.debug?
|
215
|
+
if property.domain
|
216
|
+
newParameter = facade.newParameter( property.name )
|
217
|
+
facade.addParameter( currentInterface, newParameter, property.domain.name )
|
218
|
+
elsif property.definition
|
219
|
+
isArray = false
|
220
|
+
newParameterReference = facade.newParameterReference( property.name, property.definition.name, isArray )
|
221
|
+
facade.addParameter( currentInterface, newParameterReference )
|
222
|
+
else
|
223
|
+
raise "Must define 'domain' or 'definition' for parameter '#{property.name}'"
|
224
|
+
end
|
225
|
+
end
|
226
|
+
facade.modelInterface( currentInterface )
|
227
|
+
end
|
228
|
+
Result( "interfaces" )
|
229
|
+
end.or_else do |err|
|
230
|
+
logger.error "{__method__}: #{err}"
|
231
|
+
warn err
|
232
|
+
end
|
233
|
+
|
234
|
+
# domains = )
|
235
|
+
# puts "domains=#{domains}"
|
236
|
+
# return Result( "success" )
|
237
|
+
end
|
238
|
+
|
239
|
+
def loadSnippets
|
240
|
+
# puts "app, =#{app}, model=#{model}"
|
241
|
+
return ( Error( "nil" ) ) if model.nil?
|
242
|
+
|
243
|
+
model.and_then do
|
244
|
+
appMetatypes = app.appMetatypes
|
245
|
+
logger.info "#{__method__}, appMetatypes=#{appMetatypes}"
|
246
|
+
appMetatypes.keys.each { |metatype| snippetFacade.registerMetatype( metatype, app.appMetatypes[metatype][:name], app.appMetatypes[metatype][:prefix] ) }
|
247
|
+
end.and_then do
|
248
|
+
ret = true
|
249
|
+
app.translateModel( model, TRANSLATE_SNIPPETS ).flatten.each do |snippet|
|
250
|
+
logger.info "#{__method__}: render & hand over snippet #{snippet}"
|
251
|
+
if snippet.is_a?( Hash ) then
|
252
|
+
snippetBody = app.renderSnippet( snippet ) || snippet[:body]
|
253
|
+
logger.debug "#{__method__}: snippetBody=#{snippetBody}" if logger.debug?
|
254
|
+
snippetFacade.handOver( snippet[:metatype].to_s, snippet[:appName], snippetBody, snippet[:specName] )
|
255
|
+
else
|
256
|
+
logger.error "#{__method__}: snippet=#{snippet}"
|
257
|
+
ret = snippet
|
258
|
+
end
|
259
|
+
end
|
260
|
+
ret
|
261
|
+
end.
|
262
|
+
or_else do |err|
|
263
|
+
logger.error "{__method__}: #{err}"
|
264
|
+
warn err
|
265
|
+
end
|
266
|
+
end
|
267
|
+
|
268
|
+
|
269
|
+
# @!endgroup
|
270
|
+
end # class
|
271
|
+
|
272
|
+
end
|
273
|
+
end
|
data/lib/sbuilder-ial.rb
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
require_relative 'utils/logger'
|
2
|
+
|
3
|
+
require_relative 'fp/exception'
|
4
|
+
require_relative 'fp/compositable'
|
5
|
+
require_relative 'fp/sequence'
|
6
|
+
require_relative 'fp/error'
|
7
|
+
require_relative 'fp/result'
|
8
|
+
def Result(x)
|
9
|
+
Sbuilder::Fp.Result(x)
|
10
|
+
end
|
11
|
+
|
12
|
+
def Error(x)
|
13
|
+
Sbuilder::Fp.Error(x)
|
14
|
+
end
|
15
|
+
def Sequence(x)
|
16
|
+
Sbuilder::Fp.Sequence(x)
|
17
|
+
end
|
18
|
+
|
19
|
+
require_relative 'model/constants'
|
20
|
+
require_relative 'model/sexp'
|
21
|
+
require_relative 'model/model_dsl'
|
22
|
+
require_relative 'model/model'
|
23
|
+
# require_relative 'model/ctx'
|
24
|
+
|
25
|
+
require_relative 'ial/exception'
|
26
|
+
|
27
|
+
require_relative 'action/exception'
|
28
|
+
require_relative 'action/render/exception'
|
29
|
+
# require_relative 'action/validator'
|
30
|
+
require_relative 'action/render/tla_element_generator'
|
31
|
+
require_relative 'action/render/producer'
|
32
|
+
require_relative 'action/render/producer_ethereum'
|
33
|
+
require_relative 'action/render/renderer'
|
34
|
+
require_relative 'action/file_path'
|
35
|
+
require_relative 'action/text'
|
36
|
+
# require_relative 'action/schema'
|
37
|
+
require_relative 'action/model_builder'
|
38
|
+
require_relative 'action/tla_rules'
|
39
|
+
require_relative 'action/translator'
|
40
|
+
require_relative 'action/extender'
|
41
|
+
require_relative 'action/script_eval'
|
42
|
+
|
43
|
+
require_relative 'app/app'
|
44
|
+
require_relative 'plugin/plugin'
|
data/lib/utils/logger.rb
ADDED
@@ -0,0 +1,82 @@
|
|
1
|
+
module Sbuilder
|
2
|
+
module Ial
|
3
|
+
require 'logger'
|
4
|
+
|
5
|
+
# see http://hawkins.io/2013/08/using-the-ruby-logger/
|
6
|
+
|
7
|
+
module MyLogger
|
8
|
+
|
9
|
+
# no logging done
|
10
|
+
|
11
|
+
class NullLoger < Logger
|
12
|
+
def initialize(*args)
|
13
|
+
end
|
14
|
+
|
15
|
+
def add(*args, &block)
|
16
|
+
end
|
17
|
+
|
18
|
+
def debug?
|
19
|
+
false
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
@@logfile = nil # absolute path to log file
|
24
|
+
LOGFILE="sbuilder.log"
|
25
|
+
|
26
|
+
def logfile( options )
|
27
|
+
return @@logfile if @@logfile
|
28
|
+
@@logfile = options[:logfile] || File.join( Dir.getwd, LOGFILE )
|
29
|
+
@@logfile
|
30
|
+
end
|
31
|
+
|
32
|
+
def getLogger( progname=nil, options={} )
|
33
|
+
|
34
|
+
|
35
|
+
progname = self.class.name.split('::').last if progname.nil?
|
36
|
+
level = get_level( options )
|
37
|
+
|
38
|
+
if level.nil?
|
39
|
+
|
40
|
+
return NullLoger.new
|
41
|
+
|
42
|
+
else
|
43
|
+
|
44
|
+
|
45
|
+
logger = Logger.new( logfile(options) )
|
46
|
+
logger.level=level
|
47
|
+
logger.progname = progname
|
48
|
+
return logger
|
49
|
+
|
50
|
+
end
|
51
|
+
|
52
|
+
end # getLogger
|
53
|
+
|
54
|
+
|
55
|
+
# ------------------------------------------------------------------
|
56
|
+
private
|
57
|
+
|
58
|
+
def get_level( options )
|
59
|
+
|
60
|
+
level_name = options && options[:log] ? options[:log] : ENV['LOG_LEVEL']
|
61
|
+
|
62
|
+
level = case level_name
|
63
|
+
when 'warn', 'WARN'
|
64
|
+
Logger::WARN
|
65
|
+
when 'info', 'INFO'
|
66
|
+
Logger::INFO
|
67
|
+
when 'debug', 'DEBUG'
|
68
|
+
Logger::DEBUG
|
69
|
+
when 'error', 'ERROR'
|
70
|
+
Logger::ERROR
|
71
|
+
else
|
72
|
+
nil
|
73
|
+
end
|
74
|
+
|
75
|
+
return level
|
76
|
+
end
|
77
|
+
|
78
|
+
end
|
79
|
+
|
80
|
+
|
81
|
+
end
|
82
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
# -*- encoding: utf-8; mode: ruby -*-
|
2
|
+
|
3
|
+
lib = File.expand_path('../lib/', __FILE__)
|
4
|
+
$:.unshift lib unless $:.include?(lib)
|
5
|
+
|
6
|
+
GEM_NAME='sbuilder-ial'
|
7
|
+
Gem::Specification.new do |s|
|
8
|
+
|
9
|
+
# version = "0.0.1.pre"
|
10
|
+
version = File.open( "VERSION", "r" ) { |f| f.read }.strip.gsub( "-SNAPSHOT", ".pre" )
|
11
|
+
|
12
|
+
s.name = GEM_NAME
|
13
|
+
s.version = version
|
14
|
+
s.date = Time.now.strftime( "%Y-%m-%d" ) #'2014-09-10'
|
15
|
+
s.summary = "Intermediate API Language (IAL) for to build tla-sbuilder snippets"
|
16
|
+
s.description = <<EOF
|
17
|
+
|
18
|
+
Intermediate API Language (IAL) for to build tla-sbuilder snippets.
|
19
|
+
|
20
|
+
|
21
|
+
EOF
|
22
|
+
s.authors = ["jarjuk"]
|
23
|
+
s.files = [ "VERSION", "#{s.name}.gemspec" ] | Dir.glob("lib/**/*")
|
24
|
+
s.require_paths = [ "lib" ]
|
25
|
+
s.executables = [ ]
|
26
|
+
s.license = 'MIT'
|
27
|
+
|
28
|
+
s.homepage = "https://github.com/jarjuk/#{GEM_NAME}"
|
29
|
+
|
30
|
+
s.required_ruby_version = '~> 2.3', ">=2.3.1"
|
31
|
+
|
32
|
+
s.add_runtime_dependency "mustache", '~>1.0', ">=1.0.3"
|
33
|
+
s.add_runtime_dependency "docile", '~>1.1', ">=1.1.5"
|
34
|
+
s.add_runtime_dependency "tla-sbuilder", ">=0.3.4"
|
35
|
+
|
36
|
+
end
|
metadata
ADDED
@@ -0,0 +1,137 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: sbuilder-ial
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- jarjuk
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2017-02-28 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: mustache
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.0'
|
20
|
+
- - ">="
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 1.0.3
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
requirements:
|
27
|
+
- - "~>"
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '1.0'
|
30
|
+
- - ">="
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 1.0.3
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: docile
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - "~>"
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '1.1'
|
40
|
+
- - ">="
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: 1.1.5
|
43
|
+
type: :runtime
|
44
|
+
prerelease: false
|
45
|
+
version_requirements: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - "~>"
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: '1.1'
|
50
|
+
- - ">="
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: 1.1.5
|
53
|
+
- !ruby/object:Gem::Dependency
|
54
|
+
name: tla-sbuilder
|
55
|
+
requirement: !ruby/object:Gem::Requirement
|
56
|
+
requirements:
|
57
|
+
- - ">="
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
version: 0.3.4
|
60
|
+
type: :runtime
|
61
|
+
prerelease: false
|
62
|
+
version_requirements: !ruby/object:Gem::Requirement
|
63
|
+
requirements:
|
64
|
+
- - ">="
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
version: 0.3.4
|
67
|
+
description: |2+
|
68
|
+
|
69
|
+
Intermediate API Language (IAL) for to build tla-sbuilder snippets.
|
70
|
+
|
71
|
+
|
72
|
+
email:
|
73
|
+
executables: []
|
74
|
+
extensions: []
|
75
|
+
extra_rdoc_files: []
|
76
|
+
files:
|
77
|
+
- VERSION
|
78
|
+
- lib/action/exception.rb
|
79
|
+
- lib/action/extender.rb
|
80
|
+
- lib/action/file_path.rb
|
81
|
+
- lib/action/model_builder.rb
|
82
|
+
- lib/action/render/exception.rb
|
83
|
+
- lib/action/render/producer.rb
|
84
|
+
- lib/action/render/producer_ethereum.rb
|
85
|
+
- lib/action/render/producer_ethereum_const.rb
|
86
|
+
- lib/action/render/renderer.rb
|
87
|
+
- lib/action/render/tla_element_generator.rb
|
88
|
+
- lib/action/script_eval.rb
|
89
|
+
- lib/action/text.rb
|
90
|
+
- lib/action/tla_rules.rb
|
91
|
+
- lib/action/translator.rb
|
92
|
+
- lib/app/app.rb
|
93
|
+
- lib/ethereum.rb
|
94
|
+
- lib/ethereum/api.rb
|
95
|
+
- lib/fp/compositable.rb
|
96
|
+
- lib/fp/error.rb
|
97
|
+
- lib/fp/exception.rb
|
98
|
+
- lib/fp/result.rb
|
99
|
+
- lib/fp/sequence.rb
|
100
|
+
- lib/ial/build.rb
|
101
|
+
- lib/ial/exception.rb
|
102
|
+
- lib/model/constants.rb
|
103
|
+
- lib/model/model.rb
|
104
|
+
- lib/model/model_dsl.rb
|
105
|
+
- lib/model/sexp.rb
|
106
|
+
- lib/plugin/plugin.rb
|
107
|
+
- lib/sbuilder-ial.rb
|
108
|
+
- lib/utils/logger.rb
|
109
|
+
- sbuilder-ial.gemspec
|
110
|
+
homepage: https://github.com/jarjuk/sbuilder-ial
|
111
|
+
licenses:
|
112
|
+
- MIT
|
113
|
+
metadata: {}
|
114
|
+
post_install_message:
|
115
|
+
rdoc_options: []
|
116
|
+
require_paths:
|
117
|
+
- lib
|
118
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
119
|
+
requirements:
|
120
|
+
- - "~>"
|
121
|
+
- !ruby/object:Gem::Version
|
122
|
+
version: '2.3'
|
123
|
+
- - ">="
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: 2.3.1
|
126
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
127
|
+
requirements:
|
128
|
+
- - ">="
|
129
|
+
- !ruby/object:Gem::Version
|
130
|
+
version: '0'
|
131
|
+
requirements: []
|
132
|
+
rubyforge_project:
|
133
|
+
rubygems_version: 2.5.1
|
134
|
+
signing_key:
|
135
|
+
specification_version: 4
|
136
|
+
summary: Intermediate API Language (IAL) for to build tla-sbuilder snippets
|
137
|
+
test_files: []
|