gloo 0.8.0 → 1.0.0

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.
Files changed (125) hide show
  1. checksums.yaml +4 -4
  2. data/.DS_Store +0 -0
  3. data/Gemfile.lock +32 -28
  4. data/LICENSE.txt +1 -1
  5. data/gloo.gemspec +11 -6
  6. data/lib/VERSION +1 -1
  7. data/lib/dependencies.rb +4 -4
  8. data/lib/gloo/app/info.rb +3 -1
  9. data/lib/gloo/app/log.rb +1 -29
  10. data/lib/gloo/app/platform.rb +142 -0
  11. data/lib/gloo/objs/cli/banner.rb +2 -2
  12. data/lib/gloo/objs/cli/bar.rb +4 -4
  13. data/lib/gloo/objs/cli/colorize.rb +3 -3
  14. data/lib/gloo/objs/cli/confirm.rb +3 -3
  15. data/lib/gloo/objs/cli/menu.rb +9 -9
  16. data/lib/gloo/objs/cli/menu_item.rb +2 -2
  17. data/lib/gloo/objs/cli/pastel.rb +2 -2
  18. data/lib/gloo/objs/cli/prompt.rb +4 -4
  19. data/lib/gloo/objs/cli/select.rb +4 -4
  20. data/lib/gloo/objs/dev/git.rb +7 -7
  21. data/lib/gloo/objs/dev/stats.rb +8 -5
  22. data/lib/gloo/objs/snd/play.rb +1 -1
  23. data/lib/gloo/objs/snd/say.rb +2 -2
  24. data/lib/gloo/objs/system/file_handle.rb +9 -9
  25. data/lib/gloo/objs/system/ssh_exec.rb +3 -3
  26. data/lib/gloo/objs/system/system.rb +2 -2
  27. data/lib/gloo/verbs/alert.rb +7 -7
  28. data/lib/gloo/verbs/beep.rb +1 -1
  29. data/lib/gloo/verbs/cls.rb +2 -2
  30. data/lib/gloo.rb +5 -1
  31. data/lib/run.rb +5 -1
  32. metadata +39 -145
  33. data/lib/gloo/app/args.rb +0 -112
  34. data/lib/gloo/app/engine.rb +0 -230
  35. data/lib/gloo/app/help.rb +0 -156
  36. data/lib/gloo/app/mode.rb +0 -27
  37. data/lib/gloo/app/settings.rb +0 -186
  38. data/lib/gloo/convert/converter.rb +0 -35
  39. data/lib/gloo/convert/string_to_datetime.rb +0 -21
  40. data/lib/gloo/convert/string_to_decimal.rb +0 -20
  41. data/lib/gloo/convert/string_to_integer.rb +0 -20
  42. data/lib/gloo/core/baseo.rb +0 -30
  43. data/lib/gloo/core/dictionary.rb +0 -181
  44. data/lib/gloo/core/error.rb +0 -61
  45. data/lib/gloo/core/event_manager.rb +0 -44
  46. data/lib/gloo/core/factory.rb +0 -210
  47. data/lib/gloo/core/gloo_system.rb +0 -266
  48. data/lib/gloo/core/heap.rb +0 -52
  49. data/lib/gloo/core/here.rb +0 -36
  50. data/lib/gloo/core/it.rb +0 -36
  51. data/lib/gloo/core/literal.rb +0 -30
  52. data/lib/gloo/core/obj.rb +0 -303
  53. data/lib/gloo/core/obj_finder.rb +0 -30
  54. data/lib/gloo/core/op.rb +0 -40
  55. data/lib/gloo/core/parser.rb +0 -59
  56. data/lib/gloo/core/pn.rb +0 -188
  57. data/lib/gloo/core/tokens.rb +0 -165
  58. data/lib/gloo/core/verb.rb +0 -86
  59. data/lib/gloo/exec/action.rb +0 -48
  60. data/lib/gloo/exec/dispatch.rb +0 -40
  61. data/lib/gloo/exec/exec_env.rb +0 -74
  62. data/lib/gloo/exec/runner.rb +0 -45
  63. data/lib/gloo/exec/script.rb +0 -49
  64. data/lib/gloo/exec/stack.rb +0 -78
  65. data/lib/gloo/expr/expression.rb +0 -118
  66. data/lib/gloo/expr/l_boolean.rb +0 -36
  67. data/lib/gloo/expr/l_decimal.rb +0 -39
  68. data/lib/gloo/expr/l_integer.rb +0 -37
  69. data/lib/gloo/expr/l_string.rb +0 -58
  70. data/lib/gloo/expr/op_div.rb +0 -22
  71. data/lib/gloo/expr/op_minus.rb +0 -22
  72. data/lib/gloo/expr/op_mult.rb +0 -22
  73. data/lib/gloo/expr/op_plus.rb +0 -24
  74. data/lib/gloo/objs/basic/alias.rb +0 -78
  75. data/lib/gloo/objs/basic/boolean.rb +0 -120
  76. data/lib/gloo/objs/basic/container.rb +0 -76
  77. data/lib/gloo/objs/basic/decimal.rb +0 -76
  78. data/lib/gloo/objs/basic/integer.rb +0 -73
  79. data/lib/gloo/objs/basic/script.rb +0 -99
  80. data/lib/gloo/objs/basic/string.rb +0 -77
  81. data/lib/gloo/objs/basic/text.rb +0 -87
  82. data/lib/gloo/objs/basic/untyped.rb +0 -41
  83. data/lib/gloo/objs/ctrl/each.rb +0 -279
  84. data/lib/gloo/objs/ctrl/repeat.rb +0 -108
  85. data/lib/gloo/objs/data/markdown.rb +0 -84
  86. data/lib/gloo/objs/data/mysql.rb +0 -192
  87. data/lib/gloo/objs/data/query.rb +0 -176
  88. data/lib/gloo/objs/data/sqlite.rb +0 -159
  89. data/lib/gloo/objs/data/table.rb +0 -140
  90. data/lib/gloo/objs/dt/date.rb +0 -50
  91. data/lib/gloo/objs/dt/datetime.rb +0 -62
  92. data/lib/gloo/objs/dt/time.rb +0 -50
  93. data/lib/gloo/objs/ror/erb.rb +0 -116
  94. data/lib/gloo/objs/ror/eval.rb +0 -107
  95. data/lib/gloo/objs/web/http_get.rb +0 -159
  96. data/lib/gloo/objs/web/http_post.rb +0 -183
  97. data/lib/gloo/objs/web/json.rb +0 -135
  98. data/lib/gloo/objs/web/slack.rb +0 -130
  99. data/lib/gloo/objs/web/teams.rb +0 -117
  100. data/lib/gloo/objs/web/uri.rb +0 -148
  101. data/lib/gloo/persist/file_loader.rb +0 -191
  102. data/lib/gloo/persist/file_saver.rb +0 -49
  103. data/lib/gloo/persist/file_storage.rb +0 -45
  104. data/lib/gloo/persist/line_splitter.rb +0 -81
  105. data/lib/gloo/persist/persist_man.rb +0 -120
  106. data/lib/gloo/utils/format.rb +0 -21
  107. data/lib/gloo/utils/stats.rb +0 -205
  108. data/lib/gloo/utils/words.rb +0 -19
  109. data/lib/gloo/verbs/context.rb +0 -62
  110. data/lib/gloo/verbs/create.rb +0 -68
  111. data/lib/gloo/verbs/execute.rb +0 -56
  112. data/lib/gloo/verbs/help.rb +0 -264
  113. data/lib/gloo/verbs/if.rb +0 -92
  114. data/lib/gloo/verbs/list.rb +0 -98
  115. data/lib/gloo/verbs/load.rb +0 -45
  116. data/lib/gloo/verbs/move.rb +0 -89
  117. data/lib/gloo/verbs/put.rb +0 -94
  118. data/lib/gloo/verbs/quit.rb +0 -40
  119. data/lib/gloo/verbs/run.rb +0 -75
  120. data/lib/gloo/verbs/save.rb +0 -39
  121. data/lib/gloo/verbs/show.rb +0 -64
  122. data/lib/gloo/verbs/tell.rb +0 -79
  123. data/lib/gloo/verbs/unless.rb +0 -92
  124. data/lib/gloo/verbs/version.rb +0 -37
  125. data/lib/gloo/verbs/wait.rb +0 -42
