phare 0.4 → 0.5

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: 5e4055ee6e95ae9be4856e7031220de6735136a4
4
- data.tar.gz: 03a9678f15427a0affb3e76faaeb6694fb2d9775
3
+ metadata.gz: b1d1e596a5d40fef1d29fa89cd662336f7fd45e7
4
+ data.tar.gz: 81dddc44763f470efd54222f21b72f48251be8fa
5
5
  SHA512:
6
- metadata.gz: 83ee6107f5879b34f1da3a9554d96f2bdaccc982bb12f9d768f359d8b6809dae1f048acd3e76ac56584a4790b50e6b475d76e071d9b6e36ccc3c529bd0ffbafb
7
- data.tar.gz: 838988f8a43ba902060c4c4b8036228d946fd80d4337bacbe6879bb6369519c354f47140c7feb0031829cfd3d5797da72e5de932f7fb26b265459231e75a35e8
6
+ metadata.gz: ce38e47371b89624a02538c0cca7a08ab1b15874f6fc566f2450f8e992a2e5ca3943b883a4771f60f4d8dbf6a36479fa1cc86e4790b59afe2ff2298912958b18
7
+ data.tar.gz: 073eeb502d9612627efedf47a559ded08803378b3c72235819d0fce5e2e245afa6ff89cedf8768db12219a9413b76ccdcc21d95938b50286790e57dac88e5ad1
data/README.md CHANGED
@@ -3,9 +3,10 @@
3
3
  <img src="http://i.imgur.com/9Pa2RgE.png" alt="Phare" />
4
4
  </a>
5
5
  <br />
6
- Phare looks into your files and check for coding style errors.
6
+ Phare looks into your files and check for coding style errors.
7
7
  <br /><br />
8
8
  <a href="https://rubygems.org/gems/phare"><img src="https://badge.fury.io/rb/phare.png" /></a>
9
+ <a href="https://travis-ci.org/mirego/phare"><img src="https://travis-ci.org/mirego/phare.png?branch=master" /></a>
9
10
  </p>
10
11
 
11
12
  ## Installation
@@ -36,13 +37,18 @@ Phare provides an executable named `phare`. You can just use it as is:
36
37
  $ phare
37
38
  ```
38
39
 
39
- One of the best way to use Phare is by hooking it before your version control commits. For example, with `git`:
40
+ One of the best ways to use Phare is by hooking it to your version control commit process. For example, with `git`:
40
41
 
41
42
  ```bash
42
43
  $ bundle binstubs phare
43
44
  $ ln -s "`pwd`/bin/phare" .git/hooks/pre-commit
