mac-robot 0.0.2 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/Rakefile CHANGED
@@ -30,6 +30,11 @@ Jeweler::RubygemsDotOrgTasks.new
30
30
  # after any change to the files in ext
31
31
  ext_names = %w/event_dispatcher/
32
32
  ext_names.each do |ext_name|
33
+ CLEAN.include Dir.glob("ext/#{ext_name}/*{.o,.log}")
34
+ CLEAN.include "ext/#{ext_name}/Makefile"
35
+ CLOBBER.include "ext/#{ext_name}/#{ext_name}.bundle"
36
+ CLOBBER.include "lib/#{ext_name}.bundle"
37
+
33
38
  file "lib/#{ext_name}.bundle" =>
34
39
  Dir.glob("ext/#{ext_name}/*{.rb,.m}") do
35
40
  Dir.chdir("ext/#{ext_name}") do
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.2
1
+ 0.1.0
@@ -78,6 +78,25 @@ static VALUE cEventDispatcher_dispatchMouseEvent(int argc, VALUE *argv, VALUE se
78
78
  return Qnil;
79
79
  }
80
80
 
81
+ // http://forums.macrumors.com/showthread.php?t=780577
82
+ static VALUE cEventDispatcher_dispatchKeyboardEvent(int argc, VALUE *argv, VALUE self)
83
+ {
84
+ VALUE keycode, keydown;
85
+ CGEventRef event;
86
+
87
+ rb_scan_args(argc, argv, "2", &keycode, &keydown);
88
+
89
+ event = CGEventCreateKeyboardEvent(
90
+ NULL,
91
+ (CGKeyCode)NUM2INT(keycode),
92
+ (bool)NUM2INT(keydown));
93
+
94
+ CGEventPost(kCGHIDEventTap, event);
95
+ CFRelease(event);
96
+
97
+ return Qnil;
98
+ }
99
+
81
100
  void Init_event_dispatcher(void){
82
101
  VALUE rb_mMac, rb_cRobot;
83
102
 
@@ -86,4 +105,5 @@ void Init_event_dispatcher(void){
86
105
  rb_cEventDispatcher = rb_define_class_under(rb_cRobot, "EventDispatcher", rb_cObject);
87
106
  rb_define_singleton_method(rb_cEventDispatcher, "new", cEventDispatcher_new, -1);
88
107
  rb_define_method(rb_cEventDispatcher, "dispatchMouseEvent", cEventDispatcher_dispatchMouseEvent, -1);
108
+ rb_define_method(rb_cEventDispatcher, "dispatchKeyboardEvent", cEventDispatcher_dispatchKeyboardEvent, -1);
89
109
  }
data/lib/mac-robot.rb CHANGED
@@ -14,6 +14,7 @@ module Mac
14
14
  @x = 0
15
15
  @y = 0
16
16
  @state = :mouse_up
17
+ @dispatcher = EventDispatcher.new
17
18
  end
18
19
 
19
20
  def mouse_press(button = :left)
@@ -33,11 +34,22 @@ module Mac
33
34
  mouse_event(:left, :mouse_move)
34
35
  end
35
36
 
37
+ def key_press(keycode)
38
+ keyboard_event(keycode, 1)
39
+ end
40
+
41
+ def key_release(keycode)
42
+ keyboard_event(keycode, 0)
43
+ end
44
+
36
45
  private
37
46
 
38
47
  def mouse_event(button, type)
39
- dispatcher = EventDispatcher.new
40
- dispatcher.dispatchMouseEvent(@x, @y, BUTTONS[button], type)
48
+ @dispatcher.dispatchMouseEvent(@x, @y, BUTTONS[button], type)
49
+ end
50
+
51
+ def keyboard_event(keycode, keydown)
52
+ @dispatcher.dispatchKeyboardEvent(keycode, keydown)
41
53
  end
42
54
  end
43
55
  end
@@ -1,16 +1,26 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
2
 
3
+ # how to test???
3
4
  describe Mac::Robot do
4
5
  subject do
5
6
  Mac::Robot.new
6
7
  end
7
8
 
8
9
  describe 'mouse event' do
9
- # how to test???
10
10
  it 'should simulate mouse event' do
11
+ subject.mouse_move(20, 0)
11
12
  subject.mouse_press(:left)
12
- subject.mouse_move(250, 250)
13
+ subject.mouse_move(20, 250)
13
14
  subject.mouse_release(:left)
14
15
  end
15
16
  end
17
+
18
+ describe 'keyboard event' do
19
+ it 'should simulate keyboard event' do
20
+ [0x04, 0x0e, 0x25, 0x25, 0x1f].each do |keycode|
21
+ subject.key_press(keycode)
22
+ subject.key_release(keycode)
23
+ end
24
+ end
25
+ end
16
26
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mac-robot
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.1.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -13,7 +13,7 @@ date: 2012-03-29 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
16
- requirement: &70256748810840 !ruby/object:Gem::Requirement
16
+ requirement: &70197386120920 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 2.8.0
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *70256748810840
24
+ version_requirements: *70197386120920
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: bundler
27
- requirement: &70256748809360 !ruby/object:Gem::Requirement
27
+ requirement: &70197386119180 !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: :development
34
34
  prerelease: false
35
- version_requirements: *70256748809360
35
+ version_requirements: *70197386119180
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: jeweler
38
- requirement: &70256748807500 !ruby/object:Gem::Requirement
38
+ requirement: &70197386117420 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ~>
@@ -43,7 +43,7 @@ dependencies:
43
43
  version: 1.8.3
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *70256748807500
46
+ version_requirements: *70197386117420
47
47
  description: A Library to Automate User Interactions
48
48
  email: youpy@buycheapviagraonlinenow.com
49
49
  executables: []
@@ -83,7 +83,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
83
83
  version: '0'
84
84
  segments:
85
85
  - 0
86
- hash: 2120303555965730316
86
+ hash: 3428969405361014881
87
87
  required_rubygems_version: !ruby/object:Gem::Requirement
88
88
  none: false
89
89
  requirements: