gloo 0.3.0 → 0.5.3

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 (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
@@ -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
@@ -0,0 +1,137 @@
1
+ # Author:: Eric Crane (mailto:eric.crane@mac.com)
2
+ # Copyright:: Copyright (c) 2020 Eric Crane. All rights reserved.
3
+ #
4
+ # Show a large-text banner.
5
+ #
6
+ require 'tty-font'
7
+ require 'pastel'
8
+
9
+ module Gloo
10
+ module Objs
11
+ class Banner < Gloo::Core::Obj
12
+
13
+ KEYWORD = 'banner'.freeze
14
+ KEYWORD_SHORT = 'ban'.freeze
15
+ TEXT = 'text'.freeze
16
+ STYLE = 'style'.freeze
17
+ COLOR = 'color'.freeze
18
+
19
+ #
20
+ # The name of the object type.
21
+ #
22
+ def self.typename
23
+ return KEYWORD
24
+ end
25
+
26
+ #
27
+ # The short name of the object type.
28
+ #
29
+ def self.short_typename
30
+ return KEYWORD_SHORT
31
+ end
32
+
33
+ #
34
+ # Get the banner text from the child object.
35
+ #
36
+ def text_value
37
+ o = find_child TEXT
38
+ return '' unless o
39
+
40
+ return o.value
41
+ end
42
+
43
+ #
44
+ # Get the banner style from the child object.
45
+ #
46
+ def style_value
47
+ o = find_child STYLE
48
+ return '' unless o
49
+
50
+ return o.value
51
+ end
52
+
53
+ #
54
+ # Get the banner color from the child object.
55
+ #
56
+ def color_value
57
+ o = find_child COLOR
58
+ return '' unless o
59
+
60
+ return o.value
61
+ end
62
+
63
+ # ---------------------------------------------------------------------
64
+ # Children
65
+ # ---------------------------------------------------------------------
66
+
67
+ # Does this object have children to add when an object
68
+ # is created in interactive mode?
69
+ # This does not apply during obj load, etc.
70
+ def add_children_on_create?
71
+ return true
72
+ end
73
+
74
+ # Add children to this object.
75
+ # This is used by containers to add children needed
76
+ # for default configurations.
77
+ def add_default_children
78
+ fac = $engine.factory
79
+ fac.create_string TEXT, '', self
80
+ fac.create_string STYLE, '', self
81
+ fac.create_string COLOR, '', self
82
+ end
83
+
84
+ # ---------------------------------------------------------------------
85
+ # Messages
86
+ # ---------------------------------------------------------------------
87
+
88
+ #
89
+ # Get a list of message names that this object receives.
90
+ #
91
+ def self.messages
92
+ return super + %w[show]
93
+ end
94
+
95
+ #
96
+ # Show the banner bar
97
+ #
98
+ def msg_show
99
+ font = TTY::Font.new self.style_value
100
+ t = font.write( self.text_value )
101
+ pastel = ::Pastel.new
102
+ c = self.color_value.split( ' ' ).map( &:to_sym )
103
+ puts pastel.decorate( t, *c )
104
+ end
105
+
106
+ # ---------------------------------------------------------------------
107
+ # Help
108
+ # ---------------------------------------------------------------------
109
+
110
+ #
111
+ # Get help for this object type.
112
+ #
113
+ def self.help
114
+ return <<~TEXT
115
+ BANNER OBJECT TYPE
116
+ NAME: banner
117
+ SHORTCUT: ban
118
+
119
+ DESCRIPTION
120
+ Banner text in large, colored font.
121
+
122
+ CHILDREN
123
+ text - string
124
+ The text for the banner.
125
+ style - string
126
+ The banner style. See tty-font for options.
127
+ color - string
128
+ The color for the banner. See pastel for options.
129
+
130
+ MESSAGES
131
+ show - Show the text banner.
132
+ TEXT
133
+ end
134
+
135
+ end
136
+ end
137
+ end
@@ -0,0 +1,141 @@
1
+ # Author:: Eric Crane (mailto:eric.crane@mac.com)
2
+ # Copyright:: Copyright (c) 2020 Eric Crane. All rights reserved.
3
+ #
4
+ # Show a CLI progress bar.
5
+ #
6
+ require 'tty-progressbar'
7
+
8
+ module Gloo
9
+ module Objs
10
+ class Bar < Gloo::Core::Obj
11
+
12
+ KEYWORD = 'bar'.freeze
13
+ KEYWORD_SHORT = 'bar'.freeze
14
+ NAME = 'name'.freeze
15
+ TOTAL = 'total'.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
+ # Get the bar's name from the child object.
33
+ #
34
+ def name_value
35
+ o = find_child NAME
36
+ return '' unless o
37
+
38
+ return o.value
39
+ end
40
+
41
+ #
42
+ # Get the bar's total from the child object.
43
+ #
44
+ def total_value
45
+ o = find_child TOTAL
46
+ return 100 unless o
47
+
48
+ return o.value
49
+ end
50
+
51
+ # ---------------------------------------------------------------------
52
+ # Children
53
+ # ---------------------------------------------------------------------
54
+
55
+ # Does this object have children to add when an object
56
+ # is created in interactive mode?
57
+ # This does not apply during obj load, etc.
58
+ def add_children_on_create?
59
+ return true
60
+ end
61
+
62
+ # Add children to this object.
63
+ # This is used by containers to add children needed
64
+ # for default configurations.
65
+ def add_default_children
66
+ fac = $engine.factory
67
+ fac.create_string NAME, '', self
68
+ fac.create_int TOTAL, 100, self
69
+ end
70
+
71
+ # ---------------------------------------------------------------------
72
+ # Messages
73
+ # ---------------------------------------------------------------------
74
+
75
+ #
76
+ # Get a list of message names that this object receives.
77
+ #
78
+ def self.messages
79
+ return super + %w[start advance stop]
80
+ end
81
+
82
+ #
83
+ # Start the progress bar.
84
+ #
85
+ def msg_start
86
+ msg = "#{name_value} [:bar] :percent"
87
+ @bar = TTY::ProgressBar.new( msg, total: total_value )
88
+ end
89
+
90
+ #
91
+ # Finish the progress bar.
92
+ #
93
+ def msg_stop
94
+ @bar.finish
95
+ end
96
+
97
+ #
98
+ # Advance the progress bar.
99
+ #
100
+ def msg_advance
101
+ x = 1
102
+ if @params&.token_count&.positive?
103
+ expr = Gloo::Expr::Expression.new( @params.tokens )
104
+ x = expr.evaluate.to_i
105
+ end
106
+
107
+ @bar.advance x
108
+ end
109
+
110
+ # ---------------------------------------------------------------------
111
+ # Help
112
+ # ---------------------------------------------------------------------
113
+
114
+ #
115
+ # Get help for this object type.
116
+ #
117
+ def self.help
118
+ return <<~TEXT
119
+ BAR OBJECT TYPE
120
+ NAME: bar
121
+ SHORTCUT: bar
122
+
123
+ DESCRIPTION
124
+ CLI progress bar
125
+
126
+ CHILDREN
127
+ name - string
128
+ The name of the progress bar.
129
+ total - integer - 100
130
+ The total for the bar.
131
+
132
+ MESSAGES
133
+ start - Start the bar.
134
+ advance <amount> - Advance by the given amount.
135
+ stop - Complete the bar.
136
+ TEXT
137
+ end
138
+
139
+ end
140
+ end
141
+ end
@@ -1,5 +1,5 @@
1
1
  # Author:: Eric Crane (mailto:eric.crane@mac.com)
2
- # Copyright:: Copyright (c) 2019 Eric Crane. All rights reserved.
2
+ # Copyright:: Copyright (c) 2020 Eric Crane. All rights reserved.
3
3
  #
4
4
  # Show colorized output.
5
5
  #
@@ -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