vedeu 0.1.12 → 0.1.13

Sign up to get free protection for your applications and to get access to all the features.
Files changed (38) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +7 -0
  3. data/lib/vedeu.rb +12 -12
  4. data/lib/vedeu/api/api.rb +23 -18
  5. data/lib/vedeu/api/events.rb +1 -1
  6. data/lib/vedeu/api/interface.rb +29 -19
  7. data/lib/vedeu/api/line.rb +1 -34
  8. data/lib/vedeu/api/stream.rb +1 -34
  9. data/lib/vedeu/models/attributes/attributes.rb +7 -7
  10. data/lib/vedeu/models/attributes/colour_translator.rb +45 -7
  11. data/lib/vedeu/models/colour.rb +4 -2
  12. data/lib/vedeu/models/composition.rb +9 -9
  13. data/lib/vedeu/models/interface.rb +1 -1
  14. data/lib/vedeu/models/line.rb +17 -3
  15. data/lib/vedeu/{api → models}/store.rb +0 -2
  16. data/lib/vedeu/models/stream.rb +17 -3
  17. data/lib/vedeu/output/buffers.rb +14 -8
  18. data/lib/vedeu/output/view.rb +7 -3
  19. data/lib/vedeu/support/esc.rb +1 -14
  20. data/lib/vedeu/support/position.rb +31 -0
  21. data/lib/vedeu/support/terminal.rb +4 -0
  22. data/test/lib/vedeu/api/api_test.rb +21 -0
  23. data/test/lib/vedeu/api/interface_test.rb +765 -51
  24. data/test/lib/vedeu/configuration_test.rb +5 -0
  25. data/test/lib/vedeu/models/composition_test.rb +1 -1
  26. data/test/lib/vedeu/models/interface_test.rb +59 -17
  27. data/test/lib/vedeu/{api → models}/store_test.rb +12 -3
  28. data/test/lib/vedeu/output/clear_test.rb +1 -1
  29. data/test/lib/vedeu/output/render_test.rb +1 -1
  30. data/test/lib/vedeu/output/view_test.rb +17 -0
  31. data/test/lib/vedeu/support/esc_test.rb +0 -10
  32. data/test/lib/vedeu/support/position_test.rb +19 -0
  33. data/test/support/colour_test.sh +100 -0
  34. data/test/{stats.sh → support/stats.sh} +0 -0
  35. data/vedeu.gemspec +1 -1
  36. metadata +16 -10
  37. data/lib/vedeu/api/view.rb +0 -45
  38. data/test/lib/vedeu/api/view_test.rb +0 -565
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: da7db44d3fbb1a694c60eb4a8112015a79fa0f4e
4
- data.tar.gz: a132a4ac6eff1b1a4d12684837ce72edf667ec77
3
+ metadata.gz: 5bc23985fc8270da6cebe20612c4aaa02967a07f
4
+ data.tar.gz: bf6587149152e3111183fe10abe958376a024872
5
5
  SHA512:
6
- metadata.gz: 4cfc8f7d4de135c80242b489e3bfb04ed627896c2fc945380dbc7c1c54c85a17792430fbd0a68ecf9734589819ab3f27c83121feeee0cfe895a0228896c894ad
7
- data.tar.gz: 58e58be65d0e522abb67d542f1a7f390c8663fb80748664a9d5b7fe248307ea8b378bc77d79d727af585f2a4d03cb9bc2f0c51e8bbe70b30b0cb41bffbeb020f
6
+ metadata.gz: dd0458ce9a0b1e2b93788a4adef0439e7946db8a5e4e508ce68a662d885dd726b900692af0b8dfd385f24ddb78be19a0ddf5ce628c165243de0672a499a82cc8
7
+ data.tar.gz: 6a56e31aba151c295f6989e43947a1e0e6b7571cd5c65d8b17077abf3c15eee7d3fa558559f9e72db63421e1afedb5aeba46eb7b5052b937a49efe5191cb78c0
data/README.md CHANGED
@@ -6,6 +6,13 @@
6
6
  Vedeu is my attempt at creating a terminal based application framework without the need for Ncurses. I've tried to make Vedeu as simple and flexible as possible.
7
7
 
8
8
 
9
+ ## Requirements
10
+
11
+ Vedeu has been built on MacOSX 10.9 (Mavericks) with Ruby v2.1.2.
12
+
13
+ Note: You may have trouble running Vedeu with Windows installations.
14
+
15
+
9
16
  ## Installation
10
17
 
11
18
  Add this line to your application's Gemfile:
data/lib/vedeu.rb CHANGED
@@ -13,6 +13,17 @@ require 'io/console'
13
13
  require 'logger'
14
14
  require 'optparse'
15
15
 
16
+ require 'vedeu/models/attributes/attributes'
17
+ require 'vedeu/models/attributes/colour_translator'
18
+ require 'vedeu/models/composition'
19
+ require 'vedeu/support/terminal'
20
+ require 'vedeu/models/geometry'
21
+ require 'vedeu/models/colour'
22
+ require 'vedeu/models/interface'
23
+ require 'vedeu/models/line'
24
+ require 'vedeu/models/store'
25
+ require 'vedeu/models/stream'
26
+
16
27
  require 'vedeu/api/api'
17
28
  require 'vedeu/api/events'
18
29
  require 'vedeu/api/grid'
@@ -20,29 +31,18 @@ require 'vedeu/api/helpers'
20
31
  require 'vedeu/api/interface'
21
32
  require 'vedeu/api/line'
22
33
  require 'vedeu/api/log'
23
- require 'vedeu/api/store'
24
34
  require 'vedeu/api/stream'
25
- require 'vedeu/api/view'
26
35
 
27
36
  require 'vedeu/application'
28
37
  require 'vedeu/configuration'
29
38
  require 'vedeu/launcher'
30
39
 
31
- require 'vedeu/models/attributes/attributes'
32
- require 'vedeu/models/attributes/colour_translator'
33
- require 'vedeu/models/composition'
34
- require 'vedeu/support/terminal'
35
- require 'vedeu/models/geometry'
36
- require 'vedeu/models/colour'
37
- require 'vedeu/models/interface'
38
- require 'vedeu/models/line'
39
- require 'vedeu/models/stream'
40
-
41
40
  require 'vedeu/output/buffers'
42
41
  require 'vedeu/output/clear'
43
42
  require 'vedeu/output/render'
44
43
  require 'vedeu/output/view'
45
44
 
45
+ require 'vedeu/support/position'
46
46
  require 'vedeu/support/esc'
47
47
  require 'vedeu/support/input'
48
48
  require 'vedeu/support/menu'
data/lib/vedeu/api/api.rb CHANGED
@@ -6,42 +6,47 @@ module Vedeu
6
6
 
7
7
  def events
8
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
9
+ event(:_log_) { |msg| Vedeu.log(msg) }
10
+ event(:_exit_) { fail StopIteration }
11
+ event(:_mode_switch_) { fail ModeSwitch }
12
+ event(:_clear_) { Terminal.clear_screen }
13
+ event(:_refresh_) { Buffers.refresh_all }
14
+ event(:_keypress_) { |key| Vedeu.keypress(key) }
20
15
  end
21
16
  end
22
17
 
18
+ def height
19
+ Terminal.height
20
+ end
21
+
23
22
  def interface(name, &block)
24
- API::Interface.create(name, &block)
23
+ API::Interface.define({ name: name }, &block)
24
+ end
25
+
26
+ def keypress(key)
27
+ trigger(:key, key)
28
+ trigger(:_log_, (' ' * 42) + "key: #{key}")
29
+ trigger(:_mode_switch_) if key == :escape
25
30
  end
26
31
 
27
32
  def log(message)
28
33
  API::Log.logger.debug(message)
29
34
  end
30
35
 
31
- # def render(object = nil)
32
- # Vedeu::View.render(object)
33
- # end
34
-
35
36
  def trigger(name, *args)
36
37
  Vedeu.events.trigger(name, *args)
37
38
  end
38
39
 
39
40
  def use(name)
40
- Vedeu::Interface.new(Store.query(name))
41
+ Vedeu::Interface.new(Vedeu::Store.query(name))
41
42
  end
42
43
 
43
44
  def view(name, &block)
44
- API::View.build(name, &block)
45
+ API::Interface.build({ name: name }, &block)
46
+ end
47
+
48
+ def width
49
+ Terminal.width
45
50
  end
46
51
  end
47
52
 
@@ -39,7 +39,7 @@ module Vedeu
39
39
  attr_reader :handlers
40
40
 
41
41
  def method_missing(method, *args, &block)
42
- @self_before_instance_eval.send method, *args, &block
42
+ @self_before_instance_eval.send(method, *args, &block)
43
43
  end
44
44
  end
45
45
  end
@@ -5,35 +5,45 @@ module Vedeu
5
5
  YOutOfBounds = Class.new(StandardError)
6
6
 
7
7
  module API
8
- class Interface
9
- def self.create(name, &block)
10
- new(name).create(&block)
8
+ class Interface < Vedeu::Interface
9
+ def self.build(attributes = {}, &block)
10
+ new(attributes, &block).attributes
11
11
  end
12
12
 
13
- def initialize(name)
14
- @name = name.to_s
13
+ def self.define(attributes = {}, &block)
14
+ new(attributes).define(&block)
15
15
  end
16
16
 
17
- def create(&block)
18
- instance_eval(&block) if block_given?
17
+ def initialize(attributes = {}, &block)
18
+ @attributes = attributes
19
19
 
20
- stored_attributes = Store.create(attributes)
20
+ if block_given?
21
+ @self_before_instance_eval = eval('self', block.binding)
21
22
 
22
- interface = Vedeu::Interface.new(stored_attributes)
23
+ instance_eval(&block)
24
+ end
25
+ end
23
26
 
27
+ def define(&block)
28
+ instance_eval(&block) if block_given?
29
+ stored_attributes = Vedeu::Store.create(attributes)
30
+ interface = Vedeu::Interface.new(stored_attributes)
24
31
  Vedeu::Buffers.create(interface)
25
-
26
32
  interface
27
33
  end
28
34
 
29
- private
30
-
31
- attr_reader :name
35
+ def line(&block)
36
+ attributes[:lines] << Line.build(&block)
37
+ end
32
38
 
33
39
  def use(value)
34
40
  Vedeu.use(value)
35
41
  end
36
42
 
43
+ def colour(value)
44
+ attributes[:colour] = value
45
+ end
46
+
37
47
  def cursor(value)
38
48
  attributes[:cursor] = value
39
49
  end
@@ -74,6 +84,10 @@ module Vedeu
74
84
  attributes[:geometry][:centred] = value
75
85
  end
76
86
 
87
+ def style(value)
88
+ attributes[:style] = value
89
+ end
90
+
77
91
  def y_out_of_bounds?(value)
78
92
  value < 1 || value > Terminal.height
79
93
  end
@@ -82,12 +96,8 @@ module Vedeu
82
96
  value < 1 || value > Terminal.width
83
97
  end
84
98
 
85
- def method_missing(method_name, arg, &block)
86
- attributes[method_name] = arg
87
- end
88
-
89
- def attributes
90
- @attributes ||= { name: name, geometry: {} }
99
+ def method_missing(method, *args, &block)
100
+ @self_before_instance_eval.send(method, *args, &block)
91
101
  end
92
102
  end
93
103
  end
@@ -1,23 +1,8 @@
1
1
  module Vedeu
2
2
  module API
3
- class Line
3
+ class Line < Vedeu::Line
4
4
  include Helpers
5
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
-
17
- def build
18
- attributes
19
- end
20
-
21
6
  def stream(&block)
22
7
  attributes[:streams] << API::Stream.build(&block)
23
8
  end
@@ -37,24 +22,6 @@ module Vedeu
37
22
  colour: { background: value }
38
23
  }, &block)
39
24
  end
40
-
41
- def 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
57
- end
58
25
  end
59
26
  end
60
27
  end
@@ -1,23 +1,8 @@
1
1
  module Vedeu
2
2
  module API
3
- class Stream
3
+ class Stream < Vedeu::Stream
4
4
  include Helpers
5
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
-
17
- def build
18
- attributes
19
- end
20
-
21
6
  def align(value)
22
7
  attributes[:align] = value
23
8
  end
@@ -29,24 +14,6 @@ module Vedeu
29
14
  def width(value)
30
15
  attributes[:width] = value
31
16
  end
32
-
33
- def 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
49
- end
50
17
  end
51
18
  end
52
19
  end
@@ -2,15 +2,15 @@ module Vedeu
2
2
  module Attributes
3
3
  extend self
4
4
 
5
- def coercer(value, model, key)
6
- return [] if value.nil? || value.empty?
5
+ def coercer(values, model, key)
6
+ return [] if values.nil? || values.empty?
7
7
 
8
- [value].flatten.map do |v|
9
- if v.is_a?(model)
10
- v
8
+ [values].flatten.map do |value|
9
+ if value.is_a?(model)
10
+ value
11
11
 
12
12
  else
13
- model.new(v)
13
+ model.new(value)
14
14
 
15
15
  end
16
16
  end
@@ -19,7 +19,7 @@ module Vedeu
19
19
  def coerce_styles(values)
20
20
  return '' if values.nil? || values.empty?
21
21
 
22
- Array(values).flatten.map { |s| Esc.string(s) }.join
22
+ Array(values).flatten.map { |value| Esc.string(value) }.join
23
23
  end
24
24
  end
25
25
  end
@@ -1,19 +1,34 @@
1
1
  module Vedeu
2
2
  class ColourTranslator
3
- def initialize(html_colour = '')
3
+ def initialize(html_colour = '', options = {})
4
4
  @html_colour = html_colour
5
+ @options = options
5
6
  end
6
7
 
7
8
  def background
8
9
  return '' unless valid?
9
10
 
10
- ["\e[48;5;", translate, 'm'].join
11
+ if truecolor?
12
+ r, g, b = translate
13
+ ["\e[48;2;", r, ';', g, ';', b, 'm'].join
14
+
15
+ else
16
+ ["\e[48;5;", translate, 'm'].join
17
+
18
+ end
11
19
  end
12
20
 
13
21
  def foreground
14
22
  return '' unless valid?
15
23
 
16
- ["\e[38;5;", translate, 'm'].join
24
+ if truecolor?
25
+ r, g, b = translate
26
+ ["\e[38;2;", r, ';', g, ';', b, 'm'].join
27
+
28
+ else
29
+ ["\e[38;5;", translate, 'm'].join
30
+
31
+ end
17
32
  end
18
33
 
19
34
  private
@@ -21,19 +36,28 @@ module Vedeu
21
36
  attr_reader :html_colour
22
37
 
23
38
  def translate
24
- [16, red, green, blue].inject(:+)
39
+ if truecolor?
40
+ [red, green, blue]
41
+ else
42
+ [
43
+ 16,
44
+ ((red / 51) * 36),
45
+ ((green / 51) * 6),
46
+ ((blue / 51) * 1)
47
+ ].inject(:+)
48
+ end
25
49
  end
26
50
 
27
51
  def red
28
- (html_colour[1..2].to_i(16) / 51) * 36
52
+ html_colour[1..2].to_i(16)
29
53
  end
30
54
 
31
55
  def green
32
- (html_colour[3..4].to_i(16) / 51) * 6
56
+ html_colour[3..4].to_i(16)
33
57
  end
34
58
 
35
59
  def blue
36
- (html_colour[5..6].to_i(16) / 51) * 1
60
+ html_colour[5..6].to_i(16)
37
61
  end
38
62
 
39
63
  def valid?
@@ -53,5 +77,19 @@ module Vedeu
53
77
  def valid_format?
54
78
  html_colour =~ /^#([A-Fa-f0-9]{6})$/
55
79
  end
80
+
81
+ def truecolor?
82
+ options.fetch(:truecolor)
83
+ end
84
+
85
+ def options
86
+ defaults.merge!(@options)
87
+ end
88
+
89
+ def defaults
90
+ {
91
+ truecolor: false
92
+ }
93
+ end
56
94
  end
57
95
  end