mac-robot 0.3.0 → 0.5.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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 9855222330a767946be0b647797086cda4513eee3813e87d5aa6b0a7ed246b1b
4
+ data.tar.gz: 549a65285d0ef8f09c8f1a07054973f7bc317a9f039b0957ebe4fe7a79b27ea7
5
+ SHA512:
6
+ metadata.gz: 499ef63790c67f397444e6cb88f4a7d533d0313cd94be3d4f95e1b9c54a5ff68e01ad701340f82a483ca4683dcb4874e26f3fcd6ae50cb4dedb173cdb8e1a68c
7
+ data.tar.gz: b21908c6e3069ea74d7d32e7ad61d7f475144d046c077b2de18c82b85373ae24ba2bbcad1e039c7ba9c9dfcb389d639404e39907ada83efb05e85143a0e01fd0
data/Gemfile CHANGED
@@ -6,7 +6,9 @@ source "http://rubygems.org"
6
6
  # Add dependencies to develop your gem here.
7
7
  # Include everything needed to run rake, tests, features, etc.
8
8
  group :development do
9
+ gem "rake", "< 11.0"
10
+ gem "json", "~> 2.5.1"
9
11
  gem "rspec", "~> 2.8.0"
10
12
  gem "bundler"
11
- gem "jeweler", "~> 1.8.3"
13
+ gem "jeweler", "~> 2.3.9"
12
14
  end
data/Gemfile.lock CHANGED
@@ -1,17 +1,57 @@
1
1
  GEM
2
2
  remote: http://rubygems.org/
3
3
  specs:
4
+ addressable (2.4.0)
5
+ builder (3.2.4)
6
+ descendants_tracker (0.0.4)
7
+ thread_safe (~> 0.3, >= 0.3.1)
4
8
  diff-lcs (1.1.3)
5
- git (1.2.5)
6
- jeweler (1.8.3)
7
- bundler (~> 1.0)
9
+ faraday (0.9.2)
10
+ multipart-post (>= 1.2, < 3)
11
+ git (1.8.1)
12
+ rchardet (~> 1.8)
13
+ github_api (0.16.0)
14
+ addressable (~> 2.4.0)
15
+ descendants_tracker (~> 0.0.4)
16
+ faraday (~> 0.8, < 0.10)
17
+ hashie (>= 3.4)
18
+ mime-types (>= 1.16, < 3.0)
19
+ oauth2 (~> 1.0)
20
+ hashie (4.1.0)
21
+ highline (2.0.3)
22
+ jeweler (2.3.9)
23
+ builder
24
+ bundler
8
25
  git (>= 1.2.5)
26
+ github_api (~> 0.16.0)
27
+ highline (>= 1.6.15)
28
+ nokogiri (>= 1.5.10)
29
+ psych
9
30
  rake
10
31
  rdoc
11
- json (1.6.5)
12
- rake (0.9.2.2)
13
- rdoc (3.12)
14
- json (~> 1.4)
32
+ semver2
33
+ json (2.5.1)
34
+ jwt (2.2.2)
35
+ mime-types (2.99.3)
36
+ mini_portile2 (2.5.0)
37
+ multi_json (1.15.0)
38
+ multi_xml (0.6.0)
39
+ multipart-post (2.1.1)
40
+ nokogiri (1.11.3)
41
+ mini_portile2 (~> 2.5.0)
42
+ racc (~> 1.4)
43
+ oauth2 (1.4.7)
44
+ faraday (>= 0.8, < 2.0)
45
+ jwt (>= 1.0, < 3.0)
46
+ multi_json (~> 1.3)
47
+ multi_xml (~> 0.5)
48
+ rack (>= 1.2, < 3)
49
+ psych (3.3.1)
50
+ racc (1.5.2)
51
+ rack (2.2.3)
52
+ rake (10.5.0)
53
+ rchardet (1.8.0)
54
+ rdoc (6.3.0)
15
55
  rspec (2.8.0)
16
56
  rspec-core (~> 2.8.0)
17
57
  rspec-expectations (~> 2.8.0)
@@ -20,11 +60,18 @@ GEM
20
60
  rspec-expectations (2.8.0)
21
61
  diff-lcs (~> 1.1.2)
22
62
  rspec-mocks (2.8.0)
63
+ semver2 (3.4.2)
64
+ thread_safe (0.3.6)
23
65
 
24
66
  PLATFORMS
25
67
  ruby
26
68
 
27
69
  DEPENDENCIES
28
70
  bundler
29
- jeweler (~> 1.8.3)
71
+ jeweler (~> 2.3.9)
72
+ json (~> 2.5.1)
73
+ rake (< 11.0)
30
74
  rspec (~> 2.8.0)
75
+
76
+ BUNDLED WITH
77
+ 2.1.4
data/README.rdoc CHANGED
@@ -12,7 +12,11 @@ A Library to Automate User Interactions
12
12
 
13
13
  robot.mouse_press
14
14
  robot.mouse_move(250, 250)
15
+ robot.mouse_drag(100, 200)
15
16
  robot.mouse_release
17
+
18
+ robot.mouse_current_location # => 100, 200
19
+
16
20
  robot.scroll_wheel(:x => 10, :y => -20, :z => 5)
17
21
 
18
22
  === Automate keyboard
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.3.0
1
+ 0.5.2
@@ -16,6 +16,8 @@ VALUE createInstance() {
16
16
  return Data_Wrap_Struct(rb_cEventDispatcher, 0, cEventDispatcher_free, obj);
17
17
  }
18
18
 
19
+ // https://developer.apple.com/library/mac/documentation/Carbon/Reference/QuartzEventServicesRef/Reference/reference.html#//apple_ref/doc/uid/TP40003550-CH3g-C016985
20
+ // XXX: support right button and center button
19
21
  CGEventType getEventTypeFromValue(VALUE value)
20
22
  {
21
23
  const char *typeStr;
@@ -29,6 +31,8 @@ CGEventType getEventTypeFromValue(VALUE value)
29
31
  type = kCGEventLeftMouseUp;
30
32
  } else if(strcmp(typeStr, "mouse_move") == 0) {
31
33
  type = kCGEventMouseMoved;
34
+ } else if(strcmp(typeStr, "mouse_drag") == 0) {
35
+ type = kCGEventLeftMouseDragged;
32
36
  } else {
33
37
  type = kCGEventNull;
34
38
  }
@@ -6,6 +6,7 @@ require "mkmf"
6
6
 
7
7
  # Name your extension
8
8
  extension_name = 'event_dispatcher'
9
+ header_name = extension_name + '.h'
9
10
 
10
11
  # Set your target name
11
12
  dir_config(extension_name)
@@ -18,7 +19,7 @@ begin
18
19
  rescue
19
20
  end
20
21
 
21
- have_header(extension_name)
22
+ have_header(header_name)
22
23
 
23
24
  # Do the work
24
25
  create_makefile(extension_name)
data/ext/util/extconf.rb CHANGED
@@ -6,6 +6,7 @@ require "mkmf"
6
6
 
7
7
  # Name your extension
8
8
  extension_name = 'util'
9
+ header_name = extension_name + '.h'
9
10
 
10
11
  # Set your target name
11
12
  dir_config(extension_name)
@@ -18,7 +19,7 @@ begin
18
19
  rescue
19
20
  end
20
21
 
21
- have_header(extension_name)
22
+ have_header(header_name)
22
23
 
23
24
  # Do the work
24
25
  create_makefile(extension_name)
data/ext/util/util.m CHANGED
@@ -47,6 +47,21 @@ static VALUE mUtil_get_display_pixel_size(int argc, VALUE *argv, VALUE self)
47
47
  return result;
48
48
  }
49
49
 
50
+ static VALUE mUtil_get_mouse_current_location(int argc, VALUE *argv, VALUE self)
51
+ {
52
+ VALUE result;
53
+ CGEventRef event;
54
+
55
+ event = CGEventCreate(NULL);
56
+ CGPoint loc = CGEventGetLocation(event);
57
+
58
+ result = rb_ary_new();
59
+ rb_ary_push(result, INT2NUM(loc.x));
60
+ rb_ary_push(result, INT2NUM(loc.y));
61
+
62
+ return result;
63
+ }
64
+
50
65
  void Init_util(void){
51
66
  VALUE rb_mMac, rb_cRobot, rb_mUtil;
52
67
 
@@ -55,4 +70,5 @@ void Init_util(void){
55
70
  rb_mUtil = rb_define_module_under(rb_cRobot, "Util");
56
71
  rb_define_singleton_method(rb_mUtil, "get_pixel_color", mUtil_get_pixel_color, -1);
57
72
  rb_define_singleton_method(rb_mUtil, "get_display_pixel_size", mUtil_get_display_pixel_size, -1);
73
+ rb_define_singleton_method(rb_mUtil, "get_mouse_current_location", mUtil_get_mouse_current_location, -1);
58
74
  }
data/lib/mac-robot.rb CHANGED
@@ -1,5 +1,5 @@
1
- require 'event_dispatcher'
2
- require 'util'
1
+ require 'event_dispatcher.h'
2
+ require 'util.h'
3
3
 
4
4
  module Mac
5
5
  class Robot
@@ -17,6 +17,7 @@ module Mac
17
17
  def initialize
18
18
  @x = 0
19
19
  @y = 0
20
+
20
21
  @state = :mouse_up
21
22
  @dispatcher = EventDispatcher.new
22
23
  end
@@ -38,6 +39,18 @@ module Mac
38
39
  mouse_event(:left, :mouse_move)
39
40
  end
40
41
 
42
+ def mouse_drag(x, y)
43
+ @x = x
44
+ @y = y
45
+
46
+ mouse_event(:left, :mouse_drag)
47
+ end
48
+
49
+ def mouse_current_location
50
+ loc = Util.get_mouse_current_location
51
+ Struct.new(:x, :y).new(*loc)
52
+ end
53
+
41
54
  def key_press(keycode)
42
55
  keyboard_event(keycode, 1)
43
56
  end
@@ -59,6 +72,15 @@ module Mac
59
72
  raise OutOfResolution if x < 0 || y < 0
60
73
  raise OutOfResolution if display_pixel_size.width < x || display_pixel_size.height < y
61
74
 
75
+ # workarownd for exeption occurs when x == display_pixel_size.width
76
+ #
77
+ # *** Assertion failure in -[NSBitmapImageRep initWithCGImage:], /SourceCache/AppKit/AppKit-1265/AppKit.subproj/NSBitmapImageRep.m:1286
78
+ # An uncaught exception was raised
79
+ # Invalid parameter not satisfying: cgImage != NULL
80
+ if display_pixel_size.width == x
81
+ x = x - 0.1
82
+ end
83
+
62
84
  color = Util.get_pixel_color(x, y)
63
85
  Struct.new(:red, :green, :blue, :alpha).new(*color)
64
86
  end
data/mac-robot.gemspec CHANGED
Binary file
@@ -9,8 +9,11 @@ describe Mac::Robot do
9
9
  describe 'mouse event' do
10
10
  it 'should simulate mouse event' do
11
11
  subject.mouse_move(20, 0)
12
+ sleep 0.2
12
13
  subject.mouse_press(:left)
13
- subject.mouse_move(20, 250)
14
+ sleep 0.2
15
+ subject.mouse_move(20, 200)
16
+ sleep 0.2
14
17
  subject.mouse_release(:left)
15
18
  end
16
19
  end
@@ -53,5 +56,23 @@ describe Mac::Robot do
53
56
  }.should raise_error(Mac::Robot::OutOfResolution)
54
57
  end
55
58
  end
59
+
60
+ it 'should get color from rightmost pixel' do
61
+ display_pixel_size = subject.display_pixel_size
62
+
63
+ color = subject.get_pixel_color(display_pixel_size.width, 0)
64
+ color.red.should be_a_kind_of(Float)
65
+ color.green.should be_a_kind_of(Float)
66
+ color.blue.should be_a_kind_of(Float)
67
+ color.alpha.should be_a_kind_of(Float)
68
+ end
69
+ end
70
+
71
+ describe 'current mouse location' do
72
+ it 'should have current mouse location' do
73
+ subject.mouse_move(20, 0)
74
+ subject.mouse_current_location.x.should eql(20)
75
+ subject.mouse_current_location.y.should eql(0)
76
+ end
56
77
  end
57
78
  end
metadata CHANGED
@@ -1,64 +1,85 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mac-robot
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
5
- prerelease:
4
+ version: 0.5.2
6
5
  platform: ruby
7
6
  authors:
8
7
  - youpy
9
- autorequire:
8
+ autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2012-09-18 00:00:00.000000000 Z
11
+ date: 2021-04-16 00:00:00.000000000 Z
13
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rake
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "<"
18
+ - !ruby/object:Gem::Version
19
+ version: '11.0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "<"
25
+ - !ruby/object:Gem::Version
26
+ version: '11.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: json
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 2.5.1
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 2.5.1
14
41
  - !ruby/object:Gem::Dependency
15
42
  name: rspec
16
43
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
44
  requirements:
19
- - - ~>
45
+ - - "~>"
20
46
  - !ruby/object:Gem::Version
21
47
  version: 2.8.0
22
48
  type: :development
23
49
  prerelease: false
24
50
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
51
  requirements:
27
- - - ~>
52
+ - - "~>"
28
53
  - !ruby/object:Gem::Version
29
54
  version: 2.8.0
30
55
  - !ruby/object:Gem::Dependency
31
56
  name: bundler
32
57
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
58
  requirements:
35
- - - ! '>='
59
+ - - ">="
36
60
  - !ruby/object:Gem::Version
37
61
  version: '0'
38
62
  type: :development
39
63
  prerelease: false
40
64
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
65
  requirements:
43
- - - ! '>='
66
+ - - ">="
44
67
  - !ruby/object:Gem::Version
45
68
  version: '0'
46
69
  - !ruby/object:Gem::Dependency
47
70
  name: jeweler
48
71
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
72
  requirements:
51
- - - ~>
73
+ - - "~>"
52
74
  - !ruby/object:Gem::Version
53
- version: 1.8.3
75
+ version: 2.3.9
54
76
  type: :development
55
77
  prerelease: false
56
78
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
79
  requirements:
59
- - - ~>
80
+ - - "~>"
60
81
  - !ruby/object:Gem::Version
61
- version: 1.8.3
82
+ version: 2.3.9
62
83
  description: A Library to Automate User Interactions
63
84
  email: youpy@buycheapviagraonlinenow.com
64
85
  executables: []
@@ -69,8 +90,8 @@ extra_rdoc_files:
69
90
  - LICENSE.txt
70
91
  - README.rdoc
71
92
  files:
72
- - .document
73
- - .rspec
93
+ - ".document"
94
+ - ".rspec"
74
95
  - Gemfile
75
96
  - Gemfile.lock
76
97
  - LICENSE.txt
@@ -91,29 +112,24 @@ files:
91
112
  homepage: http://github.com/youpy/mac-robot
92
113
  licenses:
93
114
  - MIT
94
- post_install_message:
115
+ metadata: {}
116
+ post_install_message:
95
117
  rdoc_options: []
96
118
  require_paths:
97
119
  - lib
98
120
  required_ruby_version: !ruby/object:Gem::Requirement
99
- none: false
100
121
  requirements:
101
- - - ! '>='
122
+ - - ">="
102
123
  - !ruby/object:Gem::Version
103
124
  version: '0'
104
- segments:
105
- - 0
106
- hash: 625334772670347707
107
125
  required_rubygems_version: !ruby/object:Gem::Requirement
108
- none: false
109
126
  requirements:
110
- - - ! '>='
127
+ - - ">="
111
128
  - !ruby/object:Gem::Version
112
129
  version: '0'
113
130
  requirements: []
114
- rubyforge_project:
115
- rubygems_version: 1.8.24
116
- signing_key:
117
- specification_version: 3
131
+ rubygems_version: 3.1.6
132
+ signing_key:
133
+ specification_version: 4
118
134
  summary: A Library to Automate User Interactions
119
135
  test_files: []