Sha256: 147ff4088044cd3da7156789526b2c6478a0129bd7ea4e2324de1b42f747b021

Contents?: true

Size: 1.82 KB

Versions: 1

Compression:

Stored size: 1.82 KB

Contents

class Moysklad::Resources::Base
  PREFIX_PATH = 'exchange/rest/ms/xml/'

  def self.inherited superclass
    super
    Moysklad::Resources.register_resource superclass
  end

  # https://support.moysklad.ru/hc/ru/articles/203404253-REST-сервис-синхронизации-данных
  def initialize client: nil
    raise "Должен быть Moysklad::Client" unless client.is_a? Moysklad::Client
    @client = client
  end

  def list params={}
    parse client.get list_path, params
  end

  def collection params={}
    parse_collection client.get list_path, params
  end

  def find uuid
    parse client.get item_path uuid
  end

  def create resource
    parse client.put create_path, prepare_resource(resource)
  end

  def delete uuid
    client.delete item_path uuid 
  end

  def self.type
    ActiveSupport::Inflector.singularize name.split('::').last.to_sym
  end

  def self.pluralized_type
    ActiveSupport::Inflector.underscore ActiveSupport::Inflector.pluralize type
  end

  def self.entity_class
    ActiveSupport::Inflector.constantize "Moysklad::Entities::#{type.to_s}"
  end
  private

  attr_reader :client

  def prepare_resource resource
    resource
  end

  def parse content
    self.class.entity_class.parse content
  end

  def parse_collection content
    col = Moysklad::Entities::Collection.parse content

    # TODO Парсится два раза. Оптимизировать. Например сделать динамические CollectionFeature 
    # и парсить через них

    items = parse content
    Moysklad::Entities::Page.new items, col.total,  col.start, col.count
  end

  def item_path uuid
    prefix_path + '/' + uuid
  end

  def create_path
    prefix_path
  end

  def list_path
    prefix_path + '/list'
  end

  def prefix_path
    PREFIX_PATH + self.class.type
  end

end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
moysklad-0.0.2 lib/moysklad/resources/base.rb