axon-nats 0.2.0

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.
@@ -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: []