xml_data_extractor 0.5.0 → 0.7.0

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: b8705267e58445a552f2821a726e431ca93259e0782be80f2d47c2bcf1603aad
4
- data.tar.gz: bd59596a4a0d554b055920a09891efeecc8589532b7d02e9e7b4715c54294eee
3
+ metadata.gz: 3ccf3896b8adc3cb9ba64a765dc2de230907f158ad382099d033883f4cbdec10
4
+ data.tar.gz: a7e943f874802f0e4bdb8059e59cb9dd2fc540a7b544a44d1d7661b58da891cb
5
5
  SHA512:
6
- metadata.gz: 736fa4908c03918c71417b73e519fcfc658f65a1d7b4b2762ff00e73854e4f0a6f7495963ae68081403e52b50a26aae5dc9393dad66df9f366bd89c4e9af6ba9
7
- data.tar.gz: 4ae406899d4538f2f92ec470502b1905a80bbda13273521a2b8d0d94207401cd9c0495ff20bc4c69351d2f4dc34aa21b4606504f716e019148734fe3d45f4f49
6
+ metadata.gz: bff74929a92c52e75bb78dc11770f35b011b6b3f2d7d8567ab7dac533e0c18e25198ca66613149f187a6c158b2e159ae674a8b8ce27229b9760c47c9a4c567b3
7
+ data.tar.gz: 1e5b529ea824d2cf1c2062b7b4b474b9151ad28a13d63e5bce674c93d25b11ef6e77998f551d640fbad965c5a3a053191be6d74dd05378b2988281adcfbff8f7
data/.editorconfig ADDED
@@ -0,0 +1,8 @@
1
+ [*]
2
+ end_of_line = lf
3
+
4
+ [*.{js,rb,yml,json,css,scss,html,erb,rake,slim}]
5
+ insert_final_newline = true
6
+ indent_style = space
7
+ indent_size = 2
8
+ trim_trailing_whitespace = true
@@ -1,31 +1,29 @@
1
1
  name: ci
2
- on:
3
- push:
2
+
3
+ on: [push, pull_request]
4
4
 
5
5
  jobs:
6
6
  qa:
7
7
  timeout-minutes: 5
8
8
  runs-on: ubuntu-latest
9
+ strategy:
10
+ matrix:
11
+ ruby-version: ['2.7', '3.0', '3.1']
12
+
9
13
  steps:
10
14
  - name: Checkout code
11
- uses: actions/checkout@v2.3.4
15
+ uses: actions/checkout@v3
12
16
 
13
17
  - name: Freeze autogenerated files
14
18
  run: |
15
19
  chmod 0444 Gemfile.lock
16
20
 
17
- - name: Setup Ruby
21
+ - name: Setup Ruby ${{ matrix.ruby-version }}
18
22
  uses: ruby/setup-ruby@v1
19
-
20
- - name: Cache Ruby Dependencies
21
- uses: actions/cache@v2.1.4
22
23
  with:
23
- path: vendor/bundle
24
- key: ${{ runner.os }}-gem-${{ hashFiles('.ruby-version') }}-${{ hashFiles('**/Gemfile.lock') }}
25
-
26
- - name: Setup project
27
- run: bin/setup
24
+ ruby-version: ${{ matrix.ruby-version }}
25
+ bundler-cache: true
28
26
 
29
27
  - name: Run tests
30
28
  run: |
31
- bin/rspec
29
+ bin/rspec
data/.gitignore CHANGED
@@ -6,6 +6,7 @@
6
6
  /pkg/
7
7
  /spec/reports/
8
8
  /tmp/
9
+ *.gem
9
10
 
10
11
  # rspec failure tracking
11
12
  .rspec_status
data/Gemfile.lock CHANGED
@@ -1,54 +1,52 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- xml_data_extractor (0.4.0)
5
- activesupport (~> 6.0)
4
+ xml_data_extractor (0.7.0)
5
+ activesupport (~> 7.0)
6
6
  nokogiri (~> 1.0)
7
7
 
8
8
  GEM
9
9
  remote: https://rubygems.org/
10
10
  specs:
11
- activesupport (6.1.3)
11
+ activesupport (7.0.4)
12
12
  concurrent-ruby (~> 1.0, >= 1.0.2)
13
13
  i18n (>= 1.6, < 2)
14
14
  minitest (>= 5.1)
15
15
  tzinfo (~> 2.0)
16
- zeitwerk (~> 2.3)
17
- concurrent-ruby (1.1.8)
18
- diff-lcs (1.4.4)
19
- i18n (1.8.9)
16
+ concurrent-ruby (1.1.10)
17
+ diff-lcs (1.5.0)
18
+ i18n (1.12.0)
20
19
  concurrent-ruby (~> 1.0)
21
- mini_portile2 (2.5.0)
22
- minitest (5.14.3)
23
- nokogiri (1.11.2)
24
- mini_portile2 (~> 2.5.0)
20
+ mini_portile2 (2.8.0)
21
+ minitest (5.16.3)
22
+ nokogiri (1.13.8)
23
+ mini_portile2 (~> 2.8.0)
25
24
  racc (~> 1.4)
26
- racc (1.5.2)
27
- rake (12.3.3)
28
- rspec (3.10.0)
29
- rspec-core (~> 3.10.0)
30
- rspec-expectations (~> 3.10.0)
31
- rspec-mocks (~> 3.10.0)
32
- rspec-core (3.10.1)
33
- rspec-support (~> 3.10.0)
34
- rspec-expectations (3.10.1)
25
+ racc (1.6.0)
26
+ rake (13.0.6)
27
+ rspec (3.11.0)
28
+ rspec-core (~> 3.11.0)
29
+ rspec-expectations (~> 3.11.0)
30
+ rspec-mocks (~> 3.11.0)
31
+ rspec-core (3.11.0)
32
+ rspec-support (~> 3.11.0)
33
+ rspec-expectations (3.11.1)
35
34
  diff-lcs (>= 1.2.0, < 2.0)
36
- rspec-support (~> 3.10.0)
37
- rspec-mocks (3.10.1)
35
+ rspec-support (~> 3.11.0)
36
+ rspec-mocks (3.11.1)
38
37
  diff-lcs (>= 1.2.0, < 2.0)
39
- rspec-support (~> 3.10.0)
40
- rspec-support (3.10.1)
41
- tzinfo (2.0.4)
38
+ rspec-support (~> 3.11.0)
39
+ rspec-support (3.11.1)
40
+ tzinfo (2.0.5)
42
41
  concurrent-ruby (~> 1.0)
43
- zeitwerk (2.4.2)
44
42
 
45
43
  PLATFORMS
46
44
  ruby
47
45
 
48
46
  DEPENDENCIES
49
- rake (~> 12.0)
47
+ rake (~> 13.0)
50
48
  rspec (~> 3.0)
51
49
  xml_data_extractor!
52
50
 
53
51
  BUNDLED WITH
54
- 2.1.4
52
+ 2.3.22
data/README.md CHANGED
@@ -300,6 +300,295 @@ schemas:
300
300
  }
301
301
  ```
302
302
 
303
+ ### link
304
+
305
+ This command is useful when the XML contains references to other nodes, it works as a SQL JOIN. The path must be and expression containing the `<link>` identifier, which will be replaced by the value fetched from the `link:` command.
306
+
307
+ Example:
308
+ ```yml
309
+ schemas:
310
+ bookings:
311
+ array_of: booking
312
+ date: booking_date
313
+ document: id
314
+ products:
315
+ array_of:
316
+ accomodation:
317
+ path: ../hotel[booking_id=<link>]/accomodation
318
+ link: id
319
+ ```
320
+ ```xml
321
+ <xml>
322
+ <booking>
323
+ <id>1</id>
324
+ <booking_date>2020-01-01</booking_date>
325
+ </booking>
326
+ <booking>
327
+ <id>2</id>
328
+ <booking_date>2020-01-02</booking_date>
329
+ </booking>
330
+ <hotel>
331
+ <booking_id>1</booking_id>
332
+ <accomodation>Standard</accomodation>
333
+ </hotel>
334
+ <hotel>
335
+ <booking_id>2</booking_id>
336
+ <accomodation>Premium</accomodation>
337
+ </hotel>
338
+ </xml>
339
+ ```
340
+ ```ruby
341
+ {
342
+ bookings: [
343
+ {
344
+ date: "2020-01-01",
345
+ document: "1"
346
+ products: [
347
+ { accomodation: "Standard" }
348
+ ]
349
+ },
350
+ {
351
+ date: "2020-01-02",
352
+ document: "2"
353
+ products: [
354
+ { accomodation: "Premium" }
355
+ ]
356
+ }
357
+ ]
358
+ }
359
+ ```
360
+
361
+ In this example if I didn't use the `link` to get only the hotel of each booking, it would have returned two accomodations for each booking and instead of extract a string with the accomodation it would extract an array with all the accomodations for each booking.
362
+
363
+ You can combine the `link` with `array_of` if you want search for a list of elements filtering by some field, just provide the `path` and the `link`:
364
+
365
+ ```yml
366
+ schemas:
367
+ bookings:
368
+ array_of: booking
369
+ date: date
370
+ document: id
371
+ products:
372
+ array_of:
373
+ path: ../products[booking_id=<link>]
374
+ link: id
375
+ ....
376
+ ```
377
+
378
+ ### uniq_by
379
+
380
+ Can only be used with **array_of**.
381
+
382
+ This functionality is useful when some XML nodes are duplicated and you want to extract data from the first occurrence only. It has a behavior similar to Ruby **uniq** method on arrays.
383
+ For each path generated from `array_of`, the value fetched using `uniq_by` will be checked against the generated collection and the path will be discarded if the value already exists.
384
+
385
+ ```yml
386
+ schemas:
387
+ bookings:
388
+ array_of:
389
+ path: booking
390
+ uniq_by: id
391
+ date: bdate
392
+ document: id
393
+ ```
394
+ ```xml
395
+ <xml>
396
+ <booking>
397
+ <id>1</id>
398
+ <bdate>2020-01-01</bdate>
399
+ </booking>
400
+ <booking>
401
+ <id>1</id>
402
+ <bdate>2020-01-01</bdate>
403
+ </booking>
404
+ </xml>
405
+ ```
406
+ ```ruby
407
+ {
408
+ bookings: [
409
+ {
410
+ date: "2020-01-01",
411
+ document: "1"
412
+ }
413
+ ]
414
+ }
415
+ ```
416
+
417
+ In this example if we don't use the tag `uniq_by` there would be extracted two elements with the same data, like:
418
+
419
+ ```ruby
420
+ {
421
+ bookings: [
422
+ {
423
+ date: "2020-01-01",
424
+ document: "1"
425
+ },
426
+ {
427
+ date: "2020-01-01",
428
+ document: "1"
429
+ }
430
+ ]
431
+ }
432
+ ```
433
+
434
+ ### array_presence: first_only
435
+
436
+ The field that contains this property will be only added to the first item of the array.
437
+
438
+ Can only be used in fields that belong to a node of `array_of`.
439
+
440
+ ```yml
441
+ passengers:
442
+ array_of: bookings/booking/passengers/passenger
443
+ id:
444
+ path: document
445
+ modifier: to_s
446
+ name:
447
+ attr: [FirstName, LastName]
448
+ modifier:
449
+ - name: join
450
+ params: [" "]
451
+ rav_tax:
452
+ array_presence: first_only
453
+ path: ../rav
454
+ modifier: to_f
455
+ ```
456
+ ```xml
457
+ <bookings>
458
+ <booking>
459
+ <rav>150<rav>
460
+ <passengers>
461
+ <passenger>
462
+ <document>109.111.019-79</document>
463
+ <FirstName>Marcelo</FirstName>
464
+ <LastName>Lauxen</LastName>
465
+ </passenger>
466
+ <passenger>
467
+ <document>110.155.019-78</document>
468
+ <FirstName>Corona</FirstName>
469
+ <LastName>Virus</LastName>
470
+ </passenger>
471
+ </passengers>
472
+ </booking>
473
+ </bookings>
474
+ ```
475
+ ```ruby
476
+ {
477
+ bookings: [
478
+ {
479
+ passengers: [
480
+ {
481
+ id: "109.111.019-79",
482
+ name: "Marcelo Lauxen",
483
+ tax_rav: 150.00
484
+ },
485
+ {
486
+ id: "110.155.019-78",
487
+ name: "Corona Virus"
488
+ }
489
+ ]
490
+ }
491
+ ]
492
+ }
493
+ ```
494
+
495
+ In this example the field `tax_rav` was only included on the first passenger because this field has the `array_presence: first_only` property.
496
+
497
+ ### in_parent
498
+
499
+ This option allows you to navigate to a parent node of the current node.
500
+
501
+ ```yml
502
+ passengers:
503
+ array_of: bookings/booking/passengers/passenger
504
+ id:
505
+ path: document
506
+ modifier: to_s
507
+ bookings_id:
508
+ in_parent: bookings
509
+ path: id
510
+ ```
511
+ ```xml
512
+ <bookings>
513
+ <bookings_id>8888</bookings_id>
514
+ <booking>
515
+ <passengers>
516
+ <passenger>
517
+ <document>109.111.019-79</document>
518
+ </passenger>
519
+ <passenger>
520
+ <document>110.155.019-78</document>
521
+ </passenger>
522
+ </passengers>
523
+ </booking>
524
+ </bookings>
525
+ ```
526
+ ```ruby
527
+ {
528
+ bookings: [
529
+ {
530
+ passengers: [
531
+ {
532
+ id: "109.111.019-79",
533
+ bookings_id: 8888
534
+ },
535
+ {
536
+ id: "110.155.019-78",
537
+ bookings_id: 8888
538
+ }
539
+ ]
540
+ }
541
+ ]
542
+ }
543
+ ```
544
+
545
+ In this example the value of `bookings_id` will be extracted starting at the node provided in `in_parent` instead of the current node. It's possible to navigate to a parent node with `../` too (xpath provides this functionality), but using `in_parent` you just need to provide the name of the parent node, it will navigate up until the parent node is found, no matter how many levels.
546
+
547
+ ### keep_if
548
+
549
+ This option allows you to keep the part of the block of the hash in the final result only if the condition matches.
550
+
551
+ ```yml
552
+ schemas:
553
+ dummy:
554
+ within: data
555
+ description: additional_desc
556
+ exchange: currency_info/value
557
+ price: price
558
+ payment:
559
+ type: payment_info/method
560
+ value: payment_info/price
561
+ keep_if: "'type' == 'invoice'"
562
+ ```
563
+ ```xml
564
+ <data>
565
+ <additional_desc>Keep walking</additional_desc>
566
+ <currency_info kind="USD">
567
+ <value>4.15</value>
568
+ </currency_info>
569
+ <price>55.09</price>
570
+ <payment_info>
571
+ <method>card</method>
572
+ <price>55.48</price>
573
+ <payment>
574
+ <installments>2</installments>
575
+ <card_number>333</card_number>
576
+ </payment>
577
+ </payment>
578
+ <data>
579
+ ```
580
+ ```ruby
581
+ {
582
+ dummy: {
583
+ description: "Keep walking",
584
+ exchange: "4.15",
585
+ price: "55.09"
586
+ }
587
+ }
588
+ ```
589
+
590
+ In this example the condition didn't match since the payment method was `card` instead of `invoice` and then the extracted payment hash was removed from the final result.
591
+
303
592
  ### Formatting:
304
593
 
305
594
  #### fixed
@@ -379,7 +668,7 @@ schemas:
379
668
  path: [firstname, lastname]
380
669
  modifier:
381
670
  - name: join
382
- params: [" "]
671
+ params: [" "]
383
672
  - downcase
384
673
  ```
385
674
  ```xml
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Extract
2
4
  class ArrayOf < Base
3
5
  def initialize(node, extractor, index = 0)
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Extract
2
4
  class ArrayValue < Base
3
5
  def value
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Extract
2
4
  class Base
3
5
  def initialize(node, extractor)
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Extract
2
4
  class Expression
3
5
  def initialize(expression, hash)
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Extract
2
4
  class HashBuilder < Base
3
5
  INTERNAL_FIELDS = %i[array_of keep_if within unescape].freeze
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Extract
2
4
  class StringValue < Base
3
5
  def value
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Extract
2
4
  class Unescape < Base
3
5
  def unescape!
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative "base"
2
4
  require_relative "array_value"
3
5
  require_relative "array_of"
@@ -25,7 +27,7 @@ module Extract
25
27
 
26
28
  def value_for_hash
27
29
  props = node.props
28
-
30
+
29
31
  Unescape.new(node, extractor).unescape! if props[:unescape]
30
32
 
31
33
  fixed_value = props[:fixed]
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Extract
2
4
  class Within < Base
3
5
  def value
data/lib/src/extractor.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "cgi"
2
4
  require "active_support/core_ext/string"
3
5
  require_relative "format/formatter"
@@ -37,7 +39,7 @@ class PathBuilder < Struct.new(:base, :parent, :tag, keyword_init: true)
37
39
  end
38
40
 
39
41
  def matching_tags?(item, tag)
40
- item.gsub(/\[\d\]/, "") == tag
42
+ item.gsub(/\[\d+\]/, "") == tag
41
43
  end
42
44
  end
43
45
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative "mapper"
2
4
  require_relative "modifier"
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Format
2
4
  class Mapper
3
5
  def initialize(yml)
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Format
2
4
  class Modifier
3
5
  def initialize(yml, helper)
data/lib/src/node.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Node < Struct.new(:props, :path)
2
4
  def initialize(*)
3
5
  super
@@ -1,17 +1,18 @@
1
1
  Gem::Specification.new do |spec|
2
2
  spec.name = "xml_data_extractor"
3
- spec.version = "0.5.0"
3
+ spec.version = "0.7.0"
4
4
  spec.authors = ["Fernando Almeida"]
5
5
  spec.email = ["fernandoprsbr@gmail.com"]
6
6
 
7
7
  spec.summary = "Provides a simples DSL for extracting data from XML documents"
8
8
  spec.homepage = "https://github.com/monde-sistemas/xml_data_extractor"
9
9
  spec.license = "MIT"
10
- spec.required_ruby_version = Gem::Requirement.new(">= 2.3.0")
10
+ spec.required_ruby_version = Gem::Requirement.new(">= 2.7")
11
11
 
12
12
  spec.metadata["homepage_uri"] = spec.homepage
13
13
  spec.metadata["source_code_uri"] = spec.homepage
14
14
  spec.metadata["changelog_uri"] = spec.homepage
15
+ spec.metadata["rubygems_mfa_required"] = "true"
15
16
 
16
17
  # Specify which files should be added to the gem when it is released.
17
18
  # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
@@ -23,7 +24,7 @@ Gem::Specification.new do |spec|
23
24
  spec.require_paths = ["lib"]
24
25
 
25
26
  spec.add_dependency "nokogiri", "~> 1.0"
26
- spec.add_dependency "activesupport", "~> 6.0"
27
- spec.add_development_dependency "rake", "~> 12.0"
27
+ spec.add_dependency "activesupport", "~> 7.0"
28
+ spec.add_development_dependency "rake", "~> 13.0"
28
29
  spec.add_development_dependency "rspec", "~> 3.0"
29
30
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: xml_data_extractor
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Fernando Almeida
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-03-12 00:00:00.000000000 Z
11
+ date: 2022-09-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: nokogiri
@@ -30,28 +30,28 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '6.0'
33
+ version: '7.0'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '6.0'
40
+ version: '7.0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rake
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '12.0'
47
+ version: '13.0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '12.0'
54
+ version: '13.0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rspec
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -66,20 +66,19 @@ dependencies:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
68
  version: '3.0'
69
- description:
69
+ description:
70
70
  email:
71
71
  - fernandoprsbr@gmail.com
72
72
  executables: []
73
73
  extensions: []
74
74
  extra_rdoc_files: []
75
75
  files:
76
+ - ".editorconfig"
76
77
  - ".github/dependabot.yml"
77
78
  - ".github/workflows/ci.yml"
78
79
  - ".gitignore"
79
80
  - ".kodiak.toml"
80
81
  - ".rspec"
81
- - ".ruby-version"
82
- - ".travis.yml"
83
82
  - Gemfile
84
83
  - Gemfile.lock
85
84
  - LICENSE.txt
@@ -111,7 +110,8 @@ metadata:
111
110
  homepage_uri: https://github.com/monde-sistemas/xml_data_extractor
112
111
  source_code_uri: https://github.com/monde-sistemas/xml_data_extractor
113
112
  changelog_uri: https://github.com/monde-sistemas/xml_data_extractor
114
- post_install_message:
113
+ rubygems_mfa_required: 'true'
114
+ post_install_message:
115
115
  rdoc_options: []
116
116
  require_paths:
117
117
  - lib
@@ -119,15 +119,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
119
119
  requirements:
120
120
  - - ">="
121
121
  - !ruby/object:Gem::Version
122
- version: 2.3.0
122
+ version: '2.7'
123
123
  required_rubygems_version: !ruby/object:Gem::Requirement
124
124
  requirements:
125
125
  - - ">="
126
126
  - !ruby/object:Gem::Version
127
127
  version: '0'
128
128
  requirements: []
129
- rubygems_version: 3.2.3
130
- signing_key:
129
+ rubygems_version: 3.3.7
130
+ signing_key:
131
131
  specification_version: 4
132
132
  summary: Provides a simples DSL for extracting data from XML documents
133
133
  test_files: []
data/.ruby-version DELETED
@@ -1 +0,0 @@
1
- 2.7.2
data/.travis.yml DELETED
@@ -1,6 +0,0 @@
1
- ---
2
- language: ruby
3
- cache: bundler
4
- rvm:
5
- - 2.6.6
6
- before_install: gem install bundler -v 2.1.4