moysklad 0.2.1 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/.travis.yml +1 -0
- data/README.md +14 -3
- data/lib/moysklad.rb +3 -2
- data/lib/moysklad/client.rb +37 -10
- data/lib/moysklad/client/errors.rb +60 -30
- data/lib/moysklad/entities.rb +17 -21
- data/lib/moysklad/entities/assortment.rb +6 -0
- data/lib/moysklad/entities/attachment_document.rb +16 -0
- data/lib/moysklad/entities/attribute.rb +114 -37
- data/lib/moysklad/entities/attribute_metadata.rb +9 -31
- data/lib/moysklad/entities/attribute_value.rb +19 -0
- data/lib/moysklad/entities/barcode.rb +10 -4
- data/lib/moysklad/entities/base.rb +23 -8
- data/lib/moysklad/entities/bundle.rb +39 -0
- data/lib/moysklad/entities/characteristic.rb +6 -0
- data/lib/moysklad/entities/characteristic_metadata.rb +6 -0
- data/lib/moysklad/entities/collection.rb +30 -7
- data/lib/moysklad/entities/collection_meta.rb +11 -0
- data/lib/moysklad/entities/common_object.rb +0 -2
- data/lib/moysklad/entities/company_settings_metadata.rb +28 -0
- data/lib/moysklad/entities/consignment.rb +19 -17
- data/lib/moysklad/entities/context.rb +9 -0
- data/lib/moysklad/entities/counterparty.rb +18 -0
- data/lib/moysklad/entities/currency.rb +29 -0
- data/lib/moysklad/entities/custom_entity.rb +20 -10
- data/lib/moysklad/entities/custom_entity_metadata.rb +7 -32
- data/lib/moysklad/entities/customer_order.rb +116 -23
- data/lib/moysklad/entities/customer_order_position.rb +10 -18
- data/lib/moysklad/entities/employee.rb +7 -0
- data/lib/moysklad/entities/entity.rb +42 -0
- data/lib/moysklad/entities/good_folder.rb +1 -0
- data/lib/moysklad/entities/group.rb +7 -0
- data/lib/moysklad/entities/image.rb +17 -0
- data/lib/moysklad/entities/images.rb +10 -0
- data/lib/moysklad/entities/meta.rb +14 -0
- data/lib/moysklad/entities/organization.rb +19 -0
- data/lib/moysklad/entities/owner.rb +4 -0
- data/lib/moysklad/entities/price.rb +5 -8
- data/lib/moysklad/entities/price_type.rb +2 -8
- data/lib/moysklad/entities/product.rb +54 -0
- data/lib/moysklad/entities/productfolder.rb +13 -0
- data/lib/moysklad/entities/rate.rb +9 -0
- data/lib/moysklad/entities/resource_metadata.rb +13 -0
- data/lib/moysklad/entities/service.rb +28 -0
- data/lib/moysklad/entities/shortcut.rb +11 -0
- data/lib/moysklad/entities/store.rb +10 -0
- data/lib/moysklad/entities/time.rb +13 -0
- data/lib/moysklad/entities/uom.rb +7 -0
- data/lib/moysklad/entities/variant.rb +51 -0
- data/lib/moysklad/entities/workflow.rb +11 -0
- data/lib/moysklad/entities/workflow_state.rb +8 -0
- data/lib/moysklad/error.rb +1 -0
- data/lib/moysklad/resources.rb +9 -7
- data/lib/moysklad/resources/assortments.rb +14 -0
- data/lib/moysklad/resources/base.rb +32 -44
- data/lib/moysklad/resources/custom_entities.rb +27 -0
- data/lib/moysklad/resources/custom_entity_metadata.rb +12 -8
- data/lib/moysklad/resources/embedded_entity_metadata.rb +0 -1
- data/lib/moysklad/resources/indexed.rb +23 -35
- data/lib/moysklad/resources/indexed_cache.rb +36 -0
- data/lib/moysklad/resources/load_all.rb +21 -0
- data/lib/moysklad/resources/products.rb +10 -0
- data/lib/moysklad/resources/where_filter.rb +0 -1
- data/lib/moysklad/universe.rb +16 -2
- data/lib/moysklad/version.rb +1 -1
- data/moysklad.gemspec +3 -1
- data/scripts/rest.sh +5 -2
- data/spec/fixtures/Good_WithManyAttributes.raw +13 -0
- data/spec/fixtures/Workflow_list.raw +15 -0
- data/spec/fixtures/good_with_image.xml +39 -0
- data/spec/lib/moysklad/entities/customer_order_spec.rb +7 -2
- data/spec/lib/moysklad/entities/good_spec.rb +9 -0
- data/spec/lib/moysklad/resources/workflows_spec.rb +21 -0
- data/spec/spec_helper.rb +2 -1
- data/test.rb +177 -0
- metadata +97 -44
- data/lib/moysklad/entities/common.rb +0 -15
- data/lib/moysklad/entities/feature.rb +0 -20
- data/lib/moysklad/entities/good.rb +0 -34
- data/lib/moysklad/entities/stock_to.rb +0 -33
- data/lib/moysklad/entities/warehouse.rb +0 -15
- data/lib/moysklad/entities/xml_fix.rb +0 -15
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0434de2e989bb1cb0ca34205101ee8c0e978540b
|
4
|
+
data.tar.gz: ccd6cc1de782b6baf31c331b7e20fe9d7a5c5698
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9beac30a1c510af7d1aff68e5a24ede6d24ec6cf86fdee7486e0e6826c5410a9b0212523ea649076f6575935af3c7ad751c01c58f78e086a54f77cdc9bd9970b
|
7
|
+
data.tar.gz: cf62d29570bae5e6f4dfae85ee1ca4f283a55a95e28a7b898c1f2bb768d530a011aaae5f72b5ec9a9880b66d310f197788861e62e08ce835e2f9276c3276090c
|
data/.gitignore
CHANGED
data/.travis.yml
CHANGED
data/README.md
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
# Ruby-клиент для REST XML API Moysklad
|
2
2
|
|
3
|
-
[![Build Status](https://travis-ci.org/BrandyMint/moysklad.svg)](https://travis-ci.org/
|
3
|
+
[![Build Status](https://travis-ci.org/BrandyMint/moysklad.svg)](https://travis-ci.org/dapi/moysklad)
|
4
4
|
[![Dependency Status](https://www.versioneye.com/user/projects/548225818674a4b5b90004dd/badge.svg?style=flat)](https://www.versioneye.com/user/projects/548225818674a4b5b90004dd)
|
5
|
-
[![Code Climate](https://codeclimate.com/github/
|
5
|
+
[![Code Climate](https://codeclimate.com/github/dapi/moysklad/badges/gpa.svg)](https://codeclimate.com/github/dapi/moysklad)
|
6
6
|
|
7
7
|
* http://www.rubydoc.info/gems/moysklad
|
8
8
|
|
@@ -12,8 +12,9 @@
|
|
12
12
|
* Все используемые сущности описаны и структурированы. Например [Good](lib/moysklad/entities/good.rb)
|
13
13
|
* Любые действия с ресурсами (Create, Read, Update, Delete, List).
|
14
14
|
* Виртуальные действия с ресурсами (`where`, `findWhere`)
|
15
|
+
* Автоматическая подгрузка списка если все данные не уместились в один запрос (метод `all`)
|
15
16
|
* _Кеширование и предзагрузка_ ресурса со всеми записями (используем ресурс как локальную базу)
|
16
|
-
* Работа с нескольмими аккаунтами
|
17
|
+
* Работа с нескольмими аккаунтами склада одновременно (отсуствие глобальных переменных).
|
17
18
|
* Удобная работа с подресурсами (например справочником свойств товара)
|
18
19
|
* _Ассоциации_ между сущностями автоматически получают данные по API (`good.features`).
|
19
20
|
* [Client](lib/moysklad/client.rb) для прямого обращения к API в случае крайней необходимости.
|
@@ -282,10 +283,20 @@ dictionary.entities(universe)
|
|
282
283
|
|
283
284
|
> MS_LOGON=логин MS_PASSWORD=пароль ./script/rest.sh Country list > ./spec/fixtures/Country_list.raw
|
284
285
|
|
286
|
+
Если получаете 429 ошибку (too many requests) - лимит обращений по API от одного
|
287
|
+
аккаунта - 5 или 10 запросов в секунду (в секунду, Карл). Если не превышать его,
|
288
|
+
все будет хорошо - минутных или часовых лимитов нет.
|
289
|
+
|
285
290
|
## Ссылочки
|
286
291
|
|
287
292
|
* Картапамяти по API http://www.mindmeister.com/246618635/online-moysklad-ru
|
288
293
|
* Документация для разработчииков https://support.moysklad.ru/hc/ru/sections/200561443-Разработчикам
|
294
|
+
* Неплохая схема API в json https://gist.github.com/dapi/22a0790db19a4ff51a37
|
295
|
+
|
296
|
+
## Другие биллиотеки
|
297
|
+
|
298
|
+
* PHP https://github.com/Tooyz/moysklad
|
299
|
+
* JavaScript/nodejs https://github.com/wmakeev/moysklad-client
|
289
300
|
|
290
301
|
## Присылайте пул-реквесты )
|
291
302
|
|
data/lib/moysklad.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require '
|
1
|
+
require 'virtus'
|
2
2
|
require 'active_support'
|
3
3
|
require "moysklad/version"
|
4
4
|
|
@@ -8,7 +8,8 @@ module Moysklad
|
|
8
8
|
mattr_accessor :custom_logger
|
9
9
|
extend ActiveSupport::Autoload
|
10
10
|
|
11
|
-
|
11
|
+
require_relative 'moysklad/entities'
|
12
|
+
autoload :Error
|
12
13
|
autoload :Resources
|
13
14
|
autoload :Client
|
14
15
|
autoload :Universe
|
data/lib/moysklad/client.rb
CHANGED
@@ -4,31 +4,55 @@ require_relative 'client/errors'
|
|
4
4
|
|
5
5
|
class Moysklad::Client
|
6
6
|
|
7
|
-
URL = 'https://online.moysklad.ru'
|
7
|
+
# URL = 'https://online.moysklad.ru'
|
8
|
+
URL ='https://online.moysklad.ru/api/remap/1.1/'
|
8
9
|
|
9
10
|
def initialize login: nil, password: nil
|
10
11
|
@client = Faraday.new URL
|
11
12
|
@client.basic_auth login, password
|
12
13
|
end
|
13
14
|
|
15
|
+
def download(path, filename)
|
16
|
+
response = client.get path
|
17
|
+
File.open(filename, 'wb') { |fp| fp.write(response.body) }
|
18
|
+
end
|
19
|
+
|
14
20
|
def get path, params={}
|
15
21
|
logger.debug "Client: GET #{path} #{params}"
|
16
|
-
|
22
|
+
parse_response client.get path, params
|
23
|
+
end
|
24
|
+
|
25
|
+
def post path, data
|
26
|
+
logger.debug "Client: POST #{path}"
|
27
|
+
result = client.post do |req|
|
28
|
+
req.url path
|
29
|
+
req.headers['Content-Type'] = 'application/json'
|
30
|
+
req.headers['Accept'] = '*/*'
|
31
|
+
puts data
|
32
|
+
req.body = data
|
33
|
+
end
|
34
|
+
parse_response result
|
17
35
|
end
|
18
36
|
|
19
37
|
def put path, data
|
20
38
|
logger.debug "Client: PUT #{path}"
|
21
39
|
result = client.put do |req|
|
22
40
|
req.url path
|
23
|
-
req.headers['Content-Type'] = 'application/
|
41
|
+
req.headers['Content-Type'] = 'application/json'
|
24
42
|
req.headers['Accept'] = '*/*'
|
25
43
|
req.body = data
|
26
44
|
end
|
27
|
-
|
45
|
+
parse_response result
|
28
46
|
end
|
29
47
|
|
30
48
|
def delete path
|
31
|
-
|
49
|
+
logger.debug "Client: DELETE #{path}"
|
50
|
+
result = client.delete do |req|
|
51
|
+
req.url path
|
52
|
+
req.headers['Content-Type'] = 'application/json'
|
53
|
+
req.headers['Accept'] = '*/*'
|
54
|
+
end
|
55
|
+
parse_response result
|
32
56
|
end
|
33
57
|
|
34
58
|
private
|
@@ -39,10 +63,13 @@ class Moysklad::Client
|
|
39
63
|
Moysklad.logger
|
40
64
|
end
|
41
65
|
|
42
|
-
def
|
43
|
-
|
44
|
-
|
45
|
-
|
66
|
+
def parse_response res
|
67
|
+
if res.status == 200
|
68
|
+
Moysklad.logger.info "Response: #{res.body}"
|
69
|
+
return if res.body.blank?
|
70
|
+
JSON.parse res.body
|
71
|
+
else
|
72
|
+
Moysklad::Client::Errors.build res
|
73
|
+
end
|
46
74
|
end
|
47
|
-
|
48
75
|
end
|
@@ -1,23 +1,44 @@
|
|
1
1
|
class Moysklad::Client
|
2
2
|
class Errors
|
3
3
|
def self.build res
|
4
|
-
|
4
|
+
body = res.body.force_encoding('utf-8')
|
5
|
+
content_type = res.headers['content-type']
|
6
|
+
|
7
|
+
if content_type.start_with? 'application/json'
|
8
|
+
# ok
|
9
|
+
elsif content_type.start_with? 'text/html'
|
10
|
+
raise HtmlParsedError, body
|
11
|
+
else
|
12
|
+
raise UnknownError, body
|
13
|
+
end
|
14
|
+
|
15
|
+
# Encoding::UndefinedConversionError
|
16
|
+
# "\xD0" from ASCII-8BIT to UTF-8
|
17
|
+
begin
|
18
|
+
body = JSON.parse body
|
19
|
+
Moysklad.logger.debug "Moysklad::Client: #{res.status}: #{res.headers}, #{res.env.url.to_s}\n#{body}"
|
20
|
+
rescue Encoding::UndefinedConversionError => err
|
21
|
+
Moysklad.logger.error "#{err}"
|
22
|
+
rescue JSON::ParserError => err
|
23
|
+
Moysklad.logger.error "#{err}: #{res.headers}, body:#{body}"
|
24
|
+
raise ParsingError, body
|
25
|
+
end
|
5
26
|
|
6
27
|
case res.status
|
7
|
-
when 401
|
8
|
-
raise UnauthorizedError.new
|
28
|
+
when 401
|
29
|
+
raise UnauthorizedError.new body
|
9
30
|
when 403
|
10
|
-
raise ResourceForbidden.new
|
11
|
-
when 404
|
12
|
-
raise NoResourceFound.new
|
13
|
-
when 405
|
14
|
-
raise MethodNotAllowedError.new
|
31
|
+
raise ResourceForbidden.new body
|
32
|
+
when 404
|
33
|
+
raise NoResourceFound.new body
|
34
|
+
when 405, 412
|
35
|
+
raise MethodNotAllowedError.new body
|
15
36
|
when 500
|
16
|
-
raise InternalServerError.new
|
37
|
+
raise InternalServerError.new body
|
17
38
|
when 502
|
18
|
-
raise BadGatewayError.new
|
19
|
-
else
|
20
|
-
raise
|
39
|
+
raise BadGatewayError.new body
|
40
|
+
else
|
41
|
+
raise JsonParsedError.new body
|
21
42
|
end
|
22
43
|
end
|
23
44
|
end
|
@@ -32,39 +53,48 @@ class Moysklad::Client
|
|
32
53
|
end
|
33
54
|
|
34
55
|
def to_s
|
35
|
-
message
|
56
|
+
message.to_s.encode('utf-8')
|
57
|
+
# <?xml version="1.0" encoding="UTF-8"?> <error> <uid>kiiiosk@wannabemoscow</uid> <moment>20150609112728449</moment> <message>������������ ���� ���������� �������� ������������.</message> </error>
|
58
|
+
rescue Encoding::CompatibilityError
|
59
|
+
message.to_s.force_encoding('cp1251').encode('utf-8')
|
36
60
|
end
|
37
61
|
end
|
62
|
+
class ParsingError < Error; end
|
63
|
+
|
64
|
+
class UnknownError < Error; end
|
38
65
|
|
39
66
|
class NoResourceFound < Error; end
|
40
67
|
|
68
|
+
class JsonParsedError < Error
|
69
|
+
def initialize result
|
70
|
+
super result.to_json
|
71
|
+
end
|
72
|
+
|
73
|
+
attr_reader :error
|
74
|
+
end
|
75
|
+
|
41
76
|
class HtmlParsedError < Error
|
42
|
-
def initialize
|
43
|
-
@
|
44
|
-
@message = "[#{res.status}] #{parse_title res.body}"
|
77
|
+
def initialize body
|
78
|
+
@message = parse_title body
|
45
79
|
end
|
46
80
|
|
47
81
|
private
|
48
82
|
|
49
83
|
def parse_title body
|
50
|
-
|
51
|
-
# у ResourceForbidden есть <u>
|
52
|
-
# у wrong_password <u> несколько
|
53
|
-
# Можно ошибку разбирать более грамотно по свойствам type, message, description: http://i.gyazo.com/e9d5d08bd610882d87f39d9002cdf25a.png
|
54
|
-
[doc.css('body').css('h1').text,doc.css('body').css('u').to_a.map(&:text).compact.last].join('; ')
|
84
|
+
Nokogiri::HTML(body).css('body').text
|
55
85
|
rescue => err
|
56
|
-
Moysklad.logger.debug "
|
86
|
+
Moysklad.logger.debug "Moysklad::Client parse error #{err}: #{body}"
|
57
87
|
body.force_encoding('utf-8')
|
58
88
|
end
|
59
89
|
end
|
60
90
|
|
61
|
-
class MethodNotAllowedError <
|
91
|
+
class MethodNotAllowedError < JsonParsedError
|
62
92
|
end
|
63
93
|
|
64
|
-
class UnauthorizedError <
|
94
|
+
class UnauthorizedError < JsonParsedError
|
65
95
|
end
|
66
96
|
|
67
|
-
class ResourceForbidden <
|
97
|
+
class ResourceForbidden < JsonParsedError
|
68
98
|
end
|
69
99
|
|
70
100
|
class ParsedError < Error
|
@@ -72,24 +102,24 @@ class Moysklad::Client
|
|
72
102
|
@status = result.status
|
73
103
|
@result = result
|
74
104
|
case result.headers['content-type']
|
75
|
-
|
105
|
+
|
76
106
|
when /application\/xml/
|
77
107
|
@error = Moysklad::Entities::Error.parse result.body
|
78
108
|
@message = @error.message
|
79
109
|
when /text\/html/
|
80
|
-
doc = Nokogiri::HTML body
|
110
|
+
doc = Nokogiri::HTML result.body
|
81
111
|
@message = doc.css('body').css('h1').text
|
82
112
|
else
|
83
113
|
raise "Unknown content-type #{result.headers['content-type']} to parse error #{result.body}"
|
84
114
|
end
|
85
115
|
rescue => err
|
86
|
-
@message = "error in init #{err}: #{result
|
116
|
+
@message = "error in init #{err}: #{result}"
|
87
117
|
end
|
88
118
|
|
89
119
|
attr_reader :error
|
90
120
|
end
|
91
121
|
|
92
122
|
|
93
|
-
class BadGatewayError <
|
94
|
-
class InternalServerError <
|
123
|
+
class BadGatewayError < JsonParsedError; end
|
124
|
+
class InternalServerError < JsonParsedError; end
|
95
125
|
end
|
data/lib/moysklad/entities.rb
CHANGED
@@ -1,46 +1,42 @@
|
|
1
1
|
module Moysklad
|
2
2
|
module Entities
|
3
3
|
extend ActiveSupport::Autoload
|
4
|
-
|
5
|
-
autoload :XmlFix
|
6
|
-
autoload :CommonObject
|
7
|
-
autoload :CompanyConcern
|
8
|
-
autoload :Common
|
9
|
-
|
10
4
|
%w{
|
11
|
-
|
5
|
+
AttachmentDocument
|
12
6
|
Uom
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
Good
|
7
|
+
Productfolder
|
8
|
+
Product
|
9
|
+
Bundle
|
17
10
|
Barcode
|
18
|
-
SalePrices
|
19
|
-
SalePrice
|
20
11
|
Error
|
21
|
-
CustomerOrderPosition
|
22
12
|
Consignment
|
23
13
|
MyCompany
|
24
14
|
Attribute
|
25
15
|
GoodRef
|
26
16
|
Base
|
17
|
+
Counterparty
|
18
|
+
Organization
|
27
19
|
CustomerOrder
|
20
|
+
CustomerOrderPosition
|
28
21
|
CustomEntity
|
29
|
-
|
30
|
-
Feature
|
22
|
+
Variant
|
31
23
|
AttributeMetadata
|
32
24
|
EmbeddedEntityMetadata
|
25
|
+
CompanySettingsMetadata
|
33
26
|
Price
|
34
|
-
|
35
|
-
StockTO
|
27
|
+
Currency
|
36
28
|
Company
|
37
|
-
|
29
|
+
Store
|
30
|
+
Service
|
31
|
+
Owner
|
32
|
+
Group
|
38
33
|
Collection
|
39
|
-
CustomEntity
|
40
34
|
Page
|
35
|
+
ResourceMetadata
|
36
|
+
Attribute
|
37
|
+
Characteristic
|
41
38
|
}.each do |m|
|
42
39
|
autoload m
|
43
40
|
end
|
44
41
|
end
|
45
|
-
|
46
42
|
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Moysklad::Entities
|
2
|
+
class AttachmentDocument < Base
|
3
|
+
include Moysklad::Entities::Common
|
4
|
+
|
5
|
+
tag 'file'
|
6
|
+
|
7
|
+
attribute :filename, String
|
8
|
+
attribute :miniatureUuid, String
|
9
|
+
attribute :name, String
|
10
|
+
|
11
|
+
#def self.parse node, options
|
12
|
+
## TODO create AttachmentDocument
|
13
|
+
#''
|
14
|
+
#end
|
15
|
+
end
|
16
|
+
end
|
@@ -1,47 +1,124 @@
|
|
1
|
+
require_relative 'attribute_value'
|
2
|
+
require_relative 'meta'
|
3
|
+
|
4
|
+
# Атрибут товара (ссылка на его тип и его значение)
|
1
5
|
module Moysklad::Entities
|
2
6
|
class Attribute < Base
|
3
|
-
|
7
|
+
attribute :meta, Meta
|
8
|
+
attribute :id, String
|
9
|
+
attribute :name, String
|
10
|
+
attribute :customEntityMeta, Meta
|
11
|
+
attribute :type, String #attributemetadata
|
12
|
+
attribute :value, AttributeValue
|
13
|
+
attribute :required, Boolean
|
4
14
|
|
5
|
-
|
15
|
+
def to_s
|
16
|
+
"#{name} (#{type}): #{value}"
|
17
|
+
end
|
6
18
|
|
7
|
-
|
8
|
-
|
9
|
-
|
19
|
+
def is_dictionary?
|
20
|
+
type == 'customentity'
|
21
|
+
end
|
10
22
|
|
11
|
-
|
23
|
+
### Если это свойство типа ID_CUSTOM, то возвращается пользовательский справочник
|
24
|
+
###
|
25
|
+
### @return Moysklad::Entities::CustomEntityMetadata
|
26
|
+
##def dictionatyMetadata universe
|
27
|
+
##raise "Это свойства не типа справочник" unless dictionaryMetadataUuid
|
28
|
+
##universe.custom_entity_metadata.find dictionaryMetadataUuid
|
29
|
+
##end
|
12
30
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
end
|
31
|
+
### Справочник к которому принадлежит это ссвойство
|
32
|
+
###
|
33
|
+
### @return Moysklad::Entities::EmbeddedEntityMetadata
|
34
|
+
##def entityMetadata universe
|
35
|
+
##universe.embedded_entity_metadata.find entityMetadataUuid
|
36
|
+
##end
|
20
37
|
|
21
|
-
# Название свойства, полученное из AttributeMetadata
|
22
|
-
#
|
23
|
-
# @return String
|
24
|
-
#
|
25
|
-
def attributeName universe
|
26
|
-
metadata(universe).name
|
27
|
-
end
|
28
38
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
39
|
+
### Объект описывающий тип атритуба
|
40
|
+
###
|
41
|
+
### @return Moysklad::Entities::AttributeMetadata
|
42
|
+
###
|
43
|
+
##def metadata universe
|
44
|
+
##universe.embedded_entity_metadata.subresource_by_name(:GoodFolder).find metadataUuid
|
45
|
+
##end
|
46
|
+
|
47
|
+
### Название свойства, полученное из AttributeMetadata
|
48
|
+
###
|
49
|
+
### @return String
|
50
|
+
###
|
51
|
+
##def attributeName universe
|
52
|
+
##metadata(universe).name
|
53
|
+
##end
|
54
|
+
|
55
|
+
### Значение свойства согласно его типу
|
56
|
+
###
|
57
|
+
### @return [String | Moysklad::Entities::CustomEntity | Integer | Decimal ]
|
58
|
+
#def get_value universe
|
59
|
+
#md = metadata universe
|
60
|
+
#case md.attrType
|
61
|
+
#when 'ID_CUSTOM'
|
62
|
+
#universe.custom_entities.find( entityValueUuid ).name
|
63
|
+
#when 'LINK'
|
64
|
+
#valueText
|
65
|
+
#when 'TEXT'
|
66
|
+
#valueText
|
67
|
+
#when 'STRING'
|
68
|
+
#valueString
|
69
|
+
#when 'DOUBLE'
|
70
|
+
#doubleValue
|
71
|
+
#when 'LONG'
|
72
|
+
#longValue
|
73
|
+
#when 'TIME'
|
74
|
+
#timeValue
|
75
|
+
#when 'FILE'
|
76
|
+
#file
|
77
|
+
#else
|
78
|
+
#raise "Не известный тип мета-аттрибута #{md.uuid}: #{md.attrType}"
|
79
|
+
#end
|
80
|
+
#end
|
81
|
+
### Объект описывающий тип атритуба
|
82
|
+
###
|
83
|
+
### @return Moysklad::Entities::AttributeMetadata
|
84
|
+
###
|
85
|
+
##def metadata universe
|
86
|
+
##universe.embedded_entity_metadata.subresource_by_name(:GoodFolder).find metadataUuid
|
87
|
+
##end
|
88
|
+
|
89
|
+
### Название свойства, полученное из AttributeMetadata
|
90
|
+
###
|
91
|
+
### @return String
|
92
|
+
###
|
93
|
+
##def attributeName universe
|
94
|
+
##metadata(universe).name
|
95
|
+
##end
|
96
|
+
|
97
|
+
### Значение свойства согласно его типу
|
98
|
+
###
|
99
|
+
### @return [String | Moysklad::Entities::CustomEntity | Integer | Decimal ]
|
100
|
+
##def get_value universe
|
101
|
+
##md = metadata universe
|
102
|
+
##case md.attrType
|
103
|
+
##when 'ID_CUSTOM'
|
104
|
+
##universe.custom_entities.find( entityValueUuid ).name
|
105
|
+
##when 'LINK'
|
106
|
+
##valueText
|
107
|
+
##when 'TEXT'
|
108
|
+
##valueText
|
109
|
+
##when 'STRING'
|
110
|
+
##valueString
|
111
|
+
##when 'DOUBLE'
|
112
|
+
##doubleValue
|
113
|
+
##when 'LONG'
|
114
|
+
##longValue
|
115
|
+
##when 'TIME'
|
116
|
+
##timeValue
|
117
|
+
##when 'FILE'
|
118
|
+
##file
|
119
|
+
##else
|
120
|
+
##raise "Не известный тип мета-аттрибута #{md.uuid}: #{md.attrType}"
|
121
|
+
##end
|
122
|
+
##end
|
46
123
|
end
|
47
124
|
end
|