oddb2xml 2.1.7 → 2.1.8

Sign up to get free protection for your applications and to get access to all the features.
data/lib/oddb2xml/cli.rb CHANGED
@@ -13,17 +13,17 @@ require 'date' # for today
13
13
  module Oddb2xml
14
14
 
15
15
  class Cli
16
+ attr_reader :options
16
17
  SUBJECTS = %w[product article]
17
18
  ADDITIONS = %w[substance limitation interaction code]
18
19
  OPTIONALS = %w[fi fi_product]
19
- LANGUAGES = %w[DE FR] # EN does not exist
20
20
  def initialize(args)
21
21
  @options = args
22
22
  Oddb2xml.save_options(@options)
23
23
  @mutex = Mutex.new
24
24
  # product
25
- @items = {} # Items from Preparations.xml in BAG
26
- @index = {} # Base index from swissINDEX
25
+ @items = {} # Items from Preparations.xml in BAG, using GTINs as key
26
+ @refdata_types = {} # Base index from refdata
27
27
  @flags = {} # narcotics flag files repo
28
28
  @lppvs = {} # lppv.txt from files repo
29
29
  @infos = {} # [option] FI from SwissmedicInfo
@@ -36,9 +36,6 @@ module Oddb2xml
36
36
  # addres
37
37
  @companies = [] # betrieb
38
38
  @people = [] # medizinalperson
39
- LANGUAGES.each do |lang|
40
- @index[lang] = {}
41
- end
42
39
  @_message = false
43
40
  end
44
41
  def run
@@ -69,14 +66,12 @@ module Oddb2xml
69
66
  threads << download(:bm_update) # oddb2xml_files
70
67
  threads << download(:lppv) # oddb2xml_files
71
68
  threads << download(:bag) # bag.e-mediat
72
- LANGUAGES.each do |lang|
73
- types.each do |type|
74
- threads << download(:index, type, lang) # swissindex
75
- end
69
+ types.each do |type|
70
+ threads << download(:refdata, type) # refdata
76
71
  end
77
72
  end
78
73
  begin
79
- threads.map(&:join)
74
+ # threads.map(&:join) # TODO
80
75
  rescue SystemExit
81
76
  @mutex.synchronize do
82
77
  if @_message
@@ -95,6 +90,7 @@ module Oddb2xml
95
90
  private
96
91
  def build
97
92
  Oddb2xml.log("Start build")
93
+ puts "#{File.basename(__FILE__)}:#{__LINE__}: @refdata_types.keys #{@refdata_types.keys}"
98
94
  begin
99
95
  # require 'pry'; binding.pry
100
96
  @_files = {"calc"=>"oddb_calc.xml"} if @options[:calc] and not @options[:extended]
@@ -109,14 +105,11 @@ module Oddb2xml
109
105
  builder.people = @people
110
106
  else # product
111
107
  if @options[:format] != :dat
112
- index = {}
113
- LANGUAGES.each do |lang|
114
- index[lang] = {} unless index[lang]
115
- types.each do |type|
116
- index[lang].merge!(@index[lang][type]) if @index[lang][type]
117
- end
108
+ refdata = {}
109
+ types.each do |type|
110
+ refdata.merge!(@refdata_types[type]) if @refdata_types[type]
118
111
  end
119
- builder.index = index
112
+ builder.refdata = refdata
120
113
  builder.subject = sbj
121
114
  end
122
115
  # common sources
@@ -136,12 +129,9 @@ module Oddb2xml
136
129
  output = ''
137
130
  if !@options[:address] and (@options[:format] == :dat)
138
131
  types.each do |type|
139
- index = {}
140
- LANGUAGES.each do |lang|
141
- index[lang] = @index[lang][type]
142
- end
132
+ refdata1 = {}
143
133
  _sbj = (type == :pharma ? :dat : :with_migel_dat)
144
- builder.index = index
134
+ builder.refdata = @refdata_types[type]
145
135
  builder.subject = _sbj
146
136
  builder.ean14 = @options[:ean14]
147
137
  if type == :nonpharma
@@ -166,11 +156,11 @@ module Oddb2xml
166
156
  raise Interrupt
167
157
  end
168
158
  end
169
- def download(what, type=nil, lang=nil)
159
+ def download(what, type=nil)
170
160
  case what
171
161
  when :company, :person
172
162
  var = (what == :company ? 'companies' : 'people')
173
- Thread.new do
163
+ begin # instead of Thread.new do
174
164
  downloader = MedregbmDownloader.new(what)
175
165
  str = downloader.download
176
166
  self.instance_variable_set(
@@ -179,7 +169,7 @@ module Oddb2xml
179
169
  )
180
170
  end
181
171
  when :fachinfo
182
- Thread.new do
172
+ begin # instead of Thread.new do
183
173
  downloader = SwissmedicInfoDownloader.new
184
174
  xml = downloader.download
185
175
  @mutex.synchronize do
@@ -190,7 +180,7 @@ module Oddb2xml
190
180
  end
191
181
  when :orphan, :fridge
192
182
  var = what.to_s + 's'
193
- Thread.new do
183
+ begin # instead of Thread.new do
194
184
  downloader = SwissmedicDownloader.new(what)
195
185
  bin = downloader.download
196
186
  self.instance_variable_set(
@@ -200,7 +190,7 @@ module Oddb2xml
200
190
  # Oddb2xml.log("SwissmedicExtractor added #{self.instance_variable_get("@#{var}".intern).size} #{var}. File #{bin} was #{File.size(bin)} bytes")
201
191
  end
202
192
  when :interaction
203
- Thread.new do
193
+ begin # instead of Thread.new do
204
194
  downloader = EphaDownloader.new
205
195
  str = downloader.download
206
196
  @mutex.synchronize do
@@ -209,7 +199,7 @@ module Oddb2xml
209
199
  end
210
200
  end
211
201
  when :migel
212
- Thread.new do
202
+ begin # instead of Thread.new do
213
203
  downloader = MigelDownloader.new
214
204
  bin = downloader.download
215
205
  @mutex.synchronize do
@@ -218,7 +208,7 @@ module Oddb2xml
218
208
  end
219
209
  end
220
210
  when :package
221
- Thread.new do
211
+ begin # instead of Thread.new do
222
212
  downloader = SwissmedicDownloader.new(:package, @options)
223
213
  bin = downloader.download
224
214
  @mutex.synchronize do
@@ -228,7 +218,7 @@ module Oddb2xml
228
218
  end
229
219
  end
230
220
  when :bm_update
231
- Thread.new do
221
+ begin # instead of Thread.new do
232
222
  downloader = BMUpdateDownloader.new
233
223
  str = downloader.download
234
224
  @mutex.synchronize do
@@ -237,7 +227,7 @@ module Oddb2xml
237
227
  end
238
228
  end
239
229
  when :lppv
240
- Thread.new do
230
+ begin # instead of Thread.new do
241
231
  downloader = LppvDownloader.new
242
232
  str = downloader.download
243
233
  @mutex.synchronize do
@@ -246,31 +236,33 @@ module Oddb2xml
246
236
  end
247
237
  end
248
238
  when :bag
249
- Thread.new do
239
+ begin # instead of Thread.new do
250
240
  downloader = BagXmlDownloader.new(@options)
251
241
  xml = downloader.download
252
242
  @mutex.synchronize do
253
243
  hsh = BagXmlExtractor.new(xml).to_hash
254
244
  @items = hsh
255
- Oddb2xml.log("BagXmlDownloader added #{@items.size} items")
245
+ Oddb2xml.log("BagXmlDownloader added #{@items.size} items. #{@items.keys}")
256
246
  end
257
247
  end
258
248
  when :zurrose
259
- Thread.new do
249
+ begin # instead of Thread.new do
260
250
  downloader = ZurroseDownloader.new(@options, @options[:transfer_dat])
261
251
  xml = downloader.download
262
252
  Oddb2xml.log("zurrose xml #{xml.size} bytes")
263
253
  @mutex.synchronize do
264
254
  hsh = ZurroseExtractor.new(xml, @options[:extended]).to_hash
255
+ Oddb2xml.log("zurrose added #{hsh.size} items from xml with #{xml.size} bytes")
265
256
  @infos_zur_rose = hsh
266
- Oddb2xml.log("zurrose added #{@infos_zur_rose.size} items from xml with #{xml.size} bytes")
267
257
  end
268
258
  end
269
- when :index
270
- Thread.new do
271
- downloader = SwissIndexDownloader.new(@options, type, lang)
259
+ when :refdata
260
+ begin # instead of Thread.new do
261
+ downloader = RefdataDownloader.new(@options, type)
272
262
  begin
273
263
  xml = downloader.download
264
+ Oddb2xml.log("refdata #{type} xml #{xml.size} bytes")
265
+ xml
274
266
  rescue SystemExit
275
267
  @mutex.synchronize do
276
268
  unless @_message # hook only one exit
@@ -280,8 +272,9 @@ module Oddb2xml
280
272
  end
281
273
  end
282
274
  @mutex.synchronize do
283
- hsh = SwissIndexExtractor.new(xml, type).to_hash
284
- @index[lang][type] = hsh
275
+ hsh = RefdataExtractor.new(xml, type).to_hash
276
+ @refdata_types[type] = hsh
277
+ Oddb2xml.log("refdata #{type} added #{hsh.size} keys now #{@refdata_types.keys} items from xml with #{xml.size} bytes")
285
278
  end
286
279
  end
287
280
  end
@@ -335,19 +328,16 @@ module Oddb2xml
335
328
  lines << ParseComposition.report
336
329
  end
337
330
  unless @options[:address]
338
- LANGUAGES.each do |lang|
339
- lines << lang
340
- types.each do |type|
341
- if @index[lang][type]
342
- indices = @index[lang][type].values.flatten.length
343
- if type == :nonpharma
344
- migel_xls = @migel.values.compact.select{|m| !m[:pharmacode].empty? }.map{|m| m[:pharmacode] }
345
- nonpharmas = @index[lang][type].keys
346
- indices += (migel_xls - nonpharmas).length # ignore duplicates, null
347
- lines << sprintf("\tNonPharma products: %i", indices)
348
- else
349
- lines << sprintf("\tPharma products: %i", indices)
350
- end
331
+ types.each do |type|
332
+ if @refdata_types[type]
333
+ indices = @refdata_types[type].values.flatten.length
334
+ if type == :nonpharma
335
+ migel_xls = @migel.values.compact.select{|m| !m[:pharmacode].empty? }.map{|m| m[:pharmacode] }
336
+ nonpharmas = @refdata_types[type].keys
337
+ indices += (migel_xls - nonpharmas).length # ignore duplicates, null
338
+ lines << sprintf("\tNonPharma products: %i", indices)
339
+ else
340
+ lines << sprintf("\tPharma products: %i", indices)
351
341
  end
352
342
  end
353
343
  end
@@ -365,7 +355,7 @@ module Oddb2xml
365
355
  end
366
356
  puts lines.join("\n")
367
357
  end
368
- def types # swissindex
358
+ def types # RefData
369
359
  @_types ||=
370
360
  if @options[:nonpharma]
371
361
  [:pharma, :nonpharma]
@@ -1,5 +1,7 @@
1
1
  # encoding: utf-8
2
2
 
3
+ require 'net/ntlm/version' # needed to avoid error: uninitialized constant Net::NTLM::VERSION
4
+ require 'rubyntlm'
3
5
  require 'mechanize'
4
6
  require 'zip'
5
7
  require 'savon'
@@ -34,7 +36,7 @@ module Oddb2xml
34
36
  end
35
37
  end
36
38
  class Downloader
37
- attr_reader :type
39
+ attr_reader :type, :agent
38
40
  def initialize(options={}, url=nil)
39
41
  @options = options
40
42
  @url = url
@@ -55,6 +57,7 @@ module Oddb2xml
55
57
  cert_store.add_file(File.expand_path('../../../tools/cacert.pem', __FILE__))
56
58
  @agent.cert_store = cert_store
57
59
  end
60
+ @agent.verify_mode = OpenSSL::SSL::VERIFY_NONE
58
61
  end
59
62
  protected
60
63
  def retrievable?
@@ -133,14 +136,14 @@ module Oddb2xml
133
136
  class BMUpdateDownloader < Downloader
134
137
  include DownloadMethod
135
138
  def download
136
- @url ||= 'https://raw.github.com/zdavatz/oddb2xml_files/master/BM_Update.txt'
139
+ @url ||= 'https://raw.githubusercontent.com/zdavatz/oddb2xml_files/master/BM_Update.txt'
137
140
  download_as('oddb2xml_files_bm_update.txt', 'r')
138
141
  end
139
142
  end
140
143
  class LppvDownloader < Downloader
141
144
  include DownloadMethod
142
145
  def download
143
- @url ||= 'https://raw.github.com/zdavatz/oddb2xml_files/master/LPPV.txt'
146
+ @url ||= 'https://raw.githubusercontent.com/zdavatz/oddb2xml_files/master/LPPV.txt'
144
147
  download_as('oddb2xml_files_lppv.txt', 'r')
145
148
  end
146
149
  end
@@ -203,11 +206,10 @@ module Oddb2xml
203
206
  content
204
207
  end
205
208
  end
206
- class SwissIndexDownloader < Downloader
207
- def initialize(options={}, type=:pharma, lang='DE')
209
+ class RefdataDownloader < Downloader
210
+ def initialize(options={}, type=:pharma)
208
211
  @type = (type == :pharma ? 'Pharma' : 'NonPharma')
209
- @lang = lang
210
- url = "https://index.ws.e-mediat.net/Swissindex/#{@type}/ws_#{@type}_V101.asmx?WSDL"
212
+ url = "http://refdatabase.refdata.ch/Service/Article.asmx?WSDL"
211
213
  super(options, url)
212
214
  end
213
215
  def init
@@ -222,19 +224,21 @@ module Oddb2xml
222
224
  end
223
225
  def download
224
226
  begin
225
- filename = "swissindex_#{@type}_#{@lang}.xml"
226
- file2save = File.join(Downloads, "swissindex_#{@type}_#{@lang}.xml")
227
+ filename = "refdata_#{@type}.xml"
228
+ file2save = File.join(Downloads, "refdata_#{@type}.xml")
229
+ soap = %(<?xml version="1.0" encoding="UTF-8"?>
230
+ <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://refdatabase.refdata.ch/Article_in" xmlns:ns2="http://refdatabase.refdata.ch/">
231
+ <SOAP-ENV:Body>
232
+ <ns2:DownloadArticleInput>
233
+ <ns1:ATYPE>#{@type.upcase}</ns1:ATYPE>
234
+ </ns2:DownloadArticleInput>
235
+ </SOAP-ENV:Body>
236
+ </SOAP-ENV:Envelope>
237
+ </ns1:ATYPE></ns2:DownloadArticleInput></SOAP-ENV:Body>
238
+ )
227
239
  return IO.read(file2save) if Oddb2xml.skip_download? and File.exists?(file2save)
228
240
  FileUtils.rm_f(file2save, :verbose => false)
229
- soap = <<XML
230
- <?xml version="1.0" encoding="utf-8"?>
231
- <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
232
- <soap:Body>
233
- <lang xmlns="http://swissindex.e-mediat.net/Swissindex#{@type}_out_V101">#{@lang}</lang>
234
- </soap:Body>
235
- </soap:Envelope>
236
- XML
237
- response = @client.call(:download_all, :xml => soap)
241
+ response = @client.call(:download, :xml => soap)
238
242
  if response.success?
239
243
  if xml = response.to_xml
240
244
  response = nil # win
@@ -282,7 +286,7 @@ XML
282
286
  begin
283
287
  FileUtils.rm(File.expand_path(file), :verbose => !defined?(RSpec)) if File.exists?(File.expand_path(file))
284
288
  page = @agent.get(@url)
285
- if link_node = page.search(@xpath).first
289
+ if !page.class.is_a?(String) and link_node = page.search(@xpath).first
286
290
  link = Mechanize::Page::Link.new(link_node, @agent, page)
287
291
  response = link.click
288
292
  response.save_as(file)
@@ -8,7 +8,6 @@ require 'csv'
8
8
  require 'oddb2xml/xml_definitions'
9
9
 
10
10
  module Oddb2xml
11
- Strip_For_Sax_Machine = '<?xml version="1.0" encoding="utf-8"?>'+"\n"
12
11
  module TxtExtractorMethods
13
12
  def initialize(str)
14
13
  @io = StringIO.new(str)
@@ -83,8 +82,9 @@ module Oddb2xml
83
82
  phar = pac.Pharmacode
84
83
  phar = correct_code(phar.to_s, 7)
85
84
  ean = pac.GTIN
85
+ binding.pry if pac.GTIN.to_s.eql? '7680324750190' # lansoyl
86
86
  search_key = phar.to_i != 0 ? phar : ean
87
- # as common key with swissINDEX
87
+ # as common key with RefData Pharma/NonPharma data
88
88
  item[:pharmacodes] << phar
89
89
  # packages
90
90
  exf = {:price => '', :valid_date => '', :price_code => ''}
@@ -178,38 +178,34 @@ module Oddb2xml
178
178
  end
179
179
  end
180
180
 
181
- class SwissIndexExtractor < Extractor
181
+ class RefdataExtractor < Extractor
182
182
  def initialize(xml, type)
183
183
  @type = (type == :pharma ? 'PHARMA' : 'NONPHARMA')
184
184
  super(xml)
185
185
  end
186
186
  def to_hash
187
187
  data = {}
188
- result = PharmaEntry.parse(@xml.sub(Strip_For_Sax_Machine, ''), :lazy => true)
189
- items = result.PHARMA.ITEM
188
+ result = SwissRegArticleEntry.parse(@xml.sub(Strip_For_Sax_Machine, ''), :lazy => true)
189
+ items = result.ARTICLE.ITEM
190
190
  items.each do |pac|
191
191
  item = {}
192
192
  item[:refdata] = true
193
- item[:_type] = @type.downcase.intern
193
+ item[:_type] = (typ = pac.ATYPE.downcase.to_sym) ? typ: ''
194
194
  item[:ean] = (gtin = pac.GTIN) ? gtin: ''
195
195
  item[:pharmacode] = (phar = pac.PHAR) ? phar: ''
196
- item[:stat_date] = (date = pac.SDATE) ? date: ''
197
- item[:lang] = (lang = pac.LANG) ? lang: ''
198
- item[:desc] = (dscr = pac.DSCR) ? dscr: ''
196
+ item[:last_change] = (date = Time.parse(pac.DT).to_s) ? date: '' # Date and time of last data change
197
+ item[:desc_de] = (dscr = pac.NAME_DE) ? dscr: ''
198
+ item[:desc_fr] = (dscr = pac.NAME_FR) ? dscr: ''
199
199
  item[:atc_code] = (code = pac.ATC) ? code.to_s : ''
200
- # as quantity text
201
- item[:additional_desc] = (dscr = pac.ADDSCR) ? dscr: ''
202
- if comp = pac.COMP
203
- item[:company_name] = (nam = comp.NAME) ? nam: ''
204
- item[:company_ean] = (gln = comp.GLN) ? gln: ''
205
- end
200
+ item[:company_name] = (nam = pac.AUTH_HOLDER_NAME) ? nam: ''
201
+ item[:company_ean] = (gln = pac.AUTH_HOLDER_GLN) ? gln: ''
206
202
  unless item[:pharmacode].empty?
207
203
  item[:pharmacode] = correct_code(item[:pharmacode].to_s, 7)
208
204
  unless data[item[:pharmacode]] # pharmacode => GTINs
209
- data[item[:pharmacode]] = []
205
+ data[item[:ean]] = []
210
206
  end
211
- data[item[:pharmacode]] << item
212
207
  end
208
+ data[item[:ean]] = item
213
209
  end
214
210
  data
215
211
  end
@@ -327,13 +323,15 @@ module Oddb2xml
327
323
  @sheet.each_with_index do |row, i|
328
324
  next if i.zero?
329
325
  phar = correct_code(row[1].to_s.gsub(/[^0-9]/, ''), 7)
330
- data[phar] = {
326
+ ean = row[0].to_i.to_s
327
+ ean = '9999'+phar+'99' unless ean.length == 13
328
+ data[ean] = {
331
329
  :refdata => true,
332
- :ean => row[0].to_i.to_s,
330
+ :ean => ean,
333
331
  :pharmacode => phar,
334
332
  :desc_de => row[3],
335
333
  :desc_fr => row[4],
336
- :additional_desc => row[5], # quantity
334
+ :quantity => row[5], # quantity
337
335
  :company_name => row[6],
338
336
  :company_ean => row[7].to_i.to_s,
339
337
  }
@@ -497,7 +495,7 @@ module Oddb2xml
497
495
  :ean => ean13,
498
496
  :vat => line[96],
499
497
  :description => line[10..59].sub(/\s+$/, ''),
500
- :additional_desc => '',
498
+ :quantity => '',
501
499
  :pharmacode => pharma_code,
502
500
  :price => sprintf("%.2f", line[60,6].gsub(/(\d{2})$/, '.\1').to_f),
503
501
  :pub_price => sprintf("%.2f", line[66,6].gsub(/(\d{2})$/, '.\1').to_f),
data/lib/oddb2xml/util.rb CHANGED
@@ -33,7 +33,7 @@ module Oddb2xml
33
33
  end
34
34
 
35
35
  def Oddb2xml.log(msg)
36
- return unless @options[:log]
36
+ # return unless @options[:log]
37
37
  $stdout.puts "#{Time.now.strftime("%Y-%m-%d %H:%M:%S")}: #{msg}"
38
38
  $stdout.flush
39
39
  end
@@ -47,6 +47,7 @@ module Oddb2xml
47
47
  end
48
48
 
49
49
  def Oddb2xml.skip_download(file)
50
+ return false if defined?(VCR)
50
51
  dest = "#{Downloads}/#{File.basename(file)}"
51
52
  if File.exists?(dest)
52
53
  FileUtils.cp(dest, file, :verbose => false, :preserve => true) unless File.expand_path(file).eql?(dest)
@@ -1,3 +1,3 @@
1
1
  module Oddb2xml
2
- VERSION = "2.1.7"
2
+ VERSION = "2.1.8"
3
3
  end
@@ -3,6 +3,8 @@
3
3
 
4
4
  require 'sax-machine'
5
5
 
6
+ Strip_For_Sax_Machine = '<?xml version="1.0" encoding="utf-8"?>'+"\n"
7
+
6
8
  class PriceElement
7
9
  include SAXMachine
8
10
  element :Price
@@ -210,18 +212,6 @@ class ItemContent
210
212
  element :COMP, :class => CompElement
211
213
  end
212
214
 
213
- class PharmaContent
214
- include SAXMachine
215
- attribute :CREATION_DATETIME
216
- elements :ITEM, :class => ItemContent
217
- end
218
-
219
- class PharmaEntry
220
- include SAXMachine
221
- element :CREATION_DATETIME
222
- element :PHARMA, :class => PharmaContent
223
- end
224
-
225
215
  class MedicalInformationContent
226
216
  include SAXMachine
227
217
  attribute :type
@@ -230,6 +220,7 @@ class MedicalInformationContent
230
220
  element :title
231
221
  element :authHolder
232
222
  element :authNrs
223
+ element :authNrs
233
224
  element :style
234
225
  element :content
235
226
  end
@@ -249,3 +240,29 @@ class MedicalInformationsEntry
249
240
  element :medicalInformations, :class => MedicalInformationsContent
250
241
  end
251
242
 
243
+ class SwissRegItemContentContent
244
+ include SAXMachine
245
+ attribute :DT
246
+ element :ATYPE
247
+ element :GTIN
248
+ element :PHAR
249
+ element :SWMC_AUTHNR
250
+ element :NAME_DE
251
+ element :NAME_FR
252
+ element :ADDSCR
253
+ element :ATC
254
+ element :AUTH_HOLDER_NAME
255
+ element :AUTH_HOLDER_GLN
256
+ end
257
+
258
+ class SwissRegArticleContent
259
+ include SAXMachine
260
+ attribute :CREATION_DATETIME
261
+ elements :ITEM, :class => SwissRegItemContentContent
262
+ end
263
+
264
+ class SwissRegArticleEntry
265
+ include SAXMachine
266
+ element :CREATION_DATETIME
267
+ element :ARTICLE, :class => SwissRegArticleContent
268
+ end
data/oddb2xml.gemspec CHANGED
@@ -20,20 +20,24 @@ Gem::Specification.new do |spec|
20
20
  # We fix the version of the spec to newer versions only in the third position
21
21
  # hoping that these version fix only security/severe bugs
22
22
  # Consulted the Gemfile.lock to get
23
- spec.add_dependency 'rubyzip', '~> 1.1.3'
24
- spec.add_dependency 'archive-tar-minitar', '~> 0.5.2'
25
- spec.add_dependency 'mechanize', '~> 2.5.1'
26
- spec.add_dependency 'nokogiri'
27
- spec.add_dependency 'savon', '~> 2.4.0'
28
- spec.add_dependency 'spreadsheet', '~> 1.0.0'
29
- spec.add_dependency 'rubyXL', '~> 3.3.1'
30
- spec.add_dependency 'sax-machine', '~> 0.1.0'
31
- spec.add_dependency 'parslet', '~> 1.7.0'
32
-
23
+ spec.add_dependency 'rubyzip'#, '~> 1.1.3'
24
+ spec.add_dependency 'archive-tar-minitar'#, '~> 0.5.2'
25
+ spec.add_dependency 'mechanize'#, '~> 2.5.1'
26
+ spec.add_dependency 'nokogiri'#, '~> 1.6.0'
27
+ spec.add_dependency 'savon'#, '~> 2.11.0'
28
+ spec.add_dependency 'spreadsheet'#, '~> 1.0.0'
29
+ spec.add_dependency 'rubyXL'#, '~> 3.3.1'
30
+ spec.add_dependency 'sax-machine'#, '~> 0.1.0'
31
+ spec.add_dependency 'parslet'#, '~> 1.7.0'
32
+ spec.add_dependency 'rubyntlm'#, '>= 0.3.2'
33
+ spec.add_dependency 'multi_json'#, '>= 0.3.2'
34
+
33
35
  spec.add_development_dependency "bundler"
34
36
  spec.add_development_dependency "rake"
35
37
  spec.add_development_dependency "rspec"
36
38
  spec.add_development_dependency "webmock"
37
39
  spec.add_development_dependency "rdoc"
40
+ spec.add_development_dependency "vcr"
41
+ spec.add_development_dependency "timecop"
38
42
  end
39
43