Sha256: 2bf9385f55d8803037016f70d866924b9d94e0a91bb1946559f786ab4563b2f3

Contents?: true

Size: 959 Bytes

Versions: 7

Compression:

Stored size: 959 Bytes

Contents

module Yoda
  module Store
    module Objects
      module Serializable
        module ClassMethods
          def json_creatable?
            true
          end

          # @param params [Hash]
          def json_create(params)
            new(params.reject { |k, _v| k.to_sym == :json_class }.map { |k, v| [k.to_sym, v] }.to_h)
          end
        end

        def self.included(klass)
          klass.extend(ClassMethods)
        end

        # @abstract
        # @return [Hash]
        def to_h
          fail NotImplementedError
        end

        # @return [String]
        def to_json(*options)
          to_h.merge(json_class: self.class.name).to_json
        end

        # Create a new instance which has the original parameters and overrided parameters.
        # @param params [Hash{Symbol => Object}] parameters to override
        def derive(params = {})
          self.class.new(to_h.merge(params))
        end
      end
    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
yoda-language-server-0.7.2 lib/yoda/store/objects/serializable.rb
yoda-language-server-0.7.1 lib/yoda/store/objects/serializable.rb
yoda-language-server-0.7.0 lib/yoda/store/objects/serializable.rb
yoda-language-server-0.6.2 lib/yoda/store/objects/serializable.rb
yoda-language-server-0.6.1 lib/yoda/store/objects/serializable.rb
yoda-language-server-0.6.0 lib/yoda/store/objects/serializable.rb
yoda-language-server-0.5.0 lib/yoda/store/objects/serializable.rb