mosca 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 8790d6fe2852f8a4486cbc47d9ed48c43e0c2e1b
4
+ data.tar.gz: e166ef25f408e8d7532eed8ee6690c705d98a5d3
5
+ SHA512:
6
+ metadata.gz: 92d433566337cb9cc73eb153accd127d300857ad89967b3c0bdadc8670de0299bfc18471e6a0bd2763b6f2c8ed0d720792c4f95b03f4cd0f171d719ed3c94275
7
+ data.tar.gz: 530ba900c1cd6e483cbc4fd70fa27efd2cf3d3097eecaec2f351824417174a3f2f40d2652653032145cb7e7f923b34ecd484e600d6b0309a9dac716a1dd732fe
@@ -0,0 +1,38 @@
1
+ require 'json'
2
+
3
+ module CommandBuilder
4
+ public
5
+
6
+ def method_missing(method, *args)
7
+ json = full_hash(method, args.first).to_json
8
+ client.publish json
9
+ end
10
+
11
+ protected
12
+
13
+ def default_hash
14
+ {}
15
+ end
16
+
17
+ def process_command command, args
18
+ {command: command}
19
+ end
20
+
21
+ private
22
+
23
+ def specific_hash method, args
24
+ hash = {}
25
+ if respond_to? "#{method}_hash"
26
+ hash.merge! send("#{method}_hash", args)
27
+ end
28
+ hash
29
+ end
30
+
31
+ def full_hash method, args
32
+ command_default = process_command(method, args)
33
+ command_specific = specific_hash(method, args)
34
+ default_hash.merge(command_default).merge(command_specific)
35
+ end
36
+
37
+
38
+ end
@@ -0,0 +1,3 @@
1
+ module Mosca
2
+ VERSION = '0.0.2'
3
+ end
data/lib/mosca.rb ADDED
@@ -0,0 +1,109 @@
1
+ require 'mqtt'
2
+ require 'json'
3
+
4
+ class Mosca
5
+ @@default_broker = "test.mosquitto.org"
6
+ @@default_timeout = 5
7
+ @@debug = false
8
+
9
+ attr_accessor :user, :pass, :topic_in, :topic_out, :broker, :topic_base
10
+
11
+ def initialize params = {}
12
+ @user = params[:user]
13
+ @pass = params[:pass]
14
+ @topic_in = params[:topic_in]
15
+ @topic_out = params[:topic_out]
16
+ @topic_base = params[:topic_base] || ""
17
+ @broker = params[:broker] || @@default_broker
18
+ @client = params[:client] || MQTT::Client
19
+ end
20
+
21
+ def publish json, params = {}
22
+ connection do |c|
23
+ topic = params[:topic] || @topic_out
24
+ debug "[start publish] " + timestamp
25
+ c.subscribe(topic_base + topic_in) if params[:response]
26
+ c.publish(topic_base + topic,json)
27
+ debug "[end publish] " + timestamp
28
+ if params[:response]
29
+ return get(params.merge({connection: c}))
30
+ end
31
+ end
32
+ end
33
+
34
+ def get params = {}
35
+ response = {}
36
+ connection(params) do |c|
37
+ topic = params[:topic] || @topic_in
38
+ timeout = params[:timeout] || @@default_timeout
39
+ begin
40
+ Timeout.timeout(timeout) do
41
+ debug "[start get] " + timestamp
42
+ c.get(topic_base + topic) do |topic, message|
43
+ response = parse_response message
44
+ break
45
+ end
46
+ debug "[end get] " + timestamp
47
+ end
48
+ rescue
49
+ end
50
+ end
51
+ response
52
+ end
53
+
54
+ def get_with_connection
55
+
56
+ end
57
+
58
+ def self.default_broker= param
59
+ @@default_broker = param
60
+ end
61
+
62
+ def self.default_timeout= param
63
+ @@default_timeout = param
64
+ end
65
+
66
+ def self.debug= param
67
+ @@debug = param
68
+ end
69
+
70
+ private
71
+
72
+ def opts
73
+ {remote_host: @broker, username: @user, password: @pass}
74
+ end
75
+
76
+ def connection params = {}
77
+ if params[:connection]
78
+ yield params[:connection]
79
+ else
80
+ @client.connect(opts) do |c|
81
+ yield c
82
+ end
83
+ end
84
+ end
85
+
86
+ def parse_response response
87
+ if valid_json? response
88
+ response = JSON.parse response
89
+ end
90
+ response
91
+ end
92
+
93
+ def valid_json? json_
94
+ begin
95
+ JSON.parse(json_)
96
+ return true
97
+ rescue
98
+ return false
99
+ end
100
+ end
101
+
102
+ def debug message
103
+ puts message if @@debug
104
+ end
105
+
106
+ def timestamp
107
+ Time.new.to_f.to_s
108
+ end
109
+ end
data/mosca.gemspec ADDED
@@ -0,0 +1,24 @@
1
+ # coding: utf-8
2
+
3
+ lib = File.expand_path('../lib', __FILE__)
4
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
+
6
+ require 'mosca/version'
7
+
8
+ Gem::Specification.new do |s|
9
+ s.name = 'mosca'
10
+ s.version = Mosca::VERSION
11
+ s.summary = "MQTT messaging made easy"
12
+ s.description = "A simple client for mqtt communication"
13
+ s.authors = ["Armando Andini"]
14
+ s.email = 'armando.andini@hotmail.com'
15
+ s.license = 'MIT'
16
+ s.homepage = 'http://github.com/antico5/mosca'
17
+
18
+ s.files = `git ls-files`.split($/)
19
+ s.test_files = s.files.grep(%r{^(test|spec|features)/})
20
+ s.require_paths = ["lib"]
21
+
22
+ s.add_dependency 'mqtt', '~> 0.2.0'
23
+ s.add_dependency 'json', '~> 1.8.1'
24
+ end
@@ -0,0 +1,31 @@
1
+ require 'mosca'
2
+
3
+ describe Mosca do
4
+ before do
5
+ @client = Mosca.new
6
+ end
7
+
8
+ it "has a default broker" do
9
+ @client.broker.should eq("test.mosquitto.org")
10
+ end
11
+
12
+ it "uses topic_out to publish if it was specified" do
13
+
14
+ end
15
+
16
+ it "uses topic_in to get messages if it was specified" do
17
+
18
+ end
19
+
20
+ it "publishes messages" do
21
+
22
+ end
23
+
24
+ it "gets messages" do
25
+
26
+ end
27
+
28
+ it "gets a hash if the message was JSON" do
29
+
30
+ end
31
+ end
@@ -0,0 +1 @@
1
+ require 'json'
metadata ADDED
@@ -0,0 +1,79 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: mosca
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ platform: ruby
6
+ authors:
7
+ - Armando Andini
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-06-16 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: mqtt
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: 0.2.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.2.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: json
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: 1.8.1
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: 1.8.1
41
+ description: A simple client for mqtt communication
42
+ email: armando.andini@hotmail.com
43
+ executables: []
44
+ extensions: []
45
+ extra_rdoc_files: []
46
+ files:
47
+ - lib/command_builder.rb
48
+ - lib/mosca.rb
49
+ - lib/mosca/version.rb
50
+ - mosca.gemspec
51
+ - spec/mosca_spec.rb
52
+ - spec/spec_helper.rb
53
+ homepage: http://github.com/antico5/mosca
54
+ licenses:
55
+ - MIT
56
+ metadata: {}
57
+ post_install_message:
58
+ rdoc_options: []
59
+ require_paths:
60
+ - lib
61
+ required_ruby_version: !ruby/object:Gem::Requirement
62
+ requirements:
63
+ - - '>='
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
66
+ required_rubygems_version: !ruby/object:Gem::Requirement
67
+ requirements:
68
+ - - '>='
69
+ - !ruby/object:Gem::Version
70
+ version: '0'
71
+ requirements: []
72
+ rubyforge_project:
73
+ rubygems_version: 2.0.3
74
+ signing_key:
75
+ specification_version: 4
76
+ summary: MQTT messaging made easy
77
+ test_files:
78
+ - spec/mosca_spec.rb
79
+ - spec/spec_helper.rb