minep-request 0.0.1 → 0.0.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 +17 -0
- data/bin/mine-request +60 -0
- data/lib/minep/connection.rb +6 -0
- data/lib/minep/exceptions.rb +18 -0
- data/lib/minep/minep.rb +5 -0
- data/lib/minep/request.rb +83 -14
- data/lib/minep/utils.rb +19 -1
- data/lib/minep.rb +3 -4
- metadata +14 -4
data/README.md
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
minep-request
|
2
|
+
=============
|
3
|
+
|
4
|
+
minep-request is a ruby gem allowing to communicate with a [MINE server](http://github.com/Ezveus/Mine)
|
5
|
+
|
6
|
+
Requests are AUTHENTICATE, SIGNUP, EXEC, INSERT, MOVE, BACKSPACE and DELETE.
|
7
|
+
|
8
|
+
Arguments required :
|
9
|
+
--------------------
|
10
|
+
|
11
|
+
- AUTHENTICATE : *name* and *pass*
|
12
|
+
- SIGNUP : *name*, *pass*, *email* and (optionaly) *website*
|
13
|
+
- EXEC : Not implemented yet
|
14
|
+
- INSERT : Not implemented yet
|
15
|
+
- MOVE : Not implemented yet
|
16
|
+
- BACKSPACE : Not implemented yet
|
17
|
+
- DELETE : Not implemented yet
|
data/bin/mine-request
ADDED
@@ -0,0 +1,60 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'optparse'
|
4
|
+
require 'rubygems'
|
5
|
+
require 'minep'
|
6
|
+
|
7
|
+
request = nil
|
8
|
+
options = {}
|
9
|
+
|
10
|
+
optparse = OptionParser.new do |opts|
|
11
|
+
opts.banner = <<-eos
|
12
|
+
Usage: mine-request -r REQUEST [OPTION]... REQUEST_ARGUMENTS
|
13
|
+
Send a request to a MINE server
|
14
|
+
|
15
|
+
Valid requests are :
|
16
|
+
#{MINEP.requestList}
|
17
|
+
eos
|
18
|
+
|
19
|
+
opts.on("-r", "--request REQUEST",
|
20
|
+
MINEP.requestList, "request to send") do |r|
|
21
|
+
request = r
|
22
|
+
end
|
23
|
+
|
24
|
+
opts.on "-h", "--host HOST", "server hostname" do |h|
|
25
|
+
options[:host] = h
|
26
|
+
end
|
27
|
+
|
28
|
+
opts.on "-p", "--port PORT", Integer, "server port" do |p|
|
29
|
+
options[:port] = p
|
30
|
+
end
|
31
|
+
|
32
|
+
opts.on "--help", "displays this screen" do |h|
|
33
|
+
puts opts
|
34
|
+
exit 1
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
begin
|
39
|
+
optparse.parse!
|
40
|
+
if request.nil?
|
41
|
+
puts "Missing option : request\n"
|
42
|
+
puts optparse
|
43
|
+
exit 1
|
44
|
+
end
|
45
|
+
rescue OptionParser::InvalidOption, OptionParser::MissingArgument, OptionParser::InvalidArgument
|
46
|
+
puts $!.to_s
|
47
|
+
puts optparse
|
48
|
+
exit 1
|
49
|
+
end
|
50
|
+
|
51
|
+
ARGV.each do |arg|
|
52
|
+
args = arg.split '='
|
53
|
+
options[args[0].to_sym] = args[1]
|
54
|
+
end
|
55
|
+
begin
|
56
|
+
MINEP.send request, options
|
57
|
+
rescue MINEP::ArgumentsError => e
|
58
|
+
$stderr.puts "Error : #{e}"
|
59
|
+
exit 1
|
60
|
+
end
|
data/lib/minep/connection.rb
CHANGED
@@ -1,5 +1,9 @@
|
|
1
1
|
module MINEP
|
2
|
+
# This class extends EM::Connection (the connection class of EventMachine)
|
2
3
|
class Connection < EM::Connection
|
4
|
+
# Initialize the object
|
5
|
+
#
|
6
|
+
# @param [Hash] request is the request, The text request is built from this
|
3
7
|
def initialize request
|
4
8
|
super
|
5
9
|
@request = ["#{request[:header][:head]}\n"]
|
@@ -22,10 +26,12 @@ module MINEP
|
|
22
26
|
@request = @request.join
|
23
27
|
end
|
24
28
|
|
29
|
+
# Send the request after the connection initialization
|
25
30
|
def post_init
|
26
31
|
send_data @request
|
27
32
|
end
|
28
33
|
|
34
|
+
# Receive the answer of the server and puts it on standard output
|
29
35
|
def receive_data data
|
30
36
|
puts data
|
31
37
|
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module MINEP
|
2
|
+
class ArgumentsError < Exception
|
3
|
+
end
|
4
|
+
|
5
|
+
# Raise a ArgumentsError with "Not enough arguments for request" as an argument
|
6
|
+
#
|
7
|
+
# @param [String] rqst the request which called the function
|
8
|
+
def self.notEnoughArgs rqst
|
9
|
+
raise ArgumentsError, "Not enough arguments for request #{rqst}"
|
10
|
+
end
|
11
|
+
|
12
|
+
# Raise a ArgumentsError with "Missing mandatory arguments for request" as an argument
|
13
|
+
#
|
14
|
+
# @param [String] rqst the request which called the function
|
15
|
+
def self.missingArgs rqst
|
16
|
+
raise ArgumentsError, "Missing mandatory arguments for request #{rqst}"
|
17
|
+
end
|
18
|
+
end
|
data/lib/minep/minep.rb
CHANGED
@@ -1,4 +1,9 @@
|
|
1
1
|
module MINEP
|
2
|
+
# Send a request to opts\[:host\] or localhost on port
|
3
|
+
# opts\[:port\] or 8080
|
4
|
+
#
|
5
|
+
# @param [Symbol] type the request type, see main page for the requests list
|
6
|
+
# @param [Hash] opts stores the parameters of the request and host and port, see main page for the requests parameters
|
2
7
|
def self.send type, opts={}
|
3
8
|
request = {}
|
4
9
|
return false unless Utils.makeRequest request, type, opts
|
data/lib/minep/request.rb
CHANGED
@@ -1,39 +1,108 @@
|
|
1
1
|
module MINEP
|
2
|
+
RequestList = [
|
3
|
+
:authenticate,
|
4
|
+
:signup,
|
5
|
+
:exec,
|
6
|
+
:insert,
|
7
|
+
:move,
|
8
|
+
:backspace,
|
9
|
+
:delete
|
10
|
+
]
|
11
|
+
|
12
|
+
# Returns an array containing the request list
|
13
|
+
def self.requestList
|
14
|
+
RequestList
|
15
|
+
end
|
16
|
+
|
17
|
+
# Returns a string containing the request list under the form "\t-> request\n..."
|
18
|
+
def RequestList.to_s
|
19
|
+
"\t-> authenticate\n\t-> signup\n\t-> exec\n\t-> insert\n\t-> move\n\t-> backspace\n\t-> delete\n"
|
20
|
+
end
|
21
|
+
|
22
|
+
# Module containing methods for checking requests arguments
|
2
23
|
module Request
|
24
|
+
|
25
|
+
# Checks arguments for authenticate and create the request body
|
26
|
+
#
|
27
|
+
# @param [Hash] request will contain the request (headers and body)
|
28
|
+
# @param [Hash] opts contains the options and arguments get from MINEP.send
|
29
|
+
# @option opts [String] :name The user login/email
|
30
|
+
# @option opts [String] :pass The user password
|
3
31
|
def self.authenticate request, opts={}
|
4
|
-
|
5
|
-
|
32
|
+
MINEP.notEnoughArgs "AUTHENTICATE" if opts.empty?
|
33
|
+
MINEP.missingArgs "AUTHENTICATE" if opts[:name].nil? or opts[:pass].nil?
|
6
34
|
Utils.makeAuthenticate request, opts
|
7
35
|
end
|
8
36
|
|
37
|
+
# Checks arguments for signup and create the request body
|
38
|
+
# @param [String] website is the url of the website of the new user, passed through opts
|
39
|
+
#
|
40
|
+
# @param [Hash] request will contain the request (headers and body)
|
41
|
+
# @param [Hash] opts contains the options and arguments get from MINEP.send
|
42
|
+
# @option opts [String] :name The login of the new user
|
43
|
+
# @option opts [String] :pass The password of the new user
|
44
|
+
# @option opts [String] :email The email of the new user
|
9
45
|
def self.signup request, opts={}
|
10
|
-
|
11
|
-
|
46
|
+
MINEP.notEnoughArgs "SIGNUP" if opts.empty?
|
47
|
+
MINEP.missingArgs "SIGNUP" if opts[:name].nil? or opts[:pass].nil? or opts[:email].nil?
|
48
|
+
Utils.makeSignup request, opts
|
12
49
|
end
|
13
50
|
|
51
|
+
# Checks arguments for exec and create the request body
|
52
|
+
#
|
53
|
+
# @param [Hash] request will contain the request (headers and body)
|
54
|
+
# @param [Hash] opts contains the options and arguments get from MINEP.send
|
55
|
+
# @option opts [String] :buffer The buffer on which you apply the command
|
56
|
+
# @option opts [String] :command The command to apply
|
57
|
+
# @option opts [Array] :args The (potentially empty) array containing arguments for the command
|
14
58
|
def self.exec request, opts={}
|
15
|
-
|
16
|
-
|
59
|
+
MINEP.notEnoughArgs "EXEC" if opts.empty?
|
60
|
+
MINEP.missingArgs "SIGNUP" if opts[:buffer].nil? or opts[:command].nil? or opts[:args].nil?
|
17
61
|
end
|
18
62
|
|
63
|
+
# Checks arguments for insert and create the request body
|
64
|
+
#
|
65
|
+
# @param [Hash] request will contain the request (headers and body)
|
66
|
+
# @param [Hash] opts contains the options and arguments get from MINEP.send
|
67
|
+
# @option opts [String] :buffer The buffer on which you insert text
|
68
|
+
# @option opts [String] :text The text to insert
|
19
69
|
def self.insert request, opts={}
|
20
|
-
|
21
|
-
|
70
|
+
MINEP.notEnoughArgs "INSERT" if opts.empty?
|
71
|
+
MINEP.missingArgs "INSERT" if opts[:buffer].nil? or opts[:text].nil?
|
22
72
|
end
|
23
73
|
|
74
|
+
# Checks arguments for move and create the request body
|
75
|
+
#
|
76
|
+
# @param [Hash] request will contain the request (headers and body)
|
77
|
+
# @param [Hash] opts contains the options and arguments get from MINEP.send
|
78
|
+
# @option opts [String] :buffer The buffer on which you move the cursor
|
79
|
+
# @option opts [Symbol] :direction The direction of the move
|
80
|
+
# @option opts [Integer] :number The range of the move (unused on :origin or :end move)
|
24
81
|
def self.move request, opts={}
|
25
|
-
|
26
|
-
|
82
|
+
MINEP.notEnoughArgs "MOVE" if opts.empty?
|
83
|
+
MINEP.missingArgs "MOVE" if opts[:buffer].nil? or opts[:direction].nil? or opts[:number].nil?
|
27
84
|
end
|
28
85
|
|
86
|
+
# Checks arguments for backspace and create the request body
|
87
|
+
#
|
88
|
+
# @param [Hash] request will contain the request (headers and body)
|
89
|
+
# @param [Hash] opts contains the options and arguments get from MINEP.send
|
90
|
+
# @option opts [String] :buffer The buffer on which you suppress
|
91
|
+
# @option opts [Integer] :number The range of the suppression
|
29
92
|
def self.backspace request, opts={}
|
30
|
-
|
31
|
-
|
93
|
+
MINEP.notEnoughArgs "BACKSPACE" if opts.empty?
|
94
|
+
MINEP.missingArgs "BACKSPACE" if opts[:buffer].nil? or opts[:number].nil?
|
32
95
|
end
|
33
96
|
|
97
|
+
# Checks arguments for delete and create the request body
|
98
|
+
#
|
99
|
+
# @param [Hash] request will contain the request (headers and body)
|
100
|
+
# @param [Hash] opts contains the options and arguments get from MINEP.send
|
101
|
+
# @option opts [String] :buffer The buffer on which you delete
|
102
|
+
# @option opts [Integer] :number The range of the deletion
|
34
103
|
def self.delete request, opts={}
|
35
|
-
|
36
|
-
|
104
|
+
MINEP.notEnoughArgs "DELETE" if opts.empty?
|
105
|
+
MINEP.missingArgs "DELETE" if opts[:buffer].nil? or opts[:number].nil?
|
37
106
|
end
|
38
107
|
end
|
39
108
|
end
|
data/lib/minep/utils.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
module MINEP
|
2
2
|
module Utils
|
3
|
+
# Make the request (header + body)
|
3
4
|
def self.makeRequest request, type, opts
|
4
5
|
Utils.getHeader request, opts[:host], opts[:port]
|
5
6
|
case type
|
@@ -14,7 +15,8 @@ module MINEP
|
|
14
15
|
false
|
15
16
|
end
|
16
17
|
end
|
17
|
-
|
18
|
+
|
19
|
+
# Make the request header
|
18
20
|
def self.getHeader request, host=nil, port=nil
|
19
21
|
host = "localhost" if host.nil?
|
20
22
|
port = 8080 if host.nil?
|
@@ -28,6 +30,7 @@ module MINEP
|
|
28
30
|
true
|
29
31
|
end
|
30
32
|
|
33
|
+
# Calculate the body length
|
31
34
|
def self.calcLength request
|
32
35
|
rqst = request[:body].keys[0]
|
33
36
|
cL = rqst.size # rqst
|
@@ -38,6 +41,7 @@ module MINEP
|
|
38
41
|
cL -= 1 # the loop counts one inexistant ','
|
39
42
|
end
|
40
43
|
|
44
|
+
# Make the body for AUTHENTICATE request
|
41
45
|
def self.makeAuthenticate request, options
|
42
46
|
request[:body] = {
|
43
47
|
:authenticate => {
|
@@ -48,5 +52,19 @@ module MINEP
|
|
48
52
|
request[:header][:contentLength] = calcLength request
|
49
53
|
true
|
50
54
|
end
|
55
|
+
|
56
|
+
# Make the body for SIGNUP request
|
57
|
+
def self.makeSignup request, options
|
58
|
+
request[:body] = {
|
59
|
+
:signup => {
|
60
|
+
:name => options[:name],
|
61
|
+
:pass => options[:pass],
|
62
|
+
:email => options[:email],
|
63
|
+
:website => options[:website].to_s
|
64
|
+
}
|
65
|
+
}
|
66
|
+
request[:header][:contentLength] = calcLength request
|
67
|
+
true
|
68
|
+
end
|
51
69
|
end
|
52
70
|
end
|
data/lib/minep.rb
CHANGED
@@ -3,7 +3,6 @@ require 'eventmachine'
|
|
3
3
|
require 'json'
|
4
4
|
|
5
5
|
# Requiring internal files
|
6
|
-
|
7
|
-
require
|
8
|
-
|
9
|
-
require 'minep/connection'
|
6
|
+
%w[minep request utils connection exceptions].each do |file|
|
7
|
+
require "minep/#{file}"
|
8
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: minep-request
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,20 +9,29 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-11-
|
12
|
+
date: 2012-11-13 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
|
-
description: Allows to communicate with a MINE server
|
14
|
+
description: ! 'Allows to communicate with a MINE server.
|
15
|
+
|
16
|
+
Supported requests are the same as the implemented requests in the server : AUTHENTICATE
|
17
|
+
and SIGNUP.
|
18
|
+
|
19
|
+
'
|
15
20
|
email: ciappam@gmail.com
|
16
|
-
executables:
|
21
|
+
executables:
|
22
|
+
- mine-request
|
17
23
|
extensions: []
|
18
24
|
extra_rdoc_files: []
|
19
25
|
files:
|
20
26
|
- lib/minep.rb
|
21
27
|
- lib/minep-request.rb
|
22
28
|
- lib/minep/connection.rb
|
29
|
+
- lib/minep/exceptions.rb
|
23
30
|
- lib/minep/minep.rb
|
24
31
|
- lib/minep/request.rb
|
25
32
|
- lib/minep/utils.rb
|
33
|
+
- README.md
|
34
|
+
- bin/mine-request
|
26
35
|
homepage: https://github.com/Ezveus/minep-request
|
27
36
|
licenses: []
|
28
37
|
post_install_message:
|
@@ -48,3 +57,4 @@ signing_key:
|
|
48
57
|
specification_version: 3
|
49
58
|
summary: Allows to communicate with a MINE server
|
50
59
|
test_files: []
|
60
|
+
has_rdoc:
|