Class: DiverDown::Web::Metadata::SourceAlias
- Inherits:
-
Object
- Object
- DiverDown::Web::Metadata::SourceAlias
- Defined in:
- lib/diver_down/web/metadata/source_alias.rb
Defined Under Namespace
Classes: ConflictError
Constant Summary collapse
- BLANK_RE =
/\A\s*\z/
Instance Method Summary collapse
- #aliased_source_names(alias_name) ⇒ Array<String>
-
#initialize ⇒ SourceAlias
constructor
A new instance of SourceAlias.
- #resolve_alias(source_name) ⇒ String
- #to_h ⇒ Hash
-
#transaction ⇒ Object
Rollback the changes made in the block if an conflict error occurs.
- #update_alias(alias_name, source_names) ⇒ void
Constructor Details
#initialize ⇒ SourceAlias
Returns a new instance of SourceAlias.
19 20 21 22 23 |
# File 'lib/diver_down/web/metadata/source_alias.rb', line 19 def initialize # Hash{ alias_name => Set<source_name, ...> } @alias_to_source_names = {} @source_name_to_alias = {} end |
Instance Method Details
#aliased_source_names(alias_name) ⇒ Array<String>
54 55 56 |
# File 'lib/diver_down/web/metadata/source_alias.rb', line 54 def aliased_source_names(alias_name) @alias_to_source_names[alias_name] if @alias_to_source_names.key?(alias_name) end |
#resolve_alias(source_name) ⇒ String
48 49 50 |
# File 'lib/diver_down/web/metadata/source_alias.rb', line 48 def resolve_alias(source_name) @source_name_to_alias[source_name] if @source_name_to_alias.key?(source_name) end |
#to_h ⇒ Hash
74 75 76 77 |
# File 'lib/diver_down/web/metadata/source_alias.rb', line 74 def to_h keys = @alias_to_source_names.keys.sort keys.to_h { [_1, aliased_source_names(_1)] } end |
#transaction ⇒ Object
Rollback the changes made in the block if an conflict error occurs.
61 62 63 64 65 66 67 68 69 70 71 |
# File 'lib/diver_down/web/metadata/source_alias.rb', line 61 def transaction alias_to_source_names = deep_dup(@alias_to_source_names) source_name_to_alias = deep_dup(@source_name_to_alias) yield rescue ConflictError @alias_to_source_names = alias_to_source_names @source_name_to_alias = source_name_to_alias raise end |
#update_alias(alias_name, source_names) ⇒ void
This method returns an undefined value.
28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
# File 'lib/diver_down/web/metadata/source_alias.rb', line 28 def update_alias(alias_name, source_names) source_names = source_names.reject { BLANK_RE.match?(_1) } if source_names.empty? prev_source_names = @alias_to_source_names.delete(alias_name) prev_source_names&.each do |prev_source_name| @source_name_to_alias.delete(prev_source_name) end else check_conflict(alias_name, source_names) @alias_to_source_names[alias_name] = source_names.sort source_names.each do |source_name| @source_name_to_alias[source_name] = alias_name end end end |