musician 0.0.4 → 0.0.5

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
  SHA1:
3
- metadata.gz: a24cae27533f98ff5e6efc2d6a29fd5dbb9eaa1c
4
- data.tar.gz: dc38bae199112096122f03113813fa926f3d470e
3
+ metadata.gz: 9aa91808647c10fa546b0ec0fc1994afa5585578
4
+ data.tar.gz: 78a4be48e645e66c76103c3ba63da2b46fda4301
5
5
  SHA512:
6
- metadata.gz: 720944e72c8b1b96539b0ed567b4ae496883517f980a027a711a3be5a207a0b59a0470fca8fd3143040609d04f7e3fb73be7517151cdc822906e13116da87d4b
7
- data.tar.gz: 18bb880a7c8a7690a58f1eb59102065dad79afe9b5b7aab1c3137486e87078367b488f12357a14ed602943877acd1dbf6cef90b2d34ab437444b05d381bc66a0
6
+ metadata.gz: b09a4cd13a9b2185057f26ff8c2391ca43be1022714de3ff50686a278e096209141359b9ecefb3f3125f18c676f669db66a2976deafab8d9d8aec47eaa373747
7
+ data.tar.gz: 246c1ba61b6f4421e3e127f726343b3b886b63d5ebb0c2b5fa585c1277aba8227a5cee1ffb026dc1d5ea1a743d3a3b35489a13c64e1711f9330e70fcf66bcbca
@@ -2,59 +2,54 @@ class Chord < Note
2
2
 
3
3
  attr_accessor :name, :raw_name, :addition
4
4
 
5
- def initialize(name)
6
- # ちょっとややこしいし良くないかもしれないけど、
7
- # 一応 @name chord の name になってて、@raw_name が addition (maj7, dim とか)なしの name
8
- # こう: @name #=> "G♭m" @raw_name #=> "G♭"
9
- # でも、Note.name は普通は maj7 や dim とかはないから、OOP においては Chord.name はおかしいかもしれない
10
- # Note.name は Chord.name と違うので、OOPの考え方においては良くないかもしれない。
11
- # でも、Note.name と Chord.name はバリ分かりやすいと思うのでそのようにしたい。
12
- # とりあえす、Chord.name は Note.name とは違うという風に書いています。
13
- @name = name
14
- raw_elements = sanitize_method
15
- super(raw_elements[0]) # 一応 raw_name で Note のインスタンス変数を作る
16
- @raw_name = change_symbol
17
- @addition = raw_elements[1]
18
- @name = name
19
- @name = change_symbol
5
+ def initialize(initial_name)
6
+ # Chord.name と Note.name はそもそも違うものなのでOOPにおいては良くないかもしれない
7
+ # こう: 「Note.name #=> "G"」 「Chord.name #=> "Gm7"」
8
+ # でも、Note.nameとChord.nameは分かりやすいので、これで行きます。
9
+ # そのために、Noteのインスタンス変数をadditionなしで作ってから、name, raw_nameとadditionを定義しています。
10
+
11
+ raw_elements = sanitize(initial_name)
12
+ super(raw_elements[:raw_name]) # Noteのインスタンス変数を作る
13
+
14
+ @name = change_symbol(initial_name)
15
+ @raw_name = change_symbol(raw_elements[:raw_name])
16
+ @addition = raw_elements[:addition]
20
17
  end
21
18
 
22
- # note.rbだけで置くようにしたいけど、raw_nameが。。。
23
19
  def position
24
20
  if sharp?
25
- SHARP_CHORDS.index(raw_name)
21
+ SHARP_CHORDS.index(@raw_name)
26
22
  else
27
- FLAT_CHORDS.index(raw_name)
23
+ FLAT_CHORDS.index(@raw_name)
28
24
  end
29
25
  end
30
26
 
31
27
  private
32
- def sanitize_method
28
+ def sanitize(initial_name)
33
29
 
34
- addition = String.new
35
- raw = Array.new
30
+ raw_elements = {
31
+ raw_name: String.new,
32
+ addition: String.new
33
+ }
36
34
 
37
- # additionがあるか確認する
35
+ # intial_nameにはadditionがあるかどうか確認する
38
36
  finished_search = false
39
- until !addition.empty? || finished_search == true
40
- ADDITIONS.each do |add|
41
- regexp = Regexp.new(add)
42
- raw = Array.new
43
- if name.match(regexp)
44
- addition = add
45
- raw << name.gsub(add, "")
46
- raw << add
37
+ until !(raw_elements[:addition].empty?) || finished_search == true
38
+ ADDITIONS.each do |addition|
39
+ regexp = Regexp.new(addition)
40
+ if initial_name.match(regexp)
41
+ raw_elements[:raw_name] = initial_name.gsub(addition, "")
42
+ raw_elements[:addition] = addition
47
43
  break
48
44
  end
49
45
  end
50
46
  # もしadditionがなければ、nameをそのまま返して、additionが空の配列のまま返す
51
- if addition.empty?
52
- raw << name
53
- raw << addition
47
+ if raw_elements[:addition].empty?
48
+ raw_elements[:raw_name] = initial_name
54
49
  end
55
50
  finished_search = true
56
51
  end
57
- raw
52
+ raw_elements
58
53
  end
59
54
 
60
55
  end
@@ -3,29 +3,30 @@ class Note
3
3
  attr_accessor :name
4
4
 
5
5
  def initialize(name)
6
- @name = name
7
- @name = change_symbol
6
+ @name = change_symbol(name)
8
7
  end
9
8
 
10
- def change_symbol
11
- @name = @name.tr("#b", "#{Sharp}#{Flat}") # gsub()の変わりに「tr」を使ってる(・ω・)
12
- end
13
-
14
- # Noteを初期化する時に#は♯に変換されるから両方が要るかな。。。
9
+ # 「#」と「b」要らんと思う
15
10
  def sharp?
16
- !!name.match(/#/) || !!name.match(/♯/) # 真偽を返して欲しかったから次のように書きました
11
+ !!@name.match(/#/) || !!@name.match(/♯/) # 真偽を返して欲しかった「!!」を入れました
17
12
  end
18
13
 
19
14
  def flat?
20
- !!name.match(/b/) || !!name.match(/♭/)
15
+ !!@name.match(/b/) || !!@name.match(/♭/)
21
16
  end
22
17
 
23
18
  def position
24
19
  if sharp?
25
- SHARP_CHORDS.index(name)
20
+ SHARP_CHORDS.index(@name)
26
21
  else
27
- FLAT_CHORDS.index(name)
22
+ FLAT_CHORDS.index(@name)
28
23
  end
29
24
  end
30
25
 
26
+ private
27
+
28
+ def change_symbol(note)
29
+ note = note.tr("#b", "#{Sharp}#{Flat}") # gsub()の変わりに「tr」を使ってる(・ω・)
30
+ end
31
+
31
32
  end
@@ -2,12 +2,23 @@ class Song
2
2
 
3
3
  attr_accessor :key, :chords, :title, :tempo
4
4
 
5
- # keyは文字列で、chordsは文字列の配列
5
+
6
6
  def initialize(key, chords)
7
- @key = Chord.new(key)
7
+ # 文字列かChordのインスタンス変数、両方で定義できるように
8
+ unless key.instance_of? Chord
9
+ @key = Chord.new(key)
10
+ else
11
+ @key = key
12
+ end
13
+
8
14
  @chords = chords.map do |chord|
9
- Chord.new(chord)
15
+ unless chord.instance_of? Chord
16
+ Chord.new(chord)
17
+ else
18
+ chord
19
+ end
10
20
  end
21
+
11
22
  # 作る時に定義しなくていいけど、一応自分で定義できる
12
23
  @title = ""
13
24
  @tempo = ""
@@ -20,8 +31,10 @@ class Song
20
31
  end
21
32
 
22
33
  def key_change(new_key, option=:sharp)
23
- # unless new_key.instance_of? Chord then new_key = Chord.new(new_key)
24
- new_key = Chord.new(new_key) # もうすでにChordクラスであればこれを飛ばすようにする
34
+
35
+ unless new_key.instance_of? Chord
36
+ new_key = Chord.new(new_key)
37
+ end
25
38
 
26
39
  if key.position < new_key.position
27
40
  key_up = true
@@ -2,7 +2,7 @@ Sharp = "♯"
2
2
  Flat = "♭"
3
3
  SHARP_CHORDS = ["C", "C♯", "D", "D♯", "E", "F", "F♯", "G", "G♯", "A", "A♯", "B"]
4
4
  FLAT_CHORDS = ["C", "D♭", "D", "E♭", "E", "F", "G♭", "G", "A♭", "A", "B♭", "B"]
5
- ADDITIONS = ["dim7", "dim", "2", "sus4", "sus", "maj7", "maj", "m7", "m", "aug", "7", "6", "9", "11"]
5
+ ADDITIONS = ["add2", "add9", "dim7", "dim", "sus4", "sus", "maj7", "maj", "m7", "m", "aug", "2", "6", "7", "9", "11"]
6
6
 
7
7
  require 'files/note'
8
8
  require 'files/chord'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: musician
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gabriel Arcangel Zayas