moysklad 0.1.3 → 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f689b54410b1ea6bf38db44091bbfa37d9650a0d
4
- data.tar.gz: 05e2e80d9a16a7f1b860318ca276a534b8b787a3
3
+ metadata.gz: 7ce9d5b8b1a5f1edb130458f589bc42a2a528785
4
+ data.tar.gz: 6e3d6bcccc02fe6d70b35fa1fb53776860130580
5
5
  SHA512:
6
- metadata.gz: 462cde790f4f03d371c7e56e7d1a8540b8caee937b0fefbeff0d1099963205db2a4abe0b603a6516543c93c22798cc00f65db97afaf0cd8179bc4c82e9517775
7
- data.tar.gz: 9221da267d8df68aa58688833da7e4b5948bfecd1c2c1e22af5f9002cf6a87fab3aa8f8f189d6a148700ad5761436b4414a32d6ad7f3b1e2a7a6656f3773bd06
6
+ metadata.gz: 011d7e2405fdd727a6546f52618ab3be16d06858c6f581f2f7ebef1ec0a51a9621c9ab88f338c7ffc137f471ffa392a06fdbe58f743a21dc9e5ae916fe17653c
7
+ data.tar.gz: bd7eebe8792ae0c4ddd0b5af4515ccbc792157d03a1c405e4477c70bdbd80c707435a36db1a2dffc53a5925c753a6318f5976b40c2e0196997c9028c99e54afc
@@ -1,3 +1,7 @@
1
+ ## 0.1.4 / 2014-12-04
2
+
3
+ * Universe.build для ленивого создания вселенной
4
+
1
5
  ## 0.1.3 / 2014-12-04
2
6
 
3
7
  * Примеры использования и больше документации
data/README.md CHANGED
@@ -1,17 +1,22 @@
1
- # Правильный Ruby-клиент для API moysklad.ru
1
+ # Ruby-клиент для REST XML API Moysklad
2
2
 
