gloo 0.3.0 → 0.5.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (112) hide show
  1. checksums.yaml +4 -4
  2. data/.DS_Store +0 -0
  3. data/.rubocop.yml +73 -0
  4. data/Gemfile +2 -2
  5. data/Gemfile.lock +86 -83
  6. data/Rakefile +7 -6
  7. data/bin/console +4 -4
  8. data/gloo.gemspec +22 -18
  9. data/lib/gloo.rb +6 -6
  10. data/lib/gloo/app/args.rb +30 -31
  11. data/lib/gloo/app/engine.rb +80 -30
  12. data/lib/gloo/app/help.rb +17 -11
  13. data/lib/gloo/app/info.rb +3 -3
  14. data/lib/gloo/app/log.rb +17 -17
  15. data/lib/gloo/app/mode.rb +4 -4
  16. data/lib/gloo/app/settings.rb +51 -41
  17. data/lib/gloo/convert/string_to_datetime.rb +21 -0
  18. data/lib/gloo/convert/string_to_decimal.rb +20 -0
  19. data/lib/gloo/convert/string_to_integer.rb +20 -0
  20. data/lib/gloo/core/baseo.rb +7 -7
  21. data/lib/gloo/core/dictionary.rb +30 -27
  22. data/lib/gloo/core/error.rb +50 -0
  23. data/lib/gloo/core/event_manager.rb +17 -23
  24. data/lib/gloo/core/factory.rb +149 -39
  25. data/lib/gloo/core/gloo_system.rb +121 -54
  26. data/lib/gloo/core/heap.rb +15 -13
  27. data/lib/gloo/core/it.rb +5 -5
  28. data/lib/gloo/core/literal.rb +7 -7
  29. data/lib/gloo/core/obj.rb +138 -79
  30. data/lib/gloo/core/obj_finder.rb +9 -14
  31. data/lib/gloo/core/op.rb +8 -8
  32. data/lib/gloo/core/parser.rb +27 -26
  33. data/lib/gloo/core/pn.rb +68 -52
  34. data/lib/gloo/core/script.rb +7 -7
  35. data/lib/gloo/core/tokens.rb +39 -41
  36. data/lib/gloo/core/verb.rb +30 -19
  37. data/lib/gloo/exec/dispatch.rb +30 -0
  38. data/lib/gloo/exec/runner.rb +43 -0
  39. data/lib/gloo/expr/expression.rb +36 -43
  40. data/lib/gloo/expr/l_boolean.rb +7 -6
  41. data/lib/gloo/expr/l_decimal.rb +34 -0
  42. data/lib/gloo/expr/l_integer.rb +5 -4
  43. data/lib/gloo/expr/l_string.rb +13 -15
  44. data/lib/gloo/expr/op_div.rb +5 -5
  45. data/lib/gloo/expr/op_minus.rb +5 -5
  46. data/lib/gloo/expr/op_mult.rb +5 -5
  47. data/lib/gloo/expr/op_plus.rb +7 -7
  48. data/lib/gloo/objs/basic/alias.rb +111 -0
  49. data/lib/gloo/objs/basic/boolean.rb +63 -38
  50. data/lib/gloo/objs/basic/container.rb +71 -12
  51. data/lib/gloo/objs/basic/decimal.rb +96 -0
  52. data/lib/gloo/objs/basic/integer.rb +45 -16
  53. data/lib/gloo/objs/basic/script.rb +62 -38
  54. data/lib/gloo/objs/basic/string.rb +47 -15
  55. data/lib/gloo/objs/basic/text.rb +69 -21
  56. data/lib/gloo/objs/basic/untyped.rb +35 -10
  57. data/lib/gloo/objs/cli/banner.rb +137 -0
  58. data/lib/gloo/objs/cli/bar.rb +141 -0
  59. data/lib/gloo/objs/cli/colorize.rb +54 -24
  60. data/lib/gloo/objs/cli/confirm.rb +63 -29
  61. data/lib/gloo/objs/cli/menu.rb +236 -0
  62. data/lib/gloo/objs/cli/menu_item.rb +128 -0
  63. data/lib/gloo/objs/cli/pastel.rb +120 -0
  64. data/lib/gloo/objs/cli/prompt.rb +73 -31
  65. data/lib/gloo/objs/cli/select.rb +153 -0
  66. data/lib/gloo/objs/ctrl/each.rb +128 -61
  67. data/lib/gloo/objs/ctrl/repeat.rb +129 -0
  68. data/lib/gloo/objs/data/markdown.rb +109 -0
  69. data/lib/gloo/objs/data/table.rb +168 -0
  70. data/lib/gloo/objs/dev/git.rb +98 -64
  71. data/lib/gloo/objs/dt/date.rb +72 -0
  72. data/lib/gloo/objs/dt/datetime.rb +84 -0
  73. data/lib/gloo/objs/dt/time.rb +72 -0
  74. data/lib/gloo/objs/ror/erb.rb +82 -41
  75. data/lib/gloo/objs/ror/eval.rb +73 -31
  76. data/lib/gloo/objs/snd/play.rb +71 -0
  77. data/lib/gloo/objs/snd/say.rb +120 -0
  78. data/lib/gloo/objs/system/file_handle.rb +129 -48
  79. data/lib/gloo/objs/system/system.rb +84 -38
  80. data/lib/gloo/objs/web/http_get.rb +103 -46
  81. data/lib/gloo/objs/web/http_post.rb +70 -44
  82. data/lib/gloo/objs/web/json.rb +155 -0
  83. data/lib/gloo/objs/web/slack.rb +89 -58
  84. data/lib/gloo/objs/web/teams.rb +88 -53
  85. data/lib/gloo/objs/web/uri.rb +160 -0
  86. data/lib/gloo/persist/file_loader.rb +95 -85
  87. data/lib/gloo/persist/file_saver.rb +12 -12
  88. data/lib/gloo/persist/file_storage.rb +15 -15
  89. data/lib/gloo/persist/line_splitter.rb +79 -0
  90. data/lib/gloo/persist/persist_man.rb +63 -39
  91. data/lib/gloo/utils/words.rb +2 -2
  92. data/lib/gloo/verbs/alert.rb +67 -16
  93. data/lib/gloo/verbs/beep.rb +70 -0
  94. data/lib/gloo/verbs/cls.rb +67 -0
  95. data/lib/gloo/verbs/context.rb +61 -21
  96. data/lib/gloo/verbs/create.rb +52 -21
  97. data/lib/gloo/verbs/help.rb +186 -27
  98. data/lib/gloo/verbs/if.rb +55 -21
  99. data/lib/gloo/verbs/list.rb +55 -24
  100. data/lib/gloo/verbs/load.rb +47 -12
  101. data/lib/gloo/verbs/move.rb +128 -0
  102. data/lib/gloo/verbs/put.rb +90 -34
  103. data/lib/gloo/verbs/quit.rb +43 -12
  104. data/lib/gloo/verbs/run.rb +63 -18
  105. data/lib/gloo/verbs/save.rb +45 -10
  106. data/lib/gloo/verbs/show.rb +56 -22
  107. data/lib/gloo/verbs/tell.rb +45 -13
  108. data/lib/gloo/verbs/unless.rb +56 -21
  109. data/lib/gloo/verbs/version.rb +42 -12
  110. data/lib/gloo/verbs/wait.rb +73 -0
  111. data/lib/run.rb +5 -5
  112. metadata +90 -12
@@ -0,0 +1,72 @@
1
+ # Author:: Eric Crane (mailto:eric.crane@mac.com)
2
+ # Copyright:: Copyright (c) 2020 Eric Crane. All rights reserved.
3
+ #
4
+ # A Date object (does not include a time).
5
+ #
6
+
7
+ module Gloo
8
+ module Objs
9
+ class Date < Gloo::Core::Obj
10
+
11
+ KEYWORD = 'date'.freeze
12
+ KEYWORD_SHORT = 'date'.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 + %w[now]
37
+ end
38
+
39
+ # Get the current working branch.
40
+ def msg_now
41
+ t = DateTime.now.strftime( '%Y.%m.%d' )
42
+ self.value = t
43
+ $engine.heap.it.set_to t
44
+ end
45
+
46
+ # ---------------------------------------------------------------------
47
+ # Help
48
+ # ---------------------------------------------------------------------
49
+
50
+ #
51
+ # Get help for this object type.
52
+ #
53
+ def self.help
54
+ return <<~TEXT
55
+ DATE OBJECT TYPE
56
+ NAME: date
57
+ SHORTCUT: date
58
+
59
+ DESCRIPTION
60
+ A reference to a date, but without time.
61
+
62
+ CHILDREN
63
+ None
64
+
65
+ MESSAGES
66
+ now - Set to the current system date.
67
+ TEXT
68
+ end
69
+
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,84 @@
1
+ # Author:: Eric Crane (mailto:eric.crane@mac.com)
2
+ # Copyright:: Copyright (c) 2020 Eric Crane. All rights reserved.
3
+ #
4
+ # A Date and Time object.
5
+ #
6
+
7
+ module Gloo
8
+ module Objs
9
+ class Datetime < Gloo::Core::Obj
10
+
11
+ KEYWORD = 'datetime'.freeze
12
+ KEYWORD_SHORT = 'dt'.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? DateTime
33
+ self.value = $engine.convert( new_value, 'DateTime', nil )
34
+ return
35
+ end
36
+
37
+ self.value = new_value
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[now]
49
+ end
50
+
51
+ # Get the current working branch.
52
+ def msg_now
53
+ t = DateTime.now.strftime( '%Y.%m.%d %I:%M:%S %P' )
54
+ self.value = t
55
+ $engine.heap.it.set_to t
56
+ end
57
+
58
+ # ---------------------------------------------------------------------
59
+ # Help
60
+ # ---------------------------------------------------------------------
61
+
62
+ #
63
+ # Get help for this object type.
64
+ #
65
+ def self.help
66
+ return <<~TEXT
67
+ DATETIME OBJECT TYPE
68
+ NAME: datetime
69
+ SHORTCUT: dt
70
+
71
+ DESCRIPTION
72
+ A reference to a date and time.
73
+
74
+ CHILDREN
75
+ None
76
+
77
+ MESSAGES
78
+ now - Set to the current system date and time.
79
+ TEXT
80
+ end
81
+
82
+ end
83
+ end
84
+ end
@@ -0,0 +1,72 @@
1
+ # Author:: Eric Crane (mailto:eric.crane@mac.com)
2
+ # Copyright:: Copyright (c) 2020 Eric Crane. All rights reserved.
3
+ #
4
+ # A Time object (does not include a date).
5
+ #
6
+
7
+ module Gloo
8
+ module Objs
9
+ class Time < Gloo::Core::Obj
10
+
11
+ KEYWORD = 'time'.freeze
12
+ KEYWORD_SHORT = 'time'.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 + %w[now]
37
+ end
38
+
39
+ # Get the current working branch.
40
+ def msg_now
41
+ t = DateTime.now.strftime( '%I:%M:%S %P' )
42
+ self.value = t
43
+ $engine.heap.it.set_to t
44
+ end
45
+
46
+ # ---------------------------------------------------------------------
47
+ # Help
48
+ # ---------------------------------------------------------------------
49
+
50
+ #
51
+ # Get help for this object type.
52
+ #
53
+ def self.help
54
+ return <<~TEXT
55
+ TIME OBJECT TYPE
56
+ NAME: time
57
+ SHORTCUT: time
58
+
59
+ DESCRIPTION
60
+ A reference to a time, but without a date.
61
+
62
+ CHILDREN
63
+ None
64
+
65
+ MESSAGES
66
+ now - Set to the current system time.
67
+ TEXT
68
+ end
69
+
70
+ end
71
+ end
72
+ end
@@ -8,61 +8,62 @@ require 'erb'
8
8
  module Gloo
9
9
  module Objs
10
10
  class Erb < Gloo::Core::Obj
11
-
12
- KEYWORD = 'erb'
13
- KEYWORD_SHORT = 'erb'
14
- TEMPLATE = 'template'
15
- PARAMS = 'params'
16
- RESULT = 'result'
17
-
18
- #
11
+
12
+ KEYWORD = 'erb'.freeze
13
+ KEYWORD_SHORT = 'erb'.freeze
14
+ TEMPLATE = 'template'.freeze
15
+ PARAMS = 'params'.freeze
16
+ RESULT = 'result'.freeze
17
+
18
+ #
19
19
  # The name of the object type.
20
- #
20
+ #
21
21
  def self.typename
22
22
  return KEYWORD
23
23
  end
24
24
 
25
- #
25
+ #
26
26
  # The short name of the object type.
27
- #
27
+ #
28
28
  def self.short_typename
29
29
  return KEYWORD_SHORT
30
30
  end
31
-
32
- #
31
+
32
+ #
33
33
  # Get the ERB template.
34
- #
35
- def get_template
34
+ #
35
+ def template_value
36
36
  tmpl = find_child TEMPLATE
37
37
  return nil unless tmpl
38
+
38
39
  return tmpl.value
39
40
  end
40
-
41
- #
41
+
42
+ #
42
43
  # Set the result of the system call.
43
- #
44
- def set_result data
44
+ #
45
+ def set_result( data )
45
46
  r = find_child RESULT
46
47
  return nil unless r
48
+
47
49
  r.set_value data
48
50
  end
49
-
50
- #
51
+
52
+ #
51
53
  # Get a hash with parameters for the ERB render.
52
- #
53
- def get_param_hash
54
+ #
55
+ def param_hash
54
56
  h = {}
55
-
57
+
56
58
  body = find_child PARAMS
57
59
  body.children.each do |child|
60
+ child = Gloo::Objs::Alias.resolve_alias( child )
58
61
  h[ child.name ] = child.value
59
62
  end
60
-
63
+
61
64
  return h
62
65
  end
63
66
 
64
-
65
-
66
67
  # ---------------------------------------------------------------------
67
68
  # Children
68
69
  # ---------------------------------------------------------------------
@@ -73,37 +74,77 @@ module Gloo
73
74
  def add_children_on_create?
74
75
  return true
75
76
  end
76
-
77
+
77
78
  # Add children to this object.
78
- # This is used by containers to add children needed
79
+ # This is used by containers to add children needed
79
80
  # for default configurations.
80
81
  def add_default_children
81
82
  fac = $engine.factory
82
- fac.create "template", "text", "", self
83
- fac.create "params", "container", nil, self
84
- fac.create "result", "text", nil, self
83
+ fac.create( { :name => 'template',
84
+ :type => 'text',
85
+ :value => '',
86
+ :parent => self } )
87
+ fac.create( { :name => 'params',
88
+ :type => 'container',
89
+ :value => nil,
90
+ :parent => self } )
91
+ fac.create( { :name => 'result',
92
+ :type => 'text',
93
+ :value => nil,
94
+ :parent => self } )
85
95
  end
86
96
 
87
-
88
97
  # ---------------------------------------------------------------------
89
98
  # Messages
90
99
  # ---------------------------------------------------------------------
91
100
 
92
- #
101
+ #
93
102
  # Get a list of message names that this object receives.
94
- #
103
+ #
95
104
  def self.messages
96
- return super + [ "run" ]
105
+ return super + [ 'run' ]
97
106
  end
98
-
107
+
99
108
  # Run the system command.
100
109
  def msg_run
101
- tmpl = get_template
110
+ tmpl = template_value
102
111
  return unless tmpl
103
- render = ERB.new( tmpl )
104
- set_result render.result_with_hash( get_param_hash )
112
+
113
+ render = ERB.new( tmpl )
114
+ set_result render.result_with_hash( param_hash )
105
115
  end
106
-
116
+
117
+ # ---------------------------------------------------------------------
118
+ # Help
119
+ # ---------------------------------------------------------------------
120
+
121
+ #
122
+ # Get help for this object type.
123
+ #
124
+ def self.help
125
+ return <<~TEXT
126
+ ERB OBJECT TYPE
127
+ NAME: erb
128
+ SHORTCUT: erb
129
+
130
+ DESCRIPTION
131
+ Use the ERB templating system to generate content.
132
+
133
+ CHILDREN
134
+ template - text
135
+ The template that will be used the the ERB object is run.
136
+ params - container
137
+ The collection of children values that will be used
138
+ when the template object is rendered.
139
+ result - text
140
+ The result of the template rendering.
141
+
142
+ MESSAGES
143
+ run - Render the result based on the template and the
144
+ parameter values.
145
+ TEXT
146
+ end
147
+
107
148
  end
108
149
  end
109
150
  end
@@ -7,45 +7,46 @@
7
7
  module Gloo
8
8
  module Objs
9
9
  class Eval < Gloo::Core::Obj
10
-
11
- KEYWORD = 'eval'
12
- KEYWORD_SHORT = 'ruby'
13
- CMD = 'command'
14
- RESULT = 'result'
15
10
 
16
- #
11
+ KEYWORD = 'eval'.freeze
12
+ KEYWORD_SHORT = 'ruby'.freeze
13
+ CMD = 'command'.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_cmd
33
+ #
34
+ def cmd_value
35
35
  cmd = find_child CMD
36
36
  return nil unless cmd
37
+
37
38
  return cmd.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,77 @@ 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 "command", "string", "date", self
67
- fac.create "result", "string", nil, self
67
+ fac.create( { :name => 'command',
68
+ :type => 'string',
69
+ :value => '1+2',
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
- cmd = get_cmd
90
+ cmd = cmd_value
85
91
  return unless cmd
86
- result = eval cmd
87
- set_result result
92
+
93
+ begin
94
+ # rubocop:disable Security/Eval
95
+ result = eval cmd
96
+ # rubocop:enable Security/Eval
97
+ set_result result
98
+ $engine.heap.it.set_to result
99
+ rescue => e
100
+ $log.error e.message
101
+ $engine.heap.error.set_to e.message
102
+ end
88
103
  end
89
-
104
+
105
+ # ---------------------------------------------------------------------
106
+ # Help
107
+ # ---------------------------------------------------------------------
108
+
109
+ #
110
+ # Get help for this object type.
111
+ #
112
+ def self.help
113
+ return <<~TEXT
114
+ EVAL OBJECT TYPE
115
+ NAME: eval
116
+ SHORTCUT: ruby
117
+
118
+ DESCRIPTION
119
+ Execute a ruby expression.
120
+
121
+ CHILDREN
122
+ command - string
123
+ The ruby expression or command that will be run.
124
+ result - string
125
+ The result of the command or expression after it is run.
126
+
127
+ MESSAGES
128
+ run - Execute the ruby command and update the result.
129
+ TEXT
130
+ end
131
+
90
132
  end
91
133
  end
92
134
  end