devloop 0.0.6 → 0.0.8

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
  SHA256:
3
- metadata.gz: cdbcf2a0d7f3ee56a98ad2db128f8835b348f990efab6fd77ab9a57dbc2f6aa3
4
- data.tar.gz: 7b041ec78b9ac2c25e6423e9d3dc4b8be64c1283668d88a259200efa4feade24
3
+ metadata.gz: c6e087fe2cd945782777fe0a1a87fd21b3022f0348a38b1c789f8ba6c7817f49
4
+ data.tar.gz: 1718ef614659f6ba55a3a7ca1d60d2d7b676a70919d1a93e7bd4f0c5ff1a46ba
5
5
  SHA512:
6
- metadata.gz: 381c4b59391e866838d90084e8251f193d7d3ba31da4ddc7905e28311e6e0d7ab42fb2a5ca18773fe58706f62a270e8a6b7ff9d4412e842954dbb4a86e6a9108
7
- data.tar.gz: 6f1d6304053545f310d5416a5649e704d84481a1d654d0c2e4530e64b5f0ee429d41c5106f5465a4c174f097df8a9f5402c0c6890491fe4f29a5283f50139c0a
6
+ metadata.gz: 3c0948c9527bc7bed104aa6cac0a65bf6c67618e5d3afa31d2245d90565ca32546cb4bdc8c084ef2103c0919c648f4a315c923aed8ca1b1ec7b636fa394b83fa
7
+ data.tar.gz: 59775a6c5a08119a319cd541bd8e45a7bc1432fb57b498a0e788eb22018f7ef864f316fd412c788a8574359144607ca695bb75b7e38bbe132e51ae68b712ecde
data/README.md CHANGED
@@ -2,6 +2,8 @@
2
2
 
3
3
  Devloop is an automated Rspec runner for Rails apps inspired by [TLDR](https://github.com/tendersearls/tldr). The purpose of this tool is to provide continuous and instant feedback when working on the Rails app. It runs only specs from _lines_ modified in the recent git commits. Even if you have a large `spec/user_spec.rb` file, you'll receive specs feedback in ~second on each file save.
4
4
 
5
+ Optionally, you can edit first line of any spec file (i.e. add `#`) to run all the tests from it.
6
+
5
7
  ## Installation
6
8
 
7
9
  It uses [fswatch](https://github.com/emcrisostomo/fswatch) so make sure to install it first:
@@ -5,18 +5,37 @@ module Devloop
5
5
  end
6
6
 
7
7
  def call(diff)
8
- lines = diff.split("\n")
9
- results = []
10
- file = ""
11
- lines.each_with_index do |line, index|
8
+ _, results = diff.split("\n").reduce(["", []]) do |(file, results), line|
12
9
  if line.start_with?("+++ b/")
13
- file = line[6..-1]
10
+ [line[6..-1], results]
14
11
  elsif line.start_with?("@@ -")
15
12
  line_number = line.match(/@@ -(\d+)/)[1]
16
- results << "#{file}:#{line_number}"
13
+ if line_number == "1"
14
+ [file, results << "#{relative_path(file)}"]
15
+ else
16
+ [file, results << "#{relative_path(file)}:#{line_number}"]
17
+ end
18
+ else
19
+ [file, results]
17
20
  end
18
- end
19
- results
21
+ end.uniq
22
+
23
+ # Remove filenames with line number if filename without line number is present
24
+ results.reject { |result| results.include?(result.split(":").first) && result.include?(":") }
25
+ end
26
+
27
+ private
28
+
29
+ def relative_path(path)
30
+ path.gsub(project_path, "")
31
+ end
32
+
33
+ def project_path
34
+ @project_path ||= Dir.pwd.gsub("#{git_root_path}/", "") + "/"
35
+ end
36
+
37
+ def git_root_path
38
+ @git_root_path ||= `git rev-parse --show-toplevel`.strip
20
39
  end
21
40
  end
22
41
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Devloop
4
- VERSION = "0.0.6"
4
+ VERSION = "0.0.8"
5
5
  end
@@ -4,46 +4,96 @@ require "spec_helper"
4
4
  require "devloop/diff_parser"
5
5
 
6
6
  describe Devloop::DiffParser do
7
- let(:diff1) do
8
- <<~DIFF
9
- diff --git a/spec/models/team_spec.rb b/spec/models/team_spec.rb
10
- index 19772f2a..a32824f9 100644
11
- --- a/spec/models/team_spec.rb
12
- +++ b/spec/models/team_spec.rb
13
- @@ -10,2 +10,2 @@ describe Team do
14
- - it "has a valid factory" do
15
- - expect(team).to be_valid
16
- + it "has valid factory" do
17
- + expect(team).not_to be_valid
18
- diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb
19
- index 410ffa8c..610d9e19 100644
20
- --- a/spec/models/user_spec.rb
21
- +++ b/spec/models/user_spec.rb
22
- @@ -167 +167 @@ describe User do
23
- - web_auth_token_generated_at: 50.minutes.ago,
24
- + web_auth_token_generated_at: 10.minutes.ago,
25
- DIFF
7
+ context "first line of a file was edited" do
8
+ let(:diff) do
9
+ <<~DIFF
10
+ diff --git a/spec/models/team_spec.rb b/spec/models/team_spec.rb
11
+ index 19772f2a..9f614e20 100644
12
+ --- a/spec/models/team_spec.rb
13
+ +++ b/spec/models/team_spec.rb
14
+ @@ -1 +1,3 @@ describe Team do
15
+ - it "has_many emojis" do
16
+ + it "has_many eojis" do
17
+ @@ -24,2 +24,2 @@ describe Team do
18
+ - describe "normalize attributes" do
19
+ - it "does not allow empty string values" do
20
+ + describe "normalize attrbtes" do
21
+ + it "does not allw empty string values" do
22
+ DIFF
23
+ end
24
+
25
+ it "will run the whole file" do
26
+ expect(Devloop::DiffParser.call(diff)).to eq(["spec/models/team_spec.rb"])
27
+ end
26
28
  end
27
29
 
28
- let(:diff2) do
29
- <<~DIFF
30
- diff --git a/spec/models/team_spec.rb b/spec/models/team_spec.rb
31
- index 19772f2a..9f614e20 100644
32
- --- a/spec/models/team_spec.rb
33
- +++ b/spec/models/team_spec.rb
34
- @@ -19 +19 @@ describe Team do
35
- - it "has_many emojis" do
36
- + it "has_many eojis" do
37
- @@ -24,2 +24,2 @@ describe Team do
38
- - describe "normalize attributes" do
39
- - it "does not allow empty string values" do
40
- + describe "normalize attrbtes" do
41
- + it "does not allw empty sting values" do
42
- DIFF
30
+ context "the project root is the same as git root" do
31
+ let(:diff1) do
32
+ <<~DIFF
33
+ diff --git a/spec/models/team_spec.rb b/spec/models/team_spec.rb
34
+ index 19772f2a..a32824f9 100644
35
+ --- a/spec/models/team_spec.rb
36
+ +++ b/spec/models/team_spec.rb
37
+ @@ -10,2 +10,2 @@ describe Team do
38
+ - it "has a valid factory" do
39
+ - expect(team).to be_valid
40
+ + it "has valid factory" do
41
+ + expect(team).not_to be_valid
42
+ diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb
43
+ index 410ffa8c..610d9e19 100644
44
+ --- a/spec/models/user_spec.rb
45
+ +++ b/spec/models/user_spec.rb
46
+ @@ -167 +167 @@ describe User do
47
+ - web_auth_token_generated_at: 50.minutes.ago,
48
+ + web_auth_token_generated_at: 10.minutes.ago,
49
+ DIFF
50
+ end
51
+
52
+ let(:diff2) do
53
+ <<~DIFF
54
+ diff --git a/spec/models/team_spec.rb b/spec/models/team_spec.rb
55
+ index 19772f2a..9f614e20 100644
56
+ --- a/spec/models/team_spec.rb
57
+ +++ b/spec/models/team_spec.rb
58
+ @@ -19 +19 @@ describe Team do
59
+ - it "has_many emojis" do
60
+ + it "has_many eojis" do
61
+ @@ -24,2 +24,2 @@ describe Team do
62
+ - describe "normalize attributes" do
63
+ - it "does not allow empty string values" do
64
+ + describe "normalize attrbtes" do
65
+ + it "does not allw empty string values" do
66
+ DIFF
67
+ end
68
+
69
+ it "parses the diff correctly" do
70
+ expect(Devloop::DiffParser.call(diff1)).to eq(["spec/models/team_spec.rb:10", "spec/models/user_spec.rb:167"])
71
+ expect(Devloop::DiffParser.call(diff2)).to eq(["spec/models/team_spec.rb:19", "spec/models/team_spec.rb:24"])
72
+ end
43
73
  end
44
74
 
45
- it "parses the diff correctly" do
46
- expect(Devloop::DiffParser.call(diff1)).to eq(["spec/models/team_spec.rb:10", "spec/models/user_spec.rb:167"])
47
- expect(Devloop::DiffParser.call(diff2)).to eq(["spec/models/team_spec.rb:19", "spec/models/team_spec.rb:24"])
75
+ context "the project root is different from the git root" do
76
+ let(:diff) do
77
+ <<~DIFF
78
+ diff --git a/src/spec/models/team_spec.rb b/src/spec/models/team_spec.rb
79
+ index 19772f2a..9f614e20 100644
80
+ --- a/src/spec/models/team_spec.rb
81
+ +++ b/src/spec/models/team_spec.rb
82
+ @@ -19 +19 @@ describe Team do
83
+ - it "has_many emojis" do
84
+ + it "has_many eojis" do
85
+ @@ -24,2 +24,2 @@ describe Team do
86
+ - describe "normalize attributes" do
87
+ - it "does not allow empty string values" do
88
+ + describe "normalize attrbtes" do
89
+ + it "does not allw empty string values" do
90
+ DIFF
91
+ end
92
+
93
+ it "parses the diff correctly" do
94
+ allow_any_instance_of(Devloop::DiffParser).to receive(:git_root_path).and_return("/Users/username/projects/")
95
+ allow_any_instance_of(Devloop::DiffParser).to receive(:project_path).and_return("src/")
96
+ expect(Devloop::DiffParser.call(diff)).to eq(["spec/models/team_spec.rb:19", "spec/models/team_spec.rb:24"])
97
+ end
48
98
  end
49
99
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: devloop
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.0.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - pawurb
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-03-07 00:00:00.000000000 Z
11
+ date: 2024-03-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake