guard-combustion 0.1.1 → 1.0.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: 29e25af5ba5e505b6ec2402a10fa2ecbda39a49c
4
- data.tar.gz: 9789486bf45c5e349ee3a64ea24e85c4afec018e
3
+ metadata.gz: fa81a552ad020ab25bdf5848cfdf3f0a570c60a9
4
+ data.tar.gz: c0af917e393b7133b313ce49cdf66879f37dbee1
5
5
  SHA512:
6
- metadata.gz: 574efb532093a8f57edc146487168971089498965b9cddab9afef21cbdb52267864702bd660a996b6c87748df0f1ff0b62b0fac4b78220c4cbae849cc84833de
7
- data.tar.gz: e1948770da602a40fff110178ab95b5f1642a2bf4db3146d7e25a56196f9d54ea71f6e5b68bd1c8788293078715f06fdae564646a944e40cd1e1f22f9e560b78
6
+ metadata.gz: bbe00e633279bbb26c8d24e02566874ec11f4d13cf7deaee39480616bb9ab2e2a23646273e90895ee5ae7505c77250a7da82c4e98e8c5d61d8e8c5c8cbde37c5
7
+ data.tar.gz: bb5bc2580e258362d3c79d0141795e5b63c44873b1316f0b40b6b41437dcfe4d5b706b845ccf11e69223e444c25d5f8de75bd9c94b5c6f6cb13eebdc6d4fa703
data/README.md CHANGED
@@ -12,7 +12,7 @@ Install the gem with:
12
12
 
13
13
  Or add it to your Gemfile:
14
14
 
15
- gem "guard-combustion", "~> 0.1.1"
15
+ gem "guard-combustion", "~> 1.0.0"
16
16
 
17
17
  And then add a basic setup to your Guardfile:
18
18
 
@@ -20,14 +20,63 @@ And then add a basic setup to your Guardfile:
20
20
 
21
21
  ## Configuration
22
22
 
23
- ### Combustion port
23
+ ### Options
24
24
 
25
- Combustion listens on the port 9292 by default.
26
- You can choose another port (e.g. 3000) modifying (or creating) the file `/path/to/your/engine/.guard_combustion_port`
25
+ You can use some options to configure guard-combustion from the Guardfile.
27
26
 
28
- 3001
27
+ #### Port
29
28
 
30
- If ".guard_combustion_port" doesn't exists, it will be generated and configured with the default port at the first use of guard-combustion.
29
+ Combustion listens by default on the port 9292. To change the port, use the `:port` option. E.g.
30
+
31
+ ```ruby
32
+ guard :combustion, port: 3000 do
33
+ watch(%r{^(app|config|lib|spec)/(.*)})
34
+ end
35
+ ```
36
+
37
+ #### Pid File
38
+
39
+ Guard::Combustion saves the PID of Combustion into a file when it has been just created, and deletes it when Combustion stops.
40
+
41
+ By default, the pid file is `./tmp/.combustion_pid`, but if you want to change the path, you can set the `:pid_file` option (make sure that the path already exists, or create the required directories).
42
+
43
+ ```ruby
44
+ guard :combustion, pid_file: './my_dir/my_new_pid_file.example' do
45
+ watch(%r{^(app|config|lib|spec)/(.*)})
46
+ end
47
+ ```
48
+
49
+ #### Colors
50
+
51
+ If you want to turn off the colored prints, set the `:color` option to `false`
52
+
53
+ ```ruby
54
+ guard :combustion, color: false do
55
+ watch(%r{^(app|config|lib|spec)/(.*)})
56
+ end
57
+ ```
58
+
59
+ #### Custom Port File
60
+
61
+ The `:port` option mentioned above is a perfect solution if you are working alone, or with people that all want to use the same listening port.
62
+
63
+ But... what if you want to use a different port from your team mates?
64
+
65
+ No worries: you can set your custom port by writing it (and only it!) into the file `.guard_combustion_port` at the root of your project. This file has major priority than the port set into the Guardfile.
66
+
67
+ .guard_combustion_port file: E.g.
68
+
69
+ 8080
70
+
71
+ If you add `.guard_combustion_port` to the `.gitignore` file, your team mates won't even notice the difference.
72
+
73
+ If you don't like to add files at the root of your project, you can also change the custom port file, setting the `:custom_port_file` option.
74
+
75
+ ```ruby
76
+ guard :combustion, custom_port_file: "my_new_custom_port_file.example" do
77
+ watch(%r{^(app|config|lib|spec)/(.*)})
78
+ end
79
+ ```
31
80
 
32
81
  ### Integration with guard-rspec (or any other guard)
33
82
 
@@ -37,9 +86,11 @@ to avoid conflicts with the instance of Combustion created by Rspec.
37
86
 
38
87
  For doing that, you have to add theese lines into the `guard :rspec` block
39
88
 
40
- callback(:run_all_begin) { CombustionHelper.stop_combustion }
41
- callback(:run_on_modifications_begin) { CombustionHelper.stop_combustion }
42
- callback(:run_all_end) { CombustionHelper.start_combustion }
43
- callback(:run_on_modifications_end) { CombustionHelper.start_combustion }
89
+ ```ruby
90
+ callback(:run_all_begin) { Guard::CombustionHelper.stop_combustion }
91
+ callback(:run_on_modifications_begin) { Guard::CombustionHelper.stop_combustion }
92
+ callback(:run_all_end) { Guard::CombustionHelper.start_combustion }
93
+ callback(:run_on_modifications_end) { Guard::CombustionHelper.start_combustion }
94
+ ```
44
95
 
45
96
  For more informations about callbacks, see https://github.com/guard/guard/wiki/Hooks-and-callbacks
@@ -1,12 +1,29 @@
1
1
  require 'guard'
2
- require 'guard/guard'
2
+ require 'guard/plugin'
3
3
  require 'guard/combustion/version'
4
4
  require 'guard/combustion/combustion_helper'
5
5
 
6
+ #
7
+ # The guard module
8
+ #
9
+ # @author [chosko]
10
+ #
6
11
  module Guard
7
- class Combustion < Guard
8
-
12
+
13
+ #
14
+ # The Guard::Combustion class
15
+ #
16
+ # @author [chosko]
17
+ #
18
+ class Combustion < Plugin
19
+
20
+ def initialize (options = {})
21
+ super
22
+ CombustionHelper.set_options(options)
23
+ end
24
+
9
25
  def start
26
+ ::Guard::UI.info "Guard::Combustion is running"
10
27
  CombustionHelper.start_combustion
11
28
  end
12
29
 
@@ -1,129 +1,196 @@
1
- #
2
- # This class contains some useful functions to automatically manage the interaction between combustion and guard.
3
- #
4
- class CombustionHelper
1
+ module Guard
2
+ #
3
+ # This class contains some useful functions to automatically manage the interaction between combustion and guard.
4
+ #
5
+ # @author [chosko]
6
+ #
7
+ class CombustionHelper
5
8
 
6
- @@default_port = 9292
7
- @@last_start = Time.now - 5
8
- @@combustion_pid_file = "./tmp/.combustion_pid"
9
- @@guard_combustion_port = ".guard_combustion_port"
9
+ #
10
+ # Default options
11
+ #
12
+ DEFAULTS = {
13
+ # The listening port of combustion
14
+ port: 9292,
15
+
16
+ # The file where is stored the pid of combustion
17
+ pid_file: "./tmp/.combustion_pid",
18
+
19
+ # The file where is stored the port used by combustion
20
+ custom_port_file: ".guard_combustion_port",
21
+
22
+ # Coloured prints
23
+ colors: true
24
+ }.freeze
25
+
26
+ #
27
+ # The options for combustion
28
+ #
29
+ @@options = DEFAULTS
10
30
 
11
- class << self
12
31
  #
13
- # Start combustion
32
+ # This variable records the last time that combustion was started
14
33
  #
15
- def start_combustion
16
- if get_combustion_pid.nil?
17
- puts "starting combustion..."
18
- combustion_port = get_guard_combustion_port
19
- `#{combustion_cmd(combustion_port)}`
20
- sleep(1)
21
- @@last_start = Time.now
34
+ @@last_start = Time.now - 5
35
+
36
+ class << self
37
+ #
38
+ # Set the options for combustion
39
+ #
40
+ def set_options(options = {})
41
+ @@options = _deep_merge(DEFAULTS, options)
42
+ end
43
+
44
+ #
45
+ # Start combustion
46
+ #
47
+ def start_combustion
22
48
  pid = get_combustion_pid
23
49
  if pid.nil?
24
- puts "\033[22;31msomething went wrong, likely combustion was not started\x1b[0m"
50
+ ::Guard::UI.info "Starting combustion..."
51
+ combustion_port = get_guard_combustion_port
52
+ `#{combustion_cmd(combustion_port)}`
53
+ sleep(1)
54
+ @@last_start = Time.now
55
+ pid = get_combustion_pid
56
+ if pid.nil?
57
+ ::Guard::UI.error "Something went wrong, likely Combustion was not started"
58
+ else
59
+ ::Guard::UI.info strcolor("Combustion started with pid #{pid} and listening on port #{combustion_port}", "green")
60
+ end
25
61
  else
26
- puts "\033[22;32mcombustion started with pid #{pid} and listening on port #{combustion_port}\x1b[0m"
62
+ ::Guard::UI.warning "Another instance of Combustion is already running with pid #{pid}"
63
+ restart_combustion
27
64
  end
28
- else
29
- puts "another instance of combustion is already running with pid #{pid}"
30
- restart_combustion
31
65
  end
32
- end
33
66
 
34
- #
35
- # Stop combustion
36
- #
37
- def stop_combustion
38
- puts "stopping combustion..."
39
- pid = get_combustion_pid
40
- if pid.nil?
41
- puts "no instances of combustion were found"
42
- else
43
- `kill -9 #{pid}`
44
- puts "\033[22;31mcombustion stopped\x1b[0m"
45
- delete_combustion_pid
67
+ #
68
+ # Stop combustion
69
+ #
70
+ def stop_combustion
71
+ ::Guard::UI.info "Stopping combustion..."
72
+ pid = get_combustion_pid
73
+ if pid.nil?
74
+ ::Guard::UI.warning "No instances of combustion were found"
75
+ else
76
+ `kill -9 #{pid}`
77
+ ::Guard::UI.info strcolor("Combustion stopped", "red")
78
+ delete_combustion_pid
79
+ end
46
80
  end
47
- end
48
81
 
49
- #
50
- # Restart combustion
51
- #
52
- def restart_combustion
53
- if Time.now > @@last_start + 1 # Check if the server started less than a second ago
54
- puts "\033[01;33mrestarting combustion...\x1b[0m"
55
- stop_combustion
56
- start_combustion
82
+ #
83
+ # Restart combustion
84
+ #
85
+ def restart_combustion
86
+ if Time.now > @@last_start + 1 # Check if the server started less than a second ago
87
+ ::Guard::UI.info "Restarting combustion..."
88
+ stop_combustion
89
+ start_combustion
90
+ end
57
91
  end
58
- end
59
92
 
60
- private
93
+ private
61
94
 
62
- #
63
- # Write the port that will be used by combustion into .guard_combustion_port
64
- #
65
- def set_guard_combustion_port
66
- file = File.open(@@guard_combustion_port, "w")
67
- file.write(@@default_port.to_s)
68
- file.close
69
- @@default_port
70
- end
71
95
 
72
- #
73
- # Read the port from .guard_combustion_port
74
- # If .guard_combustion_port doesn't exists, create it and fill it with the default port.
75
- #
76
- def get_guard_combustion_port
77
- begin
78
- if File.exists? @@guard_combustion_port
79
- file = File.open(@@guard_combustion_port, "r")
80
- contents = file.read
81
- combustion_port = Integer(contents.split("\n")[0])
82
- file.close
83
- combustion_port
96
+ #
97
+ # Make a string colored
98
+ # @param string [String] The string to make colored
99
+ # @param color=nil [String] The name of the color (e.g. 'yellow')
100
+ #
101
+ # @return [String] the input string colored
102
+ def strcolor(string, color=nil)
103
+ return string if !@@options[:colors] || color.nil?
104
+
105
+ case color
106
+ when "green"
107
+ "\033[22;32m#{string}\x1b[0m"
108
+ when "red"
109
+ "\033[22;31m#{string}\x1b[0m"
110
+ when "yellow"
111
+ "\033[01;33m#{string}\x1b[0m"
84
112
  else
85
- set_guard_combustion_port
113
+ string
86
114
  end
87
- rescue ArgumentError => e
88
- file.close
89
- set_guard_combustion_port
90
115
  end
91
- end
92
116
 
93
- #
94
- # Read combustion's pid from .combustion_pid
95
- #
96
- def get_combustion_pid
97
- begin
98
- if File.exists? @@combustion_pid_file
99
- file = File.open(@@combustion_pid_file, "r")
100
- contents = file.read
101
- combustion_pid = Integer(contents.split("\n")[0])
117
+ #
118
+ # Recursively merge two hashes, with major priority for the second hash
119
+ # @param hash1 [Hash] The first hash
120
+ # @param hash2 [Hash] The second hash
121
+ #
122
+ # @return [Hash] The merged hash
123
+ def _deep_merge(hash1, hash2)
124
+ hash1.merge(hash2) do |key, oldval, newval|
125
+ if oldval.instance_of?(Hash) && newval.instance_of?(Hash)
126
+ _deep_merge(oldval, newval)
127
+ else
128
+ newval
129
+ end
130
+ end
131
+ end
132
+
133
+ #
134
+ # Read the port from .guard_combustion_port, if the file exists.
135
+ #
136
+ # Else, use the port configured by option, or the default port.
137
+ #
138
+ def get_guard_combustion_port
139
+ begin
140
+ if File.exists? @@options[:custom_port_file]
141
+ file = File.open(@@options[:custom_port_file], "r")
142
+ contents = file.read
143
+ combustion_port = Integer(contents.split("\n")[0])
144
+ file.close
145
+ ::Guard::UI.info "Custom port configuration file detected at #{@@options[:custom_port_file]} - Using port #{combustion_port} instead of #{@@options[:port]}."
146
+ ::Guard::UI.info "If you want to use the port defined into the Guardfile, please remove #{@@options[:custom_port_file]}"
147
+ combustion_port
148
+ else
149
+ @@options[:port]
150
+ end
151
+ rescue ArgumentError => e
152
+ file.close
153
+ ::Guard::UI.error "Failed to load custom port from " + @@options[:custom_port_file] + ", because it contains non-integer value."
154
+ ::Guard::UI.warning "Using the default port: " + @@options[:port].to_s
155
+ @@options[:port]
156
+ end
157
+ end
158
+
159
+ #
160
+ # Read combustion's pid from .combustion_pid
161
+ #
162
+ def get_combustion_pid
163
+ begin
164
+ if File.exists? @@options[:pid_file]
165
+ file = File.open(@@options[:pid_file], "r")
166
+ contents = file.read
167
+ combustion_pid = Integer(contents.split("\n")[0])
168
+ file.close
169
+ combustion_pid
170
+ else
171
+ nil
172
+ end
173
+ rescue ArgumentError => e
102
174
  file.close
103
- combustion_pid
104
- else
105
175
  nil
106
176
  end
107
- rescue ArgumentError => e
108
- file.close
109
- nil
110
177
  end
111
- end
112
178
 
113
- #
114
- # Delete .combustion_pid
115
- #
116
- def delete_combustion_pid
117
- if File.exists? @@combustion_pid_file
118
- File.delete(@@combustion_pid_file)
179
+ #
180
+ # Delete .combustion_pid
181
+ #
182
+ def delete_combustion_pid
183
+ if File.exists? @@options[:pid_file]
184
+ File.delete(@@options[:pid_file])
185
+ end
119
186
  end
120
- end
121
187
 
122
- #
123
- # Return a string with the shell command used for starting combustion
124
- #
125
- def combustion_cmd combustion_port
126
- "rackup -p #{combustion_port} -D -P #{@@combustion_pid_file}"
188
+ #
189
+ # Return a string with the shell command used for starting combustion
190
+ #
191
+ def combustion_cmd combustion_port
192
+ "rackup -p #{combustion_port} -D -P #{@@options[:pid_file]}"
193
+ end
127
194
  end
128
195
  end
129
196
  end
@@ -1,5 +1,5 @@
1
1
  module Guard
2
2
  module CombustionVersion
3
- VERSION = '0.1.1'
3
+ VERSION = '1.0.0'
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: guard-combustion
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ruben Caliandro
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-01-10 00:00:00.000000000 Z
11
+ date: 2014-01-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: guard
@@ -63,3 +63,4 @@ signing_key:
63
63
  specification_version: 4
64
64
  summary: Guard gem for running Combustion
65
65
  test_files: []
66
+ has_rdoc: