gloo-lang 0.9.3 → 0.9.6

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 (36) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +1 -1
  3. data/gloo-lang.gemspec +1 -0
  4. data/lib/VERSION +1 -1
  5. data/lib/gloo_lang/app/args.rb +0 -1
  6. data/lib/gloo_lang/app/engine.rb +10 -37
  7. data/lib/gloo_lang/app/help.rb +2 -41
  8. data/lib/gloo_lang/app/info.rb +34 -0
  9. data/lib/gloo_lang/app/log.rb +8 -10
  10. data/lib/gloo_lang/app/platform.rb +75 -0
  11. data/lib/gloo_lang/app/settings.rb +36 -13
  12. data/lib/gloo_lang/objs/basic/container.rb +1 -12
  13. data/lib/gloo_lang/objs/basic/text.rb +2 -10
  14. data/lib/gloo_lang/objs/data/markdown.rb +2 -7
  15. data/lib/gloo_lang/objs/data/table.rb +1 -29
  16. data/lib/gloo_lang/verbs/show.rb +3 -2
  17. metadata +23 -21
  18. data/lib/gloo_lang/objs/cli/banner.rb +0 -108
  19. data/lib/gloo_lang/objs/cli/bar.rb +0 -133
  20. data/lib/gloo_lang/objs/cli/colorize.rb +0 -73
  21. data/lib/gloo_lang/objs/cli/confirm.rb +0 -96
  22. data/lib/gloo_lang/objs/cli/menu.rb +0 -206
  23. data/lib/gloo_lang/objs/cli/menu_item.rb +0 -95
  24. data/lib/gloo_lang/objs/cli/pastel.rb +0 -97
  25. data/lib/gloo_lang/objs/cli/prompt.rb +0 -110
  26. data/lib/gloo_lang/objs/cli/select.rb +0 -126
  27. data/lib/gloo_lang/objs/dev/git.rb +0 -140
  28. data/lib/gloo_lang/objs/dev/stats.rb +0 -120
  29. data/lib/gloo_lang/objs/snd/play.rb +0 -48
  30. data/lib/gloo_lang/objs/snd/say.rb +0 -98
  31. data/lib/gloo_lang/objs/system/file_handle.rb +0 -138
  32. data/lib/gloo_lang/objs/system/ssh_exec.rb +0 -126
  33. data/lib/gloo_lang/objs/system/system.rb +0 -136
  34. data/lib/gloo_lang/verbs/alert.rb +0 -79
  35. data/lib/gloo_lang/verbs/beep.rb +0 -40
  36. data/lib/gloo_lang/verbs/cls.rb +0 -37
@@ -1,48 +0,0 @@
1
- # Author:: Eric Crane (mailto:eric.crane@mac.com)
2
- # Copyright:: Copyright (c) 2020 Eric Crane. All rights reserved.
3
- #
4
- # Play an audio file (MP3).
5
- #
6
-
7
- module GlooLang
8
- module Objs
9
- class Play < GlooLang::Core::Obj
10
-
11
- KEYWORD = 'play'.freeze
12
- KEYWORD_SHORT = 'play'.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 + [ 'run' ]
37
- end
38
-
39
- #
40
- # Play the audio file.
41
- #
42
- def msg_run
43
- system "afplay #{value}"
44
- end
45
-
46
- end
47
- end
48
- end
@@ -1,98 +0,0 @@
1
- # Author:: Eric Crane (mailto:eric.crane@mac.com)
2
- # Copyright:: Copyright (c) 2020 Eric Crane. All rights reserved.
3
- #
4
- # Wrapper for the 'say something' function on the Mac.
5
- #
6
- require 'erb'
7
-
8
- module GlooLang
9
- module Objs
10
- class Say < GlooLang::Core::Obj
11
-
12
- KEYWORD = 'say'.freeze
13
- KEYWORD_SHORT = 'say'.freeze
14
- VOICE = 'voice'.freeze
15
- MSG = 'message'.freeze
16
- DEFAULT_MSG = 'talk to me'.freeze
17
-
18
- #
19
- # The name of the object type.
20
- #
21
- def self.typename
22
- return KEYWORD
23
- end
24
-
25
- #
26
- # The short name of the object type.
27
- #
28
- def self.short_typename
29
- return KEYWORD_SHORT
30
- end
31
-
32
- #
33
- # Get the voice to use.
34
- #
35
- def voice_value
36
- v = find_child VOICE
37
- return nil unless v
38
-
39
- return v.value
40
- end
41
-
42
- #
43
- # Get the message to speak.
44
- #
45
- def msg_value
46
- o = find_child MSG
47
- return nil unless o
48
-
49
- return o.value
50
- end
51
-
52
- # ---------------------------------------------------------------------
53
- # Children
54
- # ---------------------------------------------------------------------
55
-
56
- #
57
- # Does this object have children to add when an object
58
- # is created in interactive mode?
59
- # This does not apply during obj load, etc.
60
- #
61
- def add_children_on_create?
62
- return true
63
- end
64
-
65
- #
66
- # Add children to this object.
67
- # This is used by containers to add children needed
68
- # for default configurations.
69
- #
70
- def add_default_children
71
- fac = $engine.factory
72
- fac.create_string VOICE, '', self
73
- fac.create_string MSG, DEFAULT_MSG, self
74
- end
75
-
76
- # ---------------------------------------------------------------------
77
- # Messages
78
- # ---------------------------------------------------------------------
79
-
80
- #
81
- # Get a list of message names that this object receives.
82
- #
83
- def self.messages
84
- return super + [ 'run' ]
85
- end
86
-
87
- #
88
- # Have the computer 'speak' the message.
89
- #
90
- def msg_run
91
- v = voice_value.empty? ? '' : "-v '#{voice_value}'"
92
- cmd = "say #{v} '#{msg_value}'"
93
- system cmd
94
- end
95
-
96
- end
97
- end
98
- end
@@ -1,138 +0,0 @@
1
- # Author:: Eric Crane (mailto:eric.crane@mac.com)
2
- # Copyright:: Copyright (c) 2019 Eric Crane. All rights reserved.
3
- #
4
- # An object that points to a file in the system.
5
- #
6
- require 'tty-pager'
7
-
8
- module GlooLang
9
- module Objs
10
- class FileHandle < GlooLang::Core::Obj
11
-
12
- KEYWORD = 'file'.freeze
13
- KEYWORD_SHORT = 'dir'.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
- # Messages
31
- # ---------------------------------------------------------------------
32
-
33
- #
34
- # Get a list of message names that this object receives.
35
- #
36
- def self.messages
37
- basic = %w[read write]
38
- checks = %w[check_exists check_is_file check_is_dir]
39
- search = %w[find_match]
40
- show = %w[show page open]
41
- return super + basic + show + checks + search
42
- end
43
-
44
- #
45
- # Open the file in the default application for the file type.
46
- #
47
- def msg_open
48
- return unless value && File.exist?( value )
49
-
50
- cmd = GlooLang::Core::GlooSystem.open_for_platform
51
- cmd_with_param = "#{cmd} \"#{value}\""
52
- `#{cmd_with_param}`
53
- end
54
-
55
- #
56
- # Show the contents of the file, paginated.
57
- #
58
- def msg_page
59
- return unless value && File.file?( value )
60
-
61
- pager = TTY::Pager.new
62
- pager.page( path: value )
63
- end
64
-
65
- #
66
- # Show the contents of the file.
67
- #
68
- def msg_show
69
- return unless value && File.file?( value )
70
-
71
- puts File.read( value )
72
- end
73
-
74
- #
75
- # Read the contents of the file into the object.
76
- #
77
- def msg_read
78
- return unless value && File.file?( value )
79
-
80
- data = File.read( value )
81
- if @params&.token_count&.positive?
82
- pn = GlooLang::Core::Pn.new @params.first
83
- o = pn.resolve
84
- o.set_value data
85
- else
86
- $engine.heap.it.set_to data
87
- end
88
- end
89
-
90
- #
91
- # Write the given data out to the file.
92
- #
93
- def msg_write
94
- data = ''
95
- return unless value
96
-
97
- if @params&.token_count&.positive?
98
- expr = GlooLang::Expr::Expression.new( @params.tokens )
99
- data = expr.evaluate
100
- end
101
- File.write( value, data )
102
- end
103
-
104
- #
105
- # Check to see if the file exists.
106
- #
107
- def msg_check_exists
108
- result = File.exist? value
109
- $engine.heap.it.set_to result
110
- end
111
-
112
- #
113
- # Check to see if the file is a file.
114
- #
115
- def msg_check_is_file
116
- result = File.file? value
117
- $engine.heap.it.set_to result
118
- end
119
-
120
- #
121
- # Check to see if the file is a directory.
122
- #
123
- def msg_check_is_dir
124
- result = File.directory? value
125
- $engine.heap.it.set_to result
126
- end
127
-
128
- #
129
- # Look for any file matching pattern.
130
- #
131
- def msg_find_match
132
- result = !Dir.glob( value ).empty?
133
- $engine.heap.it.set_to result
134
- end
135
-
136
- end
137
- end
138
- end
@@ -1,126 +0,0 @@
1
- # Author:: Eric Crane (mailto:eric.crane@mac.com)
2
- # Copyright:: Copyright (c) 2020 Eric Crane. All rights reserved.
3
- #
4
- # An object that can post JSON to a URI.
5
- #
6
- require 'net/ssh'
7
-
8
- module GlooLang
9
- module Objs
10
- class SshExec < GlooLang::Core::Obj
11
-
12
- KEYWORD = 'ssh_exec'.freeze
13
- KEYWORD_SHORT = 'ssh'.freeze
14
- HOST = 'host'.freeze
15
- DEFAULT_HOST = 'localhost'.freeze
16
- CMD = 'cmd'.freeze
17
- RESULT = 'result'.freeze
18
- HOST_REQUIRED_ERR = 'The host is required!'.freeze
19
-
20
- #
21
- # The name of the object type.
22
- #
23
- def self.typename
24
- return KEYWORD
25
- end
26
-
27
- #
28
- # The short name of the object type.
29
- #
30
- def self.short_typename
31
- return KEYWORD_SHORT
32
- end
33
-
34
- # ---------------------------------------------------------------------
35
- # Children
36
- # ---------------------------------------------------------------------
37
-
38
- #
39
- # Does this object have children to add when an object
40
- # is created in interactive mode?
41
- # This does not apply during obj load, etc.
42
- #
43
- def add_children_on_create?
44
- return true
45
- end
46
-
47
- #
48
- # Add children to this object.
49
- # This is used by containers to add children needed
50
- # for default configurations.
51
- #
52
- def add_default_children
53
- fac = $engine.factory
54
- fac.create_string HOST, DEFAULT_HOST, self
55
- fac.create_string CMD, nil, self
56
- fac.create_string RESULT, nil, self
57
- end
58
-
59
- # ---------------------------------------------------------------------
60
- # Messages
61
- # ---------------------------------------------------------------------
62
-
63
- #
64
- # Get a list of message names that this object receives.
65
- #
66
- def self.messages
67
- return super + [ 'run' ]
68
- end
69
-
70
- #
71
- # SSH to the host and execute the command, then update result.
72
- #
73
- def msg_run
74
- h = host_value
75
- unless h
76
- $engine.err HOST_REQUIRED_ERR
77
- return
78
- end
79
-
80
- Net::SSH.start( h ) do |ssh|
81
- result = ssh.exec!( cmd_value )
82
- update_result result
83
- end
84
- end
85
-
86
- # ---------------------------------------------------------------------
87
- # Private functions
88
- # ---------------------------------------------------------------------
89
-
90
- private
91
-
92
- #
93
- # Get the host from the child object.
94
- # Returns nil if there is none.
95
- #
96
- def host_value
97
- o = find_child HOST
98
- return nil unless o
99
-
100
- return o.value
101
- end
102
-
103
- #
104
- # Get the command from the child object.
105
- # Returns nil if there is none.
106
- #
107
- def cmd_value
108
- o = find_child CMD
109
- return nil unless o
110
-
111
- return o.value
112
- end
113
-
114
- #
115
- # Set the result of the API call.
116
- #
117
- def update_result( data )
118
- r = find_child RESULT
119
- return nil unless r
120
-
121
- r.set_value data
122
- end
123
-
124
- end
125
- end
126
- end
@@ -1,136 +0,0 @@
1
- # Author:: Eric Crane (mailto:eric.crane@mac.com)
2
- # Copyright:: Copyright (c) 2019 Eric Crane. All rights reserved.
3
- #
4
- # An object that can make a system call.
5
- #
6
-
7
- module GlooLang
8
- module Objs
9
- class System < GlooLang::Core::Obj
10
-
11
- KEYWORD = 'system'.freeze
12
- KEYWORD_SHORT = 'sys'.freeze
13
- CMD = 'command'.freeze
14
- DEFAULT_CMD = 'date'.freeze
15
- RESULT = 'result'.freeze
16
- GET_OUTPUT = 'get_output'.freeze
17
-
18
- #
19
- # The name of the object type.
20
- #
21
- def self.typename
22
- return KEYWORD
23
- end
24
-
25
- #
26
- # The short name of the object type.
27
- #
28
- def self.short_typename
29
- return KEYWORD_SHORT
30
- end
31
-
32
- #
33
- # Get the URI from the child object.
34
- # Returns nil if there is none.
35
- #
36
- def cmd_value
37
- cmd = find_child CMD
38
- return nil unless cmd
39
-
40
- return cmd.value
41
- end
42
-
43
- #
44
- # Set the result of the system call.
45
- #
46
- def set_result( data )
47
- r = find_child RESULT
48
- return nil unless r
49
-
50
- r.set_value data
51
- end
52
-
53
- #
54
- # Should the system call get output?
55
- # If so, the system call will run and get output,
56
- # otherwise it will just get the result of the call.
57
- #
58
- def output?
59
- o = find_child GET_OUTPUT
60
- return false unless o
61
-
62
- return o.value
63
- end
64
-
65
- # ---------------------------------------------------------------------
66
- # Children
67
- # ---------------------------------------------------------------------
68
-
69
- #
70
- # Does this object have children to add when an object
71
- # is created in interactive mode?
72
- # This does not apply during obj load, etc.
73
- #
74
- def add_children_on_create?
75
- return true
76
- end
77
-
78
- #
79
- # Add children to this object.
80
- # This is used by containers to add children needed
81
- # for default configurations.
82
- #
83
- def add_default_children
84
- fac = $engine.factory
85
- fac.create_string CMD, DEFAULT_CMD, self
86
- fac.create_bool GET_OUTPUT, true, self
87
- fac.create_string RESULT, nil, self
88
- end
89
-
90
- # ---------------------------------------------------------------------
91
- # Messages
92
- # ---------------------------------------------------------------------
93
-
94
- #
95
- # Get a list of message names that this object receives.
96
- #
97
- def self.messages
98
- return super + [ 'run' ]
99
- end
100
-
101
- #
102
- # Run the system command.
103
- #
104
- def msg_run
105
- if output?
106
- run_with_output
107
- else
108
- run_with_result
109
- end
110
- end
111
-
112
- #
113
- # Run the command and collect output.
114
- #
115
- def run_with_output
116
- cmd = cmd_value
117
- return unless cmd
118
-
119
- result = `#{cmd}`
120
- set_result result
121
- end
122
-
123
- #
124
- # Run the command and set the result.
125
- #
126
- def run_with_result
127
- cmd = cmd_value
128
- return unless cmd
129
-
130
- result = system cmd
131
- set_result result
132
- end
133
-
134
- end
135
- end
136
- end
@@ -1,79 +0,0 @@
1
- # Author:: Eric Crane (mailto:eric.crane@mac.com)
2
- # Copyright:: Copyright (c) 2019 Eric Crane. All rights reserved.
3
- #
4
- # Show a system notification.
5
- #
6
-
7
- module GlooLang
8
- module Verbs
9
- class Alert < GlooLang::Core::Verb
10
-
11
- KEYWORD = 'alert'.freeze
12
- KEYWORD_SHORT = '!'.freeze
13
-
14
- MISSING_EXPR_ERR = 'Missing Expression!'.freeze
15
- NO_RESULT_ERR = 'Expression evaluated with no result!'.freeze
16
-
17
- #
18
- # Run the verb.
19
- #
20
- def run
21
- unless @tokens.token_count > 1
22
- $engine.err MISSING_EXPR_ERR
23
- return
24
- end
25
-
26
- expr = GlooLang::Expr::Expression.new( @tokens.params )
27
- result = expr.evaluate
28
-
29
- if result
30
- $engine.heap.it.set_to result
31
- post_alert result
32
- else
33
- $engine.err NO_RESULT_ERR
34
- end
35
- end
36
-
37
- #
38
- # Get the Verb's keyword.
39
- #
40
- def self.keyword
41
- return KEYWORD
42
- end
43
-
44
- #
45
- # Get the Verb's keyword shortcut.
46
- #
47
- def self.keyword_shortcut
48
- return KEYWORD_SHORT
49
- end
50
-
51
- # ---------------------------------------------------------------------
52
- # Private functions
53
- # ---------------------------------------------------------------------
54
-
55
- private
56
-
57
- #
58
- # Post the alert for the specific platform.
59
- # Notice is not posted if we're in quiet mode.
60
- #
61
- def post_alert( msg )
62
- $log.info msg
63
- return if $engine.args.quiet?
64
-
65
- post_osx msg
66
- end
67
-
68
- #
69
- # Post the alert on the Mac OSX.
70
- #
71
- def post_osx( msg )
72
- cmd1 = '/usr/bin/osascript -e "display notification \"'
73
- cmd2 = '\" with title \"Gloo\" "'
74
- system( cmd1 + msg.to_s + cmd2 )
75
- end
76
-
77
- end
78
- end
79
- end
@@ -1,40 +0,0 @@
1
- # Author:: Eric Crane (mailto:eric.crane@mac.com)
2
- # Copyright:: Copyright (c) 2020 Eric Crane. All rights reserved.
3
- #
4
- # Play a standard system beep sound.
5
- #
6
-
7
- module GlooLang
8
- module Verbs
9
- class Beep < GlooLang::Core::Verb
10
-
11
- KEYWORD = 'beep'.freeze
12
- KEYWORD_SHORT = 'b'.freeze
13
-
14
- #
15
- # Run the verb.
16
- #
17
- # We'll mark the application as not running and let the
18
- # engine stop gracefully next time through the loop.
19
- #
20
- def run
21
- print 7.chr
22
- end
23
-
24
- #
25
- # Get the Verb's keyword.
26
- #
27
- def self.keyword
28
- return KEYWORD
29
- end
30
-
31
- #
32
- # Get the Verb's keyword shortcut.
33
- #
34
- def self.keyword_shortcut
35
- return KEYWORD_SHORT
36
- end
37
-
38
- end
39
- end
40
- end
@@ -1,37 +0,0 @@
1
- # Author:: Eric Crane (mailto:eric.crane@mac.com)
2
- # Copyright:: Copyright (c) 2020 Eric Crane. All rights reserved.
3
- #
4
- # Clear the screen.
5
- #
6
-
7
- module GlooLang
8
- module Verbs
9
- class Cls < GlooLang::Core::Verb
10
-
11
- KEYWORD = 'cls'.freeze
12
- KEYWORD_SHORT = 'cls'.freeze
13
-
14
- #
15
- # Run the verb.
16
- #
17
- def run
18
- $engine&.clear_screen
19
- end
20
-
21
- #
22
- # Get the Verb's keyword.
23
- #
24
- def self.keyword
25
- return KEYWORD
26
- end
27
-
28
- #
29
- # Get the Verb's keyword shortcut.
30
- #
31
- def self.keyword_shortcut
32
- return KEYWORD_SHORT
33
- end
34
-
35
- end
36
- end
37
- end