Sha256: 2b7708ab5927299d15819d6495297eb1e8d13d43a8b79406741506f505a3eddb

Contents?: true

Size: 799 Bytes

Versions: 1

Compression:

Stored size: 799 Bytes

Contents

module TicketingHub
  class Consumer < Resource
    schema do
      integer :id
      string :first_name, :last_name, :email, :country
    end

    def self.from_fields fields      
      new.tap do |consumer|
        consumer.instance_eval do
          @schema ||= singleton_class.schema do
            fields.each do |field|
              type = Schema::KNOWN_ATTRIBUTE_TYPES.member?(field['type']) ? field['type'] : 'string'
              send type, field['name']
            end
          end

          fields.each do |field|
            singleton_class.validates_presence_of field['name'] if field['required']
            send "#{field['name']}=", field['value']
            field['errors'].each { |error| errors.add field['name'], error }
          end
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
ticketinghub-0.0.2 lib/ticketing_hub/consumer.rb