workon 0.0.7 → 0.0.8

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/lib/workon.rb CHANGED
@@ -48,6 +48,6 @@ module Workon
48
48
 
49
49
  def self.config(args = [])
50
50
  load_configuration args unless args.empty?
51
- Workon::Configuration.instance.options
51
+ Workon::Configuration.instance
52
52
  end
53
53
  end
data/lib/workon/actor.rb CHANGED
@@ -7,22 +7,30 @@ module Workon
7
7
  end
8
8
 
9
9
  def self.before(actor = nil, other = nil)
10
- @before ||= {}
10
+ @before ||= Hash.new { [] }
11
11
 
12
12
  return @before if actor.nil?
13
13
  raise ArgumentError if other.nil?
14
14
 
15
- @before[other] = actor
15
+ @before[other] += [actor]
16
16
  end
17
17
 
18
18
  def self.ordered
19
19
  order ||= Workon::Actor::Base.subclasses.inject([]) do |memo, klass|
20
- finder = klass.name.split('::').last
21
- other = before[finder.to_sym]
22
- should_add = !Workon.config[:without].include?(finder) && !memo.include?(klass)
20
+ other = encompass klass
21
+ should_add = !Workon.config[:without].include?(klass.actor_name) && !memo.include?(klass)
23
22
 
24
- should_add ? memo + (other ? [other, klass] : [klass]) : memo
23
+ should_add ? memo + other : memo
25
24
  end
25
+
26
+ order
27
+ end
28
+
29
+ def self.encompass(klass)
30
+ finder = klass.actor_name.to_sym
31
+ _before = before[finder].map {|k| encompass k }
32
+
33
+ (_before + [klass]).flatten
26
34
  end
27
35
  end
28
36
  end
@@ -27,6 +27,10 @@ module Workon
27
27
  Workon::Actor.before self, other
28
28
  end
29
29
 
30
+ def self.actor_name
31
+ name.split('::').last
32
+ end
33
+
30
34
  def initialize(path)
31
35
  @path = path
32
36
  end
@@ -36,13 +40,11 @@ module Workon
36
40
  end
37
41
 
38
42
  def has_option?(key)
39
- key = key.to_sym
40
-
41
- !options[key].nil? && (options[key] || !options[key].empty?)
43
+ options.exists? key
42
44
  end
43
45
 
44
46
  def fetch_option(key, default = nil)
45
- has_option?(key) ? options[key] : default
47
+ options.fetch key, default
46
48
  end
47
49
 
48
50
  def project
@@ -1,12 +1,13 @@
1
1
  module Workon
2
2
  module Actor
3
3
  class Middleman < Base
4
+ before :WebBrowser
4
5
  option('--middleman', 'Start mm-server') { |v| options[:middleman] = true }
5
6
 
6
7
  def commit
7
8
  if fetch_option :middleman, false
8
- screen "mm-server"
9
- run "sleep 3 && open http://localhost:4567/"
9
+ port = fetch_option :port, 4567
10
+ screen "mm-server --port #{port}"
10
11
  end
11
12
  end
12
13
  end
@@ -1,6 +1,8 @@
1
1
  module Workon
2
2
  module Actor
3
3
  class Passenger < Base
4
+ before :WebBrowser
5
+
4
6
  def is_rack_app?
5
7
  !Dir['config.ru'].empty?
6
8
  end
@@ -10,7 +12,10 @@ module Workon
10
12
  end
11
13
 
12
14
  def commit
13
- screen "passenger start" if is_rack_app? && passenger_standalone_available?
15
+ if is_rack_app? && passenger_standalone_available?
16
+ port = fetch_option :port, 3000
17
+ screen "passenger start --port #{port}"
18
+ end
14
19
  end
15
20
  end
16
21
  end
@@ -2,10 +2,25 @@ module Workon
2
2
  module Actor
3
3
  class WebBrowser < Base
4
4
  option('--host HOST', 'Ping this host') { |v| options[:host] = v}
5
+ option('--port PORT', Integer, 'Use this port for Middleman/Passenger') { |v| options[:port] = v}
5
6
 
6
7
  def command
7
- host_name = fetch_option :host, %{#{project}.local}
8
- %{ping -q -c 1 -t 1 #{host_name} && open http://#{host_name}}
8
+ host_name = fetch_option :host, %{#{project}.local}
9
+ port_number = fetch_option :port, nil
10
+
11
+ command, qualified = port_number.nil? ? ping_test(host_name) : netstat_test(port_number)
12
+ %{#{command} && open http://#{qualified}}
13
+ end
14
+
15
+ private
16
+ def ping_test(host_name)
17
+ command = %{ping -q -c 1 -t 1 #{host_name}}
18
+ [ command, host_name ]
19
+ end
20
+
21
+ def netstat_test(port)
22
+ command = %{sleep 3 && netstat -na | egrep 'tcp4*6* +([0-9]+ +){2}(\\*|([0-9]+\\.)+[0-9]+)(:|\\.)#{port}'}
23
+ [ command, "localhost:#{port}" ]
9
24
  end
10
25
  end
11
26
  end
@@ -20,6 +20,34 @@ module Workon
20
20
  options[:project] = args.first unless args.empty?
21
21
  end
22
22
 
23
+ def exists?(key)
24
+ key = key.to_sym
25
+ !blank? options[key]
26
+ end
27
+
28
+ def set(key, value)
29
+ key = key.to_sym
30
+ options[key] = value
31
+ end
32
+
33
+ def fetch(key, default = nil)
34
+ key = key.to_sym
35
+
36
+ if !exists?(key) && !blank?(default)
37
+ set key, default
38
+ end
39
+
40
+ options[key]
41
+ end
42
+
43
+ def [](key)
44
+ fetch key
45
+ end
46
+
47
+ def []=(key, value)
48
+ set key, value
49
+ end
50
+
23
51
  def parser
24
52
  @parser ||= OptionParser.new do |o|
25
53
  o.banner = "Usage: #{File.basename($0)} [options] project"
@@ -84,5 +112,10 @@ module Workon
84
112
  STDERR.puts %(Could not save workon configuration to #{project_rc_path})
85
113
  end
86
114
  end
115
+
116
+ private
117
+ def blank?(object)
118
+ object.respond_to?(:empty?) ? object.empty? : !object
119
+ end
87
120
  end
88
121
  end
@@ -1,3 +1,3 @@
1
1
  module Workon
2
- VERSION = "0.0.7"
2
+ VERSION = "0.0.8"
3
3
  end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: workon
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.0.7
5
+ version: 0.0.8
6
6
  platform: ruby
7
7
  authors:
8
8
  - Mike Wyatt