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.
@@ -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