Class: DiverDown::Web::Metadata::SourceAlias

Inherits:
Object
  • Object
show all
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

Constructor Details

#initializeSourceAlias

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>

Parameters:

  • alias_name (String)

Returns:

  • (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

Parameters:

  • alias_name (String)

Returns:

  • (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_hHash

Returns:

  • (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

#transactionObject

Rollback the changes made in the block if an conflict error occurs.

Raises:



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.

Parameters:

  • alias_name (String)
  • source_names (Array<String>)


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