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.
Files changed (87) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +73 -0
  3. data/Gemfile +2 -2
  4. data/Gemfile.lock +3 -3
  5. data/Rakefile +6 -6
  6. data/bin/console +4 -4
  7. data/gloo.gemspec +19 -18
  8. data/lib/gloo.rb +6 -6
  9. data/lib/gloo/app/args.rb +30 -31
  10. data/lib/gloo/app/engine.rb +33 -28
  11. data/lib/gloo/app/help.rb +17 -11
  12. data/lib/gloo/app/info.rb +3 -3
  13. data/lib/gloo/app/log.rb +17 -17
  14. data/lib/gloo/app/mode.rb +4 -4
  15. data/lib/gloo/app/settings.rb +43 -40
  16. data/lib/gloo/core/baseo.rb +7 -7
  17. data/lib/gloo/core/dictionary.rb +30 -27
  18. data/lib/gloo/core/error.rb +50 -0
  19. data/lib/gloo/core/event_manager.rb +17 -19
  20. data/lib/gloo/core/factory.rb +92 -39
  21. data/lib/gloo/core/gloo_system.rb +49 -54
  22. data/lib/gloo/core/heap.rb +15 -13
  23. data/lib/gloo/core/it.rb +5 -5
  24. data/lib/gloo/core/literal.rb +7 -7
  25. data/lib/gloo/core/obj.rb +89 -79
  26. data/lib/gloo/core/obj_finder.rb +9 -14
  27. data/lib/gloo/core/op.rb +8 -8
  28. data/lib/gloo/core/parser.rb +25 -26
  29. data/lib/gloo/core/pn.rb +65 -50
  30. data/lib/gloo/core/runner.rb +26 -0
  31. data/lib/gloo/core/script.rb +7 -7
  32. data/lib/gloo/core/tokens.rb +39 -41
  33. data/lib/gloo/core/verb.rb +30 -19
  34. data/lib/gloo/expr/expression.rb +35 -43
  35. data/lib/gloo/expr/l_boolean.rb +7 -6
  36. data/lib/gloo/expr/l_integer.rb +5 -4
  37. data/lib/gloo/expr/l_string.rb +13 -15
  38. data/lib/gloo/expr/op_div.rb +3 -5
  39. data/lib/gloo/expr/op_minus.rb +3 -5
  40. data/lib/gloo/expr/op_mult.rb +3 -5
  41. data/lib/gloo/expr/op_plus.rb +5 -7
  42. data/lib/gloo/objs/basic/boolean.rb +63 -38
  43. data/lib/gloo/objs/basic/container.rb +40 -12
  44. data/lib/gloo/objs/basic/integer.rb +40 -16
  45. data/lib/gloo/objs/basic/script.rb +62 -38
  46. data/lib/gloo/objs/basic/string.rb +39 -15
  47. data/lib/gloo/objs/basic/text.rb +43 -20
  48. data/lib/gloo/objs/basic/untyped.rb +35 -10
  49. data/lib/gloo/objs/cli/colorize.rb +53 -23
  50. data/lib/gloo/objs/cli/confirm.rb +63 -29
  51. data/lib/gloo/objs/cli/prompt.rb +63 -29
  52. data/lib/gloo/objs/ctrl/each.rb +98 -60
  53. data/lib/gloo/objs/dev/git.rb +98 -64
  54. data/lib/gloo/objs/ror/erb.rb +81 -41
  55. data/lib/gloo/objs/ror/eval.rb +73 -31
  56. data/lib/gloo/objs/snd/play.rb +71 -0
  57. data/lib/gloo/objs/snd/say.rb +120 -0
  58. data/lib/gloo/objs/system/file_handle.rb +80 -48
  59. data/lib/gloo/objs/system/system.rb +84 -38
  60. data/lib/gloo/objs/web/http_get.rb +83 -46
  61. data/lib/gloo/objs/web/http_post.rb +69 -43
  62. data/lib/gloo/objs/web/slack.rb +89 -58
  63. data/lib/gloo/objs/web/teams.rb +88 -53
  64. data/lib/gloo/persist/file_loader.rb +81 -82
  65. data/lib/gloo/persist/file_saver.rb +12 -12
  66. data/lib/gloo/persist/file_storage.rb +15 -15
  67. data/lib/gloo/persist/line_splitter.rb +74 -0
  68. data/lib/gloo/persist/persist_man.rb +29 -29
  69. data/lib/gloo/utils/words.rb +2 -2
  70. data/lib/gloo/verbs/alert.rb +67 -16
  71. data/lib/gloo/verbs/beep.rb +70 -0
  72. data/lib/gloo/verbs/context.rb +61 -21
  73. data/lib/gloo/verbs/create.rb +52 -21
  74. data/lib/gloo/verbs/help.rb +177 -27
  75. data/lib/gloo/verbs/if.rb +54 -21
  76. data/lib/gloo/verbs/list.rb +55 -24
  77. data/lib/gloo/verbs/load.rb +46 -12
  78. data/lib/gloo/verbs/put.rb +90 -34
  79. data/lib/gloo/verbs/quit.rb +43 -12
  80. data/lib/gloo/verbs/run.rb +42 -11
  81. data/lib/gloo/verbs/save.rb +45 -10
  82. data/lib/gloo/verbs/show.rb +56 -22
  83. data/lib/gloo/verbs/tell.rb +44 -12
  84. data/lib/gloo/verbs/unless.rb +55 -21
  85. data/lib/gloo/verbs/version.rb +42 -12
  86. data/lib/run.rb +5 -5
  87. metadata +19 -12
@@ -7,36 +7,61 @@
7
7
  module Gloo
8
8
  module Objs
9
9
  class Untyped < Gloo::Core::Obj
10
-
11
- KEYWORD = 'untyped'
12
- KEYWORD_SHORT = 'un'
13
10
 
14
- #
11
+ KEYWORD = 'untyped'.freeze
12
+ KEYWORD_SHORT = 'un'.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
36
  return super # + [ "run" ]
38
37
  end
39
38
 
39
+ # ---------------------------------------------------------------------
40
+ # Help
41
+ # ---------------------------------------------------------------------
42
+
43
+ #
44
+ # Get help for this object type.
45
+ #
46
+ def self.help
47
+ return <<~TEXT
48
+ UNTYPED OBJECT TYPE
49
+ NAME: untyped
50
+ SHORTCUT: un
51
+
52
+ DESCRIPTION
53
+ An untyped object.
54
+ If no type is specified when an object is created it
55
+ will be of this type.
56
+
57
+ CHILDREN
58
+ None
59
+
60
+ MESSAGES
61
+ None
62
+ TEXT
63
+ end
64
+
40
65
  end
41
66
  end
42
67
  end
@@ -8,24 +8,23 @@ require 'colorized_string'
8
8
  module Gloo
9
9
  module Objs
10
10
  class Colorize < Gloo::Core::Obj
11
-
12
- KEYWORD = 'colorize'
13
- KEYWORD_SHORT = 'color'
14
11
 
15
- #
12
+ KEYWORD = 'colorize'.freeze
13
+ KEYWORD_SHORT = 'color'.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
-
29
28
 
30
29
  # ---------------------------------------------------------------------
31
30
  # Children
@@ -37,37 +36,68 @@ module Gloo
37
36
  def add_children_on_create?
38
37
  return true
39
38
  end
40
-
39
+
41
40
  # Add children to this object.
42
- # This is used by containers to add children needed
41
+ # This is used by containers to add children needed
43
42
  # for default configurations.
44
43
  def add_default_children
45
44
  fac = $engine.factory
46
- fac.create "white", "string", "", self
45
+ fac.create( { :name => 'white',
46
+ :type => 'string',
47
+ :value => '',
48
+ :parent => self } )
47
49
  end
48
50
 
49
-
50
51
  # ---------------------------------------------------------------------
51
52
  # Messages
52
53
  # ---------------------------------------------------------------------
53
54
 
54
- #
55
+ #
55
56
  # Get a list of message names that this object receives.
56
- #
57
+ #
57
58
  def self.messages
58
- return super + [ "run" ]
59
+ return super + [ 'run' ]
59
60
  end
60
-
61
+
61
62
  # Run the system command.
62
63
  def msg_run
