Sha256: 6ac1271f80fb83f1f2d024bc726db4687947bb6ac835b2a763cd9710a0d4a5b9

Contents?: true

Size: 883 Bytes

Versions: 1

Compression:

Stored size: 883 Bytes

Contents

require "active_support/core_ext/string/inflections.rb"

module Billogram
  class Resource
    class << self
      def relations
        @relations ||= []
      end

      def relation(name, type, class_override: nil)
        relations << Relation.new(name, type, class_override: class_override)
        attr_accessor name
      end

      def build_objects(data)
        case data
        when Hash then new(data)
        when Array then data.map{|item| build_objects(item) }
        else data
        end
      end
    end

    def initialize(attributes = {})
      Hash(attributes).each do |key, value|
        public_send("#{key}=", value)
      end

      RelationBuilder.new(self, attributes).call
    end

    def to_json(*args)
      instance_variables
        .map{|var| ["#{var}"[1..-1], instance_variable_get(var)]}
        .to_h
        .to_json(*args)
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
billogram-0.4.2 lib/billogram/resource.rb