@@ -1,74 +0,0 @@
1
- # Author:: Eric Crane (mailto:eric.crane@mac.com)
2
- # Copyright:: Copyright (c) 2020 Eric Crane. All rights reserved.
3
- #
4
- # The execution environment.
5
- # The current state of running scripts and messaging.
6
- #
7
-
8
- module Gloo
9
- module Exec
10
- class ExecEnv
11
-
12
- attr_accessor :verbs, :actions, :scripts, :here
13
-
14
- VERB_STACK = 'verbs'.freeze
15
- ACTION_STACK = 'actions'.freeze
16
- SCRIPT_STACK = 'scripts'.freeze
17
- HERE_STACK = 'here'.freeze
18
-
19
- #
20
- # Set up the execution environment.
21
- #
22
- def initialize
23
- $log.debug 'exec env intialized...'
24
-
25
- @verbs = Gloo::Exec::Stack.new VERB_STACK
26
- @actions = Gloo::Exec::Stack.new ACTION_STACK
27
- @scripts = Gloo::Exec::Stack.new SCRIPT_STACK
28
- @here = Gloo::Exec::Stack.new HERE_STACK
29
- end
30
-
31
- #
32
- # Get the here object.
33
- #
34
- def here_obj
35
- return nil if @here.stack.empty?
36
-
37
- return @here.stack.last
38
- end
39
-
40
- #
41
- # Push a script onto the stack.
42
- #
43
- def push_script( script )
44
- @scripts.push script
45
- @here.push script.obj
46
- end
47
-
48
- #
49
- # Pop a script off the stack.
50
- #
51
- def pop_script
52
- @scripts.pop
53
- @here.pop
54
- end
55
-
56
- #
57
- # Push an action onto the stack.
58
- #
59
- def push_action( action )
60
- @actions.push action
61
- # @here.push action.to
62
- end
63
-
64
- #
65
- # Pop an action off the stack.
66
- #
67
- def pop_action
68
- @actions.pop
69
- # @here.pop
70
- end
71
-
72
- end
73
- end
74
- end
@@ -1,45 +0,0 @@
1
- # Author:: Eric Crane (mailto:eric.crane@mac.com)
2
- # Copyright:: Copyright (c) 2020 Eric Crane. All rights reserved.
3
- #
4
- # The Runner is a static helper function.
5
- # It is used to send the run command to verbs.
6
- #
7
-
8
- module Gloo
9
- module Exec
10
- class Runner
11
-
12
- #
13
- # Dispatch run command to a verb.
14
- # We abstract this out in case there are things
15
- # that need to be done before or after a verb
16
- # is done running.
17
- #
18
- def self.go( verb )
19
- $log.debug "running verb #{verb.type_display}"
20
- $engine.heap.error.start_tracking
21
- $engine.exec_env.verbs.push verb
22
- verb&.run
23
- $engine.exec_env.verbs.pop
24
- $engine.heap.error.clear_if_no_errors
25
- end
26
-
27
- #
28
- # Send 'run' message to the object.
29
- # Resolve the path_name and then send the run message.
30
- #
31
- def self.run( path_name )
32
- $log.debug "running script at #{path_name}"
33
- pn = Gloo::Core::Pn.new path_name
34
- o = pn.resolve
35
-
36
- if o
37
- o.send_message 'run'
38
- else
39
- $log.error "Could not send message to object. Bad path: #{path_name}"
40
- end
41
- end
42
-
43
- end
44
- end
45
- end
@@ -1,49 +0,0 @@
1
- # Author:: Eric Crane (mailto:eric.crane@mac.com)
2
- # Copyright:: Copyright (c) 2019 Eric Crane. All rights reserved.
3
- #
4
- # A script to be run.
5
- #
6
-
7
- module Gloo
8
- module Exec
9
- class Script
10
-
11
- attr_accessor :obj
12
-
13
- #
14
- # Set up the script.
15
- #
16
- def initialize( obj )
17
- @obj = obj
18
- end
19
-
20
- #
21
- # Run the script.
22
- # The script might be a single string or an array
23
- # of lines.
24
- #
25
- def run
26
- $engine.exec_env.push_script self
27
-
28
- if @obj.value.is_a? String
29
- $engine.parser.run @obj.value
30
- elsif @obj.value.is_a? Array
31
- @obj.value.each do |line|
32
- $engine.parser.run line
33
- end
34
- end
35
-
36
- $engine.exec_env.pop_script
37
- end
38
-
39
- #
40
- # Generic function to get display value.
41
- # Can be used for debugging, etc.
42
- #
43
- def display_value
44
- return @obj.pn
45
- end
46
-
47
- end
48
- end
49
- end
@@ -1,78 +0,0 @@
1
- # Author:: Eric Crane (mailto:eric.crane@mac.com)
2
- # Copyright:: Copyright (c) 2020 Eric Crane. All rights reserved.
3
- #
4
- # A stack of items, a call stack.
5
- #
6
-
7
- module Gloo
8
- module Exec
9
- class Stack
10
-
11
- attr_accessor :stack
12
-
13
- #
14
- # Set up the stack.
15
- #
16
- def initialize( name )
17
- @name = name
18
- clear_stack
19
- $log.debug "#{name} stack intialized..."
20
- end
21
-
22
- #
23
- # Push an item onto the stack.
24
- #
25
- def push( obj )
26
- $log.debug "#{@name}:push #{obj.display_value}"
27
- @stack.push obj
28
- self.update_out_file if $settings.debug
29
- end
30
-
31
- #
32
- # Pop an item from the stack.
33
- #
34
- def pop
35
- o = @stack.pop
36
- $log.debug "#{@name}:pop #{o.display_value}"
37
- self.update_out_file if $settings.debug
38
- end
39
-
40
- #
41
- # Get the current size of the call stack.
42
- #
43
- def size
44
- return @stack.size
45
- end
46
-
47
- #
48
- # Get stack data for output.
49
- #
50
- def out_data
51
- return @stack.map( &:display_value ).join( "\n" )
52
- end
53
-
54
- #
55
- # Get the file we'll write debug information for the stack.
56
- #
57
- def out_file
58
- return File.join( $settings.debug_path, @name )
59
- end
60
-
61
- #
62
- # Update the stack trace file.
63
- #
64
- def update_out_file
65
- File.write( self.out_file, self.out_data )
66
- end
67
-
68
- #
69
- # Clear the stack and the output file.
70
- #
71
- def clear_stack
72
- @stack = []
73
- self.update_out_file
74
- end
75
-
76
- end
77
- end
78
- end
@@ -1,118 +0,0 @@
1
- # Author:: Eric Crane (mailto:eric.crane@mac.com)
2
- # Copyright:: Copyright (c) 2019 Eric Crane. All rights reserved.
3
- #
4
- # An Expression that can be evaluated.
5
- #
6
-
7
- module Gloo
8
- module Expr
9
- class Expression
10
-
11
- # ---------------------------------------------------------------------
12
- # Constructor
13
- # ---------------------------------------------------------------------
14
-
15
- #
16
- # Create the expression from a list of tokens.
17
- #
18
- def initialize( tokens )
19
- @tokens = tokens
20
- @symbols = []
21
- @left = nil
22
- @right = nil
23
- @op = nil
24
- end
25
-
26
- # ---------------------------------------------------------------------
27
- # Evaluate Expression
28
- # ---------------------------------------------------------------------
29
-
30
- #
31
- # Evaluate the expression and return the value.
32
- #
33
- def evaluate
34
- identify_tokens
35
-
36
- @symbols.each do |sym|
37
- if sym.is_a? Gloo::Core::Op
38
- @op = sym
39
- elsif @left.nil?
40
- @left = sym
41
- else
42
- @right = sym
43
- end
44
-
45
- perform_op if @left && @right
46
- end
47
-
48
- return @left.value if @left.is_a? Gloo::Core::Literal
49
- return resolve_ref @left if @left.is_a? Gloo::Core::Pn
50
-
51
- return @left
52
- end
53
-
54
- # ---------------------------------------------------------------------
55
- # Private functions
56
- # ---------------------------------------------------------------------
57
-
58
- private
59
-
60
- #
61
- # Perform the operation.
62
- #
63
- def perform_op
64
- @op ||= Gloo::Core::Op.default_op
65
- l = evaluate_sym @left
66
- r = evaluate_sym @right
67
- @left = @op.perform l, r
68
- @right = nil
69
- @op = nil
70
- end
71
-
72
- #
73
- # Evaluate the symbol and get a simple value.
74
- #
75
- def evaluate_sym( sym )
76
- return sym.value if sym.is_a? Gloo::Core::Literal
77
- return resolve_ref sym if sym.is_a? Gloo::Core::Pn
78
-
79
- return sym
80
- end
81
-
82
- #
83
- # resolve an object reference and get the value.
84
- #
85
- def resolve_ref( ref )
86
- return ref.src if ref.named_color?
87
-
88
- ob = ref.resolve
89
- return ob.value if ob
90
- end
91
-
92
- #
93
- # Identify each token in the list.
94
- #
95
- def identify_tokens
96
- @tokens.each do |o|
97
- @symbols << identify_token( o )
98
- end
99
- end
100
-
101
- #
102
- # Identify the tokens and create appropriate symbols.
103
- #
104
- def identify_token( token )
105
- return Gloo::Core::Op.create_op( token ) if Gloo::Core::Op.op?( token )
106
-
107
- return LBoolean.new( token ) if LBoolean.boolean?( token )
108
- return LInteger.new( token ) if LInteger.integer?( token )
109
- return LString.new( token ) if LString.string?( token )
110
- return LDecimal.new( token ) if LDecimal.decimal?( token )
111
-
112
- # last chance: an Object reference
113
- return Gloo::Core::Pn.new( token )
114
- end
115
-
116
- end
117
- end
118
- end
@@ -1,36 +0,0 @@
1
- # Author:: Eric Crane (mailto:eric.crane@mac.com)
2
- # Copyright:: Copyright (c) 2019 Eric Crane. All rights reserved.
3
- #
4
- # An Expression that can be evaluated.
5
- #
6
-
7
- module Gloo
8
- module Expr
9
- class LBoolean < Gloo::Core::Literal
10
-
11
- #
12
- # Is the given token a boolean?
13
- #
14
- def self.boolean?( token )
15
- return Gloo::Objs::Boolean.boolean? token
16
- end
17
-
18
- #
19
- # Set the value, converting to an boolean.
20
- #
21
- def set_value( value )
22
- @value = Gloo::Objs::Boolean.coerse_to_bool value
23
- end
24
-
25
- #
26
- # Get string representation
27
- #
28
- def to_s
29
- return 'false' unless @value
30
-
31
- return @value.to_s
32
- end
33
-
34
- end
35
- end
36
- end
@@ -1,39 +0,0 @@
1
- # Author:: Eric Crane (mailto:eric.crane@mac.com)
2
- # Copyright:: Copyright (c) 2020 Eric Crane. All rights reserved.
3
- #
4
- # A literal decimal value.
5
- #
6
-
7
- module Gloo
8
- module Expr
9
- class LDecimal < Gloo::Core::Literal
10
-
11
- #
12
- # Is the given token a decimal?
13
- #
14
- def self.decimal?( token )
15
- return true if token.is_a? Numeric
16
-
17
- s = token.strip
18
- return s.to_f.to_s == s
19
- end
20
-
21
- #
22
- # Set the value, converting to an integer.
23
- #
24
- def set_value( value )
25
- value = value.to_s if value.is_a? Numeric
26
-
27
- @value = value.to_f
28
- end
29
-
30
- #
31
- # Get string representation
32
- #
33
- def to_s
34
- return self.value.to_s
35
- end
36
-
37
- end
38
- end
39
- end
@@ -1,37 +0,0 @@
1
- # Author:: Eric Crane (mailto:eric.crane@mac.com)
2
- # Copyright:: Copyright (c) 2019 Eric Crane. All rights reserved.
3
- #
4
- # An Expression that can be evaluated.
5
- #
6
-
7
- module Gloo
8
- module Expr
9
- class LInteger < Gloo::Core::Literal
10
-
11
- #
12
- # Is the given token an integer?
13
- #
14
- def self.integer?( token )
15
- return true if token.is_a? Integer
16
-
17
- s = token.strip
18
- return s.to_i.to_s == s
19
- end
20
-
21
- #
22
- # Set the value, converting to an integer.
23
- #
24
- def set_value( value )
25
- @value = value.to_i
26
- end
27
-
28
- #
29
- # Get string representation
30
- #
31
- def to_s
32
- return self.value.to_s
33
- end
34
-
35
- end
36
- end
37
- end
@@ -1,58 +0,0 @@
1
- # Author:: Eric Crane (mailto:eric.crane@mac.com)
2
- # Copyright:: Copyright (c) 2019 Eric Crane. All rights reserved.
3
- #
4
- # An Expression that can be evaluated.
5
- #
6
-
7
- module Gloo
8
- module Expr
9
- class LString < Gloo::Core::Literal
10
-
11
- #
12
- # Set the value, triming opening and closing
13
- # quotations if necessary.
14
- #
15
- def set_value( value )
16
- @value = value
17
- return unless value
18
-
19
- @value = LString.strip_quotes( @value )
20
- end
21
-
22
- #
23
- # Is the given token a string?
24
- #
25
- def self.string?( token )
26
- return false unless token.is_a? String
27
- return true if token.start_with?( '"' )
28
- return true if token.start_with?( "'" )
29
-
30
- return false
31
- end
32
-
33
- #
34
- # Given a string with leading and trailing quotes,
35
- # strip them out.
36
- #
37
- def self.strip_quotes( str )
38
- if str.start_with?( '"' )
39
- str = str[ 1..-1 ]
40
- str = str[ 0..-2 ] if str.end_with?( '"' )
41
- return str
42
- elsif str.start_with?( "'" )
43
- str = str[ 1..-1 ]
44
- str = str[ 0..-2 ] if str.end_with?( "'" )
45
- return str
46
- end
47
- end
48
-
49
- #
50
- # Get string representation
51
- #
52
- def to_s
53
- return self.value
54
- end
55
-
56
- end
57
- end
58
- end
@@ -1,22 +0,0 @@
1
- # Author:: Eric Crane (mailto:eric.crane@mac.com)
2
- # Copyright:: Copyright (c) 2019 Eric Crane. All rights reserved.
3
- #
4
- # Division operator.
5
- #
6
-
7
- module Gloo
8
- module Expr
9
- class OpDiv < Gloo::Core::Op
10
-
11
- #
12
- # Perform the operation and return the result.
13
- #
14
- def perform( left, right )
15
- return left / right.to_i if left.is_a? Integer
16
-
17
- return left / right.to_f if left.is_a? Numeric
18
- end
19
-
20
- end
21
- end
22
- end
@@ -1,22 +0,0 @@
1
- # Author:: Eric Crane (mailto:eric.crane@mac.com)
2
- # Copyright:: Copyright (c) 2019 Eric Crane. All rights reserved.
3
- #
4
- # Subtraction operator.
5
- #
6
-
7
- module Gloo
8
- module Expr
9
- class OpMinus < Gloo::Core::Op
10
-
11
- #
12
- # Perform the operation and return the result.
13
- #
14
- def perform( left, right )
15
- return left - right.to_i if left.is_a? Integer
16
-
17
- return left - right.to_f if left.is_a? Numeric
18
- end
19
-
20
- end
21
- end
22
- end
@@ -1,22 +0,0 @@
1
- # Author:: Eric Crane (mailto:eric.crane@mac.com)
2
- # Copyright:: Copyright (c) 2019 Eric Crane. All rights reserved.
3
- #
4
- # Multiplication operator.
5
- #
6
-
7
- module Gloo
8
- module Expr
9
- class OpMult < Gloo::Core::Op
10
-
11
- #
12
- # Perform the operation and return the result.
13
- #
14
- def perform( left, right )
15
- return left * right.to_i if left.is_a? Integer
16
-
17
- return left * right.to_f if left.is_a? Numeric
18
- end
19
-
20
- end
21
- end
22
- end
@@ -1,24 +0,0 @@
1
- # Author:: Eric Crane (mailto:eric.crane@mac.com)
2
- # Copyright:: Copyright (c) 2019 Eric Crane. All rights reserved.
3
- #
4
- # Addition operator.
5
- #
6
-
7
- module Gloo
8
- module Expr
9
- class OpPlus < Gloo::Core::Op
10
-
11
- #
12
- # Perform the operation and return the result.
13
- #
14
- def perform( left, right )
15
- return left + right.to_s if left.is_a? String
16
-
17
- return left + right.to_i if left.is_a? Integer
18
-
19
- return left + right.to_f if left.is_a? Numeric
20
- end
21
-
22
- end
23
- end
24
- end
@@ -1,78 +0,0 @@
1
- # Author:: Eric Crane (mailto:eric.crane@mac.com)
2
- # Copyright:: Copyright (c) 2020 Eric Crane. All rights reserved.
3
- #
4
- # A String.
5
- #
6
-
7
- module Gloo
8
- module Objs
9
- class Alias < Gloo::Core::Obj
10
-
11
- KEYWORD = 'alias'.freeze
12
- KEYWORD_SHORT = 'ln'.freeze
13
- ALIAS_REFERENCE = '*'.freeze
14
-
15
- #
16
- # The name of the object type.
17
- #
18
- def self.typename
19
- return KEYWORD
20
- end
21
-
22
- #
23
- # The short name of the object type.
24
- #
25
- def self.short_typename
26
- return KEYWORD_SHORT
27
- end
28
-
29
- #
30
- # Set the value with any necessary type conversions.
31
- #
32
- def set_value( new_value )
33
- self.value = new_value.to_s
34
- end
35
-
36
- # ---------------------------------------------------------------------
37
- # Messages
38
- # ---------------------------------------------------------------------
39
-
40
- #
41
- # Get a list of message names that this object receives.
42
- #
43
- def self.messages
44
- return super + %w[resolve]
45
- end
46
-
47
- #
48
- # Check to see if the referenced object exists.
49
- #
50
- def msg_resolve
51
- pn = Gloo::Core::Pn.new( self.value )
52
- s = pn.exists?
53
- $engine.heap.it.set_to s
54
- return s
55
- end
56
-
57
- # ---------------------------------------------------------------------
58
- # Resolve
59
- # ---------------------------------------------------------------------
60
-
61
- #
62
- # Is the object an alias If so, then resolve it.
63
- # The ref_name is the name used to refer to the object.
64
- # If it ends with the * then we won't resolve the alias since
65
- # we are trying to refer to the alias itself.
66
- #
67
- def self.resolve_alias( obj, ref_name = nil )
68
- return nil unless obj
69
- return obj unless obj.type_display == Gloo::Objs::Alias.typename
70
- return obj if ref_name&.end_with?( ALIAS_REFERENCE )
71
-
72
- ln = Gloo::Core::Pn.new( obj.value )
73
- return ln.resolve
74
- end
75
-
76
- end
77
- end
78
- end