vedeu 0.1.10 → 0.1.12

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 (47) hide show
  1. checksums.yaml +4 -4
  2. data/lib/vedeu.rb +2 -10
  3. data/lib/vedeu/api/api.rb +29 -1
  4. data/lib/vedeu/api/events.rb +1 -26
  5. data/lib/vedeu/api/{base.rb → helpers.rb} +1 -18
  6. data/lib/vedeu/api/interface.rb +16 -3
  7. data/lib/vedeu/api/line.rb +29 -4
  8. data/lib/vedeu/api/log.rb +13 -1
  9. data/lib/vedeu/api/store.rb +0 -4
  10. data/lib/vedeu/api/stream.rb +29 -2
  11. data/lib/vedeu/api/view.rb +4 -2
  12. data/lib/vedeu/models/attributes/attributes.rb +25 -0
  13. data/lib/vedeu/models/attributes/colour_translator.rb +0 -10
  14. data/lib/vedeu/models/colour.rb +23 -3
  15. data/lib/vedeu/models/composition.rb +32 -2
  16. data/lib/vedeu/models/geometry.rb +38 -22
  17. data/lib/vedeu/models/interface.rb +57 -12
  18. data/lib/vedeu/models/line.rb +28 -4
  19. data/lib/vedeu/models/stream.rb +36 -6
  20. data/lib/vedeu/output/buffers.rb +8 -4
  21. data/lib/vedeu/output/clear.rb +1 -3
  22. data/lib/vedeu/output/render.rb +12 -4
  23. data/lib/vedeu/support/esc.rb +12 -2
  24. data/lib/vedeu/support/menu.rb +10 -10
  25. data/test/lib/vedeu/api/events_test.rb +4 -4
  26. data/test/lib/vedeu/api/interface_test.rb +9 -9
  27. data/test/lib/vedeu/api/view_test.rb +1 -1
  28. data/test/lib/vedeu/models/attributes/{collection_test.rb → attributes_test.rb} +7 -7
  29. data/test/lib/vedeu/models/geometry_test.rb +0 -65
  30. data/test/lib/vedeu/models/line_test.rb +29 -4
  31. data/test/lib/vedeu/models/stream_test.rb +56 -11
  32. data/test/lib/vedeu/output/render_test.rb +1 -0
  33. data/vedeu.gemspec +1 -3
  34. metadata +6 -38
  35. data/lib/vedeu/models/attributes/background.rb +0 -7
  36. data/lib/vedeu/models/attributes/collection.rb +0 -11
  37. data/lib/vedeu/models/attributes/foreground.rb +0 -7
  38. data/lib/vedeu/models/attributes/interface_collection.rb +0 -13
  39. data/lib/vedeu/models/attributes/line_collection.rb +0 -9
  40. data/lib/vedeu/models/attributes/stream_collection.rb +0 -9
  41. data/lib/vedeu/models/style.rb +0 -15
  42. data/test/lib/vedeu/models/attributes/interface_collection_test.rb +0 -40
  43. data/test/lib/vedeu/models/attributes/line_collection_test.rb +0 -25
  44. data/test/lib/vedeu/models/attributes/stream_collection_test.rb +0 -23
  45. data/test/lib/vedeu/models/style_test.rb +0 -48
  46. data/test/support/bench.rb +0 -34
  47. data/test/support/colours.rb +0 -39
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8aeb09ef744842c704e9bdf1e1fb5b4aedc8f130
4
- data.tar.gz: 84c802a8a7d76a20896f2062dc150f2a02294acb
3
+ metadata.gz: da7db44d3fbb1a694c60eb4a8112015a79fa0f4e
4
+ data.tar.gz: a132a4ac6eff1b1a4d12684837ce72edf667ec77
5
5
  SHA512:
6
- metadata.gz: ad4a0e07634064d86fc758f62a6bdba2d17366e5295e890bac15024991149a0910c1a90ce125ea227cf740ca871def5b3bd88547a12ac2f9f9c84ce713e06613
7
- data.tar.gz: 269d83fef585811e1b3ea07b261809b405f7753827a2a24f8f0a2e964be7c44e5438bce495954d1551da4ca261dc2fb79de1680cf970577cdf70688d3cfdbfb5
6
+ metadata.gz: 4cfc8f7d4de135c80242b489e3bfb04ed627896c2fc945380dbc7c1c54c85a17792430fbd0a68ecf9734589819ab3f27c83121feeee0cfe895a0228896c894ad
7
+ data.tar.gz: 58e58be65d0e522abb67d542f1a7f390c8663fb80748664a9d5b7fe248307ea8b378bc77d79d727af585f2a4d03cb9bc2f0c51e8bbe70b30b0cb41bffbeb020f
data/lib/vedeu.rb CHANGED
@@ -13,12 +13,10 @@ require 'io/console'
13
13
  require 'logger'
14
14
  require 'optparse'
15
15
 
16
- require 'virtus'
17
-
18
16
  require 'vedeu/api/api'
19
- require 'vedeu/api/base'
20
17
  require 'vedeu/api/events'
21
18
  require 'vedeu/api/grid'
19
+ require 'vedeu/api/helpers'
22
20
  require 'vedeu/api/interface'
23
21
  require 'vedeu/api/line'
24
22
  require 'vedeu/api/log'
@@ -30,18 +28,12 @@ require 'vedeu/application'
30
28
  require 'vedeu/configuration'
31
29
  require 'vedeu/launcher'
32
30
 
33
- require 'vedeu/models/attributes/background'
34
- require 'vedeu/models/attributes/collection'
31
+ require 'vedeu/models/attributes/attributes'
35
32
  require 'vedeu/models/attributes/colour_translator'
36
- require 'vedeu/models/attributes/foreground'
37
- require 'vedeu/models/attributes/interface_collection'
38
- require 'vedeu/models/attributes/line_collection'
39
- require 'vedeu/models/attributes/stream_collection'
40
33
  require 'vedeu/models/composition'
41
34
  require 'vedeu/support/terminal'
42
35
  require 'vedeu/models/geometry'
43
36
  require 'vedeu/models/colour'
44
- require 'vedeu/models/style'
45
37
  require 'vedeu/models/interface'
46
38
  require 'vedeu/models/line'
47
39
  require 'vedeu/models/stream'
data/lib/vedeu/api/api.rb CHANGED
@@ -1,7 +1,27 @@
1
1
  module Vedeu
2
2
  module API
3
+ def event(name, delay = 0, &block)
4
+ Vedeu.events.event(name, delay, &block)
5
+ end
6
+
7
+ def events
8
+ @events ||= API::Events.new do
9
+ event(:_exit_) { fail StopIteration }
10
+ event(:_log_) { |message| Vedeu.log(message) }
11
+ event(:_mode_switch_) { fail ModeSwitch }
12
+ event(:_clear_) { Terminal.output(Esc.string('clear')) }
13
+ event(:_refresh_) { Buffers.refresh_all }
14
+
15
+ event(:_keypress_) do |key|
16
+ trigger(:key, key)
17
+ trigger(:_log_, (' ' * 42) + "key: #{key}")
18
+ trigger(:_mode_switch_) if key == :escape
19
+ end
20
+ end
21
+ end
22
+
3
23
  def interface(name, &block)
4
- API::Interface.save(name, &block)
24
+ API::Interface.create(name, &block)
5
25
  end
6
26
 
7
27
  def log(message)
@@ -12,6 +32,14 @@ module Vedeu
12
32
  # Vedeu::View.render(object)
13
33
  # end
14
34
 
35
+ def trigger(name, *args)
36
+ Vedeu.events.trigger(name, *args)
37
+ end
38
+
39
+ def use(name)
40
+ Vedeu::Interface.new(Store.query(name))
41
+ end
42
+
15
43
  def view(name, &block)
16
44
  API::View.build(name, &block)
17
45
  end
@@ -1,30 +1,5 @@
1
1
  module Vedeu
2
2
  module API
3
- def on(name, delay = 0, &block)
4
- Vedeu.events.on(name, delay, &block)
5
- end
6
- alias_method :event, :on
7
-
8
- def trigger(name, *args)
9
- Vedeu.events.trigger(name, *args)
10
- end
11
-
12
- def events
13
- @events ||= API::Events.new do
14
- on(:_exit_) { fail StopIteration }
15
- on(:_log_) { |message| Vedeu.log(message) }
16
- on(:_mode_switch_) { fail ModeSwitch }
17
- on(:_clear_) { Terminal.output(Esc.string('clear')) }
18
- on(:_refresh_) { Buffers.refresh_all }
19
-
20
- on(:_keypress_) do |key|
21
- trigger(:key, key)
22
- trigger(:_log_, (' ' * 42) + "key: #{key}")
23
- trigger(:_mode_switch_) if key == :escape
24
- end
25
- end
26
- end
27
-
28
3
  class Events
29
4
  def initialize(&block)
30
5
  @handlers = Hash.new do |hash, key|
@@ -43,7 +18,7 @@ module Vedeu
43
18
  instance_eval(&block)
44
19
  end
45
20
 
46
- def on(event, delay = 0, &block)
21
+ def event(event, delay = 0, &block)
47
22
  handlers[event][:events] << block
48
23
  handlers[event][:delay] = delay
49
24
  handlers[event]
@@ -1,17 +1,6 @@
1
1
  module Vedeu
2
2
  module API
3
- class Base
4
- def self.build(attributes = {}, &block)
5
- new(attributes, &block).build
6
- end
7
-
8
- def initialize(attributes = {}, &block)
9
- @attributes = attributes
10
- @self_before_instance_eval = eval('self', block.binding)
11
-
12
- instance_eval(&block)
13
- end
14
-
3
+ module Helpers
15
4
  def colour(values = {})
16
5
  fail InvalidArgument, '#colour expects a Hash containing :foreground,' \
17
6
  ' :background or both.' unless values.is_a?(Hash)
@@ -28,12 +17,6 @@ module Vedeu
28
17
 
29
18
  end
30
19
  end
31
-
32
- private
33
-
34
- def method_missing(method, *args, &block)
35
- @self_before_instance_eval.send method, *args, &block
36
- end
37
20
  end
38
21
  end
39
22
  end
@@ -6,18 +6,19 @@ module Vedeu
6
6
 
7
7
  module API
8
8
  class Interface
9
- def self.save(name, &block)
10
- new(name).save(&block)
9
+ def self.create(name, &block)
10
+ new(name).create(&block)
11
11
  end
12
12
 
13
13
  def initialize(name)
14
14
  @name = name.to_s
15
15
  end
16
16
 
17
- def save(&block)
17
+ def create(&block)
18
18
  instance_eval(&block) if block_given?
19
19
 
20
20
  stored_attributes = Store.create(attributes)
21
+
21
22
  interface = Vedeu::Interface.new(stored_attributes)
22
23
 
23
24
  Vedeu::Buffers.create(interface)
@@ -33,6 +34,18 @@ module Vedeu
33
34
  Vedeu.use(value)
34
35
  end
35
36
 
37
+ def cursor(value)
38
+ attributes[:cursor] = value
39
+ end
40
+
41
+ def delay(value)
42
+ attributes[:delay] = value
43
+ end
44
+
45
+ def group(value)
46
+ attributes[:group] = value
47
+ end
48
+
36
49
  def x(value)
37
50
  fail XOutOfBounds if x_out_of_bounds?(value)
38
51
 
@@ -1,6 +1,19 @@
1
1
  module Vedeu
2
2
  module API
3
- class Line < Base
3
+ class Line
4
+ include Helpers
5
+
6
+ def self.build(attributes = {}, &block)
7
+ new(attributes, &block).build
8
+ end
9
+
10
+ def initialize(attributes = {}, &block)
11
+ @attributes = attributes
12
+ @self_before_instance_eval = eval('self', block.binding)
13
+
14
+ instance_eval(&block)
15
+ end
16
+
4
17
  def build
5
18
  attributes
6
19
  end
@@ -26,9 +39,21 @@ module Vedeu
26
39
  end
27
40
 
28
41
  def attributes
29
- @_attributes ||= { colour: {},
30
- style: [],
31
- streams: [] }.merge!(@attributes)
42
+ @_attributes ||= defaults.merge!(@attributes)
43
+ end
44
+
45
+ def defaults
46
+ {
47
+ colour: {},
48
+ style: [],
49
+ streams: []
50
+ }
51
+ end
52
+
53
+ private
54
+
55
+ def method_missing(method, *args, &block)
56
+ @self_before_instance_eval.send method, *args, &block
32
57
  end
33
58
  end
34
59
  end
data/lib/vedeu/api/log.rb CHANGED
@@ -1,3 +1,5 @@
1
+ require 'fileutils'
2
+
1
3
  module Vedeu
2
4
  module API
3
5
  class Log
@@ -19,7 +21,17 @@ module Vedeu
19
21
  private
20
22
 
21
23
  def self.filename
22
- Dir.home + '/.vedeu/vedeu.log'
24
+ @_filename ||= directory + '/vedeu.log'
25
+ end
26
+
27
+ def self.directory
28
+ FileUtils.mkdir_p(path) unless File.directory?(path)
29
+
30
+ path
31
+ end
32
+
33
+ def self.path
34
+ Dir.home + '/.vedeu'
23
35
  end
24
36
  end
25
37
 
@@ -2,10 +2,6 @@ module Vedeu
2
2
  EntityNotFound = Class.new(StandardError)
3
3
 
4
4
  module API
5
- def use(name)
6
- Vedeu::Interface.new(Store.query(name))
7
- end
8
-
9
5
  module Store
10
6
  extend self
11
7
 
@@ -1,6 +1,19 @@
1
1
  module Vedeu
2
2
  module API
3
- class Stream < Base
3
+ class Stream
4
+ include Helpers
5
+
6
+ def self.build(attributes = {}, &block)
7
+ new(attributes, &block).build
8
+ end
9
+
10
+ def initialize(attributes = {}, &block)
11
+ @attributes = attributes
12
+ @self_before_instance_eval = eval('self', block.binding)
13
+
14
+ instance_eval(&block)
15
+ end
16
+
4
17
  def build
5
18
  attributes
6
19
  end
@@ -18,7 +31,21 @@ module Vedeu
18
31
  end
19
32
 
20
33
  def attributes
21
- @_attributes ||= { colour: {}, style: [], text: '' }.merge!(@attributes)
34
+ @_attributes ||= defaults.merge!(@attributes)
35
+ end
36
+
37
+ def defaults
38
+ {
39
+ colour: {},
40
+ style: [],
41
+ text: ''
42
+ }
43
+ end
44
+
45
+ private
46
+
47
+ def method_missing(method, *args, &block)
48
+ @self_before_instance_eval.send method, *args, &block
22
49
  end
23
50
  end
24
51
  end
@@ -14,9 +14,11 @@ module Vedeu
14
14
  end
15
15
 
16
16
  def build(&block)
17
- @self_before_instance_eval = eval('self', block.binding)
17
+ if block_given?
18
+ @self_before_instance_eval = eval('self', block.binding)
18
19
 
19
- instance_eval(&block) if block_given?
20
+ instance_eval(&block)
21
+ end
20
22
 
21
23
  attributes
22
24
  end
@@ -0,0 +1,25 @@
1
+ module Vedeu
2
+ module Attributes
3
+ extend self
4
+
5
+ def coercer(value, model, key)
6
+ return [] if value.nil? || value.empty?
7
+
8
+ [value].flatten.map do |v|
9
+ if v.is_a?(model)
10
+ v
11
+
12
+ else
13
+ model.new(v)
14
+
15
+ end
16
+ end
17
+ end
18
+
19
+ def coerce_styles(values)
20
+ return '' if values.nil? || values.empty?
21
+
22
+ Array(values).flatten.map { |s| Esc.string(s) }.join
23
+ end
24
+ end
25
+ end
@@ -1,9 +1,5 @@
1
1
  module Vedeu
2
2
  class ColourTranslator
3
- def self.translate(html_colour = '')
4
- new(html_colour).value
5
- end
6
-
7
3
  def initialize(html_colour = '')
8
4
  @html_colour = html_colour
9
5
  end
@@ -20,12 +16,6 @@ module Vedeu
20
16
  ["\e[38;5;", translate, 'm'].join
21
17
  end
22
18
 
23
- def value
24
- return '' unless valid?
25
-
26
- translate
27
- end
28
-
29
19
  private
30
20
 
31
21
  attr_reader :html_colour
@@ -1,12 +1,32 @@
1
1
  module Vedeu
2
2
  class Colour
3
- include Virtus.model
3
+ def initialize(attributes = {})
4
+ @attributes = attributes
5
+ end
4
6
 
5
- attribute :foreground, Foreground, default: ''
6
- attribute :background, Background, default: ''
7
+ def attributes
8
+ defaults.merge!(@attributes)
9
+ end
10
+
11
+ def foreground
12
+ @foreground ||= ColourTranslator.new(attributes[:foreground]).foreground
13
+ end
14
+
15
+ def background
16
+ @background ||= ColourTranslator.new(attributes[:background]).background
17
+ end
7
18
 
8
19
  def to_s
9
20
  foreground + background
10
21
  end
22
+
23
+ private
24
+
25
+ def defaults
26
+ {
27
+ foreground: '',
28
+ background: ''
29
+ }
30
+ end
11
31
  end
12
32
  end
@@ -1,11 +1,41 @@
1
1
  module Vedeu
2
2
  class Composition
3
- include Virtus.model
3
+ def initialize(attributes = {})
4
+ @attributes = attributes
5
+ end
6
+
7
+ def attributes
8
+ defaults.merge!(@attributes)
9
+ end
10
+
11
+ def interfaces
12
+ @interfaces ||= if _interfaces.nil? || _interfaces.empty?
13
+ []
14
+
15
+ else
16
+ [_interfaces].flatten.map do |new_attributes|
17
+ stored_attributes = API::Store.query(new_attributes[:name])
18
+
19
+ Interface.new(stored_attributes.merge!(new_attributes))
20
+ end
4
21
 
5
- attribute :interfaces, InterfaceCollection
22
+ end
23
+ end
6
24
 
7
25
  def to_s
8
26
  interfaces.map(&:to_s).join
9
27
  end
28
+
29
+ private
30
+
31
+ def _interfaces
32
+ attributes[:interfaces]
33
+ end
34
+
35
+ def defaults
36
+ {
37
+ interfaces: []
38
+ }
39
+ end
10
40
  end
11
41
  end