unimidi 0.2.2-i386-mingw32 → 0.2.3-i386-mingw32

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/lib/unimidi.rb CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
  module UniMIDI
8
8
 
9
- VERSION = "0.2.2"
9
+ VERSION = "0.2.3"
10
10
 
11
11
  end
12
12
 
@@ -9,10 +9,12 @@ module UniMIDI
9
9
 
10
10
  class Input < CongruousApiInput
11
11
  defer_to AlsaRawMIDI::Input
12
+ device_class AlsaRawMIDI::Device
12
13
  end
13
14
 
14
15
  class Output < CongruousApiOutput
15
16
  defer_to AlsaRawMIDI::Output
17
+ device_class AlsaRawMIDI::Device
16
18
  end
17
19
 
18
20
  class Device < CongruousApiDevice
@@ -8,17 +8,28 @@ module UniMIDI
8
8
  module CoreMIDIAdapter
9
9
 
10
10
  class Input < CongruousApiInput
11
- defer_to CoreMIDI::Input
11
+ defer_to CoreMIDI::Source
12
+ device_class CoreMIDI::Endpoint
12
13
  end
13
14
 
14
15
  class Output < CongruousApiOutput
15
- defer_to CoreMIDI::Output
16
+ defer_to CoreMIDI::Destination
17
+ device_class CoreMIDI::Endpoint
16
18
  end
17
19
 
18
20
  class Device < CongruousApiDevice
19
21
  defer_to CoreMIDI::Endpoint
20
22
  input_class Input
21
23
  output_class Output
24
+
25
+ def self.populate
26
+ klass = @deference[self].respond_to?(:all_by_type) ? @deference[self] : @device_class
27
+ @devices = {
28
+ :input => klass.all_by_type[:source].map { |d| @input_class.new(d) },
29
+ :output => klass.all_by_type[:destination].map { |d| @output_class.new(d) }
30
+ }
31
+ end
32
+
22
33
  end
23
34
 
24
35
  end
@@ -9,10 +9,12 @@ module UniMIDI
9
9
 
10
10
  class Input < CongruousApiInput
11
11
  defer_to MIDIJRuby::Input
12
+ device_class MIDIJRuby::Device
12
13
  end
13
14
 
14
15
  class Output < CongruousApiOutput
15
16
  defer_to MIDIJRuby::Output
17
+ device_class MIDIJRuby::Device
16
18
  end
17
19
 
18
20
  class Device < CongruousApiDevice
@@ -9,10 +9,12 @@ module UniMIDI
9
9
 
10
10
  class Input < CongruousApiInput
11
11
  defer_to MIDIWinMM::Input
12
+ device_class MIDIWinMM::Device
12
13
  end
13
14
 
14
15
  class Output < CongruousApiOutput
15
16
  defer_to MIDIWinMM::Output
17
+ device_class MIDIWinMM::Device
16
18
  end
17
19
 
18
20
  class Device < CongruousApiDevice
@@ -13,6 +13,10 @@ module UniMIDI
13
13
  @name = @device.name
14
14
  @type = @device.type
15
15
  end
16
+
17
+ def enabled?
18
+ @device.enabled
19
+ end
16
20
 
17
21
  # enable the device for use, can be passed a block to which the device will be passed back
18
22
  def open(*a, &block)
@@ -47,17 +51,13 @@ module UniMIDI
47
51
  module ClassMethods
48
52
 
49
53
  # returns the first device for this class
50
- def first(*a)
51
- dev = @deference[self].first(*a)
52
- raise 'Device not found' if dev.nil?
53
- new(dev)
54
+ def first(&block)
55
+ use_device(all.first, &block)
54
56
  end
55
57
 
56
58
  # returns the last device for this class
57
- def last(*a)
58
- dev = @deference[self].last(*a)
59
- raise 'Device not found' if dev.nil?
60
- new(dev)
59
+ def last(&block)
60
+ use_device(all.last, &block)
61
61
  end
62
62
 
63
63
  # returns all devices in an array
@@ -66,23 +66,29 @@ module UniMIDI
66
66
  end
67
67
 
68
68
  # returns the device at <em>index</em>
69
+ def use(index, &block)
70
+ use_device(all[index], &block)
71
+ end
72
+
69
73
  def [](index)
70
- all[index]
74
+ all[index]
71
75
  end
72
76
 
73
77
  # returns all devices as a hash as such
74
78
  # { :input => [input devices], :output => [output devices] }
75
79
  def all_by_type
76
- {
77
- :input => @deference[self].all_by_type[:input].map { |d| @input_class.new(d) },
78
- :output => @deference[self].all_by_type[:output].map { |d| @output_class.new(d) }
79
- }
80
+ ensure_initialized
81
+ @devices
80
82
  end
81
83
 
82
84
  def defer_to(klass)
83
85
  @deference ||= {}
84
86
  @deference[self] = klass
85
87
  end
88
+
89
+ def device_class(klass)
90
+ @device_class = klass
91
+ end
86
92
 
87
93
  def input_class(klass)
88
94
  @input_class = klass
@@ -91,6 +97,26 @@ module UniMIDI
91
97
  def output_class(klass)
92
98
  @output_class = klass
93
99
  end
100
+
101
+ def populate
102
+ klass = @deference[self].respond_to?(:all_by_type) ? @deference[self] : @device_class
103
+ @devices = {
104
+ :input => klass.all_by_type[:input].map { |d| @input_class.new(d) },
105
+ :output => klass.all_by_type[:output].map { |d| @output_class.new(d) }
106
+ }
107
+ end
108
+ alias_method :refresh, :populate
109
+
110
+ private
111
+
112
+ def ensure_initialized
113
+ populate if @devices.nil?
114
+ end
115
+
116
+ def use_device(device, &block)
117
+ device.open(&block) unless block.nil?
118
+ device
119
+ end
94
120
 
95
121
  end
96
122
 
@@ -177,7 +203,7 @@ module UniMIDI
177
203
 
178
204
  # returns all inputs
179
205
  def self.all
180
- @deference[self].all.map { |d| new(d) }
206
+ UniMIDI::Device.all_by_type[:input]
181
207
  end
182
208
 
183
209
  end
@@ -225,7 +251,7 @@ module UniMIDI
225
251
 
226
252
  # returns all outputs
227
253
  def self.all
228
- @deference[self].all.map { |d| new(d) }
254
+ UniMIDI::Device.all_by_type[:output]
229
255
  end
230
256
 
231
257
  end
data/test/helper.rb CHANGED
@@ -29,16 +29,19 @@ module TestHelper
29
29
  end
30
30
  end
31
31
 
32
- def platform_test(adapter, mod)
32
+ def platform_test(adapter, mod, device_class = nil, input_class = nil, output_class = nil)
33
+ device_class ||= mod::Device
34
+ input_class ||= mod::Input
35
+ output_class ||= mod::Output
33
36
  assert_equal(adapter, UniMIDI::Platform.instance.interface)
34
- assert_not_same(mod::Input, UniMIDI::Input)
35
- assert_not_same(mod::Output, UniMIDI::Output)
36
- assert_not_same(mod::Device, UniMIDI::Device)
37
- assert_equal(mod::Input.first.name, UniMIDI::Input.first.name)
38
- assert_equal(mod::Input.first.id, UniMIDI::Input.first.id)
39
- assert_not_same(mod::Output.first, UniMIDI::Output.first)
40
- assert_equal(mod::Output.first.name, UniMIDI::Output.first.name)
41
- assert_equal(mod::Output.first.id, UniMIDI::Output.first.id)
37
+ assert_not_same(input_class, UniMIDI::Input)
38
+ assert_not_same(output_class, UniMIDI::Output)
39
+ assert_not_same(device_class, UniMIDI::Device)
40
+ assert_equal(input_class.first.name, UniMIDI::Input.first.name)
41
+ assert_equal(input_class.first.id, UniMIDI::Input.first.id)
42
+ assert_not_same(output_class.first, UniMIDI::Output.first)
43
+ assert_equal(output_class.first.name, UniMIDI::Output.first.name)
44
+ assert_equal(output_class.first.id, UniMIDI::Output.first.id)
42
45
  end
43
46
 
44
47
  def bytestrs_to_ints(arr)
@@ -15,6 +15,8 @@ class InputBufferTest < Test::Unit::TestCase
15
15
 
16
16
  $test_device[:output].open do |output|
17
17
  $test_device[:input].open do |input|
18
+
19
+ input.buffer.clear
18
20
 
19
21
  messages.each do |msg|
20
22
 
data/test/test_io.rb CHANGED
@@ -16,7 +16,9 @@ class IoTest < Test::Unit::TestCase
16
16
  pointer = 0
17
17
  $test_device[:output].open do |output|
18
18
  $test_device[:input].open do |input|
19
-
19
+
20
+ input.buffer.clear
21
+
20
22
  messages.each do |msg|
21
23
 
22
24
  $>.puts "sending: " + msg.inspect
@@ -87,7 +89,9 @@ class IoTest < Test::Unit::TestCase
87
89
  pointer = 0
88
90
  $test_device[:output].open do |output|
89
91
  $test_device[:input].open do |input|
90
-
92
+
93
+ #input.buffer.clear
94
+
91
95
  messages.each do |msg|
92
96
 
93
97
  $>.puts "sending: " + msg.inspect
@@ -21,7 +21,7 @@ class PlatformTest < Test::Unit::TestCase
21
21
 
22
22
  def test_osx
23
23
  if RUBY_PLATFORM.include?("darwin")
24
- platform_test(CoreMIDIAdapter, CoreMIDI)
24
+ platform_test(CoreMIDIAdapter, CoreMIDI, CoreMIDI::Endpoint, CoreMIDI::Source, CoreMIDI::Destination)
25
25
  end
26
26
  end
27
27
 
@@ -0,0 +1,56 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'helper'
4
+
5
+ class SelectorTest < Test::Unit::TestCase
6
+
7
+ include UniMIDI
8
+ include TestHelper
9
+
10
+ def test_first
11
+ i = Input.first
12
+ assert_equal(Input.all.first, i)
13
+ end
14
+
15
+ def test_last
16
+ i = Input.last
17
+ assert_equal(Input.all.last, i)
18
+ end
19
+
20
+ def test_first_with_block
21
+ sleep(1)
22
+ i = Input.first do |i|
23
+ assert_equal(true, i.enabled?)
24
+ end
25
+ assert_equal(Input.all.first, i)
26
+ end
27
+
28
+ def test_last_with_block
29
+ sleep(1)
30
+ i = Input.last do |i|
31
+ assert_equal(true, i.enabled?)
32
+ end
33
+ assert_equal(Input.all.last, i)
34
+ end
35
+
36
+ def test_brackets
37
+ i = Input[0]
38
+ assert_equal(Input.first, i)
39
+ assert_equal(Input.all.first, i)
40
+ end
41
+
42
+ def test_use_with_block
43
+ sleep(1)
44
+ i = Input.use(0) do |i|
45
+ assert_equal(true, i.enabled?)
46
+ end
47
+ assert_equal(Input.first, i)
48
+ assert_equal(Input.all.first, i)
49
+ end
50
+
51
+ def test_all
52
+ i = Input.all
53
+ assert_equal(Device.all_by_type[:input], Input.all)
54
+ end
55
+
56
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: unimidi
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.2.3
5
5
  prerelease:
6
6
  platform: i386-mingw32
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-08-26 00:00:00.000000000Z
12
+ date: 2011-09-03 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: midi-winmm
16
- requirement: &74302830 !ruby/object:Gem::Requirement
16
+ requirement: &70148241611300 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,7 +21,7 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *74302830
24
+ version_requirements: *70148241611300
25
25
  description: Platform Independent, realtime MIDI input and output for Ruby
26
26
  email:
27
27
  - ari.russo@gmail.com
@@ -31,18 +31,19 @@ extensions: []
31
31
  extra_rdoc_files: []
32
32
  files:
33
33
  - bin/unimidi
34
- - lib/unimidi.rb
35
- - lib/unimidi/adapter/ffi-coremidi.rb
36
- - lib/unimidi/adapter/midi-winmm.rb
37
34
  - lib/unimidi/adapter/alsa-rawmidi.rb
35
+ - lib/unimidi/adapter/ffi-coremidi.rb
38
36
  - lib/unimidi/adapter/midi-jruby.rb
37
+ - lib/unimidi/adapter/midi-winmm.rb
39
38
  - lib/unimidi/congruous_api_adapter.rb
40
39
  - lib/unimidi/platform.rb
41
40
  - lib/unimidi/type_conversion.rb
41
+ - lib/unimidi.rb
42
42
  - test/helper.rb
43
- - test/test_io.rb
44
43
  - test/test_input_buffer.rb
44
+ - test/test_io.rb
45
45
  - test/test_platform.rb
46
+ - test/test_selectors.rb
46
47
  - LICENSE
47
48
  - README.rdoc
48
49
  homepage: http://github.com/arirusso/unimidi
@@ -65,7 +66,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
65
66
  version: 1.3.6
66
67
  requirements: []
67
68
  rubyforge_project: unimidi
68
- rubygems_version: 1.8.7
69
+ rubygems_version: 1.8.6
69
70
  signing_key:
70
71
  specification_version: 3
71
72
  summary: Realtime MIDI input and output for Ruby