stringed 0.0.2 → 0.0.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.
- data/Gemfile.lock +1 -1
- data/README.md +2 -3
- data/lib/stringed.rb +1 -1
- data/lib/stringed/formatters.rb +67 -0
- data/lib/stringed/instrument.rb +7 -0
- data/lib/stringed/instrument_string.rb +9 -1
- data/lib/stringed/version.rb +1 -1
- data/spec/stringed/instrument_spec.rb +26 -4
- data/spec/stringed/instrument_string_spec.rb +17 -0
- metadata +3 -2
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -18,8 +18,7 @@ Or install it yourself as:
|
|
18
18
|
|
19
19
|
## Usage
|
20
20
|
|
21
|
-
|
22
|
-
guitar.
|
21
|
+
See specs for usage.
|
23
22
|
|
24
23
|
## Contributing
|
25
24
|
|
@@ -27,4 +26,4 @@ Or install it yourself as:
|
|
27
26
|
2. Create your feature branch (`git checkout -b my-new-feature`)
|
28
27
|
3. Commit your changes (`git commit -am 'Add some feature'`)
|
29
28
|
4. Push to the branch (`git push origin my-new-feature`)
|
30
|
-
5. Create new Pull Request
|
29
|
+
5. Create new Pull Request. Please provide tests.
|
data/lib/stringed.rb
CHANGED
@@ -0,0 +1,67 @@
|
|
1
|
+
module Stringed
|
2
|
+
|
3
|
+
module Formatters
|
4
|
+
|
5
|
+
module ASCII
|
6
|
+
def self.fret_numbers(string)
|
7
|
+
fret_numbers = " "*(string.to_s.length)
|
8
|
+
string.frets.each{ |fret| fret_numbers << " "*6 << fret.to_s }
|
9
|
+
fret_numbers << "\n"
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
class ASCIIString
|
14
|
+
include ASCII
|
15
|
+
|
16
|
+
def initialize(string,options)
|
17
|
+
@selected_frets = options.fetch(:selected_frets,[])
|
18
|
+
@output = "#{string.to_s} |"
|
19
|
+
@string = string
|
20
|
+
@string.frets.each do |fret|
|
21
|
+
if @selected_frets.include?(fret) then
|
22
|
+
@output << "--x--|"
|
23
|
+
else
|
24
|
+
@output << "-----|"
|
25
|
+
end
|
26
|
+
end
|
27
|
+
@output << "\n"
|
28
|
+
@output << fret_numbers if options.has_key? :numbered_frets
|
29
|
+
end
|
30
|
+
|
31
|
+
def fret_numbers
|
32
|
+
ASCII.fret_numbers(@string)
|
33
|
+
end
|
34
|
+
|
35
|
+
def to_s
|
36
|
+
@output
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
|
41
|
+
class ASCIIInstrument
|
42
|
+
include ASCII
|
43
|
+
|
44
|
+
def initialize(instrument, options={})
|
45
|
+
@selected_frets = options.fetch(:selected_frets,[])
|
46
|
+
@output = ""
|
47
|
+
@instrument = instrument
|
48
|
+
@instrument.strings.each_with_index do |string,i|
|
49
|
+
selected_frets = @selected_frets[i] ? @selected_frets[i] : []
|
50
|
+
@output << string.to(:ascii,selected_frets: selected_frets ).to_s
|
51
|
+
end
|
52
|
+
@output << fret_numbers if options.fetch(:numbered_frets,true)
|
53
|
+
end
|
54
|
+
|
55
|
+
def fret_numbers
|
56
|
+
ASCII.fret_numbers(@instrument.strings[@instrument.strings.map{|i| i.to_s.length}.each_with_index.max[1]])
|
57
|
+
end
|
58
|
+
|
59
|
+
def to_s
|
60
|
+
@output
|
61
|
+
end
|
62
|
+
|
63
|
+
end
|
64
|
+
|
65
|
+
end
|
66
|
+
|
67
|
+
end
|
data/lib/stringed/instrument.rb
CHANGED
@@ -3,11 +3,12 @@ module Stringed
|
|
3
3
|
class InstrumentString
|
4
4
|
include Music
|
5
5
|
|
6
|
-
attr_reader :root_note, :fret_count
|
6
|
+
attr_reader :root_note, :fret_count, :frets
|
7
7
|
|
8
8
|
def initialize(root_note, options={})
|
9
9
|
@root_note = Music::Note.new(root_note.to_s)
|
10
10
|
@fret_count = options.fetch(:fret_count,14)
|
11
|
+
@frets =* (1..@fret_count)
|
11
12
|
end
|
12
13
|
|
13
14
|
def fret_note(fret_no)
|
@@ -48,5 +49,12 @@ module Stringed
|
|
48
49
|
matches.flatten.compact.sort
|
49
50
|
end
|
50
51
|
|
52
|
+
def to(format,options={})
|
53
|
+
require "stringed/formatters"
|
54
|
+
if format == :ascii then
|
55
|
+
Formatters::ASCIIString.new(self,options)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
51
59
|
end
|
52
60
|
end
|
data/lib/stringed/version.rb
CHANGED
@@ -4,20 +4,20 @@ describe Stringed::Instrument do
|
|
4
4
|
|
5
5
|
let(:guitar) { Stringed::Instrument.new(%w( E2 A2 D3 G3 B3 E4 ), fret_count: 20) }
|
6
6
|
|
7
|
-
it "
|
7
|
+
it "has strings" do
|
8
8
|
guitar.strings.count.should == 6
|
9
9
|
end
|
10
10
|
|
11
|
-
it "
|
11
|
+
it "has a fret count" do
|
12
12
|
guitar.fret_count.should == 20
|
13
13
|
end
|
14
14
|
|
15
|
-
it "
|
15
|
+
it "knows where all the matches for a given note are" do
|
16
16
|
guitar.find('F').should eq [[1,13], [8,20], [3,15], [10], [6,18], [1,13]]
|
17
17
|
guitar.find('D').should eq [[10], [5, 17], [0, 12], [7, 19], [3, 15], [10]]
|
18
18
|
end
|
19
19
|
|
20
|
-
it "
|
20
|
+
it "knows where all the matches for a given chord are" do
|
21
21
|
guitar.find_chord(Chord.new(['C4', 'E4', 'G4'])).should eq [[0, 3, 8, 12, 15, 20],
|
22
22
|
[3, 7, 10, 15, 19],
|
23
23
|
[2, 5, 10, 14, 17],
|
@@ -26,4 +26,26 @@ describe Stringed::Instrument do
|
|
26
26
|
[0, 3, 8, 12, 15, 20]]
|
27
27
|
end
|
28
28
|
|
29
|
+
describe "formatting"
|
30
|
+
context "ascii" do
|
31
|
+
let(:nano) { Stringed::Instrument.new(%w( C4 G4 ), fret_count: 6)}
|
32
|
+
|
33
|
+
it "can print an ascii fretboard" do
|
34
|
+
nano.to(:ascii).to_s.should eq <<-ASCII
|
35
|
+
C4 |#{"-----|" * 6}
|
36
|
+
G4 |#{"-----|" * 6}
|
37
|
+
1 2 3 4 5 6
|
38
|
+
ASCII
|
39
|
+
end
|
40
|
+
|
41
|
+
it "can print selected frets" do
|
42
|
+
nano.to(:ascii, selected_frets: [[1,4],[3]]).to_s.should eq <<-ASCII
|
43
|
+
C4 |--x--|-----|-----|--x--|-----|-----|
|
44
|
+
G4 |-----|-----|--x--|-----|-----|-----|
|
45
|
+
1 2 3 4 5 6
|
46
|
+
ASCII
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
50
|
+
|
29
51
|
end
|
@@ -40,4 +40,21 @@ describe InstrumentString do
|
|
40
40
|
e2.find_chord(Chord.new(["D3","F#3","A3"])).should eq [2,5,10,14,17]
|
41
41
|
end
|
42
42
|
|
43
|
+
context "formatting" do
|
44
|
+
let(:e2){ Stringed::InstrumentString.new('E2', { :fret_count => 6 } ) }
|
45
|
+
|
46
|
+
it "can produce an Ascii format" do
|
47
|
+
e2.to(:ascii).to_s.should eq "E2 " << "|-----" * 6 << "|\n"
|
48
|
+
end
|
49
|
+
|
50
|
+
it "can produce an Ascii format with selected notes" do
|
51
|
+
e2.to(:ascii, selected_frets: [2,5]).to_s.should eq "E2 |-----|--x--|-----|-----|--x--|-----|\n"
|
52
|
+
end
|
53
|
+
|
54
|
+
it "can number the frets" do
|
55
|
+
e2.to(:ascii, numbered_frets: true).to_s.should eq "E2 " << "|-----" * 6 << "|\n" << " 1 2 3 4 5 6\n"
|
56
|
+
end
|
57
|
+
|
58
|
+
end
|
59
|
+
|
43
60
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: stringed
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-02-
|
12
|
+
date: 2013-02-17 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: music
|
@@ -58,6 +58,7 @@ files:
|
|
58
58
|
- README.md
|
59
59
|
- Rakefile
|
60
60
|
- lib/stringed.rb
|
61
|
+
- lib/stringed/formatters.rb
|
61
62
|
- lib/stringed/instrument.rb
|
62
63
|
- lib/stringed/instrument_string.rb
|
63
64
|
- lib/stringed/version.rb
|