flex_bullet 0.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/lib/flex_bullet/command.rb +19 -0
- data/lib/flex_bullet/listener.rb +77 -0
- data/lib/flex_bullet/message.rb +43 -0
- data/lib/flex_bullet/tasker.rb +36 -0
- data/lib/flex_bullet/user.rb +20 -0
- data/lib/flex_bullet.rb +23 -0
- metadata +118 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 82104438ae0351fbf6e12f412e1529f5a3893749
|
4
|
+
data.tar.gz: 5fe7515eee2a3d87029bf1f98703b6dc9734cf7a
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 51183a0e7f5845a2ac9fd28bfd31d1a33c8d6bf395fb6680567dd13c6c1732aaa7bee621519f0a5ec2b8715d50fa42ddd1272a6ff6a502c3a8a1fd2ac56da31a
|
7
|
+
data.tar.gz: 13851e03fb7e6cf68686609bfdb25023e480a7f515640f7b05e77d77cdcf3134e889a36e24c289900bc130a6310c320ec87cc7b2dba2e5987d714af93f2ba9df
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module FlexBullet
|
2
|
+
|
3
|
+
class Command
|
4
|
+
attr_reader :sender, :email, :command, :arguments
|
5
|
+
|
6
|
+
def initialize (sender, email, command, arguments = [])
|
7
|
+
@sender = sender
|
8
|
+
@email = email
|
9
|
+
@command = command
|
10
|
+
@arguments = arguments
|
11
|
+
end
|
12
|
+
|
13
|
+
def execute
|
14
|
+
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
@@ -0,0 +1,77 @@
|
|
1
|
+
require 'curb'
|
2
|
+
require 'eventmachine'
|
3
|
+
require 'faye/websocket'
|
4
|
+
require 'json'
|
5
|
+
|
6
|
+
require_relative 'command'
|
7
|
+
require_relative 'message'
|
8
|
+
require_relative 'user'
|
9
|
+
require_relative 'tasker'
|
10
|
+
|
11
|
+
#require 'flex_bullet/tasker'
|
12
|
+
|
13
|
+
module FlexBullet
|
14
|
+
|
15
|
+
class Listener
|
16
|
+
attr_accessor :last_message, :sender, :command, :args
|
17
|
+
|
18
|
+
def initialize (args)
|
19
|
+
@user_obj =
|
20
|
+
if args.is_a?(FlexBullet::User)
|
21
|
+
args
|
22
|
+
else
|
23
|
+
FlexBullet::User.new(args[:email], args[:auth], args[:name])
|
24
|
+
end
|
25
|
+
@tasker = Tasker.new(@user_obj)
|
26
|
+
end
|
27
|
+
|
28
|
+
def get_last_message
|
29
|
+
last_message = JSON::parse(get_1h_history)['pushes'].first
|
30
|
+
Message.new(:parsed_json => last_message)
|
31
|
+
end
|
32
|
+
|
33
|
+
def get_1h_history
|
34
|
+
get_1h_history = Curl::Easy.new("https://api.pushbullet.com/v2/pushes?modified_after=#{(Time.now - 3600).to_i}") { |curl|
|
35
|
+
curl.headers['Authorization'] = "Bearer #{@user_obj.auth}"
|
36
|
+
curl.verbose = false
|
37
|
+
}
|
38
|
+
get_1h_history.perform
|
39
|
+
get_1h_history.body_str
|
40
|
+
end
|
41
|
+
|
42
|
+
def stream (tb_config = nil)
|
43
|
+
|
44
|
+
FlexConfig.new('/Users/YCL/Documents/RubyProjects/EL_library/tunnel_blick/config', tb_config) unless tb_config.nil?
|
45
|
+
|
46
|
+
EM.run {
|
47
|
+
ws = Faye::WebSocket::Client.new("wss://stream.pushbullet.com/websocket/#{@user_obj.auth}")
|
48
|
+
|
49
|
+
ws.on :open do |event|
|
50
|
+
p [:open]
|
51
|
+
end
|
52
|
+
|
53
|
+
ws.on :message do |event|
|
54
|
+
response = JSON::parse(event.data)
|
55
|
+
|
56
|
+
if response['type'] == 'nop'
|
57
|
+
print '.'
|
58
|
+
end
|
59
|
+
|
60
|
+
if response['type'] == 'tickle' && response['subtype'] == 'push'
|
61
|
+
message = get_last_message
|
62
|
+
|
63
|
+
if message.email != @user_obj.email
|
64
|
+
@tasker.incoming(message)
|
65
|
+
end
|
66
|
+
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
ws.on :close do |event|
|
71
|
+
p [:close, event.code, event.reason]
|
72
|
+
ws = nil
|
73
|
+
end
|
74
|
+
}
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
module FlexBullet
|
2
|
+
class Message
|
3
|
+
attr_reader :sender, :email, :iden, :body, :title, :user_obj
|
4
|
+
|
5
|
+
def initialize (args)
|
6
|
+
if args[:parsed_json] != nil
|
7
|
+
json = args[:parsed_json]
|
8
|
+
@sender = json['sender_name']
|
9
|
+
@email = json['sender_email']
|
10
|
+
@iden = json['sender_iden']
|
11
|
+
@body = json['body']
|
12
|
+
else
|
13
|
+
@sender = args[:sender] || ''
|
14
|
+
@email = args[:email]
|
15
|
+
@iden = args[:iden] || ''
|
16
|
+
@body = args[:body]
|
17
|
+
@title = args[:title] || ''
|
18
|
+
end
|
19
|
+
|
20
|
+
@user_obj = args[:user_obj]
|
21
|
+
end
|
22
|
+
|
23
|
+
def send_to (*args)
|
24
|
+
if args.size == 1
|
25
|
+
raise ArgumentError('Message needs assigned user to send self') if user_obj.nil?
|
26
|
+
user_obj.client.push_note_to(args.first, title, body)
|
27
|
+
elsif args.size == 2
|
28
|
+
raise ArgumentError('User must be assigned in first argument') unless args.first.is_a?(FlexBullet::User)
|
29
|
+
args.first.client.push_note_to(args[1], title, body)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def user= (user_obj)
|
34
|
+
@user_obj = user_obj
|
35
|
+
end
|
36
|
+
|
37
|
+
def to_cmd
|
38
|
+
body = @body.split("\n").map(&:strip)
|
39
|
+
Command.new(@sender, @email, body.first, body[1..-1])
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'open4'
|
2
|
+
require 'pushbullet'
|
3
|
+
|
4
|
+
class Tasker
|
5
|
+
|
6
|
+
def initialize (user_obj)
|
7
|
+
@user_obj = user_obj
|
8
|
+
end
|
9
|
+
|
10
|
+
def incoming(message)
|
11
|
+
command = message.to_cmd
|
12
|
+
sender = command.sender
|
13
|
+
email = command.email
|
14
|
+
cmd = command.command
|
15
|
+
args = command.arguments
|
16
|
+
|
17
|
+
puts "#{cmd} command received from #{sender}, params: "
|
18
|
+
|
19
|
+
case cmd.downcase
|
20
|
+
when 'echo'
|
21
|
+
echo(message)
|
22
|
+
when 'exit'
|
23
|
+
exit
|
24
|
+
when 'run'
|
25
|
+
|
26
|
+
else
|
27
|
+
puts "Command: #{cmd} not recognized"
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
|
32
|
+
def echo (message)
|
33
|
+
message.send_to(@user_obj, message.email)
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module FlexBullet
|
2
|
+
class User
|
3
|
+
attr_reader :email, :name, :auth, :client
|
4
|
+
|
5
|
+
def initialize (email, authentication, name = '')
|
6
|
+
@email = email
|
7
|
+
@name = name
|
8
|
+
@auth = authentication
|
9
|
+
@client = Pushbullet::Client.new(authentication)
|
10
|
+
end
|
11
|
+
|
12
|
+
def message (body)
|
13
|
+
Message.new(sender: name, email: email, body: body, user_obj: self)
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
|
20
|
+
|
data/lib/flex_bullet.rb
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'curb'
|
2
|
+
require 'eventmachine'
|
3
|
+
require 'faye/websocket'
|
4
|
+
require 'json'
|
5
|
+
require 'yaml'
|
6
|
+
|
7
|
+
|
8
|
+
|
9
|
+
|
10
|
+
require_relative 'tasker'
|
11
|
+
|
12
|
+
|
13
|
+
|
14
|
+
module FlexBullet
|
15
|
+
|
16
|
+
|
17
|
+
|
18
|
+
end
|
19
|
+
|
20
|
+
server = FlexBullet::Listener.new(email: MY_EMAIL, auth: MY_AUTH)
|
21
|
+
|
22
|
+
config = {}
|
23
|
+
server.stream(config)
|
metadata
ADDED
@@ -0,0 +1,118 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: flex_bullet
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Eugene Lai
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-02-27 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: curb
|
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: eventmachine
|
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'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: faye/websocket
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: open4
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: pushbullet
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
description: To do
|
84
|
+
email: ejt.lai@gmail.com
|
85
|
+
executables: []
|
86
|
+
extensions: []
|
87
|
+
extra_rdoc_files: []
|
88
|
+
files:
|
89
|
+
- lib/flex_bullet.rb
|
90
|
+
- lib/flex_bullet/command.rb
|
91
|
+
- lib/flex_bullet/listener.rb
|
92
|
+
- lib/flex_bullet/message.rb
|
93
|
+
- lib/flex_bullet/tasker.rb
|
94
|
+
- lib/flex_bullet/user.rb
|
95
|
+
homepage:
|
96
|
+
licenses: []
|
97
|
+
metadata: {}
|
98
|
+
post_install_message:
|
99
|
+
rdoc_options: []
|
100
|
+
require_paths:
|
101
|
+
- lib
|
102
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
103
|
+
requirements:
|
104
|
+
- - ">="
|
105
|
+
- !ruby/object:Gem::Version
|
106
|
+
version: '0'
|
107
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
108
|
+
requirements:
|
109
|
+
- - ">="
|
110
|
+
- !ruby/object:Gem::Version
|
111
|
+
version: '0'
|
112
|
+
requirements: []
|
113
|
+
rubyforge_project:
|
114
|
+
rubygems_version: 2.5.2
|
115
|
+
signing_key:
|
116
|
+
specification_version: 4
|
117
|
+
summary: A powerful automated browser
|
118
|
+
test_files: []
|