Class: MusicMetadataScore::Barcode

Inherits:
Object
  • Object
show all
Defined in:
lib/music_metadata_score/barcode.rb

Class Method Summary collapse

Class Method Details

.calculate_barcode(barcode) ⇒ Object



53
54
55
56
57
58
59
60
61
62
# File 'lib/music_metadata_score/barcode.rb', line 53

def self.calculate_barcode(barcode)
	barcode = barcode.to_s
	if barcode.length == 11
		(barcode[0].to_i * 3) + barcode[1].to_i + (barcode[2].to_i * 3) + barcode[3].to_i + (barcode[4].to_i * 3) + barcode[5].to_i + (barcode[6].to_i * 3) + barcode[7].to_i + (barcode[8].to_i * 3) + barcode[9].to_i + (barcode[10].to_i * 3)
	elsif barcode.length == 12
		barcode[0].to_i + (barcode[1].to_i * 3) + barcode[2].to_i + (barcode[3].to_i * 3) + barcode[4].to_i + (barcode[5].to_i * 3) + barcode[6].to_i + (barcode[7].to_i * 3) + barcode[8].to_i + (barcode[9].to_i * 3) + barcode[10].to_i + (barcode[11].to_i * 3)
	else
		nil
	end
end

.calculate_checksum(number) ⇒ Object



64
65
66
67
68
69
70
71
# File 'lib/music_metadata_score/barcode.rb', line 64

def self.calculate_checksum(number)
	over = number % 10
	if over != 0
		10 - over
	else
		0
	end
end

.get_checksum(barcode) ⇒ Object



39
40
41
42
43
44
45
46
# File 'lib/music_metadata_score/barcode.rb', line 39

def self.get_checksum(barcode)
	barcode_sum = MusicMetadataScore::Barcode.calculate_barcode(MusicMetadataScore::Barcode.remove_checksum(barcode))
	if barcode_sum != nil
		MusicMetadataScore::Barcode.calculate_checksum(barcode_sum)
	else
		nil
	end
end

.is_valid?(barcode) ⇒ Boolean

Check length Check checksum

Returns:

  • (Boolean)


6
7
8
9
10
11
12
# File 'lib/music_metadata_score/barcode.rb', line 6

def self.is_valid?(barcode)
	if MusicMetadataScore::Barcode.valid_length?(barcode) && MusicMetadataScore::Barcode.valid_characters?(barcode) && MusicMetadataScore::Barcode.valid_checksum?(barcode)
		true
	else
		false
	end
end

.remove_checksum(barcode) ⇒ Object



48
49
50
51
# File 'lib/music_metadata_score/barcode.rb', line 48

def self.remove_checksum(barcode)
	barcode = barcode.to_s
	return barcode[0..barcode.length - 2]
end

.valid_barcode_or_nil(barcode) ⇒ Object



73
74
75
76
77
78
79
# File 'lib/music_metadata_score/barcode.rb', line 73

def self.valid_barcode_or_nil(barcode)
	if MusicMetadataScore::Barcode.is_valid?(barcode)
		barcode
	else
		nil
	end
end

.valid_characters?(barcode) ⇒ Boolean

Returns:

  • (Boolean)


22
23
24
25
26
27
28
29
# File 'lib/music_metadata_score/barcode.rb', line 22

def self.valid_characters?(barcode)
	number = Integer(barcode) rescue false
	if number != false
		true
	else
		false
	end
end

.valid_checksum?(barcode) ⇒ Boolean

Returns:

  • (Boolean)


31
32
33
34
35
36
37
# File 'lib/music_metadata_score/barcode.rb', line 31

def self.valid_checksum?(barcode)
	if barcode.to_s[barcode.to_s.length - 1].to_i == MusicMetadataScore::Barcode.get_checksum(barcode)
		true
	else
		false
	end
end

.valid_length?(barcode) ⇒ Boolean

Returns:

  • (Boolean)


14
15
16
17
18
19
20
# File 'lib/music_metadata_score/barcode.rb', line 14

def self.valid_length?(barcode)
	if barcode.to_s.length == 12 || barcode.to_s.length == 13
		true
	else
		false
	end
end