adf_builder 0.2.2 → 0.4.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a27353d159fc18c45473200eb92b6113479e81d0e1e510649bac29fcdcc54522
4
- data.tar.gz: b5613f09c70d8e636f1c1698b7faf6fabe4841bb4dbd72d4f7077cdb880b86c2
3
+ metadata.gz: 838eda978e92f15cfa05a3da07e8a80ee1348f07fb4511abcf2ae79063e0917d
4
+ data.tar.gz: 205da1b11de1d2748107a0696477787ba0a8f5971ffaabf46f1c25a13fb8079c
5
5
  SHA512:
6
- metadata.gz: 6fc9c5273a6ad3453284114c898108ed19395e87b9772ad67218b476725675a58e42781cc7e24860064e1bb4c7dd743ca8e39a9f2f7ac3f198e4df04010327df
7
- data.tar.gz: 5536658b81a4f0d11c9cde8ddb666125d7a80f696ec74e98912d8c9e69bfaad930faf773d85ecbf55c3d39e8e8d68f7753e91d39868cb10656446c980c144b48
6
+ metadata.gz: f85f57a637fcdd0e71b84afda8ad59476a2ffe7ffed04ca521f306950469a87ce895eb71339d1ab48c1fa6d9b5ebab26699654ce9556c613deb39291e876ad72
7
+ data.tar.gz: bdade6f04b5a64dbb042202052c3ba174f8263b00d735e858a1f9627ce25e4524a53b41d42200108258914c2e582efbcd8f0bf449e17a0de2fd741cd37b489dd
data/.gitignore CHANGED
@@ -10,4 +10,4 @@
10
10
  # rspec failure tracking
11
11
  .rspec_status
12
12
 
13
- build.txt
13
+ deploy.txt
data/CHANGELOG.md CHANGED
@@ -1,4 +1,10 @@
1
1
  ## [Unreleased]
2
+
3
+ ## [0.4.0] - 2026-01-19
4
+ - Modernized dependencies
5
+ - Updated `ox` to `~> 2.14.23` for better compatibility
6
+ - Added compatibility for Ruby 3.4.x
7
+ - Updated development dependencies (RSpec, Rubocop, Rake)
2
8
  - Vehicle Structure - Remaining Optional Tags that are not free text
3
9
  - option
4
10
  - finance
@@ -7,6 +13,12 @@
7
13
  - Contact
8
14
  - Vehicle
9
15
 
16
+ ## [0.3.0] - 2023-11-28
17
+ - Completed Customer - timeframe and comments tags
18
+
19
+ ## [0.2.2] - 2021-11-02
20
+ - Fixed bug where ADF and xml tags were flipped
21
+
10
22
  ## [0.2.1] - 2021-11-02
11
23
  - Add comments to the Vehicle nodes
12
24
 
data/Gemfile CHANGED
@@ -4,10 +4,3 @@ source "https://rubygems.org"
4
4
 
5
5
  # Specify your gem's dependencies in adf_builder.gemspec
6
6
  gemspec
7
-
8
- gem "rake", "~> 13.0"
9
-
10
- gem "rspec", "~> 3.0"
11
-
12
- gem "rubocop", "~> 1.7"
13
- gem 'ox', '~> 2.14'
data/Gemfile.lock CHANGED
@@ -1,48 +1,60 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- adf_builder (0.2.2)
4
+ adf_builder (0.4.0)
5
5
  ox (~> 2.14)
6
6
 
7
7
  GEM
8
8
  remote: https://rubygems.org/
9
9
  specs:
10
- ast (2.4.2)
11
- diff-lcs (1.4.4)
12
- ox (2.14.5)
13
- parallel (1.20.1)
14
- parser (3.0.2.0)
10
+ ast (2.4.3)
11
+ bigdecimal (4.0.1)
12
+ diff-lcs (1.6.2)
13
+ json (2.18.0)
14
+ language_server-protocol (3.17.0.5)
15
+ lint_roller (1.1.0)
16
+ ox (2.14.23)
17
+ bigdecimal (>= 3.0)
18
+ parallel (1.27.0)
19
+ parser (3.3.10.1)
15
20
  ast (~> 2.4.1)
16
- rainbow (3.0.0)
17
- rake (13.0.6)
18
- regexp_parser (2.1.1)
19
- rexml (3.2.5)
20
- rspec (3.10.0)
21
- rspec-core (~> 3.10.0)
22
- rspec-expectations (~> 3.10.0)
23
- rspec-mocks (~> 3.10.0)
24
- rspec-core (3.10.1)
25
- rspec-support (~> 3.10.0)
26
- rspec-expectations (3.10.1)
21
+ racc
22
+ prism (1.8.0)
23
+ racc (1.8.1)
24
+ rainbow (3.1.1)
25
+ rake (13.3.1)
26
+ regexp_parser (2.11.3)
27
+ rspec (3.13.2)
28
+ rspec-core (~> 3.13.0)
29
+ rspec-expectations (~> 3.13.0)
30
+ rspec-mocks (~> 3.13.0)
31
+ rspec-core (3.13.6)
32
+ rspec-support (~> 3.13.0)
33
+ rspec-expectations (3.13.5)
27
34
  diff-lcs (>= 1.2.0, < 2.0)
