gloo 0.3.0 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (87) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +73 -0
  3. data/Gemfile +2 -2
  4. data/Gemfile.lock +3 -3
  5. data/Rakefile +6 -6
  6. data/bin/console +4 -4
  7. data/gloo.gemspec +19 -18
  8. data/lib/gloo.rb +6 -6
  9. data/lib/gloo/app/args.rb +30 -31
  10. data/lib/gloo/app/engine.rb +33 -28
  11. data/lib/gloo/app/help.rb +17 -11
  12. data/lib/gloo/app/info.rb +3 -3
  13. data/lib/gloo/app/log.rb +17 -17
  14. data/lib/gloo/app/mode.rb +4 -4
  15. data/lib/gloo/app/settings.rb +43 -40
  16. data/lib/gloo/core/baseo.rb +7 -7
  17. data/lib/gloo/core/dictionary.rb +30 -27
  18. data/lib/gloo/core/error.rb +50 -0
  19. data/lib/gloo/core/event_manager.rb +17 -19
  20. data/lib/gloo/core/factory.rb +92 -39
  21. data/lib/gloo/core/gloo_system.rb +49 -54
  22. data/lib/gloo/core/heap.rb +15 -13
  23. data/lib/gloo/core/it.rb +5 -5
  24. data/lib/gloo/core/literal.rb +7 -7
  25. data/lib/gloo/core/obj.rb +89 -79
  26. data/lib/gloo/core/obj_finder.rb +9 -14
  27. data/lib/gloo/core/op.rb +8 -8
  28. data/lib/gloo/core/parser.rb +25 -26
  29. data/lib/gloo/core/pn.rb +65 -50
  30. data/lib/gloo/core/runner.rb +26 -0
  31. data/lib/gloo/core/script.rb +7 -7
  32. data/lib/gloo/core/tokens.rb +39 -41
  33. data/lib/gloo/core/verb.rb +30 -19
  34. data/lib/gloo/expr/expression.rb +35 -43
  35. data/lib/gloo/expr/l_boolean.rb +7 -6
  36. data/lib/gloo/expr/l_integer.rb +5 -4
  37. data/lib/gloo/expr/l_string.rb +13 -15
  38. data/lib/gloo/expr/op_div.rb +3 -5
  39. data/lib/gloo/expr/op_minus.rb +3 -5
  40. data/lib/gloo/expr/op_mult.rb +3 -5
  41. data/lib/gloo/expr/op_plus.rb +5 -7
  42. data/lib/gloo/objs/basic/boolean.rb +63 -38
  43. data/lib/gloo/objs/basic/container.rb +40 -12
  44. data/lib/gloo/objs/basic/integer.rb +40 -16
  45. data/lib/gloo/objs/basic/script.rb +62 -38
  46. data/lib/gloo/objs/basic/string.rb +39 -15
  47. data/lib/gloo/objs/basic/text.rb +43 -20
  48. data/lib/gloo/objs/basic/untyped.rb +35 -10
  49. data/lib/gloo/objs/cli/colorize.rb +53 -23
  50. data/lib/gloo/objs/cli/confirm.rb +63 -29
  51. data/lib/gloo/objs/cli/prompt.rb +63 -29
  52. data/lib/gloo/objs/ctrl/each.rb +98 -60
  53. data/lib/gloo/objs/dev/git.rb +98 -64
  54. data/lib/gloo/objs/ror/erb.rb +81 -41
  55. data/lib/gloo/objs/ror/eval.rb +73 -31
  56. data/lib/gloo/objs/snd/play.rb +71 -0
  57. data/lib/gloo/objs/snd/say.rb +120 -0
  58. data/lib/gloo/objs/system/file_handle.rb +80 -48
  59. data/lib/gloo/objs/system/system.rb +84 -38
  60. data/lib/gloo/objs/web/http_get.rb +83 -46
  61. data/lib/gloo/objs/web/http_post.rb +69 -43
  62. data/lib/gloo/objs/web/slack.rb +89 -58
  63. data/lib/gloo/objs/web/teams.rb +88 -53
  64. data/lib/gloo/persist/file_loader.rb +81 -82
  65. data/lib/gloo/persist/file_saver.rb +12 -12
  66. data/lib/gloo/persist/file_storage.rb +15 -15
  67. data/lib/gloo/persist/line_splitter.rb +74 -0
  68. data/lib/gloo/persist/persist_man.rb +29 -29
  69. data/lib/gloo/utils/words.rb +2 -2
  70. data/lib/gloo/verbs/alert.rb +67 -16
  71. data/lib/gloo/verbs/beep.rb +70 -0
  72. data/lib/gloo/verbs/context.rb +61 -21
  73. data/lib/gloo/verbs/create.rb +52 -21
  74. data/lib/gloo/verbs/help.rb +177 -27
  75. data/lib/gloo/verbs/if.rb +54 -21
  76. data/lib/gloo/verbs/list.rb +55 -24
  77. data/lib/gloo/verbs/load.rb +46 -12
  78. data/lib/gloo/verbs/put.rb +90 -34
  79. data/lib/gloo/verbs/quit.rb +43 -12
  80. data/lib/gloo/verbs/run.rb +42 -11
  81. data/lib/gloo/verbs/save.rb +45 -10
  82. data/lib/gloo/verbs/show.rb +56 -22
  83. data/lib/gloo/verbs/tell.rb +44 -12
  84. data/lib/gloo/verbs/unless.rb +55 -21
  85. data/lib/gloo/verbs/version.rb +42 -12
  86. data/lib/run.rb +5 -5
  87. metadata +19 -12
