jaguar 0.1.0 → 0.1.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e294a1b3d67966f240fd926099649caa808d90f3de5928875066588421641a1b
4
- data.tar.gz: 8c2e055452e77b1cebaacb892a6bf5c3c83eef1ff5d41046f5d391f90a6799e5
3
+ metadata.gz: e1a3277e51f9c13b9ea0a9c211538fe0421ea29a43c274fd190251e322647793
4
+ data.tar.gz: 87f4b67695bfd3b4b59b68b7d9ad29416d2b0e7ec0393f535a25bd126bdbada6
5
5
  SHA512:
6
- metadata.gz: 57eadd9107c6e04303e082a5bb7b86c4c8302f17c022063ad7f8181f77d5d95d5c689af3074ea8399f75d60338b8173dfb9417e0ebb25f7ea3afa260d4f33346
7
- data.tar.gz: fd5f6fe3a95412d58b53a7acc2ba0d780122a90fea74f711e77d558042effee0b34dd737548543403d7301e252dbe169b9590d0fd7b1a2343a9e7162088bd419
6
+ metadata.gz: db2b7295bada2ed2e1725c59d7f041e876fd04b96675a847e0ce0163f15e01765be4bdfa1b239f5d8eeca6e86da253e47de1685a1326a9fba160106b40850537
7
+ data.tar.gz: 840e816d31d623dbf19e13daab534f119a4b65fb38e9461d14fbee8992a6c4897a5a388b17ecda33eaf3177a47b4d86ed50b901b83df1a5b1b3bf8e8ba9f5507
@@ -0,0 +1 @@
1
+ jaguar
@@ -0,0 +1 @@
1
+ 2.5.3
data/Gemfile CHANGED
@@ -4,3 +4,7 @@ git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
4
4
 
5
5
  # Specify your gem's dependencies in jaguar.gemspec
6
6
  gemspec
7
+
8
+ unless ENV['JAGUAR_USE_RUBYGEMS'] == "yes"
9
+ gem "delirium", path: "../delirium"
10
+ end
@@ -1,12 +1,25 @@
1
+ PATH
2
+ remote: ../delirium
3
+ specs:
4
+ delirium (0.2.0)
5
+
1
6
  PATH
2
7
  remote: .
3
8
  specs:
4
- jaguar (0.1.0)
9
+ jaguar (0.1.1)
10
+ contracts
11
+ pry
5
12
 
6
13
  GEM
7
14
  remote: https://rubygems.org/
8
15
  specs:
16
+ coderay (1.1.2)
17
+ contracts (0.16.0)
9
18
  diff-lcs (1.3)
19
+ method_source (0.9.2)
20
+ pry (0.12.2)
21
+ coderay (~> 1.1.0)
22
+ method_source (~> 0.9.0)
10
23
  rake (10.5.0)
11
24
  rspec (3.8.0)
12
25
  rspec-core (~> 3.8.0)
@@ -26,7 +39,8 @@ PLATFORMS
26
39
  ruby
27
40
 
28
41
  DEPENDENCIES
29
- bundler (~> 1.17)
42
+ bundler (~> 1.16)
43
+ delirium!
30
44
  jaguar!
31
45
  rake (~> 10.0)
32
46
  rspec (~> 3.0)
@@ -0,0 +1,14 @@
1
+ require "jaguar/dsl"
2
+ include Jaguar::DSL
3
+
4
+ did_receive_ctrl_c = false
5
+
6
+ Signal.trap("INT") {
7
+ puts "
8
+ ctrl+c received!"
9
+ did_receive_ctrl_c = true
10
+ }
11
+
12
+ Mouse.move(10,10)
13
+ Keyboard.type "hello", :enter, [:ctrl, "c"]
14
+ Keyboard.type [:cmd, [:tab]], [:cmd, [:tab]]
@@ -0,0 +1,20 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ # add lib to libpath (only needed when running from the sources)
5
+ require 'pathname'
6
+ lib_path = File.expand_path('../../lib', Pathname.new(__FILE__).realpath)
7
+ $LOAD_PATH.unshift lib_path unless $LOAD_PATH.include?(lib_path)
8
+
9
+ STDOUT.sync = true
10
+
11
+ require 'jaguar'
12
+ require 'jaguar/cli'
13
+
14
+ eval_string = if ARGV.any?
15
+ ARGV.join " "
16
+ else
17
+ nil
18
+ end
19
+
20
+ Jaguar::CLI::RootCommand.run eval_string: eval_string
@@ -21,7 +21,10 @@ Gem::Specification.new do |spec|
21
21
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
22
22
  spec.require_paths = ["lib"]
