dech 0.0.5 → 0.0.6
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 +1 -0
- data/lib/dech/dena.rb +7 -0
- data/lib/dech/dena/csv.rb +57 -0
- data/lib/dech/dena/ftp.rb +45 -0
- data/lib/dech/version.rb +1 -1
- data/spec/dech/dena/csv_spec.rb +44 -0
- data/spec/dech/dena/ftp_spec.rb +70 -0
- data/spec/dech/dena_spec.rb +5 -0
- metadata +11 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: db8a51d0bc99784877dd3a64ecd77bbf791dfe90
|
4
|
+
data.tar.gz: d49ce44554b96aadbac97896b7823b09c2178b97
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c41234c2d6c9396580925ab3dbc18b2190b10af298e84315290fc47fe055549450376633fb2a21cad764b3eba3f6f94cb850f2bad3cf12925bf492f96c372f39
|
7
|
+
data.tar.gz: ba3b53b0e18b8beffc71e0bea37ff2c9e96c533fa23c06d528904d423f21f029c1b9317b107107b89eced51c5b8e79d1bb5243c69c7ba6992f8c24487ecf6b9c
|
data/lib/dech.rb
CHANGED
data/lib/dech/dena.rb
ADDED
@@ -0,0 +1,57 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
require 'emmental'
|
3
|
+
require 'dech/csv'
|
4
|
+
require 'dech/hash_key_mapper'
|
5
|
+
|
6
|
+
module Dech
|
7
|
+
class Dena
|
8
|
+
class CSV < Dech::CSV
|
9
|
+
ENCODING = Encoding::Windows_31J
|
10
|
+
|
11
|
+
HEADER_MAPPINGS = {
|
12
|
+
id: "Code",
|
13
|
+
price: ["Price", "KtaiPrice"]
|
14
|
+
}
|
15
|
+
|
16
|
+
REQUIRED_HEADERS = [
|
17
|
+
"Code",
|
18
|
+
"exhibittype"
|
19
|
+
]
|
20
|
+
|
21
|
+
STATIC_COLUMNS = {"exhibittype" => "MX"}
|
22
|
+
|
23
|
+
def initialize(products)
|
24
|
+
@products = products
|
25
|
+
super(formatted_products)
|
26
|
+
end
|
27
|
+
|
28
|
+
def valid?
|
29
|
+
validate! rescue false
|
30
|
+
end
|
31
|
+
|
32
|
+
def validate!
|
33
|
+
translated_products.each do |product|
|
34
|
+
REQUIRED_HEADERS.each do |header|
|
35
|
+
raise "#{header} is missing in #{product}" unless product.keys.include?(header)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
private
|
41
|
+
|
42
|
+
def formatted_products
|
43
|
+
emmental = Emmental.new
|
44
|
+
translated_products.each{|product| emmental << product }
|
45
|
+
emmental.to_a
|
46
|
+
end
|
47
|
+
|
48
|
+
def translated_products
|
49
|
+
merged_products.map{|product| Dech::HashKeyMapper.map(product, HEADER_MAPPINGS) }
|
50
|
+
end
|
51
|
+
|
52
|
+
def merged_products
|
53
|
+
@products.map{|product| STATIC_COLUMNS.merge(product) }
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
require 'net/ftp'
|
3
|
+
require 'dech/dena/csv'
|
4
|
+
|
5
|
+
module Dech
|
6
|
+
class Dena
|
7
|
+
class FTP
|
8
|
+
DEFAULT_HOST = "bcmaster1.dena.ne.jp"
|
9
|
+
DEFAULT_PATH = "/data.csv"
|
10
|
+
|
11
|
+
attr_accessor :products, :username, :host, :path
|
12
|
+
|
13
|
+
def initialize(args={})
|
14
|
+
@products = args[:products] || []
|
15
|
+
@username = args[:username]
|
16
|
+
@password = args[:password]
|
17
|
+
@host = args[:host] || DEFAULT_HOST
|
18
|
+
@path = args[:path] || DEFAULT_PATH
|
19
|
+
end
|
20
|
+
|
21
|
+
def csv
|
22
|
+
Dech::Dena::CSV.new(@products)
|
23
|
+
end
|
24
|
+
|
25
|
+
def ready?
|
26
|
+
true
|
27
|
+
end
|
28
|
+
|
29
|
+
def upload!
|
30
|
+
ftp_connection{|ftp| ftp.storlines("STOR #{@path}", csv) }
|
31
|
+
true
|
32
|
+
end
|
33
|
+
|
34
|
+
def upload
|
35
|
+
ready? && upload!
|
36
|
+
end
|
37
|
+
|
38
|
+
private
|
39
|
+
|
40
|
+
def ftp_connection
|
41
|
+
Net::FTP.open(@host, @username, @password){|ftp| yield(ftp) }
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
data/lib/dech/version.rb
CHANGED
@@ -0,0 +1,44 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
require "spec_helper"
|
3
|
+
|
4
|
+
describe Dech::Dena::CSV do
|
5
|
+
let(:valid_products){
|
6
|
+
[
|
7
|
+
{id: "ABC-001", price: 12800},
|
8
|
+
{id: "xyz-123", price: 9800}
|
9
|
+
]
|
10
|
+
}
|
11
|
+
|
12
|
+
let(:invalid_products){ [ {price: 12800}, {price: 9800} ] }
|
13
|
+
|
14
|
+
describe "initialize" do
|
15
|
+
subject{ Dech::Dena::CSV.new(valid_products) }
|
16
|
+
it { is_expected.to be_an_instance_of(Dech::Dena::CSV) }
|
17
|
+
it { is_expected.to be_a(Dech::CSV) }
|
18
|
+
it { is_expected.to be_a(StringIO) }
|
19
|
+
end
|
20
|
+
|
21
|
+
describe "#valid?" do
|
22
|
+
context "with valid columns" do
|
23
|
+
subject{ Dech::Dena::CSV.new(valid_products) }
|
24
|
+
it { is_expected.to be_valid }
|
25
|
+
end
|
26
|
+
|
27
|
+
context "with invalid columns" do
|
28
|
+
subject{ Dech::Dena::CSV.new(invalid_products) }
|
29
|
+
it { is_expected.not_to be_valid }
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
describe "#validate!" do
|
34
|
+
context "valid columns" do
|
35
|
+
subject{ lambda{ Dech::Dena::CSV.new(valid_products).validate! } }
|
36
|
+
it { is_expected.not_to raise_error }
|
37
|
+
end
|
38
|
+
|
39
|
+
context "invalid columns" do
|
40
|
+
subject{ lambda{ Dech::Dena::CSV.new(invalid_products).validate! } }
|
41
|
+
it { is_expected.to raise_error }
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
require "spec_helper"
|
3
|
+
|
4
|
+
describe Dech::Dena::FTP do
|
5
|
+
let(:ftp) {
|
6
|
+
described_class.new(
|
7
|
+
products: [{id: "PRODUCT-CODE", price: 9800, "path" => "a:b", "name" => "productA"}],
|
8
|
+
username: "username",
|
9
|
+
password: "password",
|
10
|
+
host: "example.com"
|
11
|
+
)
|
12
|
+
}
|
13
|
+
|
14
|
+
let(:net_ftp) {
|
15
|
+
net_ftp = double("net_ftp")
|
16
|
+
allow(net_ftp).to receive(:passive=)
|
17
|
+
allow(net_ftp).to receive(:connect)
|
18
|
+
allow(net_ftp).to receive(:login)
|
19
|
+
allow(net_ftp).to receive(:close)
|
20
|
+
expect(Net::FTP).to receive(:new).and_return(net_ftp)
|
21
|
+
net_ftp
|
22
|
+
}
|
23
|
+
|
24
|
+
describe "initialize" do
|
25
|
+
subject { ftp }
|
26
|
+
it { is_expected.to be_an_instance_of(described_class) }
|
27
|
+
end
|
28
|
+
|
29
|
+
describe "#csv" do
|
30
|
+
subject { ftp.csv }
|
31
|
+
it { is_expected.to be_an_instance_of(Dech::Dena::CSV) }
|
32
|
+
end
|
33
|
+
|
34
|
+
describe "#ready?" do
|
35
|
+
subject { ftp.ready? }
|
36
|
+
|
37
|
+
context "Always" do
|
38
|
+
it { is_expected.to be true }
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
describe "#upload!" do
|
43
|
+
subject{ lambda{ ftp.upload! } }
|
44
|
+
|
45
|
+
it "should upload CSV file to the path on FTP server" do
|
46
|
+
expect(net_ftp).to receive(:storlines)
|
47
|
+
subject.call
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
describe "#upload" do
|
52
|
+
subject{ lambda{ ftp.upload } }
|
53
|
+
|
54
|
+
context "FTP server is ready" do
|
55
|
+
it "should call #upload!" do
|
56
|
+
expect(ftp).to receive(:ready?).and_return(true)
|
57
|
+
expect(ftp).to receive(:upload!).and_return(true)
|
58
|
+
subject.call
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
context "FTP server is not ready" do
|
63
|
+
it "should not call #upload!" do
|
64
|
+
expect(ftp).to receive(:ready?).and_return(false)
|
65
|
+
expect(ftp).not_to receive(:upload!)
|
66
|
+
subject.call
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dech
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- OSA Shunsuke
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-08-
|
11
|
+
date: 2014-08-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: double-bag-ftps
|
@@ -113,6 +113,9 @@ files:
|
|
113
113
|
- lib/dech.rb
|
114
114
|
- lib/dech/csv.rb
|
115
115
|
- lib/dech/csvio.rb
|
116
|
+
- lib/dech/dena.rb
|
117
|
+
- lib/dech/dena/csv.rb
|
118
|
+
- lib/dech/dena/ftp.rb
|
116
119
|
- lib/dech/hash_key_mapper.rb
|
117
120
|
- lib/dech/price_uploader.rb
|
118
121
|
- lib/dech/price_uploader/dena.rb
|
@@ -128,6 +131,9 @@ files:
|
|
128
131
|
- lib/dech/yahoo/ftp.rb
|
129
132
|
- spec/dech/csv_spec.rb
|
130
133
|
- spec/dech/csvio_spec.rb
|
134
|
+
- spec/dech/dena/csv_spec.rb
|
135
|
+
- spec/dech/dena/ftp_spec.rb
|
136
|
+
- spec/dech/dena_spec.rb
|
131
137
|
- spec/dech/hash_key_mapper_spec.rb
|
132
138
|
- spec/dech/price_uploader/dena/ftp_spec.rb
|
133
139
|
- spec/dech/price_uploader/ponpare/ftps_spec.rb
|
@@ -166,6 +172,9 @@ summary: Utilities gem for e-commerce mall in Japan.
|
|
166
172
|
test_files:
|
167
173
|
- spec/dech/csv_spec.rb
|
168
174
|
- spec/dech/csvio_spec.rb
|
175
|
+
- spec/dech/dena/csv_spec.rb
|
176
|
+
- spec/dech/dena/ftp_spec.rb
|
177
|
+
- spec/dech/dena_spec.rb
|
169
178
|
- spec/dech/hash_key_mapper_spec.rb
|
170
179
|
- spec/dech/price_uploader/dena/ftp_spec.rb
|
171
180
|
- spec/dech/price_uploader/ponpare/ftps_spec.rb
|