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
@@ -10,73 +10,73 @@ require 'json'
10
10
  module Gloo
11
11
  module Objs
12
12
  class Slack < Gloo::Core::Obj
13
-
14
- KEYWORD = 'slack'
15
- KEYWORD_SHORT = 'slack'
16
- URL = 'uri'
17
- MSG = 'message'
18
- USER = 'username'
19
- CHANNEL = 'channel'
20
- ICON = 'icon_emoji'
21
-
22
- ATTACHMENT = 'attachment'
23
- TITLE = 'title'
24
- TEXT = 'text'
25
-
26
- #
13
+
14
+ KEYWORD = 'slack'.freeze
15
+ KEYWORD_SHORT = 'slack'.freeze
16
+ URL = 'uri'.freeze
17
+ MSG = 'message'.freeze
18
+ USER = 'username'.freeze
19
+ CHANNEL = 'channel'.freeze
20
+ ICON = 'icon_emoji'.freeze
21
+
22
+ ATTACHMENT = 'attachment'.freeze
23
+ TITLE = 'title'.freeze
24
+ TEXT = 'text'.freeze
25
+
26
+ #
27
27
  # The name of the object type.
28
- #
28
+ #
29
29
  def self.typename
30
30
  return KEYWORD
31
31
  end
32
32
 
33
- #
33
+ #
34
34
  # The short name of the object type.
35
- #
35
+ #
36
36
  def self.short_typename
37
37
  return KEYWORD_SHORT
38
38
  end
39
-
40
- #
39
+
40
+ #
41
41
  # Get the URI from the child object.
42
42
  # Returns nil if there is none.
43
- #
44
- def get_uri
43
+ #
44
+ def uri_value
45
45
  uri = find_child URL
46
46
  return nil unless uri
47
+
47
48
  return uri.value
48
49
  end
49
50
 
50
- #
51
+ #
51
52
  # Get the URI from the child object.
52
53
  # Returns nil if there is none.
53
- #
54
- def get_attachment
54
+ #
55
+ def attachment_value
55
56
  o = find_child ATTACHMENT
56
57
  return nil unless o
57
-
58
- title = o.find_child TITLE
59
- text = o.find_child TEXT
60
- return [{ 'title' => title.value, 'text' => text.value }]
58
+
59
+ title = o.find_child TITLE
60
+ text = o.find_child TEXT
61
+ return [ { 'title' => title.value,
62
+ 'text' => text.value } ]
61
63
  end
62
-
63
- #
64
- # Get all the children of the body container and
64
+
65
+ #
66
+ # Get all the children of the body container and
65
67
  # convert to JSON that will be sent in the HTTP body.
66
- #
67
- def get_body_as_json
68
+ #
69
+ def body_as_json
68
70
  h = { 'text' => find_child( MSG ).value,
69
- 'username' => find_child( USER ).value,
70
- 'channel' => find_child( CHANNEL ).value,
71
- 'icon_emoji' => find_child( ICON ).value,
72
- }
73
-
74
- o = get_attachment
75
- h[ 'attachments' ] = o if o
71
+ 'username' => find_child( USER ).value,
72
+ 'channel' => find_child( CHANNEL ).value,
73
+ 'icon_emoji' => find_child( ICON ).value }
74
+
75
+ o = attachment_value
76
+ h[ 'attachments' ] = o if o
76
77
  return h.to_json
77
78
  end
78
79
 
79
-
80
80
  # ---------------------------------------------------------------------
81
81
  # Children
82
82
  # ---------------------------------------------------------------------
@@ -87,40 +87,71 @@ module Gloo
87
87
  def add_children_on_create?
88
88
  return true
89
89
  end
90
-
90
+
91
91
  # Add children to this object.
92
- # This is used by containers to add children needed
92
+ # This is used by containers to add children needed
93
93
  # for default configurations.
94
94
  def add_default_children
95
95
  fac = $engine.factory
96
- fac.create URL, "string", "https://hooks.slack.com/services/...", self
97
- fac.create MSG, "string", "textual message", self
98
- fac.create USER, "string", "Slack Bot", self
99
- fac.create CHANNEL, "string", "general", self
100
- fac.create ICON, "string", ":ghost:", self
96
+ fac.create_string URL, 'https://hooks.slack.com/services/...', self
97
+ fac.create_string MSG, 'textual message', self
98
+ fac.create_string USER, 'Slack Bot', self
99
+ fac.create_string CHANNEL, 'general', self
100
+ fac.create_string ICON, ':ghost:', self
101
101
  end
102
102
 
103
-
104
103
  # ---------------------------------------------------------------------
105
104
  # Messages
106
105
  # ---------------------------------------------------------------------
107
106
 
108
- #
107
+ #
109
108
  # Get a list of message names that this object receives.
110
- #
109
+ #
111
110
  def self.messages
112
- return super + [ "run" ]
111
+ return super + [ 'run' ]
113
112
  end
114
-
113
+
115
114
  # Post the content to the endpoint.
116
115
  def msg_run
117
- uri = get_uri
116
+ uri = uri_value
118
117
  return unless uri
119
-
120
- body = get_body_as_json
121
- Gloo::Objs::HttpPost.post_json uri, body, true
118
+
119
+ Gloo::Objs::HttpPost.post_json uri, body_as_json, true
120
+ end
121
+
122
+ # ---------------------------------------------------------------------
123
+ # Help
124
+ # ---------------------------------------------------------------------
125
+
126
+ #
127
+ # Get help for this object type.
128
+ #
129
+ def self.help
130
+ return <<~TEXT
131
+ SLACK OBJECT TYPE
132
+ NAME: slack
133
+ SHORTCUT: slack
134
+
135
+ DESCRIPTION
136
+ Send message to channel in Slack.
137
+
138
+ CHILDREN
139
+ uri - string - 'https://hooks.slack.com/services/...'
140
+ The URI with access to the Slack channel.
141
+ message - string - 'textual message'
142
+ Message to send to Slack.
143
+ username - string - 'Slack Bot'
144
+ Attribute the message to this user.
145
+ channel - string - 'general'
146
+ The name of the channel for the post.
147
+ icon_emoji - string - ':ghost:'
148
+ The emoji to use for the attribution.
149
+
150
+ MESSAGES
151
+ run - Post the message to Slack.
152
+ TEXT
122
153
  end
123
-
154
+
124
155
  end
125
156
  end
126
157
  end
@@ -10,63 +10,59 @@ require 'json'
10
10
  module Gloo
11
11
  module Objs
12
12
  class Teams < Gloo::Core::Obj
13
-
14
- KEYWORD = 'teams'
15
- KEYWORD_SHORT = 'team'
16
- URL = 'uri'
17
- MSG = 'message'
18
- TITLE = 'title'
19
- COLOR = 'color'
20
-
21
- #
13
+
14
+ KEYWORD = 'teams'.freeze
15
+ KEYWORD_SHORT = 'team'.freeze
16
+ URL = 'uri'.freeze
17
+ MSG = 'message'.freeze
18
+ TITLE = 'title'.freeze
19
+ COLOR = 'color'.freeze
20
+
21
+ #
22
22
  # The name of the object type.
23
- #
23
+ #
24
24
  def self.typename
25
25
  return KEYWORD
26
26
  end
27
27
 
28
- #
28
+ #
29
29
  # The short name of the object type.
30
- #
30
+ #
31
31
  def self.short_typename
32
32
  return KEYWORD_SHORT
33
33
  end
34
-
35
- #
34
+
35
+ #
36
36
  # Get the URI from the child object.
37
37
  # Returns nil if there is none.
38
- #
39
- def get_uri
38
+ #
39
+ def uri_value
40
40
  uri = find_child URL
41
41
  return nil unless uri
42
+
42
43
  return uri.value
43
44
  end
44
-
45
- # Get the color value.
46
- def get_color
47
- c = find_child COLOR
45
+
46
+ # Get the color value.
47
+ def color_value
48
+ c = find_child COLOR
48
49
  return nil unless c
50
+
49
51
  return c.value
50
- end
51
-
52
- #
53
- # Get all the children of the body container and
52
+ end
53
+
54
+ #
55
+ # Get all the children of the body container and
54
56
  # convert to JSON that will be sent in the HTTP body.
55
- #
56
- def get_body_as_json
57
+ #
58
+ def body_as_json
57
59
  h = { 'title' => find_child( TITLE ).value,
58
- 'text' => find_child( MSG ).value
59
- }
60
-
61
- color = get_color
62
- if color
63
- h[ 'themeColor' ] = color
64
- end
65
-
60
+ 'text' => find_child( MSG ).value }
61
+ color = color_value
62
+ h[ 'themeColor' ] = color if color
66
63
  return h.to_json
67
64
  end
68
65
 
69
-
70
66
  # ---------------------------------------------------------------------
71
67
  # Children
72
68
  # ---------------------------------------------------------------------
@@ -77,41 +73,80 @@ module Gloo
77
73
  def add_children_on_create?
78
74
  return true
79
75
  end
80
-
76
+
81
77
  # Add children to this object.
82
- # This is used by containers to add children needed
78
+ # This is used by containers to add children needed
83
79
  # for default configurations.
84
80
  def add_default_children
85
81
  fac = $engine.factory
86
- fac.create URL, "string", "https://outlook.office.com/webhook/...", self
87
- fac.create TITLE, "string", "", self
88
- fac.create COLOR, "color", "008000", self
89
- fac.create MSG, "string", "", self
82
+ fac.create( { :name => URL,
83
+ :type => 'string',
84
+ :value => 'https://outlook.office.com/webhook/...',
85
+ :parent => self } )
86
+ fac.create( { :name => TITLE,
87
+ :type => 'string',
88
+ :value => '',
89
+ :parent => self } )
90
+ fac.create( { :name => COLOR,
91
+ :type => 'color',
92
+ :value => '008000',
93
+ :parent => self } )
94
+ fac.create( { :name => MSG,
95
+ :type => 'string',
96
+ :value => '',
97
+ :parent => self } )
90
98
  end
91
99
 
92
-
93
100
  # ---------------------------------------------------------------------
94
101
  # Messages
95
102
  # ---------------------------------------------------------------------
96
103
 
97
- #
104
+ #
98
105
  # Get a list of message names that this object receives.
99
- #
106
+ #
100
107
  def self.messages
101
- return super + [ "run" ]
108
+ return super + [ 'run' ]
102
109
  end
103
-
110
+
104
111
  # Post the content to the endpoint.
105
112
  def msg_run
106
- uri = get_uri
113
+ uri = uri_value
107
114
  return unless uri
108
-
109
- body = get_body_as_json
110
- # puts body
111
-
112
- Gloo::Objs::HttpPost.post_json uri, body, true
115
+
116
+ Gloo::Objs::HttpPost.post_json uri, body_as_json, true
117
+ end
118
+
119
+ # ---------------------------------------------------------------------
120
+ # Help
121
+ # ---------------------------------------------------------------------
122
+
123
+ #
124
+ # Get help for this object type.
125
+ #
126
+ def self.help
127
+ return <<~TEXT
128
+ TEAMS OBJECT TYPE
129
+ NAME: teams
130
+ SHORTCUT: team
131
+
132
+ DESCRIPTION
133
+ Send message to channel in Teams.
134
+
135
+ CHILDREN
136
+ uri - string - 'https://outlook.office.com/webhook/...'
137
+ The URI with access to the Teams channel.
138
+ title - string
139
+ Message title; header.
140
+ color - string - '008000'
141
+ Color theme for the message.
142
+ message - string
143
+ The message to post in Teams.
144
+
145
+ MESSAGES
146
+ run - Post the message to Teams.
147
+ TEXT
113
148
  end
114
-
149
+
115
150
  end
116
151
  end
117
152
  end
@@ -0,0 +1,160 @@
1
+ # Author:: Eric Crane (mailto:eric.crane@mac.com)
2
+ # Copyright:: Copyright (c) 2020 Eric Crane. All rights reserved.
3
+ #
4
+ # A URI (URL).
5
+ #
6
+ require 'uri'
7
+
8
+ module Gloo
9
+ module Objs
10
+ class Uri < Gloo::Core::Obj
11
+
12
+ KEYWORD = 'uri'.freeze
13
+ KEYWORD_SHORT = 'url'.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
+ # Does this object support multi-line values?
38
+ # Initially only true for scripts.
39
+ #
40
+ def multiline_value?
41
+ return false
42
+ end
43
+
44
+ # ---------------------------------------------------------------------
45
+ # Messages
46
+ # ---------------------------------------------------------------------
47
+
48
+ #
49
+ # Get a list of message names that this object receives.
50
+ #
51
+ def self.messages
52
+ basic = %w[open]
53
+ gets = %w[get_scheme get_host get_path]
54
+ more = %w[get_query get_fragment]
55
+ return super + basic + gets + more
56
+ end
57
+
58
+ #
59
+ # Get the URI fragment that comes after the '#'
60
+ # in the URL. Might be used to scroll down in the page.
61
+ #
62
+ def msg_get_fragment
63
+ return unless value
64
+
65
+ o = URI( value ).fragment
66
+ $engine.heap.it.set_to o
67
+ return o
68
+ end
69
+
70
+ #
71
+ # Get the URI query parameters.
72
+ # Example: id=121
73
+ #
74
+ def msg_get_query
75
+ return unless value
76
+
77
+ o = URI( value ).query
78
+ $engine.heap.it.set_to o
79
+ return o
80
+ end
81
+
82
+ #
83
+ # Get the URI path.
84
+ # Example: /posts
85
+ #
86
+ def msg_get_path
87
+ return unless value
88
+
89
+ o = URI( value ).path
90
+ $engine.heap.it.set_to o
91
+ return o
92
+ end
93
+
94
+ #
95
+ # Get the URI host.
96
+ # Example: google.com
97
+ #
98
+ def msg_get_host
99
+ return unless value
100
+
101
+ o = URI( value ).host
102
+ $engine.heap.it.set_to o
103
+ return o
104
+ end
105
+
106
+ #
107
+ # Get the URI Scheme.
108
+ # Example: http
109
+ #
110
+ def msg_get_scheme
111
+ return unless value
112
+
113
+ o = URI( value ).scheme
114
+ $engine.heap.it.set_to o
115
+ return o
116
+ end
117
+
118
+ #
119
+ # Open the URI in the default browser.
120
+ #
121
+ def msg_open
122
+ return unless value
123
+
124
+ cmd = Gloo::Core::GlooSystem.open_for_platform
125
+ cmd_with_param = "#{cmd} \"#{value}\""
126
+ `#{cmd_with_param}`
127
+ end
128
+
129
+ # ---------------------------------------------------------------------
130
+ # Help
131
+ # ---------------------------------------------------------------------
132
+
133
+ #
134
+ # Get help for this object type.
135
+ #
136
+ def self.help
137
+ return <<~TEXT
138
+ URI OBJECT TYPE
139
+ NAME: uri
140
+ SHORTCUT: url
141
+
142
+ DESCRIPTION
143
+ A URI or URL.
144
+
145
+ CHILDREN
146
+ None
147
+
148
+ MESSAGES
149
+ open - open the URL in the default browser
150
+ get_scheme - get the URI scheme; example: http
151
+ get_host - get the URI host; example: google.com
152
+ get_path - get the URI resource path; example: /post
153
+ get_query - get the URI query parameterse; example: id=121
154
+ get_fragment - get the URI fragment
155
+ TEXT
156
+ end
157
+
158
+ end
159
+ end
160
+ end