@@ -7,16 +7,16 @@
7
7
  module Gloo
8
8
  module Core
9
9
  class It
10
-
10
+
11
11
  attr_accessor :value
12
-
12
+
13
13
  # Set up the object.
14
- def initialize()
14
+ def initialize
15
15
  @value = nil
16
16
  end
17
-
17
+
18
18
  # Set the value of it.
19
- def set_to new_value
19
+ def set_to( new_value )
20
20
  @value = new_value
21
21
  end
22
22
 
@@ -7,19 +7,19 @@
7
7
  module Gloo
8
8
  module Core
9
9
  class Literal
10
-
10
+
11
11
  attr_reader :value
12
-
12
+
13
13
  # Create the expression from a list of tokens.
14
- def initialize value
14
+ def initialize( value )
15
15
  set_value( value )
16
16
  end
17
-
17
+
18
18
  # Set the literal value.
19
- def set_value value
19
+ def set_value( value )
20
20
  @value = value
21
- end
22
-
21
+ end
22
+
23
23
  end
24
24
  end
25
25
  end
@@ -8,47 +8,48 @@
8
8
  module Gloo
9
9
  module Core
10
10
  class Obj < Baseo
11
-
11
+
12
12
  attr_accessor :value
13
13
  attr_reader :children, :parent
14
14
 
15
15
  # Set up the object.
16
- def initialize()
17
- @value = ""
16
+ def initialize
17
+ @value = ''
18
18
  @children = []
19
19
  @parent = nil
20
20
  end
21
-
21
+
22
22
  # Register object types when they are loaded.
23
23
  def self.inherited( subclass )
24
24
  Dictionary.instance.register_obj( subclass )
25
25
  end
26
26
 
27
- #
27
+ #
28
28
  # The name of the object type.
29
- #
29
+ #
30
30
  def self.typename
31
31
  raise 'this method should be overriden'
32
32
  end
33
33
 
34
- #
34
+ #
35
35
  # The object type, suitable for display.
36
- #
36
+ #
37
37
  def type_display
38
38
  return self.class.typename
39
39
  end
40
40
 
41
- #
41
+ #
42
42
  # Set the parent for the object.
43
- #
44
- def set_parent obj
43
+ #
44
+ def set_parent( obj )
45
45
  @parent = obj
46
46
  end
47
-
47
+
48
48
  # Is this the root object?
49
- def is_root?
49
+ def root?
50
50
  return false if @parent
51
- return false unless name.downcase == "root"
51
+ return false unless name.downcase == 'root'
52
+
52
53
  return true
53
54
  end
54
55
 
@@ -58,165 +59,174 @@ module Gloo
58
59
  def self.can_create?
59
60
  true
60
61
  end
61
-
62
-
62
+
63
63
  # ---------------------------------------------------------------------
64
64
  # Value
65
65
  # ---------------------------------------------------------------------
66
66
 
67
- #
67
+ #
68
68
  # Set the value with any necessary type conversions.
69
- #
70
- def set_value new_value
69
+ #
70
+ def set_value( new_value )
71
71
  self.value = new_value
72
72
  end
73
-
74
- #
73
+
74
+ #
75
75
  # Get the value for display purposes.
76
- #
76
+ #
77
77
  def value_display
78
78
  return self.value.to_s
79
79
  end
80
-
81
- #
80
+
81
+ #
82
82
  # Does this object support multi-line values?
83
83
  # Initially only true for scripts.
84
- #
85
- def has_multiline_value?
84
+ #
85
+ def multiline_value?
86
86
  return false
87
87
  end
88
-
89
- #
88
+
89
+ #
90
90
  # Is the value a String?
91
- #
92
- def value_is_string?
91
+ #
92
+ def value_string?
93
93
  return self.value.is_a? String
94
94
  end
95
95
 
96
- #
96
+ #
97
97
  # Is the value an Array?
98
- #
98
+ #
99
99
  def value_is_array?
100
100
  return self.value.is_a? Array
101
101
  end
102
-
103
- #
102
+
103
+ #
104
104
  # Is the value a blank string?
105
- #
105
+ #
106
106
  def value_is_blank?
107
107
  return true if value.nil?
108
+
108
109
  return self.value.to_s.strip.empty?
109
110
  end
110
-
111
111
 
112
112
  # ---------------------------------------------------------------------
113
113
  # Children
114
114
  # ---------------------------------------------------------------------
115
-
115
+
116
116
  # Add a child object to the container.
117
- def add_child obj
117
+ def add_child( obj )
118
118
  @children << obj
119
119
  obj.set_parent self
120
120
  end
121
-
121
+
122
122
  # Get the number of children.
123
123
  def child_count
124
124
  return @children.count
125
125
  end
126
-
126
+
127
127
  # Does this object contain an object with the given name?
128
- def has_child? name
128
+ def contains_child?( name )
129
129
  @children.each do |o|
130
- return true if ( name.downcase == o.name.downcase )
130
+ return true if name.downcase == o.name.downcase
131
131
  end
132
132
  return false
133
133
  end
134
134
 
135
135
  # Find a child object with the given name.
136
- def find_child name
136
+ def find_child( name )
137
137
  @children.each do |o|
138
- return o if ( name.downcase == o.name.downcase )
138
+ return o if name.downcase == o.name.downcase
139
139
  end
140
140
  return nil
141
141
  end
142
-
142
+
143
143
  # Remove the object from the children collection.
144
- def remove_child obj
144
+ def remove_child( obj )
145
145
  @children.delete obj
146
146
  end
147
-
147
+
148
148
  # Does this object have children to add when an object
149
149
  # is created in interactive mode?
150
150
  # This does not apply during obj load, etc.
151
151
  def add_children_on_create?
152
152
  return false
153
153
  end
154
-
154
+
155
155
  # Add children to this object.
156
- # This is used by containers to add children needed
156
+ # This is used by containers to add children needed
157
157
  # for default configurations.
158
158
  def add_default_children
159
+ # Override this.
159
160
  end
160
161
 
161
-
162
162
  # ---------------------------------------------------------------------
163
163
  # Messages
164
164
  # ---------------------------------------------------------------------
165
165
 
166
- #
166
+ #
167
167
  # Get a list of message names that this object receives.
168
- #
168
+ #
169
169
  def self.messages
170
- return [ "unload" ]
170
+ return [ 'unload' ]
171
171
  end
172
-
173
- #
172
+
173
+ #
174
174
  # Can this object receive a message?
175
- #
176
- def can_receive_message? msg
175
+ #
176
+ def can_receive_message?( msg )
177
177
  msgs = self.class.messages
178
178
  return msgs.include?( msg.strip.downcase )
179
179
  end
180
180
 
181
- #
181
+ #
182
182
  # Sent this object the given message.
183
- #
184
- def send_message msg, params=nil
185
- @params = params
186
- if self.can_receive_message? msg
187
- return self.dispatch msg
188
- else
189
- $log.error "Object #{self.name} cannot receive message #{msg}"
190
- return false
191
- end
183
+ #
184
+ def send_message( msg, params = nil )
185
+ @params = params
186
+ return self.dispatch msg if self.can_receive_message? msg
187
+
188
+ $log.error "Object #{self.name} cannot receive message #{msg}"
189
+ return false
192
190
  end
193
-
194
- #
191
+
192
+ #
195
193
  # Dispatch the message to the object.
196
- #
197
- def dispatch msg
194
+ #
195
+ def dispatch( msg )
198
196
  o = "msg_#{msg}"
199
- if self.respond_to? o
200
- self.public_send( o )
197
+ if self.respond_to? o
198
+ self.public_send( o )
201
199
  return true
202
200
  else
203
201
  $log.error "Message #{msg} not implemented"
204
202
  return false
205
203
  end
206
204
  end
207
-
208
- #
205
+
206
+ #
209
207
  # Send the object the unload message.
210
- #
208
+ #
211
209
  def msg_unload
212
- if self.is_root?
213
- $log.error "Cannot unload the root object."
210
+ if self.root?
211
+ $log.error 'Cannot unload the root object.'
214
212
  return
215
213
  end
214
+
216
215
  $engine.event_manager.on_unload self
217
216
  $engine.heap.unload self
218
217
  end
