axon-nats 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 4d2ff7053ad9f41a155ecc5558c1788768963078
4
+ data.tar.gz: aa70e43b53a52dc89fe08097065dd9573febc2c4
5
+ SHA512:
6
+ metadata.gz: 81e850617a81d3494758221ab1bb954cb35224a52b65ded5a4497e292c307bca4e97f1280773d4a560de37c3bf5319fed705671a4a781c7c80a7758843ebb3e4
7
+ data.tar.gz: cf316fe6be3080c7be0e4a8acd0974daf9af85ae780ea26a0d6c1873144dca3cbd75352331bc5234d23cac844dd4c1f9e5ed206466db8c72e6c75c6f81f9d5dc
@@ -0,0 +1,43 @@
1
+ .travis.yml
2
+ .DS_Store
3
+
4
+ # Created by https://www.gitignore.io/api/ruby
5
+
6
+ ### Ruby ###
7
+ *.gem
8
+ *.rbc
9
+ /.config
10
+ /coverage/
11
+ /InstalledFiles
12
+ /pkg/
13
+ /spec/reports/
14
+ /spec/examples.txt
15
+ /test/tmp/
16
+ /test/version_tmp/
17
+ /tmp/
18
+
19
+ ## Specific to RubyMotion:
20
+ .dat*
21
+ .repl_history
22
+ build/
23
+
24
+ ## Documentation cache and generated files:
25
+ /.yardoc/
26
+ /_yardoc/
27
+ /doc/
28
+ /rdoc/
29
+
30
+ ## Environment normalisation:
31
+ /.bundle/
32
+ /vendor/bundle
33
+ /lib/bundler/man/
34
+
35
+ # for a library or gem, you might want to ignore these files since the code is
36
+ # intended to run in multiple environments; otherwise, check them in:
37
+ # Gemfile.lock
38
+ # .ruby-version
39
+ # .ruby-gemset
40
+
41
+ # unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
42
+ .rvmrc
43
+
@@ -0,0 +1,33 @@
1
+ lib = File.expand_path('../lib', __FILE__)
2
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
+ require 'axon-nats/version'
4
+
5
+ GEM_NAME = 'axon-nats'
6
+
7
+ task :build do
8
+ system "gem build #{GEM_NAME}.gemspec"
9
+ end
10
+
11
+ task :install => [:build] do
12
+ system "gem install #{GEM_NAME}-#{Axon::VERSION}.gem"
13
+ end
14
+
15
+ task :release => [:build] do
16
+ system "gem push #{GEM_NAME}-#{Axon::VERSION}.gem"
17
+ end
18
+
19
+ task :bump do
20
+ version_file_path = "./lib/#{GEM_NAME}/version.rb"
21
+ version_file_text = File.read(version_file_path)
22
+ new_text = version_file_text.gsub(/VERSION = \"(\d+).(\d+).(\d+)\"/) {
23
+ old_version = "#{$1}.#{$2}.#{$3}"
24
+ new_version = "#{$1}.#{$2}.#{$3.to_i + 1}"
25
+ puts "#{old_version} -> #{new_version}"
26
+ "VERSION = \"#{new_version}\""
27
+ }
28
+ File.write(version_file_path, new_text)
29
+ end
30
+
31
+ task :clean do
32
+ exec "rm *.gem"
33
+ end
@@ -0,0 +1,22 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'axon-nats/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "axon-nats"
8
+ spec.version = Axon::VERSION
9
+ spec.authors = ["Josh Glendenning"]
10
+ spec.email = ["joshglendenning@gmail.com"]
11
+
12
+ spec.summary = %q{A simple NATS wrapper which uses JSON}
13
+ spec.homepage = "https://github.com/joshglendenning/axon-ruby"
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
17
+ spec.require_paths = ["lib"]
18
+
19
+ spec.add_development_dependency "rake", "~> 10.0"
20
+
21
+ spec.add_dependency 'nats', '~> 0.5'
22
+ end
@@ -0,0 +1,46 @@
1
+ require 'nats/client'
2
+ require 'axon-nats/msg'
3
+ require 'axon-nats/error'
4
+
5
+ include Axon
6
+ module Axon
7
+ def self.subscribe(route, &block)
8
+ NATS.subscribe(route) { |msg_s|
9
+ begin
10
+ block.call(AxonMsg.parse(msg_s))
11
+ rescue => e
12
+ STDERR.puts e
13
+ STDERR.puts e.backtrace
14
+ end
15
+ }
16
+ end
17
+ def self.respond(route, &block)
18
+ NATS.subscribe(route) { |msg_s, reply|
19
+ begin
20
+ NATS.publish(reply, AxonMsg.new(block.call(AxonMsg.parse(msg_s))))
21
+ rescue AxonError => e
22
+ NATS.publish(reply, AxonMsg.new(e.data, e.message))
23
+ rescue => e
24
+ if e.is_a? StandardError
25
+ STDERR.puts e
26
+ STDERR.puts e.backtrace
27
+ end
28
+ NATS.publish(reply, AxonMsg.new({}, e.message))
29
+ end
30
+ }
31
+ end
32
+ def self.request(route, req = {}, &block)
33
+ NATS.request(route, AxonMsg.new(req)) { |msg_s|
34
+ block.call(AxonMsg.parse(msg_s))
35
+ }
36
+ end
37
+ def self.publish(route, msg = {})
38
+ NATS.publish(route, AxonMsg.new(msg))
39
+ end
40
+ def self.method_missing(method, *args)
41
+ NATS.send(method, *args) if NATS.respond_to? method
42
+ end
43
+ def self.method_missing(method, *args, &block)
44
+ NATS.send(method, *args, &block) if NATS.respond_to? method
45
+ end
46
+ end
@@ -0,0 +1,8 @@
1
+ module Axon
2
+ class Axon::AxonError < StandardError
3
+ attr_accessor :data
4
+ def initialize(data)
5
+ @data = data
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,34 @@
1
+ require 'json'
2
+
3
+ module Axon
4
+ class AxonMsg
5
+ KEY_ERROR = "_error"
6
+ def self.parse(msg_s)
7
+ msg_o = JSON.parse(msg_s)
8
+ AxonMsg.new(msg_o, msg_o[KEY_ERROR])
9
+ end
10
+ def initialize(data = {}, error = nil)
11
+ raise "data must be a hash" unless data.is_a? Hash
12
+ @data = data
13
+ @data[KEY_ERROR] = error unless error.nil?
14
+ end
15
+ def [](key)
16
+ @data[key.to_s]
17
+ end
18
+ def []=(key, value)
19
+ @data[key.to_s] = value
20
+ end
21
+ def error?
22
+ !@data[KEY_ERROR].nil?
23
+ end
24
+ def to_s
25
+ JSON.generate(@data)
26
+ end
27
+ def to_str
28
+ to_s
29
+ end
30
+ def method_missing(method, *args)
31
+ @data.send(method, *args) if @data.respond_to? method
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,3 @@
1
+ module Axon
2
+ VERSION = "0.2.0"
3
+ end
metadata ADDED
@@ -0,0 +1,79 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: axon-nats
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.0
5
+ platform: ruby
6
+ authors:
7
+ - Josh Glendenning
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-10-12 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rake
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '10.0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '10.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: nats
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '0.5'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '0.5'
41
+ description:
42
+ email:
43
+ - joshglendenning@gmail.com
44
+ executables: []
45
+ extensions: []
46
+ extra_rdoc_files: []
47
+ files:
48
+ - ".gitignore"
49
+ - Rakefile
50
+ - axon-nats.gemspec
51
+ - lib/axon-nats.rb
52
+ - lib/axon-nats/error.rb
53
+ - lib/axon-nats/msg.rb
54
+ - lib/axon-nats/version.rb
55
+ homepage: https://github.com/joshglendenning/axon-ruby
56
+ licenses:
57
+ - MIT
58
+ metadata: {}
59
+ post_install_message:
60
+ rdoc_options: []
61
+ require_paths:
62
+ - lib
63
+ required_ruby_version: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: '0'
68
+ required_rubygems_version: !ruby/object:Gem::Requirement
69
+ requirements:
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ version: '0'
73
+ requirements: []
74
+ rubyforge_project:
75
+ rubygems_version: 2.4.5.1
76
+ signing_key:
77
+ specification_version: 4
78
+ summary: A simple NATS wrapper which uses JSON
79
+ test_files: []