vedeu 0.7.4 → 0.8.0
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.
- checksums.yaml +4 -4
- data/.rubocop.yml +3 -0
- data/docs/api.md +5 -1
- data/docs/borders.md +2 -26
- data/docs/dsl.md +4 -4
- data/docs/dsl_elements.md +100 -0
- data/docs/events/by_name/action.md +3 -0
- data/docs/events/by_name/cursor_hide.md +3 -0
- data/docs/events/by_name/cursor_reset.md +3 -0
- data/docs/events/by_name/cursor_show.md +3 -0
- data/docs/events/by_name/geometry_down.md +3 -0
- data/docs/events/by_name/geometry_left.md +3 -0
- data/docs/events/by_name/geometry_right.md +3 -0
- data/docs/events/by_name/geometry_up.md +3 -0
- data/docs/events/by_name/hide_view.md +3 -0
- data/docs/events/by_name/set_border_caption.md +13 -0
- data/docs/events/by_name/set_border_title.md +13 -0
- data/docs/events/by_name/show_view.md +3 -0
- data/docs/events/by_name/standalone.md +3 -0
- data/docs/events/by_name/toggle_view.md +3 -0
- data/docs/events/by_name/view_down.md +4 -0
- data/docs/events/by_name/view_left.md +4 -0
- data/docs/events/by_name/view_right.md +4 -0
- data/docs/events/by_name/view_up.md +4 -0
- data/examples/views/empty_template.rb +46 -0
- data/examples/views/expected/line.out +1 -0
- data/examples/views/expected/lines.out +1 -0
- data/examples/views/expected/lines_alignment.out +1 -0
- data/examples/views/line.rb +220 -0
- data/examples/views/lines.rb +281 -0
- data/examples/views/lines_alignment.rb +231 -0
- data/examples/views/lines_line_stream.rb +99 -0
- data/examples/views/lines_line_streams.rb +73 -0
- data/examples/views/lines_line_streams_stream.rb +83 -0
- data/examples/views/lines_line_streams_stream_stream.rb +53 -0
- data/examples/views/lines_streams.rb +50 -0
- data/examples/views/lines_streams_stream.rb +51 -0
- data/examples/views/runner.sh +27 -0
- data/lib/vedeu/all.rb +6 -2
- data/lib/vedeu/application/controller.rb +1 -1
- data/lib/vedeu/boolean.rb +35 -0
- data/lib/vedeu/borders/border.rb +3 -3
- data/lib/vedeu/borders/caption.rb +1 -1
- data/lib/vedeu/borders/dsl.rb +1 -20
- data/lib/vedeu/borders/title.rb +6 -8
- data/lib/vedeu/buffers/buffer.rb +2 -2
- data/lib/vedeu/buffers/refresh.rb +1 -1
- data/lib/vedeu/cells/border.rb +0 -11
- data/lib/vedeu/cells/empty.rb +4 -4
- data/lib/vedeu/{geometries/alignment → coercers}/alignment.rb +50 -53
- data/lib/vedeu/coercers/all.rb +16 -0
- data/lib/vedeu/coercers/colour.rb +78 -0
- data/lib/vedeu/coercers/colour_attributes.rb +122 -0
- data/lib/vedeu/coercers/horizontal_alignment.rb +28 -0
- data/lib/vedeu/coercers/vertical_alignment.rb +27 -0
- data/lib/vedeu/colours/all.rb +1 -0
- data/lib/vedeu/colours/background.rb +13 -2
- data/lib/vedeu/colours/colour.rb +16 -31
- data/lib/vedeu/colours/foreground.rb +13 -2
- data/lib/vedeu/colours/translator.rb +21 -59
- data/lib/vedeu/colours/validator.rb +84 -0
- data/lib/vedeu/common.rb +52 -0
- data/lib/vedeu/configuration/api.rb +4 -10
- data/lib/vedeu/configuration/configuration.rb +4 -4
- data/lib/vedeu/cursors/coordinate.rb +1 -1
- data/lib/vedeu/cursors/cursor.rb +1 -1
- data/lib/vedeu/cursors/dsl.rb +1 -28
- data/lib/vedeu/dsl/all.rb +7 -7
- data/lib/vedeu/dsl/attributes.rb +224 -0
- data/lib/vedeu/dsl/border.rb +127 -0
- data/lib/vedeu/dsl/cursors.rb +44 -0
- data/lib/vedeu/dsl/dsl.rb +9 -0
- data/lib/vedeu/dsl/elements.rb +335 -0
- data/lib/vedeu/dsl/geometry.rb +113 -0
- data/lib/vedeu/dsl/string/align.rb +127 -0
- data/lib/vedeu/dsl/string/all.rb +14 -0
- data/lib/vedeu/dsl/string/text.rb +107 -0
- data/lib/vedeu/dsl/string/truncate.rb +111 -0
- data/lib/vedeu/{output → dsl/string}/wordwrap.rb +10 -6
- data/lib/vedeu/dsl/view.rb +124 -248
- data/lib/vedeu/dsl/views.rb +244 -0
- data/lib/vedeu/editor/cursor.rb +1 -1
- data/lib/vedeu/editor/delete.rb +3 -1
- data/lib/vedeu/editor/insert.rb +22 -6
- data/lib/vedeu/editor/line.rb +15 -9
- data/lib/vedeu/editor/lines.rb +27 -18
- data/lib/vedeu/esc/actions.rb +73 -26
- data/lib/vedeu/esc/all.rb +2 -0
- data/lib/vedeu/esc/background.rb +219 -0
- data/lib/vedeu/esc/borders.rb +72 -26
- data/lib/vedeu/esc/colours.rb +26 -27
- data/lib/vedeu/esc/esc.rb +4 -4
- data/lib/vedeu/esc/foreground.rb +219 -0
- data/lib/vedeu/esc/mouse.rb +16 -13
- data/lib/vedeu/events/aliases.rb +2 -2
- data/lib/vedeu/events/event.rb +1 -1
- data/lib/vedeu/geometries/all.rb +0 -1
- data/lib/vedeu/geometries/area/dimension.rb +2 -2
- data/lib/vedeu/geometries/dsl/dsl.rb +3 -51
- data/lib/vedeu/geometries/dsl/validator.rb +4 -4
- data/lib/vedeu/geometries/geometry.rb +10 -10
- data/lib/vedeu/geometries/move.rb +4 -4
- data/lib/vedeu/groups/dsl.rb +1 -0
- data/lib/vedeu/groups/group.rb +1 -1
- data/lib/vedeu/input/all.rb +1 -0
- data/lib/vedeu/input/capture.rb +14 -10
- data/lib/vedeu/input/dsl.rb +20 -26
- data/lib/vedeu/input/key.rb +0 -6
- data/lib/vedeu/input/keymap.rb +4 -9
- data/lib/vedeu/input/keys.rb +13 -0
- data/lib/vedeu/input/mapper.rb +29 -14
- data/lib/vedeu/input/read.rb +4 -2
- data/lib/vedeu/interfaces/dsl.rb +23 -22
- data/lib/vedeu/interfaces/interface.rb +2 -2
- data/lib/vedeu/logging/debug.rb +33 -0
- data/lib/vedeu/logging/log.rb +42 -33
- data/lib/vedeu/menus/dsl.rb +7 -18
- data/lib/vedeu/menus/menu.rb +1 -1
- data/lib/vedeu/models/focus.rb +1 -1
- data/lib/vedeu/models/toggleable.rb +4 -4
- data/lib/vedeu/null/generic.rb +2 -2
- data/lib/vedeu/output/all.rb +0 -2
- data/lib/vedeu/output/compressor_cache.rb +1 -1
- data/lib/vedeu/output/output.rb +5 -20
- data/lib/vedeu/presentation/colour.rb +39 -7
- data/lib/vedeu/presentation/style.rb +25 -11
- data/lib/vedeu/renderers/html.rb +11 -11
- data/lib/vedeu/repositories/assemblage.rb +9 -0
- data/lib/vedeu/repositories/collection.rb +1 -0
- data/lib/vedeu/repositories/defaults.rb +4 -1
- data/lib/vedeu/repositories/model.rb +7 -37
- data/lib/vedeu/repositories/parent.rb +6 -6
- data/lib/vedeu/repositories/registerable.rb +16 -2
- data/lib/vedeu/repositories/repositories.rb +1 -1
- data/lib/vedeu/repositories/repository.rb +2 -12
- data/lib/vedeu/runtime/flags.rb +1 -1
- data/lib/vedeu/terminal/terminal.rb +7 -2
- data/lib/vedeu/version.rb +1 -1
- data/lib/vedeu/views/all.rb +4 -1
- data/lib/vedeu/views/char.rb +5 -4
- data/lib/vedeu/views/chars.rb +42 -0
- data/lib/vedeu/views/composition.rb +15 -30
- data/lib/vedeu/views/default_attributes.rb +74 -0
- data/lib/vedeu/views/html_char.rb +2 -2
- data/lib/vedeu/views/line.rb +27 -53
- data/lib/vedeu/views/lines.rb +31 -0
- data/lib/vedeu/views/stream.rb +31 -78
- data/lib/vedeu/views/streams.rb +42 -0
- data/lib/vedeu/views/value.rb +150 -0
- data/lib/vedeu/views/view.rb +32 -36
- data/lib/vedeu/views/{view_collection.rb → views.rb} +2 -2
- data/test/lib/vedeu/application/application_controller_test.rb +5 -0
- data/test/lib/vedeu/application/controller_test.rb +22 -28
- data/test/lib/vedeu/boolean_test.rb +57 -0
- data/test/lib/vedeu/borders/border_test.rb +130 -36
- data/test/lib/vedeu/borders/dsl_test.rb +63 -10
- data/test/lib/vedeu/borders/title_test.rb +16 -5
- data/test/lib/vedeu/buffers/buffer_test.rb +26 -10
- data/test/lib/vedeu/buffers/empty_test.rb +1 -1
- data/test/lib/vedeu/cells/border_test.rb +0 -6
- data/test/lib/vedeu/cells/clear_test.rb +2 -0
- data/test/lib/vedeu/cells/empty_test.rb +12 -2
- data/test/lib/vedeu/cells/escape_test.rb +7 -2
- data/test/lib/vedeu/{geometries/alignment → coercers}/alignment_test.rb +44 -19
- data/test/lib/vedeu/coercers/colour_attributes_test.rb +168 -0
- data/test/lib/vedeu/coercers/colour_test.rb +75 -0
- data/test/lib/vedeu/{geometries/alignment → coercers}/horizontal_alignment_test.rb +6 -6
- data/test/lib/vedeu/{geometries/alignment → coercers}/vertical_alignment_test.rb +6 -6
- data/test/lib/vedeu/colours/background_test.rb +17 -1
- data/test/lib/vedeu/colours/colour_test.rb +74 -2
- data/test/lib/vedeu/colours/foreground_test.rb +17 -1
- data/test/lib/vedeu/colours/repository_test.rb +1 -1
- data/test/lib/vedeu/colours/translator_test.rb +8 -1
- data/test/lib/vedeu/colours/validator_test.rb +60 -0
- data/test/lib/vedeu/common_test.rb +138 -0
- data/test/lib/vedeu/configuration/api_test.rb +96 -51
- data/test/lib/vedeu/cursors/coordinate_test.rb +58 -117
- data/test/lib/vedeu/cursors/cursor_test.rb +46 -17
- data/test/lib/vedeu/cursors/dsl_test.rb +19 -5
- data/test/lib/vedeu/distributed/client_test.rb +8 -3
- data/test/lib/vedeu/distributed/server_test.rb +8 -0
- data/test/lib/vedeu/distributed/test_application_test.rb +62 -19
- data/test/lib/vedeu/distributed/uri_test.rb +4 -2
- data/test/lib/vedeu/dsl/attributes_test.rb +212 -0
- data/test/lib/vedeu/dsl/border_test.rb +51 -0
- data/test/lib/vedeu/dsl/{lines_test.rb → cursors_test.rb} +2 -2
- data/test/lib/vedeu/dsl/dsl_test.rb +44 -0
- data/test/lib/vedeu/dsl/elements_test.rb +118 -0
- data/test/lib/vedeu/dsl/geometry_test.rb +35 -0
- data/test/lib/vedeu/dsl/presentation_test.rb +52 -11
- data/test/lib/vedeu/dsl/string/align_test.rb +147 -0
- data/test/lib/vedeu/dsl/string/text_test.rb +213 -0
- data/test/lib/vedeu/dsl/string/truncate_test.rb +97 -0
- data/test/lib/vedeu/{output → dsl/string}/wordwrap_test.rb +3 -3
- data/test/lib/vedeu/dsl/view_test.rb +30 -42
- data/test/lib/vedeu/dsl/views_test.rb +61 -0
- data/test/lib/vedeu/editor/cursor_test.rb +30 -12
- data/test/lib/vedeu/editor/document_test.rb +18 -10
- data/test/lib/vedeu/editor/line_test.rb +4 -1
- data/test/lib/vedeu/editor/lines_test.rb +11 -3
- data/test/lib/vedeu/esc/actions_test.rb +42 -4
- data/test/lib/vedeu/esc/background_test.rb +185 -0
- data/test/lib/vedeu/esc/borders_test.rb +37 -9
- data/test/lib/vedeu/esc/colours_test.rb +0 -59
- data/test/lib/vedeu/esc/foreground_test.rb +185 -0
- data/test/lib/vedeu/esc/mouse_test.rb +9 -4
- data/test/lib/vedeu/geometries/area/area_test.rb +34 -11
- data/test/lib/vedeu/geometries/dsl/dsl_test.rb +52 -61
- data/test/lib/vedeu/geometries/geometry_test.rb +62 -18
- data/test/lib/vedeu/geometries/position_test.rb +14 -7
- data/test/lib/vedeu/groups/dsl_test.rb +24 -15
- data/test/lib/vedeu/groups/group_test.rb +18 -8
- data/test/lib/vedeu/input/dsl_test.rb +33 -16
- data/test/lib/vedeu/input/key_test.rb +8 -1
- data/test/lib/vedeu/input/keymap_test.rb +4 -1
- data/test/lib/vedeu/input/keys_test.rb +16 -0
- data/test/lib/vedeu/interfaces/dsl_test.rb +24 -30
- data/test/lib/vedeu/interfaces/interface_test.rb +79 -24
- data/test/lib/vedeu/logging/ips_test.rb +10 -1
- data/test/lib/vedeu/menus/dsl_test.rb +24 -23
- data/test/lib/vedeu/menus/menu_test.rb +18 -8
- data/test/lib/vedeu/models/page_test.rb +5 -1
- data/test/lib/vedeu/models/row_test.rb +4 -0
- data/test/lib/vedeu/models/toggleable_test.rb +10 -6
- data/test/lib/vedeu/null/generic_test.rb +90 -1
- data/test/lib/vedeu/output/viewport_test.rb +11 -10
- data/test/lib/vedeu/plugins/plugin_test.rb +22 -9
- data/test/lib/vedeu/presentation/colour_test.rb +2 -1
- data/test/lib/vedeu/presentation/presentation_test.rb +13 -8
- data/test/lib/vedeu/presentation/style_test.rb +28 -13
- data/test/lib/vedeu/renderers/file_test.rb +4 -2
- data/test/lib/vedeu/renderers/options_test.rb +1 -1
- data/test/lib/vedeu/repositories/assemblage_test.rb +18 -0
- data/test/lib/vedeu/repositories/collection_test.rb +34 -10
- data/test/lib/vedeu/repositories/defaults_test.rb +6 -0
- data/test/lib/vedeu/repositories/model_test.rb +4 -13
- data/test/lib/vedeu/repositories/repository_test.rb +12 -5
- data/test/lib/vedeu/repositories/store_test.rb +9 -0
- data/test/lib/vedeu/runtime/flags_test.rb +6 -4
- data/test/lib/vedeu/runtime/launcher_test.rb +1 -1
- data/test/lib/vedeu/templating/helpers_test.rb +93 -65
- data/test/lib/vedeu/templating/view_template_test.rb +26 -26
- data/test/lib/vedeu/views/char_test.rb +36 -11
- data/test/lib/vedeu/views/chars_test.rb +71 -0
- data/test/lib/vedeu/views/composition_test.rb +17 -16
- data/test/lib/vedeu/views/default_attributes_test.rb +97 -0
- data/test/lib/vedeu/views/line_test.rb +20 -75
- data/test/lib/vedeu/views/lines_test.rb +47 -0
- data/test/lib/vedeu/views/stream_test.rb +38 -63
- data/test/lib/vedeu/views/streams_test.rb +9 -0
- data/test/lib/vedeu/views/value_test.rb +112 -0
- data/test/lib/vedeu/views/view_test.rb +67 -45
- data/test/lib/vedeu/views/views_test.rb +22 -0
- data/test/support/examples/material_colours_app.rb +2 -2
- data/test/support/helpers/model_test_class.rb +1 -0
- data/test/test_helper.rb +3 -1
- data/vedeu.gemspec +2 -2
- metadata +124 -58
- data/lib/vedeu/dsl/composition.rb +0 -150
- data/lib/vedeu/dsl/line.rb +0 -119
- data/lib/vedeu/dsl/lines.rb +0 -23
- data/lib/vedeu/dsl/shared.rb +0 -85
- data/lib/vedeu/dsl/stream.rb +0 -40
- data/lib/vedeu/dsl/streams.rb +0 -23
- data/lib/vedeu/dsl/text.rb +0 -98
- data/lib/vedeu/geometries/alignment/all.rb +0 -11
- data/lib/vedeu/geometries/alignment/horizontal_alignment.rb +0 -27
- data/lib/vedeu/geometries/alignment/vertical_alignment.rb +0 -27
- data/lib/vedeu/output/text.rb +0 -275
- data/test/lib/vedeu/dsl/composition_test.rb +0 -67
- data/test/lib/vedeu/dsl/line_test.rb +0 -85
- data/test/lib/vedeu/dsl/shared_test.rb +0 -66
- data/test/lib/vedeu/dsl/stream_test.rb +0 -30
- data/test/lib/vedeu/dsl/streams_test.rb +0 -13
- data/test/lib/vedeu/dsl/text_test.rb +0 -122
- data/test/lib/vedeu/output/text_test.rb +0 -156
- data/test/lib/vedeu/views/view_collection_test.rb +0 -13
| @@ -0,0 +1,35 @@ | |
| 1 | 
            +
            module Vedeu
         | 
| 2 | 
            +
             | 
| 3 | 
            +
              # Represent a boolean object.
         | 
| 4 | 
            +
              #
         | 
| 5 | 
            +
              # @api private
         | 
| 6 | 
            +
              #
         | 
| 7 | 
            +
              class Boolean
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                # @param value [void]
         | 
| 10 | 
            +
                # @return [Vedeu::Boolean]
         | 
| 11 | 
            +
                def initialize(value = nil)
         | 
| 12 | 
            +
                  @value = value
         | 
| 13 | 
            +
                end
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                # @return [Boolean]
         | 
| 16 | 
            +
                def false?
         | 
| 17 | 
            +
                  value.nil? || value == false
         | 
| 18 | 
            +
                end
         | 
| 19 | 
            +
             | 
| 20 | 
            +
                # @return [Boolean]
         | 
| 21 | 
            +
                def true?
         | 
| 22 | 
            +
                  return false if false?
         | 
| 23 | 
            +
             | 
| 24 | 
            +
                  true
         | 
| 25 | 
            +
                end
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                private
         | 
| 28 | 
            +
             | 
| 29 | 
            +
                # @!attribute [r] value
         | 
| 30 | 
            +
                # @return [void]
         | 
| 31 | 
            +
                attr_reader :value
         | 