63
- msg = ""
64
- children.each do |o|
65
- msg += ColorizedString[ o.value_display ].colorize( o.name.to_sym )
66
- end
67
- $log.show msg
68
- $engine.heap.it.set_to msg.to_s
64
+ msg = ''
65
+ children.each do |o|
66
+ msg += ColorizedString[ o.value_display ].colorize( o.name.to_sym )
67
+ end
68
+ $log.show msg
69
+ $engine.heap.it.set_to msg.to_s
70
+ end
71
+
72
+ # ---------------------------------------------------------------------
73
+ # Help
74
+ # ---------------------------------------------------------------------
75
+
76
+ #
77
+ # Get help for this object type.
78
+ #
79
+ def self.help
80
+ return <<~TEXT
81
+ COLORIZE OBJECT TYPE
82
+ NAME: colorize
83
+ SHORTCUT: color
84
+
85
+ DESCRIPTION
86
+ The Colorize object can be used to write output in color.
87
+ The Colorize container can contain multiple strings, each
88
+ one can have a different color as specified by the names
89
+ of the children.
90
+
91
+ CHILDREN
92
+ <color> - string - no default value
93
+ The name of the child or children is the color.
94
+ The string's value is what will be written out.
95
+
96
+ MESSAGES
97
+ run - Output the string in the color specified.
98
+ TEXT
69
99
  end
70
-
100
+
71
101
  end
72
102
  end
73
103
  end
@@ -7,45 +7,46 @@
7
7
  module Gloo
8
8
  module Objs
9
9
  class Confirm < Gloo::Core::Obj
10
-
11
- KEYWORD = 'confirm'
12
- KEYWORD_SHORT = 'confirm'
13
- PROMPT = 'prompt'
14
- RESULT = 'result'
15
10
 
16
- #
11
+ KEYWORD = 'confirm'.freeze
12
+ KEYWORD_SHORT = 'confirm'.freeze
13
+ PROMPT = 'prompt'.freeze
14
+ RESULT = 'result'.freeze
15
+
16
+ #
17
17
  # The name of the object type.
18
- #
18
+ #
19
19
  def self.typename
20
20
  return KEYWORD
21
21
  end
22
22
 
23
- #
23
+ #
24
24
  # The short name of the object type.
25
- #
25
+ #
26
26
  def self.short_typename
27
27
  return KEYWORD_SHORT
28
28
  end
29
-
30
- #
29
+
30
+ #
31
31
  # Get the URI from the child object.
32
32
  # Returns nil if there is none.
33
- #
34
- def get_prompt
33
+ #
34
+ def prompt_value
35
35
  o = find_child PROMPT
36
36
  return nil unless o
37
+
37
38
  return o.value
38
39
  end
39
-
40
- #
40
+
41
+ #
41
42
  # Set the result of the system call.
42
- #
43
- def set_result data
43
+ #
44
+ def set_result( data )
44
45
  r = find_child RESULT
45
46
  return nil unless r
47
+
46
48
  r.set_value data
47
49
  end
48
-
49
50
 
50
51
  # ---------------------------------------------------------------------
51
52
  # Children
@@ -57,36 +58,69 @@ module Gloo
57
58
  def add_children_on_create?
58
59
  return true
59
60
  end
60
-
61
+
61
62
  # Add children to this object.
62
- # This is used by containers to add children needed
63
+ # This is used by containers to add children needed
63
64
  # for default configurations.
64
65
  def add_default_children
65
66
  fac = $engine.factory
66
- fac.create "prompt", "string", "> ", self
67
- fac.create "result", "boolean", nil, self
67
+ fac.create( { :name => 'prompt',
68
+ :type => 'string',
69
+ :value => '> ',
70
+ :parent => self } )
71
+ fac.create( { :name => 'result',
72
+ :type => 'boolean',
73
+ :value => nil,
74
+ :parent => self } )
68
75
  end
69
76
 
70
-
71
77
  # ---------------------------------------------------------------------
72
78
  # Messages
73
79
  # ---------------------------------------------------------------------
74
80
 
75
- #
81
+ #
76
82
  # Get a list of message names that this object receives.
77
- #
83
+ #
78
84
  def self.messages
79
- return super + [ "run" ]
85
+ return super + [ 'run' ]
80
86
  end
81
-
87
+
82
88
  # Run the system command.
83
89
  def msg_run
84
- prompt = get_prompt
90
+ prompt = prompt_value
85
91
  return unless prompt
92
+
86
93
  result = $prompt.yes?( prompt )
87
94
  set_result result
88
95
  end
