adf_builder 0.0.6 → 0.0.7
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/CHANGELOG.md +5 -0
- data/Gemfile.lock +1 -1
- data/README.md +62 -7
- data/lib/adf_builder.rb +39 -1
- data/lib/adf_builder/shared/contact.rb +0 -5
- data/lib/adf_builder/vehicles/colorcombinations.rb +31 -0
- data/lib/adf_builder/vehicles/vehicles.rb +71 -37
- data/lib/adf_builder/version.rb +1 -1
- metadata +2 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7b6904f4a4346718e3a08189a1da210b0c6a8305679d49f00d552854abb36db2
|
4
|
+
data.tar.gz: becdc5415db73468da3508f93f9d8d6a7a094a80e19f2b5bcf872e248d3520df
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: '0798101309032835894eb10965dfbcbcc97b7481f1e1aefda8f617b4a1219c469eb505df14c7344c2be80c0ce39d2bf347aa33f63106d893fcd1010d52775d0f'
|
7
|
+
data.tar.gz: 15d466aa189bf14ba7a7b79fa807a596f9d6d789ab06c68e40692d4b9e81336195b9581c1243fea22f12fa87b5059d7d453282de1c2455d89811d6f48f11bbae
|
data/CHANGELOG.md
CHANGED
@@ -17,6 +17,11 @@
|
|
17
17
|
- Add Provider structure
|
18
18
|
- Add Price structure
|
19
19
|
|
20
|
+
## [0.0.7] - 2021-08-08
|
21
|
+
- Much refactoring so that we can reuse functions
|
22
|
+
- Added more functionality to the Vehicle structure including all free text, all same level tags with params, and Color Combination and ImageTag
|
23
|
+
|
24
|
+
|
20
25
|
## [0.0.6] - 2021-08-08
|
21
26
|
- minimal_lead function will remove all previous adf nodes
|
22
27
|
- Created ability to reset doc
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -108,15 +108,28 @@ Outputs
|
|
108
108
|
</prospect>
|
109
109
|
</adf>
|
110
110
|
```
|
111
|
-
|
111
|
+
|
112
|
+
Vehicle with different operations
|
112
113
|
|
113
114
|
```ruby
|
114
115
|
builder = AdfBuilder::Builder.new
|
115
116
|
builder.prospect.vehicles.add(2021, 'Toyota', 'Prius', {
|
116
|
-
interest: :sell,
|
117
117
|
status: :used,
|
118
|
-
vin: 'XXXXXXXXXX',
|
119
118
|
})
|
119
|
+
builder.prospect.vehicles.update_tags_with_free_text(0, {
|
120
|
+
bodystyle: 'howdy',
|
121
|
+
year: '2000'
|
122
|
+
})
|
123
|
+
builder.prospect.vehicles.update_odometer(0, 9000, {
|
124
|
+
units: 'km'
|
125
|
+
})
|
126
|
+
builder.prospect.vehicles.update_condition(0, 'ffff')
|
127
|
+
builder.prospect.vehicles.update_imagetag(0, 'http://adfxml.info/adf_spec.pdf', {
|
128
|
+
width: 400,
|
129
|
+
height: 500,
|
130
|
+
alttext: 'Howdy'
|
131
|
+
})
|
132
|
+
puts builder.to_xml
|
120
133
|
```
|
121
134
|
|
122
135
|
Outputs
|
@@ -127,16 +140,55 @@ Outputs
|
|
127
140
|
<?xml version="1.0"?>
|
128
141
|
<adf>
|
129
142
|
<prospect status="new">
|
130
|
-
<requestdate>2021-08-
|
131
|
-
<
|
132
|
-
|
143
|
+
<requestdate>2021-08-09T00:53:59+04:00</requestdate>
|
144
|
+
<customer/>
|
145
|
+
<vendor/>
|
146
|
+
<vehicle status="used">
|
147
|
+
<year>2000</year>
|
133
148
|
<make>Toyota</make>
|
134
149
|
<model>Prius</model>
|
135
|
-
<
|
150
|
+
<bodystyle>howdy</bodystyle>
|
151
|
+
<odometer units="km">9000</odometer>
|
152
|
+
<imagetag width="400" height="500" alttext="Howdy">http://adfxml.info/adf_spec.pdf</imagetag>
|
136
153
|
</vehicle>
|
137
154
|
</prospect>
|
138
155
|
</adf>
|
156
|
+
```
|
157
|
+
|
158
|
+
Color Combination
|
159
|
+
|
160
|
+
```ruby
|
161
|
+
builder = AdfBuilder::Builder.new
|
162
|
+
builder.prospect.vehicles.add(2021, 'Toyota', 'Prius', {
|
163
|
+
status: :used,
|
164
|
+
})
|
165
|
+
builder.prospect.vehicles.add_color_combination(0, 'black', 'yellow', 1)
|
166
|
+
puts builder.to_xml
|
167
|
+
```
|
168
|
+
|
169
|
+
Outputs
|
139
170
|
|
171
|
+
```xml
|
172
|
+
<?ADF version="1.0"?>
|
173
|
+
|
174
|
+
<?xml version="1.0"?>
|
175
|
+
<adf>
|
176
|
+
<prospect status="new">
|
177
|
+
<requestdate>2021-08-09T00:56:07+04:00</requestdate>
|
178
|
+
<customer/>
|
179
|
+
<vendor/>
|
180
|
+
<vehicle status="used">
|
181
|
+
<year>2021</year>
|
182
|
+
<make>Toyota</make>
|
183
|
+
<model>Prius</model>
|
184
|
+
<colorcombination>
|
185
|
+
<interiorcolor>black</interiorcolor>
|
186
|
+
<exteriorcolor>yellow</exteriorcolor>
|
187
|
+
<preference>1</preference>
|
188
|
+
</colorcombination>
|
189
|
+
</vehicle>
|
190
|
+
</prospect>
|
191
|
+
</adf>
|
140
192
|
```
|
141
193
|
|
142
194
|
Add Vendor
|
@@ -199,6 +251,9 @@ Outputs
|
|
199
251
|
</prospect>
|
200
252
|
</adf>
|
201
253
|
```
|
254
|
+
|
255
|
+
Different Vehicle operations
|
256
|
+
|
202
257
|
## Development
|
203
258
|
|
204
259
|
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
data/lib/adf_builder.rb
CHANGED
@@ -17,8 +17,9 @@ require_relative 'adf_builder/shared/contact'
|
|
17
17
|
|
18
18
|
# VEHICLES
|
19
19
|
require_relative 'adf_builder/vehicles/vehicles'
|
20
|
+
require_relative 'adf_builder/vehicles/colorcombinations'
|
20
21
|
|
21
|
-
#
|
22
|
+
# VENDOR
|
22
23
|
require_relative 'adf_builder/vendor/vendor'
|
23
24
|
|
24
25
|
module AdfBuilder
|
@@ -106,5 +107,42 @@ module AdfBuilder
|
|
106
107
|
doc << adf
|
107
108
|
doc
|
108
109
|
end
|
110
|
+
|
111
|
+
# we will either create a new node with the value or replace the one if it is available
|
112
|
+
def self.update_node(parent_node, key, value, params={})
|
113
|
+
key = key.to_s
|
114
|
+
value = value.to_s
|
115
|
+
if parent_node.locate(key).size > 0
|
116
|
+
node = parent_node.locate(key).first
|
117
|
+
node.replace_text(value)
|
118
|
+
else
|
119
|
+
node = (Ox::Element.new(key) << value)
|
120
|
+
parent_node << node
|
121
|
+
end
|
122
|
+
|
123
|
+
AdfBuilder::Builder.update_params(node, key, params)
|
124
|
+
end
|
125
|
+
|
126
|
+
# update the params by first checking if they are valid params and then checking if the values are valid if necessary
|
127
|
+
def self.update_params(node, key, params)
|
128
|
+
return true if params.empty?
|
129
|
+
key = key.to_sym
|
130
|
+
valid_values = params[:valid_values]
|
131
|
+
valid_parameters = params[:valid_parameters]
|
132
|
+
_params = AdfBuilder::Builder.whitelabel_params(params,valid_parameters, key)
|
133
|
+
_params.each do |k,v|
|
134
|
+
node[k] = v if valid_values[key][k] == true or valid_values[key][k].include? v.to_s
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
# clear out the opts that don't match valid keys
|
139
|
+
def self.whitelabel_params(opts, valid_parameters, key)
|
140
|
+
opts.slice(*valid_parameters[key])
|
141
|
+
end
|
142
|
+
|
143
|
+
def self.valid_child?(parent, tag_name, index)
|
144
|
+
child = parent.locate(tag_name)[index]
|
145
|
+
return !child.nil?,child
|
146
|
+
end
|
109
147
|
end
|
110
148
|
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module AdfBuilder
|
2
|
+
class ColorCombinations
|
3
|
+
|
4
|
+
FREE_TEXT_OPTIONAL_TAGS = [:interiorcolor, :exteriorcolor, :preference]
|
5
|
+
|
6
|
+
def initialize(vehicle)
|
7
|
+
@vehicle = vehicle
|
8
|
+
@color_combination = nil
|
9
|
+
end
|
10
|
+
|
11
|
+
def add(interior_color, exterior_color, preference)
|
12
|
+
@color_combination = Ox::Element.new('colorcombination')
|
13
|
+
@color_combination <<
|
14
|
+
(Ox::Element.new('interiorcolor') << interior_color) <<
|
15
|
+
(Ox::Element.new('exteriorcolor') << exterior_color) <<
|
16
|
+
(Ox::Element.new('preference') << preference.to_s)
|
17
|
+
@vehicle << @color_combination
|
18
|
+
end
|
19
|
+
|
20
|
+
def update_tags(index, tags)
|
21
|
+
valid, vehicle = AdfBuilder::Builder.valid_child?(@vehicle,'colorcombination', index)
|
22
|
+
if valid
|
23
|
+
tags.each do |key, value|
|
24
|
+
if FREE_TEXT_OPTIONAL_TAGS.include? key.to_sym
|
25
|
+
AdfBuilder::Builder.update_node(vehicle, key, value)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -1,60 +1,95 @@
|
|
1
1
|
module AdfBuilder
|
2
2
|
class Vehicles
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
trade_in: 'trade-in',
|
8
|
-
test_drive: 'test-drive'
|
3
|
+
VALID_PARAMETERS = {
|
4
|
+
vehicle: [:interest, :status],
|
5
|
+
odometer: [:status, :units],
|
6
|
+
imagetag: [:width, :height, :alttext],
|
9
7
|
}
|
10
8
|
|
11
|
-
|
12
|
-
|
13
|
-
|
9
|
+
VALID_VALUES = {
|
10
|
+
vehicle: {
|
11
|
+
interest: %w[buy lease sell trade-in test-drive],
|
12
|
+
status: %w[new used]
|
13
|
+
},
|
14
|
+
odometer: {
|
15
|
+
status: %w[unknown rolledover replaced original],
|
16
|
+
units: %w[km mi]
|
17
|
+
},
|
18
|
+
imagetag: {
|
19
|
+
width: true,
|
20
|
+
height: true,
|
21
|
+
alttext: true
|
22
|
+
}
|
14
23
|
}
|
15
24
|
|
16
|
-
FREE_TEXT_OPTIONAL_TAGS =
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
doors: :doors,
|
21
|
-
bodystyle: :bodystyle,
|
22
|
-
transmission: :transmission,
|
23
|
-
pricecomments: :pricecomments,
|
24
|
-
comments: :comments
|
25
|
-
}
|
25
|
+
FREE_TEXT_OPTIONAL_TAGS = [:year, :make, :model, :vin, :stock,
|
26
|
+
:trim, :doors, :bodystyle, :transmission, :pricecomments, :comments]
|
27
|
+
|
28
|
+
CONDITIONS = %w[excellent good fair poor unknown]
|
26
29
|
|
27
30
|
def initialize(prospect)
|
28
31
|
@prospect = prospect
|
32
|
+
@color_combinations = []
|
29
33
|
end
|
30
34
|
|
31
|
-
def
|
32
|
-
vehicle =
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
vehicle[:interest] = interest
|
35
|
+
def add_color_combination(v_index, interior_color, exterior_color, preference)
|
36
|
+
valid, vehicle = AdfBuilder::Builder.valid_child?(@prospect,'vehicle', v_index)
|
37
|
+
if valid
|
38
|
+
cc = ColorCombinations.new(vehicle)
|
39
|
+
cc.add(interior_color, exterior_color, preference)
|
40
|
+
@color_combinations.push(cc)
|
38
41
|
end
|
42
|
+
end
|
39
43
|
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
44
|
+
def color_combinations
|
45
|
+
@color_combinations
|
46
|
+
end
|
47
|
+
|
48
|
+
def add(year, make, model, params={})
|
49
|
+
vehicle = Ox::Element.new('vehicle')
|
45
50
|
|
51
|
+
params.merge!({valid_values: VALID_VALUES, valid_parameters: VALID_PARAMETERS})
|
52
|
+
AdfBuilder::Builder.update_params(vehicle, :vehicle, params)
|
46
53
|
|
47
54
|
vehicle << (Ox::Element.new('year') << year.to_s)
|
48
55
|
vehicle << (Ox::Element.new('make') << make)
|
49
56
|
vehicle << (Ox::Element.new('model') << model)
|
50
57
|
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
58
|
+
@prospect << vehicle
|
59
|
+
end
|
60
|
+
|
61
|
+
def update_odometer(index, value, params={})
|
62
|
+
valid, vehicle = AdfBuilder::Builder.valid_child?(@prospect,'vehicle', index)
|
63
|
+
if valid
|
64
|
+
params.merge!({valid_values: VALID_VALUES, valid_parameters: VALID_PARAMETERS})
|
65
|
+
AdfBuilder::Builder.update_node(vehicle, 'odometer', value, params)
|
55
66
|
end
|
67
|
+
end
|
56
68
|
|
57
|
-
|
69
|
+
def update_condition(index, value)
|
70
|
+
valid, vehicle = AdfBuilder::Builder.valid_child?(@prospect,'vehicle', index)
|
71
|
+
if valid and CONDITIONS.include? value
|
72
|
+
AdfBuilder::Builder.update_node(vehicle, 'condition', value)
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
def update_imagetag(index, value, params={})
|
77
|
+
valid, vehicle = AdfBuilder::Builder.valid_child?(@prospect,'vehicle', index)
|
78
|
+
if valid
|
79
|
+
params.merge!({valid_values: VALID_VALUES, valid_parameters: VALID_PARAMETERS})
|
80
|
+
AdfBuilder::Builder.update_node(vehicle, 'imagetag', value, params)
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
def update_tags_with_free_text(index, tags)
|
85
|
+
valid, vehicle = AdfBuilder::Builder.valid_child?(@prospect,'vehicle', index)
|
86
|
+
if valid
|
87
|
+
tags.each do |key, value|
|
88
|
+
if FREE_TEXT_OPTIONAL_TAGS.include? key.to_sym
|
89
|
+
AdfBuilder::Builder.update_node(vehicle, key, value)
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
58
93
|
end
|
59
94
|
|
60
95
|
def add_id(index, value, source=nil, sequence=1)
|
@@ -64,6 +99,5 @@ module AdfBuilder
|
|
64
99
|
Id.new.add(@prospect.vehicle(index), value, source, sequence)
|
65
100
|
end
|
66
101
|
end
|
67
|
-
|
68
102
|
end
|
69
103
|
end
|
data/lib/adf_builder/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: adf_builder
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- marcus.salinas
|
@@ -51,6 +51,7 @@ files:
|
|
51
51
|
- lib/adf_builder/customer/customer.rb
|
52
52
|
- lib/adf_builder/shared/contact.rb
|
53
53
|
- lib/adf_builder/shared/id.rb
|
54
|
+
- lib/adf_builder/vehicles/colorcombinations.rb
|
54
55
|
- lib/adf_builder/vehicles/vehicles.rb
|
55
56
|
- lib/adf_builder/vendor/vendor.rb
|
56
57
|
- lib/adf_builder/version.rb
|