| 32 | 
            +
             | 
| 33 | 
            +
              end # Boolean
         | 
| 34 | 
            +
             | 
| 35 | 
            +
            end # Vedeu
         | 
    
        data/lib/vedeu/borders/border.rb
    CHANGED
    
    | @@ -296,13 +296,13 @@ module Vedeu | |
| 296 296 | 
             
                      bottom_horizontal: nil,
         | 
| 297 297 | 
             
                      bottom_left:       nil,
         | 
| 298 298 | 
             
                      bottom_right:      nil,
         | 
| 299 | 
            -
                      caption:           '',
         | 
| 299 | 
            +
                      caption:           ''.freeze,
         | 
| 300 300 | 
             
                      client:            nil,
         | 
| 301 301 | 
             
                      colour:            nil,
         | 
| 302 302 | 
             
                      enabled:           false,
         | 
| 303 303 | 
             
                      horizontal:        Vedeu::EscapeSequences::Borders.horizontal,
         | 
| 304 304 | 
             
                      left_vertical:     nil,
         | 
| 305 | 
            -
                      name:              '',
         | 
| 305 | 
            +
                      name:              ''.freeze,
         | 
| 306 306 | 
             
                      parent:            nil,
         | 
| 307 307 | 
             
                      repository:        Vedeu.borders,
         | 
| 308 308 | 
             
                      right_vertical:    nil,
         | 
| @@ -311,7 +311,7 @@ module Vedeu | |
| 311 311 | 
             
                      show_right:        true,
         | 
| 312 312 | 
             
                      show_top:          true,
         | 
| 313 313 | 
             
                      style:             nil,
         | 
| 314 | 
            -
                      title:             '',
         | 
| 314 | 
            +
                      title:             ''.freeze,
         | 
| 315 315 | 
             
                      top_horizontal:    nil,
         | 
| 316 316 | 
             
                      top_left:          nil,
         | 
| 317 317 | 
             
                      top_right:         nil,
         | 
    
        data/lib/vedeu/borders/dsl.rb
    CHANGED
    
    | @@ -7,29 +7,10 @@ module Vedeu | |
| 7 7 | 
             
                class DSL
         | 
| 8 8 |  | 
| 9 9 | 
             
                  include Vedeu::DSL
         | 
| 10 | 
            +
                  include Vedeu::DSL::Border
         | 
| 10 11 | 
             
                  include Vedeu::DSL::Presentation
         | 
| 11 12 | 
             
                  include Vedeu::DSL::Use
         | 
| 12 13 |  | 
| 13 | 
            -
                  # Specify the border of an interface or view with a simple DSL.
         | 
| 14 | 
            -
                  #
         | 
| 15 | 
            -
                  #   Vedeu.border :some_interface do
         | 
| 16 | 
            -
                  #     # ...
         | 
| 17 | 
            -
                  #   end
         | 
| 18 | 
            -
                  #
         | 
| 19 | 
            -
                  # @param name [String|Symbol] The name of the interface or view
         | 
| 20 | 
            -
                  #   to which this border belongs.
         | 
| 21 | 
            -
                  # @param block [Proc]
         | 
| 22 | 
            -
                  # @raise [Vedeu::Error::MissingRequired|
         | 
| 23 | 
            -
                  #   Vedeu::Error::RequiresBlock] When a name or block
         | 
| 24 | 
            -
                  #   respectively are not given.
         | 
| 25 | 
            -
                  # @return [Vedeu::Borders::Border]
         | 
| 26 | 
            -
                  def self.border(name, &block)
         | 
| 27 | 
            -
                    fail Vedeu::Error::MissingRequired unless name
         | 
| 28 | 
            -
                    fail Vedeu::Error::RequiresBlock unless block_given?
         | 
| 29 | 
            -
             | 
| 30 | 
            -
                    Vedeu::Borders::Border.build(enabled: true, name: name, &block).store
         | 
| 31 | 
            -
                  end
         | 
| 32 | 
            -
             | 
| 33 14 | 
             
                  # Set the character to be used to draw the bottom left corner of
         | 
| 34 15 | 
             
                  # the border.
         | 
| 35 16 | 
             
                  #
         | 
    
        data/lib/vedeu/borders/title.rb
    CHANGED
    
    | @@ -67,7 +67,7 @@ module Vedeu | |
| 67 67 | 
             
                  #
         | 
| 68 68 | 
             
                  # @return [String]
         | 
| 69 69 | 
             
                  def value
         | 
| 70 | 
            -
                    @value || ''
         | 
| 70 | 
            +
                    @value || ''.freeze
         | 
| 71 71 | 
             
                  end
         | 
| 72 72 | 
             
                  alias_method :title, :value
         | 
| 73 73 | 
             
                  alias_method :caption, :value
         | 
| @@ -89,10 +89,8 @@ module Vedeu | |
| 89 89 | 
             
                  # @param x [Fixnum]
         | 
| 90 90 | 
             
                  # @return [Hash<Symbol => void>]
         | 
| 91 91 | 
             
                  def attributes(char, x)
         | 
| 92 | 
            -
                     | 
| 93 | 
            -
             | 
| 94 | 
            -
                    @_attributes.merge!(position: Vedeu::Geometries::Position.new(y, x),
         | 
| 95 | 
            -
                                        value:    char)
         | 
| 92 | 
            +
                    border.attributes.merge(position: Vedeu::Geometries::Position.new(y, x),
         | 
| 93 | 
            +
                                            value:    char)
         | 
| 96 94 | 
             
                  end
         | 
| 97 95 |  | 
| 98 96 | 
             
                  # @return [Vedeu::Borders::Border]
         | 
| @@ -169,7 +167,7 @@ module Vedeu | |
| 169 167 | 
             
                  #
         | 
| 170 168 | 
             
                  # @return [String]
         | 
| 171 169 | 
             
                  def truncate
         | 
| 172 | 
            -
                     | 
| 170 | 
            +
                    value.chomp.slice(0...(width - 4))
         | 
| 173 171 | 
             
                  end
         | 
| 174 172 |  | 
| 175 173 | 
             
                  # Return the size of the horizontal border given.
         | 
| @@ -181,12 +179,12 @@ module Vedeu | |
| 181 179 |  | 
| 182 180 | 
             
                  # @return [Fixnum]
         | 
| 183 181 | 
             
                  def x
         | 
| 184 | 
            -
                     | 
| 182 | 
            +
                    geometry.bx + start_index
         | 
| 185 183 | 
             
                  end
         | 
| 186 184 |  | 
| 187 185 | 
             
                  # @return [Fixnum]
         | 
| 188 186 | 
             
                  def y
         | 
| 189 | 
            -
                     | 
| 187 | 
            +
                    geometry.y
         | 
| 190 188 | 
             
                  end
         | 
| 191 189 |  | 
| 192 190 | 
             
                end # Title
         | 
    
        data/lib/vedeu/buffers/buffer.rb
    CHANGED
    
    | @@ -176,7 +176,7 @@ module Vedeu | |
| 176 176 | 
             
                    {
         | 
| 177 177 | 
             
                      back:       nil,
         | 
| 178 178 | 
             
                      front:      nil,
         | 
| 179 | 
            -
                      name:       '',
         | 
| 179 | 
            +
                      name:       ''.freeze,
         | 
| 180 180 | 
             
                      previous:   nil,
         | 
| 181 181 | 
             
                      repository: Vedeu.buffers,
         | 
| 182 182 | 
             
                    }
         | 
| @@ -192,7 +192,7 @@ module Vedeu | |
| 192 192 | 
             
                  #
         | 
| 193 193 | 
             
                  # @return [Boolean]
         | 
| 194 194 | 
             
                  def swap
         | 
| 195 | 
            -
                    Vedeu.log(type: : | 
| 195 | 
            +
                    Vedeu.log(type: :buffer, message: "Buffer swapping: '#{name}'".freeze)
         | 
| 196 196 |  | 
| 197 197 | 
             
                    @previous = front
         | 
| 198 198 | 
             
                    @front    = back
         | 
    
        data/lib/vedeu/cells/border.rb
    CHANGED
    
    | @@ -40,17 +40,6 @@ module Vedeu | |
| 40 40 | 
             
                    self
         | 
| 41 41 | 
             
                  end
         | 
| 42 42 |  | 
| 43 | 
            -
                  # @return [Vedeu::Borders::Border|Vedeu::Interfaces::Interface]
         | 
| 44 | 
            -
                  def named_parent
         | 
| 45 | 
            -
                    if border
         | 
| 46 | 
            -
                      border
         | 
| 47 | 
            -
             | 
| 48 | 
            -
                    elsif interface
         | 
| 49 | 
            -
                      interface
         | 
| 50 | 
            -
             | 
| 51 | 
            -
                    end
         | 
| 52 | 
            -
                  end
         | 
| 53 | 
            -
             | 
| 54 43 | 
             
                  # @return [String]
         | 
| 55 44 | 
             
                  def value
         | 
| 56 45 | 
             
                    return '' unless present?(@value)
         | 
    
        data/lib/vedeu/cells/empty.rb
    CHANGED
    
    | @@ -60,7 +60,7 @@ module Vedeu | |
| 60 60 | 
             
                  # @param _options [Hash] Ignored.
         | 
| 61 61 | 
             
                  # @return [String]
         | 
| 62 62 | 
             
                  def to_html(_options = {})
         | 
| 63 | 
            -
                    ''
         | 
| 63 | 
            +
                    ''.freeze
         | 
| 64 64 | 
             
                  end
         | 
| 65 65 |  | 
| 66 66 | 
             
                  # @return [String]
         | 
| @@ -75,10 +75,10 @@ module Vedeu | |
| 75 75 | 
             
                  def defaults
         | 
| 76 76 | 
             
                    {
         | 
| 77 77 | 
             
                      colour:   {},
         | 
| 78 | 
            -
                      name:     '',
         | 
| 78 | 
            +
                      name:     ''.freeze,
         | 
| 79 79 | 
             
                      position: nil,
         | 
| 80 | 
            -
                      style:    '',
         | 
| 81 | 
            -
                      value:    '',
         | 
| 80 | 
            +
                      style:    ''.freeze,
         | 
| 81 | 
            +
                      value:    ''.freeze,
         | 
| 82 82 | 
             
                    }
         | 
| 83 83 | 
             
                  end
         | 
| 84 84 |  | 
| @@ -1,52 +1,51 @@ | |
| 1 1 | 
             
            module Vedeu
         | 
| 2 2 |  | 
| 3 | 
            -
              module  | 
| 3 | 
            +
              module Coercers
         | 
| 4 4 |  | 
| 5 5 | 
             
                # The subclasses of this class, HorizontalAlignment and
         | 
| 6 | 
            -
                # VerticalAlignment provide the mechanism to  | 
| 7 | 
            -
                #  | 
| 8 | 
            -
                # space.
         | 
| 6 | 
            +
                # VerticalAlignment provide the mechanism to validate a horizontal
         | 
| 7 | 
            +
                # or vertical alignment value.
         | 
| 9 8 | 
             
                #
         | 
| 10 | 
            -
                # @see Vedeu:: | 
| 11 | 
            -
                # @see Vedeu:: | 
| 9 | 
            +
                # @see Vedeu::Coercers::HorizontalAlignment
         | 
| 10 | 
            +
                # @see Vedeu::Coercers::VerticalAlignment
         | 
| 12 11 | 
             
                #
         | 
| 13 12 | 
             
                # @api private
         | 
| 14 13 | 
             
                #
         | 
| 15 14 | 
             
                class Alignment
         | 
| 16 15 |  | 
| 17 | 
            -
                   | 
| 18 | 
            -
                  # @return (see #align)
         | 
| 19 | 
            -
                  def self.align(value = nil)
         | 
| 20 | 
            -
                    new(value).align
         | 
| 21 | 
            -
                  end
         | 
| 22 | 
            -
             | 
| 23 | 
            -
                  # @param value [NilClass|Symbol|Vedeu::Geometries::Alignment]
         | 
| 24 | 
            -
                  # @return [Vedeu::Geometries::Alignment]
         | 
| 25 | 
            -
                  def self.coerce(value = nil)
         | 
| 26 | 
            -
                    if value.is_a?(self)
         | 
| 27 | 
            -
                      value
         | 
| 16 | 
            +
                  include Vedeu::Common
         | 
| 28 17 |  | 
| 29 | 
            -
             | 
| 30 | 
            -
             | 
| 18 | 
            +
                  # @!attribute [r] value
         | 
| 19 | 
            +
                  # @return [Symbol]
         | 
| 20 | 
            +
                  attr_reader :value
         | 
| 31 21 |  | 
| 32 | 
            -
             | 
| 33 | 
            -
             | 
| 22 | 
            +
                  # @param value [Symbol|Vedeu::Coercers::Alignment]
         | 
| 23 | 
            +
                  # @return [Vedeu::Coercers::Alignment]
         | 
| 24 | 
            +
                  def self.coerce(value = :none)
         | 
| 25 | 
            +
                    return value if value.is_a?(self)
         | 
| 34 26 |  | 
| 35 | 
            -
                     | 
| 27 | 
            +
                    new(value).coerce
         | 
| 36 28 | 
             
                  end
         | 
| 37 29 |  | 
| 38 | 
            -
                  # Returns a new instance of Vedeu:: | 
| 30 | 
            +
                  # Returns a new instance of Vedeu::Coercers::Alignment.
         | 
| 39 31 | 
             
                  #
         | 
| 40 | 
            -
                  # @param value [ | 
| 41 | 
            -
                  # @return [Vedeu:: | 
| 42 | 
            -
                  def initialize(value =  | 
| 43 | 
            -
                    @value = value
         | 
| 32 | 
            +
                  # @param value [Symbol]
         | 
| 33 | 
            +
                  # @return [Vedeu::Coercers::Alignment]
         | 
| 34 | 
            +
                  def initialize(value = :none)
         | 
| 35 | 
            +
                    @value = value || :none
         | 
| 44 36 | 
             
                  end
         | 
| 45 37 |  | 
| 46 | 
            -
                  # @ | 
| 47 | 
            -
                   | 
| 48 | 
            -
             | 
| 49 | 
            -
             | 
| 38 | 
            +
                  # @return [Symbol]
         | 
| 39 | 
            +
                  def coerce
         | 
| 40 | 
            +
                    if value == :center
         | 
| 41 | 
            +
                      @value = :centre
         | 
| 42 | 
            +
             | 
| 43 | 
            +
                    elsif invalid?
         | 
| 44 | 
            +
                      @value = :none
         | 
| 45 | 
            +
             | 
| 46 | 
            +
                    end
         | 
| 47 | 
            +
             | 
| 48 | 
            +
                    self
         | 
| 50 49 | 
             
                  end
         | 
| 51 50 |  | 
| 52 51 | 
             
                  # Return a boolean indicating alignment was set to :bottom.
         | 
| @@ -63,6 +62,20 @@ module Vedeu | |
| 63 62 | 
             
                    value == :centre
         | 
| 64 63 | 
             
                  end
         | 
| 65 64 |  | 
| 65 | 
            +
                  # An object is equal when its values are the same.
         | 
| 66 | 
            +
                  #
         | 
| 67 | 
            +
                  # @param other [void]
         | 
| 68 | 
            +
                  # @return [Boolean]
         | 
| 69 | 
            +
                  def eql?(other)
         | 
| 70 | 
            +
                    self.class == other.class && value == other.value
         | 
| 71 | 
            +
                  end
         | 
| 72 | 
            +
                  alias_method :==, :eql?
         | 
| 73 | 
            +
             | 
| 74 | 
            +
                  # @return [Boolean]
         | 
| 75 | 
            +
                  def invalid?
         | 
| 76 | 
            +
                    !valid?
         | 
| 77 | 
            +
                  end
         | 
| 78 | 
            +
             | 
| 66 79 | 
             
                  # Return a boolean indicating alignment was set to :left.
         | 
| 67 80 | 
             
                  #
         | 
| 68 81 | 
             
                  # @return [Boolean]
         | 
| @@ -98,37 +111,21 @@ module Vedeu | |
| 98 111 | 
             
                    value == :none
         | 
| 99 112 | 
             
                  end
         | 
| 100 113 |  | 
| 101 | 
            -
                   | 
| 102 | 
            -
             | 
| 103 | 
            -
                  # @return [Boolean]
         | 
| 104 | 
            -
                  def none?
         | 
| 105 | 
            -
                    @value == :none || @value.nil? || !(@value.is_a?(Symbol))
         | 
| 106 | 
            -
                  end
         | 
| 107 | 
            -
             | 
| 114 | 
            +
                  # Return a boolean indicating the value is a valid alignment.
         | 
| 115 | 
            +
                  #
         | 
| 108 116 | 
             
                  # @return [Boolean]
         | 
| 109 117 | 
             
                  def valid?
         | 
| 110 | 
            -
                    values.include?(value)
         | 
| 118 | 
            +
                    present?(value) && value.is_a?(Symbol) && values.include?(value)
         | 
| 111 119 | 
             
                  end
         | 
| 112 120 |  | 
| 113 | 
            -
                   | 
| 114 | 
            -
                  def value
         | 
| 115 | 
            -
                    @_value ||= if none?
         | 
| 116 | 
            -
                                  :none
         | 
| 117 | 
            -
             | 
| 118 | 
            -
                                elsif @value == :center
         | 
| 119 | 
            -
                                  :centre
         | 
| 120 | 
            -
             | 
| 121 | 
            -
                                else
         | 
| 122 | 
            -
                                  @value.to_sym
         | 
| 123 | 
            -
             | 
| 124 | 
            -
                                end
         | 
| 125 | 
            -
                  end
         | 
| 121 | 
            +
                  private
         | 
| 126 122 |  | 
| 127 123 | 
             
                  # @return [Array<Symbol>]
         | 
| 128 124 | 
             
                  def values
         | 
| 129 125 | 
             
                    [
         | 
| 130 126 | 
             
                      :bottom,
         | 
| 131 127 | 
             
                      :centre,
         | 
| 128 | 
            +
                      :center,
         | 
| 132 129 | 
             
                      :left,
         | 
| 133 130 | 
             
                      :middle,
         | 
| 134 131 | 
             
                      :none,
         | 
| @@ -139,6 +136,6 @@ module Vedeu | |
| 139 136 |  | 
| 140 137 | 
             
                end # Alignment
         | 
| 141 138 |  | 
| 142 | 
            -
              end #  | 
| 139 | 
            +
              end # Coercers
         | 
| 143 140 |  | 
| 144 141 | 
             
            end # Vedeu
         | 
| @@ -0,0 +1,16 @@ | |
| 1 | 
            +
            module Vedeu
         | 
| 2 | 
            +
             | 
| 3 | 
            +
              # Provides a mechanism to coerce values within Vedeu.
         | 
| 4 | 
            +
              #
         | 
| 5 | 
            +
              module Coercers
         | 
| 6 | 
            +
             | 
| 7 | 
            +
              end # Coercers
         | 
| 8 | 
            +
             | 
| 9 | 
            +
            end # Vedeu
         | 
| 10 | 
            +
             | 
| 11 | 
            +
            require 'vedeu/coercers/alignment'
         | 
| 12 | 
            +
            require 'vedeu/coercers/horizontal_alignment'
         | 
| 13 | 
            +
            require 'vedeu/coercers/vertical_alignment'
         | 
| 14 | 
            +
             | 
| 15 | 
            +
            require 'vedeu/coercers/colour'
         | 
| 16 | 
            +
            require 'vedeu/coercers/colour_attributes'
         | 
| @@ -0,0 +1,78 @@ | |
| 1 | 
            +
            module Vedeu
         | 
| 2 | 
            +
             | 
| 3 | 
            +
              module Coercers
         | 
| 4 | 
            +
             | 
| 5 | 
            +
                # Converts a given value into a {Vedeu::Colours::Colour} if
         | 
| 6 | 
            +
                # possible.
         | 
| 7 | 
            +
                #
         | 
| 8 | 
            +
                # @api private
         | 
| 9 | 
            +
                #
         | 
| 10 | 
            +
                class Colour
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                  include Vedeu::Common
         | 
| 13 | 
            +
             | 
| 14 | 
            +
                  # @param (see #initialize)
         | 
| 15 | 
            +
                  # @return (see #coerce)
         | 
| 16 | 
            +
                  def self.coerce(value)
         | 
| 17 | 
            +
                    new(value).coerce
         | 
| 18 | 
            +
                  end
         | 
| 19 | 
            +
             | 
| 20 | 
            +
                  # @param value [void]
         | 
| 21 | 
            +
                  # @return [Vedeu::Coercers::Colour]
         | 
| 22 | 
            +
                  def initialize(value)
         | 
| 23 | 
            +
                    @value = value
         | 
| 24 | 
            +
                  end
         | 
| 25 | 
            +
             | 
| 26 | 
            +
                  # @raise [Vedeu::Error::Fatal] When the value cannot be coerced.
         | 
| 27 | 
            +
                  # @return [void]
         | 
| 28 | 
            +
                  def coerce
         | 
| 29 | 
            +
                    if absent?(value)
         | 
| 30 | 
            +
                      Vedeu::Colours::Colour.new
         | 
| 31 | 
            +
             | 
| 32 | 
            +
                    elsif background?
         | 
| 33 | 
            +
                      Vedeu::Colours::Colour.new(background: value)
         | 
| 34 | 
            +
             | 
| 35 | 
            +
                    elsif colour?
         | 
| 36 | 
            +
                      value
         | 
| 37 | 
            +
             | 
| 38 | 
            +
                    elsif foreground?
         | 
| 39 | 
            +
                      Vedeu::Colours::Colour.new(foreground: value)
         | 
| 40 | 
            +
             | 
| 41 | 
            +
                    elsif hash?(value)
         | 
| 42 | 
            +
                      attributes = Vedeu::Coercers::ColourAttributes.coerce(value)
         | 
| 43 | 
            +
                      Vedeu::Colours::Colour.new(attributes)
         | 
| 44 | 
            +
             | 
| 45 | 
            +
                    else
         | 
| 46 | 
            +
                      fail Vedeu::Error::Fatal, 'Vedeu cannot coerce this colour.'.freeze
         | 
| 47 | 
            +
             | 
| 48 | 
            +
                    end
         | 
| 49 | 
            +
                  end
         | 
| 50 | 
            +
             | 
| 51 | 
            +
                  protected
         | 
| 52 | 
            +
             | 
| 53 | 
            +
                  # @!attribute [r] value
         | 
| 54 | 
            +
                  # @return [void]
         | 
| 55 | 
            +
                  attr_reader :value
         | 
| 56 | 
            +
             | 
| 57 | 
            +
                  private
         | 
| 58 | 
            +
             | 
| 59 | 
            +
                  # @return [Boolean]
         | 
| 60 | 
            +
                  def background?
         | 
| 61 | 
            +
                    value.is_a?(Vedeu::Colours::Background)
         | 
| 62 | 
            +
                  end
         | 
| 63 | 
            +
             | 
| 64 | 
            +
                  # @return [Boolean]
         | 
| 65 | 
            +
                  def colour?
         | 
| 66 | 
            +
                    value.is_a?(Vedeu::Colours::Colour)
         | 
| 67 | 
            +
                  end
         | 
| 68 | 
            +
             | 
| 69 | 
            +
                  # @return [Boolean]
         | 
| 70 | 
            +
                  def foreground?
         | 
| 71 | 
            +
                    value.is_a?(Vedeu::Colours::Foreground)
         | 
| 72 | 
            +
                  end
         | 
| 73 | 
            +
             | 
| 74 | 
            +
                end # Colour
         | 
| 75 | 
            +
             | 
| 76 | 
            +
              end # Coercers
         | 
| 77 | 
            +
             | 
| 78 | 
            +
            end # Vedeu
         |