scatter_deploy 0.1.4 → 0.2.0

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: 6af75dd747591b2a9d664067d433790713a76ebe
4
- data.tar.gz: 5efbd7958b3e24468a613ab01fe2ea50ecc8407c
3
+ metadata.gz: 7bab3406e28bb818ffeb59f27b97313773833b01
4
+ data.tar.gz: 11cd3b6e94c18dc1e998cecc61c302e07f9a98dd
5
5
  SHA512:
6
- metadata.gz: 34b265d0a713f0f0be7efdfa051be30435412126905caa3a158b7557cb401e1b062f905bc0aa102a3630fe0ca066161649e420376c38fc20ddb220e22150d7a0
7
- data.tar.gz: eb12b87e636831e94d303ad6cbcf4d1b6678d3a50b217f5bb55b2b53df6a050176b077a5105b6d25570916372369802967d88a0f5dd0fdd5c82f453f2f13c0da
6
+ metadata.gz: 9c1ca71a24eceb70a5e25ce26282350329244a0896f94199a48c1235e4a7d33688ef00240298bee4fdff41fa91696334911ca755f10f9023a0a7e7d3e777a6b8
7
+ data.tar.gz: b65b6885d64853c74a23cd63d4dd50e4fc51be633c7c71eb51b01a57e3e2d4814a908c2dfe99866f0bbd8443dbaf3d29f3dede5ede471887a731f99df5b8a38c
data/README.md CHANGED
@@ -49,9 +49,40 @@ Let's you run arbitrary Capistrano commands, e.g. `scatter cap nginx:restart`.
49
49
 
50
50
  Let's you run arbitrary shell commands in the project-specific deploy directory, e.g. `scatter exec ls`.
51
51
 
52
+ ## Config
53
+
54
+ You can set default configuration options in `~/.scatterconfig` using YAML. Currently used settings are:
55
+
56
+ * `directory` (string): Sets your default deploys directory, acts like using the `--directory` flag without having to specify it each time.
57
+ * `aliases` (array): Aliases Scatter commands to other Scatter commands. For example, you could alias `scatter foo` to `scatter -p ~/code/foo -d ~/.foodeploys`. Aliases will *always* prepend `scatter` to the aliased command.
58
+
59
+ Scatter exposes `config` and `alias` commands to manage these settings. You can also manually edit `~/.scatterconfig`. Here's an example config file:
60
+
61
+ ```yml
62
+ ---
63
+ directory: /Users/evan/code/mydeploys
64
+ aliases:
65
+ wp: -s wp
66
+ rgem: -s gem
67
+ foo: -p ~/code/foo -d ~/code/foodeploys
68
+ ```
69
+
70
+ These settings could be achieved with these commands:
71
+
72
+ ```shell
73
+ scatter config directory ~/code/mydeploys
74
+ scatter alias wp "-s wp"
75
+ scatter alias gem "-s gem"
76
+ scatter alias foo "-p ~/code/foo -d ~/code/foodeploys"
77
+ ```
78
+
52
79
  ## Examples
53
80
 
54
81
  * `scatter`: Deploy the current project.
55
82
  * `scatter -p projectname`: Deploy the project in `./projectname`.
56
83
  * `scatter -p ~/projectname`: Deploy the project in your home directory's `projectname` directory.
57
84
  * `scatter -s wp`: Deploy the current project by calling `~/.deploys/__shared/wp` and passing your current Git repository's root as an argument.
85
+
86
+ ### WordPress
87
+
88
+ One of my use cases for Scatter is deploying WordPress plugins versioned with Git to WordPress.org, which uses Subversion. I wrote a post on how I use Scatter to do it: [Git, WordPress plugins, and a bit of sanity: Scatter](http://evansolomon.me/notes/git-wordpress-plugins-and-a-bit-of-sanity-scatter/).
data/lib/scatter/cli.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  require 'thor'
2
+ require 'scatter/config'
2
3
 
3
4
  module Scatter
4
5
  class CLI < Thor
@@ -6,7 +7,7 @@ module Scatter
6
7
  class_option :directory,
7
8
  :aliases => "-d",
8
9
  :type => :string,
9
- :default => "#{Dir.home}/.deploys",
10
+ :default => Config.get('directory'),
10
11
  :desc => "Specify a deploys directory."
11
12
 
12
13
  class_option :project,
@@ -41,7 +42,39 @@ module Scatter
41
42
  say Scatter::VERSION
42
43
  end
43
44
 
45
+ desc "alias FROM, TO", "Create an aliased Scatter command"
46
+ def alias(from, *to)
47
+ config = Config.get
48
+ config['aliases'] ||= {}
49
+ config['aliases'][from] = to.join ' '
50
+ Config.save config
51
+
52
+ say Config.show 'aliases'
53
+ end
54
+
55
+ desc "config SETTING, VALUE", "Set a default config option in ~/.scatterconfig"
56
+ method_option :show, :type => :boolean, :desc => "Show your current config settings"
57
+ def config(*args)
58
+ unless options.show
59
+ abort "Incorrect number of arguments" unless args.length == 2
60
+ setting = args.first
61
+ value = args.last
62
+ Config.set setting, value
63
+ end
64
+
65
+ say Config.show
66
+ end
67
+
44
68
  no_tasks do
69
+ # Process aliases
70
+ def method_missing(method, *args)
71
+ aliases = Config.get 'aliases'
72
+ _method = method.to_s
73
+
74
+ return super unless aliases.has_key?(_method) and aliases[_method].is_a?(String)
75
+ system "scatter #{aliases[_method]}"
76
+ end
77
+
45
78
  def git?
46
79
  unless system "which git >/dev/null 2>&1"
47
80
  abort "Scatter requires Git if you want it to find projects automatically"
@@ -74,11 +107,11 @@ module Scatter
74
107
  deploy = "#{project_deploy_dir}/deploy"
75
108
  return false unless File.exists? deploy
76
109
 
77
- if File.executable? deploy
78
- return true
79
- else
110
+ unless File.executable? deploy
80
111
  abort "It looks like you have a deploy file, but it's not executable. Try something like: chmod +x #{deploy}"
81
112
  end
113
+
114
+ return true
82
115
  end
83
116
 
84
117
  def generate_command
@@ -88,13 +121,8 @@ module Scatter
88
121
  end
89
122
 
90
123
  def run(command=nil)
91
- unless project_deploy_dir
92
- abort "No deploy directory found"
93
- end
94
-
95
- unless command ||= generate_command
96
- abort "No deploy command found"
97
- end
124
+ abort "No deploy directory found" unless project_deploy_dir
125
+ abort "No deploy command found" unless command ||= generate_command
98
126
 
99
127
  system "cd #{project_deploy_dir} && #{command}"
100
128
  end
@@ -0,0 +1,45 @@
1
+ require 'yaml'
2
+
3
+ module Scatter
4
+ class Config
5
+ CONFIG_FILE = "#{Dir.home}/.scatterconfig"
6
+ DEFAULTS = {'directory' => "#{Dir.home}/.deploys"}
7
+
8
+ def self.parse
9
+ return DEFAULTS unless File.exists? CONFIG_FILE
10
+
11
+ begin
12
+ return DEFAULTS.merge YAML.load(File.read CONFIG_FILE)
13
+ rescue
14
+ abort "There was a problem parsing #{CONFIG_FILE}, it should be valid YAML"
15
+ end
16
+ end
17
+
18
+ def self.get(key=nil)
19
+ config = self.parse
20
+ key ? config[key] : config
21
+ end
22
+
23
+ def self.save(options)
24
+ File.open(CONFIG_FILE, 'w') do |f|
25
+ f.write options.to_yaml
26
+ end
27
+ end
28
+
29
+ def self.set(key, value)
30
+ config = get
31
+ config[key] = value
32
+ save config
33
+ end
34
+
35
+ def self.show(key=nil)
36
+ if key
37
+ value = get[key]
38
+ else
39
+ value = get
40
+ end
41
+
42
+ value.to_yaml
43
+ end
44
+ end
45
+ end
data/lib/scatter.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  require 'scatter/cli'
2
2
 
3
3
  module Scatter
4
- VERSION = "0.1.4"
4
+ VERSION = "0.2.0"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: scatter_deploy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Evan Solomon
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-03-21 00:00:00.000000000 Z
11
+ date: 2013-03-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -50,6 +50,7 @@ files:
50
50
  - MIT-LICENSE
51
51
  - bin/scatter
52
52
  - lib/scatter/cli.rb
53
+ - lib/scatter/config.rb
53
54
  - lib/scatter.rb
54
55
  homepage: http://evansolomon.me/
55
56
  licenses: