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,120 +0,0 @@
1
- # Author:: Eric Crane (mailto:eric.crane@mac.com)
2
- # Copyright:: Copyright (c) 2019 Eric Crane. All rights reserved.
3
- #
4
- # An object with an boolean value.
5
- #
6
-
7
- module Gloo
8
- module Objs
9
- class Boolean < Gloo::Core::Obj
10
-
11
- KEYWORD = 'boolean'.freeze
12
- KEYWORD_SHORT = 'bool'.freeze
13
- TRUE = 'true'.freeze
14
- FALSE = 'false'.freeze
15
-
16
- #
17
- # The name of the object type.
18
- #
19
- def self.typename
20
- return KEYWORD
21
- end
22
-
23
- #
24
- # The short name of the object type.
25
- #
26
- def self.short_typename
27
- return KEYWORD_SHORT
28
- end
29
-
30
- #
31
- # Set the value with any necessary type conversions.
32
- #
33
- def set_value( new_value )
34
- self.value = Gloo::Objs::Boolean.coerse_to_bool( new_value )
35
- end
36
-
37
- #
38
- # Coerse the new value to a boolean value.
39
- #
40
- def self.coerse_to_bool( new_value )
41
- return false if new_value.nil?
42
-
43
- # I should be able to use this:
44
- # if new_value.kind_of?( String )
45
- # but it doesn't work. I don't know why.
46
- if new_value.class.name == 'String'
47
- return true if new_value.strip.downcase == TRUE
48
- return false if new_value.strip.downcase == FALSE
49
- return true if new_value.strip.downcase == 't'
50
- return false if new_value.strip.downcase == 'f'
51
- elsif new_value.class.name == 'Integer'
52
- return new_value.zero? ? false : true
53
- end
54
-
55
- return new_value == true
56
- end
57
-
58
- #
59
- # Is the given token a boolean?
60
- #
61
- def self.boolean?( token )
62
- return true if token == true
63
- return true if token == false
64
-
65
- if token.class.name == 'String'
66
- return true if token.strip.downcase == TRUE
67
- return true if token.strip.downcase == FALSE
68
- end
69
- return false
70
- end
71
-
72
- #
73
- # Get the value for display purposes.
74
- #
75
- def value_display
76
- return value ? TRUE : FALSE
77
- end
78
-
79
- # ---------------------------------------------------------------------
80
- # Messages
81
- # ---------------------------------------------------------------------
82
-
83
- #
84
- # Get a list of message names that this object receives.
85
- #
86
- def self.messages
87
- return super + %w[not true false]
88
- end
89
-
90
- #
91
- # Set the value to the opposite of what it is.
92
- #
93
- def msg_not
94
- v = !value
95
- set_value v
96
- $engine.heap.it.set_to v
97
- return v
98
- end
99
-
100
- #
101
- # Set the value to true.
102
- #
103
- def msg_true
104
- set_value true
105
- $engine.heap.it.set_to true
106
- return true
107
- end
108
-
109
- #
110
- # Set the value to false.
111
- #
112
- def msg_false
113
- set_value false
114
- $engine.heap.it.set_to false
115
- return false
116
- end
117
-
118
- end
119
- end
120
- end
@@ -1,76 +0,0 @@
1
- # Author:: Eric Crane (mailto:eric.crane@mac.com)
2
- # Copyright:: Copyright (c) 2019 Eric Crane. All rights reserved.
3
- #
4
- # An object that contains a collection of other objects.
5
- #
6
- require 'tty-table'
7
- require 'pastel'
8
-
9
- module Gloo
10
- module Objs
11
- class Container < Gloo::Core::Obj
12
-
13
- KEYWORD = 'container'.freeze
14
- KEYWORD_SHORT = 'can'.freeze
15
-
16
- #
17
- # The name of the object type.
18
- #
19
- def self.typename
20
- return KEYWORD
21
- end
22
-
23
- #
24
- # The short name of the object type.
25
- #
26
- def self.short_typename
27
- return KEYWORD_SHORT
28
- end
29
-
30
- # ---------------------------------------------------------------------
31
- # Messages
32
- # ---------------------------------------------------------------------
33
-
34
- #
35
- # Get a list of message names that this object receives.
36
- #
37
- def self.messages
38
- return super + %w[count delete_children show_key_value_table]
39
- end
40
-
41
- #
42
- # Count the number of children in the container.
43
- #
44
- def msg_count
45
- i = child_count
46
- $engine.heap.it.set_to i
47
- return i
48
- end
49
-
50
- #
51
- # Delete all children in the container.
52
- #
53
- def msg_delete_children
54
- self.delete_children
55
- end
56
-
57
- #
58
- # Show the given table data.
59
- #
60
- def msg_show_key_value_table
61
- data = self.children.map { |o| [ o.name, o.value ] }
62
- pastel = ::Pastel.new
63
- table = TTY::Table.new rows: data
64
- pad = [ 0, 1, 0, 1 ]
65
- rendered = table.render( :ascii, indent: 2, padding: pad ) do |r|
66
- r.border.style = :blue
67
- r.filter = proc do |val, _row_index, col_index|
68
- col_index.zero? ? pastel.blue( val ) : pastel.white( val )
69
- end
70
- end
71
- puts "\n #{rendered}\n\n"
72
- end
73
-
74
- end
75
- end
76
- end
@@ -1,76 +0,0 @@
1
- # Author:: Eric Crane (mailto:eric.crane@mac.com)
2
- # Copyright:: Copyright (c) 2020 Eric Crane. All rights reserved.
3
- #
4
- # An object with a decimal value.
5
- #
6
-
7
- module Gloo
8
- module Objs
9
- class Decimal < Gloo::Core::Obj
10
-
11
- KEYWORD = 'decimal'.freeze
12
- KEYWORD_SHORT = 'num'.freeze
13
-
14
- #
15
- # The name of the object type.
16
- #
17
- def self.typename
18
- return KEYWORD
19
- end
20
-
21
- #
22
- # The short name of the object type.
23
- #
24
- def self.short_typename
25
- return KEYWORD_SHORT
26
- end
27
-
28
- #
29
- # Set the value with any necessary type conversions.
30
- #
31
- def set_value( new_value )
32
- if new_value.nil?
33
- self.value = 0.0
34
- return
35
- end
36
-
37
- unless new_value.is_a? Numeric
38
- self.value = $engine.converter.convert( new_value, 'Decimal', 0.0 )
39
- return
40
- end
41
-
42
- self.value = new_value.to_f
43
- end
44
-
45
- # ---------------------------------------------------------------------
46
- # Messages
47
- # ---------------------------------------------------------------------
48
-
49
- #
50
- # Get a list of message names that this object receives.
51
- #
52
- def self.messages
53
- return super + %w[round]
54
- end
55
-
56
- #
57
- # Round the value to a whole value.
58
- # If a parameter is included in the message,
59
- # round to the precision given.
60
- #
61
- def msg_round
62
- data = 0
63
- if @params&.token_count&.positive?
64
- expr = Gloo::Expr::Expression.new( @params.tokens )
65
- data = expr.evaluate.to_i
66
- end
67
-
68
- i = self.value.round( data )
69
- set_value i
70
- $engine.heap.it.set_to i
71
- return i
72
- end
73
-
74
- end
75
- end
76
- end
@@ -1,73 +0,0 @@
1
- # Author:: Eric Crane (mailto:eric.crane@mac.com)
2
- # Copyright:: Copyright (c) 2019 Eric Crane. All rights reserved.
3
- #
4
- # An object with an integer value.
5
- #
6
-
7
- module Gloo
8
- module Objs
9
- class Integer < Gloo::Core::Obj
10
-
11
- KEYWORD = 'integer'.freeze
12
- KEYWORD_SHORT = 'int'.freeze
13
-
14
- #
15
- # The name of the object type.
16
- #
17
- def self.typename
18
- return KEYWORD
19
- end
20
-
21
- #
22
- # The short name of the object type.
23
- #
24
- def self.short_typename
25
- return KEYWORD_SHORT
26
- end
27
-
28
- #
29
- # Set the value with any necessary type conversions.
30
- #
31
- def set_value( new_value )
32
- unless new_value.is_a? Numeric
33
- self.value = $engine.converter.convert( new_value, 'Integer', 0 )
34
- return
35
- end
36
-
37
- self.value = new_value.to_i
38
- end
39
-
40
- # ---------------------------------------------------------------------
41
- # Messages
42
- # ---------------------------------------------------------------------
43
-
44
- #
45
- # Get a list of message names that this object receives.
46
- #
47
- def self.messages
48
- return super + %w[inc dec]
49
- end
50
-
51
- #
52
- # Increment the integer
53
- #
54
- def msg_inc
55
- i = value + 1
56
- set_value i
57
- $engine.heap.it.set_to i
58
- return i
59
- end
60
-
61
- #
62
- # Decrement the integer
63
- #
64
- def msg_dec
65
- i = value - 1
66
- set_value i
67
- $engine.heap.it.set_to i
68
- return i
69
- end
70
-
71
- end
72
- end
73
- end
@@ -1,99 +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.
5
- # A set of commands to be run.
6
- #
7
-
8
- module Gloo
9
- module Objs
10
- class Script < Gloo::Core::Obj
11
-
12
- KEYWORD = 'script'.freeze
13
- KEYWORD_SHORT = 'cmd'.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
- # Set the value as an array.
38
- #
39
- def set_array_value( arr )
40
- self.value = arr
41
- end
42
-
43
- #
44
- # Add a line (cmd) to the script.
45
- #
46
- def add_line( line )
47
- if self.value_string?
48
- first = self.value
49
- self.set_array_value []
50
- self.value << first unless first.empty?
51
- elsif self.value_is_blank?
52
- self.set_array_value []
53
- end
54
- self.value << line.strip
55
- end
56
-
57
- #
58
- # Does this object support multi-line values?
59
- # Initially only true for scripts.
60
- #
61
- def multiline_value?
62
- return true
63
- end
64
-
65
- #
66
- # Get the number of lines in this script.
67
- #
68
- def line_count
69
- return self.value.count if self.value_is_array?
70
-
71
- if self.value_string?
72
- return self.value.strip.empty? ? 0 : 1
73
- end
74
-
75
- return 0
76
- end
77
-
78
- # ---------------------------------------------------------------------
79
- # Messages
80
- # ---------------------------------------------------------------------
81
-
82
- #
83
- # Get a list of message names that this object receives.
84
- #
85
- def self.messages
86
- return super + [ 'run' ]
87
- end
88
-
89
- #
90
- # Send the object the unload message.
91
- #
92
- def msg_run
93
- s = Gloo::Exec::Script.new self
94
- s.run
95
- end
96
-
97
- end
98
- end
99
- end
@@ -1,77 +0,0 @@
1
- # Author:: Eric Crane (mailto:eric.crane@mac.com)
2
- # Copyright:: Copyright (c) 2019 Eric Crane. All rights reserved.
3
- #
4
- # A String.
5
- #
6
-
7
- module Gloo
8
- module Objs
9
- class String < Gloo::Core::Obj
10
-
11
- KEYWORD = 'string'.freeze
12
- KEYWORD_SHORT = 'str'.freeze
13
-
14
- #
15
- # The name of the object type.
16
- #
17
- def self.typename
18
- return KEYWORD
19
- end
20
-
21
- #
22
- # The short name of the object type.
23
- #
24
- def self.short_typename
25
- return KEYWORD_SHORT
26
- end
27
-
28
- #
29
- # Set the value with any necessary type conversions.
30
- #
31
- def set_value( new_value )
32
- self.value = new_value.to_s
33
- end
34
-
35
- # ---------------------------------------------------------------------
36
- # Messages
37
- # ---------------------------------------------------------------------
38
-
39
- #
40
- # Get a list of message names that this object receives.
41
- #
42
- def self.messages
43
- return super + %w[up down size]
44
- end
45
-
46
- #
47
- # Get the size of the string.
48
- #
49
- def msg_size
50
- s = value.size
51
- $engine.heap.it.set_to s
52
- return s
53
- end
54
-
55
- #
56
- # Convert string to upper case
57
- #
58
- def msg_up
59
- s = value.upcase
60
- set_value s
61
- $engine.heap.it.set_to s
62
- return s
63
- end
64
-
65
- #
66
- # Convert string to lower case
67
- #
68
- def msg_down
69
- s = value.downcase
70
- set_value s
71
- $engine.heap.it.set_to s
72
- return s
73
- end
74
-
75
- end
76
- end
77
- end
@@ -1,87 +0,0 @@
1
- # Author:: Eric Crane (mailto:eric.crane@mac.com)
2
- # Copyright:: Copyright (c) 2019 Eric Crane. All rights reserved.
3
- #
4
- # A [multiline] block of text.
5
- #
6
- require 'tty-editor'
7
- require 'tty-pager'
8
-
9
- module Gloo
10
- module Objs
11
- class Text < Gloo::Core::Obj
12
-
13
- KEYWORD = 'text'.freeze
14
- KEYWORD_SHORT = 'txt'.freeze
15
- DEFAULT_TMP_FILE = 'tmp.txt'.freeze
16
-
17
- #
18
- # The name of the object type.
19
- #
20
- def self.typename
21
- return KEYWORD
22
- end
23
-
24
- #
25
- # The short name of the object type.
26
- #
27
- def self.short_typename
28
- return KEYWORD_SHORT
29
- end
30
-
31
- #
32
- # Set the value with any necessary type conversions.
33
- #
34
- def set_value( new_value )
35
- self.value = new_value.to_s
36
- end
37
-
38
- #
39
- # Does this object support multi-line values?
40
- # Initially only true for scripts.
41
- #
42
- def multiline_value?
43
- return false
44
- end
45
-
46
- #
47
- # Get the number of lines of text.
48
- #
49
- def line_count
50
- return value.split( "\n" ).count
51
- end
52
-
53
- # ---------------------------------------------------------------------
54
- # Messages
55
- # ---------------------------------------------------------------------
56
-
57
- #
58
- # Get a list of message names that this object receives.
59
- #
60
- def self.messages
61
- return super + %w[edit page]
62
- end
63
-
64
- #
65
- # Show the contents of the file, paginated.
66
- #
67
- def msg_page
68
- return unless value
69
-
70
- # pager = TTY::Pager::SystemPager.new command: 'less -R'
71
- pager = TTY::Pager.new
72
- pager.page( value )
73
- end
74
-
75
- #
76
- # Edit the text in the default editor.
77
- #
78
- def msg_edit
79
- tmp = File.join( $settings.tmp_path, DEFAULT_TMP_FILE )
80
- File.open( tmp, 'w' ) { |file| file.write( self.value ) }
81
- TTY::Editor.open( tmp )
82
- set_value File.read( tmp )
83
- end
84
-
85
- end
86
- end
87
- end
@@ -1,41 +0,0 @@
1
- # Author:: Eric Crane (mailto:eric.crane@mac.com)
2
- # Copyright:: Copyright (c) 2019 Eric Crane. All rights reserved.
3
- #
4
- # An Untyped Object.
5
- #
6
-
7
- module Gloo
8
- module Objs
9
- class Untyped < Gloo::Core::Obj
10
-
11
- KEYWORD = 'untyped'.freeze
12
- KEYWORD_SHORT = 'un'.freeze
13
-
14
- #
15
- # The name of the object type.
16
- #
17
- def self.typename
18
- return KEYWORD
19
- end
20
-
21
- #
22
- # The short name of the object type.
23
- #
24
- def self.short_typename
25
- return KEYWORD_SHORT
26
- end
27
-
28
- # ---------------------------------------------------------------------
29
- # Messages
30
- # ---------------------------------------------------------------------
31
-
32
- #
33
- # Get a list of message names that this object receives.
34
- #
35
- def self.messages
36
- return super # + [ "run" ]
37
- end
38
-
39
- end
40
- end
41
- end