corefines 1.7.0 → 1.8.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: ea0feea695c1bc742c15a3ca74b9e4aa98d1d632
4
- data.tar.gz: cce9dd830c78ddec528b274c8a42119dd79bf51d
3
+ metadata.gz: d1470ef3188042ed178a8c0204e54046b3ea6a3d
4
+ data.tar.gz: 6a5e024a2f6e81e59aade31d49b09e59d3be57df
5
5
  SHA512:
6
- metadata.gz: 36952b5e7ac736ae14986a44737fd7232a7ead39091ac4075b67b470dee862e260876511b757b316e326e95aa869fac6415adf6a7c775e7da9f34c72fe43bdcf
7
- data.tar.gz: b70e5551f42ad5f19f44e65427bbf9d09c59b78a167e46e022ee1c33a65b81ae283fd497cd52b0acbd83ad5e416b8c3ba6932e0993e0900b47120d3a7cabd547
6
+ metadata.gz: 2d5d5921ebd1dcbd39cd5a499ef9f82a4c4847cfdabea32df8c302db256a20cc6c1a45bf62e2923e052136ebb375a7839c598b2094830da22f488e74846edf30
7
+ data.tar.gz: 66952a116b6e578b37745a5da4275e1f913c397265ae3f51ea0047bb2ed963fa2b94016cce45c4d976577bfa5b907688799644f25fc39b3a3bad1cb2082d0ed1
data/CHANGELOG.adoc CHANGED
@@ -3,6 +3,11 @@
3
3
  :doc-base-url: http://www.rubydoc.info/github/jirutka/corefines/Corefines
4
4
  :issue-uri: {repo-uri}/issues
5
5
 
6
+ == 1.8.0 (2015-07-06)
7
+
8
+ * Add new refinement {doc-base-url}/Class/descendants[Class#descendants].
9
+
10
+
6
11
  == 1.7.0 (2015-07-05)
7
12
 
8
13
  * Add new refinement {doc-base-url}/Enumerable/MapTo[Enumerable#map_to].
data/README.adoc CHANGED
@@ -41,12 +41,12 @@ TODO
41
41
  Add this line to your application’s Gemfile:
42
42
 
43
43
  [source]
44
- gem 'corefines', '~> 1.7'
44
+ gem 'corefines', '~> 1.8'
45
45
 
46
46
  or to your gemspec:
47
47
 
48
48
  [source]
49
- s.add_runtime_dependency 'corefines', '~> 1.7'
49
+ s.add_runtime_dependency 'corefines', '~> 1.8'
50
50
 
51
51
  and then execute:
52
52
 
@@ -133,6 +133,8 @@ Not ideal indeed, but probably the best of what we can achieve.
133
133
  ** {doc-base-url}/Array/Second[#second]
134
134
  ** {doc-base-url}/Array/Third[#third]
135
135
  ** {doc-base-url}/Array/Wrap[.wrap]
136
+ * {doc-base-url}/Class[Class]
137
+ ** {doc-base-url}/Class/Descendants[#descendants]
136
138
  * {doc-base-url}/Enumerable[Enumerable]
137
139
  ** {doc-base-url}/Enumerable/IndexBy[#index_by]
138
140
  ** {doc-base-url}/Enumerable/Many[#many?]
data/lib/corefines.rb CHANGED
@@ -3,6 +3,7 @@ require 'corefines/support/fake_refinements'
3
3
 
4
4
  # Refinements
5
5
  require 'corefines/array'
6
+ require 'corefines/class'
6
7
  require 'corefines/enumerable'
7
8
  require 'corefines/hash'
8
9
  require 'corefines/module'
@@ -0,0 +1,45 @@
1
+ require 'corefines/support/alias_submodules'
2
+
3
+ module Corefines
4
+ module Class
5
+ ##
6
+ # @!method descendants
7
+ # @example
8
+ # Integer.descendants # => [Fixnum, Bignum]
9
+ # Numeric.descendants # => [Integer, Fixnum, Float, Bignum, Rational, Complex]
10
+ #
11
+ # @return [Array<Class>] all descendants of this class.
12
+ #
13
+ module Descendants
14
+ begin
15
+ # Just try whether it raises exception...
16
+ ::ObjectSpace.each_object(::Class.new) {}
17
+
18
+ refine ::Class do
19
+ def descendants
20
+ descendants = []
21
+ ::ObjectSpace.each_object(singleton_class) do |klass|
22
+ descendants.unshift(klass) unless klass == self
23
+ end
24
+ descendants
25
+ end
26
+ end
27
+
28
+ # Compatibility mode for JRuby when running without option -X+O.
29
+ rescue StandardError
30
+
31
+ refine ::Class do
32
+ def descendants
33
+ descendants = []
34
+ ::ObjectSpace.each_object(::Class) do |klass|
35
+ descendants.unshift(klass) if klass < self
36
+ end
37
+ descendants.uniq
38
+ end
39
+ end
40
+ end
41
+ end
42
+
43
+ include Support::AliasSubmodules
44
+ end
45
+ end
@@ -1,3 +1,3 @@
1
1
  module Corefines
2
- VERSION = '1.7.0'
2
+ VERSION = '1.8.0'
3
3
  end
@@ -0,0 +1,22 @@
1
+ describe Class do
2
+ using Corefines::Class::descendants
3
+
4
+ describe '#descendants' do
5
+
6
+ a = Class.new
7
+ b0 = Class.new(a)
8
+ b1 = Class.new(a)
9
+ c0 = Class.new(b0)
10
+
11
+ context 'when class without subclasses' do
12
+ it { expect( c0.descendants ).to be_empty }
13
+ end
14
+
15
+ context 'when class with 2 generations of descendants' do
16
+ it 'returns all descendants of the class' do
17
+ expect( a.descendants ).to match_array [b0, b1, c0]
18
+ end
19
+ end
20
+
21
+ end
22
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: corefines
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.7.0
4
+ version: 1.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jakub Jirutka
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-07-05 00:00:00.000000000 Z
11
+ date: 2015-07-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: asciidoctor
@@ -110,6 +110,7 @@ files:
110
110
  - Rakefile
111
111
  - lib/corefines.rb
112
112
  - lib/corefines/array.rb
113
+ - lib/corefines/class.rb
113
114
  - lib/corefines/enumerable.rb
114
115
  - lib/corefines/hash.rb
115
116
  - lib/corefines/module.rb
@@ -123,6 +124,7 @@ files:
123
124
  - spec/array/second_spec.rb
124
125
  - spec/array/third_spec.rb
125
126
  - spec/array/wrap_spec.rb
127
+ - spec/class/descendants_spec.rb
126
128
  - spec/enumerable/index_by_spec.rb
127
129
  - spec/enumerable/many_spec.rb
128
130
  - spec/enumerable/map_send_spec.rb