rfid 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -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
@@ -37,7 +37,6 @@ module Rfid
37
37
 
38
38
  body = @cards.inject([]) do |arr, card|
39
39
  arr << Curl::PostField.content('event[cards][]', card)
40
- arr
41
40
  end
42
41
 
43
42
  body << Curl::PostField.content('event[mode]', @mode)
@@ -1,3 +1,3 @@
1
1
  module Rfid
2
- VERSION = "0.0.1".freeze
3
- end
2
+ VERSION = "0.0.2".freeze
3
+ end
@@ -16,6 +16,7 @@ module Rfid
16
16
  Rfid::Translator.web_log('socket_opened', socket_id, "Origin: #{ws.request['host']}")
17
17
 
18
18
  ws.onmessage { |msg|
19
+ ClientMessage.new(msg).perform
19
20
  Rfid::Translator.web_log('client_message', socket_id, "Message", msg)
20
21
  }
21
22
 
@@ -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.1
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: 2011-12-08 00:00:00.000000000 Z
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: &76301570 !ruby/object:Gem::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: *76301570
24
+ version_requirements: *82837190
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: em-hiredis
27
- requirement: &76300470 !ruby/object:Gem::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: *76300470
35
+ version_requirements: *82836960
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: redis
38
- requirement: &76299980 !ruby/object:Gem::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: *76299980
46
+ version_requirements: *82836730
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: activesupport
49
- requirement: &75797700 !ruby/object:Gem::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: *75797700
57
+ version_requirements: *82836500
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: sinatra
60
- requirement: &75796970 !ruby/object:Gem::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: *75796970
68
+ version_requirements: *82836270
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rack-contrib
71
- requirement: &75795150 !ruby/object:Gem::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: *75795150
79
+ version_requirements: *82836040
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: thin
82
- requirement: &75794240 !ruby/object:Gem::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: *75794240
90
+ version_requirements: *82835810
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: curb
93
- requirement: &75792670 !ruby/object:Gem::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: *75792670
101
+ version_requirements: *82835580
102
102
  - !ruby/object:Gem::Dependency
103
103
  name: json
104
- requirement: &75790260 !ruby/object:Gem::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: *75790260
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: &75789800 !ruby/object:Gem::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: *75789800
134
+ version_requirements: *82834930
124
135
  - !ruby/object:Gem::Dependency
125
136
  name: daemons
126
- requirement: &75789120 !ruby/object:Gem::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: *75789120
145
+ version_requirements: *82834700
135
146
  - !ruby/object:Gem::Dependency
136
147
  name: thor
137
- requirement: &75788340 !ruby/object:Gem::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: *75788340
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