Sha256: 3b94333c63dff64c9b71108bfbad556daf3a804018c968794d0d6d94e2e09e9b

Contents?: true

Size: 1.49 KB

Versions: 11

Compression:

Stored size: 1.49 KB

Contents

module TwirpRails
  module ActiveRecordExtension
    extend ActiveSupport::Concern

    class_methods do
      # Using to set twirp class used by to_twirp method
      # @example
      # twirp_message TwirpModel
      def twirp_message(message_class)
        @twirp_message = message_class
      end

      def twirp_message_class
        @twirp_message = @twirp_message.constantize if @twirp_message.is_a?(String)

        @twirp_message
      end

      def to_twirp(*args)
        all.map { |entity| entity.to_twirp(*args) }
      end
    end

    # Converts to twirp hash,
    # @return [Hash] of attributes
    # used by relation method to_twirp
    # @param [Array|Class] fields_or_class - array of converted fields or message class to
    def to_twirp(*fields_or_class)
      fields = fields_or_class
      result = attributes

      if fields.empty? && self.class.twirp_message_class
        fields = [self.class.twirp_message_class]
      end

      if fields.one? && fields.first.is_a?(Class)
        message_class = fields.first

        unless message_class.respond_to?(:descriptor)
          raise "Class #{message_class} must me a protobuf message class"
        end

        # TODO performance optimization needed
        fields = message_class.descriptor.map &:name

        result = result.slice(*fields)
      elsif fields.any?
        result = result.slice(*fields)
      end

      result
    end
  end
end

if defined? ActiveRecord::Base
  ActiveRecord::Base.include TwirpRails::ActiveRecordExtension
end

Version data entries

11 entries across 11 versions & 1 rubygems

Version Path
twirp_rails-0.4.1 lib/twirp_rails/active_record_extension.rb
twirp_rails-0.4.0 lib/twirp_rails/active_record_extension.rb
twirp_rails-0.3.2 lib/twirp_rails/active_record_extension.rb
twirp_rails-0.3.1 lib/twirp_rails/active_record_extension.rb
twirp_rails-0.3.0 lib/twirp_rails/active_record_extension.rb
twirp_rails-0.2.1 lib/twirp_rails/active_record_extension.rb
twirp_rails-0.2.0 lib/twirp_rails/active_record_extension.rb
twirp_rails-0.1.7 lib/twirp_rails/active_record_extension.rb
twirp_rails-0.1.6 lib/twirp_rails/active_record_extension.rb
twirp_rails-0.1.5 lib/twirp_rails/active_record_extension.rb
twirp_rails-0.1.4 lib/twirp_rails/active_record_extension.rb