Skip to content

Instantly share code, notes, and snippets.

@kyanny

kyanny/pipe.rb

Forked from fujimura/pipe.rb
Last active Dec 18, 2015
Embed
What would you like to do?
class Object
def pipe
yield self
end
end
# From https://github.com/rspec/rspec-rails/pull/766/files
# Without Object#pipe
types = begin
dirs = Dir['./spec/**/*_spec.rb'].
map { |f| f.sub(/^\.\/(spec\/\w+)\/.*/, '\\1') }.
uniq.
select { |f| File.directory?(f) }
Hash[dirs.map { |d| [d.split('/').last, d] }]
end
# With Object#pipe
types = Dir['./spec/**/*_spec.rb'].
map { |f| f.sub(/^\.\/(spec\/\w+)\/.*/, '\\1') }.
uniq.
select { |f| File.directory?(f) }.
map { |d| [d.split('/').last, d] }.
pipe { |type_and_dirs| Hash[type_and_dirs] }
# With Enumerable#inject
types = Dir['./spec/**/*_spec.rb'].
map { |f| f.sub(/^\.\/(spec\/\w+)\/.*/, '\\1') }.
uniq.
select { |f| File.directory?(f) }.
map { |d| [d.split('/').last, d] }.
inject({}){ |h, type_and_dirs| h.merge! Hash[*type_and_dirs]; h }
#p types
# with_object
types = Dir['./spec/**/*_spec.rb'].
map { |f| f.sub(/^\.\/(spec\/\w+)\/.*/, '\\1') }.
uniq.
select { |f| File.directory?(f) }.
map { |d| [d.split('/').last, d] }.
to_enum.
with_object({}){ |type_and_dirs, h| h.merge! Hash[*type_and_dirs] }
p types
types = Dir['./spec/**/*_spec.rb'].
map { |f| f.sub(/^\.\/(spec\/\w+)\/.*/, '\\1') }.
uniq.
select { |f| File.directory?(f) }.
map { |d| [d.split('/').last, d] }.
tap { |type_and_dirs| break Hash[*type_and_dirs.flatten] }
p types
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment