vedeu 0.1.1 → 0.1.2

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
  SHA1:
3
- metadata.gz: 6fee0507672be816ff50768dda87bcae402feddf
4
- data.tar.gz: 4a8c9d298fda7eaafba079138bf87e408dbd7739
3
+ metadata.gz: d4ccb72c3982e068887e6d1ac1e7dab94bfd25a9
4
+ data.tar.gz: a92614c47e5b02740ed486f0ea76bf3c3bbb8b67
5
5
  SHA512:
6
- metadata.gz: 6960df810fcdc92db6d6c0e753d9e8a7e372d33e3deed7bbe374b6dcb91b1243d4027d3445ffdd8a7b1fc9ea5a749f6935935a5eea62f06dbfecd3a892fe5af9
7
- data.tar.gz: f40602cd24e26a9395dd95bc7a791b5542da1350f0ede53dc7a8b1af1ffa6835f3cb9810f9b7345b85321b133ff89269d174ceb69f64312bbd81e81330fa94e7
6
+ metadata.gz: 056459bd4d73d522448bb43214420a255edf99dd58e3c5fc11d9b85da885a63badc6cc66e9cc5965e8815979f8d8e2cac846cef39154399dc4917e77bf93b375
7
+ data.tar.gz: e503cbc2ef1e1714c1993b37490c0d8d2ebc1fef012ed707018051ec7dc1927f9f8d71bea4882d89484d67a0bbb85a3889cb0d5f0328952bb5dffcd91a26adbc
data/lib/vedeu.rb CHANGED
@@ -1,33 +1,39 @@
1
1
  require 'vedeu/instrumentation'
2
2
  require 'vedeu/support/builder'
3
3
  require 'vedeu/support/events'
4
+ require 'vedeu/support/persistence'
5
+
4
6
  require 'vedeu/support/geometry'
5
7
  require 'vedeu/support/menu'
6
- require 'vedeu/parsing/view'
8
+ require 'vedeu/output/view'
7
9
  require 'vedeu/launcher'
8
10
 
9
11
  module Vedeu
12
+ # :nocov:
10
13
  def self.debug?
11
14
  false
12
15
  end
13
16
 
14
17
  Vedeu::Instrumentation::Trace.call if debug?
15
18
 
16
- # :nocov:
17
- module ClassMethods
19
+ module API
18
20
  def interface(name, &block)
19
21
  Builder.build(name, &block)
20
22
  end
21
23
 
22
- def event(name, &block)
23
- Vedeu.events.on(name, &block)
24
+ def on(name, delay = 0, &block)
25
+ Vedeu.events.on(name, delay, &block)
24
26
  end
25
- alias_method :on, :event
27
+ alias_method :event, :on
26
28
 
27
- def run(name, *args)
29
+ def trigger(name, *args)
28
30
  Vedeu.events.trigger(name, *args)
29
31
  end
30
- alias_method :trigger, :run
32
+ alias_method :run, :trigger
33
+
34
+ def view(name)
35
+ Persistence.query(name)
36
+ end
31
37
  end
32
38
 
33
39
  def self.events
@@ -53,11 +59,11 @@ module Vedeu
53
59
  end
54
60
 
55
61
  def self.included(receiver)
56
- receiver.send(:include, ClassMethods)
57
- receiver.extend(ClassMethods)
62
+ receiver.send(:include, API)
63
+ receiver.extend(API)
58
64
  end
59
65
 
60
- extend ClassMethods
66
+ extend API
61
67
 
62
68
  private
63
69
 
@@ -16,15 +16,15 @@ module Vedeu
16
16
  opts.banner = "Usage: #{$PROGRAM_NAME} [options]"
17
17
 
18
18
  opts.on('-1', '--run-once', 'Run application once.') do
19
- @options[:interactive] = false
19
+ options[:interactive] = false
20
20
  end
21
21
 
22
22
  opts.on('-c', '--cooked', 'Run application in cooked mode.') do
23
- @options[:mode] = :cooked
23
+ options[:mode] = :cooked
24
24
  end
25
25
 
26
26
  opts.on('-r', '--raw', 'Run application in raw mode (default).') do
27
- @options[:mode] = :raw
27
+ options[:mode] = :raw
28
28
  end
29
29
  end
30
30
  parser.parse!(args)
@@ -83,7 +83,6 @@ module Vedeu
83
83
 
84
84
  def pretty!(&block)
85
85
  ["\e[38;5;#{rand(22..231)}m", yield, "\e[38;2;39m"].join
86
-
87
86
  end
88
87
 
89
88
  def watched
@@ -101,7 +100,7 @@ module Vedeu
101
100
  def defaults
102
101
  {
103
102
  event: 'call',
104
- klass: /^Vedeu::(?!.*Instrumentation|Line|Stream|Style|Colour|Geometry|Terminal|Esc|Translator).*/
103
+ klass: /^Vedeu::(?!.*Instrumentation|Interface|Line|Stream|Style|Colour|Geometry|Terminal|Esc|Translator).*/
105
104
  }
106
105
  end
107
106
 
@@ -22,11 +22,14 @@ module Vedeu
22
22
  Application.start(configuration)
23
23
 
24
24
  @exit_code = 0
25
+
25
26
  rescue StandardError => uncaught_exception
26
27
  Vedeu.error(uncaught_exception)
28
+
27
29
  ensure
28
30
  $stdin, $stdout, $stderr = STDIN, STDOUT, STDERR
29
31
  @kernel.exit(@exit_code)
32
+
30
33
  end
31
34
 
32
35
  private
@@ -27,9 +27,10 @@ module Vedeu
27
27
  attribute :current, String, default: ''
28
28
  attribute :cursor, Boolean, default: true
29
29
  attribute :centred, Boolean, default: false
30
+ attribute :delay, Float, default: 0.0
30
31
 
31
32
  def initialize(attributes = {})
32
- Vedeu.events.on(:refresh) { refresh }
33
+ Vedeu.events.on(:refresh, attributes[:delay]) { refresh }
33
34
 
34
35
  super
35
36
  end
@@ -1,6 +1,6 @@
1
1
  require 'erb'
2
2
  require 'vedeu/support/helpers'
3
- require 'vedeu/parsing/text_adaptor'
3
+ require 'vedeu/output/text_adaptor'
4
4
 
5
5
  module Vedeu
6
6
  class ERBParser
@@ -0,0 +1,23 @@
1
+ require 'json'
2
+
3
+ module Vedeu
4
+ class JSONParser
5
+ def self.parse(json)
6
+ new(json).parse
7
+ end
8
+
9
+ def initialize(json)
10
+ @json = json
11
+ end
12
+
13
+ def parse
14
+ JSON.load(json, nil, symbolize_names: true)
15
+ rescue JSON::ParserError
16
+ {}
17
+ end
18
+
19
+ private
20
+
21
+ attr_reader :json
22
+ end
23
+ end
File without changes
@@ -1,4 +1,4 @@
1
- require 'vedeu/parsing/text_adaptor'
1
+ require 'vedeu/output/text_adaptor'
2
2
 
3
3
  module Vedeu
4
4
  class RawParser
@@ -24,7 +24,7 @@ module Vedeu
24
24
  attr_reader :interface
25
25
 
26
26
  def processed_lines
27
- lines.each_with_index do |line|
27
+ processed_lines = lines.map do |line|
28
28
  if line.streams.any?
29
29
  processed_streams = []
30
30
  line_length = 0
@@ -33,13 +33,19 @@ module Vedeu
33
33
 
34
34
  if (line_length += stream.text.size) >= width
35
35
  remainder = width - line_length
36
- stream.text = truncate(stream.text, remainder)
37
- end
38
36
 
39
- processed_streams << stream
37
+ new_stream = Stream.new(text: truncate(stream.text, remainder),
38
+ style: stream.style,
39
+ colour: stream.colour)
40
+ processed_streams << new_stream
41
+ else
42
+ processed_streams << stream
43
+ end
40
44
  end
41
45
 
42
- line.streams = processed_streams
46
+ new_line = Line.new(streams: processed_streams,
47
+ style: line.style,
48
+ colour: line.colour)
43
49
  end
44
50
  end
45
51
  end
File without changes
@@ -1,9 +1,9 @@
1
1
  require 'vedeu/models/composition'
2
- require 'vedeu/parsing/erb_parser'
3
- require 'vedeu/parsing/raw_parser'
4
- require 'vedeu/parsing/json_parser'
5
- require 'vedeu/parsing/menu_parser'
6
- require 'vedeu/parsing/raw_parser'
2
+ require 'vedeu/output/erb_parser'
3
+ require 'vedeu/output/raw_parser'
4
+ require 'vedeu/output/json_parser'
5
+ require 'vedeu/output/menu_parser'
6
+ require 'vedeu/output/raw_parser'
7
7
 
8
8
  module Vedeu
9
9
  class View
@@ -33,7 +33,7 @@ module Vedeu
33
33
  json: JSONParser,
34
34
  hash: RawParser,
35
35
  menu: MenuParser,
36
- raw: RawRarser,
36
+ raw: RawParser,
37
37
  }.fetch(type)
38
38
  end
39
39
  end
@@ -1,7 +1,13 @@
1
1
  module Vedeu
2
2
  class Events
3
3
  def initialize(&block)
4
- @handlers = Hash.new { |h, k| h[k] = [] }
4
+ @handlers = Hash.new do |hash, key|
5
+ hash[key] = {
6
+ delay: 0,
7
+ events: [],
8
+ last_exec: 0,
9
+ }
10
+ end
5
11
  self.instance_eval(&block) if block_given?
6
12
  self
7
13
  end
@@ -12,13 +18,21 @@ module Vedeu
12
18
  self.instance_eval(&block)
13
19
  end
14
20
 
15
- def on(event, &block)
16
- handlers[event] << block
21
+ def on(event, delay = 0, &block)
22
+ handlers[event][:events] << block
23
+ handlers[event][:delay] = delay
24
+ handlers[event]
17
25
  end
18
26
 
19
27
  def trigger(event, *args)
20
- handlers[event].each do |handler|
21
- handler.call(*args)
28
+ elapsed = Time.now.to_f - handlers[event][:last_exec]
29
+
30
+ if elapsed > handlers[event][:delay]
31
+ handlers[event][:last_exec] = Time.now.to_f
32
+
33
+ handlers[event][:events].each do |handler|
34
+ handler.call(*args)
35
+ end
22
36
  end
23
37
  end
24
38
 
@@ -30,6 +44,6 @@ module Vedeu
30
44
 
31
45
  private
32
46
 
33
- attr_reader :handlers
47
+ attr_reader :handlers, :throttles
34
48
  end
35
49
  end
@@ -19,11 +19,9 @@ module Vedeu
19
19
  end
20
20
 
21
21
  def query(value)
22
- return false if value.nil? || value.empty?
23
-
24
22
  storage.select do |name, result|
25
23
  return result if name == value
26
- end
24
+ end unless value.nil? || value.empty?
27
25
 
28
26
  fail EntityNotFound, "Interface could not be found."
29
27
  end
@@ -1,5 +1,5 @@
1
1
  require 'test_helper'
2
- require 'vedeu/parsing/erb_parser'
2
+ require 'vedeu/output/erb_parser'
3
3
  require 'vedeu/support/helpers'
4
4
 
5
5
  class UserView
@@ -1,5 +1,5 @@
1
1
  require 'test_helper'
2
- require 'vedeu/parsing/json_parser'
2
+ require 'vedeu/output/json_parser'
3
3
 
4
4
  module Vedeu
5
5
  describe JSONParser do
@@ -1,5 +1,5 @@
1
1
  require 'test_helper'
2
- require 'vedeu/parsing/menu_parser'
2
+ require 'vedeu/output/menu_parser'
3
3
 
4
4
  module Vedeu
5
5
  describe MenuParser do
@@ -1,5 +1,5 @@
1
1
  require 'test_helper'
2
- require 'vedeu/parsing/raw_parser'
2
+ require 'vedeu/output/raw_parser'
3
3
 
4
4
  module Vedeu
5
5
  describe RawParser do
@@ -1,5 +1,5 @@
1
1
  require 'test_helper'
2
- require 'vedeu/parsing/text_adaptor'
2
+ require 'vedeu/output/text_adaptor'
3
3
 
4
4
  module Vedeu
5
5
  describe TextAdaptor do
@@ -0,0 +1,36 @@
1
+ require 'test_helper'
2
+ require 'vedeu/output/view'
3
+
4
+ module Vedeu
5
+ describe View do
6
+ describe '.render' do
7
+ it 'returns when the type is :erb' do
8
+ skip
9
+ View.render(:erb, '').must_equal('')
10
+ end
11
+
12
+ it 'returns when the type is :json' do
13
+ skip
14
+ View.render(:json, '').must_equal('')
15
+ end
16
+
17
+ it 'returns when the type is :raw' do
18
+ skip
19
+ View.render(:raw, '').must_equal('')
20
+ end
21
+
22
+ it 'returns when the type is :menu' do
23
+ skip
24
+ View.render(:menu, '').must_equal('')
25
+ end
26
+
27
+ it 'returns when the type is not set' do
28
+ proc { View.render(nil, '') }.must_raise(KeyError)
29
+ end
30
+
31
+ it 'returns when the type is not recognised' do
32
+ proc { View.render(:unknown, '') }.must_raise(KeyError)
33
+ end
34
+ end
35
+ end
36
+ end
@@ -4,15 +4,22 @@ require 'vedeu/support/events'
4
4
  module Vedeu
5
5
  describe Events do
6
6
  describe '#on' do
7
- it 'returns an Array' do
7
+ it 'adds the event block to the handlers' do
8
+ skip
8
9
  events = Events.new
9
10
  events.on(:some_event) { proc { |x| x } }
10
- .must_be_instance_of(Array)
11
+ end
12
+
13
+ it 'adds the specified throttle to the throttles' do
14
+ skip
15
+ events = Events.new
16
+ events.on(:some_event, 250) { proc { |x| x } }
11
17
  end
12
18
  end
13
19
 
14
20
  describe '#trigger' do
15
- it 'returns a collection containing the event when the event is pre-registered' do
21
+ it 'returns a collection containing the event when the event is ' \
22
+ 'pre-registered' do
16
23
  events = Events.new do
17
24
  on(:_exit_) { fail StopIteration }
18
25
  end
@@ -8,7 +8,7 @@ module Vedeu
8
8
 
9
9
  describe '#events' do
10
10
  it 'returns the events defined for menus' do
11
- menu.events.must_be_instance_of(Array)
11
+ menu.events.must_be_instance_of(Hash)
12
12
  end
13
13
  end
14
14
 
@@ -30,10 +30,6 @@ module Vedeu
30
30
  end
31
31
 
32
32
  describe '#query' do
33
- it 'returns false when the value is not provided' do
34
- Persistence.query(nil).must_equal(false)
35
- end
36
-
37
33
  it 'returns the record when found' do
38
34
  Persistence.create({ name: 'hydrogen' })
39
35
 
@@ -2,7 +2,7 @@ require 'test_helper'
2
2
  require 'vedeu'
3
3
 
4
4
  module Vedeu
5
- describe ClassMethods do
5
+ describe API do
6
6
  describe '.interface' do
7
7
  end
8
8
 
@@ -14,31 +14,23 @@ module Vedeu
14
14
 
15
15
  describe '.view' do
16
16
  it 'returns the interface referenced by name' do
17
- skip
18
- [].must_be_instance_of(Interface)
19
- [].name.must_equal([])
20
- end
17
+ Vedeu.interface 'Vedeu.view' do
18
+ width 5
19
+ height 5
20
+ end
21
21
 
22
- it 'returns false with no name' do
23
- skip
24
- [].must_equal(false)
22
+ Vedeu.view('Vedeu.view').must_be_instance_of(Interface)
23
+ Vedeu.view('Vedeu.view').name.must_equal('Vedeu.view')
25
24
  end
26
25
 
27
26
  it 'raises an exception if the interface does not exist' do
28
- skip
29
- proc { }.must_raise(EntityNotFound)
27
+ proc { Vedeu.view('unknown') }.must_raise(EntityNotFound)
30
28
  end
31
29
  end
32
30
  end
33
31
  end
34
32
 
35
33
  describe Vedeu do
36
- describe '.debug?' do
37
- it 'allows me to quickly enable/disable debugging' do
38
- skip
39
- end
40
- end
41
-
42
34
  describe '.events' do
43
35
  it 'creates some system events for the client application' do
44
36
  skip
data/test/test_helper.rb CHANGED
@@ -9,6 +9,8 @@ SimpleCov.start do
9
9
  add_filter '/test/'
10
10
  end unless ENV['no_simplecov']
11
11
 
12
+ require 'mocha/setup'
13
+
12
14
  GC.disable
13
15
 
14
16
  # commented out by default (makes tests slower)
data/vedeu.gemspec CHANGED
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
 
5
5
  Gem::Specification.new do |spec|
6
6
  spec.name = 'vedeu'
7
- spec.version = '0.1.1'
7
+ spec.version = '0.1.2'
8
8
  spec.authors = ['Gavin Laking']
9
9
  spec.email = ['gavinlaking@gmail.com']
10
10
  spec.summary = %q{A terminal case of wonderland.}
@@ -21,6 +21,7 @@ Gem::Specification.new do |spec|
21
21
  spec.add_development_dependency 'guard-minitest', '2.3.1'
22
22
  spec.add_development_dependency 'minitest', '5.4.0'
23
23
  spec.add_development_dependency 'minitest-reporters', '1.0.5'
24
+ spec.add_development_dependency 'mocha', '1.1.0'
24
25
  spec.add_development_dependency 'pry', '0.10.0'
25
26
  spec.add_development_dependency 'rake', '10.3.2'
26
27
  spec.add_development_dependency 'ruby-prof', '0.15.1'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vedeu
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gavin Laking
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-07-31 00:00:00.000000000 Z
11
+ date: 2014-08-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -80,6 +80,20 @@ dependencies:
80
80
  - - '='
81
81
  - !ruby/object:Gem::Version
82
82
  version: 1.0.5
83
+ - !ruby/object:Gem::Dependency
84
+ name: mocha
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - '='
88
+ - !ruby/object:Gem::Version
89
+ version: 1.1.0
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - '='
95
+ - !ruby/object:Gem::Version
96
+ version: 1.1.0
83
97
  - !ruby/object:Gem::Dependency
84
98
  name: pry
85
99
  requirement: !ruby/object:Gem::Requirement
@@ -187,13 +201,13 @@ files:
187
201
  - lib/vedeu/models/stream.rb
188
202
  - lib/vedeu/models/style.rb
189
203
  - lib/vedeu/output/clear_interface.rb
204
+ - lib/vedeu/output/erb_parser.rb
205
+ - lib/vedeu/output/json_parser.rb
206
+ - lib/vedeu/output/menu_parser.rb
207
+ - lib/vedeu/output/raw_parser.rb
190
208
  - lib/vedeu/output/render_interface.rb
191
- - lib/vedeu/parsing/erb_parser.rb
192
- - lib/vedeu/parsing/json_parser.rb
193
- - lib/vedeu/parsing/menu_parser.rb
194
- - lib/vedeu/parsing/raw_parser.rb
195
- - lib/vedeu/parsing/text_adaptor.rb
196
- - lib/vedeu/parsing/view.rb
209
+ - lib/vedeu/output/text_adaptor.rb
210
+ - lib/vedeu/output/view.rb
197
211
  - lib/vedeu/support/builder.rb
198
212
  - lib/vedeu/support/esc.rb
199
213
  - lib/vedeu/support/events.rb
@@ -222,13 +236,13 @@ files:
222
236
  - test/lib/vedeu/models/stream_test.rb
223
237
  - test/lib/vedeu/models/style_test.rb
224
238
  - test/lib/vedeu/output/clear_interface_test.rb
