datashift 0.1.0 → 0.2.1
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.
- data/.document +5 -5
- data/LICENSE.txt +26 -26
- data/README.markdown +305 -303
- data/README.rdoc +19 -19
- data/Rakefile +93 -93
- data/VERSION +1 -1
- data/datashift-0.1.0.gem +0 -0
- data/datashift.gemspec +152 -136
- data/lib/applications/jruby/jexcel_file.rb +408 -408
- data/lib/applications/jruby/word.rb +79 -79
- data/lib/datashift.rb +152 -152
- data/lib/datashift/exceptions.rb +11 -11
- data/lib/datashift/file_definitions.rb +353 -353
- data/lib/datashift/mapping_file_definitions.rb +87 -87
- data/lib/datashift/method_detail.rb +275 -275
- data/lib/datashift/method_dictionary.rb +209 -209
- data/lib/datashift/method_mapper.rb +90 -90
- data/lib/generators/csv_generator.rb +36 -36
- data/lib/generators/excel_generator.rb +122 -122
- data/lib/generators/generator_base.rb +13 -13
- data/lib/helpers/core_ext/to_b.rb +24 -24
- data/lib/helpers/spree_helper.rb +153 -155
- data/lib/java/poi-3.7/LICENSE +507 -507
- data/lib/java/poi-3.7/NOTICE +21 -21
- data/lib/java/poi-3.7/RELEASE_NOTES.txt +115 -115
- data/lib/loaders/csv_loader.rb +98 -98
- data/lib/loaders/excel_loader.rb +155 -155
- data/lib/loaders/loader_base.rb +420 -420
- data/lib/loaders/spreadsheet_loader.rb +136 -136
- data/lib/loaders/spree/image_loader.rb +63 -64
- data/lib/loaders/spree/product_loader.rb +248 -250
- data/public/spree/products/large/DEMO_001_ror_bag.jpeg +0 -0
- data/public/spree/products/large/DEMO_002_Powerstation.jpg +0 -0
- data/public/spree/products/large/DEMO_003_ror_mug.jpeg +0 -0
- data/public/spree/products/mini/DEMO_001_ror_bag.jpeg +0 -0
- data/public/spree/products/mini/DEMO_002_Powerstation.jpg +0 -0
- data/public/spree/products/mini/DEMO_003_ror_mug.jpeg +0 -0
- data/public/spree/products/original/DEMO_001_ror_bag.jpeg +0 -0
- data/public/spree/products/original/DEMO_002_Powerstation.jpg +0 -0
- data/public/spree/products/original/DEMO_003_ror_mug.jpeg +0 -0
- data/public/spree/products/product/DEMO_001_ror_bag.jpeg +0 -0
- data/public/spree/products/product/DEMO_002_Powerstation.jpg +0 -0
- data/public/spree/products/product/DEMO_003_ror_mug.jpeg +0 -0
- data/public/spree/products/small/DEMO_001_ror_bag.jpeg +0 -0
- data/public/spree/products/small/DEMO_002_Powerstation.jpg +0 -0
- data/public/spree/products/small/DEMO_003_ror_mug.jpeg +0 -0
- data/spec/csv_loader_spec.rb +30 -30
- data/spec/datashift_spec.rb +26 -26
- data/spec/db/migrate/20110803201325_create_test_bed.rb +85 -85
- data/spec/excel_exporter_spec.rb +78 -78
- data/spec/excel_generator_spec.rb +78 -78
- data/spec/excel_loader_spec.rb +223 -223
- data/spec/file_definitions.rb +141 -141
- data/spec/fixtures/ProjectsDefaults.yml +29 -29
- data/spec/fixtures/config/database.yml +27 -24
- data/spec/fixtures/datashift_Spree_db.sqlite +0 -0
- data/spec/fixtures/interact_models_db.sqlite +0 -0
- data/spec/fixtures/negative/SpreeProdMiss1Mandatory.csv +4 -4
- data/spec/fixtures/negative/SpreeProdMissManyMandatory.csv +4 -4
- data/spec/fixtures/spree/SpreeProducts.csv +4 -4
- data/spec/fixtures/spree/SpreeProductsMultiColumn.csv +4 -4
- data/spec/fixtures/spree/SpreeProductsSimple.csv +4 -4
- data/spec/fixtures/spree/SpreeProductsWithImages.csv +4 -0
- data/spec/fixtures/spree/SpreeZoneExample.csv +5 -5
- data/spec/fixtures/test_model_defs.rb +57 -57
- data/spec/loader_spec.rb +120 -120
- data/spec/method_dictionary_spec.rb +242 -242
- data/spec/method_mapper_spec.rb +41 -41
- data/spec/spec_helper.rb +116 -116
- data/spec/spree_generator_spec.rb +64 -64
- data/spec/spree_loader_spec.rb +324 -327
- data/spec/spree_method_mapping_spec.rb +214 -214
- data/tasks/config/seed_fu_product_template.erb +15 -15
- data/tasks/config/tidy_config.txt +12 -12
- data/tasks/db_tasks.rake +65 -65
- data/tasks/excel_generator.rake +78 -78
- data/tasks/file_tasks.rake +36 -36
- data/tasks/import/csv.rake +49 -49
- data/tasks/import/excel.rake +71 -71
- data/tasks/spree/image_load.rake +108 -108
- data/tasks/spree/product_loader.rake +43 -43
- data/tasks/word_to_seedfu.rake +166 -166
- data/test/helper.rb +18 -18
- data/test/test_interact.rb +7 -7
- metadata +22 -3
- data/spec/fixtures/interact_spree_db.sqlite +0 -0
data/spec/file_definitions.rb
CHANGED
@@ -1,141 +1,141 @@
|
|
1
|
-
# To change this template, choose Tools | Templates
|
2
|
-
# and open the template in the editor.
|
3
|
-
|
4
|
-
$:.unshift File.join(File.dirname(__FILE__),'..','lib')
|
5
|
-
$:.unshift File.join(File.dirname(__FILE__),'..','lib', 'engine')
|
6
|
-
|
7
|
-
require 'test/unit'
|
8
|
-
require 'file_definitions'
|
9
|
-
|
10
|
-
class File_definitions < Test::Unit::TestCase
|
11
|
-
|
12
|
-
def setup
|
13
|
-
end
|
14
|
-
|
15
|
-
def test_fields_string
|
16
|
-
klass = Object.const_set('B', Class.new)
|
17
|
-
|
18
|
-
klass.module_eval do
|
19
|
-
include FileDefinitions
|
20
|
-
create_field_definition 'a_string'
|
21
|
-
|
22
|
-
create_field_attr_accessors
|
23
|
-
end
|
24
|
-
|
25
|
-
x = B.new '33'
|
26
|
-
assert_equal '33', x.a_string
|
27
|
-
|
28
|
-
end
|
29
|
-
|
30
|
-
|
31
|
-
def test_fields_symbols
|
32
|
-
klass = Object.const_set('SymClass', Class.new)
|
33
|
-
klass.module_eval do
|
34
|
-
include FileDefinitions
|
35
|
-
create_field_definition [:a_symbol, :b_symbol]
|
36
|
-
|
37
|
-
create_field_attr_accessors
|
38
|
-
end
|
39
|
-
|
40
|
-
assert SymClass.new.respond_to? :a_symbol
|
41
|
-
assert SymClass.new.respond_to? :b_symbol
|
42
|
-
end
|
43
|
-
|
44
|
-
def test_fields_strings
|
45
|
-
klass = Object.const_set('A', Class.new)
|
46
|
-
klass.module_eval do
|
47
|
-
include FileDefinitions
|
48
|
-
create_field_definition %w{abc def ghi jkl}
|
49
|
-
|
50
|
-
create_field_attr_accessors
|
51
|
-
end
|
52
|
-
|
53
|
-
x = A.new
|
54
|
-
|
55
|
-
assert_equal ["abc", "def", "ghi", "jkl"], A.field_definition.sort
|
56
|
-
|
57
|
-
A::add_field( "xyz" )
|
58
|
-
|
59
|
-
line = '1,2,3,4, 5'
|
60
|
-
x = A.new(line)
|
61
|
-
|
62
|
-
assert x.respond_to? 'abc'
|
63
|
-
assert x.respond_to? 'abc='
|
64
|
-
assert x.respond_to? :jkl
|
65
|
-
assert_equal x.current_line, line
|
66
|
-
assert_equal '1', x.abc
|
67
|
-
assert_equal 1.0, x.abc.to_f
|
68
|
-
assert_equal 1, x.abc.to_i
|
69
|
-
assert_equal '4', x.jkl
|
70
|
-
assert_equal ' 5', x.xyz
|
71
|
-
|
72
|
-
end
|
73
|
-
|
74
|
-
def test_fixed_strings
|
75
|
-
|
76
|
-
klass = Object.const_set('AFixed', Class.new)
|
77
|
-
|
78
|
-
klass.module_eval do
|
79
|
-
include FileDefinitions
|
80
|
-
|
81
|
-
create_fixed_definition( 'value' => (0..7), 'date' => (8..15), :ccy => (16..18) )
|
82
|
-
|
83
|
-
create_field_attr_accessors
|
84
|
-
end
|
85
|
-
|
86
|
-
assert AFixed.respond_to?('fixed_definition')
|
87
|
-
assert AFixed.respond_to?('field_definition')
|
88
|
-
assert AFixed.respond_to?('add_field')
|
89
|
-
assert AFixed.respond_to?('file_set_field_by_map')
|
90
|
-
assert AFixed.respond_to?('split_on')
|
91
|
-
assert AFixed.respond_to?('split_on_write')
|
92
|
-
|
93
|
-
x = AFixed.new('0123456719990113EUR')
|
94
|
-
|
95
|
-
assert x.respond_to?('value')
|
96
|
-
assert x.respond_to?(:date)
|
97
|
-
assert x.respond_to?('ccy')
|
98
|
-
|
99
|
-
assert AFixed.field_definition.include?('ccy')
|
100
|
-
|
101
|
-
assert_equal 3, AFixed.field_definition.size
|
102
|
-
assert_equal 3, AFixed.fixed_definition.keys.size
|
103
|
-
|
104
|
-
assert_equal ["ccy", "date", "value"], AFixed.field_definition.sort
|
105
|
-
|
106
|
-
assert_equal AFixed.field_definition.sort, AFixed.fixed_definition.keys.sort
|
107
|
-
|
108
|
-
assert_instance_of Range, AFixed.fixed_definition.values[0]
|
109
|
-
|
110
|
-
assert_equal x.current_line, '0123456719990113EUR'
|
111
|
-
assert_equal x.value, '01234567'
|
112
|
-
assert_equal x.date, '19990113'
|
113
|
-
assert_equal x.ccy, 'EUR'
|
114
|
-
|
115
|
-
assert x.respond_to?(:parse)
|
116
|
-
|
117
|
-
x.parse('9876543220100630USD')
|
118
|
-
|
119
|
-
assert_equal x.current_line, '9876543220100630USD'
|
120
|
-
assert_equal x.value, '98765432'
|
121
|
-
assert_equal x.date, '20100630'
|
122
|
-
assert_equal x.ccy, 'USD'
|
123
|
-
|
124
|
-
end
|
125
|
-
|
126
|
-
def test_bad_setup
|
127
|
-
klass = Object.const_set('ABadClass', Class.new)
|
128
|
-
begin
|
129
|
-
klass.module_eval do
|
130
|
-
include FileDefinitions
|
131
|
-
|
132
|
-
create_fixed_definition( 'abc' )
|
133
|
-
|
134
|
-
create_field_attr_accessors
|
135
|
-
end
|
136
|
-
flunk # We should never get here
|
137
|
-
rescue => e
|
138
|
-
assert e
|
139
|
-
end
|
140
|
-
end
|
141
|
-
end
|
1
|
+
# To change this template, choose Tools | Templates
|
2
|
+
# and open the template in the editor.
|
3
|
+
|
4
|
+
$:.unshift File.join(File.dirname(__FILE__),'..','lib')
|
5
|
+
$:.unshift File.join(File.dirname(__FILE__),'..','lib', 'engine')
|
6
|
+
|
7
|
+
require 'test/unit'
|
8
|
+
require 'file_definitions'
|
9
|
+
|
10
|
+
class File_definitions < Test::Unit::TestCase
|
11
|
+
|
12
|
+
def setup
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_fields_string
|
16
|
+
klass = Object.const_set('B', Class.new)
|
17
|
+
|
18
|
+
klass.module_eval do
|
19
|
+
include FileDefinitions
|
20
|
+
create_field_definition 'a_string'
|
21
|
+
|
22
|
+
create_field_attr_accessors
|
23
|
+
end
|
24
|
+
|
25
|
+
x = B.new '33'
|
26
|
+
assert_equal '33', x.a_string
|
27
|
+
|
28
|
+
end
|
29
|
+
|
30
|
+
|
31
|
+
def test_fields_symbols
|
32
|
+
klass = Object.const_set('SymClass', Class.new)
|
33
|
+
klass.module_eval do
|
34
|
+
include FileDefinitions
|
35
|
+
create_field_definition [:a_symbol, :b_symbol]
|
36
|
+
|
37
|
+
create_field_attr_accessors
|
38
|
+
end
|
39
|
+
|
40
|
+
assert SymClass.new.respond_to? :a_symbol
|
41
|
+
assert SymClass.new.respond_to? :b_symbol
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_fields_strings
|
45
|
+
klass = Object.const_set('A', Class.new)
|
46
|
+
klass.module_eval do
|
47
|
+
include FileDefinitions
|
48
|
+
create_field_definition %w{abc def ghi jkl}
|
49
|
+
|
50
|
+
create_field_attr_accessors
|
51
|
+
end
|
52
|
+
|
53
|
+
x = A.new
|
54
|
+
|
55
|
+
assert_equal ["abc", "def", "ghi", "jkl"], A.field_definition.sort
|
56
|
+
|
57
|
+
A::add_field( "xyz" )
|
58
|
+
|
59
|
+
line = '1,2,3,4, 5'
|
60
|
+
x = A.new(line)
|
61
|
+
|
62
|
+
assert x.respond_to? 'abc'
|
63
|
+
assert x.respond_to? 'abc='
|
64
|
+
assert x.respond_to? :jkl
|
65
|
+
assert_equal x.current_line, line
|
66
|
+
assert_equal '1', x.abc
|
67
|
+
assert_equal 1.0, x.abc.to_f
|
68
|
+
assert_equal 1, x.abc.to_i
|
69
|
+
assert_equal '4', x.jkl
|
70
|
+
assert_equal ' 5', x.xyz
|
71
|
+
|
72
|
+
end
|
73
|
+
|
74
|
+
def test_fixed_strings
|
75
|
+
|
76
|
+
klass = Object.const_set('AFixed', Class.new)
|
77
|
+
|
78
|
+
klass.module_eval do
|
79
|
+
include FileDefinitions
|
80
|
+
|
81
|
+
create_fixed_definition( 'value' => (0..7), 'date' => (8..15), :ccy => (16..18) )
|
82
|
+
|
83
|
+
create_field_attr_accessors
|
84
|
+
end
|
85
|
+
|
86
|
+
assert AFixed.respond_to?('fixed_definition')
|
87
|
+
assert AFixed.respond_to?('field_definition')
|
88
|
+
assert AFixed.respond_to?('add_field')
|
89
|
+
assert AFixed.respond_to?('file_set_field_by_map')
|
90
|
+
assert AFixed.respond_to?('split_on')
|
91
|
+
assert AFixed.respond_to?('split_on_write')
|
92
|
+
|
93
|
+
x = AFixed.new('0123456719990113EUR')
|
94
|
+
|
95
|
+
assert x.respond_to?('value')
|
96
|
+
assert x.respond_to?(:date)
|
97
|
+
assert x.respond_to?('ccy')
|
98
|
+
|
99
|
+
assert AFixed.field_definition.include?('ccy')
|
100
|
+
|
101
|
+
assert_equal 3, AFixed.field_definition.size
|
102
|
+
assert_equal 3, AFixed.fixed_definition.keys.size
|
103
|
+
|
104
|
+
assert_equal ["ccy", "date", "value"], AFixed.field_definition.sort
|
105
|
+
|
106
|
+
assert_equal AFixed.field_definition.sort, AFixed.fixed_definition.keys.sort
|
107
|
+
|
108
|
+
assert_instance_of Range, AFixed.fixed_definition.values[0]
|
109
|
+
|
110
|
+
assert_equal x.current_line, '0123456719990113EUR'
|
111
|
+
assert_equal x.value, '01234567'
|
112
|
+
assert_equal x.date, '19990113'
|
113
|
+
assert_equal x.ccy, 'EUR'
|
114
|
+
|
115
|
+
assert x.respond_to?(:parse)
|
116
|
+
|
117
|
+
x.parse('9876543220100630USD')
|
118
|
+
|
119
|
+
assert_equal x.current_line, '9876543220100630USD'
|
120
|
+
assert_equal x.value, '98765432'
|
121
|
+
assert_equal x.date, '20100630'
|
122
|
+
assert_equal x.ccy, 'USD'
|
123
|
+
|
124
|
+
end
|
125
|
+
|
126
|
+
def test_bad_setup
|
127
|
+
klass = Object.const_set('ABadClass', Class.new)
|
128
|
+
begin
|
129
|
+
klass.module_eval do
|
130
|
+
include FileDefinitions
|
131
|
+
|
132
|
+
create_fixed_definition( 'abc' )
|
133
|
+
|
134
|
+
create_field_attr_accessors
|
135
|
+
end
|
136
|
+
flunk # We should never get here
|
137
|
+
rescue => e
|
138
|
+
assert e
|
139
|
+
end
|
140
|
+
end
|
141
|
+
end
|
@@ -1,29 +1,29 @@
|
|
1
|
-
## YAML Template.
|
2
|
-
|
3
|
-
# Format is :
|
4
|
-
# --- !ruby/object:ActiveRecordModel
|
5
|
-
# :datashift_defaults
|
6
|
-
# :key value
|
7
|
-
#
|
8
|
-
|
9
|
-
Project:
|
10
|
-
datashift_defaults:
|
11
|
-
value_as_string: "Default Project Value"
|
12
|
-
category: reference:category_002
|
13
|
-
|
14
|
-
datashift_overrides:
|
15
|
-
value_as_double: 99.23546
|
16
|
-
|
17
|
-
--- !ruby/object:Project
|
18
|
-
attributes:
|
19
|
-
id:
|
20
|
-
title:
|
21
|
-
value_as_string: ""
|
22
|
-
value_as_text: "object has value text"
|
23
|
-
value_as_boolean:
|
24
|
-
value_as_datetime:
|
25
|
-
value_as_integer: 23
|
26
|
-
value_as_double: 45.82
|
27
|
-
created_at:
|
28
|
-
updated_at:
|
29
|
-
|
1
|
+
## YAML Template.
|
2
|
+
|
3
|
+
# Format is :
|
4
|
+
# --- !ruby/object:ActiveRecordModel
|
5
|
+
# :datashift_defaults
|
6
|
+
# :key value
|
7
|
+
#
|
8
|
+
|
9
|
+
Project:
|
10
|
+
datashift_defaults:
|
11
|
+
value_as_string: "Default Project Value"
|
12
|
+
category: reference:category_002
|
13
|
+
|
14
|
+
datashift_overrides:
|
15
|
+
value_as_double: 99.23546
|
16
|
+
|
17
|
+
--- !ruby/object:Project
|
18
|
+
attributes:
|
19
|
+
id:
|
20
|
+
title:
|
21
|
+
value_as_string: ""
|
22
|
+
value_as_text: "object has value text"
|
23
|
+
value_as_boolean:
|
24
|
+
value_as_datetime:
|
25
|
+
value_as_integer: 23
|
26
|
+
value_as_double: 45.82
|
27
|
+
created_at:
|
28
|
+
updated_at:
|
29
|
+
|
@@ -1,25 +1,28 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
1
|
+
# Used by spec helper to build test databases
|
2
|
+
# These entires can be used in call to db_connect ( see spec_helper )
|
3
|
+
|
4
|
+
<% adapter = 'sqlite3' %>
|
5
|
+
<% adapter = 'jdbcsqlite3' if(Guards::jruby? ) %>
|
6
|
+
|
7
|
+
test_mysql:
|
8
|
+
adapter: jdbcmysql
|
9
|
+
database: datashift_test_models_db
|
10
|
+
username: test
|
11
|
+
password: test
|
12
|
+
host: localhost
|
13
|
+
|
14
|
+
test_memory:
|
15
|
+
adapter: <%= adapter %>
|
16
|
+
database: :memory
|
17
|
+
|
18
|
+
test_file:
|
19
|
+
adapter: <%= adapter %>
|
20
|
+
database: <%= File.join($DataShiftFixturePath, 'datashift_test_models_db.sqlite') %>
|
21
|
+
encoding: utf8
|
22
|
+
host: localhost
|
23
|
+
|
24
|
+
test_spree_standalone:
|
25
|
+
adapter: <%= adapter %>
|
26
|
+
database: <%= File.join($DataShiftFixturePath, 'datashift_Spree_db.sqlite') %>
|
27
|
+
encoding: utf8
|
25
28
|
host: localhost
|
Binary file
|
Binary file
|
@@ -1,4 +1,4 @@
|
|
1
|
-
"Name","Description","Available On"," Price","CostPrice","product_properties","count_on_hand","Taxons","Option Types"
|
2
|
-
"Demo Product for AR Loader","blah blah","2011-02-14",400.00,320.00,"name:test_pp_001",12,"Paintings","mime_type:jpeg, PDF,PNG"
|
3
|
-
"Demo Excel Load via Jruby","less blah","2011-05-14",100.00,30.00,"name:test_pp_001",5,"Paintings","mime_type:jpeg, PDF,PNG"
|
4
|
-
"Demo third row in future","more blah blah","2012-07-01",50.34,23.34,"name:test_pp_002,test_pp_003",23,"Drawings","mime_type:jpeg,PDF,PNG|print_type:black_white,colour"
|
1
|
+
"Name","Description","Available On"," Price","CostPrice","product_properties","count_on_hand","Taxons","Option Types"
|
2
|
+
"Demo Product for AR Loader","blah blah","2011-02-14",400.00,320.00,"name:test_pp_001",12,"Paintings","mime_type:jpeg, PDF,PNG"
|
3
|
+
"Demo Excel Load via Jruby","less blah","2011-05-14",100.00,30.00,"name:test_pp_001",5,"Paintings","mime_type:jpeg, PDF,PNG"
|
4
|
+
"Demo third row in future","more blah blah","2012-07-01",50.34,23.34,"name:test_pp_002,test_pp_003",23,"Drawings","mime_type:jpeg,PDF,PNG|print_type:black_white,colour"
|
@@ -1,4 +1,4 @@
|
|
1
|
-
"SKU","Description","Available On","CostPrice","product_properties","count_on_hand","Taxons","Option Types"
|
2
|
-
"DEMO_001","blah blah","2011-02-14",320.00,"name:test_pp_001",12,"Paintings","mime_type:jpeg, PDF,PNG"
|
3
|
-
"DEMO_002","less blah","2011-05-14",30.00,"name:test_pp_001",5,"Paintings","mime_type:jpeg, PDF,PNG"
|
4
|
-
"DEMO_003","more blah blah","2012-07-01",23.34,"name:test_pp_002,test_pp_003",23,"Drawings","mime_type:jpeg,PDF,PNG|print_type:black_white,colour"
|
1
|
+
"SKU","Description","Available On","CostPrice","product_properties","count_on_hand","Taxons","Option Types"
|
2
|
+
"DEMO_001","blah blah","2011-02-14",320.00,"name:test_pp_001",12,"Paintings","mime_type:jpeg, PDF,PNG"
|
3
|
+
"DEMO_002","less blah","2011-05-14",30.00,"name:test_pp_001",5,"Paintings","mime_type:jpeg, PDF,PNG"
|
4
|
+
"DEMO_003","more blah blah","2012-07-01",23.34,"name:test_pp_002,test_pp_003",23,"Drawings","mime_type:jpeg,PDF,PNG|print_type:black_white,colour"
|
@@ -1,4 +1,4 @@
|
|
1
|
-
"SKU","Name","Description","Available On"," Price","CostPrice","product_properties","Taxons","Variants","count_on_hand"
|
2
|
-
"DEMO_001","Demo Product for AR Loader","blah blah","2011-02-14",399.99,320.00,"test_pp_001","Paintings|WaterColour","mime_type:jpeg,PDF,PNG","12|6|7"
|
3
|
-
"DEMO_002","Demo Excel Load via Jruby","less blah","2011-05-14",100.00,30.00,"test_pp_003","Paintings|Landscape|Oils","mime_type:jpeg, PDF,PNG","5|4|2"
|
4
|
-
"DEMO_003","Demo third row in future","more blah blah","2012-07-01",50.34,23.34,"test_pp_002|test_pp_003:Example free value|yet_another_property","Drawings","mime_type:jpeg,PDF,PNG|print_type:black_white,colour","12|4|7|12|18"
|
1
|
+
"SKU","Name","Description","Available On"," Price","CostPrice","product_properties","Taxons","Variants","count_on_hand"
|
2
|
+
"DEMO_001","Demo Product for AR Loader","blah blah","2011-02-14",399.99,320.00,"test_pp_001","Paintings|WaterColour","mime_type:jpeg,PDF,PNG","12|6|7"
|
3
|
+
"DEMO_002","Demo Excel Load via Jruby","less blah","2011-05-14",100.00,30.00,"test_pp_003","Paintings|Landscape|Oils","mime_type:jpeg, PDF,PNG","5|4|2"
|
4
|
+
"DEMO_003","Demo third row in future","more blah blah","2012-07-01",50.34,23.34,"test_pp_002|test_pp_003:Example free value|yet_another_property","Drawings","mime_type:jpeg,PDF,PNG|print_type:black_white,colour","12|4|7|12|18"
|
@@ -1,4 +1,4 @@
|
|
1
|
-
"SKU","Name","Description","Available On"," Price","CostPrice","product_properties","product_properties","product_properties","Taxons","Taxons","Taxons","Option Types","Option Types","Variants","Variants","Variants","count_on_hand"
|
2
|
-
"DEMO_001","Demo Product for AR Loader","blah blah","2011-02-14",399.99,320.00,"test_pp_001",,,"Paintings","WaterColour",,"mime_type:jpeg","mime_type:PDF","mime_type:PNG",,,"12|6|7"
|
3
|
-
"DEMO_002","Demo Excel Load via Jruby","less blah","2011-05-14",100.00,30.00,"test_pp_003",,,"Paintings","Landscape","Oils","mime_type:jpeg","mime_type:PDF","mime_type:PNG",,,"5|4|2"
|
4
|
-
"DEMO_003","Demo third row in future","more blah blah","2012-07-01",50.34,23.34,"test_pp_002","test_pp_003:Example free value","yet_another_property","Drawings",,,"mime_type:jpeg","mime_type:PDF","mime_type:PNG","print_type:black_white","print_type:colour","12|4|7|12|18"
|
1
|
+
"SKU","Name","Description","Available On"," Price","CostPrice","product_properties","product_properties","product_properties","Taxons","Taxons","Taxons","Option Types","Option Types","Variants","Variants","Variants","count_on_hand"
|
2
|
+
"DEMO_001","Demo Product for AR Loader","blah blah","2011-02-14",399.99,320.00,"test_pp_001",,,"Paintings","WaterColour",,"mime_type:jpeg","mime_type:PDF","mime_type:PNG",,,"12|6|7"
|
3
|
+
"DEMO_002","Demo Excel Load via Jruby","less blah","2011-05-14",100.00,30.00,"test_pp_003",,,"Paintings","Landscape","Oils","mime_type:jpeg","mime_type:PDF","mime_type:PNG",,,"5|4|2"
|
4
|
+
"DEMO_003","Demo third row in future","more blah blah","2012-07-01",50.34,23.34,"test_pp_002","test_pp_003:Example free value","yet_another_property","Drawings",,,"mime_type:jpeg","mime_type:PDF","mime_type:PNG","print_type:black_white","print_type:colour","12|4|7|12|18"
|
@@ -1,4 +1,4 @@
|
|
1
|
-
"SKU","Name","Description","Available On"," Price","CostPrice","count_on_hand","Option Types"
|
2
|
-
"SIMPLE_001","Simple Product for AR Loader","blah blah","2011-02-14",345.78,320.00,12,"mime_type"
|
3
|
-
"SIMPLE_002","Simple Excel Load via Jruby","less blah","2011-05-14",100.00,30.00,5,"mime_type"
|
4
|
-
"SIMPLE_003","Simple third row avail in future","more blah blah","2012-07-01",50.34,23.34,23,"mime_type|print_type"
|
1
|
+
"SKU","Name","Description","Available On"," Price","CostPrice","count_on_hand","Option Types"
|
2
|
+
"SIMPLE_001","Simple Product for AR Loader","blah blah","2011-02-14",345.78,320.00,12,"mime_type"
|
3
|
+
"SIMPLE_002","Simple Excel Load via Jruby","less blah","2011-05-14",100.00,30.00,5,"mime_type"
|
4
|
+
"SIMPLE_003","Simple third row avail in future","more blah blah","2012-07-01",50.34,23.34,23,"mime_type|print_type"
|