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,95 +0,0 @@
1
- # Author:: Eric Crane (mailto:eric.crane@mac.com)
2
- # Copyright:: Copyright (c) 2020 Eric Crane. All rights reserved.
3
- #
4
- # A CLI menu item. One element in a CLI menu.
5
- #
6
-
7
- module GlooLang
8
- module Objs
9
- class MenuItem < GlooLang::Core::Obj
10
-
11
- KEYWORD = 'menu_item'.freeze
12
- KEYWORD_SHORT = 'mitem'.freeze
13
- SHORTCUT = 'shortcut'.freeze
14
- DESCRIPTION = 'description'.freeze
15
- DO = 'do'.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 value of the menu item shortcut.
33
- # Returns nil if there is none.
34
- #
35
- def shortcut_value
36
- o = find_child SHORTCUT
37
- return self.name unless o
38
-
39
- return o.value
40
- end
41
-
42
- #
43
- # Get the action's description.
44
- # Returns nil if there is none.
45
- #
46
- def description_value
47
- o = find_child DESCRIPTION
48
- return self.value unless o
49
-
50
- return o.value
51
- end
52
-
53
- #
54
- # Get the action's script.
55
- # Returns nil if there is none.
56
- #
57
- def do_script
58
- return find_child DO
59
- end
60
-
61
- # ---------------------------------------------------------------------
62
- # Children
63
- # ---------------------------------------------------------------------
64
-
65
- # Does this object have children to add when an object
66
- # is created in interactive mode?
67
- # This does not apply during obj load, etc.
68
- def add_children_on_create?
69
- return true
70
- end
71
-
72
- # Add children to this object.
73
- # This is used by containers to add children needed
74
- # for default configurations.
75
- def add_default_children
76
- fac = $engine.factory
77
- fac.create_string SHORTCUT, '', self
78
- fac.create_string DESCRIPTION, '', self
79
- fac.create_script DO, '', self
80
- end
81
-
82
- # ---------------------------------------------------------------------
83
- # Messages
84
- # ---------------------------------------------------------------------
85
-
86
- #
87
- # Get a list of message names that this object receives.
88
- #
89
- def self.messages
90
- return super
91
- end
92
-
93
- end
94
- end
95
- end
@@ -1,97 +0,0 @@
1
- # Author:: Eric Crane (mailto:eric.crane@mac.com)
2
- # Copyright:: Copyright (c) 2020 Eric Crane. All rights reserved.
3
- #
4
- # Show colorized output with the pastel gem.
5
- #
6
- require 'pastel'
7
-
8
- module GlooLang
9
- module Objs
10
- class Pastel < GlooLang::Core::Obj
11
-
12
- KEYWORD = 'pastel'.freeze
13
- KEYWORD_SHORT = 'pastel'.freeze
14
- TEXT = 'text'.freeze
15
- COLOR = 'color'.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 text from the child object.
33
- #
34
- def text_value
35
- o = find_child TEXT
36
- return '' unless o
37
-
38
- return o.value
39
- end
40
-
41
- #
42
- # Get the color from the child object.
43
- #
44
- def color_value
45
- o = find_child COLOR
46
- return '' unless o
47
-
48
- return o.value
49
- end
50
-
51
- # ---------------------------------------------------------------------
52
- # Children
53
- # ---------------------------------------------------------------------
54
-
55
- #
56
- # Does this object have children to add when an object
57
- # is created in interactive mode?
58
- # This does not apply during obj load, etc.
59
- #
60
- def add_children_on_create?
61
- return true
62
- end
63
-
64
- #
65
- # Add children to this object.
66
- # This is used by containers to add children needed
67
- # for default configurations.
68
- #
69
- def add_default_children
70
- fac = $engine.factory
71
- fac.create_string TEXT, '', self
72
- fac.create_string COLOR, '', self
73
- end
74
-
75
- # ---------------------------------------------------------------------
76
- # Messages
77
- # ---------------------------------------------------------------------
78
-
79
- #
80
- # Get a list of message names that this object receives.
81
- #
82
- def self.messages
83
- return super + %w[show]
84
- end
85
-
86
- #
87
- # Show the banner bar
88
- #
89
- def msg_show
90
- pastel = ::Pastel.new
91
- c = self.color_value.split( ' ' ).map( &:to_sym )
92
- puts pastel.decorate( self.text_value, *c )
93
- end
94
-
95
- end
96
- end
97
- end
@@ -1,110 +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 CLI prompt and collect user input.
5
- #
6
-
7
- module GlooLang
8
- module Objs
9
- class Prompt < GlooLang::Core::Obj
10
-
11
- KEYWORD = 'prompt'.freeze
12
- KEYWORD_SHORT = 'ask'.freeze
13
- PROMPT = 'prompt'.freeze
14
- RESULT = 'result'.freeze
15
-
16
- #
17
- # The name of the object type.
18
- #
19
- def self.typename
20
- return KEYWORD
21
- end
22
-
23
- #
24
- # The short name of the object type.
25
- #
26
- def self.short_typename
27
- return KEYWORD_SHORT
28
- end
29
-
30
- #
31
- # Get the prompt from the child object.
32
- # Returns nil if there is none.
33
- #
34
- def prompt_value
35
- o = find_child PROMPT
36
- return nil unless o
37
-
38
- return o.value
39
- end
40
-
41
- #
42
- # Set the result of the system call.
43
- #
44
- def set_result( data )
45
- r = find_child RESULT
46
- return nil unless r
47
-
48
- r.set_value data
49
- end
50
-
51
- # ---------------------------------------------------------------------
52
- # Children
53
- # ---------------------------------------------------------------------
54
-
55
- #
56
- # Does this object have children to add when an object
57
- # is created in interactive mode?
58
- # This does not apply during obj load, etc.
59
- #
60
- def add_children_on_create?
61
- return true
62
- end
63
-
64
- #
65
- # Add children to this object.
66
- # This is used by containers to add children needed
67
- # for default configurations.
68
- #
69
- def add_default_children
70
- fac = $engine.factory
71
- fac.create_string PROMPT, '>', self
72
- fac.create_string RESULT, nil, self
73
- end
74
-
75
- # ---------------------------------------------------------------------
76
- # Messages
77
- # ---------------------------------------------------------------------
78
-
79
- #
80
- # Get a list of message names that this object receives.
81
- #
82
- def self.messages
83
- return super + %w[run multiline]
84
- end
85
-
86
- #
87
- # Show a multiline prompt and get the user's input.
88
- #
89
- def msg_multiline
90
- prompt = prompt_value
91
- return unless prompt
92
-
93
- result = $prompt.multiline( prompt )
94
- set_result result.join
95
- end
96
-
97
- #
98
- # Show the prompt and get the user's input.
99
- #
100
- def msg_run
101
- prompt = prompt_value
102
- return unless prompt
103
-
104
- result = $prompt.ask( prompt )
105
- set_result result
106
- end
107
-
108
- end
109
- end
110
- 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
- # Show a CLI prompt and user selection from a list.
5
- #
6
-
7
- module GlooLang
8
- module Objs
9
- class Select < GlooLang::Core::Obj
10
-
11
- KEYWORD = 'select'.freeze
12
- KEYWORD_SHORT = 'sel'.freeze
13
- PROMPT = 'prompt'.freeze
14
- OPTIONS = 'options'.freeze
15
- RESULT = 'result'.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 prompt from the child object.
33
- # Returns nil if there is none.
34
- #
35
- def prompt_value
36
- o = find_child PROMPT
37
- return nil unless o
38
-
39
- return o.value
40
- end
41
-
42
- #
43
- # Get the list of options for selection.
44
- #
45
- def options
46
- o = find_child OPTIONS
47
- return [] unless o
48
-
49
- return o.children.map( &:name )
50
- end
51
-
52
- #
53
- # Get the value of the selected item.
54
- #
55
- def key_for_option( selected )
56
- o = find_child OPTIONS
57
- return nil unless o
58
-
59
- o.children.each do |c|
60
- return c.value if c.name == selected
61
- end
62
-
63
- return nil
64
- end
65
-
66
- #
67
- # Set the result of the system call.
68
- #
69
- def set_result( data )
70
- r = find_child RESULT
71
- return nil unless r
72
-
73
- r.set_value data
74
- end
75
-
76
- # ---------------------------------------------------------------------
77
- # Children
78
- # ---------------------------------------------------------------------
79
-
80
- #
81
- # Does this object have children to add when an object
82
- # is created in interactive mode?
83
- # This does not apply during obj load, etc.
84
- #
85
- def add_children_on_create?
86
- return true
87
- end
88
-
89
- #
90
- # Add children to this object.
91
- # This is used by containers to add children needed
92
- # for default configurations.
93
- #
94
- def add_default_children
95
- fac = $engine.factory
96
- fac.create_string PROMPT, '>', self
97
- fac.create_can OPTIONS, self
98
- fac.create_string RESULT, nil, self
99
- end
100
-
101
- # ---------------------------------------------------------------------
102
- # Messages
103
- # ---------------------------------------------------------------------
104
-
105
- #
106
- # Get a list of message names that this object receives.
107
- #
108
- def self.messages
109
- return super + %w[run]
110
- end
111
-
112
- #
113
- # Show the prompt and get the user's selection.
114
- #
115
- def msg_run
116
- prompt = prompt_value
117
- return unless prompt
118
-
119
- per = GlooLang::App::Settings.page_size
120
- result = $prompt.select( prompt, options, :per_page => per )
121
- set_result self.key_for_option( result )
122
- end
123
-
124
- end
125
- end
126
- end
@@ -1,140 +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 interacts with a git repository
5
- #
6
-
7
- module GlooLang
8
- module Objs
9
- class Git < GlooLang::Core::Obj
10
-
11
- KEYWORD = 'git_repo'.freeze
12
- KEYWORD_SHORT = 'git'.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
- # Get the path to the git repo (locally).
30
- #
31
- def path_value
32
- return value
33
- end
34
-
35
- # ---------------------------------------------------------------------
36
- # Messages
37
- # ---------------------------------------------------------------------
38
-
39
- #
40
- # Get a list of message names that this object receives.
41
- #
42
- def self.messages
43
- actions = %w[validate commit get_branch review]
44
- changes = %w[check_changes get_changes]
45
- return super + changes + actions
46
- end
47
-
48
- #
49
- # Get the current working branch.
50
- #
51
- def msg_get_branch
52
- branch = ''
53
- path = path_value
54
- if path_is_dir?( path )
55
- branch = `cd #{path}; git rev-parse --abbrev-ref HEAD`
56
- branch = branch.strip
57
- end
58
-
59
- $engine.heap.it.set_to branch
60
- end
61
-
62
- #
63
- # Review pending changes.
64
- #
65
- def msg_review
66
- $log.debug 'Reviewing pending changes'
67
- cmd = "cd #{path_value}; git diff"
68
- $log.debug cmd
69
- system cmd
70
- end
71
-
72
- #
73
- # Commit pending changes.
74
- #
75
- def msg_commit
76
- msg = 'Commit'
77
- path = path_value
78
- if path_is_dir?( path )
79
- if @params&.token_count&.positive?
80
- expr = GlooLang::Expr::Expression.new( @params.tokens )
81
- msg = expr.evaluate
82
- end
83
- branch = `cd #{path}; git rev-parse --abbrev-ref HEAD`
84
- branch = branch.strip
85
- add = 'git add .'
86
- cmt = 'git commit -m '
87
- psh = 'git push origin '
88
- `cd #{path};#{add};#{cmt}"#{msg}";#{psh}#{branch}`
89
- end
90
- $engine.heap.it.set_to msg
91
- end
92
-
93
- #
94
- # Get the pending changes.
95
- #
96
- def msg_get_changes
97
- path = path_value
98
- result = `cd #{path}; git status -s` if path_is_dir?( path )
99
- result ||= ''
100
- $engine.heap.it.set_to result
101
- end
102
-
103
- #
104
- # Is the given path non nil and is it a directory?
105
- #
106
- def path_is_dir?( path )
107
- return path && File.directory?( path )
108
- end
109
-
110
- #
111
- # Check to see if the repo has changes.
112
- #
113
- def msg_check_changes
114
- result = false
115
- path = path_value
116
- if path_is_dir?( path )
117
- data = `cd #{path}; git status -s`
118
- result = true unless data.strip.empty?
119
- end
120
-
121
- $engine.heap.it.set_to result
122
- end
123
-
124
- #
125
- # Check to make sure this is a valide git repo.
126
- #
127
- def msg_validate
128
- result = false
129
- path = path_value
130
- if path_is_dir?( path )
131
- pn = File.join( path, '.git' )
132
- result = File.exist? pn
133
- end
134
-
135
- $engine.heap.it.set_to result
136
- end
137
-
138
- end
139
- end
140
- end
@@ -1,120 +0,0 @@
1
- # Author:: Eric Crane (mailto:eric.crane@mac.com)
2
- # Copyright:: Copyright (c) 2020 Eric Crane. All rights reserved.
3
- #
4
- # Get statistics about a development project.
5
- #
6
-
7
- module GlooLang
8
- module Objs
9
- class Stats < GlooLang::Core::Obj
10
-
11
- KEYWORD = 'stats'.freeze
12
- KEYWORD_SHORT = 'stat'.freeze
13
- FOLDER = 'folder'.freeze
14
- TYPES = 'types'.freeze
15
- SKIP = 'skip'.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 path to the git repo (locally).
33
- #
34
- def path_value
35
- o = find_child FOLDER
36
- return o ? o.value : nil
37
- end
38
-
39
- #
40
- # The code file types to count.
41
- #
42
- def types_value
43
- o = find_child TYPES
44
- return o ? o.value : ''
45
- end
46
-
47
- #
48
- # Get the list of files and folders to skip.
49
- #
50
- def skip_list
51
- o = find_child SKIP
52
- val = o ? o.value : ''
53
- return val.split ' '
54
- end
55
-
56
- # ---------------------------------------------------------------------
57
- # Children
58
- # ---------------------------------------------------------------------
59
-
60
- #
61
- # Does this object have children to add when an object
62
- # is created in interactive mode?
63
- # This does not apply during obj load, etc.
64
- #
65
- def add_children_on_create?
66
- return true
67
- end
68
-
69
- #
70
- # Add children to this object.
71
- # This is used by containers to add children needed
72
- # for default configurations.
73
- #
74
- def add_default_children
75
- fac = $engine.factory
76
- fac.create_file FOLDER, '', self
77
- fac.create_string TYPES, '', self
78
- fac.create_can SKIP, self
79
- end
80
-
81
- # ---------------------------------------------------------------------
82
- # Messages
83
- # ---------------------------------------------------------------------
84
-
85
- #
86
- # Get a list of message names that this object receives.
87
- #
88
- def self.messages
89
- all = %w[show_all]
90
- more = %w[show_busy_folders show_types]
91
- return super + all + more
92
- end
93
-
94
- #
95
- # Show all project stats.
96
- #
97
- def msg_show_all
98
- o = GlooLang::Utils::Stats.new( path_value, types_value, skip_list )
99
- o.show_all
100
- end
101
-
102
- #
103
- # Show file types.
104
- #
105
- def msg_show_types
106
- o = GlooLang::Utils::Stats.new( path_value, types_value, skip_list )
107
- o.file_types
108
- end
109
-
110
- #
111
- # Show busy folders: those with the most files.
112
- #
113
- def msg_show_busy_folders
114
- o = GlooLang::Utils::Stats.new( path_value, types_value, skip_list )
115
- o.busy_folders
116
- end
117
-
118
- end
119
- end
120
- end