gloo-lang 0.9.4 → 0.9.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6b770d777cc2d3700fd6424ff1a150cd793aa111e89d22d519b2eb3c378e9498
4
- data.tar.gz: 136de9811491851ffb46b8b630cb0a350cf46fcbb77045fe3be25a018ac160d0
3
+ metadata.gz: d19934c8b9f0ae7c4b7770b353555c19c4acb4b755775222e14cde8aa1a4bbee
4
+ data.tar.gz: b88f21b0a86cf71b92fcc3fe8c018884109b83293e54db266bb17cef5111e7c0
5
5
  SHA512:
6
- metadata.gz: e79fd61865248c8091eae5d71685f5073159537b65535efcf2aec0d2c7d05d3af6894987397ef704c378d36b940f55a7198ccc547509e7ed9b63f81a7e1778f3
7
- data.tar.gz: ead904b8714aad9a1dd100166a81d58f8c168a6f42b687ca2116f684d394d1d2cb59b6e5339df3783626ccd227a1ebf51794884e7dbeb0f037c02c82d4c7f752
6
+ metadata.gz: f3475c8c03da31aa4a05feb948b10a89a3b0fae818800ef14329c5028add3e5a788f3a6e7fff7b21c762c53fb67619ffa875dd6586044373110316e78c494480
7
+ data.tar.gz: 27d759c5e86633db59786a3a7db230c4f26c2e54d94a3d339af759983799fd6a4dccb21b84f0dd4cd8de80f1f3a46650c0d3bb283cee246ce95f5cca439ace4e
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- gloo-lang (0.9.3)
4
+ gloo-lang (0.9.4)
5
5
  chronic (~> 0.10, >= 0.10.2)
6
6
  json (~> 2.1, >= 2.1.0)
7
7
  net-ssh (~> 6.1, >= 6.1.0)
data/gloo-lang.gemspec CHANGED
@@ -32,6 +32,7 @@ Gem::Specification.new do |spec|
32
32
  spec.add_dependency 'json', '~> 2.1', '>= 2.1.0'
33
33
  spec.add_dependency 'openssl', '~> 2.1', '>= 2.1.0'
34
34
  spec.add_dependency 'net-ssh', '~> 6.1', '>= 6.1.0'
35
+ spec.add_dependency 'tty-platform', '~> 0.3', '>= 0.3.0'
35
36
  # spec.add_dependency 'mysql2', '~> 0.5', '>= 0.5.3'
36
37
  # spec.add_dependency 'sqlite3', '~> 1.4', '>= 1.4.2'
37
38
  end
data/lib/VERSION CHANGED
@@ -1 +1 @@
1
- 0.9.4
1
+ 0.9.5
@@ -6,7 +6,6 @@
6
6
  # in the constructor.
7
7
  #
8
8
  require 'active_support'
9
- require 'colorize'
10
9
 
11
10
  module GlooLang
12
11
  module App
@@ -7,15 +7,11 @@
7
7
  # to the relevant element.
8
8
  #
9
9
 
10
- require 'tty-prompt'
11
- require 'tty-cursor'
12
- require 'colorize'
13
-
14
10
  module GlooLang
15
11
  module App
16
12
  class Engine
17
13
 
18
- attr_reader :args, :mode, :running,
14
+ attr_reader :args, :mode, :running, :platform,
19
15
  :dictionary, :parser, :heap, :factory
20
16
  attr_accessor :last_cmd, :persist_man, :event_manager,
21
17
  :exec_env, :help, :converter
@@ -23,12 +19,12 @@ module GlooLang
23
19
  #
24
20
  # Set up the engine with basic elements.
25
21
  #
26
- def initialize( params = [] )
22
+ def initialize( params = [], platform=nil )
27
23
  $engine = self
28
24
  @args = Args.new( params )
29
25
  $settings = Settings.new( ENV[ 'GLOO_ENV' ] )
30
26
  $log = Log.new( @args.quiet? )
31
- $prompt = TTY::Prompt.new
27
+ @platform = platform ? platform : Platform.new
32
28
  $log.debug 'engine intialized...'
33
29
  end
34
30
 
@@ -113,23 +109,6 @@ module GlooLang
113
109
  @persist_man.load( name ) if name
114
110
  end
115
111
 
116
- #
117
- # Prompt for the next command.
118
- #
119
- def prompt_cmd
120
- @last_cmd = $prompt.ask( default_prompt )
121
- end
122
-
123
- #
124
- # Get the default prompt text.
125
- #
126
- def default_prompt
127
- dt = DateTime.now
128
- d = dt.strftime( '%Y.%m.%d' )
129
- t = dt.strftime( '%I:%M:%S' )
130
- return "#{'gloo'.blue} #{d.yellow} #{t.white} >"
131
- end
132
-
133
112
  #
134
113
  # Is the last command entered blank?
135
114
  #
@@ -145,7 +124,7 @@ module GlooLang
145
124
  #
146
125
  def loop
147
126
  while @running
148
- prompt_cmd
127
+ @last_cmd = @platform.prompt_cmd
149
128
  process_cmd
150
129
  end
151
130
  end
@@ -155,7 +134,7 @@ module GlooLang
155
134
  #
156
135
  def process_cmd
157
136
  if last_cmd_blank?
158
- clear_screen
137
+ @platform.clear_screen
159
138
  return
160
139
  end
161
140
 
@@ -184,7 +163,7 @@ module GlooLang
184
163
  # Show the version information and then quit.
185
164
  #
186
165
  def run_version
187
- puts Info.display_title unless @args.quiet?
166
+ @platform.show Info.display_title unless @args.quiet?
188
167
  quit
189
168
  end
190
169
 
@@ -196,15 +175,6 @@ module GlooLang
196
175
  quit
197
176
  end
198
177
 
199
- #
200
- # Clear the screen.
201
- #
202
- def clear_screen
203
- @cursor ||= TTY::Cursor
204
- print @cursor.clear_screen
205
- print @cursor.move_to( 0, 0 )
206
- end
207
-
208
178
  # ---------------------------------------------------------------------
209
179
  # Error Handling
210
180
  # ---------------------------------------------------------------------
@@ -4,9 +4,6 @@
4
4
  # Help system.
5
5
  #
6
6
 
7
- require 'tty-markdown'
8
- require 'tty-pager'
9
-
10
7
  module GlooLang
11
8
  module App
12
9
  class Help
@@ -61,11 +58,7 @@ module GlooLang
61
58
 
62
59
  data = self.get_topic_data( topic )
63
60
  page = data.lines.count > Settings.page_size
64
- if topic_is_md?( topic )
65
- show_markdown_data( data, page )
66
- else
67
- show_text_data( data, page )
68
- end
61
+ $engine.platform.show( data, topic_is_md?( topic ), page )
69
62
  end
70
63
 
71
64
  #
@@ -75,39 +68,7 @@ module GlooLang
75
68
  return if $engine.args.quiet?
76
69
 
77
70
  data = self.get_topic_data( topic )
78
- if topic_is_md?( topic )
79
- show_markdown_data data
80
- else
81
- show_text_data data
82
- end
83
- end
84
-
85
- #
86
- # Show the markdown data.
87
- #
88
- def show_text_data( data, page = false )
89
- if page
90
- pager = TTY::Pager.new
91
- pager.page( data )
92
- else
93
- puts data.white
94
- puts
95
- end
96
- end
97
-
98
- #
99
- # Show the markdown data.
100
- #
101
- def show_markdown_data( data, page = false )
102
- md = TTY::Markdown.parse data
103
-
104
- if page
105
- pager = TTY::Pager.new
106
- pager.page( md )
107
- else
108
- puts md
109
- puts
110
- end
71
+ $engine.platform.show( data, topic_is_md?( topic ), false )
111
72
  end
112
73
 
113
74
  #
@@ -0,0 +1,75 @@
1
+ # Author:: Eric Crane (mailto:eric.crane@mac.com)
2
+ # Copyright:: Copyright (c) 2022 Eric Crane. All rights reserved.
3
+ #
4
+ # Handle input and output for the current platform.
5
+ #
6
+ # This is an abstract base class and minimal implementation
7
+ # is only to facilitate testing.
8
+ #
9
+
10
+ module GlooLang
11
+ module App
12
+ class Platform
13
+
14
+ #
15
+ # Set up Platform.
16
+ #
17
+ def initialize
18
+ end
19
+
20
+ #
21
+ # Show a message.
22
+ # Abstract--implment in subclass.
23
+ #
24
+ def show( msg, md=false, page=false )
25
+ puts msg
26
+ end
27
+
28
+ #
29
+ # Prompt for the next command.
30
+ # Abstract--implment in subclass.
31
+ #
32
+ def prompt_cmd
33
+ return ''
34
+ end
35
+
36
+ #
37
+ # Clear the screen.
38
+ # Abstract--implment in subclass.
39
+ #
40
+ def clear_screen
41
+ end
42
+
43
+ #
44
+ # Edit some temporary text and return the edited text.
45
+ # Abstract--implment in subclass.
46
+ #
47
+ def edit initial_value
48
+ return initial_value
49
+ end
50
+
51
+ #
52
+ # Show the given table data.
53
+ # Abstract--implment in subclass.
54
+ #
55
+ def show_table( headers, data, title = nil )
56
+ end
57
+
58
+ #
59
+ # Get the number of vertical lines on screen.
60
+ # Abstract--implment in subclass.
61
+ #
62
+ def lines
63
+ return 40
64
+ end
65
+
66
+ #
67
+ # Get the number of horizontal columns on screen.
68
+ # Abstract--implment in subclass.
69
+ #
70
+ def cols
71
+ return 80
72
+ end
73
+ end
74
+ end
75
+ end
@@ -5,7 +5,6 @@
5
5
  #
6
6
 
7
7
  require 'yaml'
8
- require 'tty-screen'
9
8
  require 'colorize'
10
9
 
11
10
  module GlooLang
@@ -72,14 +71,14 @@ module GlooLang
72
71
  # Get the number of vertical lines on screen.
73
72
  #
74
73
  def self.lines
75
- TTY::Screen.rows
74
+ $engine.platform.lines
76
75
  end
77
76
 
78
77
  #
79
78
  # Get the number of horizontal columns on screen.
80
79
  #
81
80
  def self.cols
82
- TTY::Screen.cols
81
+ $engine.platform.cols
83
82
  end
84
83
 
85
84
  #
@@ -3,8 +3,6 @@
3
3
  #
4
4
  # An object that contains a collection of other objects.
5
5
  #
6
- require 'tty-table'
7
- require 'pastel'
8
6
 
9
7
  module GlooLang
10
8
  module Objs
@@ -59,16 +57,7 @@ module GlooLang
59
57
  #
60
58
  def msg_show_key_value_table
61
59
  data = self.children.map { |o| [ o.name, o.value ] }
62
- pastel = ::Pastel.new
63
- table = TTY::Table.new rows: data
64
- pad = [ 0, 1, 0, 1 ]
65
- rendered = table.render( :ascii, indent: 2, padding: pad ) do |r|
66
- r.border.style = :blue
67
- r.filter = proc do |val, _row_index, col_index|
68
- col_index.zero? ? pastel.blue( val ) : pastel.white( val )
69
- end
70
- end
71
- puts "\n #{rendered}\n\n"
60
+ $engine.platform.show_table nil, data, title
72
61
  end
73
62
 
74
63
  end
@@ -3,8 +3,6 @@
3
3
  #
4
4
  # A [multiline] block of text.
5
5
  #
6
- require 'tty-editor'
7
- require 'tty-pager'
8
6
 
9
7
  module GlooLang
10
8
  module Objs
@@ -12,7 +10,6 @@ module GlooLang
12
10
 
13
11
  KEYWORD = 'text'.freeze
14
12
  KEYWORD_SHORT = 'txt'.freeze
15
- DEFAULT_TMP_FILE = 'tmp.txt'.freeze
16
13
 
17
14
  #
