minitest-tagz 0.1.0 → 0.2.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: 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