dech 0.0.7 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/dech.rb +0 -4
- data/lib/dech/ponpare/ftps.rb +1 -1
- data/lib/dech/version.rb +1 -1
- metadata +1 -12
- data/lib/dech/csvio.rb +0 -15
- data/lib/dech/price_uploader/dena.rb +0 -10
- data/lib/dech/price_uploader/dena/ftp.rb +0 -65
- data/lib/dech/price_uploader/ponpare.rb +0 -10
- data/lib/dech/price_uploader/ponpare/ftps.rb +0 -67
- data/spec/dech/csvio_spec.rb +0 -44
- data/spec/dech/price_uploader/dena/ftp_spec.rb +0 -111
- data/spec/dech/price_uploader/ponpare/ftps_spec.rb +0 -141
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f36e6b9750c050e367733b9edf16626d82783b84
|
4
|
+
data.tar.gz: a048e92ecc2d2142afbe6c7229b54ba90fb10be2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0f38ccc1618487ecd62f480b1704b3e35c74bade0dd4fec8fc91bef97b4a226e0bcb3c1c98d2a500f21cccc5f467120b14d257dec9e4d67659c690963f2e7e86
|
7
|
+
data.tar.gz: 3bac0655573dba667df21ec5c68fa8a59372027a39118d8f8c339456950781cfa44cb5c4a871f0e63250499000222dc5b6a7a2cfe6f73fd6f5855691d73227e3
|
data/lib/dech.rb
CHANGED
data/lib/dech/ponpare/ftps.rb
CHANGED
data/lib/dech/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dech
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- OSA Shunsuke
|
@@ -112,7 +112,6 @@ files:
|
|
112
112
|
- dech.gemspec
|
113
113
|
- lib/dech.rb
|
114
114
|
- lib/dech/csv.rb
|
115
|
-
- lib/dech/csvio.rb
|
116
115
|
- lib/dech/dena.rb
|
117
116
|
- lib/dech/dena/csv.rb
|
118
117
|
- lib/dech/dena/ftp.rb
|
@@ -121,10 +120,6 @@ files:
|
|
121
120
|
- lib/dech/ponpare/csv.rb
|
122
121
|
- lib/dech/ponpare/ftps.rb
|
123
122
|
- lib/dech/price_uploader.rb
|
124
|
-
- lib/dech/price_uploader/dena.rb
|
125
|
-
- lib/dech/price_uploader/dena/ftp.rb
|
126
|
-
- lib/dech/price_uploader/ponpare.rb
|
127
|
-
- lib/dech/price_uploader/ponpare/ftps.rb
|
128
123
|
- lib/dech/rakuten.rb
|
129
124
|
- lib/dech/rakuten/csv.rb
|
130
125
|
- lib/dech/rakuten/ftp.rb
|
@@ -133,7 +128,6 @@ files:
|
|
133
128
|
- lib/dech/yahoo/csv.rb
|
134
129
|
- lib/dech/yahoo/ftp.rb
|
135
130
|
- spec/dech/csv_spec.rb
|
136
|
-
- spec/dech/csvio_spec.rb
|
137
131
|
- spec/dech/dena/csv_spec.rb
|
138
132
|
- spec/dech/dena/ftp_spec.rb
|
139
133
|
- spec/dech/dena_spec.rb
|
@@ -141,8 +135,6 @@ files:
|
|
141
135
|
- spec/dech/ponpare/csv_spec.rb
|
142
136
|
- spec/dech/ponpare/ftps_spec.rb
|
143
137
|
- spec/dech/ponpare_spec.rb
|
144
|
-
- spec/dech/price_uploader/dena/ftp_spec.rb
|
145
|
-
- spec/dech/price_uploader/ponpare/ftps_spec.rb
|
146
138
|
- spec/dech/rakuten/csv_spec.rb
|
147
139
|
- spec/dech/rakuten/ftp_spec.rb
|
148
140
|
- spec/dech/rakuten_spec.rb
|
@@ -177,7 +169,6 @@ specification_version: 4
|
|
177
169
|
summary: Utilities gem for e-commerce mall in Japan.
|
178
170
|
test_files:
|
179
171
|
- spec/dech/csv_spec.rb
|
180
|
-
- spec/dech/csvio_spec.rb
|
181
172
|
- spec/dech/dena/csv_spec.rb
|
182
173
|
- spec/dech/dena/ftp_spec.rb
|
183
174
|
- spec/dech/dena_spec.rb
|
@@ -185,8 +176,6 @@ test_files:
|
|
185
176
|
- spec/dech/ponpare/csv_spec.rb
|
186
177
|
- spec/dech/ponpare/ftps_spec.rb
|
187
178
|
- spec/dech/ponpare_spec.rb
|
188
|
-
- spec/dech/price_uploader/dena/ftp_spec.rb
|
189
|
-
- spec/dech/price_uploader/ponpare/ftps_spec.rb
|
190
179
|
- spec/dech/rakuten/csv_spec.rb
|
191
180
|
- spec/dech/rakuten/ftp_spec.rb
|
192
181
|
- spec/dech/rakuten_spec.rb
|
data/lib/dech/csvio.rb
DELETED
@@ -1,15 +0,0 @@
|
|
1
|
-
# coding: utf-8
|
2
|
-
|
3
|
-
require 'csv'
|
4
|
-
require 'stringio'
|
5
|
-
|
6
|
-
module Dech
|
7
|
-
class CSVIO < StringIO
|
8
|
-
class << self
|
9
|
-
def generate(args={})
|
10
|
-
csv_string = ::CSV.generate{|csv| yield(csv) if block_given? }
|
11
|
-
self.new(csv_string.encode(args[:encoding] || Encoding::Windows_31J))
|
12
|
-
end
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
@@ -1,65 +0,0 @@
|
|
1
|
-
# coding: utf-8
|
2
|
-
|
3
|
-
require 'dech/csvio'
|
4
|
-
require 'net/ftp'
|
5
|
-
|
6
|
-
module Dech
|
7
|
-
module PriceUploader
|
8
|
-
module Dena
|
9
|
-
class FTP
|
10
|
-
HEADERS = %w(Code exhibittype Price KtaiPrice)
|
11
|
-
|
12
|
-
attr_accessor :username, :host, :path
|
13
|
-
|
14
|
-
def initialize(args={})
|
15
|
-
@products = args[:products] || []
|
16
|
-
@username = args[:username]
|
17
|
-
@password = args[:password]
|
18
|
-
@host = args[:host] || "bcmaster1.dena.ne.jp"
|
19
|
-
@path = args[:path] || "/data.csv"
|
20
|
-
end
|
21
|
-
|
22
|
-
def ready?
|
23
|
-
true
|
24
|
-
end
|
25
|
-
|
26
|
-
def csv
|
27
|
-
Dech::CSVIO.generate do |csv|
|
28
|
-
csv << HEADERS
|
29
|
-
@products.each do |product|
|
30
|
-
csv << [product[:id], "MX", product[:price], product[:price]]
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
def save_csv_as(filename)
|
36
|
-
FileUtils.mkdir_p(File.dirname(filename))
|
37
|
-
File.open(filename, "w:windows-31j") do |file|
|
38
|
-
file << csv.string
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
def upload!
|
43
|
-
ftp_connection{|ftp| ftp.storlines("STOR #{@path}", csv) }
|
44
|
-
true
|
45
|
-
end
|
46
|
-
|
47
|
-
def upload
|
48
|
-
ready? && upload!
|
49
|
-
end
|
50
|
-
|
51
|
-
private
|
52
|
-
|
53
|
-
def ftp_connection(&block)
|
54
|
-
ftp = Net::FTP.new
|
55
|
-
ftp.connect(@host)
|
56
|
-
ftp.login(@username, @password)
|
57
|
-
|
58
|
-
yield(ftp)
|
59
|
-
ensure
|
60
|
-
ftp.close
|
61
|
-
end
|
62
|
-
end
|
63
|
-
end
|
64
|
-
end
|
65
|
-
end
|
@@ -1,67 +0,0 @@
|
|
1
|
-
# coding: utf-8
|
2
|
-
|
3
|
-
require "dech/csvio"
|
4
|
-
require "double_bag_ftps"
|
5
|
-
|
6
|
-
module Dech
|
7
|
-
module PriceUploader
|
8
|
-
module Ponpare
|
9
|
-
class FTPS
|
10
|
-
HEADERS = %w(コントロールカラム 商品管理ID(商品URL) 販売価格)
|
11
|
-
|
12
|
-
attr_accessor :username, :host, :path
|
13
|
-
|
14
|
-
def initialize(args={})
|
15
|
-
@products = args[:products] || []
|
16
|
-
@username = args[:username]
|
17
|
-
@password = args[:password]
|
18
|
-
@host = args[:host] || "ftps.ponparemall.com"
|
19
|
-
@path = args[:path] || "/item.csv"
|
20
|
-
end
|
21
|
-
|
22
|
-
def ready?
|
23
|
-
ftps_connection{|ftps| !ftps.nlst(File.dirname(@path)).include?(@path) }
|
24
|
-
end
|
25
|
-
|
26
|
-
def csv
|
27
|
-
Dech::CSVIO.generate do |csv|
|
28
|
-
csv << HEADERS
|
29
|
-
@products.each do |product|
|
30
|
-
csv << ["u", product[:id].to_s.downcase, product[:price]]
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
def save_csv_as(filename)
|
36
|
-
FileUtils.mkdir_p(File.dirname(filename))
|
37
|
-
File.open(filename, "w:windows-31j") do |file|
|
38
|
-
file << csv.string
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
def upload!
|
43
|
-
ftps_connection{|ftps| ftps.storlines("STOR #{@path}", csv) }
|
44
|
-
true
|
45
|
-
end
|
46
|
-
|
47
|
-
def upload
|
48
|
-
ready? && upload!
|
49
|
-
end
|
50
|
-
|
51
|
-
private
|
52
|
-
|
53
|
-
def ftps_connection(&block)
|
54
|
-
ftps = DoubleBagFTPS.new
|
55
|
-
ftps.passive = true
|
56
|
-
ftps.ssl_context = DoubleBagFTPS.create_ssl_context(verify_mode: OpenSSL::SSL::VERIFY_NONE)
|
57
|
-
ftps.connect(@host)
|
58
|
-
ftps.login(@username, @password)
|
59
|
-
|
60
|
-
yield(ftps)
|
61
|
-
ensure
|
62
|
-
ftps.close
|
63
|
-
end
|
64
|
-
end
|
65
|
-
end
|
66
|
-
end
|
67
|
-
end
|
data/spec/dech/csvio_spec.rb
DELETED
@@ -1,44 +0,0 @@
|
|
1
|
-
# coding: utf-8
|
2
|
-
|
3
|
-
require "spec_helper"
|
4
|
-
|
5
|
-
describe Dech::CSVIO do
|
6
|
-
describe ".generate" do
|
7
|
-
describe "class" do
|
8
|
-
it "should return an instance of StringIO" do
|
9
|
-
actual = Dech::CSVIO.generate
|
10
|
-
expect(actual).to be_is_a(StringIO)
|
11
|
-
end
|
12
|
-
|
13
|
-
it "should return an instance of Dech::CSVIO" do
|
14
|
-
actual = Dech::CSVIO.generate
|
15
|
-
expect(actual).to be_is_a(Dech::CSVIO)
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
describe "encoding" do
|
20
|
-
it "should have windows-31j external_encoding as default" do
|
21
|
-
actual = Dech::CSVIO.generate
|
22
|
-
expect(actual.external_encoding).to eq(Encoding::Windows_31J)
|
23
|
-
end
|
24
|
-
|
25
|
-
it "should have given external_encoding" do
|
26
|
-
actual = Dech::CSVIO.generate(encoding: Encoding::UTF_8)
|
27
|
-
expect(actual.external_encoding).to eq(Encoding::UTF_8)
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
describe "headers" do
|
32
|
-
before do
|
33
|
-
@headers = %w(a b c d e)
|
34
|
-
io = Dech::CSVIO.generate{|csv| csv << @headers }
|
35
|
-
@csv = CSV.new(io, headers: true)
|
36
|
-
@csv.readlines
|
37
|
-
end
|
38
|
-
|
39
|
-
it "should be able to set headers" do
|
40
|
-
expect(@csv.headers).to eq(@headers)
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
@@ -1,111 +0,0 @@
|
|
1
|
-
# coding: utf-8
|
2
|
-
|
3
|
-
require "spec_helper"
|
4
|
-
|
5
|
-
describe Dech::PriceUploader::Dena::FTP do
|
6
|
-
let(:dech) {
|
7
|
-
Dech::PriceUploader::Dena::FTP.new(
|
8
|
-
products: [{id: "PRODUCT-CODE", price: 9800}],
|
9
|
-
username: "username",
|
10
|
-
password: "password",
|
11
|
-
host: "example.com"
|
12
|
-
)
|
13
|
-
}
|
14
|
-
|
15
|
-
let(:ftp) {
|
16
|
-
ftp = double("ftp")
|
17
|
-
allow(ftp).to receive(:passive=)
|
18
|
-
allow(ftp).to receive(:connect)
|
19
|
-
allow(ftp).to receive(:login)
|
20
|
-
allow(ftp).to receive(:close)
|
21
|
-
ftp
|
22
|
-
}
|
23
|
-
|
24
|
-
describe "initialize" do
|
25
|
-
context "given no args" do
|
26
|
-
it "should create an instance successfully" do
|
27
|
-
expect(dech).to be_an_instance_of(Dech::PriceUploader::Dena::FTP)
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
context "given some args" do
|
32
|
-
it "should create an instance successfully" do
|
33
|
-
expect(dech).to be_an_instance_of(Dech::PriceUploader::Dena::FTP)
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
describe "#ready?" do
|
39
|
-
it "should be false" do
|
40
|
-
expect(dech.ready?).to be true
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
describe "#csv" do
|
45
|
-
headers = {
|
46
|
-
"Code" => String,
|
47
|
-
"exhibittype" => /\AMX\Z/,
|
48
|
-
"KtaiPrice" => /\d+/
|
49
|
-
}
|
50
|
-
|
51
|
-
describe "headers" do
|
52
|
-
let(:csv){ CSV.new(dech.csv, headers: true) }
|
53
|
-
|
54
|
-
headers.each_key.map{|h| h.encode(Encoding::Windows_31J) }.each do |header|
|
55
|
-
it "should have '#{header}' header" do
|
56
|
-
csv.readlines
|
57
|
-
expect(csv.headers).to be_include(header)
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
describe "columns" do
|
63
|
-
let(:csv){ CSV.new(dech.csv, headers: true).read }
|
64
|
-
|
65
|
-
headers.each do |header, type|
|
66
|
-
it "should have #{type} in '#{header}'" do
|
67
|
-
expect(csv[header.encode(Encoding::Windows_31J)]).to be_all{|c| type === c }
|
68
|
-
end
|
69
|
-
end
|
70
|
-
end
|
71
|
-
|
72
|
-
describe "encoding" do
|
73
|
-
let(:io){ dech.csv }
|
74
|
-
|
75
|
-
it "should have windows-31j as external_encoding" do
|
76
|
-
expect(io.external_encoding).to eq(Encoding::Windows_31J)
|
77
|
-
end
|
78
|
-
end
|
79
|
-
end
|
80
|
-
|
81
|
-
describe "#save_csv_as" do
|
82
|
-
let(:filename){ "tmp/#{Time.now.strftime("%Y%m%d_%H%M%S_%N")}.csv" }
|
83
|
-
|
84
|
-
it "should save CSV file as given name" do
|
85
|
-
dech.save_csv_as(filename)
|
86
|
-
expect(Dir.glob("tmp/*")).to be_include(filename)
|
87
|
-
end
|
88
|
-
|
89
|
-
it "should save CSV file in Shift_JIS" do
|
90
|
-
dech.save_csv_as(filename)
|
91
|
-
CSV.open(filename, "r:windows-31j:utf-8", headers: true) do |csv|
|
92
|
-
expect{csv.readlines}.not_to raise_error
|
93
|
-
expect(csv.headers).to eq(Dech::PriceUploader::Dena::FTP::HEADERS)
|
94
|
-
end
|
95
|
-
end
|
96
|
-
end
|
97
|
-
|
98
|
-
describe "#upload" do
|
99
|
-
context "server is ready" do
|
100
|
-
before do
|
101
|
-
allow(ftp).to receive(:nlst).and_return([])
|
102
|
-
expect(ftp).to receive(:storlines)
|
103
|
-
expect(Net::FTP).to receive(:new).and_return(ftp).at_least(:once)
|
104
|
-
end
|
105
|
-
|
106
|
-
it "should upload CSV file to the path on FTP server" do
|
107
|
-
expect(dech.upload).to be true
|
108
|
-
end
|
109
|
-
end
|
110
|
-
end
|
111
|
-
end
|
@@ -1,141 +0,0 @@
|
|
1
|
-
# coding: utf-8
|
2
|
-
|
3
|
-
require "spec_helper"
|
4
|
-
|
5
|
-
describe Dech::PriceUploader::Ponpare::FTPS do
|
6
|
-
let(:dech) {
|
7
|
-
Dech::PriceUploader::Ponpare::FTPS.new(
|
8
|
-
products: [{id: "PRODUCT-CODE", price: 9800}],
|
9
|
-
username: "username",
|
10
|
-
password: "password",
|
11
|
-
host: "example.com"
|
12
|
-
)
|
13
|
-
}
|
14
|
-
|
15
|
-
let(:ftps) {
|
16
|
-
ftps = double("ftps")
|
17
|
-
allow(ftps).to receive(:passive=)
|
18
|
-
allow(ftps).to receive(:ssl_context=)
|
19
|
-
allow(ftps).to receive(:connect)
|
20
|
-
allow(ftps).to receive(:login)
|
21
|
-
allow(ftps).to receive(:close)
|
22
|
-
ftps
|
23
|
-
}
|
24
|
-
|
25
|
-
describe "initialize" do
|
26
|
-
context "given no args" do
|
27
|
-
it "should create an instance successfully" do
|
28
|
-
expect(dech).to be_an_instance_of(Dech::PriceUploader::Ponpare::FTPS)
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
context "given some args" do
|
33
|
-
it "should create an instance successfully" do
|
34
|
-
expect(dech).to be_an_instance_of(Dech::PriceUploader::Ponpare::FTPS)
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
describe "#ready?" do
|
40
|
-
context "some files in the server" do
|
41
|
-
before do
|
42
|
-
expect(ftps).to receive(:nlst).and_return([dech.path])
|
43
|
-
expect(DoubleBagFTPS).to receive(:new).and_return(ftps)
|
44
|
-
end
|
45
|
-
|
46
|
-
it "should be false" do
|
47
|
-
expect(dech.ready?).to be false
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
|
-
context "any files in the server" do
|
52
|
-
before do
|
53
|
-
expect(ftps).to receive(:nlst).and_return([])
|
54
|
-
expect(DoubleBagFTPS).to receive(:new).and_return(ftps)
|
55
|
-
end
|
56
|
-
|
57
|
-
it "should be true" do
|
58
|
-
expect(dech.ready?).to be true
|
59
|
-
end
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
|
-
describe "#csv" do
|
64
|
-
headers = {
|
65
|
-
"コントロールカラム" => /\Au\Z/,
|
66
|
-
"商品管理ID(商品URL)" => String,
|
67
|
-
"販売価格" => /\d+/
|
68
|
-
}
|
69
|
-
|
70
|
-
describe "headers" do
|
71
|
-
let(:csv){ CSV.new(dech.csv, headers: true) }
|
72
|
-
|
73
|
-
headers.each_key.map{|h| h.encode(Encoding::Windows_31J) }.each do |header|
|
74
|
-
it "should have '#{header}' header" do
|
75
|
-
csv.readlines
|
76
|
-
expect(csv.headers).to be_include(header)
|
77
|
-
end
|
78
|
-
end
|
79
|
-
end
|
80
|
-
|
81
|
-
describe "columns" do
|
82
|
-
let(:csv){ CSV.new(dech.csv, headers: true).read }
|
83
|
-
|
84
|
-
headers.each do |header, type|
|
85
|
-
it "should have #{type} in '#{header}'" do
|
86
|
-
expect(csv[header.encode(Encoding::Windows_31J)]).to be_all{|c| type === c }
|
87
|
-
end
|
88
|
-
end
|
89
|
-
end
|
90
|
-
|
91
|
-
describe "encoding" do
|
92
|
-
let(:io){ dech.csv }
|
93
|
-
|
94
|
-
it "should have windows-31j as external_encoding" do
|
95
|
-
expect(io.external_encoding).to eq(Encoding::Windows_31J)
|
96
|
-
end
|
97
|
-
end
|
98
|
-
end
|
99
|
-
|
100
|
-
describe "#save_csv_as" do
|
101
|
-
let(:filename){ "tmp/#{Time.now.strftime("%Y%m%d_%H%M%S_%N")}.csv" }
|
102
|
-
|
103
|
-
it "should save CSV file as given name" do
|
104
|
-
dech.save_csv_as(filename)
|
105
|
-
expect(Dir.glob("tmp/*")).to be_include(filename)
|
106
|
-
end
|
107
|
-
|
108
|
-
it "should save CSV file in Shift_JIS" do
|
109
|
-
dech.save_csv_as(filename)
|
110
|
-
CSV.open(filename, "r:windows-31j:utf-8", headers: true) do |csv|
|
111
|
-
expect{csv.readlines}.not_to raise_error
|
112
|
-
expect(csv.headers).to eq(Dech::PriceUploader::Ponpare::FTPS::HEADERS)
|
113
|
-
end
|
114
|
-
end
|
115
|
-
end
|
116
|
-
|
117
|
-
describe "#upload" do
|
118
|
-
context "server is ready" do
|
119
|
-
before do
|
120
|
-
allow(ftps).to receive(:nlst).and_return([])
|
121
|
-
expect(ftps).to receive(:storlines)
|
122
|
-
expect(DoubleBagFTPS).to receive(:new).and_return(ftps).at_least(:once)
|
123
|
-
end
|
124
|
-
|
125
|
-
it "should upload CSV file to the path on FTPS server" do
|
126
|
-
expect(dech.upload).to be true
|
127
|
-
end
|
128
|
-
end
|
129
|
-
|
130
|
-
context "server is not ready" do
|
131
|
-
before do
|
132
|
-
allow(ftps).to receive(:nlst).and_return([dech.path])
|
133
|
-
expect(DoubleBagFTPS).to receive(:new).and_return(ftps)
|
134
|
-
end
|
135
|
-
|
136
|
-
it "should not upload CSV file to the path on FTPS server" do
|
137
|
-
expect(dech.upload).to be false
|
138
|
-
end
|
139
|
-
end
|
140
|
-
end
|
141
|
-
end
|