219
-
218
+
219
+ # ---------------------------------------------------------------------
220
+ # Help
221
+ # ---------------------------------------------------------------------
222
+
223
+ #
224
+ # Get help for this object.
225
+ #
226
+ def self.help
227
+ return 'No help found.'
228
+ end
229
+
220
230
  end
221
231
  end
222
232
  end
@@ -7,29 +7,24 @@
7
7
  module Gloo
8
8
  module Core
9
9
  class ObjFinder
10
-
11
- #
10
+
11
+ #
12
12
  # Find all objects in the given container that have
13
13
  # the given name.
14
14
  # If the container isn't provided, root will be used.
15
- #
16
- def self.by_name name, container=nil
17
- if container.nil?
18
- container = $engine.heap.root
19
- end
15
+ #
16
+ def self.by_name( name, container = nil )
17
+ container = $engine.heap.root if container.nil?
20
18
  arr = []
21
-
19
+
22
20
  container.children.each do |o|
23
21
  arr << o if o.name == name
24
- if o.child_count > 0
25
- arr += by_name( name, o )
26
- end
22
+ arr += by_name( name, o ) if o.child_count.positive?
27
23
  end
28
-
24
+
29
25
  return arr
30
26
  end
31
-
32
-
27
+
33
28
  end
34
29
  end
35
30
  end
@@ -7,27 +7,27 @@
7
7
  module Gloo
8
8
  module Core
9
9
  class Op
10
-
10
+
11
11
  # Is the token an operator?
12
- def self.is_op? token
13
- return [ "+", "-", "*", "/" ].include?( token.strip )
12
+ def self.op?( token )
13
+ return [ '+', '-', '*', '/' ].include?( token.strip )
14
14
  end
15
-
15
+
16
16
  # Create the operator for the given token.
17
- def self.create_op token
17
+ def self.create_op( token )
18
18
  return Gloo::Expr::OpMinus.new if token == '-'
19
19
  return Gloo::Expr::OpMult.new if token == '*'
20
20
  return Gloo::Expr::OpDiv.new if token == '/'
21
21
  return Gloo::Expr::OpPlus.new if token == '+'
22
-
22
+
23
23
  return default_op
24
24
  end
25
-
25
+
26
26
  # Get the default operator (+).
27
27
  def self.default_op
28
28
  return Gloo::Expr::OpPlus.new
29
29
  end
30
-
30
+
31
31
  end
32
32
  end
33
33
  end
@@ -8,45 +8,44 @@
8
8
  module Gloo
9
9
  module Core
10
10
  class Parser
11
-
11
+
12
12
  # Set up the parser.
13
- def initialize()
14
- $log.debug "parser intialized..."
13
+ def initialize
14
+ $log.debug 'parser intialized...'
15
15
  end
16
-
17
-
16
+
18
17
  # Parse a command from the immediate execution context.
19
- def parse_immediate cmd
20
- cmd, params = split_params cmd
21
- params = Gloo::Core::Tokens.new( params ) if params
18
+ def parse_immediate( cmd )
19
+ cmd, params = split_params cmd
20
+ params = Gloo::Core::Tokens.new( params ) if params
22
21
  tokens = Gloo::Core::Tokens.new( cmd )
23
22
  dic = Gloo::Core::Dictionary.instance
24
23
  verb = dic.find_verb( tokens.verb )
25
24
  return verb.new( tokens, params ) if verb
26
-
25
+
27
26
  $log.error "Verb '#{tokens.verb}' was not found."
28
27
  return nil
29
28
  end
30
-
31
- # If additional params were provided, split them out
32
- # from the token list.
33
- def split_params cmd
34
- params = nil
35
- i = cmd.rindex( '(' )
36
- if i && cmd.strip.end_with?( ')' )
37
- pstr = cmd[i+1..-1]
38
- params = pstr.strip[0..-2] if pstr
39
- cmd = cmd[ 0, i-1]
40
- end
41
- return cmd, params
42
- end
43
-
29
+
30
+ # If additional params were provided, split them out
31
+ # from the token list.
32
+ def split_params( cmd )
33
+ params = nil
34
+ i = cmd.rindex( '(' )
35
+ if i && cmd.strip.end_with?( ')' )
36
+ pstr = cmd[ i + 1..-1 ]
37
+ params = pstr.strip[ 0..-2 ] if pstr
38
+ cmd = cmd[ 0, i - 1 ]
39
+ end
40
+ return cmd, params
41
+ end
42
+
44
43
  # Parse a command and then run it if it parsed correctly.
45
- def run cmd
44
+ def run( cmd )
46
45
  v = parse_immediate( cmd )
47
- v.run if v
46
+ Runner.go( v ) if v
48
47
  end
49
-
48
+
50
49
  end
51
50
  end
52
51
  end