slnky 0.9.0 → 0.9.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8f463d4a733b0c60374a3a454f61cab9e87be031
4
- data.tar.gz: c250fa9638bd70abc1fbc9d02bf74c56d56b847d
3
+ metadata.gz: 37ab3b0c1f8e28e91be149e5500fca4ce689b91b
4
+ data.tar.gz: 8f5dc8b34b0042c7ee44f636b3441da878ef3198
5
5
  SHA512:
6
- metadata.gz: dd296841c43e2b34a48cd92a93080efbf146d5ddd71ace7d0c8cba47952b1bb987f906173f1ced9d9a4d3a88026386067c71234e4ab58f5f0a12c5f5013c91e2
7
- data.tar.gz: e06bcf6700821592792b287480aec22cb2320374938f8c48c4e4e5971d183cb6f979caa865b5c89105a186f941b11b116e71a9f66068aa1ced2680b2df0ccda2
6
+ metadata.gz: 11787283f2e825eebb57cfd22b387447101a5f8f9bff2de344ed325a14c77c10202d28c616e10da0c430f1da77b4288ce4ed4475df9aec427ecec4ee4d41034e
7
+ data.tar.gz: a786cfd4158b024e21b7f70a58566d72be0d6c2d3768146c9f8323dc055d92305eddc741956522f58762b81f5b19e0bb4f3355f88fcb9ad349c7968352d01752
@@ -14,4 +14,4 @@ export SLNKY_SCRIPT
14
14
  exec start-stop-daemon --start \
15
15
  --chdir ${SLNKY_DIR} \
16
16
  --make-pidfile --pidfile ${SLNKY_DIR}/tmp/pids/${SLNKY_SERVICE}.pid \
17
- --exec /usr/local/rvm/bin/rvm -- ${SLNKY_RVM} do bundle exec ./${SLNKY_SCRIPT} production
17
+ --exec /usr/local/rvm/bin/rvm -- ${SLNKY_RVM} do bundle exec slnky service run -e production $SLNKY_SERVICE
data/lib/slnky/command.rb CHANGED
@@ -10,10 +10,10 @@ module Slnky
10
10
  @commands = self.class.commands
11
11
  end
12
12
 
13
- def handle(event, data)
13
+ def handle(event, data, response=nil)
14
14
  begin
15
15
  req = Slnky::Command::Request.new(data)
16
- res = Slnky::Command::Response.new(data.response, name)
16
+ res = response || Slnky::Command::Response.new(data.response, name)
17
17
  log.response = res
18
18
  res.start!
19
19
 
@@ -48,8 +48,6 @@ module Slnky
48
48
  end
49
49
  rescue Docopt::Exit => e
50
50
  log.info e.message
51
- rescue => e
52
- log.error "error in #{req.command}: #{e.message} at #{e.backtrace.first}"
53
51
  end
54
52
  end
55
53
 
@@ -1,17 +1,18 @@
1
1
  module Slnky
2
2
  module Command
3
3
  class Response
4
+ attr_reader :log
5
+
4
6
  def initialize(route, service)
5
- @transport = Slnky::Transport.instance
6
- @channel = @transport.channel
7
- @exchange = @transport.exchanges['response']
8
7
  @route = route
9
8
  @service = Slnky::System.pid(service)
10
- start!
9
+ @started = false
10
+ @log = []
11
11
  end
12
12
 
13
13
  [:info, :warn, :error].each do |l|
14
14
  define_method(l) do |message|
15
+ start! unless @started
15
16
  pub l, message
16
17
  end
17
18
  end
@@ -22,12 +23,17 @@ module Slnky
22
23
 
23
24
  def start!
24
25
  pub :start, "start"
26
+ @started = true
25
27
  end
26
28
 
27
29
  def done!
28
30
  pub :complete, "complete"
29
31
  end
30
32
 
33
+ def exchange=(exchange)
34
+ @exchange = exchange
35
+ end
36
+
31
37
  private
32
38
 
33
39
  def msg(level, message)
@@ -36,7 +42,20 @@ module Slnky
36
42
 
37
43
  def pub(level, message)
38
44
  # puts "#{level} #{message}"
39
- @exchange.publish(msg(level, message), routing_key: @route)
45
+ exchange.publish(msg(level, message), routing_key: @route)
46
+ @log << message
47
+ end
48
+
49
+ def exchange
50
+ @exchange ||= transport.exchanges['response']
51
+ end
52
+
53
+ def transport
54
+ @transport ||= Slnky::Transport.instance
55
+ end
56
+
57
+ def channel
58
+ @channel ||= transport.channel
40
59
  end
41
60
  end
42
61
  end
data/lib/slnky/config.rb CHANGED
@@ -1,4 +1,10 @@
1
1
  require 'open-uri'
2
+ require 'json'
3
+ require 'yaml'
4
+ require 'erb'
5
+ require 'tilt'
6
+ require 'dotenv'
7
+ Dotenv.load
2
8
 
3
9
  module Slnky
4
10
  class << self
@@ -14,7 +20,7 @@ module Slnky
14
20
  @config ||= begin
15
21
  config['service'] = name
16
22
  config['environment'] ||= 'development'
17
- file = ENV['SLINKY_CONFIG']||"~/.slnky/config.yaml"
23
+ file = ENV['SLNKY_CONFIG']||"~/.slnky/config.yaml"
18
24
  config.merge!(config_file(file))
19
25
  server = ENV['SLNKY_SERVER'] || config['url']
20
26
  config.merge!(config_server(server))
@@ -43,14 +49,22 @@ module Slnky
43
49
  def config_file(file)
44
50
  path = File.expand_path(file)
45
51
  return {} unless File.exists?(path)
46
- d = YAML.load_file(path) rescue {}
52
+ template = Tilt::ERBTemplate.new(path)
53
+ output = template.render(self, {})
54
+ d = YAML.load(output)
47
55
  d['slnky'] ? d['slnky'] : d
56
+ rescue => e
57
+ puts "failed to load file #{file}: #{e.message}"
58
+ {}
48
59
  end
49
60
 
50
61
  def config_server(server)
51
62
  return {} unless server
52
63
  server = "https://#{server}" unless server =~ /^http/
53
- JSON.parse(open("#{server}/configs/#{@name}") { |f| f.read }) rescue {}
64
+ JSON.parse(open("#{server}/configs/#{@name}") { |f| f.read })
65
+ rescue => e
66
+ puts "failed to load server #{server}: #{e.message}"
67
+ {}
54
68
  end
55
69
  end
56
70
 
@@ -0,0 +1,36 @@
1
+ require 'json'
2
+ require 'yaml'
3
+ require 'erb'
4
+ require 'tilt'
5
+ require 'dotenv'
6
+ require 'slnky'
7
+
8
+ def slnky_event(name)
9
+ @events ||= {}
10
+ @events[name] ||= begin
11
+ file = File.expand_path("#{Dir.pwd}/test/events/#{name}.json", __FILE__)
12
+ raise "file #{file} not found" unless File.exists?(file)
13
+ Slnky::Message.new(JSON.parse(File.read(file)))
14
+ end
15
+ end
16
+
17
+ def slnky_command(name)
18
+ @commands ||= {}
19
+ @commands[name] ||= begin
20
+ file = File.expand_path("#{Dir.pwd}/test/commands/#{name}.json", __FILE__)
21
+ raise "file #{file} not found" unless File.exists?(file)
22
+ Slnky::Command::Request.new(JSON.parse(File.read(file)))
23
+ end
24
+ end
25
+
26
+ def slnky_response(route, service)
27
+ @responses ||= {}
28
+ @responses[route] ||= begin
29
+ response = Slnky::Command::Response.new(route, service)
30
+ response.exchange = Slnky::Transport::MockExchange.new
31
+ response
32
+ end
33
+ end
34
+
35
+ ENV['SLNKY_CONFIG'] = File.expand_path("#{Dir.pwd}/test/config.yaml", __FILE__)
36
+ Slnky::Config.configure('spec')
@@ -8,6 +8,7 @@ gem 'capistrano', '~> 3.4.0'
8
8
  gem 'capistrano-rvm', '~> 0.1.2'
9
9
  gem 'capistrano-bundler', '~> 1.1.4'
10
10
  gem 'airbrussh', '~> 0.8.0'
11
+ gem 'travis', '~> 1.8.2'
11
12
 
12
13
  gem 'rspec'
13
14
  gem 'rake'
@@ -0,0 +1,20 @@
1
+ require 'rspec/core/rake_task'
2
+ RSpec::Core::RakeTask.new(:spec)
3
+ task :default => :spec
4
+
5
+ namespace :travis do
6
+ desc 'load .env variables into travis env'
7
+ task :env do
8
+ # use this to push variables to travis
9
+ # the names are the lower case names of the env
10
+ # variables set in your .env file
11
+ # %w{env_var_name}.each do |w|
12
+ # key = w.upcase
13
+ # `travis env set -- #{key} '#{ENV[key]}'`
14
+ # end
15
+ end
16
+ end
17
+
18
+ task :run do
19
+ sh "slnky service run <%= name %>"
20
+ end
@@ -2,16 +2,22 @@ require 'spec_helper'
2
2
 
3
3
  describe Slnky::<%= cap %>::Command do
4
4
  subject do
5
- s = described_class.new("http://localhost:3000", test_config)
6
- s.client = Slnky::<%= cap %>::Mock.new(test_config)
5
+ s = described_class.new
6
+ s.client = Slnky::<%= cap %>::Mock.new
7
7
  s
8
8
  end
9
- let(:echo) { command('echo').payload }
10
- let(:response) { Slnky::Command::Response.new() }
9
+ let(:echo) { slnky_command('echo') }
10
+ let(:help) { slnky_command('help') }
11
+ let(:echo_response) { slnky_response('test-route', 'spec') }
12
+ let(:help_response) { slnky_response('test-route', 'spec') }
11
13
 
12
14
  it 'handles echo' do
13
- resp = response
14
- expect(subject.echo(echo, resp)).not_to raise_error
15
- expect(resp.output).to eq("test echo")
15
+ expect { subject.handle(echo.name, echo.payload, echo_response) }.to_not raise_error
16
+ expect(echo_response.log).to include("test echo")
17
+ end
18
+
19
+ it 'handles help' do
20
+ expect { subject.handle(help.name, help.payload, help_response) }.to_not raise_error
21
+ expect(help_response.log).to include("<%= name %> help: print help")
16
22
  end
17
23
  end
@@ -2,8 +2,8 @@ require 'spec_helper'
2
2
 
3
3
  describe Slnky::<%= cap %>::Service do
4
4
  subject do
5
- s = described_class.new("http://localhost:3000", test_config)
6
- s.client = Slnky::<%= cap %>::Mock.new(test_config)
5
+ s = described_class.new
6
+ s.client = Slnky::<%= cap %>::Mock.new
7
7
  s
8
8
  end
9
9
  let(:test_event) { event_load('test')}
@@ -1,38 +1,3 @@
1
1
  $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
2
- require 'slnky'
3
- require 'slnky/<%= name %>'
4
- require 'yaml'
5
- require 'erb'
6
- require 'tilt'
7
-
8
- require 'dotenv'
9
- @dotenv = Dotenv.load
10
-
11
- def event(name)
12
- @events ||= {}
13
- @events[name] ||= begin
14
- file = File.expand_path("../../test/events/#{name}.json", __FILE__)
15
- raise "file #{file} not found" unless File.exists?(file)
16
- Slnky::Data.new(JSON.parse(File.read(file)))
17
- end
18
- end
19
-
20
- def command(name)
21
- @commands ||= {}
22
- @commands[name] ||= begin
23
- file = File.expand_path("../../test/commands/#{name}.json", __FILE__)
24
- raise "file #{file} not found" unless File.exists?(file)
25
- Slnky::Command::Request.new(JSON.parse(File.read(file)))
26
- end
27
- end
28
-
29
- def test_config
30
- @config ||= begin
31
- file = File.expand_path("../../test/config.yaml", __FILE__)
32
- template = Tilt::ERBTemplate.new(file)
33
- output = template.render(self, @dotenv)
34
- cfg = Slnky::Data.new(YAML.load(output))
35
- cfg.environment = 'test'
36
- cfg
37
- end
38
- end
2
+ require 'slnky/spec/helper'
3
+ require 'slnky/chef'
@@ -0,0 +1,9 @@
1
+ {
2
+ "name": "slnky.help.command",
3
+ "payload": {
4
+ "command": "help",
5
+ "args": [
6
+ ],
7
+ "responder": "STDOUT"
8
+ }
9
+ }
@@ -94,5 +94,15 @@ module Slnky
94
94
  @queues[desc] ||= @channel.queue(name, options).bind(@exchanges[exchange], bindoptions)
95
95
  end
96
96
  end
97
+
98
+ class MockExchange
99
+ def initialize
100
+ @verbose = false
101
+ end
102
+
103
+ def publish(object, options={})
104
+ puts "publish: #{object.inspect}: #{options.inspect}" if @verbose
105
+ end
106
+ end
97
107
  end
98
108
  end
data/lib/slnky/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Slnky
2
- VERSION = "0.9.0"
2
+ VERSION = "0.9.1"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: slnky
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.0
4
+ version: 0.9.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Shawn Catanzarite
@@ -221,6 +221,7 @@ files:
221
221
  - lib/slnky/service.rb
222
222
  - lib/slnky/service/subscriber.rb
223
223
  - lib/slnky/service/timer.rb
224
+ - lib/slnky/spec/helper.rb
224
225
  - lib/slnky/system.rb
225
226
  - lib/slnky/template/service/.env.sample
226
227
  - lib/slnky/template/service/.gitignore.erb
@@ -230,7 +231,7 @@ files:
230
231
  - lib/slnky/template/service/CODE_OF_CONDUCT.md
231
232
  - lib/slnky/template/service/Capfile
232
233
  - lib/slnky/template/service/Gemfile.erb
233
- - lib/slnky/template/service/Rakefile
234
+ - lib/slnky/template/service/Rakefile.erb
234
235
  - lib/slnky/template/service/config/deploy.rb.erb
235
236
  - lib/slnky/template/service/config/deploy/production.rb
236
237
  - lib/slnky/template/service/config/deploy/staging.rb
@@ -242,11 +243,11 @@ files:
242
243
  - lib/slnky/template/service/lib/slnky/NAME/mock.rb.erb
243
244
  - lib/slnky/template/service/lib/slnky/NAME/service.rb.erb
244
245
  - lib/slnky/template/service/log/.keep
245
- - lib/slnky/template/service/service-slnky-NAME.erb
246
246
  - lib/slnky/template/service/spec/slnky/NAME/command_spec.rb.erb
247
247
  - lib/slnky/template/service/spec/slnky/NAME/service_spec.rb.erb
248
248
  - lib/slnky/template/service/spec/spec_helper.rb.erb
249
249
  - lib/slnky/template/service/test/commands/echo.json.erb
250
+ - lib/slnky/template/service/test/commands/help.json
250
251
  - lib/slnky/template/service/test/config.yaml.erb
251
252
  - lib/slnky/template/service/test/events/test.json
252
253
  - lib/slnky/transport.rb
@@ -1,3 +0,0 @@
1
- require 'rspec/core/rake_task'
2
- RSpec::Core::RakeTask.new(:spec)
3
- task :default => :spec
@@ -1,18 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- lib = File.expand_path('../lib', __FILE__)
4
- $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
-
6
- require 'rubygems'
7
- require 'bundler/setup'
8
- require 'dotenv'
9
- require 'daemons'
10
- require 'slnky/<%= name %>'
11
- Dotenv.load
12
-
13
- env = ARGV[0]
14
-
15
- # Become a daemon
16
- # Daemons.daemonize if env == 'production'
17
-
18
- Slnky::<%= cap %>::Service.new(ENV['SLNKY_URL'], environment: env).start