nerdinator 0.1.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.
- checksums.yaml +7 -0
- data/bin/console +14 -0
- data/bin/nerdinator +4 -0
- data/bin/setup +8 -0
- data/lib/nerdinator/cli.rb +37 -0
- data/lib/nerdinator/config.rb +59 -0
- data/lib/nerdinator/session.rb +51 -0
- data/lib/nerdinator/version.rb +3 -0
- data/lib/nerdinator.rb +11 -0
- metadata +98 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 246dc6956b0b02cad986e56d0a0d5ca0575eacc4
|
4
|
+
data.tar.gz: 16a10c37dd2987088987560a80bd47b3f927c7f6
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 400efb641b9534e7f89b27009bb7a4839390f52ffd06ceb682d9462f44b8007d7b777c426ba8f06b37acc69086ef56a30940872830f7090c137de67efe882b14
|
7
|
+
data.tar.gz: 1ea6bb99f2bc178480ff4e6bb82e3c1edd6d9cccf200249f81f82b13669121fed133ce687fd49af814b4d08c013346071dd0584d88666dd585386814184be4d1
|
data/bin/console
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require "bundler/setup"
|
4
|
+
require "nerdinator"
|
5
|
+
|
6
|
+
# You can add fixtures and/or initialization code here to make experimenting
|
7
|
+
# with your gem easier. You can also use a different console, if you like.
|
8
|
+
|
9
|
+
# (If you use this, don't forget to add pry to your Gemfile!)
|
10
|
+
# require "pry"
|
11
|
+
# Pry.start
|
12
|
+
|
13
|
+
require "irb"
|
14
|
+
IRB.start
|
data/bin/nerdinator
ADDED
data/bin/setup
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
module Nerdinator
|
2
|
+
class Cli < Thor
|
3
|
+
def initialize(args = [], local_options = {}, config = {})
|
4
|
+
super(args, local_options, config)
|
5
|
+
@session = Nerdinator::Session.instance
|
6
|
+
@config = Nerdinator::Config.instance
|
7
|
+
@session.tree = @config.read || Hash.new
|
8
|
+
end
|
9
|
+
|
10
|
+
desc 'list', 'list all namespaced tmuxinator sessions'
|
11
|
+
def list
|
12
|
+
@session.list
|
13
|
+
end
|
14
|
+
|
15
|
+
desc 'add [NAMESPACE]/NAME', 'add tmuxinator config NAME to the specified namespace if provided, else to the top level namespace'
|
16
|
+
def add(session_path)
|
17
|
+
session_query = session_path.split('/')
|
18
|
+
@session.add(session_query)
|
19
|
+
|
20
|
+
@config.write(@session.tree)
|
21
|
+
@config.link(session_query.last)
|
22
|
+
end
|
23
|
+
|
24
|
+
desc 'remove NAMESPACE/[NAME]', 'remove config NAME from the NAMESPACE if provided, else recursively remove NAMESPACE'
|
25
|
+
def remove(session_path)
|
26
|
+
session_query = session_path.split('/')
|
27
|
+
@session.remove(session_query)
|
28
|
+
@config.write(@session.tree)
|
29
|
+
end
|
30
|
+
|
31
|
+
desc 'start NAMESPACE', 'start all tmux sessions under NAMESPACE using their tmuxinator configs'
|
32
|
+
def start(session_path = String.new)
|
33
|
+
session_query = session_path.split('/')
|
34
|
+
@config.start(@session.leaves(session_query).uniq)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
module Nerdinator
|
2
|
+
class Config
|
3
|
+
include Singleton
|
4
|
+
|
5
|
+
SETTINGS_KEY = 'nerdinator'.freeze
|
6
|
+
|
7
|
+
def tmuxinator_root
|
8
|
+
File.expand_path("#{ENV['HOME']}/.tmuxinator")
|
9
|
+
end
|
10
|
+
|
11
|
+
def root
|
12
|
+
File.expand_path("#{ENV['HOME']}/.nerdinator/nerdinator.yml")
|
13
|
+
end
|
14
|
+
|
15
|
+
def local
|
16
|
+
File.expand_path("#{ENV['PWD']}/tmuxinator.yml")
|
17
|
+
end
|
18
|
+
|
19
|
+
def setup(path)
|
20
|
+
Dir.mkdir(path.split('/')[0...-1].join('/'))
|
21
|
+
File.write(path, '')
|
22
|
+
end
|
23
|
+
|
24
|
+
def read(path = root)
|
25
|
+
setup(path) unless File.exists?(path)
|
26
|
+
YAML.load_file(path)
|
27
|
+
end
|
28
|
+
|
29
|
+
def write(data)
|
30
|
+
File.open(root, 'w+') do |f|
|
31
|
+
YAML.dump(data, f)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def parse_settings(data)
|
36
|
+
if settings = data[SETTINGS_KEY]
|
37
|
+
settings.map { |k, v| "#{k}=#{v}" }.join(' ')
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def tmuxinator_command(session, settings)
|
42
|
+
%x[tmuxinator start #{session} #{settings}]
|
43
|
+
end
|
44
|
+
|
45
|
+
def start(sessions)
|
46
|
+
puts 'Nerdinator Sessions started:'
|
47
|
+
sessions.each do |session|
|
48
|
+
puts "#{session}"
|
49
|
+
settings = parse_settings(read("#{tmuxinator_root}/#{session}.yml"))
|
50
|
+
tmuxinator_command(session, settings)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
def link(name)
|
55
|
+
path = "#{tmuxinator_root}/#{name}.yml"
|
56
|
+
File.symlink(local, path) unless File.symlink?(path)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
module Nerdinator
|
2
|
+
class Session
|
3
|
+
include Singleton
|
4
|
+
attr_accessor :tree
|
5
|
+
|
6
|
+
def list(tree = @tree, spacing = '')
|
7
|
+
tree.to_a.each do |session, subtree|
|
8
|
+
if subtree.keys.length.zero?
|
9
|
+
puts "#{spacing}#{session}"
|
10
|
+
else
|
11
|
+
puts "#{spacing}#{session}:"
|
12
|
+
list(subtree, "#{spacing} ")
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def add(session_query, tree = @tree)
|
18
|
+
tree[session_query.first] ||= {}
|
19
|
+
if session_query.length > 1
|
20
|
+
session = session_query.shift
|
21
|
+
add(session_query, tree[session])
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def remove(session_query, tree = @tree)
|
26
|
+
if session_query.length > 1
|
27
|
+
session = session_query.shift
|
28
|
+
remove(session_query, tree[session])
|
29
|
+
tree.delete(session) if tree[session].keys.length.zero?
|
30
|
+
else
|
31
|
+
tree.delete(session_query.first)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def leaves(session_query, tree = @tree)
|
36
|
+
if session_query.length.zero?
|
37
|
+
tree.inject([]) do |acc, (session, subtree)|
|
38
|
+
sub_leaves = leaves([], subtree)
|
39
|
+
if sub_leaves.empty?
|
40
|
+
acc << session
|
41
|
+
else
|
42
|
+
acc += sub_leaves
|
43
|
+
end
|
44
|
+
end
|
45
|
+
else
|
46
|
+
session = session_query.shift
|
47
|
+
leaves(session_query, tree[session])
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
data/lib/nerdinator.rb
ADDED
metadata
ADDED
@@ -0,0 +1,98 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: nerdinator
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- danreynolds
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-10-12 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ~>
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.13'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ~>
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.13'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ~>
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '10.0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ~>
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '10.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ~>
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '3.0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ~>
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '3.0'
|
55
|
+
description:
|
56
|
+
email:
|
57
|
+
- me@danreynolds.ca
|
58
|
+
executables:
|
59
|
+
- console
|
60
|
+
- nerdinator
|
61
|
+
- setup
|
62
|
+
extensions: []
|
63
|
+
extra_rdoc_files: []
|
64
|
+
files:
|
65
|
+
- lib/nerdinator/cli.rb
|
66
|
+
- lib/nerdinator/config.rb
|
67
|
+
- lib/nerdinator/session.rb
|
68
|
+
- lib/nerdinator/version.rb
|
69
|
+
- lib/nerdinator.rb
|
70
|
+
- bin/console
|
71
|
+
- bin/nerdinator
|
72
|
+
- bin/setup
|
73
|
+
homepage:
|
74
|
+
licenses:
|
75
|
+
- MIT
|
76
|
+
metadata:
|
77
|
+
allowed_push_host: 'TODO: Set to ''http://mygemserver.com'''
|
78
|
+
post_install_message:
|
79
|
+
rdoc_options: []
|
80
|
+
require_paths:
|
81
|
+
- lib
|
82
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
83
|
+
requirements:
|
84
|
+
- - '>='
|
85
|
+
- !ruby/object:Gem::Version
|
86
|
+
version: '0'
|
87
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
88
|
+
requirements:
|
89
|
+
- - '>='
|
90
|
+
- !ruby/object:Gem::Version
|
91
|
+
version: '0'
|
92
|
+
requirements: []
|
93
|
+
rubyforge_project:
|
94
|
+
rubygems_version: 2.0.14.1
|
95
|
+
signing_key:
|
96
|
+
specification_version: 4
|
97
|
+
summary: Aggregator for groupings of Tmuxinator sessions
|
98
|
+
test_files: []
|