gitara 0.5.0 → 0.6.0

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.
Files changed (47) hide show
  1. data/.gitignore +2 -0
  2. data/.yardopts +5 -0
  3. data/CHANGELOG.markdown +5 -0
  4. data/README.markdown +135 -99
  5. data/examples/tab-with-repeats.ly +117 -0
  6. data/examples/tab-with-repeats.rb +19 -0
  7. data/gitara.gemspec +3 -0
  8. data/lib/gitara.rb +5 -3
  9. data/lib/gitara/dsl.rb +13 -0
  10. data/lib/gitara/node/alternative.rb +14 -0
  11. data/lib/gitara/node/bar.rb +3 -1
  12. data/lib/gitara/node/base.rb +22 -24
  13. data/lib/gitara/node/base/chorded_version.rb +1 -4
  14. data/lib/gitara/node/base/node_version.rb +35 -0
  15. data/lib/gitara/node/base/stanza_version.rb +1 -4
  16. data/lib/gitara/node/base/voiced_version.rb +5 -6
  17. data/lib/gitara/node/repeat.rb +10 -0
  18. data/lib/gitara/node/tab.rb +3 -5
  19. data/lib/gitara/utilities.rb +8 -0
  20. data/lib/gitara/version.rb +1 -1
  21. data/lib/gitara/voice.rb +2 -0
  22. data/spec/factories.rb +6 -0
  23. data/spec/lib/gitara/app_spec.rb +12 -28
  24. data/spec/lib/gitara/dsl_spec.rb +218 -173
  25. data/spec/lib/gitara/node/alternative_spec.rb +15 -0
  26. data/spec/lib/gitara/node/bar/chorded_version_spec.rb +2 -2
  27. data/spec/lib/gitara/node/bar/stanza_version_spec.rb +2 -2
  28. data/spec/lib/gitara/node/bar/voiced_version_spec.rb +2 -2
  29. data/spec/lib/gitara/node/bar_spec.rb +7 -7
  30. data/spec/lib/gitara/node/base/chorded_version_spec.rb +1 -1
  31. data/spec/lib/gitara/node/base/node_version_spec.rb +66 -0
  32. data/spec/lib/gitara/node/base/voiced_version_spec.rb +5 -5
  33. data/spec/lib/gitara/node/base_spec.rb +36 -42
  34. data/spec/lib/gitara/node/chord_set/chorded_version_spec.rb +2 -2
  35. data/spec/lib/gitara/node/chord_set_spec.rb +1 -1
  36. data/spec/lib/gitara/node/note_set_spec.rb +1 -1
  37. data/spec/lib/gitara/node/repeat_spec.rb +15 -0
  38. data/spec/lib/gitara/node/stanza_spec.rb +2 -2
  39. data/spec/lib/gitara/node/tab_spec.rb +6 -6
  40. data/spec/lib/gitara/voice_spec.rb +9 -9
  41. data/spec/lib/gitara_spec.rb +3 -1
  42. data/spec/spec_helper.rb +1 -0
  43. data/spec/support/app_tester.rb +22 -0
  44. metadata +70 -29
  45. data/lib/gitara/is_node_version.rb +0 -23
  46. data/lib/gitara/pow/base.rb +0 -11
  47. data/spec/lib/gitara/is_node_version_spec.rb +0 -58
@@ -1,7 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe 'Stanza' do
4
- describe "heading_in_lilypond" do
3
+ describe Gitara::Node::Stanza do
4
+ describe "#heading_in_lilypond" do
5
5
  it "should allow the stanza's name to be added as a heading to the lilypond template" do
6
6
  stanza = FactoryGirl.build(:stanza, :name => "Verse 1", :children => [
7
7
  FactoryGirl.build(:line, :children => [
@@ -1,8 +1,8 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe 'Tab' do
4
- describe "voices" do
5
- it "should create a <max_number_of_voices> voices" do
3
+ describe Gitara::Node::Tab do
4
+ describe "#voices" do
5
+ it "should create a max_number_of_voices voices" do
6
6
  tab = FactoryGirl.build(:tab, :children => [
7
7
  FactoryGirl.build(:bar, :children => [
8
8
  FactoryGirl.build(:note_set),
@@ -17,7 +17,7 @@ describe 'Tab' do
17
17
  end
18
18
  end
19
19
 
20
- describe "max_number_of_voices" do
20
+ describe "#max_number_of_voices" do
21
21
  it "should be the max number of note_sets in a bar" do
22
22
  tab = FactoryGirl.build(:tab, :children => [
23
23
  FactoryGirl.build(:bar, :children => [
@@ -30,7 +30,7 @@ describe 'Tab' do
30
30
  end
31
31
  end
32
32
 
33
- describe "playable_child" do
33
+ describe "#playable_child" do
34
34
  it "should be the last child of the tab" do
35
35
  tab = FactoryGirl.build(:tab, :children => [
36
36
  FactoryGirl.build(:bar, :name => 'Intro', :children => [
@@ -44,7 +44,7 @@ describe 'Tab' do
44
44
  end
45
45
  end
46
46
 
47
- describe "midi_instrument" do
47
+ describe "#midi_instrument" do
48
48
  it "should have acoustic guitar (nylon) as default" do
49
49
  tab = FactoryGirl.build(:tab)
50
50
  tab.midi_instrument.should == 'acoustic guitar (nylon)'
@@ -1,37 +1,37 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Voice do
4
- describe "call_name" do
3
+ describe Gitara::Voice do
4
+ describe "#call_name" do
5
5
  it "should be the variable name of the node when called inside lilypond" do
6
6
  voice = FactoryGirl.build(:voice, :id => 1)
7
7
  voice.call_name.should == '\vOne'
8
8
  end
9
9
  end
10
10
 
11
- describe "definition_name" do
11
+ describe "#definition_name" do
12
12
  it "should be the name of the voice in a lilypond variable definition statement" do
13
13
  voice = FactoryGirl.build(:voice, :id => 1)
14
14
  voice.definition_name.should == "vOne"
15
15
  end
16
16
  end
17
17
 
18
- describe "id_as_word" do
18
+ describe "#id_as_word" do
19
19
  it "should convert the id to word" do
20
20
  node = FactoryGirl.build(:voice, :id => 1)
21
21
  node.id_as_word.should == "One"
22
22
  end
23
23
  end
24
24
 
25
- describe "stem_type" do
25
+ describe "#stem_type" do
26
26
  it "should be the lilypond stem type for the voice" do
27
27
  voice = FactoryGirl.build(:voice, :id => 1)
28
28
  voice.stem_type.should == '\voiceOne'
29
29
  end
30
30
  end
31
31
 
32
- describe "transposition" do
32
+ describe "#transposition" do
33
33
  it "should be based on the tab's transposition and the voice's octave" do
34
- tab = FactoryGirl.build(:tab,
34
+ tab = FactoryGirl.build(:tab,
35
35
  :transposition => 'd',
36
36
  :children => [
37
37
  FactoryGirl.build(:bar, :children => [
@@ -50,7 +50,7 @@ describe Voice do
50
50
  end
51
51
 
52
52
  it "should be blank if the tab has no transposition" do
53
- tab = FactoryGirl.build(:tab,
53
+ tab = FactoryGirl.build(:tab,
54
54
  :children => [
55
55
  FactoryGirl.build(:bar, :children => [
56
56
  FactoryGirl.build(:note_set),
@@ -65,7 +65,7 @@ describe Voice do
65
65
  end
66
66
  end
67
67
 
68
- describe "octave" do
68
+ describe "#octave" do
69
69
  it "should be based on the voice's position in the tab" do
70
70
  tab = FactoryGirl.build(:tab, :children => [
71
71
  FactoryGirl.build(:bar, :children => [
@@ -1,13 +1,15 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Gitara do
4
- describe "tab" do
4
+ describe ".tab" do
5
5
  it "should create a tab instance if it does not exist" do
6
6
  Gitara.tab.should be_nil
7
7
  Gitara.define
8
8
  Gitara.tab.should be_a(Node::Tab)
9
9
  end
10
+ end
10
11
 
12
+ describe ".define" do
11
13
  it "should instance evaluate a block if given" do
12
14
  tab = Gitara.define do
13
15
  bar "Intro" do
@@ -5,6 +5,7 @@ require 'pry'
5
5
  RSpec.configure do |config|
6
6
  include Gitara
7
7
  require 'factories'
8
+ require 'support/app_tester'
8
9
 
9
10
  config.before :each do
10
11
  test_tmp_dir.delete! if test_tmp_dir.exists?
@@ -0,0 +1,22 @@
1
+ # @private
2
+ class AppTester < Valuable
3
+ has_value :name
4
+
5
+ def run
6
+ app = FactoryGirl.build(:app)
7
+ app.invoke :export, ["examples/#{name}.rb"], "target-directory" => test_tmp_dir.path, "run-lilypond" => false
8
+ (Pow("tmp") / "#{name}.ly").write actual if self.expected != self.actual
9
+ end
10
+
11
+ def expected
12
+ @expected ||= Utilities.read!(Pow("examples/#{name}.ly")).gsub(/\n\s+\n/, "\n")
13
+ rescue PowError => e
14
+ puts "#{e.message}. Copying actual result..."
15
+ Pow("examples/#{name}.ly").write actual
16
+ retry
17
+ end
18
+
19
+ def actual
20
+ @actual ||= Utilities.read!((test_tmp_dir / "#{name}.ly")).gsub(/\n\s+\n/, "\n")
21
+ end
22
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gitara
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.6.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-03-18 00:00:00.000000000 Z
12
+ date: 2012-04-01 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: active_support
16
- requirement: &78713260 !ruby/object:Gem::Requirement
16
+ requirement: &69443170 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *78713260
24
+ version_requirements: *69443170
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: erubis
27
- requirement: &78713040 !ruby/object:Gem::Requirement
27
+ requirement: &69442290 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *78713040
35
+ version_requirements: *69442290
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: linguistics
38
- requirement: &78712780 !ruby/object:Gem::Requirement
38
+ requirement: &69441980 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *78712780
46
+ version_requirements: *69441980
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: pow
49
- requirement: &78712550 !ruby/object:Gem::Requirement
49
+ requirement: &69441550 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,21 @@ dependencies:
54
54
  version: '0'
55
55
  type: :runtime
56
56
  prerelease: false
57
- version_requirements: *78712550
57
+ version_requirements: *69441550
58
+ - !ruby/object:Gem::Dependency
59
+ name: redwood
60
+ requirement: &69441120 !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - ! '>='
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
66
+ type: :runtime
67
+ prerelease: false
68
+ version_requirements: *69441120
58
69
  - !ruby/object:Gem::Dependency
59
70
  name: thor
60
- requirement: &78712320 !ruby/object:Gem::Requirement
71
+ requirement: &69440840 !ruby/object:Gem::Requirement
61
72
  none: false
62
73
  requirements:
63
74
  - - ! '>='
@@ -65,10 +76,10 @@ dependencies:
65
76
  version: '0'
66
77
  type: :runtime
67
78
  prerelease: false
68
- version_requirements: *78712320
79
+ version_requirements: *69440840
69
80
  - !ruby/object:Gem::Dependency
70
81
  name: valuable
71
- requirement: &78712070 !ruby/object:Gem::Requirement
82
+ requirement: &69440430 !ruby/object:Gem::Requirement
72
83
  none: false
73
84
  requirements:
74
85
  - - ! '>='
@@ -76,10 +87,10 @@ dependencies:
76
87
  version: '0'
77
88
  type: :runtime
78
89
  prerelease: false
79
- version_requirements: *78712070
90
+ version_requirements: *69440430
80
91
  - !ruby/object:Gem::Dependency
81
92
  name: factory_girl
82
- requirement: &78711790 !ruby/object:Gem::Requirement
93
+ requirement: &69440080 !ruby/object:Gem::Requirement
83
94
  none: false
84
95
  requirements:
85
96
  - - ! '>='
@@ -87,10 +98,10 @@ dependencies:
87
98
  version: '0'
88
99
  type: :development
89
100
  prerelease: false
90
- version_requirements: *78711790
101
+ version_requirements: *69440080
91
102
  - !ruby/object:Gem::Dependency
92
103
  name: guard
93
- requirement: &78357910 !ruby/object:Gem::Requirement
104
+ requirement: &69439780 !ruby/object:Gem::Requirement
94
105
  none: false
95
106
  requirements:
96
107
  - - ! '>='
@@ -98,10 +109,10 @@ dependencies:
98
109
  version: '0'
99
110
  type: :development
100
111
  prerelease: false
101
- version_requirements: *78357910
112
+ version_requirements: *69439780
102
113
  - !ruby/object:Gem::Dependency
103
114
  name: guard-rspec
104
- requirement: &78357620 !ruby/object:Gem::Requirement
115
+ requirement: &69439500 !ruby/object:Gem::Requirement
105
116
  none: false
106
117
  requirements:
107
118
  - - ! '>='
@@ -109,10 +120,10 @@ dependencies:
109
120
  version: '0'
110
121
  type: :development
111
122
  prerelease: false
112
- version_requirements: *78357620
123
+ version_requirements: *69439500
113
124
  - !ruby/object:Gem::Dependency
114
125
  name: pry
115
- requirement: &78357380 !ruby/object:Gem::Requirement
126
+ requirement: &69439160 !ruby/object:Gem::Requirement
116
127
  none: false
117
128
  requirements:
118
129
  - - ! '>='
@@ -120,10 +131,10 @@ dependencies:
120
131
  version: '0'
121
132
  type: :development
122
133
  prerelease: false
123
- version_requirements: *78357380
134
+ version_requirements: *69439160
124
135
  - !ruby/object:Gem::Dependency
125
136
  name: rb-inotify
126
- requirement: &78357060 !ruby/object:Gem::Requirement
137
+ requirement: &69438880 !ruby/object:Gem::Requirement
127
138
  none: false
128
139
  requirements:
129
140
  - - ! '>='
@@ -131,10 +142,32 @@ dependencies:
131
142
  version: '0'
132
143
  type: :development
133
144
  prerelease: false
134
- version_requirements: *78357060
145
+ version_requirements: *69438880
135
146
  - !ruby/object:Gem::Dependency
136
147
  name: rspec
137
- requirement: &78356740 !ruby/object:Gem::Requirement
148
+ requirement: &69438580 !ruby/object:Gem::Requirement
149
+ none: false
150
+ requirements:
151
+ - - ! '>='
152
+ - !ruby/object:Gem::Version
153
+ version: '0'
154
+ type: :development
155
+ prerelease: false
156
+ version_requirements: *69438580
157
+ - !ruby/object:Gem::Dependency
158
+ name: yard
159
+ requirement: &69438320 !ruby/object:Gem::Requirement
160
+ none: false
161
+ requirements:
162
+ - - ! '>='
163
+ - !ruby/object:Gem::Version
164
+ version: '0'
165
+ type: :development
166
+ prerelease: false
167
+ version_requirements: *69438320
168
+ - !ruby/object:Gem::Dependency
169
+ name: yard-rspec
170
+ requirement: &69438040 !ruby/object:Gem::Requirement
138
171
  none: false
139
172
  requirements:
140
173
  - - ! '>='
@@ -142,7 +175,7 @@ dependencies:
142
175
  version: '0'
143
176
  type: :development
144
177
  prerelease: false
145
- version_requirements: *78356740
178
+ version_requirements: *69438040
146
179
  description: A Ruby DSL for generating Lilypond guitar tablatures.
147
180
  email:
148
181
  - gsmendoza@gmail.com
@@ -152,6 +185,7 @@ extensions: []
152
185
  extra_rdoc_files: []
153
186
  files:
154
187
  - .gitignore
188
+ - .yardopts
155
189
  - CHANGELOG.markdown
156
190
  - Gemfile
157
191
  - Guardfile
@@ -172,6 +206,8 @@ files:
172
206
  - examples/tab-with-key-signature.rb
173
207
  - examples/tab-with-partial.ly
174
208
  - examples/tab-with-partial.rb
209
+ - examples/tab-with-repeats.ly
210
+ - examples/tab-with-repeats.rb
175
211
  - examples/tab.ly
176
212
  - examples/tab.rb
177
213
  - gitara.gemspec
@@ -179,23 +215,24 @@ files:
179
215
  - lib/gitara/app.rb
180
216
  - lib/gitara/dsl.rb
181
217
  - lib/gitara/dsl_macros.rb
182
- - lib/gitara/is_node_version.rb
218
+ - lib/gitara/node/alternative.rb
183
219
  - lib/gitara/node/bar.rb
184
220
  - lib/gitara/node/bar/chorded_version.rb
185
221
  - lib/gitara/node/bar/stanza_version.rb
186
222
  - lib/gitara/node/bar/voiced_version.rb
187
223
  - lib/gitara/node/base.rb
188
224
  - lib/gitara/node/base/chorded_version.rb
225
+ - lib/gitara/node/base/node_version.rb
189
226
  - lib/gitara/node/base/stanza_version.rb
190
227
  - lib/gitara/node/base/voiced_version.rb
191
228
  - lib/gitara/node/chord_set.rb
192
229
  - lib/gitara/node/chord_set/chorded_version.rb
193
230
  - lib/gitara/node/line.rb
194
231
  - lib/gitara/node/note_set.rb
232
+ - lib/gitara/node/repeat.rb
195
233
  - lib/gitara/node/score.rb
196
234
  - lib/gitara/node/stanza.rb
197
235
  - lib/gitara/node/tab.rb
198
- - lib/gitara/pow/base.rb
199
236
  - lib/gitara/template/bar.erb
200
237
  - lib/gitara/template/chord_set.erb
201
238
  - lib/gitara/template/line.erb
@@ -210,22 +247,25 @@ files:
210
247
  - spec/factories.rb
211
248
  - spec/lib/gitara/app_spec.rb
212
249
  - spec/lib/gitara/dsl_spec.rb
213
- - spec/lib/gitara/is_node_version_spec.rb
250
+ - spec/lib/gitara/node/alternative_spec.rb
214
251
  - spec/lib/gitara/node/bar/chorded_version_spec.rb
215
252
  - spec/lib/gitara/node/bar/stanza_version_spec.rb
216
253
  - spec/lib/gitara/node/bar/voiced_version_spec.rb
217
254
  - spec/lib/gitara/node/bar_spec.rb
218
255
  - spec/lib/gitara/node/base/chorded_version_spec.rb
256
+ - spec/lib/gitara/node/base/node_version_spec.rb
219
257
  - spec/lib/gitara/node/base/voiced_version_spec.rb
220
258
  - spec/lib/gitara/node/base_spec.rb
221
259
  - spec/lib/gitara/node/chord_set/chorded_version_spec.rb
222
260
  - spec/lib/gitara/node/chord_set_spec.rb
223
261
  - spec/lib/gitara/node/note_set_spec.rb
262
+ - spec/lib/gitara/node/repeat_spec.rb
224
263
  - spec/lib/gitara/node/stanza_spec.rb
225
264
  - spec/lib/gitara/node/tab_spec.rb
226
265
  - spec/lib/gitara/voice_spec.rb
227
266
  - spec/lib/gitara_spec.rb
228
267
  - spec/spec_helper.rb
268
+ - spec/support/app_tester.rb
229
269
  homepage: ''
230
270
  licenses: []
231
271
  post_install_message:
@@ -251,3 +291,4 @@ signing_key:
251
291
  specification_version: 3
252
292
  summary: Ruby + Lilypond = pretty guitar tablatures.
253
293
  test_files: []
294
+ has_rdoc:
@@ -1,23 +0,0 @@
1
- module Gitara
2
- module IsNodeVersion
3
- def call_name
4
- "\\#{definition_name}"
5
- end
6
-
7
- def children
8
- node.children.map{|child| self.class.new(:node => child)}
9
- end
10
-
11
- def definition_name
12
- "#{prefix}#{node.class.to_s.split('::').last}#{node.definition_name}"
13
- end
14
-
15
- def prefix
16
- self.class.to_s.split('::').last[0].downcase
17
- end
18
-
19
- def value
20
- children.map(&:call_name).join(' ')
21
- end
22
- end
23
- end