digicus_web_frontend 0.1.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/lib/digicus_web_frontend/compiler.rb +83 -0
- data/lib/digicus_web_frontend.rb +44 -0
- metadata +46 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 4ec87fdb73b204abed2ae50fd2436d96270577276aa00b22019d0da8cdfa50bc
|
4
|
+
data.tar.gz: 1920f383e67bdac78978a778fe8aae9c48a9abe58294d73f3aff208e27f49dea
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 438a13b1df9faf5405c2bd770faecdfbdc76b819ffba4fa5a962cdc43a1ec0108db59006f7d911ed34d243d6d45278885cd475610d739e003f6d5c442636d280
|
7
|
+
data.tar.gz: 9b2f722fa7d9646203d34880872cb9b16ca951cb897352352cbfb2ab1efee037569db749f90f20a29c96c25be8e367ef14d637f5a48bf58dce22f282ec79a9b9
|
@@ -0,0 +1,83 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'dtr_core'
|
4
|
+
require 'json'
|
5
|
+
|
6
|
+
module DigicusWebFrontend
|
7
|
+
# This is a simple compiler class that takes a DTR code and transpiles it to JSON.
|
8
|
+
class Compiler
|
9
|
+
attr_reader :json_code
|
10
|
+
|
11
|
+
def initialize(json_code)
|
12
|
+
@json_code = JSON.parse(json_code)
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.to_dtr(json_code)
|
16
|
+
new(json_code).to_dtr
|
17
|
+
end
|
18
|
+
|
19
|
+
def to_dtr
|
20
|
+
DTRCore::Contract.new(
|
21
|
+
json_code['contract_name'],
|
22
|
+
form_state(json_code['contract_state']),
|
23
|
+
form_functions(json_code['contract_interface']),
|
24
|
+
form_user_defined_types(json_code['contract_user_defined_types']),
|
25
|
+
form_functions(json_code['contract_helpers']),
|
26
|
+
nil # non_translatables
|
27
|
+
).to_s
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
def form_state(state)
|
33
|
+
return [] if state.nil? || state.empty?
|
34
|
+
|
35
|
+
state.map do |s|
|
36
|
+
json_s = JSON.parse(s)
|
37
|
+
|
38
|
+
DTRCore::State.new(
|
39
|
+
json_s['name'],
|
40
|
+
json_s['type'],
|
41
|
+
json_s['initial_value']
|
42
|
+
)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def form_functions(functions)
|
47
|
+
return [] if functions.nil? || functions.empty?
|
48
|
+
|
49
|
+
functions.map do |f|
|
50
|
+
json_f = JSON.parse(f)
|
51
|
+
|
52
|
+
DTRCore::Function.new(
|
53
|
+
json_f['name'],
|
54
|
+
json_f['inputs'].map { |i| i.transform_keys(&:to_sym) },
|
55
|
+
json_f['output'],
|
56
|
+
json_f['instructions'].map do |i|
|
57
|
+
ins = JSON.parse(i)
|
58
|
+
DTRCore::Instruction.new(
|
59
|
+
ins['instruction'],
|
60
|
+
ins['inputs'],
|
61
|
+
ins['assign'],
|
62
|
+
ins['scope'],
|
63
|
+
ins['id']
|
64
|
+
)
|
65
|
+
end
|
66
|
+
)
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
def form_user_defined_types(user_defined_types)
|
71
|
+
return [] if user_defined_types.nil? || user_defined_types.empty?
|
72
|
+
|
73
|
+
user_defined_types.map do |t|
|
74
|
+
json_t = JSON.parse(t)
|
75
|
+
|
76
|
+
DTRCore::UserDefinedType.new(
|
77
|
+
json_t['name'],
|
78
|
+
json_t['attributes']
|
79
|
+
)
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Core logic for consuming Digicus Textual Representation (DTR) files.
|
4
|
+
module DigicusWebFrontend
|
5
|
+
autoload :Compiler, './lib/digicus_web_frontend/compiler'
|
6
|
+
end
|
7
|
+
|
8
|
+
def silence_streams
|
9
|
+
original_stdout = $stdout
|
10
|
+
original_stderr = $stderr
|
11
|
+
$stdout = File.new('/dev/null', 'w')
|
12
|
+
$stderr = File.new('/dev/null', 'w')
|
13
|
+
yield
|
14
|
+
ensure
|
15
|
+
$stdout = original_stdout
|
16
|
+
$stderr = original_stderr
|
17
|
+
end
|
18
|
+
|
19
|
+
if __FILE__ == $PROGRAM_NAME
|
20
|
+
input = ARGV[0]
|
21
|
+
|
22
|
+
if input == 'version'
|
23
|
+
gemspec_path = 'digicus_web_frontend.gemspec'
|
24
|
+
|
25
|
+
# Extract version from gemspec
|
26
|
+
gemspec = File.read(gemspec_path)
|
27
|
+
version_match = gemspec.match(/\.version\s*=\s*["']([^"']+)["']/)
|
28
|
+
version = version_match[1] if version_match
|
29
|
+
|
30
|
+
puts version
|
31
|
+
else
|
32
|
+
|
33
|
+
if input.nil?
|
34
|
+
puts 'Usage: ./digicus_web_frontend <file_path>'
|
35
|
+
exit(1)
|
36
|
+
end
|
37
|
+
|
38
|
+
json_for_web = silence_streams do
|
39
|
+
DigicusWebFrontend::Compiler.to_dtr(File.read(input))
|
40
|
+
end
|
41
|
+
|
42
|
+
puts json_for_web
|
43
|
+
end
|
44
|
+
end
|
metadata
ADDED
@@ -0,0 +1,46 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: digicus_web_frontend
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Rob Durst
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2024-07-17 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: DTR to JSON compiler.
|
14
|
+
email:
|
15
|
+
- me@robdurst.com
|
16
|
+
executables: []
|
17
|
+
extensions: []
|
18
|
+
extra_rdoc_files: []
|
19
|
+
files:
|
20
|
+
- lib/digicus_web_frontend.rb
|
21
|
+
- lib/digicus_web_frontend/compiler.rb
|
22
|
+
homepage: https://spaced-out-thoughts-dev-foundation.github.io/digicus/
|
23
|
+
licenses:
|
24
|
+
- MIT
|
25
|
+
metadata:
|
26
|
+
rubygems_mfa_required: 'true'
|
27
|
+
post_install_message:
|
28
|
+
rdoc_options: []
|
29
|
+
require_paths:
|
30
|
+
- lib
|
31
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
32
|
+
requirements:
|
33
|
+
- - ">="
|
34
|
+
- !ruby/object:Gem::Version
|
35
|
+
version: 3.2.0
|
36
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
requirements: []
|
42
|
+
rubygems_version: 3.5.13
|
43
|
+
signing_key:
|
44
|
+
specification_version: 4
|
45
|
+
summary: DTR to JSON compiler.
|
46
|
+
test_files: []
|