Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
messaging / lib / messaging / message.rb
Size: Mime:
module Messaging
  module Message
    def self.included(cls)
      cls.class_exec do
        include Schema::DataStructure
      end

      cls.extend Info
      cls.extend Build
      cls.extend Copy
      cls.extend Follow
      cls.extend Transformer
    end

    attr_writer :metadata
    def metadata
      @metadata ||= Metadata.new
    end

    def message_type
      self.class.message_type
    end

    def message_name
      self.class.message_name
    end

    def follows?(other_message)
      metadata.follows?(other_message.metadata)
    end

    module Info
      extend self

      def message_type(msg=self)
        class_name(msg).split('::').last
      end

      def message_name(msg=self)
        Info.canonize_name(message_type(msg))
      end

      def self.canonize_name(name)
        name.gsub(/([^\^])([A-Z])/,'\1_\2').downcase
      end

      def class_name(message)
        class_name = nil
        class_name = message if message.instance_of? String
        class_name ||= message.name if message.instance_of? Class
        class_name ||= message.class.name
        class_name
      end
    end

    module Build
      def build(data=nil, metadata=nil)
        data ||= {}
        metadata ||= {}

        metadata = build_metadata(metadata)

        new.tap do |instance|
          set_attributes(instance, data)
          instance.metadata = metadata
        end
      end

      def set_attributes(instance, data)
        SetAttributes.(instance, data)
      end

      def build_metadata(metadata)
        if metadata.nil?
          Metadata.new
        else
          Metadata.build(metadata.to_h)
        end
      end
    end
  end
end