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 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