module Psychgus::Blueberry

This is the OOP way to style your classes/modules/etc.

Even though it's unnecessary to mix in (include) this module, it's recommended because new methods may be added in the future, so this pseudo-guarantees your class won't break in a new version.

A complete example:

require 'psychgus'

class MyClass
  include Psychgus::Blueberry

  attr_reader :my_hash

  def initialize()
    @my_hash = {:key1=>'val1',:key2=>'val2'}
  end

  def psychgus_stylers(sniffer)
    return MyClassStyler.new(sniffer)
  end
end

class MyClassStyler
  include Psychgus::Styler

  def initialize(sniffer)
    @level = sniffer.level
  end

  def style_mapping(sniffer,node)
    node.style = Psychgus::MAPPING_FLOW

    relative_level = sniffer.level - @level
  end
end

my_class = MyClass.new()
puts my_class.to_yaml()

Alternatively, MyClass could have been the {Blueberry} and the {Styler}, without the need for MyClassStyler:

class MyClass
  include Psychgus::Blueberry
  include Psychgus::Styler

  # ...

  def psychgus_stylers(sniffer)
    @level = sniffer.level # This will be included in the output of to_yaml()

    return self
  end

  def style_mapping(sniffer,node)
    # ...
  end
end

However, it's best to put the styling logic inside of a separate class (or inner class) away from the main logic. This also prevents extra helper vars, like @level, from showing up in the output.

After your class and its children have been processed, the styler(s) will be removed from the logic for the next sibling object(s). Therefore, you can safely do class-specific checks on level, etc. without it affecting the sibling object(s). See {Ext::YAMLTreeExt} and {Ext::YAMLTreeExt#accept} for details.

“The Blueberry” is the name of Gus's car from the TV show Psych.

@author Jonathan Bradley Whited @since 1.0.0

@see Ext::YAMLTreeExt @see Ext::YAMLTreeExt#accept

Public Instance Methods

psychgus_stylers(sniffer) click to toggle source

Duck Type this method to return the {Styler}(s) for your class/module/etc.

@param sniffer [SuperSniffer] passed in from {StyledTreeBuilder}; use this for storing the level,

position, etc. for styling your instance variables later relative to your
class/module/etc.

@return [Styler,Array<Styler>,nil] {Styler}(s) for this class/module/etc.

# File lib/psychgus/blueberry.rb, line 95
def psychgus_stylers(sniffer)
  return nil
end