44
45
  ```
45
46
 
47
+ ## Contributors
48
+
49
+ * [@remiprev](https://github.com/remiprev)
50
+ * [@garno](https://github.com/garno)
51
+
46
52
  ## License
47
53
 
48
54
  `Phare` is © 2014 [Mirego](http://www.mirego.com) and may be freely distributed under the [New BSD license](http://opensource.org/licenses/BSD-3-Clause). See the [`LICENSE.md`](https://github.com/mirego/phare/blob/master/LICENSE.md) file.
data/lib/phare/check.rb CHANGED
@@ -20,6 +20,33 @@ module Phare
20
20
  end
21
21
  end
22
22
 
23
+ def tree_changed?
24
+ @options[:diff] && tree_changes && tree_changes.any?
25
+ end
26
+
27
+ def tree_changes
28
+ @modified_files ||= Phare.system_output('git status -s').split("\n").reduce([]) do |memo, diff|
29
+ filename = diff.split(' ').last
30
+
31
+ memo << filename if @extensions.include?(File.extname(filename))
32
+ memo
33
+ end
34
+ end
35
+
36
+ def should_run?
37
+ should_run = binary_exists?
38
+
39
+ [:configuration_exists?, :arguments_exists?].each do |condition|
40
+ should_run = should_run && send(condition) if respond_to?(condition, true)
41
+ end
42
+
43
+ if @options[:diff]
44
+ should_run = should_run && tree_changed?
45
+ end
46
+
47
+ should_run
48
+ end
49
+
23
50
  protected
24
51
 
25
52
  def print_success_message
@@ -4,19 +4,33 @@ module Phare
4
4
  class JSCS < Check
5
5
  attr_reader :config, :path
6
6
 
7
- def initialize(directory)
7
+ def initialize(directory, options = {})
8
8
  @config = File.expand_path("#{directory}.jscs.json", __FILE__)
9
9
  @path = File.expand_path("#{directory}app/assets", __FILE__)
10
+ @extensions = %w(.js)
11
+ @options = options
10
12
  end
11
13
 
12
14
  def command
13
- "jscs #{@path}"
15
+ if tree_changed?
16
+ "jscs #{tree_changes.join(' ')}"
17
+ else
18
+ "jscs #{@path}"
19
+ end
14
20
  end
15
21
 
16
22
  protected
17
23
 
18
- def should_run?
19
- !Phare.system_output('which jscs').empty? && File.exists?(@config) && Dir.exists?(@path)
24
+ def binary_exists?
25
+ !Phare.system_output('which jscs').empty?
26
+ end
27
+
28
+ def configuration_exists?
29
+ File.exists?(@config)
30
+ end
31
+
32
+ def argument_exists?
33
+ tree_changed? || Dir.exists?(@path)
20
34
  end
21
35
 
22
36
  def print_banner
@@ -4,20 +4,34 @@ module Phare
4
4
  class JSHint < Check
5
5
  attr_reader :config, :path
6
6
 
7
- def initialize(directory)
7
+ def initialize(directory, options = {})
8
8
  @config = File.expand_path("#{directory}.jshintrc", __FILE__)
9
9
  @path = File.expand_path("#{directory}app/assets/javascripts", __FILE__)
10
10
  @glob = File.join(@path, '**/*')
11
+ @extensions = %w(.js .es6.js)
12
+ @options = options
11
13
  end
12
14
 
13
15
  def command
14
- "jshint --config #{@config} --extra-ext .js,.es6.js #{@glob}"
16
+ if tree_changed?
17
+ "jshint --config #{@config} --extra-ext #{@extensions.join(',')} #{tree_changes.join(' ')}"
18
+ else
19
+ "jshint --config #{@config} --extra-ext #{@extensions.join(',')} #{@glob}"
20
+ end
15
21
  end
16
22
 
17
23
  protected
18
24
 
19
- def should_run?
20
- !Phare.system_output('which jshint').empty? && File.exists?(@config) && Dir.exists?(@path)
25
+ def binary_exists?
26
+ !Phare.system_output('which jshint').empty?
27
+ end
28
+
29
+ def configuration_exists?
30
+ File.exists?(@config)
31
+ end
32
+
33
+ def arguments_exists?
34
+ tree_changed? || Dir.exists?(@path)
21
35
  end
22
36
 
23
37
  def print_banner
@@ -2,17 +2,23 @@
2
2
  module Phare
3
3
  class Check
4
4
  class Rubocop < Check
5
- def initialize(directory)
5
+ def initialize(directory, options = {})
6
6
  @path = directory
7
+ @extensions = %w(.rb)
8
+ @options = options
7
9
  end
8
10
 
9
11
  def command
10
- 'rubocop'
12
+ if tree_changed?
13
+ "rubocop #{tree_changes.join(' ')}"
14
+ else
15
+ 'rubocop'
16
+ end
11
17
  end
12
18
 
13
19
  protected
14
20
 
15
- def should_run?
21
+ def binary_exists?
16
22
  !Phare.system_output('which rubocop').empty?
17
23
  end
18
24
 
@@ -4,18 +4,28 @@ module Phare
4
4
  class ScssLint < Check
5
5
  attr_reader :path
6
6
 
7
- def initialize(directory)
7
+ def initialize(directory, options = {})
8
8
  @path = File.expand_path("#{directory}app/assets/stylesheets", __FILE__)
9
+ @extensions = %w(.css .scss)
10
+ @options = options
9
11
  end
10
12
 
11
13
  def command
12
- "scss-lint #{@path}"
14
+ if tree_changed?
15
+ "scss-lint #{tree_changes.join(' ')}"
16
+ else
17
+ "scss-lint #{@path}"
18
+ end
13
19
  end
14
20
 
15
21
  protected
16
22
 
17
- def should_run?
18
- !Phare.system_output('which scss-lint').empty? && Dir.exists?(@path)
23
+ def binary_exists?
24
+ !Phare.system_output('which scss-lint').empty?
25
+ end
26
+
27
+ def arguments_exists?
28
+ tree_changed? || Dir.exists?(@path)
19
29
  end
20
30
 
21
31
  def print_banner
@@ -34,7 +34,7 @@ module Phare
34
34
  def run
35
35
  @checks = checks.map do |check|
36
36
  check = DEFAULT_CHECKS[check]
37
- check.new(@directory).tap(&:run).status
37
+ check.new(@directory, @options).tap(&:run).status
38
38
  end
39
39
 
40
40
  @status = @checks.find { |status| status > 0 } || 0
data/lib/phare/cli.rb CHANGED
@@ -53,6 +53,10 @@ module Phare
53
53
  @options[:only] = checks.split(',').map(&:to_sym)
54
54
  end
55
55
 
56
+ opts.on('--diff', 'Only run checks on modified files') do
57
+ @options[:diff] = true
58
+ end
59
+
56
60
  end.parse! @argv
57
61
  end
58
62
  end
data/lib/phare/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Phare
2
- VERSION = '0.4'
2
+ VERSION = '0.5'
3
3
  end
@@ -22,6 +22,7 @@ describe Phare::Check::JSCS do
22
22
  let(:path_exists?) { false }
23
23
  it { expect(check).to_not be_able_to_run }
24
24
  end
25
+
25
26
  end
26
27
 
27
28
  describe :run do
@@ -29,9 +30,11 @@ describe Phare::Check::JSCS do
29
30
  let(:run!) { check.run }
30
31
 
31
32
  context 'with available JSCS' do
33
+ let(:command) { check.command }
34
+
32
35
  before do
33
36
  expect(check).to receive(:should_run?).and_return(true)
34
- expect(Phare).to receive(:system).with(check.command)
37
+ expect(Phare).to receive(:system).with(command)
35
38
  expect(Phare).to receive(:last_exit_status).and_return(jscs_exit_status)
36
39
  expect(check).to receive(:print_banner)
37
40
  end
@@ -46,6 +49,17 @@ describe Phare::Check::JSCS do
46
49
  before { expect(Phare).to receive(:puts).with("Something went wrong. Program exited with #{jscs_exit_status}.") }
47
50
  it { expect { run! }.to change { check.status }.to(jscs_exit_status) }
48
51
  end
52
+
53
+ context 'with --diff option' do
54
+ let(:check) { described_class.new('.', diff: true) }
55
+ let(:files) { ['foo.js', 'bar.js'] }
56
+ let(:command) { "jscs #{files.join(' ')}" }
57
+ let(:jscs_exit_status) { 1337 }
58
+
59
+ before { expect(check).to receive(:tree_changes).and_return(files).at_least(:once) }
60
+
61
+ it { expect { run! }.to change { check.status }.to(jscs_exit_status) }
62
+ end
49
63
  end
50
64
 
51
65
  context 'with unavailable JSCS' do
@@ -29,9 +29,11 @@ describe Phare::Check::JSHint do
29
29
  let(:run!) { check.run }
30
30
 
31
31
  context 'with available JSHint' do
32
+ let(:command) { check.command }
33
+
32
34
  before do
33
35
  expect(check).to receive(:should_run?).and_return(true)
34
- expect(Phare).to receive(:system).with(check.command)
36
+ expect(Phare).to receive(:system).with(command)
35
37
  expect(Phare).to receive(:last_exit_status).and_return(jshint_exit_status)
36
38
  expect(check).to receive(:print_banner)
37
39
  end
@@ -21,9 +21,11 @@ describe Phare::Check::Rubocop do
21
21
  let(:run!) { check.run }
22
22
 
23
23
  context 'with available Rubocop' do
24
+ let(:command) { check.command }
25
+
24
26
  before do
25
27
  expect(check).to receive(:should_run?).and_return(true)
26
- expect(Phare).to receive(:system).with(check.command)
28
+ expect(Phare).to receive(:system).with(command)
27
29
  expect(Phare).to receive(:last_exit_status).and_return(rubocop_exit_status)
28
30
  expect(check).to receive(:print_banner)
29
31
  end
@@ -38,6 +40,17 @@ describe Phare::Check::Rubocop do
38
40
  before { expect(Phare).to receive(:puts).with("Something went wrong. Program exited with #{rubocop_exit_status}.") }
39
41
  it { expect { run! }.to change { check.status }.to(rubocop_exit_status) }
40
42
  end
43
+
44
+ context 'with --diff option' do
45
+ let(:check) { described_class.new('.', diff: true) }
46
+ let(:files) { ['foo.rb', 'bar.rb'] }
47
+ let(:command) { "rubocop #{files.join(' ')}" }
48
+ let(:rubocop_exit_status) { 1337 }
49
+
50
+ before { expect(check).to receive(:tree_changes).and_return(files).at_least(:once) }
51
+
52
+ it { expect { run! }.to change { check.status }.to(rubocop_exit_status) }
53
+ end
41
54
  end
42
55
 
43
56
  context 'with unavailable Rubocop' do
@@ -26,9 +26,11 @@ describe Phare::Check::ScssLint do
26
26
  let(:run!) { check.run }
27
27
 
28
28
  context 'with available ScssLint' do
29
+ let(:command) { check.command }
30
+
29
31
  before do
30
32
  expect(check).to receive(:should_run?).and_return(true)
31
- expect(Phare).to receive(:system).with(check.command)
33
+ expect(Phare).to receive(:system).with(command)
32
34
  expect(Phare).to receive(:last_exit_status).and_return(scsslint_exit_status)
33
35
  expect(check).to receive(:print_banner)
34
36
  end
@@ -44,6 +46,17 @@ describe Phare::Check::ScssLint do
44
46
  before { expect(Phare).to receive(:puts).with("Something went wrong. Program exited with #{scsslint_exit_status}.") }
45
47
  it { expect { run! }.to change { check.status }.to(scsslint_exit_status) }
46
48
  end
49
+
50
+ context 'with --diff option' do
51
+ let(:check) { described_class.new('.', diff: true) }
52
+ let(:files) { ['foo.css', 'bar.css.scss'] }
53
+ let(:command) { "scss-lint #{files.join(' ')}" }
54
+ let(:scsslint_exit_status) { 1337 }
55
+
56
+ before { expect(check).to receive(:tree_changes).and_return(files).at_least(:once) }
57
+
58
+ it { expect { run! }.to change { check.status }.to(scsslint_exit_status) }
59
+ end
47
60
  end
48
61
 
49
62
  context 'with unavailable ScssLint' do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: phare
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.4'
4
+ version: '0.5'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rémi Prévost
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-03-22 00:00:00.000000000 Z
11
+ date: 2014-04-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler