rsm 0.1.beta4 → 0.1.rc1

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.
data/CHANGES.md CHANGED
@@ -1,3 +1,9 @@
1
+ # 0.1.rc1 / August 31, 2011
2
+
3
+ * Refactored tasks heirarchy
4
+ * Fixed class options in `Rsm::Base`
5
+ * Unicorn: added `start` and `stop` commands
6
+
1
7
  # 0.1.beta4 / August 31, 2011
2
8
 
3
9
  * `unicorn` command as method in `Runner`
data/README.md CHANGED
@@ -7,16 +7,12 @@ RSM created for make easier some actons on server like:
7
7
  * manipulation of files
8
8
  * running commands
9
9
 
10
- and other Rails application tasks.
11
-
12
10
  This version can:
13
11
 
14
12
  * create Nginx virtual server config from template
15
- * enable Nginx virtual server config
13
+ * automaticly enable Nginx virtual server config
16
14
  * clone from Git repo or download and unpack Rails application from TGZ or TBZ2 archive
17
- * set permission for Rails application
18
- * create Unicorn config from template
19
- * run unicorn server
15
+ * start and stop unicorn server
20
16
 
21
17
  Homepage
22
18
  --------
@@ -43,7 +39,13 @@ Install from RubyGems:
43
39
  Ussage
44
40
  -----
45
41
 
46
- Run `rsm -T` for details
42
+ List avalable tasks:
43
+
44
+ $ rsm -T
45
+
46
+ Help for certain task:
47
+
48
+ $ rsm help TASK
47
49
 
48
50
  Documentation
49
51
  -------------
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.beta4
1
+ 0.1.rc1
data/bin/rsm CHANGED
File without changes
data/lib/rsm/base.rb CHANGED
@@ -7,11 +7,16 @@ module Rsm
7
7
 
8
8
  argument :name
9
9
 
10
- class_option :apps_root, :defualt => "/var/www", :aliases => "-r", :desc => "Rails apps root (default: /var/www)"
11
- class_option :capistrano, :defualt => false, :aliases => "-c", :desc => "Application's Capistrano stage"
10
+ class_option :apps_root, :default => "/var/www", :aliases => "-r", :desc => "Rails apps root"
11
+ class_option :capistrano, :default => false, :aliases => "-c", :desc => "Application's Capistrano stage"
12
12
 
13
+
14
+ def self.template_path
15
+ Thor::Util.snake_case(name.to_s).squeeze(":").gsub(":", "/")
16
+ end
17
+
13
18
  def self.source_root
14
- File.expand_path('../../../templates', __FILE__)
19
+ File.expand_path("../../../templates/#{template_path}", __FILE__)
15
20
  end
16
21
 
17
22
  def application_root
data/lib/rsm/runner.rb CHANGED
@@ -1,5 +1,13 @@
1
+ require 'thor'
2
+ require 'thor/group'
3
+ require 'thor/util'
4
+
1
5
  module Rsm
6
+ class Error < Thor::Error; end
7
+
2
8
  class Runner < Thor
9
+ map '-T' => :list, '-v' => :version
10
+ #
3
11
  include Thor::Actions
4
12
 
5
13
  desc "version", "RSM gem version"
@@ -8,18 +16,119 @@ module Rsm
8
16
  say "RSM version #{Rsm::VERSION}"
9
17
  end
10
18
 
11
- register Rsm::Install::Nginx, "install:nginx", "install:nginx NAME", "Install Nginx config"
12
- register Rsm::Install::Rails, "install:rails", "install:rails NAME", "Install Rails application"
19
+ # If a task is not found on Thor::Runner, method missing is invoked and
20
+ # Thor::Runner is then responsable for finding the task in all classes.
21
+ #
22
+ def method_missing(meth, *args)
23
+ meth = meth.to_s
24
+ initialize_thorfiles(meth)
25
+ klass, task = Thor::Util.find_class_and_task_by_namespace(meth)
26
+ args.unshift(task) if task
27
+ klass.start(args, :shell => self.shell)
28
+ end
29
+
30
+ desc "list [SEARCH]", "List the available thor tasks (--substring means .*SEARCH)"
31
+ method_options :substring => :boolean, :group => :string, :all => :boolean, :debug => :boolean
32
+ def list(search="")
33
+ initialize_thorfiles
34
+
35
+ search = ".*#{search}" if options["substring"]
36
+ search = /^#{search}.*/i
37
+ group = options[:group] || "standard"
38
+
39
+ klasses = Thor::Base.subclasses.select do |k|
40
+ (options[:all] || k.group == group) && k.namespace =~ search
41
+ end
42
+
43
+ display_klasses(false, false, klasses)
44
+ end
45
+
46
+ # Override Thor#help so it can give information about any class and any method.
47
+ #
48
+ def help(meth = nil)
49
+ if meth && !self.respond_to?(meth)
50
+ initialize_thorfiles(meth)
51
+ klass, task = Thor::Util.find_class_and_task_by_namespace(meth)
52
+ klass.start(["-h", task].compact, :shell => self.shell)
53
+ else
54
+ super
55
+ end
56
+ end
57
+
58
+ private
13
59
 
14
- desc "install NAME", "Install Nginx config and Rails application"
15
- def install(name)
16
- invoke "install:nginx"
17
- invoke "install:rails"
60
+ def self.banner(task, all = false, subcommand = false)
61
+ "rsm " + task.formatted_usage(self, all, subcommand)
62
+ end
63
+
64
+ def thor_root
65
+ File.expand_path("../../tasks", __FILE__)
18
66
  end
67
+
68
+ def thorfiles(relevant_to=nil, skip_lookup=false)
69
+ Dir["#{thor_root}/**/*.rb"]
70
+ end
71
+
72
+ # Load the thorfiles. If relevant_to is supplied, looks for specific files
73
+ # in the thor_root instead of loading them all.
74
+ #
75
+ # By default, it also traverses the current path until find Thor files, as
76
+ # described in thorfiles. This look up can be skipped by suppliying
77
+ # skip_lookup true.
78
+ #
79
+ def initialize_thorfiles(relevant_to=nil, skip_lookup=false)
80
+ thorfiles(relevant_to, skip_lookup).each do |f|
81
+ require f unless Thor::Base.subclass_files.keys.include?(File.expand_path(f))
82
+ end
83
+ end
84
+
85
+ # Display information about the given klasses. If with_module is given,
86
+ # it shows a table with information extracted from the yaml file.
87
+ #
88
+ def display_klasses(with_modules=false, show_internal=false, klasses=Thor::Base.subclasses)
89
+ klasses -= [Thor, Thor::Group, Rsm::Runner, Rsm::Base] unless show_internal
90
+
91
+ raise Error, "No Thor tasks available" if klasses.empty?
92
+ # show_modules if with_modules && !thor_yaml.empty?
93
+
94
+ list = Hash.new { |h,k| h[k] = [] }
95
+ groups = klasses.select { |k| k.ancestors.include?(Thor::Group) }
96
+
97
+ # Get classes which inherit from Thor
98
+ (klasses - groups).each { |k| list[k.namespace.split(":").first] += k.printable_tasks(false) }
99
+
100
+ # Get classes which inherit from Thor::Base
101
+ groups.map! { |k| k.printable_tasks(false).first }
102
+ list["root"] = groups
103
+
104
+ # Order namespaces with default coming first
105
+ list = list.sort{ |a,b| a[0].sub(/^default/, '') <=> b[0].sub(/^default/, '') }
106
+ list.each { |n, tasks| display_tasks(n, tasks) unless tasks.empty? }
107
+ end
108
+
109
+ def display_tasks(namespace, list) #:nodoc:
110
+ list.sort!{ |a,b| a[0] <=> b[0] }
111
+
112
+ say shell.set_color(namespace, :blue, true)
113
+ say "-" * namespace.size
114
+
115
+ print_table(list, :truncate => true)
116
+ say
117
+ end
118
+
119
+ def show_modules #:nodoc:
120
+ info = []
121
+ labels = ["Modules", "Namespaces"]
122
+
123
+ info << labels
124
+ info << [ "-" * labels[0].size, "-" * labels[1].size ]
125
+
126
+ thor_yaml.each do |name, hash|
127
+ info << [ name, hash[:namespaces].join(", ") ]
128
+ end
19
129
 
20
- desc "unicorn NAME", "Run Unicorn server"
21
- def unicorn(name)
22
- invoke Rsm::Unicorn
130
+ print_table info
131
+ say ""
23
132
  end
24
133
  end
25
134
  end
data/lib/rsm.rb CHANGED
@@ -1,16 +1,5 @@
1
- require 'pathname'
2
- require 'thor'
3
- require 'thor/group'
4
- require 'thor/util'
5
-
6
1
  module Rsm
7
2
  autoload :Actions, 'rsm/actions'
8
3
  autoload :Runner, 'rsm/runner'
9
4
  autoload :Base, 'rsm/base'
10
- autoload :Unicorn, 'rsm/unicorn'
11
-
12
- module Install
13
- autoload :Nginx, 'rsm/install/nginx'
14
- autoload :Rails, 'rsm/install/rails'
15
- end
16
5
  end
@@ -0,0 +1,18 @@
1
+ module Rsm
2
+ module Unicorn
3
+ class Start < Rsm::Base
4
+ class_option :environment, :aliases => "-e", :default => "production"
5
+
6
+ def unicorn_rails
7
+ rvmrc = application_root.join(".rvmrc")
8
+ if rvmrc.exist?
9
+ ruby_cmd = File.new(rvmrc).readline.strip + " exec"
10
+ else
11
+ ruby_cmd = "#{Thor::Util.ruby_command} -S"
12
+ end
13
+ run "#{ruby_cmd} unicorn_rails -D -E #{options[:environment]} -c #{application_root.join("config", "unicorn.rb")}"
14
+ end
15
+
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,12 @@
1
+ module Rsm
2
+ module Unicorn
3
+ class Stop < Rsm::Base
4
+
5
+ def unicorn_rails
6
+ pidfile = application_root.join("tmp", "pids", "unicorn.pid")
7
+ run "kill $(cat #{pidfile})"
8
+ end
9
+
10
+ end
11
+ end
12
+ end
data/rsm.gemspec CHANGED
@@ -24,6 +24,5 @@ Gem::Specification.new do |s|
24
24
  s.requirements << 'A coreutils installed'
25
25
  s.requirements << 'A Git installed'
26
26
  s.requirements << 'A Nginx installed'
27
- s.requirements << 'You must have super-user access'
28
27
  s.add_dependency 'thor', '~> 0.14.6'
29
28
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rsm
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.beta4
4
+ version: 0.1.rc1
5
5
  prerelease: 4
6
6
  platform: ruby
7
7
  authors:
@@ -13,7 +13,7 @@ date: 2011-08-31 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: thor
16
- requirement: &82486100 !ruby/object:Gem::Requirement
16
+ requirement: &19351848 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,7 +21,7 @@ dependencies:
21
21
  version: 0.14.6
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *82486100
24
+ version_requirements: *19351848
25
25
  description: Thor tasks for rapid deployment new rails apps on server
26
26
  email: a.ulyanitsky@gmail.com
27
27
  executables:
@@ -43,14 +43,15 @@ files:
43
43
  - lib/rsm.rb
44
44
  - lib/rsm/actions.rb
45
45
  - lib/rsm/base.rb
46
- - lib/rsm/install/nginx.rb
47
- - lib/rsm/install/rails.rb
48
46
  - lib/rsm/runner.rb
49
- - lib/rsm/unicorn.rb
50
47
  - lib/rsm/version.rb
48
+ - lib/tasks/install/nginx.rb
49
+ - lib/tasks/install/rails.rb
50
+ - lib/tasks/unicorn/start.rb
51
+ - lib/tasks/unicorn/stop.rb
51
52
  - rsm.gemspec
52
- - templates/nginx-unicorn.conf.erb
53
- - templates/unicorn.rb.erb
53
+ - templates/rsm/install/nginx/nginx-unicorn.conf.erb
54
+ - templates/rsm/install/rails/unicorn.rb.erb
54
55
  homepage: https://github.com/asux/rsm
55
56
  licenses:
56
57
  - MIT
@@ -77,7 +78,6 @@ requirements:
77
78
  - A coreutils installed
78
79
  - A Git installed
79
80
  - A Nginx installed
80
- - You must have super-user access
81
81
  rubyforge_project:
82
82
  rubygems_version: 1.8.6
83
83
  signing_key:
data/lib/rsm/unicorn.rb DELETED
@@ -1,16 +0,0 @@
1
- module Rsm
2
- class Unicorn < Base
3
-
4
- class_option :environment, :aliases => "-e", :default => "production"
5
-
6
- def unicorn_rails
7
- rvmrc = application_root.join(".rvmrc")
8
- if rvmrc.exist?
9
- ruby_cmd = File.new(rvmrc).readline.strip + " exec"
10
- else
11
- ruby_cmd = "#{Thor::Util.ruby_command} -S"
12
- end
13
- run "#{ruby_cmd} unicorn_rails -D -E #{options[:environment]} -c #{application_root.join("config", "unicorn.rb")}"
14
- end
15
- end
16
- end
File without changes
File without changes