23
23
 
24
- spec.add_development_dependency "bundler", "~> 1.17"
24
+ spec.add_dependency "pry"
25
+ spec.add_dependency "contracts"
26
+
27
+ spec.add_development_dependency "bundler", "~> 1.16"
25
28
  spec.add_development_dependency "rake", "~> 10.0"
26
29
  spec.add_development_dependency "rspec", "~> 3.0"
27
30
  end
@@ -1,6 +1,45 @@
1
- require "jaguar/version"
1
+ require "delirium"
2
+ require "contracts"
2
3
 
3
4
  module Jaguar
5
+ include Contracts::Core
6
+ include Contracts::Builtin
7
+ C = Contracts
8
+
4
9
  class Error < StandardError; end
5
- # Your code goes here...
10
+
11
+ @@driver = Delirium::Platform.class_for_current_platform.new
12
+
13
+ Contract nil => Delirium::Platform::Base
14
+ def self.driver
15
+ @@driver
16
+ end
17
+
18
+ Contract Delirium::Platform::Base => nil
19
+ def self.driver=(d)
20
+ @@driver = d
21
+ nil
22
+ end
23
+
24
+ Contract Jaguar::C::Args[Any] => nil
25
+ def self.debug(*args)
26
+ return unless ENV["JAGUAR_DEBUG"] == "yes"
27
+
28
+ print "JAGUAR DEBUG: "
29
+ for arg in args
30
+ arg_formatted = case arg
31
+ when String
32
+ arg
33
+ else
34
+ arg.inspect
35
+ end
36
+ print arg_formatted
37
+ print " "
38
+ end
39
+ puts ""
40
+ nil
41
+ end
6
42
  end
43
+
44
+ require_relative "jaguar/version"
45
+ require_relative "jaguar/helpers"
@@ -0,0 +1,25 @@
1
+ require_relative "../jaguar" # if required only "jaguar/cli"
2
+ require_relative "dsl"
3
+ require "pry"
4
+
5
+ module Jaguar
6
+ module CLI
7
+ class RootCommand
8
+ include Contracts::Core
9
+
10
+ Contract ({ eval_string: Jaguar::C::Maybe[String] }) => nil
11
+ def self.run(eval_string:nil)
12
+ TOPLEVEL_BINDING.eval """
13
+ include Jaguar::DSL
14
+ """
15
+ if eval_string
16
+ TOPLEVEL_BINDING.eval eval_string
17
+ else
18
+ TOPLEVEL_BINDING.eval "Pry.start"
19
+ end
20
+ nil
21
+ end
22
+ end
23
+ end
24
+ end
25
+
@@ -0,0 +1,9 @@
1
+ require_relative "../jaguar" # if required only "jaguar/dsl"
2
+
3
+ module Jaguar
4
+ module DSL
5
+ end
6
+ end
7
+
8
+ require_relative "dsl/mouse"
9
+ require_relative "dsl/keyboard"
@@ -0,0 +1,15 @@
1
+ module Jaguar
2
+ module DSL
3
+ module Keyboard
4
+ include Contracts::Core
5
+
6
+ Contract Jaguar::C::Args[Jaguar::C::Or[String,Array,Symbol,Hash]] => self.class
7
+ def self.type(*string_or_arrays_or_symbol_or_hashes)
8
+ Type.type *string_or_arrays_or_symbol_or_hashes
9
+ self
10
+ end
11
+ end
12
+ end
13
+ end
14
+
15
+ require_relative "keyboard/type"
@@ -0,0 +1,118 @@
1
+ module Jaguar
2
+ module DSL
3
+ module Keyboard
4
+ module Type
5
+ include Contracts::Core
6
+
7
+ Contract Jaguar::C::Args[Jaguar::C::Or[String,Array,Symbol,Hash]] => self.class
8
+ def self.type(*string_or_arrays_or_symbol_or_hashes)
9
+ opts, type_sequence = parse_type_args_to_opts_and_type_sequence string_or_arrays_or_symbol_or_hashes
10
+
11
+ sequence = unpack_type_sequence type_sequence
12
+ delay = opts[:delay]
13
+
14
+ Jaguar.debug "sequence", sequence, "delay", delay
15
+
16
+ sequence.each do |s|
17
+ already_delayed = false
18
+
19
+ case s
20
+ when String
21
+ Jaguar.debug "direct_write_instead_of_key_presses?(delay)", direct_write_instead_of_key_presses?(delay)
22
+
23
+ if direct_write_instead_of_key_presses?(delay)
24
+ Jaguar.driver.do device: :keyboard, action: :write, params: {string: s}
25
+ else
26
+ s.split('').each do |k|
27
+ Jaguar.driver.do device: :keyboard, action: :write, params: {string: s}
28
+ Jaguar::Helpers.delay delay if delay
29
+ already_delayed = true
30
+ end
31
+ end
32
+ when Array
33
+ non_mods = s.pop
34
+ Jaguar.debug "non_mods", non_mods
35
+ for mod in s do
36
+ Jaguar.driver.do device: :keyboard, action: :key_down, params: {key: mod}
37
+ end
38
+
39
+ case non_mods
40
+ when String,Symbol
41
+ # [:alt, "d"]
42
+ # [:cmd, :tab]
43
+ Jaguar.driver.do device: :keyboard, action: :key_press, params: {key: non_mods}
44
+ when Array
45
+ # [:alt, [:tab, :tab]]
46
+ non_mods.each do |non_mod|
47
+ Jaguar.driver.do device: :keyboard, action: :key_press, params: {key: non_mod}
48
+ Jaguar::Helpers.delay delay if delay
49
+ already_delayed = true
50
+ end
51
+ end
52
+
53
+ for mod in s do
54
+ Jaguar.driver.do device: :keyboard, action: :key_up, params: {key: mod}
55
+ end
56
+ when Symbol
57
+ Jaguar.driver.do device: :keyboard, action: :key_press, params: {key: s}
58
+ end
59
+
60
+ unless already_delayed
61
+ Jaguar::Helpers.delay delay if delay
62
+ end
63
+ end
64
+
65
+ self
66
+ end
67
+
68
+ private
69
+
70
+ Contract Jaguar::C::Args[Jaguar::C::Or[String,Array,Symbol,Hash]] => Array[Hash,Array]
71
+ def self.parse_type_args_to_opts_and_type_sequence(args)
72
+ opts = {}
73
+ type_sequence = []
74
+ args.each do |string_or_array_or_symbol_or_hash|
75
+ case string_or_array_or_symbol_or_hash.class.name
76
+ when "String", "Array", "Symbol"
77
+ type_sequence << string_or_array_or_symbol_or_hash
78
+ when "Hash"
79
+ opts.merge!(string_or_array_or_symbol_or_hash)
80
+ end
81
+ end
82
+ [opts, type_sequence]
83
+ end
84
+
85
+ Contract Jaguar::C::Or[Integer,Float,Range,NilClass] => Jaguar::C::Bool
86
+ def self.direct_write_instead_of_key_presses?(delay)
87
+ case delay
88
+ when Integer
89
+ delay == 0
90
+ when Float
91
+ delay == 0.0
92
+ when Range
93
+ delay.first == 0 && delay.last == 0
94
+ when NilClass
95
+ true
96
+ end
97
+ end
98
+
99
+ Contract Jaguar::C::Or[String,Array,Symbol] => Array
100
+ def self.unpack_type_sequence(type_sequence)
101
+ case type_sequence
102
+ when String
103
+ # type "hello"
104
+ type_sequence.split ''
105
+ when Array
106
+ # type "hello", :enter
107
+ # type [:ctrl, :c]
108
+ # type [:alt, [:tab, :tab]]
109
+ type_sequence
110
+ when Symbol
111
+ # type :enter
112
+ [type_sequence]
113
+ end
114
+ end
115
+ end
116
+ end
117
+ end
118
+ end
@@ -0,0 +1,24 @@
1
+ module Jaguar
2
+ module DSL
3
+ module Mouse
4
+ include Contracts::Core
5
+
6
+ Contract Jaguar::C::KeywordArgs[
7
+ x: Integer, y: Integer
8
+ ] => self.class
9
+ def self.move(x:nil, y:nil)
10
+ Jaguar.driver.do({
11
+ device: :mouse,
12
+ action: :move,
13
+ params: { x: x, y: y }
14
+ })
15
+ self
16
+ end
17
+
18
+ Contract Integer, Integer => self.class
19
+ def self.move(x,y)
20
+ move x:x, y:y
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,15 @@
1
+ module Jaguar
2
+ module Helpers
3
+ include Contracts::Core
4
+ Contract Jaguar::C::Or[Range,Integer,Float] => self.class
5
+ def self.delay(d=0.0..0.0)
6
+ case d
7
+ when Range
8
+ sleep rand(d) # gotta love ruby
9
+ when Integer, Float
10
+ sleep d
11
+ end
12
+ self
13
+ end
14
+ end
15
+ end
@@ -1,3 +1,3 @@
1
1
  module Jaguar
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
metadata CHANGED
@@ -1,29 +1,57 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jaguar
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Superbot HQ
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-12-12 00:00:00.000000000 Z
11
+ date: 2018-12-15 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: pry
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: contracts
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
13
41
  - !ruby/object:Gem::Dependency
14
42
  name: bundler
15
43
  requirement: !ruby/object:Gem::Requirement
16
44
  requirements:
17
45
  - - "~>"
18
46
  - !ruby/object:Gem::Version
19
- version: '1.17'
47
+ version: '1.16'
20
48
  type: :development
21
49
  prerelease: false
22
50
  version_requirements: !ruby/object:Gem::Requirement
23
51
  requirements:
24
52
  - - "~>"
25
53
  - !ruby/object:Gem::Version
26
- version: '1.17'
54
+ version: '1.16'
27
55
  - !ruby/object:Gem::Dependency
28
56
  name: rake
29
57
  requirement: !ruby/object:Gem::Requirement
@@ -54,12 +82,15 @@ dependencies:
54
82
  version: '3.0'
55
83
  description:
56
84
  email:
57
- executables: []
85
+ executables:
86
+ - jaguar
58
87
  extensions: []
59
88
  extra_rdoc_files: []
60
89
  files:
61
90
  - ".gitignore"
62
91
  - ".rspec"
92
+ - ".ruby-gemset"
93
+ - ".ruby-version"
63
94
  - ".travis.yml"
64
95
  - Gemfile
65
96
  - Gemfile.lock
@@ -68,8 +99,16 @@ files:
68
99
  - Rakefile
69
100
  - bin/console
70
101
  - bin/setup
102
+ - e2e/main.rb
103
+ - exe/jaguar
71
104
  - jaguar.gemspec
72
105
  - lib/jaguar.rb
106
+ - lib/jaguar/cli.rb
107
+ - lib/jaguar/dsl.rb
108
+ - lib/jaguar/dsl/keyboard.rb
109
+ - lib/jaguar/dsl/keyboard/type.rb
110
+ - lib/jaguar/dsl/mouse.rb
111
+ - lib/jaguar/helpers.rb
73
112
  - lib/jaguar/version.rb
74
113
  homepage: https://github.com/superbothq/jaguar
75
114
  licenses:
@@ -91,7 +130,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
91
130
  version: '0'
92
131
  requirements: []
93
132
  rubyforge_project:
94
- rubygems_version: 2.7.7
133
+ rubygems_version: 2.7.8
95
134
  signing_key:
96
135
  specification_version: 4
97
136
  summary: jaguar eats capybaras