From e7414314ffa2a77015cdb0e9018133f85091a7de Mon Sep 17 00:00:00 2001 From: Igor Makarov Date: Wed, 26 Dec 2018 13:40:55 +0200 Subject: [PATCH] Reduce global namespace pollution (#190) --- lib/xcake.rb | 3 +-- lib/xcake/core_ext/array.rb | 5 ----- lib/xcake/core_ext/class.rb | 14 ++++++++++++++ lib/xcake/core_ext/object.rb | 7 ------- lib/xcake/dependency_provider.rb | 6 +++--- lib/xcake/generator.rb | 1 + spec/core_ext/array_spec.rb | 7 ------- spec/core_ext/{object_spec.rb => class_spec.rb} | 4 +++- 8 files changed, 22 insertions(+), 25 deletions(-) delete mode 100644 lib/xcake/core_ext/array.rb create mode 100644 lib/xcake/core_ext/class.rb delete mode 100644 lib/xcake/core_ext/object.rb delete mode 100644 spec/core_ext/array_spec.rb rename spec/core_ext/{object_spec.rb => class_spec.rb} (59%) diff --git a/lib/xcake.rb b/lib/xcake.rb index 4eea660d..874a2ef7 100644 --- a/lib/xcake.rb +++ b/lib/xcake.rb @@ -1,5 +1,4 @@ -require 'xcake/core_ext/array' -require 'xcake/core_ext/object' +require 'xcake/core_ext/class' require 'xcake/core_ext/string' require 'xcake/xcode/project' diff --git a/lib/xcake/core_ext/array.rb b/lib/xcake/core_ext/array.rb deleted file mode 100644 index 2f186248..00000000 --- a/lib/xcake/core_ext/array.rb +++ /dev/null @@ -1,5 +0,0 @@ -class Array - def to_h - Hash[*flatten(1)] - end -end diff --git a/lib/xcake/core_ext/class.rb b/lib/xcake/core_ext/class.rb new file mode 100644 index 00000000..3d468f0a --- /dev/null +++ b/lib/xcake/core_ext/class.rb @@ -0,0 +1,14 @@ +module Xcake + module CoreExtensions + # @example Including in a class + # Class.send(:include, Xcake::CoreExtensions::ClassDescendants) # done with send because of old ruby versions + # + module ClassDescendants + # Returns all descendants of a class + # + def descendants + ObjectSpace.each_object(singleton_class).select { |klass| klass < self } + end + end + end +end diff --git a/lib/xcake/core_ext/object.rb b/lib/xcake/core_ext/object.rb deleted file mode 100644 index 377b1714..00000000 --- a/lib/xcake/core_ext/object.rb +++ /dev/null @@ -1,7 +0,0 @@ -class Object - # Returns all descendants of a class - # - def self.descendants - ObjectSpace.each_object(Class).select { |klass| klass < self } - end -end diff --git a/lib/xcake/dependency_provider.rb b/lib/xcake/dependency_provider.rb index fe150a35..fbe87f8b 100644 --- a/lib/xcake/dependency_provider.rb +++ b/lib/xcake/dependency_provider.rb @@ -7,9 +7,9 @@ class DependencyProvider def initialize(dependency_class) plugins = dependency_class.load_plugins - @dependency_graph = plugins.map do |p| - [p, p.dependencies] - end.to_h + @dependency_graph = plugins.each_with_object({}) do |p, hash| + hash[p] = p.dependencies + end end def tsort_each_node(&block) diff --git a/lib/xcake/generator.rb b/lib/xcake/generator.rb index e878d2a0..87f46232 100644 --- a/lib/xcake/generator.rb +++ b/lib/xcake/generator.rb @@ -3,6 +3,7 @@ class Generator include Dependency include Plugin include Visitor + Class.send(:include, CoreExtensions::ClassDescendants) # done with send because of old ruby versions attr_accessor :context diff --git a/spec/core_ext/array_spec.rb b/spec/core_ext/array_spec.rb deleted file mode 100644 index 83d5e2e1..00000000 --- a/spec/core_ext/array_spec.rb +++ /dev/null @@ -1,7 +0,0 @@ -require 'spec_helper' - -describe Array do - it 'should convert to hash' do - expect(%w(key value).to_h).to eq('key' => 'value') - end -end diff --git a/spec/core_ext/object_spec.rb b/spec/core_ext/class_spec.rb similarity index 59% rename from spec/core_ext/object_spec.rb rename to spec/core_ext/class_spec.rb index 9fe8ef5c..8b2efbfd 100644 --- a/spec/core_ext/object_spec.rb +++ b/spec/core_ext/class_spec.rb @@ -1,6 +1,7 @@ require 'spec_helper' class Parent + Class.send(:include, Xcake::CoreExtensions::ClassDescendants) # done with send because of old ruby versions end class Child < Parent @@ -9,10 +10,11 @@ class Child < Parent class Grandchild < Child end -describe Object do +describe Xcake::CoreExtensions do it 'should return all descendants' do descendants = Parent.descendants + expect(descendants.count).to eq(2) expect(descendants).to include(Child) expect(descendants).to include(Grandchild) end