28
- rspec-support (~> 3.10.0)
29
- rspec-mocks (3.10.2)
35
+ rspec-support (~> 3.13.0)
36
+ rspec-mocks (3.13.7)
30
37
  diff-lcs (>= 1.2.0, < 2.0)
31
- rspec-support (~> 3.10.0)
32
- rspec-support (3.10.2)
33
- rubocop (1.18.4)
38
+ rspec-support (~> 3.13.0)
39
+ rspec-support (3.13.6)
40
+ rubocop (1.82.1)
41
+ json (~> 2.3)
42
+ language_server-protocol (~> 3.17.0.2)
43
+ lint_roller (~> 1.1.0)
34
44
  parallel (~> 1.10)
35
- parser (>= 3.0.0.0)
45
+ parser (>= 3.3.0.2)
36
46
  rainbow (>= 2.2.2, < 4.0)
37
- regexp_parser (>= 1.8, < 3.0)
38
- rexml
39
- rubocop-ast (>= 1.8.0, < 2.0)
47
+ regexp_parser (>= 2.9.3, < 3.0)
48
+ rubocop-ast (>= 1.48.0, < 2.0)
40
49
  ruby-progressbar (~> 1.7)
41
- unicode-display_width (>= 1.4.0, < 3.0)
42
- rubocop-ast (1.8.0)
43
- parser (>= 3.0.1.1)
44
- ruby-progressbar (1.11.0)
45
- unicode-display_width (2.0.0)
50
+ unicode-display_width (>= 2.4.0, < 4.0)
51
+ rubocop-ast (1.49.0)
52
+ parser (>= 3.3.7.2)
53
+ prism (~> 1.7)
54
+ ruby-progressbar (1.13.0)
55
+ unicode-display_width (3.2.0)
56
+ unicode-emoji (~> 4.1)
57
+ unicode-emoji (4.2.0)
46
58
 
47
59
  PLATFORMS
48
60
  arm64-darwin-20
@@ -50,10 +62,9 @@ PLATFORMS
50
62
 
51
63
  DEPENDENCIES
52
64
  adf_builder!
53
- ox (~> 2.14)
54
- rake (~> 13.0)
55
- rspec (~> 3.0)
56
- rubocop (~> 1.7)
65
+ rake (~> 13.2)
66
+ rspec (~> 3.13)
67
+ rubocop (~> 1.70)
57
68
 
58
69
  BUNDLED WITH
59
70
  2.4.4
data/adf_builder.gemspec CHANGED
@@ -12,7 +12,7 @@ Gem::Specification.new do |spec|
12
12
  spec.description = "Easily create XML in ADF format to send by email."
13
13
  spec.homepage = "https://github.com/jippylong12/adf_builder"
14
14
  spec.license = "MIT"
15
- spec.required_ruby_version = ">= 2.4.0"
15
+ spec.required_ruby_version = ">= 3.0.0"
16
16
 
17
17
  spec.metadata["homepage_uri"] = spec.homepage
18
18
  spec.metadata["source_code_uri"] = "https://github.com/jippylong12/adf_builder"
@@ -29,6 +29,9 @@ Gem::Specification.new do |spec|
29
29
 
30
30
  # Uncomment to register a new dependency of your gem
31
31
  spec.add_dependency "ox", "~> 2.14"
32
+ spec.add_development_dependency "rake", "~> 13.2"
33
+ spec.add_development_dependency "rspec", "~> 3.13"
34
+ spec.add_development_dependency "rubocop", "~> 1.70"
32
35
 
33
36
  # For more information and examples about making a new gem, checkout our
34
37
  # guide at: https://bundler.io/guides/creating_gem.html
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module AdfBuilder
2
4
  class Base
3
5
  # initialize the prospect, id, and requestdate node
@@ -6,8 +8,6 @@ module AdfBuilder
6
8
  @prospect = Prospect.new(@doc)
7
9
  end
8
10
 
9
- def prospect
10
- @prospect
11
- end
11
+ attr_reader :prospect
12
12
  end
13
- end
13
+ end
@@ -1,9 +1,11 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module AdfBuilder
2
4
  class Prospect
3
5
  STATUSES = {
4
6
  new: :new,
5
7
  resend: :resend
6
- }
8
+ }.freeze
7
9
 
8
10
  def initialize(doc)
9
11
  @doc = doc
@@ -11,7 +13,6 @@ module AdfBuilder
11
13
  @prospect = @doc.adf.prospect
12
14
  @prospect[:status] = STATUSES[:new]
13
15
 
14
-
15
16
  @request_date = RequestDate.new(@prospect)
16
17
  @vehicles = Vehicles.new(@prospect)
17
18
  @customer = Customer.new(@prospect)
@@ -19,33 +20,15 @@ module AdfBuilder
19
20
  @provider = Provider.new(@prospect)
20
21
  end
21
22
 
22
- def request_date
23
- @request_date
24
- end
25
-
26
- def vehicles
27
- @vehicles
28
- end
29
-
30
- def customer
31
- @customer
32
- end
33
-
34
- def vendor
35
- @vendor
36
- end
37
-
38
- def provider
39
- @provider
40
- end
23
+ attr_reader :request_date, :vehicles, :customer, :vendor, :provider
41
24
 
42
25
  # set status to renew
43
26
  def set_renew
44
27
  @prospect[:status] = STATUSES[:resend]
45
28
  end
46
29
 
47
- def add_id(value, source=nil, sequence=1)
30
+ def add_id(value, source = nil, sequence = 1)
48
31
  Id.new.add(@prospect, value, source, sequence)
49
32
  end
50
33
  end
51
- end
34
+ end
@@ -1,15 +1,17 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module AdfBuilder
2
4
  class RequestDate
3
- WITH_SYMBOLS = '%FT%T%:z'
4
- WITHOUT_SYMBOLS = '%Y%m%dT%H%M%S%z'
5
+ WITH_SYMBOLS = "%FT%T%:z"
6
+ WITHOUT_SYMBOLS = "%Y%m%dT%H%M%S%z"
5
7
 
6
8
  def initialize(prospect_node)
7
- @request_date_node = Ox::Element.new('requestdate')
8
- @request_date_node << DateTime.now.strftime('%FT%T%:z')
9
+ @request_date_node = Ox::Element.new("requestdate")
10
+ @request_date_node << DateTime.now.strftime("%FT%T%:z")
9
11
  prospect_node << @request_date_node
10
12
  end
11
13
 
12
- def update_val(datetime_value, format=1)
14
+ def update_val(datetime_value, format = 1)
13
15
  if format == 1
14
16
  @request_date_node.replace_text(datetime_value.strftime(WITH_SYMBOLS))
15
17
  elsif format == 2
@@ -17,4 +19,4 @@ module AdfBuilder
17
19
  end
18
20
  end
19
21
  end
20
- end
22
+ end
@@ -1,21 +1,22 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module AdfBuilder
2
4
  class Customer
3
5
  def initialize(prospect)
4
- @customer = Ox::Element.new('customer')
6
+ @customer = Ox::Element.new("customer")
5
7
  @contact = nil
8
+ @timeframe = nil
6
9
 
7
10
  prospect << @customer
8
11
  end
9
12
 
10
- def contact
11
- @contact
12
- end
13
+ attr_reader :contact, :timeframe
13
14
 
14
- def add(name, opts={})
15
+ def add(name, opts = {})
15
16
  @contact = Contact.new(@customer, name, opts)
16
17
  end
17
18
 
18
- def add_id(index, value, source=nil, sequence=1)
19
+ def add_id(index, value, source = nil, sequence = 1)
19
20
  if @prospect.locate("customer").empty?
20
21
  false
21
22
  else
@@ -23,5 +24,27 @@ module AdfBuilder
23
24
  end
24
25
  end
25
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
26
49
  end
27
- end
50
+ end
@@ -0,0 +1,44 @@
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,8 +1,8 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module AdfBuilder
2
4
  class Provider
3
-
4
-
5
- FREE_TEXT_OPTIONAL_TAGS = [:service, :url]
5
+ FREE_TEXT_OPTIONAL_TAGS = %i[service url].freeze
6
6
 
7
7
  def initialize(prospect)
8
8
  @prospect = prospect
@@ -10,41 +10,39 @@ module AdfBuilder
10
10
  @contact = nil
11
11
  end
12
12
 
13
- def contact
14
- @contact
15
- end
16
-
13
+ attr_reader :contact
17
14
 
18
- def add(name, params={})
19
- @provider = Ox::Element.new('provider')
20
- params.merge!({valid_values: AdfBuilder::Contact::VALID_VALUES, valid_parameters: AdfBuilder::Contact::VALID_PARAMETERS})
21
- AdfBuilder::Builder.update_node(@provider, :name, name, params)
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)
22
20
  @prospect << @provider
23
21
  end
24
22
 
25
- def add_contact(name, opts={})
23
+ def add_contact(name, opts = {})
26
24
  @contact = Contact.new(@provider, name, opts)
27
25
  end
28
26
 
29
- def add_phone(phone, params={})
30
- params.merge!({valid_values: AdfBuilder::Contact::VALID_VALUES, valid_parameters: AdfBuilder::Contact::VALID_PARAMETERS})
31
- AdfBuilder::Builder.update_node(@provider, :phone, phone, params)
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)
32
31
  end
33
32
 
34
- def add_email(email, params={})
35
- params.merge!({valid_values: AdfBuilder::Contact::VALID_VALUES, valid_parameters: AdfBuilder::Contact::VALID_PARAMETERS})
36
- AdfBuilder::Builder.update_node(@provider, :email, email, params)
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
37
  end
38
38
 
39
39
  def update_tags_with_free_text(tags)
40
40
  tags.each do |key, value|
41
- if FREE_TEXT_OPTIONAL_TAGS.include? key.to_sym
42
- AdfBuilder::Builder.update_node(@provider, key, value)
43
- end
41
+ AdfBuilder::Builder.update_node(@provider, key, value) if FREE_TEXT_OPTIONAL_TAGS.include? key.to_sym
44
42
  end
45
43
  end
46
44
 
47
- def add_id(index, value, source=nil, sequence=1)
45
+ def add_id(index, value, source = nil, sequence = 1)
48
46
  if @prospect.locate("provider").empty?
49
47
  false
50
48
  else
@@ -52,4 +50,4 @@ module AdfBuilder
52
50
  end
53
51
  end
54
52
  end
55
- end
53
+ end
@@ -1,10 +1,12 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module AdfBuilder
2
4
  class Contact
3
5
  VALID_PARAMETERS = {
4
- name: [:part, :type, :primarycontact],
6
+ name: %i[part type primarycontact],
5
7
  email: [:preferredcontact],
6
- phone: [:type, :time, :preferredcontact]
7
- }
8
+ phone: %i[type time preferredcontact]
9
+ }.freeze
8
10
 
9
11
  VALID_VALUES = {
10
12
  name: {
@@ -13,30 +15,30 @@ module AdfBuilder
13
15
  primarycontact: %w[0 1]
14
16
  },
15
17
  email: {
16
- preferredcontact: %w[0 1],
18
+ preferredcontact: %w[0 1]
17
19
  },
18
20
  phone: {
19
21
  preferredcontact: %w[0 1],
20
22
  type: %w[phone fax cellphone pager],
21
23
  time: %w[morning afternoon evening nopreference day]
22
24
  }
23
- }
25
+ }.freeze
24
26
 
25
- def initialize(parent_node, name, params={})
26
- @contact = Ox::Element.new('contact')
27
- params.merge!({valid_values: VALID_VALUES, valid_parameters: VALID_PARAMETERS})
28
- AdfBuilder::Builder.update_node(@contact, :name, name, params)
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)
29
31
  parent_node << @contact
30
32
  end
31
33
 
32
- def add_phone(phone, params={})
33
- params.merge!({valid_values: VALID_VALUES, valid_parameters: VALID_PARAMETERS})
34
- AdfBuilder::Builder.update_node(@contact, :phone, phone, params)
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)
35
37
  end
36
38
 
37
- def add_email(email, params={})
38
- params.merge!({valid_values: VALID_VALUES, valid_parameters: VALID_PARAMETERS})
39
- AdfBuilder::Builder.update_node(@contact, :email, email, params)
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)
40
42
  end
41
43
  end
42
- end
44
+ end
@@ -1,20 +1,18 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module AdfBuilder
2
4
  class Id
3
- def initialize
4
-
5
- end
5
+ def initialize; end
6
6
 
7
7
  # add id tag to the form
8
- def add(parent_node, value, source=nil, sequence=1)
9
- id_node = Ox::Element.new('id')
8
+ def add(parent_node, value, source = nil, sequence = 1)
9
+ id_node = Ox::Element.new("id")
10
10
  id_node << value
11
11
  id_node[:sequence] = sequence
12
12
 
13
- if source
14
- id_node[:source] = source
15
- end
13
+ id_node[:source] = source if source
16
14
 
17
15
  parent_node.prepend_child(id_node)
18
16
  end
19
17
  end
20
- end
18
+ end
@@ -1,7 +1,8 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module AdfBuilder
2
4
  class ColorCombinations
3
-
4
- FREE_TEXT_OPTIONAL_TAGS = [:interiorcolor, :exteriorcolor, :preference]
5
+ FREE_TEXT_OPTIONAL_TAGS = %i[interiorcolor exteriorcolor preference].freeze
5
6
 
6
7
  def initialize(vehicle)
7
8
  @vehicle = vehicle
@@ -9,23 +10,21 @@ module AdfBuilder
9
10
  end
10
11
 
11
12
  def add(interior_color, exterior_color, preference)
12
- @color_combination = Ox::Element.new('colorcombination')
13
+ @color_combination = Ox::Element.new("colorcombination")
13
14
  @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
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
18
19
  end
19
20
 
20
21
  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
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
28
27
  end
29
28
  end
30
29
  end
31
- end
30
+ end
@@ -1,9 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module AdfBuilder
2
4
  class Price
3
-
4
5
  VALID_PARAMETERS = {
5
- price: [:type, :currency, :delta, :relativeto, :source]
6
- }
6
+ price: %i[type currency delta relativeto source]
7
+ }.freeze
7
8
 
8
9
  VALID_VALUES = {
9
10
  price: {
@@ -13,30 +14,30 @@ module AdfBuilder
13
14
  relativeto: %w[msrp invoice],
14
15
  source: true
15
16
  }
16
- }
17
+ }.freeze
17
18
 
18
- def initialize(parent_node, value, params={})
19
+ def initialize(parent_node, value, params = {})
19
20
  @parent_node = parent_node
20
- params.merge!({valid_values: VALID_VALUES, valid_parameters: VALID_PARAMETERS})
21
+ params.merge!({ valid_values: VALID_VALUES, valid_parameters: VALID_PARAMETERS })
21
22
  validate_currency(params)
22
- AdfBuilder::Builder.update_node(@parent_node, :price, value, params)
23
+ AdfBuilder::Builder.update_node(@parent_node, :price, value, params)
23
24
  @price = @parent_node.price
24
25
  end
25
26
 
26
- def update(value, params={})
27
- params.merge!({valid_values: VALID_VALUES, valid_parameters: VALID_PARAMETERS})
28
- AdfBuilder::Builder.update_node(@parent_node, :price, value, params)
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)
29
30
  end
30
31
 
31
32
  def validate_currency(params)
32
33
  code = params[:currency]
33
- if code
34
- json = JSON.parse(File.read('./lib/adf_builder/data/iso-4217-currency-codes.json'))
35
- codes = json.map{|j| j['Alphabetic_Code']}.reject{|j| j.nil?}
36
- unless codes.include? code
37
- params.delete(:currency)
38
- end
39
- end
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)
40
41
  end
41
42
  end
42
- end
43
+ end
@@ -1,10 +1,12 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module AdfBuilder
2
4
  class Vehicles
3
5
  VALID_PARAMETERS = {
4
- vehicle: [:interest, :status],
5
- odometer: [:status, :units],
6
- imagetag: [:width, :height, :alttext],
7
- }
6
+ vehicle: %i[interest status],
7
+ odometer: %i[status units],
8
+ imagetag: %i[width height alttext]
9
+ }.freeze
8
10
 
9
11
  VALID_VALUES = {
10
12
  vehicle: {
@@ -20,12 +22,12 @@ module AdfBuilder
20
22
  height: true,
21
23
  alttext: true
22
24
  }
23
- }
25
+ }.freeze
24
26
 
25
- FREE_TEXT_OPTIONAL_TAGS = [:year, :make, :model, :vin, :stock,
26
- :trim, :doors, :bodystyle, :transmission, :pricecomments, :comments]
27
+ FREE_TEXT_OPTIONAL_TAGS = %i[year make model vin stock
28
+ trim doors bodystyle transmission pricecomments comments].freeze
27
29
 
28
- CONDITIONS = %w[excellent good fair poor unknown]
30
+ CONDITIONS = %w[excellent good fair poor unknown].freeze
29
31
 
30
32
  def initialize(prospect)
31
33
  @prospect = prospect
@@ -34,12 +36,12 @@ module AdfBuilder
34
36
  end
35
37
 
36
38
  def add_color_combination(v_index, interior_color, exterior_color, preference)
37
- valid, vehicle = AdfBuilder::Builder.valid_child?(@prospect,'vehicle', v_index)
38
- if valid
39
- cc = ColorCombinations.new(vehicle)
40
- cc.add(interior_color, exterior_color, preference)
41
- @color_combinations.push(cc)
42
- end
39
+ valid, vehicle = AdfBuilder::Builder.valid_child?(@prospect, "vehicle", v_index)
40
+ return unless valid
41
+
42
+ cc = ColorCombinations.new(vehicle)
43
+ cc.add(interior_color, exterior_color, preference)
44
+ @color_combinations.push(cc)
43
45
  end
44
46
 
45
47
  def color_combination(index)
@@ -50,74 +52,72 @@ module AdfBuilder
50
52
  @prices[index]
51
53
  end
52
54
 
53
- def add(year, make, model, params={})
54
- vehicle = Ox::Element.new('vehicle')
55
+ def add(year, make, model, params = {})
56
+ vehicle = Ox::Element.new("vehicle")
55
57
 
56
- params.merge!({valid_values: VALID_VALUES, valid_parameters: VALID_PARAMETERS})
58
+ params.merge!({ valid_values: VALID_VALUES, valid_parameters: VALID_PARAMETERS })
57
59
  AdfBuilder::Builder.update_params(vehicle, :vehicle, params)
58
60
 
59
- vehicle << (Ox::Element.new('year') << year.to_s)
60
- vehicle << (Ox::Element.new('make') << make)
61
- vehicle << (Ox::Element.new('model') << model)
61
+ vehicle << (Ox::Element.new("year") << year.to_s)
62
+ vehicle << (Ox::Element.new("make") << make)
63
+ vehicle << (Ox::Element.new("model") << model)
62
64
 
63
65
  @prospect << vehicle
64
66
  end
65
67
 
66
- def update_odometer(index, value, params={})
67
- valid, vehicle = AdfBuilder::Builder.valid_child?(@prospect,'vehicle', index)
68
- if valid
69
- params.merge!({valid_values: VALID_VALUES, valid_parameters: VALID_PARAMETERS})
70
- AdfBuilder::Builder.update_node(vehicle, 'odometer', value, params)
71
- end
68
+ def update_odometer(index, value, params = {})
69
+ valid, vehicle = AdfBuilder::Builder.valid_child?(@prospect, "vehicle", index)
70
+ return unless valid
71
+
72
+ params.merge!({ valid_values: VALID_VALUES, valid_parameters: VALID_PARAMETERS })
73
+ AdfBuilder::Builder.update_node(vehicle, "odometer", value, params)
72
74
  end
73
75
 
74
76
  def update_condition(index, value)
75
- valid, vehicle = AdfBuilder::Builder.valid_child?(@prospect,'vehicle', index)
76
- if valid and CONDITIONS.include? value
77
- AdfBuilder::Builder.update_node(vehicle, 'condition', value)
78
- end
77
+ valid, vehicle = AdfBuilder::Builder.valid_child?(@prospect, "vehicle", index)
78
+ return unless valid && CONDITIONS.include?(value)
79
+
80
+ AdfBuilder::Builder.update_node(vehicle, "condition", value)
79
81
  end
80
82
 
81
- def update_imagetag(index, value, params={})
82
- valid, vehicle = AdfBuilder::Builder.valid_child?(@prospect,'vehicle', index)
83
- if valid
84
- params.merge!({valid_values: VALID_VALUES, valid_parameters: VALID_PARAMETERS})
85
- AdfBuilder::Builder.update_node(vehicle, 'imagetag', value, params)
86
- end
83
+ def update_imagetag(index, value, params = {})
84
+ valid, vehicle = AdfBuilder::Builder.valid_child?(@prospect, "vehicle", index)
85
+ return unless valid
86
+
87
+ params.merge!({ valid_values: VALID_VALUES, valid_parameters: VALID_PARAMETERS })
88
+ AdfBuilder::Builder.update_node(vehicle, "imagetag", value, params)
87
89
  end
88
90
 
89
91
  def update_tags_with_free_text(index, tags)
90
- valid, vehicle = AdfBuilder::Builder.valid_child?(@prospect,'vehicle', index)
91
- if valid
92
- tags.each do |key, value|
93
- if FREE_TEXT_OPTIONAL_TAGS.include? key.to_sym
94
- AdfBuilder::Builder.update_node(vehicle, key, value)
95
- end
96
- end
92
+ valid, vehicle = AdfBuilder::Builder.valid_child?(@prospect, "vehicle", index)
93
+ return unless valid
94
+
95
+ tags.each do |key, value|
96
+ AdfBuilder::Builder.update_node(vehicle, key, value) if FREE_TEXT_OPTIONAL_TAGS.include? key.to_sym
97
97
  end
98
98
  end
99
99
 
100
- def add_id(index, value, source=nil, sequence=1)
101
- if @prospect.locate("vehicle").empty? or @prospect.vehicle(index).nil?
100
+ def add_id(index, value, source = nil, sequence = 1)
101
+ if @prospect.locate("vehicle").empty? || @prospect.vehicle(index).nil?
102
102
  false
103
103
  else
104
104
  Id.new.add(@prospect.vehicle(index), value, source, sequence)
105
105
  end
106
106
  end
107
107
 
108
- def add_price(index, value, params={})
109
- valid, vehicle = AdfBuilder::Builder.valid_child?(@prospect,'vehicle', index)
110
- if valid
111
- price = Price.new(vehicle, value, params)
112
- @prices.push(price)
113
- end
108
+ def add_price(index, value, params = {})
109
+ valid, vehicle = AdfBuilder::Builder.valid_child?(@prospect, "vehicle", index)
110
+ return unless valid
111
+
112
+ price = Price.new(vehicle, value, params)
113
+ @prices.push(price)
114
114
  end
115
115
 
116
116
  def add_comments(index, value)
117
- valid, vehicle = AdfBuilder::Builder.valid_child?(@prospect,'vehicle', index)
118
- if valid
119
- AdfBuilder::Builder.update_node(vehicle, 'comments', value)
120
- end
117
+ valid, vehicle = AdfBuilder::Builder.valid_child?(@prospect, "vehicle", index)
118
+ return unless valid
119
+
120
+ AdfBuilder::Builder.update_node(vehicle, "comments", value)
121
121
  end
122
122
  end
123
- end
123
+ end
@@ -1,34 +1,31 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module AdfBuilder
2
4
  class Vendor
3
5
  def initialize(prospect)
4
- @vendor = Ox::Element.new('vendor')
6
+ @vendor = Ox::Element.new("vendor")
5
7
  @contact = nil
6
8
  prospect << @vendor
7
9
  end
8
10
 
9
- def contact
10
- @contact
11
- end
11
+ attr_reader :contact
12
12
 
13
- def add(name, contact_name, opts={})
14
- @vendor << (Ox::Element.new('vendorname') << name)
13
+ def add(name, contact_name, opts = {})
14
+ @vendor << (Ox::Element.new("vendorname") << name)
15
15
  @contact = Contact.new(@vendor, contact_name, opts)
16
16
  end
17
17
 
18
18
  def add_url(url)
19
- if @vendor.locate("url").size > 0
20
- @vendor.remove_children(@vendor.url)
21
- end
22
- @vendor << (Ox::Element.new('url') << url)
19
+ @vendor.remove_children(@vendor.url) if @vendor.locate("url").size.positive?
20
+ @vendor << (Ox::Element.new("url") << url)
23
21
  end
24
22
 
25
- def add_id(index, value, source=nil, sequence=1)
23
+ def add_id(index, value, source = nil, sequence = 1)
26
24
  if @prospect.locate("vendor").empty?
27
25
  false
28
26
  else
29
27
  Id.new.add(@prospect.vendor(index), value, source, sequence)
30
28
  end
31
29
  end
32
-
33
30
  end
34
- end
31
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module AdfBuilder
4
- VERSION = "0.2.2"
4
+ VERSION = "0.4.0"
5
5
  end
data/lib/adf_builder.rb CHANGED
@@ -1,38 +1,40 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'ox'
4
- require 'json'
3
+ require "ox"
4
+ require "json"
5
5
 
6
6
  require_relative "adf_builder/version"
7
7
 
8
8
  # CUSTOMER
9
- require_relative 'adf_builder/customer/customer'
9
+ require_relative "adf_builder/customer/customer"
10
+ require_relative "adf_builder/customer/timeframe"
10
11
 
11
12
  # BASE
12
- require_relative 'adf_builder/base/base'
13
- require_relative 'adf_builder/base/prospect'
14
- require_relative 'adf_builder/base/request_date'
13
+ require_relative "adf_builder/base/base"
14
+ require_relative "adf_builder/base/prospect"
15
+ require_relative "adf_builder/base/request_date"
15
16
 
16
17
  # PROVIDER
17
- require_relative 'adf_builder/provider/provider'
18
+ require_relative "adf_builder/provider/provider"
18
19
 
19
20
  # SHARED
20
- require_relative 'adf_builder/shared/id'
21
- require_relative 'adf_builder/shared/contact'
21
+ require_relative "adf_builder/shared/id"
22
+ require_relative "adf_builder/shared/contact"
22
23
 
23
24
  # VEHICLES
24
- require_relative 'adf_builder/vehicles/vehicles'
25
- require_relative 'adf_builder/vehicles/colorcombinations'
26
- require_relative 'adf_builder/vehicles/price'
25
+ require_relative "adf_builder/vehicles/vehicles"
26
+ require_relative "adf_builder/vehicles/colorcombinations"
27
+ require_relative "adf_builder/vehicles/price"
27
28
 
28
29
  # VENDOR
29
- require_relative 'adf_builder/vendor/vendor'
30
+ require_relative "adf_builder/vendor/vendor"
30
31
 
31
32
  module AdfBuilder
32
33
  class Error < StandardError; end
34
+
33
35
  class Builder
34
36
  def initialize
35
- @doc = self.init_doc
37
+ @doc = init_doc
36
38
  @base = Base.new(@doc)
37
39
  end
38
40
 
@@ -50,17 +52,17 @@ module AdfBuilder
50
52
  prospect = Ox::Element.new("prospect")
51
53
 
52
54
  request_date = Ox::Element.new("requestdate")
53
- request_date << '2000-03-30T15:30:20-08:00'
55
+ request_date << "2000-03-30T15:30:20-08:00"
54
56
 
55
- vehicle = Ox::Element.new('vehicle')
57
+ vehicle = Ox::Element.new("vehicle")
56
58
  year = Ox::Element.new("year")
57
- year << '1999'
59
+ year << "1999"
58
60
 
59
61
  make = Ox::Element.new("make")
60
- make << 'Chevrolet'
62
+ make << "Chevrolet"
61
63
 
62
64
  model = Ox::Element.new("model")
63
- model << 'Blazer'
65
+ model << "Blazer"
64
66
 
65
67
  vehicle << year << make << model
66
68
 
@@ -69,11 +71,11 @@ module AdfBuilder
69
71
  contact = Ox::Element.new("contact")
70
72
 
71
73
  name = Ox::Element.new("name")
72
- name[:part] = 'full'
73
- name << 'John Doe'
74
+ name[:part] = "full"
75
+ name << "John Doe"
74
76
 
75
77
  phone = Ox::Element.new("phone")
76
- phone << '393-999-3922'
78
+ phone << "393-999-3922"
77
79
 
78
80
  contact << name << phone
79
81
  customer << contact
@@ -82,8 +84,8 @@ module AdfBuilder
82
84
 
83
85
  contact = Ox::Element.new("contact")
84
86
  name = Ox::Element.new("name")
85
- name[:part] = 'full'
86
- name << 'Acura of Bellevue'
87
+ name[:part] = "full"
88
+ name << "Acura of Bellevue"
87
89
 
88
90
  contact << name
89
91
  vendor << contact
@@ -103,11 +105,11 @@ module AdfBuilder
103
105
  def init_doc
104
106
  doc = Ox::Document.new
105
107
  instruct = Ox::Instruct.new(:xml)
106
- instruct[:version] = '1.0'
108
+ instruct[:version] = "1.0"
107
109
  doc << instruct
108
110
  doc << Ox::Raw.new("")
109
- instruct = Ox::Instruct.new('ADF')
110
- instruct[:version] = '1.0'
111
+ instruct = Ox::Instruct.new("ADF")
112
+ instruct[:version] = "1.0"
111
113
  doc << instruct
112
114
  adf = Ox::Element.new("adf")
113
115
  doc << adf
@@ -115,10 +117,10 @@ module AdfBuilder
115
117
  end
116
118
 
117
119
  # we will either create a new node with the value or replace the one if it is available
118
- def self.update_node(parent_node, key, value, params={})
120
+ def self.update_node(parent_node, key, value, params = {})
119
121
  key = key.to_s
120
122
  value = value.to_s
121
- if parent_node.locate(key).size > 0
123
+ if parent_node.locate(key).size.positive?
122
124
  node = parent_node.locate(key).first
123
125
  node.replace_text(value)
124
126
  else
@@ -132,12 +134,13 @@ module AdfBuilder
132
134
  # update the params by first checking if they are valid params and then checking if the values are valid if necessary
133
135
  def self.update_params(node, key, params)
134
136
  return true if params.empty?
137
+
135
138
  key = key.to_sym
136
139
  valid_values = params[:valid_values]
137
140
  valid_parameters = params[:valid_parameters]
138
- _params = AdfBuilder::Builder.whitelabel_params(params,valid_parameters, key)
139
- _params.each do |k,v|
140
- node[k] = v if valid_values[key][k] == true or valid_values[key][k].include? v.to_s
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)
141
144
  end
142
145
  end
143
146
 
@@ -148,7 +151,7 @@ module AdfBuilder
148
151
 
149
152
  def self.valid_child?(parent, tag_name, index)
150
153
  child = parent.locate(tag_name)[index]
151
- return !child.nil?,child
154
+ [!child.nil?, child]
152
155
  end
153
156
  end
154
157
  end
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: adf_builder
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - marcus.salinas
8
- autorequire:
9
8
  bindir: exe
10
9
  cert_chain: []
11
- date: 2023-05-05 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: ox
@@ -24,6 +23,48 @@ dependencies:
24
23
  - - "~>"
25
24
  - !ruby/object:Gem::Version
26
25
  version: '2.14'
26
+ - !ruby/object:Gem::Dependency
27
+ name: rake
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - "~>"
31
+ - !ruby/object:Gem::Version
32
+ version: '13.2'
33
+ type: :development
34
+ prerelease: false
35
+ version_requirements: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '13.2'
40
+ - !ruby/object:Gem::Dependency
41
+ name: rspec
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: '3.13'
47
+ type: :development
48
+ prerelease: false
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: '3.13'
54
+ - !ruby/object:Gem::Dependency
55
+ name: rubocop
56
+ requirement: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: '1.70'
61
+ type: :development
62
+ prerelease: false
63
+ version_requirements: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: '1.70'
27
68
  description: Easily create XML in ADF format to send by email.
28
69
  email:
29
70
  - 12.marcus.salinas@gmail.com
@@ -49,6 +90,7 @@ files:
49
90
  - lib/adf_builder/base/prospect.rb
50
91
  - lib/adf_builder/base/request_date.rb
51
92
  - lib/adf_builder/customer/customer.rb
93
+ - lib/adf_builder/customer/timeframe.rb
52
94
  - lib/adf_builder/data/iso-4217-currency-codes.json
53
95
  - lib/adf_builder/provider/provider.rb
54
96
  - lib/adf_builder/shared/contact.rb
@@ -65,7 +107,6 @@ metadata:
65
107
  homepage_uri: https://github.com/jippylong12/adf_builder
66
108
  source_code_uri: https://github.com/jippylong12/adf_builder
67
109
  changelog_uri: https://github.com/jippylong12/adf_builder/blob/main/CHANGELOG.md
68
- post_install_message:
69
110
  rdoc_options: []
70
111
  require_paths:
71
112
  - lib
@@ -73,15 +114,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
73
114
  requirements:
74
115
  - - ">="
75
116
  - !ruby/object:Gem::Version
76
- version: 2.4.0
117
+ version: 3.0.0
77
118
  required_rubygems_version: !ruby/object:Gem::Requirement
78
119
  requirements:
79
120
  - - ">="
80
121
  - !ruby/object:Gem::Version
81
122
  version: '0'
82
123
  requirements: []
83
- rubygems_version: 3.1.6
84
- signing_key:
124
+ rubygems_version: 3.7.2
85
125
  specification_version: 4
86
126
  summary: Create XML for the Auto-base Date Format
87
127
  test_files: []