3
3
  [![Build Status](https://travis-ci.org/BrandyMint/moysklad.svg)](https://travis-ci.org/BrandyMint/moysklad)
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/BrandyMint/moysklad/badges/gpa.svg)](https://codeclimate.com/github/BrandyMint/moysklad)
4
6
 
5
- Отличительные черты:
7
+ * http://www.rubydoc.info/gems/moysklad
6
8
 
7
- * Модуль разработан согласно принципам SOLID. Легко расширяем.
8
-
9
- ## Возможности
9
+ ## Особенности
10
10
 
11
- * Легкое внесение изменений (добавление новых моделей и ресурсов)
12
- * Удобный доступ ко всем действиям с ресурсами.
13
- * Кеширование ресурса со всеми записями (используем ресурс как локальную базу)
14
- * Понятные исключения при ошибках с сетью.
11
+ * Модуль разработан согласно принципам SOLID. Легко расширяем.
12
+ * Все используемые сущности описаны и структурированы. Например [Good](lib/moysklad/entities/good.rb)
13
+ * Любые действия с ресурсами (Create, Read, Update, Delete, List).
14
+ * Виртуальные действия с ресурсами (`where`, `findWhere`)
15
+ * _Кеширование и предзагрузка_ ресурса со всеми записями (используем ресурс как локальную базу)
16
+ * Работа с нескольмими аккаунтами на склада одновременно (отсуствие глобальных переменных).
17
+ * Удобная работа с подресурсами (например справочником свойств товара)
18
+ * _Ассоциации_ между сущностями автоматически получают данные по API (`good.features`).
19
+ * [Client](lib/moysklad/client.rb) для прямого обращения к API в случае крайней необходимости.
15
20
 
16
21
  ## Установка
17
22
 
@@ -19,39 +24,48 @@
19
24
 
20
25
  gem 'moysklad'
21
26
 
22
-
23
27
  ## Использование
24
28
 
25
29
  Создаем благоприятное окружение для работы с API:
26
30
 
27
- > client = Moysklad::Client.new login:'ВАШ ЛОГИН', password:'ВАШ ПАРОЛЬ'
28
- > universe = Moysklad::Universe.new client: client
31
+ ```ruby
32
+ universe = Moysklad::Universe.build login:'ВАШ ЛОГИН', password:'ВАШ ПАРОЛЬ'
33
+ ```
29
34
 
30
35
  ### Список элементов.
31
36
 
32
- Например список товаров.
37
+ Например список товаров (`Good`).
33
38
 
34
- > universe.goods.list
35
- > => [Moysklad::Entities::Good, Moysklad::Entities::Good, ..]
39
+ ```ruby
40
+ universe.goods.list
41
+ # => [Moysklad::Entities::Good, Moysklad::Entities::Good, ..]
42
+ ```
36
43
 
37
44
  Обратите внимание, что список возвращается "как есть" и для работы с ним есть более удобные методы.
38
45
 
46
+ Параметры списка.
47
+
48
+ ```ruby
49
+ universe.stock.list slotUuid: uuid
50
+ ```
51
+
39
52
  Страница товаров:
40
53
 
41
- > page = universe.goods.page
42
- > => Moysklad::Entities::Page
54
+ ```ruby
55
+ page = universe.goods.page
56
+ # => Moysklad::Entities::Page
43
57
 
44
- > page.total
45
- > => 1280
58
+ page.total
59
+ # => 1280
46
60
 
47
- > page.count
48
- > => 1000
61
+ page.count
62
+ # => 1000
49
63
 
50
- > page.start
51
- > => 0
64
+ page.start
65
+ # => 0
52
66
 
53
- > page.items
54
- > =>[Moysklad::Entities::Good, ..]
67
+ # page.items
68
+ # =>[Moysklad::Entities::Good, ..]
55
69
 
56
70
  Есть очень удобная возможность автоматически загрузать ВСЕ товары с учетом пейджирования:
57
71
 
@@ -61,99 +75,198 @@
61
75
 
62
76
  > goods
63
77
  > => [Moysklad::Entities::Page]
64
-
78
+ ```
65
79
 
66
80
  ### Получить конкретный элемент
67
81
 
68
- > universe.goods.get $uuid
69
- > => [Moysklad::Entities::Good]
70
-
82
+ ```ruby
83
+ universe.goods.get $uuid
84
+ # => [Moysklad::Entities::Good]
85
+ ```
71
86
 
72
87
  ### Создаем элемент
73
88
 
74
89
  Например загрузка заказа покупателя:
75
90
 
76
- > co = Moysklad::Entities::CustomerOrder.new
77
- > co.vatIncluded = true
78
- > co.applicable = true
79
- > co.customerOrderPosition = [Moysklad::Entities::CustomerOrderPosition.new]
80
- >
81
- > created_order = universe.customer_orders.create co
82
- > => [Moysklad::Entities::Good]
83
- > created_order.uuid
84
- > => uuid нового заказа
91
+ ```
92
+ co = Moysklad::Entities::CustomerOrder.new
93
+ co.vatIncluded = true
94
+ co.applicable = true
95
+ [...]
96
+ co.customerOrderPosition = [Moysklad::Entities::CustomerOrderPosition.new]
97
+
98
+ created_order = universe.customer_orders.create co
99
+ # => [Moysklad::Entities::Good]
100
+
101
+ created_order.uuid
102
+ # => uuid нового заказа
103
+ ```
85
104
 
86
105
  ### Удаляем элемент
87
106
 
88
- > universe.goods.delete $uuid
107
+ ```ruby
108
+ universe.goods.delete $uuid
109
+ ```
89
110
 
90
- ### Кеширование
111
+ ### Кеширование и предзагрузка
91
112
 
92
113
  Одной из главных возможностей данного модуля является возможность работать с API как с базой данных,
93
114
  не выполняя запрос по получению каждого товара по-отдельности, и выдавать данные их кеша.
94
115
 
95
116
  Класический способ получить данные по товару делает GET запрос каждый раз:
96
117
 
97
- > > universe.goods.get $uuid
98
- > => Client: GET exchange/rest/ms/xml/Good/f24937e7-7ba1-11e4-90a2-8ecb000abf12 {}
99
- > => [Moysklad::Entities::Good]
118
+ ```ruby
119
+ universe.goods.get $uuid
120
+ # => Client: GET exchange/rest/ms/xml/Good/f24937e7-7ba1-11e4-90a2-8ecb000abf12 {}
121
+ # => [Moysklad::Entities::Good]
122
+ ```
100
123
 
101
124
  Продвинутый способ вытаскивает все данные сразу и в дальнейшем берет обьекты из кеша:
102
125
 
103
- > > universe.goods.find $uuid
104
- > => Client: GET exchange/rest/ms/xml/Good/list {:start=>0}
105
- > => Client: GET exchange/rest/ms/xml/Good/list {:start=>1000}
106
- > => [Moysklad::Entities::Good]
126
+ ```ruby
127
+ > universe.goods.find $uuid
128
+ # => Client: GET exchange/rest/ms/xml/Good/list {:start=>0}
129
+ # => Client: GET exchange/rest/ms/xml/Good/list {:start=>1000}
130
+ # => [Moysklad::Entities::Good]
131
+ ```
107
132
 
108
133
  И в следующий раз API уже не дергается:
109
134
 
110
- > > universe.goods.find $another_uuid
111
- > => [Moysklad::Entities::Good]
135
+ ```ruby
136
+ universe.goods.find $another_uuid
137
+ # => [Moysklad::Entities::Good]
138
+ ```
112
139
 
113
140
  Это позволяет экономить на прямых запросах к API и избавляет нас от блокирования моимскладом по ограничению количества запросов за еденицу времени.
114
141
 
115
142
 
116
- ### Список доступных ресутсов:
143
+ ## Поиск по фильтру
144
+
145
+ Возвращает список элементов отображенных по фильтру:
146
+
147
+ ```ruby
148
+ universe.features.where goodUuid: uuid
149
+ # => [Moysklad::Enities::Feature, Moysklad::Enities::Feature]
150
+ ```
151
+
152
+ Тоже самое, только возвращается первый элемент или nil:
153
+
154
+ ```ruby
155
+ universe.features.findWhere goodUuid: uuid
156
+ # => [Moysklad::Enities::Feature]
157
+ ```
117
158
 
118
- > universe.resources_list
119
- > => [:stock, :metadata, :custom_entity_metadata, :goods, :good_folders, :uoms, :countries,
159
+ ### Список доступных ресурсов:
160
+
161
+ ```ruby
162
+ universe.resources_list
163
+ # => [:stock, :metadata, :custom_entity_metadata, :goods, :good_folders, :uoms, :countries,
120
164
  :features, :custom_entities, :customer_orders, :warehouses, :companies,
121
165
  :consignments, :my_companies]
166
+ ```
122
167
 
168
+ ## Справочники и подресурсы
123
169
 
124
- ## Pull Requests
170
+ Доступ к Мойсклад устроен так, что некоторые справочники запрятаны в одной коллекции.
171
+ Например если вы хотите получить все виды свойств товаров, то это можно сделать следующим образом.
172
+
173
+ ```ruby
174
+ universe.metadata.subresource_by_name(:GoodFolder).all
175
+ # => [Moysklad::Entities::AttributeMetadata, Moysklad::Entities::AttributeMetadata]
176
+ ```
177
+
178
+ Или получить конкретное свойство:
125
179
 
126
- ### Добавление новых моделей и ресутсрв
180
+ ```ruby
181
+ universe.metadata.subresource_by_name(:GoodFolder).find uuid
182
+ # => Moysklad::Entities::AttributeMetadata
183
+ ```
127
184
 
128
- Если в API моего склада есть справочник, который еще не добавлен в этот модуль, можете сделать это сами следующим образом.
185
+ ## Автоматическая обработка ассоциаций (отношения)
129
186
 
130
- Например добавляем Country.
187
+ Нравятся `belongs_to` и `has_many` в рельсах? Тут есть почти тоже самое.
131
188
 
189
+ ```ruby
190
+ feature = universe.features.find uuid
191
+ feature.good
192
+ # Client: GET exchange/rest/ms/xml/Good/f24937e7-7ba1-11e4-90a2-8ecb000abf12 {}
193
+ # => [Moysklad::Entities::Good]
194
+ ```
195
+
196
+ Пример как получить все данные по товару, включая модификации, свойства и их характеристики:
197
+
198
+ ```ruby
199
+ good = universe.goods.find uuid
200
+ # Client: GET exchange/rest/ms/xml/Good/f24937e7-7ba1-11e4-90a2-8ecb000abf12 {}
201
+
202
+ good.features universe
203
+ # Client: GET exchange/rest/ms/xml/Feature/list {}
204
+ # => [Moysklad::Entities::Feature, ..]
205
+
206
+ attribute = good.attributes.first
207
+ # => [Moysklad::Entities::Attribute, ..]
208
+
209
+ attribute.is_dictionary?
210
+ # => true
211
+ ```
212
+
213
+ Получаем вид свойства:
214
+
215
+ ```ruby
216
+ attribute.metadata universe
217
+ # Client: GET exchange/rest/ms/xml/Metadata/list {}
218
+ # => [Moysklad::Entities::AttributeMetadata]
219
+ ```
220
+
221
+ Получаем описание пользовательского справочника к которому принадлежит свойства
222
+
223
+ ```ruby
224
+ dictionary = attribute.metadata(universe).dictionatyMetadata(universe)
225
+ # Client: GET exchange/rest/ms/xml/CustomEntityMetadata/uuid {}
226
+ # => [Moysklad::Entities::CustomEntityMetadata]
227
+ ```
228
+
229
+ Значения всех элементов пользовательского справочника:
230
+
231
+ ```ruby
232
+ dictionary.entities(universe)
233
+ # => [Moysklad::Entities::CustomEntity, ...]
234
+ ```
235
+
236
+ Подробнее смотри в исходниках сущностей.
237
+
238
+ ## Pull Requests
239
+
240
+ ### Добавление новых моделей и ресурсов.
241
+
242
+ На данный момен в библиотеку добавлено 60% справочников используемых в моемскладе. Я добавляю новые справочники по мере необходимости. Но вы можете это сделать и сами следующим образом.
243
+
244
+ Например добавляем `Country`.
132
245
 
133
246
  1. Добавляем в фикстуры пример выгрузки из API для тестирования и отладки:
134
247
 
135
- > MS_LOGON=логин MS_PASSWORD=пароль ./script/rest.sh Country list > ./spec/fixtures/Country_list.raw
248
+ MS_LOGON=логин MS_PASSWORD=пароль ./script/rest.sh Country list > ./spec/fixtures/Country_list.raw
136
249
 
137
250
  2. Создаем сущность на основе уже существующей, например good.rb
138
251
 
139
- > cp ./lib/moysklad/entities/good.rb ./lib/moysklad/entities/country.rb
252
+ cp ./lib/moysklad/entities/good.rb ./lib/moysklad/entities/country.rb
140
253
 
141
254
  3. Описываем свойства новой сущности Country.rb в терминах [nokogiri-happymapper](https://github.com/dam5s/happymapper)-а
142
255
 
143
- > vi ./lib/moysklad/entities/country.rb
256
+ vi ./lib/moysklad/entities/country.rb
144
257
 
145
258
  4. Добавляем сущность в requirements
146
259
 
147
- > vi ./lib/moysklad/entities.rb
260
+ vi ./lib/moysklad/entities.rb
148
261
 
149
262
  5. Содаем автоматический ресурс (имя ресурса во множественном числе)
150
263
 
151
- > vi ./lib/moysklad/resources.rb
264
+ vi ./lib/moysklad/resources.rb
152
265
 
153
266
  6. Делаем spec для сущности и для ресурса.
154
267
 
155
- > vi ./spec/lib/moysklad/resources/countries_spec.rb
156
- > vi ./spec/lib/moysklad/entities/country_spec.rb
268
+ > vi ./spec/lib/moysklad/resources/countries_spec.rb
269
+ > vi ./spec/lib/moysklad/entities/country_spec.rb
157
270
 
158
271
  7. Проверяем что тесты проходят.
159
272
 
@@ -161,13 +274,13 @@
161
274
 
162
275
  ## Тестирование
163
276
 
164
- > bundle exec guard
277
+ > bundle exec guard
165
278
 
166
279
  ## Полезняшки
167
280
 
168
281
  Скрипт для быстрого доступа к сервисам моего склада
169
282
 
170
- > MS_LOGON=логин MS_PASSWORD=пароль ./script/rest.sh Country list > ./spec/fixtures/Country_list.raw
283
+ > MS_LOGON=логин MS_PASSWORD=пароль ./script/rest.sh Country list > ./spec/fixtures/Country_list.raw
171
284
 
172
285
  ## Ссылочки
173
286
 
@@ -175,3 +288,7 @@
175
288
  * Документация для разработчииков https://support.moysklad.ru/hc/ru/sections/200561443-Разработчикам
176
289
 
177
290
  ## Присылайте пул-реквесты )
291
+
292
+ ## Авторство
293
+
294
+ * Данил Письменный (brandymint.ru)
@@ -11,14 +11,24 @@ module Moysklad::Entities
11
11
  attribute :entityValueUuid, String
12
12
 
13
13
  # Объект описывающий тип атритуба
14
+ #
15
+ # @return Moysklad::Entities::AttributeMetadata
16
+ #
14
17
  def metadata universe
15
- universe.metadata.subresource_by_name(:GoodFolder).find metadataUuid
18
+ universe.metadata.subresource_by_name(:GoodFolder).find metadataUuid
16
19
  end
17
20
 
21
+ # Название свойства, полученное из AttributeMetadata
22
+ #
23
+ # @return String
24
+ #
18
25
  def attributeName universe
19
26
  metadata(universe).name
20
27
  end
21
28
 
29
+ # Значение свойства согласно его типу
30
+ #
31
+ # @return [String | Moysklad::Entities::CustomEntity | Integer | Decimal ]
22
32
  def get_value universe
23
33
  md = metadata universe
24
34
  case md.attrType
@@ -28,6 +38,7 @@ module Moysklad::Entities
28
38
  valueText
29
39
  when 'STRING'
30
40
  valueString
41
+ # TODO Другие типы
31
42
  else
32
43
  raise "Не известный тип мета-аттрибута #{md.uuid}: #{md.attrType}"
33
44
  end
@@ -15,10 +15,21 @@ module Moysklad::Entities
15
15
  attribute :required, Boolean
16
16
  attribute :dictionaryMetadataUuid, String
17
17
 
18
+ def is_dictionary?
19
+ attrType == 'ID_CUSTOM'
20
+ end
21
+
22
+ # Если это свойство типа ID_CUSTOM, то возвращается пользовательский справочник
23
+ #
24
+ # @return Moysklad::Entities::CustomEntityMetadata
18
25
  def dictionatyMetadata universe
26
+ raise "Это свойства не типа справочник" unless dictionaryMetadataUuid
19
27
  universe.custom_entity_metadata.find dictionaryMetadataUuid
20
28
  end
21
29
 
30
+ # Справочник к которому принадлежит это ссвойство
31
+ #
32
+ # @return Moysklad::Entities::EmbeddedEntityMetadata
22
33
  def entityMetadata universe
23
34
  universe.metadata.find entityMetadataUuid
24
35
  end
@@ -1,6 +1,7 @@
1
1
  # https://online.moysklad.ru/exchange/rest/ms/xml/CustomEntityMetadata/list
2
2
  #
3
- # Пользовательские справочники
3
+ # Пользовательский справочник
4
+ #
4
5
  module Moysklad::Entities
5
6
  class CustomEntityMetadata < Base
6
7
  include CommonObject
@@ -11,5 +11,10 @@ module Moysklad::Entities
11
11
  has_many :attributes, Moysklad::Entities::Attribute
12
12
  has_many :barcodes, Moysklad::Entities::Barcode
13
13
 
14
+ def good universe
15
+ cache :good, universe do
16
+ universe.good.find goodUuid
17
+ end
18
+ end
14
19
  end
15
20
  end
@@ -21,7 +21,7 @@ class Moysklad::Resources::Base
21
21
 
22
22
  # Возвращает список элементов как есть
23
23
  #
24
- # @return Array[Moysklad::Entities::Base]
24
+ # @return [Array of Moysklad::Entities::Base]
25
25
  def list params={}
26
26
  parse client.get list_path, params
27
27
  end
@@ -51,9 +51,11 @@ class Moysklad::Resources::Base
51
51
  #
52
52
  # @param [Moysklad::Entities::Base]
53
53
  #
54
- # @return [Moysklad::Entities::Base] созданная и возвращенная с сервера сущность
54
+ # Возвращается созданная на сервере сущность
55
+ #
56
+ # @return [Moysklad::Entities::Base]
55
57
  def create model
56
- raise "Должна быть модель типа Moysklad::Entities::Base" unless model.is_a? Moysklad::Entities::Bae
58
+ raise "Должна быть модель типа Moysklad::Entities::Base" unless model.is_a? Moysklad::Entities::Base
57
59
  parse client.put create_path, prepare_resource(model)
58
60
  end
59
61
 
@@ -11,7 +11,7 @@ module Moysklad::Resources
11
11
 
12
12
  # Автоматически подгружает постранично данныез из API и возвращает их все сразу.
13
13
  #
14
- # @return Array[Moysklad::Entities::Base]
14
+ # @return [Array of Moysklad::Entities::Base]
15
15
  def all
16
16
  @cached_list || pull_list
17
17
  end
@@ -26,7 +26,7 @@ module Moysklad::Resources
26
26
 
27
27
  # Перечень uuid-ов всех элементов в ресуресе
28
28
  #
29
- # @return Array[uuid]
29
+ # @return [Array of uuids]
30
30
  def uuids
31
31
  index.keys
32
32
  end
@@ -1,8 +1,19 @@
1
1
  module Moysklad::Resources::WhereFilter
2
+
3
+ # Возвращает список элементов по переданному фильтру.
4
+ # Например:
5
+ # > universe.features.where goodUuid: uuid
6
+ #
7
+ # @return [Array of Moysklad::Entities::Base]
8
+ #
2
9
  def where filter
3
10
  values.select { |v| filtered? v, filter }
4
11
  end
5
12
 
13
+ # Возвращает первый найденный по фильтру элемент или
14
+ # nil
15
+ #
16
+ # @return Moysklad::Entities::Base || nil
6
17
  def findWhere filter
7
18
  where(filter).first
8
19
  end
@@ -1,17 +1,27 @@
1
1
  module Moysklad
2
2
  class Universe
3
3
  cattr_reader :resources_list
4
+ attr_reader :client
4
5
 
5
- def class_by_resource resource
6
- "Moysklad::Resources::#{resource.to_s.singularize.capitalize}".constantize
7
- end
8
-
6
+ # @param client[Moysklad::Client]
9
7
  def initialize client: nil
10
8
  raise "Должен быть client[Moysklad::Client]" unless client.is_a? Moysklad::Client
11
9
  @client = client
12
10
  @resources={}
13
11
  end
14
12
 
13
+ def self.client_class
14
+ Client
15
+ end
16
+
17
+ # Ленивое создание universe
18
+ #
19
+ # @param login
20
+ # @param password
21
+ def self.build login: nil, password: nil
22
+ new client: client_class.new(login: login, password: password)
23
+ end
24
+
15
25
  @@resources_list = []
16
26
  Moysklad::Resources.resources.each do |resource_klass|
17
27
  @@resources_list << resource_klass.pluralized_type.to_sym
@@ -20,10 +30,10 @@ module Moysklad
20
30
  end
21
31
  end
22
32
 
23
- private
33
+ def class_by_resource resource
34
+ "Moysklad::Resources::#{resource.to_s.singularize.capitalize}".constantize
35
+ end
24
36
 
25
- attr_reader :client
26
-
27
37
  end
28
38
 
29
39
  end
@@ -1,3 +1,3 @@
1
1
  module Moysklad
2
- VERSION = "0.1.3"
2
+ VERSION = "0.1.4"
3
3
  end
@@ -25,4 +25,20 @@ describe Moysklad::Universe do
25
25
  expect(subject.resources_list).to include(:features)
26
26
  end
27
27
 
28
+ describe '.build' do
29
+ let(:login) { 'alala' }
30
+ let(:password) { 'ulala' }
31
+
32
+ subject { described_class.build login: login, password: password }
33
+
34
+ it do
35
+ expect(subject).to be_a Moysklad::Universe
36
+ end
37
+
38
+ it do
39
+ expect(subject.client).to be_a Moysklad::Client
40
+ end
41
+
42
+ end
43
+
28
44
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: moysklad
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Danil Pismenny
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-12-04 00:00:00.000000000 Z
11
+ date: 2014-12-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler