adf_builder 0.0.6 → 0.0.7

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 363203a0be498b2a4c64b3a8468fb9f5107c0a64a53f7931ebfc6b5804763b96
4
- data.tar.gz: 7b1500ef7e17368b62987600f306f216321e5ffdeecfdc439569db89a85cb0d2
3
+ metadata.gz: 7b6904f4a4346718e3a08189a1da210b0c6a8305679d49f00d552854abb36db2
4
+ data.tar.gz: becdc5415db73468da3508f93f9d8d6a7a094a80e19f2b5bcf872e248d3520df
5
5
  SHA512:
6
- metadata.gz: 3966f161aeeff1e4657860bf6f87a6d730ffc689c7ff726353ceb2f84c8a87dd942f64374623bd0e7c0532d22e844e9f7bc275534cd9cda7bd3b04ebbad12986
7
- data.tar.gz: 5eafe81b9c315faf6f9e4f6302fb2f5328916033e3f9ef3507a0618dabcbdf6f59729f2c1dbe772022c4a8ef42b353a06f38ef5bf530048af8e7a54a75d6a6f0
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
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- adf_builder (0.0.6)
4
+ adf_builder (0.0.7)
5
5
  ox (~> 2.14)
6
6
 
7
7
  GEM
data/README.md CHANGED
@@ -108,15 +108,28 @@ Outputs
108
108
  </prospect>
109
109
  </adf>
110
110
  ```
111
- Add Vehicle with tags
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-04T18:16:31+04:00</requestdate>
131
- <vehicle interest="sell" status="used">
132
- <year>2021</year>
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
- <vin>XXXXXXXXXX</vin>
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
- # VENDER
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
@@ -42,11 +42,6 @@ module AdfBuilder
42
42
  end
43
43
  end
44
44
 
45
-
46
-
47
-
48
- private
49
-
50
45
  # clear out the opts that don't match valid keys
51
46
  def whitelabel_opts(opts, key)
52
47
  opts.slice(*VALID_PARAMETERS[key])
@@ -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
- INTEREST_VALUES = {
4
- buy: 'buy',
5
- lease: 'lease',
6
- sell: 'sell',
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
- STATUS_VALUES = {
12
- new: 'new',
13
- used: 'used'
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
- vin: :vin,
18
- stock: :stock,
19
- trim: :trim,
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 add(year, make, model, tags={})
32
- vehicle = Ox::Element.new('vehicle')
33
-
34
- if tags[:interest]
35
- interest = INTEREST_VALUES[tags[:interest].to_sym]
36
- tags.delete(:interest)
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
- if tags[:status]
41
- status = STATUS_VALUES[tags[:status].to_sym]
42
- tags.delete(:status)
43
- vehicle[:status] = status
44
- end
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
- tags.each do |key, value|
52
- if FREE_TEXT_OPTIONAL_TAGS.include? key.to_sym
53
- vehicle << (Ox::Element.new(key.to_s) << value)
54
- end
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
- @prospect << vehicle
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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module AdfBuilder
4
- VERSION = "0.0.6"
4
+ VERSION = "0.0.7"
5
5
  end
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.6
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