conquer 0.1.1 → 0.1.2

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: 0cf4765d8e3b3654cca97c56fa4689fe19625410
4
- data.tar.gz: f23ae868d569a33e37877b459e4c6dcbb0697ca5
3
+ metadata.gz: 04927a4ee65cc431c91bb841a3e02e3811a8b772
4
+ data.tar.gz: 0145552faa91f177e69d9a4a39ddcab618bfad57
5
5
  SHA512:
6
- metadata.gz: 5a9c43ff8d956af027d6e1c23a3647cb36d54070dd73600cae55e9032d92ed3a9b44d543a5d36a5ab1c761f6c64c60103b5ac6ee54e703d8c0731e57567c9e7f
7
- data.tar.gz: 0872e53f714150a0ea14e9e3e2f869cd1e74a4aaaa753d6cac57b8e194847f556dfe497e9e73b9d469676f9ff47e349d016f02cb00fe6efee38fba7d980e520b
6
+ metadata.gz: e4d9a0881e87ccc2de1da43abb7615c06218894b3b01af462031ff4ffc35021935b59be250200aa039a1bea2d81e0aba5b1b781ed9eed43b8026fd9a53f7d50b
7
+ data.tar.gz: 7259acd38a69e3631e56446bdf7350c263e8c728c375ebc283a01ef35f452fed2cc02af9e9c6b623e387c704096686765e15b604eee24d63837d87e7d1f2b78c
data/conquer.gemspec CHANGED
@@ -23,4 +23,5 @@ Gem::Specification.new do |spec|
23
23
  spec.add_development_dependency "rspec", "~> 3.0"
24
24
 
25
25
  spec.add_dependency 'celluloid', '~> 0.1'
26
+ spec.add_dependency 'celluloid-io', '~> 0.1'
26
27
  end
data/exe/conquer CHANGED
@@ -1,6 +1,33 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- abort 'Usage: conquer bar.rb' if ARGV.empty?
3
+ require 'optparse'
4
4
 
5
- require 'conquer'
6
- require File.join(ENV['PWD'], ARGV[0])
5
+ module Conquer
6
+ options = {}
7
+ parser = OptionParser.new do |p|
8
+ p.banner = 'Usage: conquer [options] bar.rb'
9
+ p.on('-s', '--socket=PATH', 'use rpc socket in PATH') do |path|
10
+ options[:socket] = path
11
+ end
12
+
13
+ p.on('-h', '--help') do
14
+ puts p
15
+ exit
16
+ end
17
+ end
18
+
19
+ parser.parse!
20
+ abort(parser.to_s) if ARGV.empty?
21
+
22
+ runtime_dir = ENV['XDG_RUNTIME_DIR'] || "/run/user/#{ENV['UID']}"
23
+ RPC_SOCKET = options[:socket] || "#{runtime_dir}/conquer.socket"
24
+ end
25
+
26
+ begin
27
+ require 'conquer'
28
+ file = ARGV[0]
29
+ file.prepend("#{ENV['PWD']}/") unless file.start_with?('/')
30
+ require file
31
+ ensure
32
+ File.delete(Conquer::RPC_SOCKET) if File.exist?(Conquer::RPC_SOCKET)
33
+ end
data/lib/conquer/dsl.rb CHANGED
@@ -12,10 +12,16 @@ module Conquer
12
12
  Helpers.singleton_class.class_eval(&block)
13
13
  end
14
14
 
15
- def separator(string = ' | ')
16
- every(100.hours) { string }
15
+ def separator(string = ' | ', &block)
16
+ if block_given?
17
+ every(100.hours, &block)
18
+ else
19
+ every(100.hours) { string }
20
+ end
17
21
  end
18
22
 
23
+ alias static separator
24
+
19
25
  def every(timespan, &block)
20
26
  @container.register(Segment, timespan, block)
21
27
  end
@@ -0,0 +1,54 @@
1
+ require 'celluloid/current'
2
+ require 'celluloid/io'
3
+ require 'json'
4
+ require 'socket'
5
+
6
+ module Conquer
7
+ class RPC
8
+ include Celluloid::IO
9
+ include Celluloid::Notifications
10
+ include Celluloid::Internals::Logger
11
+
12
+ def initialize
13
+ info('Starting rpc server')
14
+ @server = UNIXServer.new(RPC_SOCKET)
15
+ async.run
16
+ end
17
+
18
+ def shutdown
19
+ @server.close if @server
20
+ end
21
+
22
+ def event(type, *args)
23
+ publish(type, *args)
24
+ end
25
+
26
+ private
27
+
28
+ def run
29
+ loop do
30
+ async.handle_connection(@server.accept)
31
+ end
32
+ end
33
+
34
+ def handle_connection(socket)
35
+ info('RPC: connection initiated')
36
+ loop do
37
+ line = socket.gets
38
+ break unless line
39
+ info("RPC: #{line}")
40
+ command = JSON.parse(line)
41
+ public_send(command['method'], *(command['params'] || []))
42
+ end
43
+ end
44
+
45
+ def rpc_server(&block)
46
+ UNIXServer.open(RPC_SOCKET) do |server|
47
+ info('RPC: socket opened')
48
+ loop do
49
+ server.accept(&block)
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
@@ -1,3 +1,3 @@
1
1
  module Conquer
2
- VERSION = "0.1.1"
2
+ VERSION = '0.1.2'.freeze
3
3
  end
data/lib/conquer.rb CHANGED
@@ -2,18 +2,30 @@ require 'conquer/version'
2
2
  require 'conquer/container'
3
3
  require 'conquer/dsl'
4
4
  require 'conquer/bar'
5
+ require 'conquer/rpc'
5
6
 
6
7
  module Conquer
7
8
  MAIN_TOPIC = 'conquer'.freeze
8
9
 
9
- def self.bar(io = STDOUT, &block)
10
+ @startup_hooks = []
11
+
12
+ module_function
13
+
14
+ def bar(io = STDOUT, &block)
10
15
  main_container = Container.new(MAIN_TOPIC)
11
16
  dsl = DSL.new(main_container)
12
17
  dsl.instance_eval(&block)
13
18
 
19
+ @startup_hooks.each(&:call)
20
+
21
+ RPC.supervise
14
22
  Bar.supervise(args: [MAIN_TOPIC, io])
15
23
  main_container.start_worker
16
24
 
17
25
  sleep
18
26
  end
27
+
28
+ def on_startup(&block)
29
+ @startup_hooks << block
30
+ end
19
31
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: conquer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joakim Reinert
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-06-04 00:00:00.000000000 Z
11
+ date: 2016-06-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -66,6 +66,20 @@ dependencies:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0.1'
69
+ - !ruby/object:Gem::Dependency
70
+ name: celluloid-io
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '0.1'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '0.1'
69
83
  description: Conquer is a DSL for writing concurrent status bars
70
84
  email:
71
85
  - mail@jreinert.com
@@ -91,6 +105,7 @@ files:
91
105
  - lib/conquer/core_ext/numeric.rb
92
106
  - lib/conquer/dsl.rb
93
107
  - lib/conquer/helpers.rb
108
+ - lib/conquer/rpc.rb
94
109
  - lib/conquer/scroller.rb
95
110
  - lib/conquer/segment.rb
96
111
  - lib/conquer/version.rb