18
15
  # The name of the object type.
@@ -67,19 +64,14 @@ module GlooLang
67
64
  def msg_page
68
65
  return unless value
69
66
 
70
- # pager = TTY::Pager::SystemPager.new command: 'less -R'
71
- pager = TTY::Pager.new
72
- pager.page( value )
67
+ $engine.platform.show( value, false, true )
73
68
  end
74
69
 
75
70
  #
76
71
  # Edit the text in the default editor.
77
72
  #
78
73
  def msg_edit
79
- tmp = File.join( $settings.tmp_path, DEFAULT_TMP_FILE )
80
- File.open( tmp, 'w' ) { |file| file.write( self.value ) }
81
- TTY::Editor.open( tmp )
82
- set_value File.read( tmp )
74
+ self.value = $engine.platform.edit( self.value )
83
75
  end
84
76
 
85
77
  end
@@ -3,8 +3,6 @@
3
3
  #
4
4
  # Markdown data.
5
5
  #
6
- require 'tty-markdown'
7
- require 'tty-pager'
8
6
 
9
7
  module GlooLang
10
8
  module Objs
@@ -64,7 +62,7 @@ module GlooLang
64
62
  # Show the markdown data in the terminal.
65
63
  #
66
64
  def msg_show
67
- puts TTY::Markdown.parse self.value
65
+ $engine.platform.show( self.value, true, false )
68
66
  end
69
67
 
70
68
  #
@@ -73,10 +71,7 @@ module GlooLang
73
71
  def msg_page
74
72
  return unless self.value
75
73
 
76
- md = TTY::Markdown.parse self.value
77
- # pager = TTY::Pager::SystemPager.new command: 'less -R'
78
- pager = TTY::Pager.new
79
- pager.page( md )
74
+ $engine.platform.show( md, true, true )
80
75
  end
81
76
 
82
77
  end
@@ -4,8 +4,6 @@
4
4
  # A data table.
5
5
  # The table container headers and data.
6
6
  #
7
- require 'tty-table'
8
- require 'pastel'
9
7
 
10
8
  module GlooLang
11
9
  module Objs
@@ -106,33 +104,7 @@ module GlooLang
106
104
  #
107
105
  def msg_show
108
106
  title = self.value
109
- GlooLang::Objs::Table.show headers, data, title
110
- end
111
-
112
- # ---------------------------------------------------------------------
113
- # Static table helper
114
- # ---------------------------------------------------------------------
115
-
116
- #
117
- # Show the given table data.
118
- #
119
- def self.show( headers, data, title = nil )
120
- pastel = ::Pastel.new
121
- table = TTY::Table.new headers, data
122
- pad = [ 0, 1, 0, 1 ]
123
- rendered = table.render( :ascii, indent: 2, padding: pad ) do |r|
124
- r.border.style = :blue
125
- r.filter = proc do |val, row_index, _col_index|
126
- # col_index % 2 == 1 ? pastel.red.on_green(val) : val
127
- if row_index.zero?
128
- pastel.blue( val )
129
- else
130
- row_index.odd? ? pastel.white( val ) : pastel.yellow( val )
131
- end
132
- end
133
- end
134
- puts "\n#{title.white}"
135
- puts "#{rendered}\n\n"
107
+ $engine.platform.show_table headers, data, title
136
108
  end
137
109
 
138
110
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gloo-lang
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.4
4
+ version: 0.9.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Eric Crane
@@ -138,6 +138,26 @@ dependencies:
138
138
  - - ">="
139
139
  - !ruby/object:Gem::Version
140
140
  version: 6.1.0
141
+ - !ruby/object:Gem::Dependency
142
+ name: tty-platform
143
+ requirement: !ruby/object:Gem::Requirement
144
+ requirements:
145
+ - - "~>"
146
+ - !ruby/object:Gem::Version
147
+ version: '0.3'
148
+ - - ">="
149
+ - !ruby/object:Gem::Version
150
+ version: 0.3.0
151
+ type: :runtime
152
+ prerelease: false
153
+ version_requirements: !ruby/object:Gem::Requirement
154
+ requirements:
155
+ - - "~>"
156
+ - !ruby/object:Gem::Version
157
+ version: '0.3'
158
+ - - ">="
159
+ - !ruby/object:Gem::Version
160
+ version: 0.3.0
141
161
  description: A scripting languge to keep it all together.