89
-
96
+
97
+ # ---------------------------------------------------------------------
98
+ # Help
99
+ # ---------------------------------------------------------------------
100
+
101
+ #
102
+ # Get help for this object type.
103
+ #
104
+ def self.help
105
+ return <<~TEXT
106
+ CONFIRM OBJECT TYPE
107
+ NAME: confirm
108
+ SHORTCUT: confirm
109
+
110
+ DESCRIPTION
111
+ CLI confirmation prompt.
112
+
113
+ CHILDREN
114
+ prompt - string - '> '
115
+ The confirmation prompt.
116
+ result - boolean - none
117
+ The result of the prompt.
118
+
119
+ MESSAGES
120
+ run - Prompt the user and then set the result.
121
+ TEXT
122
+ end
123
+
90
124
  end
91
125
  end
92
126
  end
@@ -7,45 +7,46 @@
7
7
  module Gloo
8
8
  module Objs
9
9
  class Prompt < Gloo::Core::Obj
10
-
11
- KEYWORD = 'prompt'
12
- KEYWORD_SHORT = 'ask'
13
- PROMPT = 'prompt'
14
- RESULT = 'result'
15
10
 
16
- #
11
+ KEYWORD = 'prompt'.freeze
12
+ KEYWORD_SHORT = 'ask'.freeze
13
+ PROMPT = 'prompt'.freeze
14
+ RESULT = 'result'.freeze
15
+
16
+ #
17
17
  # The name of the object type.
18
- #
18
+ #
19
19
  def self.typename
20
20
  return KEYWORD
21
21
  end
22
22
 
23
- #
23
+ #
24
24
  # The short name of the object type.
25
- #
25
+ #
26
26
  def self.short_typename
27
27
  return KEYWORD_SHORT
28
28
  end
29
-
30
- #
29
+
30
+ #
31
31
  # Get the URI from the child object.
32
32
  # Returns nil if there is none.
33
- #
34
- def get_prompt
33
+ #
34
+ def prompt_value
35
35
  o = find_child PROMPT
36
36
  return nil unless o
37
+
37
38
  return o.value
38
39
  end
39
-
40
- #
40
+
41
+ #
41
42
  # Set the result of the system call.
42
- #
43
- def set_result data
43
+ #
44
+ def set_result( data )
44
45
  r = find_child RESULT
45
46
  return nil unless r
47
+
46
48
  r.set_value data
47
49
  end
48
-
49
50
 
50
51
  # ---------------------------------------------------------------------
51
52
  # Children
@@ -57,36 +58,69 @@ module Gloo
57
58
  def add_children_on_create?
58
59
  return true
59
60
  end
60
-
61
+
61
62
  # Add children to this object.
62
- # This is used by containers to add children needed
63
+ # This is used by containers to add children needed
63
64
  # for default configurations.
64
65
  def add_default_children
65
66
  fac = $engine.factory
66
- fac.create "prompt", "string", "> ", self
67
- fac.create "result", "string", nil, self
67
+ fac.create( { :name => 'prompt',
68
+ :type => 'string',
69
+ :value => '> ',
70
+ :parent => self } )
71
+ fac.create( { :name => 'result',
72
+ :type => 'string',
73
+ :value => nil,
74
+ :parent => self } )
68
75
  end
69
76
 
70
-
71
77
  # ---------------------------------------------------------------------
72
78
  # Messages
73
79
  # ---------------------------------------------------------------------
74
80
 
75
- #
81
+ #
76
82
  # Get a list of message names that this object receives.
77
- #
83
+ #
78
84
  def self.messages
79
- return super + [ "run" ]
85
+ return super + [ 'run' ]
80
86
  end
81
-
87
+
82
88
  # Run the system command.
83
89
  def msg_run
84
- prompt = get_prompt
90
+ prompt = prompt_value
85
91
  return unless prompt
92
+
86
93
  result = $prompt.ask( prompt )
87
94
  set_result result
88
95
  end
89
-
96
+
97
+ # ---------------------------------------------------------------------
98
+ # Help
99
+ # ---------------------------------------------------------------------
100
+
101
+ #
102
+ # Get help for this object type.
103
+ #
104
+ def self.help
105
+ return <<~TEXT
106
+ PROMPT OBJECT TYPE
107
+ NAME: prompt
108
+ SHORTCUT: ask
109
+
110
+ DESCRIPTION
111
+ CLI prompt for user input.
112
+
113
+ CHILDREN
114
+ prompt - string - '> '
115
+ The prompt displayed to the user.
116
+ result - string - none
117
+ The result with the user's input.
118
+
119
+ MESSAGES
120
+ run - Prompt the user and then set the result.
121
+ TEXT
122
+ end
123
+
90
124
  end
91
125
  end
92
126
  end