239
+ - test/lib/vedeu/output/erb_parser_test.rb
240
+ - test/lib/vedeu/output/json_parser_test.rb
241
+ - test/lib/vedeu/output/menu_parser_test.rb
242
+ - test/lib/vedeu/output/raw_parser_test.rb
225
243
  - test/lib/vedeu/output/render_interface_test.rb
226
- - test/lib/vedeu/parsing/erb_parser_test.rb
227
- - test/lib/vedeu/parsing/json_parser_test.rb
228
- - test/lib/vedeu/parsing/menu_parser_test.rb
229
- - test/lib/vedeu/parsing/raw_parser_test.rb
230
- - test/lib/vedeu/parsing/text_adaptor_test.rb
231
- - test/lib/vedeu/parsing/view_test.rb
244
+ - test/lib/vedeu/output/text_adaptor_test.rb
245
+ - test/lib/vedeu/output/view_test.rb
232
246
  - test/lib/vedeu/support/builder_test.rb
233
247
  - test/lib/vedeu/support/esc_test.rb
234
248
  - test/lib/vedeu/support/events_test.rb
@@ -302,13 +316,13 @@ test_files:
302
316
  - test/lib/vedeu/models/stream_test.rb
303
317
  - test/lib/vedeu/models/style_test.rb
304
318
  - test/lib/vedeu/output/clear_interface_test.rb
319
+ - test/lib/vedeu/output/erb_parser_test.rb
320
+ - test/lib/vedeu/output/json_parser_test.rb
321
+ - test/lib/vedeu/output/menu_parser_test.rb
322
+ - test/lib/vedeu/output/raw_parser_test.rb
305
323
  - test/lib/vedeu/output/render_interface_test.rb
306
- - test/lib/vedeu/parsing/erb_parser_test.rb
307
- - test/lib/vedeu/parsing/json_parser_test.rb
308
- - test/lib/vedeu/parsing/menu_parser_test.rb
309
- - test/lib/vedeu/parsing/raw_parser_test.rb
310
- - test/lib/vedeu/parsing/text_adaptor_test.rb
311
- - test/lib/vedeu/parsing/view_test.rb
324
+ - test/lib/vedeu/output/text_adaptor_test.rb
325
+ - test/lib/vedeu/output/view_test.rb
312
326
  - test/lib/vedeu/support/builder_test.rb
313
327
  - test/lib/vedeu/support/esc_test.rb
314
328
  - test/lib/vedeu/support/events_test.rb
@@ -1,23 +0,0 @@
1
- require 'json'
2
-
3
- module Vedeu
4
- class JSONParser
5
- def self.parse(output)
6
- new(output).parse
7
- end
8
-
9
- def initialize(output)
10
- @output = output
11
- end
12
-
13
- def parse
14
- JSON.load(output, nil, symbolize_names: true)
15
- rescue JSON::ParserError
16
- {}
17
- end
18
-
19
- private
20
-
21
- attr_reader :output
22
- end
23
- end
@@ -1,38 +0,0 @@
1
- require 'test_helper'
2
- require 'vedeu/parsing/view'
3
-
4
- module Vedeu
5
- describe View do
6
- describe '.render' do
7
- # it 'returns when the type is :erb' do
8
- # output = ''
9
- # View.render(:erb, output).must_equal('')
10
- # end
11
-
12
- # it 'returns when the type is :json' do
13
- # output = ''
14
- # View.render(:json, output).must_equal('')
15
- # end
16
-
17
- # it 'returns when the type is :hash' do
18
- # output = ''
19
- # View.render(:hash, output).must_equal('')
20
- # end
21
-
22
- # it 'returns when the type is :menu' do
23
- # output = ''
24
- # View.render(:menu, output).must_equal('')
25
- # end
26
-
27
- # it 'returns when the type is not set' do
28
- # output = ''
29
- # View.render(nil, output).must_equal('')
30
- # end
31
-
32
- # it 'returns when the type is not recognised' do
33
- # output = ''
34
- # View.render(:unknown, output).must_equal('')
35
- # end
36
- end
37
- end
38
- end