gloo 0.3.0 → 0.4.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.
- checksums.yaml +4 -4
- data/.rubocop.yml +73 -0
- data/Gemfile +2 -2
- data/Gemfile.lock +3 -3
- data/Rakefile +6 -6
- data/bin/console +4 -4
- data/gloo.gemspec +19 -18
- data/lib/gloo.rb +6 -6
- data/lib/gloo/app/args.rb +30 -31
- data/lib/gloo/app/engine.rb +33 -28
- data/lib/gloo/app/help.rb +17 -11
- data/lib/gloo/app/info.rb +3 -3
- data/lib/gloo/app/log.rb +17 -17
- data/lib/gloo/app/mode.rb +4 -4
- data/lib/gloo/app/settings.rb +43 -40
- data/lib/gloo/core/baseo.rb +7 -7
- data/lib/gloo/core/dictionary.rb +30 -27
- data/lib/gloo/core/error.rb +50 -0
- data/lib/gloo/core/event_manager.rb +17 -19
- data/lib/gloo/core/factory.rb +92 -39
- data/lib/gloo/core/gloo_system.rb +49 -54
- data/lib/gloo/core/heap.rb +15 -13
- data/lib/gloo/core/it.rb +5 -5
- data/lib/gloo/core/literal.rb +7 -7
- data/lib/gloo/core/obj.rb +89 -79
- data/lib/gloo/core/obj_finder.rb +9 -14
- data/lib/gloo/core/op.rb +8 -8
- data/lib/gloo/core/parser.rb +25 -26
- data/lib/gloo/core/pn.rb +65 -50
- data/lib/gloo/core/runner.rb +26 -0
- data/lib/gloo/core/script.rb +7 -7
- data/lib/gloo/core/tokens.rb +39 -41
- data/lib/gloo/core/verb.rb +30 -19
- data/lib/gloo/expr/expression.rb +35 -43
- data/lib/gloo/expr/l_boolean.rb +7 -6
- data/lib/gloo/expr/l_integer.rb +5 -4
- data/lib/gloo/expr/l_string.rb +13 -15
- data/lib/gloo/expr/op_div.rb +3 -5
- data/lib/gloo/expr/op_minus.rb +3 -5
- data/lib/gloo/expr/op_mult.rb +3 -5
- data/lib/gloo/expr/op_plus.rb +5 -7
- data/lib/gloo/objs/basic/boolean.rb +63 -38
- data/lib/gloo/objs/basic/container.rb +40 -12
- data/lib/gloo/objs/basic/integer.rb +40 -16
- data/lib/gloo/objs/basic/script.rb +62 -38
- data/lib/gloo/objs/basic/string.rb +39 -15
- data/lib/gloo/objs/basic/text.rb +43 -20
- data/lib/gloo/objs/basic/untyped.rb +35 -10
- data/lib/gloo/objs/cli/colorize.rb +53 -23
- data/lib/gloo/objs/cli/confirm.rb +63 -29
- data/lib/gloo/objs/cli/prompt.rb +63 -29
- data/lib/gloo/objs/ctrl/each.rb +98 -60
- data/lib/gloo/objs/dev/git.rb +98 -64
- data/lib/gloo/objs/ror/erb.rb +81 -41
- data/lib/gloo/objs/ror/eval.rb +73 -31
- data/lib/gloo/objs/snd/play.rb +71 -0
- data/lib/gloo/objs/snd/say.rb +120 -0
- data/lib/gloo/objs/system/file_handle.rb +80 -48
- data/lib/gloo/objs/system/system.rb +84 -38
- data/lib/gloo/objs/web/http_get.rb +83 -46
- data/lib/gloo/objs/web/http_post.rb +69 -43
- data/lib/gloo/objs/web/slack.rb +89 -58
- data/lib/gloo/objs/web/teams.rb +88 -53
- data/lib/gloo/persist/file_loader.rb +81 -82
- data/lib/gloo/persist/file_saver.rb +12 -12
- data/lib/gloo/persist/file_storage.rb +15 -15
- data/lib/gloo/persist/line_splitter.rb +74 -0
- data/lib/gloo/persist/persist_man.rb +29 -29
- data/lib/gloo/utils/words.rb +2 -2
- data/lib/gloo/verbs/alert.rb +67 -16
- data/lib/gloo/verbs/beep.rb +70 -0
- data/lib/gloo/verbs/context.rb +61 -21
- data/lib/gloo/verbs/create.rb +52 -21
- data/lib/gloo/verbs/help.rb +177 -27
- data/lib/gloo/verbs/if.rb +54 -21
- data/lib/gloo/verbs/list.rb +55 -24
- data/lib/gloo/verbs/load.rb +46 -12
- data/lib/gloo/verbs/put.rb +90 -34
- data/lib/gloo/verbs/quit.rb +43 -12
- data/lib/gloo/verbs/run.rb +42 -11
- data/lib/gloo/verbs/save.rb +45 -10
- data/lib/gloo/verbs/show.rb +56 -22
- data/lib/gloo/verbs/tell.rb +44 -12
- data/lib/gloo/verbs/unless.rb +55 -21
- data/lib/gloo/verbs/version.rb +42 -12
- data/lib/run.rb +5 -5
- metadata +19 -12
@@ -7,36 +7,35 @@
|
|
7
7
|
module Gloo
|
8
8
|
module Objs
|
9
9
|
class Container < Gloo::Core::Obj
|
10
|
-
|
11
|
-
KEYWORD = 'container'
|
12
|
-
KEYWORD_SHORT = 'can'
|
13
10
|
|
14
|
-
|
11
|
+
KEYWORD = 'container'.freeze
|
12
|
+
KEYWORD_SHORT = 'can'.freeze
|
13
|
+
|
14
|
+
#
|
15
15
|
# The name of the object type.
|
16
|
-
#
|
16
|
+
#
|
17
17
|
def self.typename
|
18
18
|
return KEYWORD
|
19
19
|
end
|
20
20
|
|
21
|
-
#
|
21
|
+
#
|
22
22
|
# The short name of the object type.
|
23
|
-
#
|
23
|
+
#
|
24
24
|
def self.short_typename
|
25
25
|
return KEYWORD_SHORT
|
26
26
|
end
|
27
27
|
|
28
|
-
|
29
28
|
# ---------------------------------------------------------------------
|
30
29
|
# Messages
|
31
30
|
# ---------------------------------------------------------------------
|
32
31
|
|
33
|
-
#
|
32
|
+
#
|
34
33
|
# Get a list of message names that this object receives.
|
35
|
-
#
|
34
|
+
#
|
36
35
|
def self.messages
|
37
|
-
return super + [
|
36
|
+
return super + [ 'count' ]
|
38
37
|
end
|
39
|
-
|
38
|
+
|
40
39
|
# Count the number of children in the container.
|
41
40
|
def msg_count
|
42
41
|
i = child_count
|
@@ -44,6 +43,35 @@ module Gloo
|
|
44
43
|
return i
|
45
44
|
end
|
46
45
|
|
46
|
+
# ---------------------------------------------------------------------
|
47
|
+
# Help
|
48
|
+
# ---------------------------------------------------------------------
|
49
|
+
|
50
|
+
#
|
51
|
+
# Get help for this object type.
|
52
|
+
#
|
53
|
+
def self.help
|
54
|
+
return <<~TEXT
|
55
|
+
CONTAINER OBJECT TYPE
|
56
|
+
NAME: container
|
57
|
+
SHORTCUT: can
|
58
|
+
|
59
|
+
DESCRIPTION
|
60
|
+
A container of other objects.
|
61
|
+
A container is similar to a folder in a file system.
|
62
|
+
It can contain any number of objects including other containers.
|
63
|
+
The container structure provides direct access to any object
|
64
|
+
within it through the object.object.object path-name structure.
|
65
|
+
|
66
|
+
CHILDREN
|
67
|
+
None by default. But any container can have any number of
|
68
|
+
objects added to it.
|
69
|
+
|
70
|
+
MESSAGES
|
71
|
+
count - Count the number of children objects in the container.
|
72
|
+
The result is put in <it>.
|
73
|
+
TEXT
|
74
|
+
end
|
47
75
|
|
48
76
|
end
|
49
77
|
end
|
@@ -7,43 +7,42 @@
|
|
7
7
|
module Gloo
|
8
8
|
module Objs
|
9
9
|
class Integer < Gloo::Core::Obj
|
10
|
-
|
11
|
-
KEYWORD = 'integer'
|
12
|
-
KEYWORD_SHORT = 'int'
|
13
10
|
|
14
|
-
|
11
|
+
KEYWORD = 'integer'.freeze
|
12
|
+
KEYWORD_SHORT = 'int'.freeze
|
13
|
+
|
14
|
+
#
|
15
15
|
# The name of the object type.
|
16
|
-
#
|
16
|
+
#
|
17
17
|
def self.typename
|
18
18
|
return KEYWORD
|
19
19
|
end
|
20
20
|
|
21
|
-
#
|
21
|
+
#
|
22
22
|
# The short name of the object type.
|
23
|
-
#
|
23
|
+
#
|
24
24
|
def self.short_typename
|
25
25
|
return KEYWORD_SHORT
|
26
26
|
end
|
27
27
|
|
28
|
-
#
|
28
|
+
#
|
29
29
|
# Set the value with any necessary type conversions.
|
30
|
-
#
|
31
|
-
def set_value new_value
|
30
|
+
#
|
31
|
+
def set_value( new_value )
|
32
32
|
self.value = new_value.to_i
|
33
33
|
end
|
34
|
-
|
35
|
-
|
34
|
+
|
36
35
|
# ---------------------------------------------------------------------
|
37
36
|
# Messages
|
38
37
|
# ---------------------------------------------------------------------
|
39
38
|
|
40
|
-
#
|
39
|
+
#
|
41
40
|
# Get a list of message names that this object receives.
|
42
|
-
#
|
41
|
+
#
|
43
42
|
def self.messages
|
44
|
-
return super + [
|
43
|
+
return super + %w[inc dec]
|
45
44
|
end
|
46
|
-
|
45
|
+
|
47
46
|
# Increment the integer
|
48
47
|
def msg_inc
|
49
48
|
i = value + 1
|
@@ -60,6 +59,31 @@ module Gloo
|
|
60
59
|
return i
|
61
60
|
end
|
62
61
|
|
62
|
+
# ---------------------------------------------------------------------
|
63
|
+
# Help
|
64
|
+
# ---------------------------------------------------------------------
|
65
|
+
|
66
|
+
#
|
67
|
+
# Get help for this object type.
|
68
|
+
#
|
69
|
+
def self.help
|
70
|
+
return <<~TEXT
|
71
|
+
INTEGER OBJECT TYPE
|
72
|
+
NAME: integer
|
73
|
+
SHORTCUT: int
|
74
|
+
|
75
|
+
DESCRIPTION
|
76
|
+
An integer (numeric) value.
|
77
|
+
|
78
|
+
CHILDREN
|
79
|
+
None
|
80
|
+
|
81
|
+
MESSAGES
|
82
|
+
inc - Increment the integer value by 1.
|
83
|
+
dec - Decrement the integer value by 1.
|
84
|
+
TEXT
|
85
|
+
end
|
86
|
+
|
63
87
|
end
|
64
88
|
end
|
65
89
|
end
|
@@ -8,43 +8,43 @@
|
|
8
8
|
module Gloo
|
9
9
|
module Objs
|
10
10
|
class Script < Gloo::Core::Obj
|
11
|
-
|
12
|
-
KEYWORD = 'script'
|
13
|
-
KEYWORD_SHORT = 'cmd'
|
14
11
|
|
15
|
-
|
12
|
+
KEYWORD = 'script'.freeze
|
13
|
+
KEYWORD_SHORT = 'cmd'.freeze
|
14
|
+
|
15
|
+
#
|
16
16
|
# The name of the object type.
|
17
|
-
#
|
17
|
+
#
|
18
18
|
def self.typename
|
19
19
|
return KEYWORD
|
20
20
|
end
|
21
21
|
|
22
|
-
#
|
22
|
+
#
|
23
23
|
# The short name of the object type.
|
24
|
-
#
|
24
|
+
#
|
25
25
|
def self.short_typename
|
26
26
|
return KEYWORD_SHORT
|
27
27
|
end
|
28
28
|
|
29
|
-
#
|
29
|
+
#
|
30
30
|
# Set the value with any necessary type conversions.
|
31
|
-
#
|
32
|
-
def set_value new_value
|
31
|
+
#
|
32
|
+
def set_value( new_value )
|
33
33
|
self.value = new_value.to_s
|
34
34
|
end
|
35
|
-
|
36
|
-
#
|
35
|
+
|
36
|
+
#
|
37
37
|
# Set the value as an array.
|
38
|
-
#
|
39
|
-
def set_array_value arr
|
38
|
+
#
|
39
|
+
def set_array_value( arr )
|
40
40
|
self.value = arr
|
41
41
|
end
|
42
|
-
|
43
|
-
#
|
42
|
+
|
43
|
+
#
|
44
44
|
# Add a line (cmd) to the script.
|
45
|
-
#
|
46
|
-
def add_line line
|
47
|
-
if self.
|
45
|
+
#
|
46
|
+
def add_line( line )
|
47
|
+
if self.value_string?
|
48
48
|
first = self.value
|
49
49
|
self.set_array_value []
|
50
50
|
self.value << first unless first.empty?
|
@@ -54,48 +54,72 @@ module Gloo
|
|
54
54
|
self.value << line.strip
|
55
55
|
end
|
56
56
|
|
57
|
-
#
|
57
|
+
#
|
58
58
|
# Does this object support multi-line values?
|
59
59
|
# Initially only true for scripts.
|
60
|
-
#
|
61
|
-
def
|
60
|
+
#
|
61
|
+
def multiline_value?
|
62
62
|
return true
|
63
63
|
end
|
64
|
-
|
65
|
-
#
|
64
|
+
|
65
|
+
#
|
66
66
|
# Get the number of lines in this script.
|
67
|
-
#
|
67
|
+
#
|
68
68
|
def line_count
|
69
|
-
if self.value_is_array?
|
70
|
-
|
71
|
-
|
72
|
-
return
|
73
|
-
return 1
|
74
|
-
else
|
75
|
-
return 0
|
69
|
+
return self.value.count if self.value_is_array?
|
70
|
+
|
71
|
+
if self.value_string?
|
72
|
+
return self.value.strip.empty? ? 0 : 1
|
76
73
|
end
|
74
|
+
|
75
|
+
return 0
|
77
76
|
end
|
78
77
|
|
79
|
-
|
80
78
|
# ---------------------------------------------------------------------
|
81
79
|
# Messages
|
82
80
|
# ---------------------------------------------------------------------
|
83
81
|
|
84
|
-
#
|
82
|
+
#
|
85
83
|
# Get a list of message names that this object receives.
|
86
|
-
#
|
84
|
+
#
|
87
85
|
def self.messages
|
88
|
-
return super + [
|
86
|
+
return super + [ 'run' ]
|
89
87
|
end
|
90
88
|
|
91
|
-
#
|
89
|
+
#
|
92
90
|
# Send the object the unload message.
|
93
|
-
#
|
91
|
+
#
|
94
92
|
def msg_run
|
95
93
|
s = Gloo::Core::Script.new self
|
96
94
|
s.run
|
97
95
|
end
|
98
96
|
|
97
|
+
# ---------------------------------------------------------------------
|
98
|
+
# Help
|
99
|
+
# ---------------------------------------------------------------------
|
100
|
+
|
101
|
+
#
|
102
|
+
# Get help for this object type.
|
103
|
+
#
|
104
|
+
def self.help
|
105
|
+
return <<~TEXT
|
106
|
+
SCRIPT OBJECT TYPE
|
107
|
+
NAME: script
|
108
|
+
SHORTCUT: cmd
|
109
|
+
|
110
|
+
DESCRIPTION
|
111
|
+
An exectutable script.
|
112
|
+
|
113
|
+
CHILDREN
|
114
|
+
None
|
115
|
+
|
116
|
+
MESSAGES
|
117
|
+
run - Run the script.
|
118
|
+
The script can be run by telling the object or run.
|
119
|
+
It can all be executed with the run verb.
|
120
|
+
TEXT
|
121
|
+
end
|
122
|
+
|
99
123
|
end
|
100
124
|
end
|
101
125
|
end
|
@@ -7,43 +7,42 @@
|
|
7
7
|
module Gloo
|
8
8
|
module Objs
|
9
9
|
class String < Gloo::Core::Obj
|
10
|
-
|
11
|
-
KEYWORD = 'string'
|
12
|
-
KEYWORD_SHORT = 'str'
|
13
10
|
|
14
|
-
|
11
|
+
KEYWORD = 'string'.freeze
|
12
|
+
KEYWORD_SHORT = 'str'.freeze
|
13
|
+
|
14
|
+
#
|
15
15
|
# The name of the object type.
|
16
|
-
#
|
16
|
+
#
|
17
17
|
def self.typename
|
18
18
|
return KEYWORD
|
19
19
|
end
|
20
20
|
|
21
|
-
#
|
21
|
+
#
|
22
22
|
# The short name of the object type.
|
23
|
-
#
|
23
|
+
#
|
24
24
|
def self.short_typename
|
25
25
|
return KEYWORD_SHORT
|
26
26
|
end
|
27
27
|
|
28
|
-
#
|
28
|
+
#
|
29
29
|
# Set the value with any necessary type conversions.
|
30
|
-
#
|
31
|
-
def set_value new_value
|
30
|
+
#
|
31
|
+
def set_value( new_value )
|
32
32
|
self.value = new_value.to_s
|
33
33
|
end
|
34
34
|
|
35
|
-
|
36
35
|
# ---------------------------------------------------------------------
|
37
36
|
# Messages
|
38
37
|
# ---------------------------------------------------------------------
|
39
38
|
|
40
|
-
#
|
39
|
+
#
|
41
40
|
# Get a list of message names that this object receives.
|
42
|
-
#
|
41
|
+
#
|
43
42
|
def self.messages
|
44
|
-
return super + [
|
43
|
+
return super + %w[up down]
|
45
44
|
end
|
46
|
-
|
45
|
+
|
47
46
|
# Convert string to upper case
|
48
47
|
def msg_up
|
49
48
|
s = value.upcase
|
@@ -60,6 +59,31 @@ module Gloo
|
|
60
59
|
return s
|
61
60
|
end
|
62
61
|
|
62
|
+
# ---------------------------------------------------------------------
|
63
|
+
# Help
|
64
|
+
# ---------------------------------------------------------------------
|
65
|
+
|
66
|
+
#
|
67
|
+
# Get help for this object type.
|
68
|
+
#
|
69
|
+
def self.help
|
70
|
+
return <<~TEXT
|
71
|
+
STRING OBJECT TYPE
|
72
|
+
NAME: string
|
73
|
+
SHORTCUT: str
|
74
|
+
|
75
|
+
DESCRIPTION
|
76
|
+
A string value.
|
77
|
+
|
78
|
+
CHILDREN
|
79
|
+
None
|
80
|
+
|
81
|
+
MESSAGES
|
82
|
+
up - Convert the string to uppercase.
|
83
|
+
down - Convert the string to lowercase.
|
84
|
+
TEXT
|
85
|
+
end
|
86
|
+
|
63
87
|
end
|
64
88
|
end
|
65
89
|
end
|
data/lib/gloo/objs/basic/text.rb
CHANGED
@@ -7,58 +7,81 @@
|
|
7
7
|
module Gloo
|
8
8
|
module Objs
|
9
9
|
class Text < Gloo::Core::Obj
|
10
|
-
|
11
|
-
KEYWORD = 'text'
|
12
|
-
KEYWORD_SHORT = 'txt'
|
13
10
|
|
14
|
-
|
11
|
+
KEYWORD = 'text'.freeze
|
12
|
+
KEYWORD_SHORT = 'txt'.freeze
|
13
|
+
|
14
|
+
#
|
15
15
|
# The name of the object type.
|
16
|
-
#
|
16
|
+
#
|
17
17
|
def self.typename
|
18
18
|
return KEYWORD
|
19
19
|
end
|
20
20
|
|
21
|
-
#
|
21
|
+
#
|
22
22
|
# The short name of the object type.
|
23
|
-
#
|
23
|
+
#
|
24
24
|
def self.short_typename
|
25
25
|
return KEYWORD_SHORT
|
26
26
|
end
|
27
27
|
|
28
|
-
#
|
28
|
+
#
|
29
29
|
# Set the value with any necessary type conversions.
|
30
|
-
#
|
31
|
-
def set_value new_value
|
30
|
+
#
|
31
|
+
def set_value( new_value )
|
32
32
|
self.value = new_value.to_s
|
33
33
|
end
|
34
34
|
|
35
|
-
#
|
35
|
+
#
|
36
36
|
# Does this object support multi-line values?
|
37
37
|
# Initially only true for scripts.
|
38
|
-
#
|
39
|
-
def
|
38
|
+
#
|
39
|
+
def multiline_value?
|
40
40
|
return false
|
41
41
|
end
|
42
|
-
|
43
|
-
#
|
42
|
+
|
43
|
+
#
|
44
44
|
# Get the number of lines of text.
|
45
|
-
#
|
45
|
+
#
|
46
46
|
def line_count
|
47
47
|
return value.split( "\n" ).count
|
48
48
|
end
|
49
|
-
|
50
|
-
|
49
|
+
|
51
50
|
# ---------------------------------------------------------------------
|
52
51
|
# Messages
|
53
52
|
# ---------------------------------------------------------------------
|
54
53
|
|
55
|
-
#
|
54
|
+
#
|
56
55
|
# Get a list of message names that this object receives.
|
57
|
-
#
|
56
|
+
#
|
58
57
|
def self.messages
|
59
58
|
return super
|
60
59
|
end
|
61
60
|
|
61
|
+
# ---------------------------------------------------------------------
|
62
|
+
# Help
|
63
|
+
# ---------------------------------------------------------------------
|
64
|
+
|
65
|
+
#
|
66
|
+
# Get help for this object type.
|
67
|
+
#
|
68
|
+
def self.help
|
69
|
+
return <<~TEXT
|
70
|
+
TEXT OBJECT TYPE
|
71
|
+
NAME: text
|
72
|
+
SHORTCUT: txt
|
73
|
+
|
74
|
+
DESCRIPTION
|
75
|
+
A longer, multi-line text string.
|
76
|
+
|
77
|
+
CHILDREN
|
78
|
+
None
|
79
|
+
|
80
|
+
MESSAGES
|
81
|
+
None
|
82
|
+
TEXT
|
83
|
+
end
|
84
|
+
|
62
85
|
end
|
63
86
|
end
|
64
87
|
end
|