minitest-tagz 0.1.0 → 0.2.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: cb9e4461673c4b4cbb75cf631e06f4f014a91900
4
- data.tar.gz: 8120c031de27c987e1074ba373a8536658ac141d
3
+ metadata.gz: ebe2a552b70a6c9636949552b092405b0ff8606b
4
+ data.tar.gz: 41d024c65a904fd822f0e4d15afd7864eb1c9bfd
5
5
  SHA512:
6
- metadata.gz: 8ed494bea52ab8c48a3d88f2230301dc63cfb4fa001153d570aa787b0919ff5bfe1c165de0cbd95aa3501b6f5074614d5785a1236f1bc08aaeeb64d0e2cda358
7
- data.tar.gz: b1aa6f2526c6cdcb42fe5b9d79403aeb0fb9c36d106e0c19c03410bc49eaf8dcb5abb0dcb7f12952a0f4608f650d3386be525024b9dafee276c1708a540a35e4
6
+ metadata.gz: 520e49ba6db312c4e5617390aa49ba1ee22103518c1523d2f742815eba564d596fe7c664f78ee908131b406752cbe36ba5036027b6b752b8ba2325064ca6f919
7
+ data.tar.gz: eb2615c95ca8472a814146de35fb8c18d8d0360145c08a844b3d396de6235c17359de0c420968a071e9c72f221b225105119fce69d693e8dda35c92aff8b6910
data/.travis.yml CHANGED
@@ -1,3 +1,5 @@
1
1
  language: ruby
2
2
  rvm:
3
3
  - 2.1.3
4
+ - 2.2.0
5
+ - 2.2.1
data/README.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # Minitest::Tagz
2
2
 
3
+ [![Build Status](https://travis-ci.org/backupify/minitest-tagz.svg)](https://travis-ci.org/backupify/minitest-tagz)
4
+ [![Code Climate](https://codeclimate.com/github/backupify/minitest-tagz/badges/gpa.svg)](https://codeclimate.com/github/backupify/minitest-tagz)
5
+ [![Gem Version](https://badge.fury.io/rb/minitest-tagz.svg)](http://badge.fury.io/rb/minitest-tagz)
6
+
3
7
  yet another tags implementation for Minitest
4
8
 
5
9
  ## Installation
@@ -18,16 +22,27 @@ Or install it yourself as:
18
22
 
19
23
  $ gem install minitest-tagz
20
24
 
21
- ## Usage
25
+ ## Setup
26
+
27
+ In your `test_helper.rb` you'll need to require `Minitest::Tagz`. You'll also
28
+ want to tell `Tagz` which tags you want to use. I suggest using the `TAGS` environment
29
+ variable:
22
30
 
23
31
  ```rb
24
- # spec_helper.rb
25
32
  require 'minitest/tagz'
26
-
27
- Minitest::Tagz.patch_minitest
28
33
  Minitest::Tagz.choose_tags(*ENV['TAGS'].split(',')) if ENV['TAGS']
34
+ ```
35
+
36
+ This wil let you do this like: `bundle exec rake test TAGS=fast,login` to run all
37
+ tests with the fast and login tags.
29
38
 
30
- # my_spec.rb
39
+ ## Usage
40
+
41
+ `Minitest::Tagz` works with both `Minitest::Test` and `Minitest::Spec`. You can declare
42
+ tags by using the `tag` helper.
43
+
44
+ ```rb
45
+ # Using Minitest::Spec
31
46
  class MySpec < Minitest::Spec
32
47
  tag :fast, :unit
33
48
  it 'should run' do
@@ -44,8 +59,31 @@ class MySpec < Minitest::Spec
44
59
  end
45
60
  end
46
61
 
47
- # command line
48
- bundle exec rake test TAGS=fast,unit
62
+ # Using Minitest::Test
63
+ class MyTest < Minitest::Test
64
+ tag :fast
65
+ def test_my_stuff
66
+ assert true
67
+ end
68
+ end
69
+ ```
70
+
71
+ With `Minitest::Spec` adding tags to a `describe` will add the tags to all of the
72
+ tests in the block:
73
+
74
+ ```rb
75
+ class MySpec < Minitest::Spec
76
+ tag :login
77
+ describe 'all tests in this are tagged with :login' do
78
+ it 'tests this' do
79
+ assert true
80
+ end
81
+
82
+ it 'also tests this' do
83
+ assert true
84
+ end
85
+ end
86
+ end
49
87
  ```
50
88
 
51
89
  ## Development
@@ -56,7 +94,7 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
56
94
 
57
95
  ## Contributing
58
96
 
59
- 1. Fork it ( https://github.com/[my-github-username]/minitest-tagz/fork )
97
+ 1. Fork it ( https://github.com/backupify/minitest-tagz/fork )
60
98
  2. Create your feature branch (`git checkout -b my-new-feature`)
61
99
  3. Commit your changes (`git commit -am 'Add some feature'`)
62
100
  4. Push to the branch (`git push origin my-new-feature`)
data/lib/minitest/tagz.rb CHANGED
@@ -1,49 +1,74 @@
1
- require "minitest/tagz/version"
1
+ require 'minitest/tagz/version'
2
+ require 'minitest/tagz/minitest_adapter'
2
3
 
3
4
  module Minitest
4
5
  module Tagz
5
6
  class << self
7
+ # Pick the tags you want to test
6
8
  def choose_tags(*tags)
7
- @chosen_tags = tags.map(&:to_sym).compact
9
+ @chosen_tags = tags.map(&:to_sym).compact.to_set
8
10
  end
9
11
 
10
- def has_matching_tags?(tags)
11
- tags ||= []
12
- chosen_tags.all? { |tag| tags.include?(tag) }
12
+ # Create a tag on a test
13
+ def declare_tags(*pending_tags)
14
+ @pending_tags = pending_tags
13
15
  end
14
16
 
15
- def chosen_tags
16
- @chosen_tags ||= []
17
+ # Record the given tags with the object
18
+ def apply_tags(namespace, obj)
19
+ if @pending_tags
20
+ # TODO
21
+ tags["#{namespace}::#{obj}"] += @pending_tags
22
+ @pending_tags = nil
23
+ end
24
+ end
25
+
26
+ def record_blanket_tags
27
+ if @pending_tags
28
+ # TODO
29
+ self.blanket_tags = @pending_tags
30
+ @pending_tags = nil
31
+ end
17
32
  end
18
- end
19
33
 
20
- module MinitestAdapter
21
- def tag(*pending_tags)
22
- @pending_tags ||= pending_tags
34
+ def apply_blanket_tags(namespace, obj)
35
+ unless blanket_tags.empty?
36
+ tags["#{namespace}::#{obj}"] += @blanket_tags
37
+ end
23
38
  end
24
39
 
25
- def method_added(name)
26
- return unless name[/^test_/]
27
- tags[name.to_s] = @pending_tags
28
- @pending_tags = nil
40
+ # Select all the testables with matching tags
41
+ def filter(namespace, enum)
42
+ enum.select {|obj| has_matching_tags?(namespace, obj)}
43
+ end
44
+
45
+ def reset_blanket_tags
46
+ @blanket_tags = []
47
+ end
48
+
49
+ private
50
+
51
+ # Check if object has matching tags
52
+ def has_matching_tags?(namespace, obj)
53
+ obj_tags = tags["#{namespace}::#{obj}"] || []
54
+ chosen_tags.all? { |tag| obj_tags.include?(tag) }
55
+ end
56
+
57
+ def chosen_tags
58
+ @chosen_tags ||= Set.new
29
59
  end
30
60
 
31
61
  def tags
32
- @tags ||= {}
62
+ @tags ||= Hash.new([])
33
63
  end
34
64
 
35
- def runnable_methods
36
- runnables = super
37
- runnables.select do |runnable|
38
- Minitest::Tagz.has_matching_tags?(tags[runnable])
39
- end
65
+ def blanket_tags
66
+ @blanket_tags ||= reset_blanket_tags
40
67
  end
41
- end
42
68
 
43
- def self.patch_minitest
44
- ::Minitest::Test.singleton_class.prepend(MinitestAdapter)
69
+ def blanket_tags=(arg)
70
+ @blanket_tags = arg
71
+ end
45
72
  end
46
-
47
- patch_minitest
48
73
  end
49
74
  end
@@ -0,0 +1,47 @@
1
+ module Minitest
2
+ module Tagz
3
+ module MinitestAdapter
4
+ module Base
5
+ def tag(*tags)
6
+ Tagz.declare_tags(*tags)
7
+ end
8
+
9
+ def method_added(name)
10
+ return unless name[/^test_/]
11
+ Tagz.apply_tags(self, name)
12
+ end
13
+
14
+ def runnable_methods
15
+ Tagz.filter(self, super)
16
+ end
17
+ end
18
+
19
+ module Spec
20
+ def describe(*args, &block)
21
+ Tagz.record_blanket_tags
22
+ super
23
+ apply_blanket_tags_recursively
24
+ Tagz.reset_blanket_tags
25
+ end
26
+
27
+ def apply_blanket_tags_recursively
28
+ test_methods_in_describe = instance_methods.select {|m| m[/^test/]}
29
+ test_methods_in_describe.each do |runnable|
30
+ Tagz.apply_blanket_tags(self, runnable)
31
+ end
32
+
33
+ children.each do |child|
34
+ child.apply_blanket_tags_recursively
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
41
+
42
+ if defined?(Minitest)
43
+ ::Minitest::Test.singleton_class.prepend(Minitest::Tagz::MinitestAdapter::Base)
44
+ if defined?(Minitest::Spec)
45
+ ::Minitest::Spec.singleton_class.prepend(Minitest::Tagz::MinitestAdapter::Spec)
46
+ end
47
+ end
@@ -1,5 +1,5 @@
1
1
  module Minitest
2
2
  module Tagz
3
- VERSION = "0.1.0"
3
+ VERSION = "0.2.0"
4
4
  end
5
5
  end
@@ -19,9 +19,10 @@ Gem::Specification.new do |spec|
19
19
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
20
20
  spec.require_paths = ["lib"]
21
21
 
22
- spec.add_development_dependency "bundler", "~> 1.9"
22
+ spec.add_dependency "minitest", "~> 5"
23
+
24
+ spec.add_development_dependency "bundler"
23
25
  spec.add_development_dependency "rake", "~> 10.0"
24
- spec.add_development_dependency "minitest"
25
26
  spec.add_development_dependency "guard"
26
27
  spec.add_development_dependency "guard-minitest"
27
28
  end
metadata CHANGED
@@ -1,57 +1,57 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: minitest-tagz
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Josh Bodah
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-08-20 00:00:00.000000000 Z
11
+ date: 2015-08-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: bundler
14
+ name: minitest
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.9'
20
- type: :development
19
+ version: '5'
20
+ type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '1.9'
26
+ version: '5'
27
27
  - !ruby/object:Gem::Dependency
28
- name: rake
28
+ name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: '10.0'
33
+ version: '0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - "~>"
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: '10.0'
40
+ version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
- name: minitest
42
+ name: rake
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ">="
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '0'
47
+ version: '10.0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ">="
52
+ - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '0'
54
+ version: '10.0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: guard
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -99,6 +99,7 @@ files:
99
99
  - bin/console
100
100
  - bin/setup
101
101
  - lib/minitest/tagz.rb
102
+ - lib/minitest/tagz/minitest_adapter.rb
102
103
  - lib/minitest/tagz/version.rb
103
104
  - minitest-tagz.gemspec
104
105
  homepage: https://github.com/backupify/minitest-tagz