portable 1.0.0.pre.alpha.2 → 1.0.0.pre.alpha.3

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: fe43368608c03ce86c76422bdd7cdaba14cc7df66452780ff8af6aedc3c3c411
4
- data.tar.gz: d90e21a8382237941ec558890ccd5b731734a4548baa054b78832989102141eb
3
+ metadata.gz: 32da634ac58591d5130ab01ddb7e6953144f663b563fdce844817473db370bde
4
+ data.tar.gz: c7b6ded1144b5cdb46ab702a5d23480d4a778b4bfa134c21f4ae884bf1ecc220
5
5
  SHA512:
6
- metadata.gz: 076c5e70d9ef53d132dfea0691917afc5776bc5e9322ee50d56284f22eb37e7ce035d09218def74b7a702dcf5cea312e8cbab960932dcfe09a70fad9e52c534d
7
- data.tar.gz: a726ceb297e8109de9996d2a9dde20561e843a83fc2a8ea9393acfe780eddc3e2c42ede6cb373c84e246292342655083bea6698ccd37c3b31a779fbe69db0863
6
+ metadata.gz: b3cbe61597e5ea310d8084cafcaea7cf75476d969e5ad833ee140397d92cfe9d7c2baf2f5d930754f1870dd1f1b757f91562d79bfdee74e870670f21c981712f
7
+ data.tar.gz: 3a101c3f5c3467060cfe7b237efec41e51435d0fe0941a753d6e6b03ba776b99f8aad1845d62015e6cf54a6bbd464902414f8bd0128d7c3cbc8682afd4d084bc
@@ -15,6 +15,10 @@ require 'objectable'
15
15
  require 'realize'
16
16
  require 'time'
17
17
 
18
+ # Shared modules/classes
19
+ require_relative 'portable/uniqueness'
20
+
21
+ # Main implementation points
18
22
  require_relative 'portable/data'
19
23
  require_relative 'portable/document'
20
24
  require_relative 'portable/rendering'
@@ -14,10 +14,14 @@ module Portable
14
14
  # Container of data sources that is inputted into a writer alongside a document.
15
15
  # It contains all the data sources the writer will use to render a document.
16
16
  class Provider
17
+ include Uniqueness
17
18
  acts_as_hashable
18
19
 
19
20
  def initialize(data_sources: [])
20
- @data_sources_by_name = pivot_by_name(Source.array(data_sources))
21
+ sources = Source.array(data_sources)
22
+ @data_sources_by_name = pivot_by_name(sources)
23
+
24
+ assert_no_duplicate_names(sources)
21
25
 
22
26
  freeze
23
27
  end
@@ -13,6 +13,7 @@ require_relative 'modeling/sheet'
13
13
  module Portable
14
14
  # Top-level object model for a renderable document.
15
15
  class Document
16
+ include Uniqueness
16
17
  acts_as_hashable
17
18
 
18
19
  attr_reader :sheets, :options
@@ -22,6 +23,8 @@ module Portable
22
23
  @sheets << Modeling::Sheet.new if @sheets.empty?
23
24
  @options = Modeling::Options.make(options)
24
25
 
26
+ assert_no_duplicate_names(@sheets)
27
+
25
28
  freeze
26
29
  end
27
30
  end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ #
4
+ # Copyright (c) 2020-present, Blue Marble Payroll, LLC
5
+ #
6
+ # This source code is licensed under the MIT license found in the
7
+ # LICENSE file in the root directory of this source tree.
8
+ #
9
+
10
+ module Portable
11
+ # Mixes in helpers for asserting uniqueness across collections
12
+ module Uniqueness
13
+ class DuplicateNameError < StandardError; end
14
+
15
+ def assert_no_duplicate_names(array)
16
+ names = array.map { |a| a.name.downcase }
17
+
18
+ return if names.uniq.length == array.length
19
+
20
+ raise DuplicateNameError, "cannot contain duplicate names: #{names}"
21
+ end
22
+ end
23
+ end
@@ -8,5 +8,5 @@
8
8
  #
9
9
 
10
10
  module Portable
11
- VERSION = '1.0.0-alpha.2'
11
+ VERSION = '1.0.0-alpha.3'
12
12
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: portable
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0.pre.alpha.2
4
+ version: 1.0.0.pre.alpha.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matthew Ruggio
@@ -185,6 +185,7 @@ files:
185
185
  - lib/portable/rendering.rb
186
186
  - lib/portable/rendering/row.rb
187
187
  - lib/portable/rendering/sheet.rb
188
+ - lib/portable/uniqueness.rb
188
189
  - lib/portable/version.rb
189
190
  - lib/portable/writers.rb
190
191
  - lib/portable/writers/base.rb