cocoa 0.1.1 → 0.1.2
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/README.md +20 -0
- data/Rakefile +1 -1
- data/VERSION +1 -1
- data/cocoa.gemspec +8 -3
- data/lib/cocoa.rb +11 -15
- data/lib/cocoa/extensions.rb +23 -0
- data/lib/cocoa/helpers.rb +21 -109
- data/lib/cocoa/objc.rb +25 -0
- data/lib/cocoa/structs/NSPoint.rb +17 -0
- data/lib/cocoa/structs/NSRect.rb +19 -0
- data/lib/cocoa/structs/NSSize.rb +17 -0
- data/spec/cocoa/cocoa_spec.rb +18 -3
- data/spec/{cocoa/spec_helper.rb → spec_helper.rb} +1 -1
- data/tasks/generate.rake +11 -15
- metadata +8 -3
data/README.md
CHANGED
@@ -2,3 +2,23 @@ cocoa
|
|
2
2
|
=====
|
3
3
|
|
4
4
|
Ruby FFI bindings for the OSX Cocoa API
|
5
|
+
|
6
|
+
### Installation
|
7
|
+
|
8
|
+
```
|
9
|
+
gem install cocoa
|
10
|
+
```
|
11
|
+
|
12
|
+
### Usage
|
13
|
+
|
14
|
+
```ruby
|
15
|
+
require 'cocoa'
|
16
|
+
array = Cocoa::NSMutableArray.array
|
17
|
+
array.addObject "head"
|
18
|
+
array.addObject "tail"
|
19
|
+
array.description
|
20
|
+
=> (
|
21
|
+
head,
|
22
|
+
tail
|
23
|
+
)
|
24
|
+
```
|
data/Rakefile
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.2
|
data/cocoa.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "cocoa"
|
8
|
-
s.version = "0.1.
|
8
|
+
s.version = "0.1.2"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Patrick Hanevold"]
|
12
|
-
s.date = "2014-03-
|
12
|
+
s.date = "2014-03-26"
|
13
13
|
s.description = "Ruby FFI bindings for the OSX Cocoa API"
|
14
14
|
s.email = "patrick.hanevold@gmail.com"
|
15
15
|
s.extra_rdoc_files = [
|
@@ -411,9 +411,14 @@ Gem::Specification.new do |s|
|
|
411
411
|
"lib/cocoa/bindings/NSXPCConnection.rb",
|
412
412
|
"lib/cocoa/bindings/NSXPCInterface.rb",
|
413
413
|
"lib/cocoa/bindings/NSXPCListener.rb",
|
414
|
+
"lib/cocoa/extensions.rb",
|
414
415
|
"lib/cocoa/helpers.rb",
|
416
|
+
"lib/cocoa/objc.rb",
|
417
|
+
"lib/cocoa/structs/NSPoint.rb",
|
418
|
+
"lib/cocoa/structs/NSRect.rb",
|
419
|
+
"lib/cocoa/structs/NSSize.rb",
|
415
420
|
"spec/cocoa/cocoa_spec.rb",
|
416
|
-
"spec/
|
421
|
+
"spec/spec_helper.rb",
|
417
422
|
"tasks/bacon.rake",
|
418
423
|
"tasks/generate.rake",
|
419
424
|
"tasks/setup.rake"
|
data/lib/cocoa.rb
CHANGED
@@ -2,21 +2,7 @@
|
|
2
2
|
require 'active_support'
|
3
3
|
|
4
4
|
require 'cocoa/helpers'
|
5
|
-
|
6
|
-
require "cocoa/bindings/#{name.split('/').last}"
|
7
|
-
end
|
8
|
-
|
9
|
-
class String
|
10
|
-
def method_missing meth,*args
|
11
|
-
if Cocoa::NSString.method_defined?(meth)
|
12
|
-
str = Cocoa::NSString.new(true)
|
13
|
-
str.object = Cocoa::String_to_NSString(self)
|
14
|
-
str.send(meth,*args)
|
15
|
-
else
|
16
|
-
super
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
5
|
+
require "cocoa/bindings/NSString"
|
20
6
|
|
21
7
|
module Cocoa
|
22
8
|
extend FFI::Library
|
@@ -28,6 +14,15 @@ module Cocoa
|
|
28
14
|
attach_function :NSApplicationLoad, [], :bool
|
29
15
|
NSApplicationLoad()
|
30
16
|
|
17
|
+
def const_missing name
|
18
|
+
if File.exists?(File.dirname(__FILE__) + "/cocoa/bindings/#{name}.rb")
|
19
|
+
require "cocoa/bindings/#{name}"
|
20
|
+
"Cocoa::#{name}".constantize
|
21
|
+
else
|
22
|
+
super
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
31
26
|
CA_WARN_DEPRECATED = 1
|
32
27
|
CFByteOrderBigEndian = 2
|
33
28
|
CFByteOrderLittleEndian = 1
|
@@ -6720,3 +6715,4 @@ module Cocoa
|
|
6720
6715
|
attach_method :NSZoneRealloc, :args=>3, :names=>[], :types=>["^{_NSZone=}", "^v", "Q"], :retval=>"^v"
|
6721
6716
|
attach_method :NXReadNSObjectFromCoder, :args=>1, :names=>[], :types=>["@"], :retval=>"@"
|
6722
6717
|
end
|
6718
|
+
require "cocoa/extensions"
|
@@ -0,0 +1,23 @@
|
|
1
|
+
class Cocoa::NSObject
|
2
|
+
def self.const_missing name
|
3
|
+
Cocoa.const_get name
|
4
|
+
end
|
5
|
+
end
|
6
|
+
|
7
|
+
class Cocoa::NSString < Cocoa::NSObject
|
8
|
+
def to_s
|
9
|
+
Cocoa::NSString_to_String(object)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
class String
|
14
|
+
def method_missing meth,*args
|
15
|
+
if Cocoa::NSString.method_defined?(meth)
|
16
|
+
str = Cocoa::NSString.new(true)
|
17
|
+
str.object = Cocoa::String_to_NSString(self)
|
18
|
+
str.send(meth,*args)
|
19
|
+
else
|
20
|
+
super
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
data/lib/cocoa/helpers.rb
CHANGED
@@ -1,94 +1,13 @@
|
|
1
1
|
require 'active_support/inflector'
|
2
2
|
require 'ffi'
|
3
|
-
|
4
|
-
module ObjC
|
5
|
-
extend FFI::Library
|
6
|
-
|
7
|
-
# Load the 'libobjc' library.
|
8
|
-
ffi_lib 'objc'
|
9
|
-
|
10
|
-
# Bind the 'sel_registerName' function, which accepts a String and
|
11
|
-
# returns an equivalent Objective-C selector (i.e. message name).
|
12
|
-
attach_function :sel_registerName, [:string], :pointer
|
13
|
-
|
14
|
-
# Bind the 'objc_msgSend' function, which sends a message to an
|
15
|
-
# Objective-C object. It accepts a pointer to the object being sent
|
16
|
-
# the message, a pointer to a selector, and a varargs array of
|
17
|
-
# arguments to be sent with the message. It returns a pointer to the
|
18
|
-
# result of sending the message.
|
19
|
-
attach_function :objc_msgSend, [:pointer, :pointer, :varargs], :pointer
|
20
|
-
#attach_function :objc_msgSend_stret, [:pointer, :pointer, :varargs], CGRect.by_value
|
21
|
-
|
22
|
-
# A convenience method using objc_msgSend and sel_registerName to easily
|
23
|
-
# send Objective-C messages from Ruby.
|
24
|
-
def self.msgSend( id, selector, *args )
|
25
|
-
selector = sel_registerName(selector) if selector.is_a? String
|
26
|
-
objc_msgSend( id, selector, *args )
|
27
|
-
end
|
28
|
-
|
29
|
-
def self.msgSend_stret( return_type, id, selector, *args )
|
30
|
-
selector = sel_registerName(selector) if selector.is_a? String
|
31
|
-
method = "objc_msgSend_stret_for_#{return_type.name.underscore}".to_sym
|
32
|
-
unless respond_to? method
|
33
|
-
attach_function method, :objc_msgSend_stret, [:pointer, :pointer, :varargs], return_type.by_value
|
34
|
-
end
|
35
|
-
send(method, id, selector, *args )
|
36
|
-
end
|
37
|
-
|
38
|
-
# Bind the 'objc_getClass' function, which accepts the name of an
|
39
|
-
# Objective-C class, and returns a pointer to that class.
|
40
|
-
attach_function :objc_getClass, [:string], :pointer
|
41
|
-
|
42
|
-
attach_function :objc_allocateClassPair, [:pointer, :string, :int], :pointer
|
43
|
-
attach_function :objc_registerClassPair, [:pointer], :void
|
44
|
-
end
|
45
|
-
|
46
|
-
class CGPoint < FFI::Struct
|
47
|
-
def initialize *args
|
48
|
-
options = args.first
|
49
|
-
if options.is_a? Hash
|
50
|
-
self[:x] = options[:x]
|
51
|
-
self[:y] = options[:y]
|
52
|
-
else
|
53
|
-
super *args
|
54
|
-
end
|
55
|
-
end
|
56
|
-
layout :x, :double,
|
57
|
-
:y, :double
|
58
|
-
end
|
59
|
-
|
60
|
-
class CGSize < FFI::Struct
|
61
|
-
def initialize *args
|
62
|
-
options = args.first
|
63
|
-
if options.is_a? Hash
|
64
|
-
self[:width] = options[:width]
|
65
|
-
self[:height] = options[:height]
|
66
|
-
else
|
67
|
-
super *args
|
68
|
-
end
|
69
|
-
end
|
70
|
-
layout :width, :double,
|
71
|
-
:height, :double
|
72
|
-
end
|
73
|
-
|
74
|
-
class CGRect < FFI::Struct
|
75
|
-
def initialize *args
|
76
|
-
options = args.first
|
77
|
-
if options.is_a? Hash
|
78
|
-
self[:origin][:x] = options[:x]
|
79
|
-
self[:origin][:y] = options[:y]
|
80
|
-
self[:size][:width] = options[:width]
|
81
|
-
self[:size][:height] = options[:height]
|
82
|
-
else
|
83
|
-
super *args
|
84
|
-
end
|
85
|
-
end
|
86
|
-
layout :origin, CGPoint,
|
87
|
-
:size, CGSize
|
88
|
-
end
|
3
|
+
require 'cocoa/objc'
|
89
4
|
|
90
5
|
module Cocoa; end
|
91
6
|
|
7
|
+
require 'cocoa/structs/NSPoint'
|
8
|
+
require 'cocoa/structs/NSSize'
|
9
|
+
require 'cocoa/structs/NSRect'
|
10
|
+
|
92
11
|
class Cocoa::CFRange < FFI::Struct
|
93
12
|
def initialize *args
|
94
13
|
options = args.first
|
@@ -105,10 +24,6 @@ class Cocoa::CFRange < FFI::Struct
|
|
105
24
|
layout :location, :long_long, :length, :long_long
|
106
25
|
end
|
107
26
|
|
108
|
-
NSRect = CGRect
|
109
|
-
NSSize = CGSize
|
110
|
-
NSPoint = CGPoint
|
111
|
-
|
112
27
|
module Cocoa
|
113
28
|
|
114
29
|
def instances
|
@@ -138,16 +53,12 @@ module Cocoa
|
|
138
53
|
CFRange.new(location: loc, length: len)
|
139
54
|
end
|
140
55
|
|
141
|
-
# Accepts a Ruby String and creates an equivalent NSString instance
|
142
|
-
# and returns a pointer to it.
|
143
56
|
def self.String_to_NSString( string )
|
144
57
|
nsstring_class = ObjC.objc_getClass("NSString")
|
145
58
|
ObjC.msgSend( nsstring_class, "stringWithUTF8String:",
|
146
59
|
:string, string )
|
147
60
|
end
|
148
61
|
|
149
|
-
# Accepts a pointer to an NSString object, and returns the string
|
150
|
-
# contents as a Ruby String.
|
151
62
|
def self.NSString_to_String( nsstring_pointer )
|
152
63
|
c_string_pointer = ObjC.msgSend( nsstring_pointer, "UTF8String" )
|
153
64
|
if c_string_pointer.null?
|
@@ -196,7 +107,7 @@ module Cocoa
|
|
196
107
|
|
197
108
|
def self.attach_singular_method method,*params
|
198
109
|
params = params.extract_options!
|
199
|
-
params.freeze
|
110
|
+
params.freeze
|
200
111
|
if params[:args] == 0
|
201
112
|
define_singleton_method method do
|
202
113
|
instance = new(true)
|
@@ -300,7 +211,13 @@ params.freeze
|
|
300
211
|
instance = begin
|
301
212
|
("Cocoa::"+klass_name).constantize.new(true)
|
302
213
|
rescue
|
303
|
-
klass_name =
|
214
|
+
klass_name = if klass_name =~ /^__NSCF/
|
215
|
+
"NS#{klass_name[6..-1]}"
|
216
|
+
elsif klass_name[0]=='_'
|
217
|
+
"FIX_#{klass_name}"
|
218
|
+
else
|
219
|
+
klass_name
|
220
|
+
end
|
304
221
|
klass = begin
|
305
222
|
Cocoa.const_get(klass_name)
|
306
223
|
rescue => e
|
@@ -354,7 +271,7 @@ params.freeze
|
|
354
271
|
end
|
355
272
|
|
356
273
|
params = params.extract_options!
|
357
|
-
params.freeze
|
274
|
+
params.freeze
|
358
275
|
if params[:args] == 0
|
359
276
|
begin
|
360
277
|
attach_function "call_#{method}".to_sym, method, [], apple_type_to_ffi(params[:retval])
|
@@ -451,7 +368,6 @@ params.freeze
|
|
451
368
|
|
452
369
|
def self.inherited(parent)
|
453
370
|
if parent.name
|
454
|
-
puts "INHERITED #{parent.name}" if parent.name =~ /Timer/
|
455
371
|
klass = ObjC.objc_allocateClassPair(ObjC.objc_getClass(name.split('::').last),parent.name,0)
|
456
372
|
ObjC.objc_registerClassPair(klass)
|
457
373
|
end
|
@@ -553,7 +469,7 @@ puts "INHERITED #{parent.name}" if parent.name =~ /Timer/
|
|
553
469
|
end
|
554
470
|
|
555
471
|
def self.attach_singular_method method,*__params
|
556
|
-
__params.freeze
|
472
|
+
__params.freeze
|
557
473
|
return if method==:class
|
558
474
|
return if method==:new
|
559
475
|
if __params.first.is_a?(Hash) && __params.first[:args] == 0
|
@@ -564,11 +480,8 @@ __params.freeze
|
|
564
480
|
end
|
565
481
|
else
|
566
482
|
_params = [__params.dup].flatten
|
567
|
-
_params.freeze
|
483
|
+
_params.freeze
|
568
484
|
define_singleton_method method do |*args|
|
569
|
-
# puts method
|
570
|
-
# puts args.inspect
|
571
|
-
# puts _params.inspect
|
572
485
|
par = if _params.size == 1 && _params.first[:variadic]
|
573
486
|
_params
|
574
487
|
else
|
@@ -613,7 +526,7 @@ _params.freeze
|
|
613
526
|
@@method_specs ||= {}
|
614
527
|
if _params.first.is_a? Array
|
615
528
|
_params = [_params].flatten
|
616
|
-
_params.freeze
|
529
|
+
_params.freeze
|
617
530
|
define_method method do |*args|
|
618
531
|
if args.last.is_a? Hash
|
619
532
|
params = _params.select{ |par| par[:args] == args.last.size+1 && par[:names].map(&:to_sym).sort == args.last.keys.sort }
|
@@ -641,7 +554,7 @@ _params.freeze
|
|
641
554
|
params = _params.extract_options!
|
642
555
|
@@method_specs[method] = params
|
643
556
|
if params[:args] == 0
|
644
|
-
params.freeze
|
557
|
+
params.freeze
|
645
558
|
define_method method do
|
646
559
|
case params[:retval]
|
647
560
|
when '@'
|
@@ -669,7 +582,6 @@ params.freeze
|
|
669
582
|
("Cocoa::"+klass_name).constantize.new(true)
|
670
583
|
rescue
|
671
584
|
klass_name = "FIX_#{klass_name}" if klass_name[0]=='_'
|
672
|
-
# puts "TRYING #{klass_name}"
|
673
585
|
klass = begin
|
674
586
|
Cocoa.const_get(klass_name)
|
675
587
|
rescue => e
|
@@ -720,7 +632,7 @@ params.freeze
|
|
720
632
|
when '@'
|
721
633
|
:pointer
|
722
634
|
when /^{([^=]*)=.*}$/
|
723
|
-
$1.
|
635
|
+
Cocoa::const_get($1).by_value
|
724
636
|
else
|
725
637
|
raise type
|
726
638
|
end
|
@@ -763,8 +675,8 @@ params.freeze
|
|
763
675
|
def self.method_added(name)
|
764
676
|
return if caller.first.split('`').last[0..-2] == 'define_method' # MRI
|
765
677
|
return if caller.first.split('`').last[0..-2] == 'attach_method' # Rubinius
|
766
|
-
method_definition = "#{self.name.
|
767
|
-
add_method = "add_#{
|
678
|
+
method_definition = "#{self.name.gsub('::','__')}_#{name}".to_sym
|
679
|
+
add_method = "add_#{method_definition}".to_sym
|
768
680
|
|
769
681
|
@method_callers ||= {}
|
770
682
|
raise "allready added" if @method_callers[method_definition]
|
data/lib/cocoa/objc.rb
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
module ObjC
|
2
|
+
extend FFI::Library
|
3
|
+
|
4
|
+
ffi_lib 'objc'
|
5
|
+
|
6
|
+
attach_function :sel_registerName, [:string], :pointer
|
7
|
+
attach_function :objc_msgSend, [:pointer, :pointer, :varargs], :pointer
|
8
|
+
attach_function :objc_getClass, [:string], :pointer
|
9
|
+
attach_function :objc_allocateClassPair, [:pointer, :string, :int], :pointer
|
10
|
+
attach_function :objc_registerClassPair, [:pointer], :void
|
11
|
+
|
12
|
+
def self.msgSend( id, selector, *args )
|
13
|
+
selector = sel_registerName(selector) if selector.is_a? String
|
14
|
+
objc_msgSend( id, selector, *args )
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.msgSend_stret( return_type, id, selector, *args )
|
18
|
+
selector = sel_registerName(selector) if selector.is_a? String
|
19
|
+
method = "objc_msgSend_stret_for_#{return_type.name.underscore}".to_sym
|
20
|
+
unless respond_to? method
|
21
|
+
attach_function method, :objc_msgSend_stret, [:pointer, :pointer, :varargs], return_type.by_value
|
22
|
+
end
|
23
|
+
send(method, id, selector, *args )
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Cocoa
|
2
|
+
class CGPoint < FFI::Struct
|
3
|
+
def initialize *args
|
4
|
+
options = args.first
|
5
|
+
if options.is_a? Hash
|
6
|
+
self[:x] = options[:x]
|
7
|
+
self[:y] = options[:y]
|
8
|
+
else
|
9
|
+
super *args
|
10
|
+
end
|
11
|
+
end
|
12
|
+
layout :x, :double,
|
13
|
+
:y, :double
|
14
|
+
end
|
15
|
+
|
16
|
+
NSPoint = CGPoint
|
17
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Cocoa
|
2
|
+
class CGRect < FFI::Struct
|
3
|
+
def initialize *args
|
4
|
+
options = args.first
|
5
|
+
if options.is_a? Hash
|
6
|
+
self[:origin][:x] = options[:x]
|
7
|
+
self[:origin][:y] = options[:y]
|
8
|
+
self[:size][:width] = options[:width]
|
9
|
+
self[:size][:height] = options[:height]
|
10
|
+
else
|
11
|
+
super *args
|
12
|
+
end
|
13
|
+
end
|
14
|
+
layout :origin, CGPoint,
|
15
|
+
:size, CGSize
|
16
|
+
end
|
17
|
+
|
18
|
+
NSRect = Cocoa::CGRect
|
19
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Cocoa
|
2
|
+
class CGSize < FFI::Struct
|
3
|
+
def initialize *args
|
4
|
+
options = args.first
|
5
|
+
if options.is_a? Hash
|
6
|
+
self[:width] = options[:width]
|
7
|
+
self[:height] = options[:height]
|
8
|
+
else
|
9
|
+
super *args
|
10
|
+
end
|
11
|
+
end
|
12
|
+
layout :width, :double,
|
13
|
+
:height, :double
|
14
|
+
end
|
15
|
+
|
16
|
+
NSSize = CGSize
|
17
|
+
end
|
data/spec/cocoa/cocoa_spec.rb
CHANGED
@@ -1,17 +1,32 @@
|
|
1
|
-
require_relative 'spec_helper'
|
1
|
+
require_relative '../spec_helper'
|
2
2
|
require 'cocoa'
|
3
3
|
|
4
4
|
describe 'Cocoa' do
|
5
|
+
it 'should lazy load cocoa classes in cocoa derived classes' do
|
6
|
+
class Derived < Cocoa::NSObject
|
7
|
+
def get_lazy
|
8
|
+
NSMenu.new
|
9
|
+
end
|
10
|
+
end
|
11
|
+
Derived.new.get_lazy.class.name.should == 'Cocoa::NSMenu'
|
12
|
+
end
|
13
|
+
it 'should provide correct return types for class methods' do
|
14
|
+
Cocoa::NSMutableArray.array.class.name.should == 'Cocoa::NSMutableArray'
|
15
|
+
end
|
16
|
+
it 'should provide correct return types for instance methods' do
|
17
|
+
array = Cocoa::NSMutableArray.array
|
18
|
+
Cocoa::NSMutableArray.array.description.class.name.should == 'Cocoa::NSString'
|
19
|
+
end
|
5
20
|
it 'should convert NSString to ruby strings' do
|
6
21
|
array = Cocoa::NSMutableArray.array
|
7
22
|
array.addObject "head"
|
8
23
|
array.addObject "tail"
|
9
24
|
Cocoa::NSString_to_String(array.description.object).should == "(\n head,\n tail\n)"
|
10
25
|
end
|
11
|
-
it 'should return strings' do
|
26
|
+
it 'should return stringifyable strings' do
|
12
27
|
array = Cocoa::NSMutableArray.array
|
13
28
|
array.addObject "head"
|
14
29
|
array.addObject "tail"
|
15
|
-
array.description.should == "(\n head,\n tail\n)"
|
30
|
+
array.description.to_s.should == "(\n head,\n tail\n)"
|
16
31
|
end
|
17
32
|
end
|
data/tasks/generate.rake
CHANGED
@@ -120,21 +120,7 @@ task :generate do
|
|
120
120
|
require 'active_support'
|
121
121
|
|
122
122
|
require 'cocoa/helpers'
|
123
|
-
|
124
|
-
require "cocoa/bindings/\#{name.split('/').last}"
|
125
|
-
end
|
126
|
-
|
127
|
-
class String
|
128
|
-
def method_missing meth,*args
|
129
|
-
if Cocoa::NSString.method_defined?(meth)
|
130
|
-
str = Cocoa::NSString.new(true)
|
131
|
-
str.object = Cocoa::String_to_NSString(self)
|
132
|
-
str.send(meth,*args)
|
133
|
-
else
|
134
|
-
super
|
135
|
-
end
|
136
|
-
end
|
137
|
-
end
|
123
|
+
require "cocoa/bindings/NSString"
|
138
124
|
|
139
125
|
module Cocoa
|
140
126
|
extend FFI::Library
|
@@ -146,6 +132,15 @@ module Cocoa
|
|
146
132
|
attach_function :NSApplicationLoad, [], :bool
|
147
133
|
NSApplicationLoad()
|
148
134
|
|
135
|
+
def const_missing name
|
136
|
+
if File.exists?(File.dirname(__FILE__) + "/cocoa/bindings/\#{name}.rb")
|
137
|
+
require "cocoa/bindings/\#{name}"
|
138
|
+
"Cocoa::\#{name}".constantize
|
139
|
+
else
|
140
|
+
super
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
149
144
|
}
|
150
145
|
enums.each do |name,value|
|
151
146
|
mod.puts " #{name} = #{value}"
|
@@ -184,5 +179,6 @@ module Cocoa
|
|
184
179
|
end
|
185
180
|
end
|
186
181
|
mod.puts "end"
|
182
|
+
mod.puts 'require "cocoa/extensions"'
|
187
183
|
mod.close
|
188
184
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cocoa
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
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: 2014-03-
|
12
|
+
date: 2014-03-26 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activesupport
|
@@ -525,9 +525,14 @@ files:
|
|
525
525
|
- lib/cocoa/bindings/NSXPCConnection.rb
|
526
526
|
- lib/cocoa/bindings/NSXPCInterface.rb
|
527
527
|
- lib/cocoa/bindings/NSXPCListener.rb
|
528
|
+
- lib/cocoa/extensions.rb
|
528
529
|
- lib/cocoa/helpers.rb
|
530
|
+
- lib/cocoa/objc.rb
|
531
|
+
- lib/cocoa/structs/NSPoint.rb
|
532
|
+
- lib/cocoa/structs/NSRect.rb
|
533
|
+
- lib/cocoa/structs/NSSize.rb
|
529
534
|
- spec/cocoa/cocoa_spec.rb
|
530
|
-
- spec/
|
535
|
+
- spec/spec_helper.rb
|
531
536
|
- tasks/bacon.rake
|
532
537
|
- tasks/generate.rake
|
533
538
|
- tasks/setup.rake
|