distributator 0.0.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.
Files changed (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/distributator.rb +102 -0
  3. metadata +46 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 195efa159af191ca6c0d5c73a3484f9e8d660869
4
+ data.tar.gz: f7e06af0cea51d7390eb70cb755cd03c06914af5
5
+ SHA512:
6
+ metadata.gz: e9be8c96d04d75e3bb6caba64ba6bdb53417071814722417cd5ff13911a81d05d20dc80f3ab0d6389ee9ecfe9f2157e236e537b9e1a00be20e352d0d6bcf894b
7
+ data.tar.gz: 5b6f4234a34126e4a055c86ee9c319d5a5dbe58a33103031c777d5f83802d56c6a1a8b2b7c5f4c03722747f22b3d69ab82060ec70c5f1cfde54795e6e815b21a
@@ -0,0 +1,102 @@
1
+ require 'csv'
2
+ require 'active_support/inflector'
3
+ require 'date'
4
+
5
+ #################################################
6
+ # REMINDER: An empty cell can return nil or '' #
7
+ #################################################
8
+
9
+ class Distributator < CSV
10
+ def initialize(data, options = Hash.new)
11
+ options.merge!({ headers: true,
12
+ header_converters: [self.class.rename_header,
13
+ *options[:header_converters]] })
14
+ super(data, options)
15
+ end
16
+
17
+ def self.rename_header
18
+ ->(header) do
19
+ case header
20
+ when /\A['"]?estimated_availability_date['"]?\Z/i
21
+ 'available_on'
22
+ when /\A['"]?image_(\w+)_(\d+)['"]?\Z/
23
+ # TODO: should this have a default value?
24
+ lookup = { 'reference' => 'url', 'name' => 'title' }
25
+ "images.#{$2}.#{lookup[$1]}"
26
+ when /\A['"]?upc['"]?\Z/i
27
+ 'id'
28
+ when /\A['"]?cost['"]?\Z/i
29
+ 'cost_price'
30
+ when /\A['"]?product_title['"]?\Z/i
31
+ 'name'
32
+ else
33
+ header.gsub(/'|"/, '')
34
+ end
35
+ end
36
+ end
37
+ end
38
+
39
+ module DSCO_Table
40
+ class DSCOError < StandardError; end
41
+ class PriceError < DSCOError; end
42
+
43
+ def convert_attributes
44
+ each do |row|
45
+ attr_indices.each do |index|
46
+ attr_name = "attribute_name_#{index}"
47
+ attr_val = "attribute_value_#{index}"
48
+ row["properties.#{row[attr_name]}"] = row[attr_val]
49
+ end
50
+ end
51
+
52
+ attr_indices.each do |index|
53
+ delete("attribute_name_#{index}")
54
+ delete("attribute_value_#{index}")
55
+ end; return nil
56
+ end
57
+
58
+ def convert_price
59
+ each do |row|
60
+ map, msrp = row['map'], row['msrp']
61
+
62
+ price = map unless map.nil? || map.to_f.zero? # implies #empty?
63
+ price ||= msrp
64
+ raise PriceError if price.to_f.zero?
65
+ row['price'] = price
66
+ end
67
+
68
+ delete('msrp'); delete('map')
69
+ end
70
+
71
+ def convert_taxons
72
+ each do |row|
73
+ row['category'].split('|').each_with_index do |taxon, i|
74
+ # WARNING: Jenson only uses one taxon group per product
75
+ # So this code only handles one taxon group.
76
+ row["taxons.0.#{i}"] = taxon
77
+ end
78
+ end
79
+ delete('category')
80
+ end
81
+
82
+ def make_permalinks
83
+ each do |row|
84
+ row['permalink'] = row['name'].parameterize
85
+ end
86
+ end
87
+
88
+ def normalize_available_on
89
+ each do |row|
90
+ if row['available_on'].nil? || row['available_on'].empty?
91
+ row['available_on'] = DateTime.now.iso8601
92
+ end
93
+ end
94
+ end
95
+
96
+ private
97
+ def attr_indices
98
+ headers.map { |h| h.match(/attribute_name_(\d+)/); $1 }.compact
99
+ end
100
+ end
101
+
102
+ CSV::Table.include DSCO_Table
metadata ADDED
@@ -0,0 +1,46 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: distributator
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Cooper Lebrun
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-11-26 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: Tools for converting a DSCO distributor's product CSV into the Wombat
14
+ product format CSV for uploading. WORK IN PROGRESS.
15
+ email: cooperlebrun@gmail.com
16
+ executables: []
17
+ extensions: []
18
+ extra_rdoc_files: []
19
+ files:
20
+ - lib/distributator.rb
21
+ homepage: http://rubygems.org/gems/distributator
22
+ licenses:
23
+ - MIT
24
+ metadata: {}
25
+ post_install_message:
26
+ rdoc_options: []
27
+ require_paths:
28
+ - lib
29
+ required_ruby_version: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ required_rubygems_version: !ruby/object:Gem::Requirement
35
+ requirements:
36
+ - - ">="
37
+ - !ruby/object:Gem::Version
38
+ version: '0'
39
+ requirements: []
40
+ rubyforge_project:
41
+ rubygems_version: 2.4.5.1
42
+ signing_key:
43
+ specification_version: 4
44
+ summary: Convert DSCO CSVs to Wombat/Spree format!
45
+ test_files: []
46
+ has_rdoc: