muxify 0.1.11 → 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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: fb12f71a3e0a60ba30fbf33432d33ee0eab24a3a457f034e2531e13259a61569
4
- data.tar.gz: b239260fb12f6ae2a18d84fd70414498afa0d5960356eb8b945b1c0eb4b024b9
3
+ metadata.gz: 99b06fb29cb0313ee692a84da4cfa068931256fd8e19325c3431e45463d4ef76
4
+ data.tar.gz: ebfe044c5cd37f1f62574fd289a2ec0038ee56ab34f2eb14a80fe0ea6c704827
5
5
  SHA512:
6
- metadata.gz: cecb6e6a718f341c26d099e08b73c3c12763ce8619c84c7963472ea23c8957c8d8a2e31820b25a8d093400c20a74607a7ab365f9d6cf0f224930681f18510c13
7
- data.tar.gz: 9eb3f63e27cceb5c6a09b51a65c827fc2723a41066ae98018cec288d7edd48bcebb2bab3d890c6f60a09b3c4baead5a420f7ff5c21292f6135985e0fd1f9a79c
6
+ metadata.gz: 1fcf84278243026a0e7c9e5b80cb31924172f1ee3300da85641c174cf768f3183de26aa4c40aacfdf793049a47b4a5f8d5bd46a3a7cdf2b54607d12431628f3e
7
+ data.tar.gz: 97a6fceaf5887c62cae38a8919bdd35d43aa59ff1b0e5af0119e3ce953b9d665247fae166b9f289d8e39e79eddb0bc3f38b5fa57683c15abd2c39e77b69f351c
data/.travis.yml CHANGED
@@ -1,8 +1,8 @@
1
1
  ---
2
2
  language: ruby
3
3
  rvm:
4
- - 2.7
5
4
  - 3.0
5
+ - 3.1
6
6
  deploy:
7
7
  provider: rubygems
8
8
  on:
data/Gemfile CHANGED
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- source 'https://rubygems.org'
3
+ source "https://rubygems.org"
4
4
 
5
5
  # Specify your gem's dependencies in muxify.gemspec
6
6
  gemspec
data/README.md CHANGED
@@ -64,7 +64,9 @@ Depending on its type, this will create the following tmux windows for a project
64
64
 
65
65
  ## Customising projects
66
66
 
67
- To add a custom tmux window for a project:
67
+ Each project may have custom windows via a `.muxifyrc` file.
68
+
69
+ ### Using a .muxifyrc in your home directory
68
70
 
69
71
  1. Create a file called `~/.muxifyrc`.
70
72
  1. Edit it in YAML format; eg to add a tmux window to `my_app` project which is named `server` and invokes `yarn dev`:
@@ -75,6 +77,23 @@ my_app:
75
77
  server: yarn dev
76
78
  ```
77
79
 
80
+ If you want a custom window for all projects:
81
+
82
+ ```yaml
83
+ windows:
84
+ echo_all_projects: "echo 'this will apply to all projects'"
85
+ ```
86
+
87
+ ### Using a .muxifyrc in your project directory
88
+
89
+ 1. Create a file called `my_app/.muxifyrc` (given your project is in `my_app`).
90
+ 1. Edit it in YAML format; eg to add a tmux window to `my_app` project which is named `server` and invokes `yarn dev`:
91
+
92
+ ```yaml
93
+ windows:
94
+ server: yarn dev
95
+ ```
96
+
78
97
  ## Thanks
79
98
 
80
99
  - https://github.com/tmuxinator/tmuxinator
data/Rakefile CHANGED
@@ -1,10 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'bundler/gem_tasks'
4
- require 'rubocop/rake_task'
5
- require 'rspec/core/rake_task'
3
+ require "bundler/gem_tasks"
4
+ require "rspec/core/rake_task"
5
+ require "standard/rake"
6
6
 
7
- RuboCop::RakeTask.new
8
7
  RSpec::Core::RakeTask.new(:spec)
9
8
 
10
- task default: %i[rubocop spec]
9
+ task default: %i[standard spec]
@@ -1,20 +1,19 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'yaml'
3
+ require "yaml"
4
4
 
5
5
  module Muxify
6
6
  class Builder
7
- CUSTOM_CONFIG_PATH = File.join(ENV['HOME'], '.muxifyrc')
8
- private_constant :CUSTOM_CONFIG_PATH
7
+ DEFAULT_CUSTOM_CONFIG_PATH = File.join(ENV["HOME"], ".muxifyrc")
8
+ private_constant :DEFAULT_CUSTOM_CONFIG_PATH
9
9
 
10
- def self.call(*args)
11
- new(*args).to_yaml
10
+ def self.call(path, **kwargs)
11
+ new(path, **kwargs).to_yaml
12
12
  end
13
13
 
14
- def initialize(root, name: nil, custom_config_path: CUSTOM_CONFIG_PATH)
14
+ def initialize(root, name: nil)
15
15
  @root = File.expand_path(root)
16
16
  @name = name || File.basename(@root)
17
- @custom_config_path = custom_config_path
18
17
  end
19
18
 
20
19
  def to_yaml
@@ -23,37 +22,46 @@ module Muxify
23
22
 
24
23
  private
25
24
 
26
- attr_reader :root, :name, :custom_config_path
25
+ attr_reader :root, :name
27
26
 
28
27
  def config
29
28
  {
30
- 'name' => name,
31
- 'root' => root,
32
- 'windows' => windows,
29
+ "name" => name,
30
+ "root" => root,
31
+ "windows" => windows
33
32
  }
34
33
  end
35
34
 
36
35
  def windows
37
- Windows.new(root).all.tap do |windows|
36
+ windows = Windows.new(root).all.tap do |windows|
38
37
  custom_windows.each do |name, command|
39
38
  windows << {name => command}
40
39
  end
41
40
  end
41
+
42
+ windows
43
+ .each_with_object({}) { |window, result| result[window.keys.first] = window.values.first }
44
+ .each_with_object([]) { |(k, v), result| result << {k => v} }
42
45
  end
43
46
 
44
47
  def custom_windows
45
- return {} unless custom_config.key?('windows')
46
-
47
- YAML.load_file(custom_config_path).dig(name, 'windows') || {}
48
+ custom_config_paths.each_with_object({}) do |custom_config_path, result|
49
+ [
50
+ YAML.safe_load_file(custom_config_path)&.dig(name, "windows"),
51
+ YAML.safe_load_file(custom_config_path)&.dig("windows")
52
+ ].compact.each(&result.method(:merge!))
53
+ end
48
54
  end
49
55
 
50
- def custom_config
51
- return {} unless File.exist?(custom_config_path)
52
-
53
- yaml = YAML.load_file(custom_config_path)
54
- return {} unless yaml
56
+ def custom_config_paths
57
+ [
58
+ DEFAULT_CUSTOM_CONFIG_PATH,
59
+ project_custom_config_path,
60
+ ].compact.uniq.select(&File.method(:exist?))
61
+ end
55
62
 
56
- yaml.fetch(name, {})
63
+ def project_custom_config_path
64
+ File.join(root, ".muxifyrc")
57
65
  end
58
66
 
59
67
  class Windows
@@ -70,7 +78,7 @@ module Muxify
70
78
  *elixir_non_phoenix,
71
79
  *phoenix,
72
80
  *nodejs,
73
- *django,
81
+ *django
74
82
  ]
75
83
  end
76
84
 
@@ -79,28 +87,28 @@ module Muxify
79
87
  attr_reader :root
80
88
 
81
89
  def shell
82
- [{'shell' => init_shell}]
90
+ [{"shell" => init_shell}]
83
91
  end
84
92
 
85
93
  def init_shell
86
94
  return 'echo "Not a git repository."' unless git?
87
95
 
88
- 'git fetch; git status'
96
+ "git fetch; git status"
89
97
  end
90
98
 
91
99
  def git?
92
- directory?('.git')
100
+ system("git rev-parse &>/dev/null")
93
101
  end
94
102
 
95
103
  def editor
96
- [{'editor' => ENV.fetch('EDITOR', 'vim')}]
104
+ [{"editor" => ENV.fetch("EDITOR", "vim")}]
97
105
  end
98
106
 
99
107
  def logs
100
108
  return [] if logfiles.empty?
101
109
 
102
110
  logfiles.each(&method(:truncate_file))
103
- [{'logs' => 'tail -f log/*.log'}]
111
+ [{"logs" => "tail -f log/*.log"}]
104
112
  end
105
113
 
106
114
  def logfiles
@@ -115,67 +123,67 @@ module Muxify
115
123
  return [] unless rails?
116
124
 
117
125
  [
118
- {'db' => 'rails db'},
119
- {'console' => 'rails console'},
120
- {'server' => File.expand_path('../../bin/rails_server_with_puma_dev', __dir__)},
126
+ {"db" => "rails db"},
127
+ {"console" => "rails console"},
128
+ {"server" => File.join(Muxify.root, "bin/rails_server_with_puma_dev")},
121
129
  ]
122
130
  end
123
131
 
124
132
  def rails?
125
- exists?('bin/rails')
133
+ exists?("bin/rails")
126
134
  end
127
135
 
128
136
  def elixir_non_phoenix
129
137
  return [] unless elixir_non_phoenix?
130
138
 
131
139
  [
132
- {'console' => 'iex -S mix'},
133
- {'server' => 'mix'},
140
+ {"console" => "iex -S mix"},
141
+ {"server" => "mix"}
134
142
  ]
135
143
  end
136
144
 
137
145
  def elixir_non_phoenix?
138
- exists?('mix.exs') && !phoenix?
146
+ exists?("mix.exs") && !phoenix?
139
147
  end
140
148
 
141
149
  def phoenix
142
150
  return [] unless phoenix?
143
151
 
144
152
  [
145
- {'console' => 'iex -S mix phx.server'},
146
- {'server' => 'mix phx.server'},
153
+ {"console" => "iex -S mix phx.server"},
154
+ {"server" => "mix phx.server"}
147
155
  ]
148
156
  end
149
157
 
150
158
  def phoenix?
151
- directory?('deps/phoenix')
159
+ directory?("deps/phoenix")
152
160
  end
153
161
 
154
162
  def nodejs
155
163
  return [] unless nodejs?
156
164
 
157
165
  [
158
- {'console' => 'node'},
166
+ {"console" => "node"}
159
167
  ]
160
168
  end
161
169
 
162
170
  def nodejs?
163
- exists?('package.json') && !rails?
171
+ exists?("package.json") && !rails?
164
172
  end
165
173
 
166
174
  def django
167
175
  return [] unless django?
168
176
 
169
177
  [
170
- {'db' => 'python manage.py dbshell'},
171
- {'console' => 'python manage.py shell'},
172
- {'server' => 'python manage.py runserver'},
178
+ {"db" => "python manage.py dbshell"},
179
+ {"console" => "python manage.py shell"},
180
+ {"server" => "python manage.py runserver"}
173
181
  ]
174
182
  end
175
183
 
176
184
  def django?
177
- python_requirements = File.join(root, 'requirements.txt')
178
- File.exist?(python_requirements) && File.read(python_requirements).include?('django')
185
+ python_requirements = File.join(root, "requirements.txt")
186
+ File.exist?(python_requirements) && File.read(python_requirements).include?("django")
179
187
  end
180
188
 
181
189
  def directory?(relative_path)
data/lib/muxify/cli.rb CHANGED
@@ -1,27 +1,27 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'thor'
4
- require 'muxify/builder'
5
- require 'muxify/linker'
3
+ require "thor"
4
+ require "muxify/builder"
5
+ require "muxify/linker"
6
6
 
7
7
  module Muxify
8
8
  class CLI < Thor
9
- desc 'add', 'Adds tmuxinator config for current (or supplied) path'
9
+ desc "add", "Adds tmuxinator config for current (or supplied) path"
10
10
  def add(root = Dir.pwd)
11
11
  Muxify::Linker.call(root: root)
12
12
  end
13
13
 
14
- desc 'debug', 'Prints tmuxinator config of current (or supplied) path to stdout'
14
+ desc "debug", "Prints tmuxinator config of current (or supplied) path to stdout"
15
15
  def debug(root = Dir.pwd)
16
16
  puts Muxify::Builder.call(root)
17
17
  end
18
18
 
19
- desc 'stop', 'Kills tmux session'
19
+ desc "stop", "Kills tmux session"
20
20
  def stop(name = File.basename(Dir.pwd))
21
21
  Kernel.system("tmux kill-session -t #{name}")
22
22
  end
23
23
 
24
- desc 'version', 'Print current version'
24
+ desc "version", "Print current version"
25
25
  def version
26
26
  puts Muxify::VERSION
27
27
  end
data/lib/muxify/linker.rb CHANGED
@@ -1,10 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'fileutils'
3
+ require "fileutils"
4
4
 
5
5
  module Muxify
6
6
  class Linker
7
- TMUXINATOR_CONFIG_PATH = File.expand_path(File.join(ENV.fetch('HOME'), '.tmuxinator')).freeze
7
+ TMUXINATOR_CONFIG_PATH = File.expand_path(File.join(ENV.fetch("HOME"), ".tmuxinator")).freeze
8
8
  private_constant :TMUXINATOR_CONFIG_PATH
9
9
 
10
10
  def self.call(**args)
@@ -17,7 +17,7 @@ module Muxify
17
17
 
18
18
  def call
19
19
  FileUtils.mkdir_p(TMUXINATOR_CONFIG_PATH)
20
- File.open(config_path, 'w') { |f| f << contents }
20
+ File.open(config_path, "w") { |f| f << contents }
21
21
  end
22
22
 
23
23
  private
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Muxify
4
- VERSION = '0.1.11'
4
+ VERSION = "0.2.0"
5
5
  end
data/lib/muxify.rb CHANGED
@@ -1,4 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'muxify/cli'
4
- require 'muxify/version'
3
+ require "muxify/cli"
4
+ require "muxify/version"
5
+
6
+ module Muxify
7
+ def self.root
8
+ File.expand_path("..", __dir__)
9
+ end
10
+ end
data/muxify.gemspec CHANGED
@@ -1,31 +1,31 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- lib = File.expand_path('lib', __dir__)
3
+ lib = File.expand_path("lib", __dir__)
4
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
- require 'muxify/version'
5
+ require "muxify/version"
6
6
 
7
7
  Gem::Specification.new do |spec|
8
- spec.name = 'muxify'
9
- spec.version = Muxify::VERSION
10
- spec.authors = ['Zubin Henner']
11
- spec.email = ['zubin@users.noreply.github.com']
8
+ spec.name = "muxify"
9
+ spec.version = Muxify::VERSION
10
+ spec.authors = ["Zubin Henner"]
11
+ spec.email = ["zubin@users.noreply.github.com"]
12
12
 
13
- spec.summary = 'Simple tmux project config'
14
- spec.homepage = 'https://github.com/zubin/muxify'
13
+ spec.summary = "Simple tmux project config"
14
+ spec.homepage = "https://github.com/zubin/muxify"
15
15
 
16
- spec.files = `git ls-files -z`.split("\x0").reject do |f|
16
+ spec.files = `git ls-files -z`.split("\x0").reject do |f|
17
17
  f.match(%r{^(test|spec|features)/})
18
18
  end
19
- spec.bindir = 'bin'
20
- spec.executables = ['muxify']
21
- spec.require_paths = ['lib']
22
- spec.required_ruby_version = '>= 2.7.0'
19
+ spec.bindir = "bin"
20
+ spec.executables = ["muxify"]
21
+ spec.require_paths = ["lib"]
22
+ spec.required_ruby_version = ">= 3.0.0"
23
23
 
24
- spec.add_dependency 'thor'
25
- spec.add_dependency 'tmuxinator'
24
+ spec.add_dependency "thor"
25
+ spec.add_dependency "tmuxinator"
26
26
 
27
- spec.add_development_dependency 'bundler'
28
- spec.add_development_dependency 'rake'
29
- spec.add_development_dependency 'rspec'
30
- spec.add_development_dependency 'rubocop'
27
+ spec.add_development_dependency "bundler"
28
+ spec.add_development_dependency "rake"
29
+ spec.add_development_dependency "rspec"
30
+ spec.add_development_dependency "standard"
31
31
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: muxify
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.11
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Zubin Henner
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-06-11 00:00:00.000000000 Z
11
+ date: 2023-03-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -81,7 +81,7 @@ dependencies:
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
83
  - !ruby/object:Gem::Dependency
84
- name: rubocop
84
+ name: standard
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - ">="
@@ -94,7 +94,7 @@ dependencies:
94
94
  - - ">="
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
- description:
97
+ description:
98
98
  email:
99
99
  - zubin@users.noreply.github.com
100
100
  executables:
@@ -104,7 +104,6 @@ extra_rdoc_files: []
104
104
  files:
105
105
  - ".gitignore"
106
106
  - ".rspec"
107
- - ".rubocop.yml"
108
107
  - ".travis.yml"
109
108
  - Gemfile
110
109
  - README.md
@@ -125,7 +124,7 @@ files:
125
124
  homepage: https://github.com/zubin/muxify
126
125
  licenses: []
127
126
  metadata: {}
128
- post_install_message:
127
+ post_install_message:
129
128
  rdoc_options: []
130
129
  require_paths:
131
130
  - lib
@@ -133,15 +132,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
133
132
  requirements:
134
133
  - - ">="
135
134
  - !ruby/object:Gem::Version
136
- version: 2.7.0
135
+ version: 3.0.0
137
136
  required_rubygems_version: !ruby/object:Gem::Requirement
138
137
  requirements:
139
138
  - - ">="
140
139
  - !ruby/object:Gem::Version
141
140
  version: '0'
142
141
  requirements: []
143
- rubygems_version: 3.0.8
144
- signing_key:
142
+ rubygems_version: 3.3.7
143
+ signing_key:
145
144
  specification_version: 4
146
145
  summary: Simple tmux project config
147
146
  test_files: []
data/.rubocop.yml DELETED
@@ -1,15 +0,0 @@
1
- ---
2
- Layout/SpaceInsideArrayLiteralBrackets:
3
- EnforcedStyle: no_space
4
- Layout/SpaceInsideHashLiteralBraces:
5
- EnforcedStyle: no_space
6
- Style/Documentation:
7
- Enabled: false
8
- Style/StringLiterals:
9
- Enabled: false
10
- Style/TrailingCommaInArguments:
11
- EnforcedStyleForMultiline: comma
12
- Style/TrailingCommaInArrayLiteral:
13
- EnforcedStyleForMultiline: comma
14
- Style/TrailingCommaInHashLiteral:
15
- EnforcedStyleForMultiline: comma