142
162
  email:
143
163
  - eric.crane@mac.com
@@ -164,6 +184,7 @@ files:
164
184
  - lib/gloo_lang/app/info.rb
165
185
  - lib/gloo_lang/app/log.rb
166
186
  - lib/gloo_lang/app/mode.rb
187
+ - lib/gloo_lang/app/platform.rb
167
188
  - lib/gloo_lang/app/settings.rb
168
189
  - lib/gloo_lang/convert/converter.rb
169
190
  - lib/gloo_lang/convert/string_to_datetime.rb
@@ -285,15 +306,6 @@ files:
285
306
  - lib/gloo_lang/objs/basic/string.rb
286
307
  - lib/gloo_lang/objs/basic/text.rb
287
308
  - lib/gloo_lang/objs/basic/untyped.rb
288
- - lib/gloo_lang/objs/cli/banner.rb
289
- - lib/gloo_lang/objs/cli/bar.rb
290
- - lib/gloo_lang/objs/cli/colorize.rb
291
- - lib/gloo_lang/objs/cli/confirm.rb
292
- - lib/gloo_lang/objs/cli/menu.rb
293
- - lib/gloo_lang/objs/cli/menu_item.rb
294
- - lib/gloo_lang/objs/cli/pastel.rb
295
- - lib/gloo_lang/objs/cli/prompt.rb
296
- - lib/gloo_lang/objs/cli/select.rb
297
309
  - lib/gloo_lang/objs/ctrl/each.rb
298
310
  - lib/gloo_lang/objs/ctrl/repeat.rb
299
311
  - lib/gloo_lang/objs/data/markdown.rb
@@ -301,18 +313,11 @@ files:
301
313
  - lib/gloo_lang/objs/data/query.rb
302
314
  - lib/gloo_lang/objs/data/sqlite.rb
303
315
  - lib/gloo_lang/objs/data/table.rb
304
- - lib/gloo_lang/objs/dev/git.rb
305
- - lib/gloo_lang/objs/dev/stats.rb
306
316
  - lib/gloo_lang/objs/dt/date.rb
307
317
  - lib/gloo_lang/objs/dt/datetime.rb
308
318
  - lib/gloo_lang/objs/dt/time.rb
309
319
  - lib/gloo_lang/objs/ror/erb.rb
310
320
  - lib/gloo_lang/objs/ror/eval.rb
311
- - lib/gloo_lang/objs/snd/play.rb
312
- - lib/gloo_lang/objs/snd/say.rb
313
- - lib/gloo_lang/objs/system/file_handle.rb
314
- - lib/gloo_lang/objs/system/ssh_exec.rb
315
- - lib/gloo_lang/objs/system/system.rb
316
321
  - lib/gloo_lang/objs/web/http_get.rb
317
322
  - lib/gloo_lang/objs/web/http_post.rb
318
323
  - lib/gloo_lang/objs/web/json.rb
@@ -327,9 +332,6 @@ files:
327
332
  - lib/gloo_lang/utils/format.rb
328
333
  - lib/gloo_lang/utils/stats.rb
329
334
  - lib/gloo_lang/utils/words.rb
330
- - lib/gloo_lang/verbs/alert.rb
331
- - lib/gloo_lang/verbs/beep.rb
332
- - lib/gloo_lang/verbs/cls.rb
333
335
  - lib/gloo_lang/verbs/context.rb
334
336
  - lib/gloo_lang/verbs/create.rb
335
337
  - lib/gloo_lang/verbs/execute.rb
@@ -1,108 +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 large-text banner.
5
- #
6
- require 'tty-font'
7
- require 'pastel'
8
-
9
- module GlooLang
10
- module Objs
11
- class Banner < GlooLang::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
- end
107
- end
108
- end