adf_builder 0.4.0 → 1.1.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.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/CHANGELOG.md +17 -1
- data/Gemfile.lock +4 -1
- data/README.md +95 -351
- data/adf_builder.gemspec +1 -0
- data/lib/adf_builder/dsl.rb +26 -0
- data/lib/adf_builder/nodes/customer.rb +58 -0
- data/lib/adf_builder/nodes/node.rb +81 -0
- data/lib/adf_builder/nodes/prospect.rb +44 -0
- data/lib/adf_builder/nodes/provider.rb +48 -0
- data/lib/adf_builder/nodes/shared.rb +91 -0
- data/lib/adf_builder/nodes/vehicle.rb +75 -0
- data/lib/adf_builder/nodes/vehicle_nodes.rb +137 -0
- data/lib/adf_builder/nodes/vendor.rb +33 -0
- data/lib/adf_builder/serializer.rb +84 -0
- data/lib/adf_builder/validations.rb +38 -0
- data/lib/adf_builder/version.rb +1 -1
- data/lib/adf_builder.rb +15 -147
- metadata +26 -13
- data/lib/adf_builder/base/base.rb +0 -13
- data/lib/adf_builder/base/prospect.rb +0 -34
- data/lib/adf_builder/base/request_date.rb +0 -22
- data/lib/adf_builder/customer/customer.rb +0 -50
- data/lib/adf_builder/customer/timeframe.rb +0 -44
- data/lib/adf_builder/provider/provider.rb +0 -53
- data/lib/adf_builder/shared/contact.rb +0 -44
- data/lib/adf_builder/shared/id.rb +0 -18
- data/lib/adf_builder/vehicles/colorcombinations.rb +0 -30
- data/lib/adf_builder/vehicles/price.rb +0 -43
- data/lib/adf_builder/vehicles/vehicles.rb +0 -123
- data/lib/adf_builder/vendor/vendor.rb +0 -31
data/lib/adf_builder.rb
CHANGED
|
@@ -4,154 +4,22 @@ require "ox"
|
|
|
4
4
|
require "json"
|
|
5
5
|
|
|
6
6
|
require_relative "adf_builder/version"
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
require_relative "adf_builder/
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
require_relative "adf_builder/
|
|
14
|
-
require_relative "adf_builder/
|
|
15
|
-
require_relative "adf_builder/
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
require_relative "adf_builder/
|
|
22
|
-
require_relative "adf_builder/shared/contact"
|
|
23
|
-
|
|
24
|
-
# VEHICLES
|
|
25
|
-
require_relative "adf_builder/vehicles/vehicles"
|
|
26
|
-
require_relative "adf_builder/vehicles/colorcombinations"
|
|
27
|
-
require_relative "adf_builder/vehicles/price"
|
|
28
|
-
|
|
29
|
-
# VENDOR
|
|
30
|
-
require_relative "adf_builder/vendor/vendor"
|
|
7
|
+
require_relative "adf_builder/validations"
|
|
8
|
+
|
|
9
|
+
# Nodes
|
|
10
|
+
require_relative "adf_builder/nodes/node"
|
|
11
|
+
require_relative "adf_builder/nodes/prospect"
|
|
12
|
+
require_relative "adf_builder/nodes/shared"
|
|
13
|
+
require_relative "adf_builder/nodes/vehicle"
|
|
14
|
+
require_relative "adf_builder/nodes/vehicle_nodes"
|
|
15
|
+
require_relative "adf_builder/nodes/customer"
|
|
16
|
+
require_relative "adf_builder/nodes/vendor"
|
|
17
|
+
require_relative "adf_builder/nodes/provider"
|
|
18
|
+
|
|
19
|
+
# Core
|
|
20
|
+
require_relative "adf_builder/serializer"
|
|
21
|
+
require_relative "adf_builder/dsl"
|
|
31
22
|
|
|
32
23
|
module AdfBuilder
|
|
33
24
|
class Error < StandardError; end
|
|
34
|
-
|
|
35
|
-
class Builder
|
|
36
|
-
def initialize
|
|
37
|
-
@doc = init_doc
|
|
38
|
-
@base = Base.new(@doc)
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
def prospect
|
|
42
|
-
@base.prospect
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
# output the XML
|
|
46
|
-
def to_xml
|
|
47
|
-
Ox.dump(@doc, {})
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
# def an example of minimal XML taken from ADF spec file http://adfxml.info/adf_spec.pdf
|
|
51
|
-
def minimal_lead
|
|
52
|
-
prospect = Ox::Element.new("prospect")
|
|
53
|
-
|
|
54
|
-
request_date = Ox::Element.new("requestdate")
|
|
55
|
-
request_date << "2000-03-30T15:30:20-08:00"
|
|
56
|
-
|
|
57
|
-
vehicle = Ox::Element.new("vehicle")
|
|
58
|
-
year = Ox::Element.new("year")
|
|
59
|
-
year << "1999"
|
|
60
|
-
|
|
61
|
-
make = Ox::Element.new("make")
|
|
62
|
-
make << "Chevrolet"
|
|
63
|
-
|
|
64
|
-
model = Ox::Element.new("model")
|
|
65
|
-
model << "Blazer"
|
|
66
|
-
|
|
67
|
-
vehicle << year << make << model
|
|
68
|
-
|
|
69
|
-
customer = Ox::Element.new("customer")
|
|
70
|
-
|
|
71
|
-
contact = Ox::Element.new("contact")
|
|
72
|
-
|
|
73
|
-
name = Ox::Element.new("name")
|
|
74
|
-
name[:part] = "full"
|
|
75
|
-
name << "John Doe"
|
|
76
|
-
|
|
77
|
-
phone = Ox::Element.new("phone")
|
|
78
|
-
phone << "393-999-3922"
|
|
79
|
-
|
|
80
|
-
contact << name << phone
|
|
81
|
-
customer << contact
|
|
82
|
-
|
|
83
|
-
vendor = Ox::Element.new("vendor")
|
|
84
|
-
|
|
85
|
-
contact = Ox::Element.new("contact")
|
|
86
|
-
name = Ox::Element.new("name")
|
|
87
|
-
name[:part] = "full"
|
|
88
|
-
name << "Acura of Bellevue"
|
|
89
|
-
|
|
90
|
-
contact << name
|
|
91
|
-
vendor << contact
|
|
92
|
-
|
|
93
|
-
prospect << request_date << vehicle << customer << vendor
|
|
94
|
-
@doc.remove_children_by_path("adf/prospect")
|
|
95
|
-
@doc.adf << prospect
|
|
96
|
-
Ox.dump(@doc, {})
|
|
97
|
-
end
|
|
98
|
-
|
|
99
|
-
# go back to the initial structure
|
|
100
|
-
def reset_doc
|
|
101
|
-
@doc.adf.prospect.remove_children_by_path("*")
|
|
102
|
-
end
|
|
103
|
-
|
|
104
|
-
# all the files will start with this same header
|
|
105
|
-
def init_doc
|
|
106
|
-
doc = Ox::Document.new
|
|
107
|
-
instruct = Ox::Instruct.new(:xml)
|
|
108
|
-
instruct[:version] = "1.0"
|
|
109
|
-
doc << instruct
|
|
110
|
-
doc << Ox::Raw.new("")
|
|
111
|
-
instruct = Ox::Instruct.new("ADF")
|
|
112
|
-
instruct[:version] = "1.0"
|
|
113
|
-
doc << instruct
|
|
114
|
-
adf = Ox::Element.new("adf")
|
|
115
|
-
doc << adf
|
|
116
|
-
doc
|
|
117
|
-
end
|
|
118
|
-
|
|
119
|
-
# we will either create a new node with the value or replace the one if it is available
|
|
120
|
-
def self.update_node(parent_node, key, value, params = {})
|
|
121
|
-
key = key.to_s
|
|
122
|
-
value = value.to_s
|
|
123
|
-
if parent_node.locate(key).size.positive?
|
|
124
|
-
node = parent_node.locate(key).first
|
|
125
|
-
node.replace_text(value)
|
|
126
|
-
else
|
|
127
|
-
node = (Ox::Element.new(key) << value)
|
|
128
|
-
parent_node << node
|
|
129
|
-
end
|
|
130
|
-
|
|
131
|
-
AdfBuilder::Builder.update_params(node, key, params)
|
|
132
|
-
end
|
|
133
|
-
|
|
134
|
-
# update the params by first checking if they are valid params and then checking if the values are valid if necessary
|
|
135
|
-
def self.update_params(node, key, params)
|
|
136
|
-
return true if params.empty?
|
|
137
|
-
|
|
138
|
-
key = key.to_sym
|
|
139
|
-
valid_values = params[:valid_values]
|
|
140
|
-
valid_parameters = params[:valid_parameters]
|
|
141
|
-
_params = AdfBuilder::Builder.whitelabel_params(params, valid_parameters, key)
|
|
142
|
-
_params.each do |k, v|
|
|
143
|
-
node[k] = v if (valid_values[key][k] == true) || valid_values[key][k].include?(v.to_s)
|
|
144
|
-
end
|
|
145
|
-
end
|
|
146
|
-
|
|
147
|
-
# clear out the opts that don't match valid keys
|
|
148
|
-
def self.whitelabel_params(opts, valid_parameters, key)
|
|
149
|
-
opts.slice(*valid_parameters[key])
|
|
150
|
-
end
|
|
151
|
-
|
|
152
|
-
def self.valid_child?(parent, tag_name, index)
|
|
153
|
-
child = parent.locate(tag_name)[index]
|
|
154
|
-
[!child.nil?, child]
|
|
155
|
-
end
|
|
156
|
-
end
|
|
157
25
|
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:
|
|
4
|
+
version: 1.1.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- marcus.salinas
|
|
@@ -23,6 +23,20 @@ dependencies:
|
|
|
23
23
|
- - "~>"
|
|
24
24
|
- !ruby/object:Gem::Version
|
|
25
25
|
version: '2.14'
|
|
26
|
+
- !ruby/object:Gem::Dependency
|
|
27
|
+
name: nokogiri
|
|
28
|
+
requirement: !ruby/object:Gem::Requirement
|
|
29
|
+
requirements:
|
|
30
|
+
- - "~>"
|
|
31
|
+
- !ruby/object:Gem::Version
|
|
32
|
+
version: '1.15'
|
|
33
|
+
type: :development
|
|
34
|
+
prerelease: false
|
|
35
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
36
|
+
requirements:
|
|
37
|
+
- - "~>"
|
|
38
|
+
- !ruby/object:Gem::Version
|
|
39
|
+
version: '1.15'
|
|
26
40
|
- !ruby/object:Gem::Dependency
|
|
27
41
|
name: rake
|
|
28
42
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -86,19 +100,18 @@ files:
|
|
|
86
100
|
- bin/console
|
|
87
101
|
- bin/setup
|
|
88
102
|
- lib/adf_builder.rb
|
|
89
|
-
- lib/adf_builder/base/base.rb
|
|
90
|
-
- lib/adf_builder/base/prospect.rb
|
|
91
|
-
- lib/adf_builder/base/request_date.rb
|
|
92
|
-
- lib/adf_builder/customer/customer.rb
|
|
93
|
-
- lib/adf_builder/customer/timeframe.rb
|
|
94
103
|
- lib/adf_builder/data/iso-4217-currency-codes.json
|
|
95
|
-
- lib/adf_builder/
|
|
96
|
-
- lib/adf_builder/
|
|
97
|
-
- lib/adf_builder/
|
|
98
|
-
- lib/adf_builder/
|
|
99
|
-
- lib/adf_builder/
|
|
100
|
-
- lib/adf_builder/
|
|
101
|
-
- lib/adf_builder/
|
|
104
|
+
- lib/adf_builder/dsl.rb
|
|
105
|
+
- lib/adf_builder/nodes/customer.rb
|
|
106
|
+
- lib/adf_builder/nodes/node.rb
|
|
107
|
+
- lib/adf_builder/nodes/prospect.rb
|
|
108
|
+
- lib/adf_builder/nodes/provider.rb
|
|
109
|
+
- lib/adf_builder/nodes/shared.rb
|
|
110
|
+
- lib/adf_builder/nodes/vehicle.rb
|
|
111
|
+
- lib/adf_builder/nodes/vehicle_nodes.rb
|
|
112
|
+
- lib/adf_builder/nodes/vendor.rb
|
|
113
|
+
- lib/adf_builder/serializer.rb
|
|
114
|
+
- lib/adf_builder/validations.rb
|
|
102
115
|
- lib/adf_builder/version.rb
|
|
103
116
|
homepage: https://github.com/jippylong12/adf_builder
|
|
104
117
|
licenses:
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module AdfBuilder
|
|
4
|
-
class Prospect
|
|
5
|
-
STATUSES = {
|
|
6
|
-
new: :new,
|
|
7
|
-
resend: :resend
|
|
8
|
-
}.freeze
|
|
9
|
-
|
|
10
|
-
def initialize(doc)
|
|
11
|
-
@doc = doc
|
|
12
|
-
@doc.adf << Ox::Element.new("prospect")
|
|
13
|
-
@prospect = @doc.adf.prospect
|
|
14
|
-
@prospect[:status] = STATUSES[:new]
|
|
15
|
-
|
|
16
|
-
@request_date = RequestDate.new(@prospect)
|
|
17
|
-
@vehicles = Vehicles.new(@prospect)
|
|
18
|
-
@customer = Customer.new(@prospect)
|
|
19
|
-
@vendor = Vendor.new(@prospect)
|
|
20
|
-
@provider = Provider.new(@prospect)
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
attr_reader :request_date, :vehicles, :customer, :vendor, :provider
|
|
24
|
-
|
|
25
|
-
# set status to renew
|
|
26
|
-
def set_renew
|
|
27
|
-
@prospect[:status] = STATUSES[:resend]
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
def add_id(value, source = nil, sequence = 1)
|
|
31
|
-
Id.new.add(@prospect, value, source, sequence)
|
|
32
|
-
end
|
|
33
|
-
end
|
|
34
|
-
end
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module AdfBuilder
|
|
4
|
-
class RequestDate
|
|
5
|
-
WITH_SYMBOLS = "%FT%T%:z"
|
|
6
|
-
WITHOUT_SYMBOLS = "%Y%m%dT%H%M%S%z"
|
|
7
|
-
|
|
8
|
-
def initialize(prospect_node)
|
|
9
|
-
@request_date_node = Ox::Element.new("requestdate")
|
|
10
|
-
@request_date_node << DateTime.now.strftime("%FT%T%:z")
|
|
11
|
-
prospect_node << @request_date_node
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
def update_val(datetime_value, format = 1)
|
|
15
|
-
if format == 1
|
|
16
|
-
@request_date_node.replace_text(datetime_value.strftime(WITH_SYMBOLS))
|
|
17
|
-
elsif format == 2
|
|
18
|
-
@request_date_node.replace_text(datetime_value.strftime(WITHOUT_SYMBOLS))
|
|
19
|
-
end
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
end
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module AdfBuilder
|
|
4
|
-
class Customer
|
|
5
|
-
def initialize(prospect)
|
|
6
|
-
@customer = Ox::Element.new("customer")
|
|
7
|
-
@contact = nil
|
|
8
|
-
@timeframe = nil
|
|
9
|
-
|
|
10
|
-
prospect << @customer
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
attr_reader :contact, :timeframe
|
|
14
|
-
|
|
15
|
-
def add(name, opts = {})
|
|
16
|
-
@contact = Contact.new(@customer, name, opts)
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
def add_id(index, value, source = nil, sequence = 1)
|
|
20
|
-
if @prospect.locate("customer").empty?
|
|
21
|
-
false
|
|
22
|
-
else
|
|
23
|
-
Id.new.add(@prospect.customer(index), value, source, sequence)
|
|
24
|
-
end
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
# @param descriptin [String] - Description of customer’s timing intention.
|
|
28
|
-
# @param earliest_date [DateTime] - Earliest date customer is interested in. If timeframe tag
|
|
29
|
-
# is present, it is required to specify earliestdate and/or
|
|
30
|
-
# latestdate
|
|
31
|
-
# @param latest_date [DateTime] - Latest date customer is interested in. If timeframe tag
|
|
32
|
-
# is present, it is required to specify earliestdate and/or
|
|
33
|
-
# latestdate
|
|
34
|
-
def add_timeframe(description, earliest_date = nil, latest_date = nil)
|
|
35
|
-
return false if earliest_date.nil? && latest_date.nil?
|
|
36
|
-
|
|
37
|
-
return false if earliest_date && (earliest_date.class != DateTime)
|
|
38
|
-
|
|
39
|
-
return false if latest_date && (latest_date.class != DateTime)
|
|
40
|
-
|
|
41
|
-
@timeframe = Timeframe.new(@customer, description, earliest_date, latest_date) if @timeframe.nil?
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
def update_comments(comments)
|
|
45
|
-
return false if comments.class != String
|
|
46
|
-
|
|
47
|
-
AdfBuilder::Builder.update_node(@customer, :comments, comments)
|
|
48
|
-
end
|
|
49
|
-
end
|
|
50
|
-
end
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module AdfBuilder
|
|
4
|
-
class Timeframe
|
|
5
|
-
def initialize(customer, description, earliest_date, latest_date)
|
|
6
|
-
begin
|
|
7
|
-
earliest_date = earliest_date.strftime("%FT%T%:z") if earliest_date
|
|
8
|
-
latest_date = latest_date.strftime("%FT%T%:z") if latest_date
|
|
9
|
-
rescue StandardError
|
|
10
|
-
return nil
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
@timeframe = Ox::Element.new("timeframe")
|
|
14
|
-
|
|
15
|
-
@timeframe << (Ox::Element.new("description") << description)
|
|
16
|
-
@timeframe << (Ox::Element.new("earliestdate") << earliest_date) if earliest_date
|
|
17
|
-
@timeframe << (Ox::Element.new("latestdate") << latest_date) if latest_date
|
|
18
|
-
customer << @timeframe
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
def update_description(description)
|
|
22
|
-
AdfBuilder::Builder.update_node(@timeframe, :description, description)
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
def update_earliest_date(date)
|
|
26
|
-
begin
|
|
27
|
-
date = date.strftime("%FT%T%:z")
|
|
28
|
-
rescue StandardError
|
|
29
|
-
return false
|
|
30
|
-
end
|
|
31
|
-
AdfBuilder::Builder.update_node(@timeframe, :earliestdate, date)
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
def update_latest_date(date)
|
|
35
|
-
begin
|
|
36
|
-
date = date.strftime("%FT%T%:z")
|
|
37
|
-
rescue StandardError
|
|
38
|
-
return false
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
AdfBuilder::Builder.update_node(@timeframe, :latestdate, date)
|
|
42
|
-
end
|
|
43
|
-
end
|
|
44
|
-
end
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module AdfBuilder
|
|
4
|
-
class Provider
|
|
5
|
-
FREE_TEXT_OPTIONAL_TAGS = %i[service url].freeze
|
|
6
|
-
|
|
7
|
-
def initialize(prospect)
|
|
8
|
-
@prospect = prospect
|
|
9
|
-
@provider = nil
|
|
10
|
-
@contact = nil
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
attr_reader :contact
|
|
14
|
-
|
|
15
|
-
def add(name, params = {})
|
|
16
|
-
@provider = Ox::Element.new("provider")
|
|
17
|
-
params.merge!({ valid_values: AdfBuilder::Contact::VALID_VALUES,
|
|
18
|
-
valid_parameters: AdfBuilder::Contact::VALID_PARAMETERS })
|
|
19
|
-
AdfBuilder::Builder.update_node(@provider, :name, name, params)
|
|
20
|
-
@prospect << @provider
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
def add_contact(name, opts = {})
|
|
24
|
-
@contact = Contact.new(@provider, name, opts)
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
def add_phone(phone, params = {})
|
|
28
|
-
params.merge!({ valid_values: AdfBuilder::Contact::VALID_VALUES,
|
|
29
|
-
valid_parameters: AdfBuilder::Contact::VALID_PARAMETERS })
|
|
30
|
-
AdfBuilder::Builder.update_node(@provider, :phone, phone, params)
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
def add_email(email, params = {})
|
|
34
|
-
params.merge!({ valid_values: AdfBuilder::Contact::VALID_VALUES,
|
|
35
|
-
valid_parameters: AdfBuilder::Contact::VALID_PARAMETERS })
|
|
36
|
-
AdfBuilder::Builder.update_node(@provider, :email, email, params)
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
def update_tags_with_free_text(tags)
|
|
40
|
-
tags.each do |key, value|
|
|
41
|
-
AdfBuilder::Builder.update_node(@provider, key, value) if FREE_TEXT_OPTIONAL_TAGS.include? key.to_sym
|
|
42
|
-
end
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
def add_id(index, value, source = nil, sequence = 1)
|
|
46
|
-
if @prospect.locate("provider").empty?
|
|
47
|
-
false
|
|
48
|
-
else
|
|
49
|
-
Id.new.add(@prospect.provider(index), value, source, sequence)
|
|
50
|
-
end
|
|
51
|
-
end
|
|
52
|
-
end
|
|
53
|
-
end
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module AdfBuilder
|
|
4
|
-
class Contact
|
|
5
|
-
VALID_PARAMETERS = {
|
|
6
|
-
name: %i[part type primarycontact],
|
|
7
|
-
email: [:preferredcontact],
|
|
8
|
-
phone: %i[type time preferredcontact]
|
|
9
|
-
}.freeze
|
|
10
|
-
|
|
11
|
-
VALID_VALUES = {
|
|
12
|
-
name: {
|
|
13
|
-
part: %w[first middle suffix last full],
|
|
14
|
-
type: %w[individual business],
|
|
15
|
-
primarycontact: %w[0 1]
|
|
16
|
-
},
|
|
17
|
-
email: {
|
|
18
|
-
preferredcontact: %w[0 1]
|
|
19
|
-
},
|
|
20
|
-
phone: {
|
|
21
|
-
preferredcontact: %w[0 1],
|
|
22
|
-
type: %w[phone fax cellphone pager],
|
|
23
|
-
time: %w[morning afternoon evening nopreference day]
|
|
24
|
-
}
|
|
25
|
-
}.freeze
|
|
26
|
-
|
|
27
|
-
def initialize(parent_node, name, params = {})
|
|
28
|
-
@contact = Ox::Element.new("contact")
|
|
29
|
-
params.merge!({ valid_values: VALID_VALUES, valid_parameters: VALID_PARAMETERS })
|
|
30
|
-
AdfBuilder::Builder.update_node(@contact, :name, name, params)
|
|
31
|
-
parent_node << @contact
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
def add_phone(phone, params = {})
|
|
35
|
-
params.merge!({ valid_values: VALID_VALUES, valid_parameters: VALID_PARAMETERS })
|
|
36
|
-
AdfBuilder::Builder.update_node(@contact, :phone, phone, params)
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
def add_email(email, params = {})
|
|
40
|
-
params.merge!({ valid_values: VALID_VALUES, valid_parameters: VALID_PARAMETERS })
|
|
41
|
-
AdfBuilder::Builder.update_node(@contact, :email, email, params)
|
|
42
|
-
end
|
|
43
|
-
end
|
|
44
|
-
end
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module AdfBuilder
|
|
4
|
-
class Id
|
|
5
|
-
def initialize; end
|
|
6
|
-
|
|
7
|
-
# add id tag to the form
|
|
8
|
-
def add(parent_node, value, source = nil, sequence = 1)
|
|
9
|
-
id_node = Ox::Element.new("id")
|
|
10
|
-
id_node << value
|
|
11
|
-
id_node[:sequence] = sequence
|
|
12
|
-
|
|
13
|
-
id_node[:source] = source if source
|
|
14
|
-
|
|
15
|
-
parent_node.prepend_child(id_node)
|
|
16
|
-
end
|
|
17
|
-
end
|
|
18
|
-
end
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module AdfBuilder
|
|
4
|
-
class ColorCombinations
|
|
5
|
-
FREE_TEXT_OPTIONAL_TAGS = %i[interiorcolor exteriorcolor preference].freeze
|
|
6
|
-
|
|
7
|
-
def initialize(vehicle)
|
|
8
|
-
@vehicle = vehicle
|
|
9
|
-
@color_combination = nil
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
def add(interior_color, exterior_color, preference)
|
|
13
|
-
@color_combination = Ox::Element.new("colorcombination")
|
|
14
|
-
@color_combination <<
|
|
15
|
-
(Ox::Element.new("interiorcolor") << interior_color) <<
|
|
16
|
-
(Ox::Element.new("exteriorcolor") << exterior_color) <<
|
|
17
|
-
(Ox::Element.new("preference") << preference.to_s)
|
|
18
|
-
@vehicle << @color_combination
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
def update_tags(index, tags)
|
|
22
|
-
valid, vehicle = AdfBuilder::Builder.valid_child?(@vehicle, "colorcombination", index)
|
|
23
|
-
return unless valid
|
|
24
|
-
|
|
25
|
-
tags.each do |key, value|
|
|
26
|
-
AdfBuilder::Builder.update_node(vehicle, key, value) if FREE_TEXT_OPTIONAL_TAGS.include? key.to_sym
|
|
27
|
-
end
|
|
28
|
-
end
|
|
29
|
-
end
|
|
30
|
-
end
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module AdfBuilder
|
|
4
|
-
class Price
|
|
5
|
-
VALID_PARAMETERS = {
|
|
6
|
-
price: %i[type currency delta relativeto source]
|
|
7
|
-
}.freeze
|
|
8
|
-
|
|
9
|
-
VALID_VALUES = {
|
|
10
|
-
price: {
|
|
11
|
-
type: %w[quote offer msrp invoice call appraisal asking],
|
|
12
|
-
currency: true,
|
|
13
|
-
delta: %w[absolute relative percentage],
|
|
14
|
-
relativeto: %w[msrp invoice],
|
|
15
|
-
source: true
|
|
16
|
-
}
|
|
17
|
-
}.freeze
|
|
18
|
-
|
|
19
|
-
def initialize(parent_node, value, params = {})
|
|
20
|
-
@parent_node = parent_node
|
|
21
|
-
params.merge!({ valid_values: VALID_VALUES, valid_parameters: VALID_PARAMETERS })
|
|
22
|
-
validate_currency(params)
|
|
23
|
-
AdfBuilder::Builder.update_node(@parent_node, :price, value, params)
|
|
24
|
-
@price = @parent_node.price
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
def update(value, params = {})
|
|
28
|
-
params.merge!({ valid_values: VALID_VALUES, valid_parameters: VALID_PARAMETERS })
|
|
29
|
-
AdfBuilder::Builder.update_node(@parent_node, :price, value, params)
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
def validate_currency(params)
|
|
33
|
-
code = params[:currency]
|
|
34
|
-
return unless code
|
|
35
|
-
|
|
36
|
-
json = JSON.parse(File.read("./lib/adf_builder/data/iso-4217-currency-codes.json"))
|
|
37
|
-
codes = json.map { |j| j["Alphabetic_Code"] }.reject(&:nil?)
|
|
38
|
-
return if codes.include? code
|
|
39
|
-
|
|
40
|
-
params.delete(:currency)
|
|
41
|
-
end
|
|
42
|
-
end
|
|
43
|
-
end
|