rfid 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/lib/rfid.rb +7 -0
- data/lib/rfid/client_message.rb +43 -0
- data/lib/rfid/event.rb +0 -1
- data/lib/rfid/version.rb +2 -2
- data/lib/rfid/websocket.rb +1 -0
- data/lib/server.rb +2 -1
- data/spec/models/client_message_spec.rb +47 -0
- metadata +40 -26
data/lib/rfid.rb
CHANGED
@@ -3,6 +3,7 @@ require 'redis/connection/hiredis'
|
|
3
3
|
require 'redis'
|
4
4
|
require 'logger'
|
5
5
|
require 'uri'
|
6
|
+
require "cocaine"
|
6
7
|
require 'rfid/core_ext'
|
7
8
|
|
8
9
|
module Rfid
|
@@ -11,6 +12,7 @@ module Rfid
|
|
11
12
|
autoload :WebSocket, 'rfid/websocket'
|
12
13
|
autoload :Config, 'rfid/config'
|
13
14
|
autoload :Event, 'rfid/event'
|
15
|
+
autoload :ClientMessage, 'rfid/client_message'
|
14
16
|
|
15
17
|
extend self
|
16
18
|
|
@@ -63,6 +65,11 @@ module Rfid
|
|
63
65
|
logger.info([timestamp, args.compact].flatten.join(' '))
|
64
66
|
end
|
65
67
|
|
68
|
+
def initialize!
|
69
|
+
Cocaine::CommandLine.path = ["/opt/bin", "/usr/local/bin", "/usr/bin"]
|
70
|
+
Cocaine::CommandLine.logger = logger
|
71
|
+
end
|
72
|
+
|
66
73
|
protected
|
67
74
|
|
68
75
|
def create_logger(filepath)
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require "cocaine"
|
2
|
+
|
3
|
+
module Rfid
|
4
|
+
class ClientMessage
|
5
|
+
attr_reader :event_name, :data
|
6
|
+
|
7
|
+
def initialize(body)
|
8
|
+
@hash = parse(body)
|
9
|
+
@event_name = @hash['event'] || 'default'
|
10
|
+
@data = @hash['data'] || {}
|
11
|
+
end
|
12
|
+
|
13
|
+
def perform
|
14
|
+
case @event_name
|
15
|
+
when 'system' then run @data['command']
|
16
|
+
else
|
17
|
+
return false
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
protected
|
22
|
+
|
23
|
+
def parse(body)
|
24
|
+
begin
|
25
|
+
ActiveSupport::JSON.decode(body)
|
26
|
+
rescue Exception => e
|
27
|
+
Rfid.log "Error parse", body, e.message
|
28
|
+
return {}
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def run(binary, params = "", options = {})
|
33
|
+
return if binary.blank?
|
34
|
+
line = Cocaine::CommandLine.new(binary, params, options)
|
35
|
+
|
36
|
+
begin
|
37
|
+
line.run
|
38
|
+
rescue Exception => e
|
39
|
+
Rfid.log "Error run", line.command, e.message
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
data/lib/rfid/event.rb
CHANGED
data/lib/rfid/version.rb
CHANGED
@@ -1,3 +1,3 @@
|
|
1
1
|
module Rfid
|
2
|
-
VERSION = "0.0.
|
3
|
-
end
|
2
|
+
VERSION = "0.0.2".freeze
|
3
|
+
end
|
data/lib/rfid/websocket.rb
CHANGED
data/lib/server.rb
CHANGED
@@ -3,6 +3,7 @@ require 'eventmachine'
|
|
3
3
|
require 'thread'
|
4
4
|
require 'rfid'
|
5
5
|
|
6
|
+
Rfid.initialize!
|
6
7
|
Thread.abort_on_exception = true
|
7
8
|
threads = []
|
8
9
|
|
@@ -16,4 +17,4 @@ threads << Thread.new do
|
|
16
17
|
EventMachine.run { Rfid::Translator.start }
|
17
18
|
end
|
18
19
|
|
19
|
-
threads.map(&:join)
|
20
|
+
threads.map(&:join)
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Rfid::ClientMessage do
|
4
|
+
before(:all) do
|
5
|
+
Rfid.initialize!
|
6
|
+
end
|
7
|
+
|
8
|
+
context "parse" do
|
9
|
+
before(:each) do
|
10
|
+
@message = Rfid::ClientMessage.new("{\"event\":\"system\",\"data\":{\"command\":\"echo\"},\"socket_id\":1}")
|
11
|
+
end
|
12
|
+
|
13
|
+
it "should extract event_name" do
|
14
|
+
@message.event_name.should == "system"
|
15
|
+
end
|
16
|
+
|
17
|
+
it "should extract data" do
|
18
|
+
@message.data.should == {"command" => "echo"}
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
context "invalid body" do
|
23
|
+
before(:each) do
|
24
|
+
@message = Rfid::ClientMessage.new("wrong")
|
25
|
+
end
|
26
|
+
|
27
|
+
it "should set default event_name" do
|
28
|
+
@message.event_name.should == "default"
|
29
|
+
end
|
30
|
+
|
31
|
+
it "should set default data" do
|
32
|
+
@message.data.should == {}
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
context "perform" do
|
37
|
+
before(:each) do
|
38
|
+
@message = Rfid::ClientMessage.new("{\"event\":\"system\",\"data\":{\"command\":\"echo\"},\"socket_id\":1}")
|
39
|
+
end
|
40
|
+
|
41
|
+
it "should run command" do
|
42
|
+
lambda {
|
43
|
+
@message.perform
|
44
|
+
}.should_not raise_error
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rfid
|
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,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2012-02-07 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: em-websocket
|
16
|
-
requirement: &
|
16
|
+
requirement: &82837190 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: 0.3.5
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *82837190
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: em-hiredis
|
27
|
-
requirement: &
|
27
|
+
requirement: &82836960 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ~>
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: 0.1.0
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *82836960
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: redis
|
38
|
-
requirement: &
|
38
|
+
requirement: &82836730 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ~>
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: 2.2.2
|
44
44
|
type: :runtime
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *82836730
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: activesupport
|
49
|
-
requirement: &
|
49
|
+
requirement: &82836500 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ~>
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: 3.1.3
|
55
55
|
type: :runtime
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *82836500
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: sinatra
|
60
|
-
requirement: &
|
60
|
+
requirement: &82836270 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ~>
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: 1.3.1
|
66
66
|
type: :runtime
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *82836270
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: rack-contrib
|
71
|
-
requirement: &
|
71
|
+
requirement: &82836040 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ~>
|
@@ -76,10 +76,10 @@ dependencies:
|
|
76
76
|
version: 1.1.0
|
77
77
|
type: :runtime
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *82836040
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: thin
|
82
|
-
requirement: &
|
82
|
+
requirement: &82835810 !ruby/object:Gem::Requirement
|
83
83
|
none: false
|
84
84
|
requirements:
|
85
85
|
- - ~>
|
@@ -87,10 +87,10 @@ dependencies:
|
|
87
87
|
version: 1.3.0
|
88
88
|
type: :runtime
|
89
89
|
prerelease: false
|
90
|
-
version_requirements: *
|
90
|
+
version_requirements: *82835810
|
91
91
|
- !ruby/object:Gem::Dependency
|
92
92
|
name: curb
|
93
|
-
requirement: &
|
93
|
+
requirement: &82835580 !ruby/object:Gem::Requirement
|
94
94
|
none: false
|
95
95
|
requirements:
|
96
96
|
- - ~>
|
@@ -98,10 +98,10 @@ dependencies:
|
|
98
98
|
version: 0.7.16
|
99
99
|
type: :runtime
|
100
100
|
prerelease: false
|
101
|
-
version_requirements: *
|
101
|
+
version_requirements: *82835580
|
102
102
|
- !ruby/object:Gem::Dependency
|
103
103
|
name: json
|
104
|
-
requirement: &
|
104
|
+
requirement: &82835350 !ruby/object:Gem::Requirement
|
105
105
|
none: false
|
106
106
|
requirements:
|
107
107
|
- - ~>
|
@@ -109,10 +109,21 @@ dependencies:
|
|
109
109
|
version: 1.6.1
|
110
110
|
type: :runtime
|
111
111
|
prerelease: false
|
112
|
-
version_requirements: *
|
112
|
+
version_requirements: *82835350
|
113
|
+
- !ruby/object:Gem::Dependency
|
114
|
+
name: cocaine
|
115
|
+
requirement: &82835120 !ruby/object:Gem::Requirement
|
116
|
+
none: false
|
117
|
+
requirements:
|
118
|
+
- - ~>
|
119
|
+
- !ruby/object:Gem::Version
|
120
|
+
version: 0.2.1
|
121
|
+
type: :runtime
|
122
|
+
prerelease: false
|
123
|
+
version_requirements: *82835120
|
113
124
|
- !ruby/object:Gem::Dependency
|
114
125
|
name: i18n
|
115
|
-
requirement: &
|
126
|
+
requirement: &82834930 !ruby/object:Gem::Requirement
|
116
127
|
none: false
|
117
128
|
requirements:
|
118
129
|
- - ! '>='
|
@@ -120,10 +131,10 @@ dependencies:
|
|
120
131
|
version: '0'
|
121
132
|
type: :runtime
|
122
133
|
prerelease: false
|
123
|
-
version_requirements: *
|
134
|
+
version_requirements: *82834930
|
124
135
|
- !ruby/object:Gem::Dependency
|
125
136
|
name: daemons
|
126
|
-
requirement: &
|
137
|
+
requirement: &82834700 !ruby/object:Gem::Requirement
|
127
138
|
none: false
|
128
139
|
requirements:
|
129
140
|
- - ! '>='
|
@@ -131,10 +142,10 @@ dependencies:
|
|
131
142
|
version: '0'
|
132
143
|
type: :runtime
|
133
144
|
prerelease: false
|
134
|
-
version_requirements: *
|
145
|
+
version_requirements: *82834700
|
135
146
|
- !ruby/object:Gem::Dependency
|
136
147
|
name: thor
|
137
|
-
requirement: &
|
148
|
+
requirement: &82834490 !ruby/object:Gem::Requirement
|
138
149
|
none: false
|
139
150
|
requirements:
|
140
151
|
- - ! '>='
|
@@ -142,7 +153,7 @@ dependencies:
|
|
142
153
|
version: '0'
|
143
154
|
type: :runtime
|
144
155
|
prerelease: false
|
145
|
-
version_requirements: *
|
156
|
+
version_requirements: *82834490
|
146
157
|
description: Provider for RFID API and driver by websokets protocol
|
147
158
|
email: galeta.igor@gmail.com
|
148
159
|
executables:
|
@@ -178,6 +189,7 @@ files:
|
|
178
189
|
- lib/rfid/cli.rb
|
179
190
|
- lib/rfid/config.rb
|
180
191
|
- lib/rfid/application.rb
|
192
|
+
- lib/rfid/client_message.rb
|
181
193
|
- lib/rfid/core_ext.rb
|
182
194
|
- lib/rfid/version.rb
|
183
195
|
- lib/rfid/event.rb
|
@@ -191,6 +203,7 @@ files:
|
|
191
203
|
- README.rdoc
|
192
204
|
- INSTALL.rdoc
|
193
205
|
- spec/rfid_spec.rb
|
206
|
+
- spec/models/client_message_spec.rb
|
194
207
|
- spec/models/event_spec.rb
|
195
208
|
- spec/models/config_spec.rb
|
196
209
|
- spec/models/application_spec.rb
|
@@ -222,6 +235,7 @@ specification_version: 3
|
|
222
235
|
summary: Websocket for RFID
|
223
236
|
test_files:
|
224
237
|
- spec/rfid_spec.rb
|
238
|
+
- spec/models/client_message_spec.rb
|
225
239
|
- spec/models/event_spec.rb
|
226
240
|
- spec/models/config_spec.rb
|
227
241
|
- spec/models/application_spec.rb
|