ruby_ext 0.4.11 → 0.4.12
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.
- data/Rakefile +6 -6
 - data/lib/rake_ext.rb +10 -5
 - data/lib/rake_ext/project.rb +31 -16
 - data/lib/rspec_ext.rb +82 -19
 - data/lib/ruby_ext.rb +1 -52
 - data/lib/ruby_ext/core.rb +24 -0
 - data/lib/ruby_ext/{array.rb → core/array.rb} +4 -2
 - data/lib/ruby_ext/core/basic_object.rb +8 -0
 - data/lib/ruby_ext/core/class.rb +0 -0
 - data/lib/ruby_ext/{deep_clone.rb → core/deep_clone.rb} +3 -4
 - data/lib/ruby_ext/core/enumerable.rb +17 -0
 - data/lib/ruby_ext/{file.rb → core/file.rb} +5 -2
 - data/lib/ruby_ext/core/hash.rb +23 -0
 - data/lib/ruby_ext/{kernel.rb → core/kernel.rb} +0 -0
 - data/lib/ruby_ext/{micelaneous.rb → core/micelaneous.rb} +0 -0
 - data/lib/ruby_ext/{module.rb → core/module.rb} +13 -2
 - data/lib/ruby_ext/{multiple_inheritance.rb → core/multiple_inheritance.rb} +30 -14
 - data/lib/ruby_ext/{must.rb → core/must.rb} +30 -27
 - data/lib/ruby_ext/{not_defined.rb → core/not_defined.rb} +0 -0
 - data/lib/ruby_ext/{object.rb → core/object.rb} +0 -0
 - data/lib/ruby_ext/{open_object.rb → core/open_object.rb} +21 -16
 - data/lib/ruby_ext/{string.rb → core/string.rb} +27 -0
 - data/lib/ruby_ext/{symbol.rb → core/symbol.rb} +0 -0
 - data/lib/ruby_ext/fixes.rb +6 -0
 - data/lib/ruby_ext/gems.rb +0 -1
 - data/lib/ruby_ext/more.rb +11 -0
 - data/lib/ruby_ext/more/declarative_cache.rb +96 -0
 - data/lib/ruby_ext/more/micelaneous.rb +7 -0
 - data/lib/ruby_ext/{observable2.rb → more/observable2.rb} +0 -0
 - data/lib/ruby_ext/{open_constructor.rb → more/open_constructor.rb} +2 -2
 - data/lib/ruby_ext/more/safe_hash.rb +214 -0
 - data/lib/ruby_ext/{synchronize.rb → more/synchronize.rb} +5 -5
 - data/lib/ruby_ext/{tuple.rb → more/tuple.rb} +0 -0
 - data/lib/yaml_fix.rb +9 -0
 - data/readme.md +46 -42
 - data/spec/core/array_spec.rb +7 -0
 - data/spec/{deep_clone_spec.rb → core/deep_clone_spec.rb} +2 -3
 - data/spec/core/enumerable.rb +9 -0
 - data/spec/{kernel_spec.rb → core/kernel_spec.rb} +4 -6
 - data/spec/{kernel_spec → core/kernel_spec}/TheNamespace/ClassA.rb +0 -0
 - data/spec/{kernel_spec → core/kernel_spec}/another_class.rb +0 -0
 - data/spec/{kernel_spec → core/kernel_spec}/the_namespace/class_b.rb +0 -0
 - data/spec/{module_spec.rb → core/module_spec.rb} +2 -4
 - data/spec/{multiple_inheritance_spec.rb → core/multiple_inheritance_spec.rb} +28 -12
 - data/spec/core/must_spec.rb +32 -0
 - data/spec/{open_object_spec.rb → core/open_object_spec.rb} +6 -7
 - data/spec/core/spec_helper.rb +2 -0
 - data/spec/{declarative_cache_spec.rb → more/declarative_cache_spec.rb} +35 -8
 - data/spec/{observable2_spec.rb → more/observable2_spec.rb} +3 -4
 - data/spec/{open_constructor_spec.rb → more/open_constructor_spec.rb} +6 -7
 - data/spec/more/safe_hash_spec.rb +133 -0
 - data/spec/more/spec_helper.rb +2 -0
 - data/spec/{synchronize_spec.rb → more/synchronize_spec.rb} +2 -3
 - metadata +67 -100
 - data/lib/ruby_ext/basic_object.rb +0 -22
 - data/lib/ruby_ext/class.rb +0 -11
 - data/lib/ruby_ext/declarative_cache.rb +0 -85
 - data/lib/ruby_ext/extra_blank_slate.rb +0 -17
 - data/lib/ruby_ext/hash.rb +0 -15
 - data/lib/ruby_ext/prepare_arguments.rb +0 -105
 - data/lib/ruby_ext/prototype_inheritance.rb +0 -110
 - data/lib/ruby_ext/should.rb +0 -166
 - data/lib/rubyopt.rb +0 -7
 - data/spec/_prototype_inheritance_spec.rb +0 -190
 - data/spec/array_spec.rb +0 -8
 - data/spec/must_spec.rb +0 -29
 - data/spec/prepare_arguments_spec.rb +0 -46
 - data/spec/should_spec.rb +0 -24
 - data/spec/spec_helper.rb +0 -19
 
    
        data/Rakefile
    CHANGED
    
    | 
         @@ -1,13 +1,13 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            lib_dir = File.expand_path(File.dirname(__FILE__))
         
     | 
| 
      
 1 
     | 
    
         
            +
            lib_dir = "#{File.expand_path(File.dirname(__FILE__))}/lib"
         
     | 
| 
       2 
2 
     | 
    
         
             
            $LOAD_PATH << lib_dir unless $LOAD_PATH.include? lib_dir
         
     | 
| 
       3 
3 
     | 
    
         | 
| 
       4 
4 
     | 
    
         
             
            require 'rake_ext'
         
     | 
| 
       5 
5 
     | 
    
         | 
| 
       6 
6 
     | 
    
         
             
            project(
         
     | 
| 
       7 
     | 
    
         
            -
              : 
     | 
| 
       8 
     | 
    
         
            -
              : 
     | 
| 
       9 
     | 
    
         
            -
              : 
     | 
| 
      
 7 
     | 
    
         
            +
              name: "ruby_ext",
         
     | 
| 
      
 8 
     | 
    
         
            +
              version: "0.4.12",
         
     | 
| 
      
 9 
     | 
    
         
            +
              summary: "Ruby Extensions",
         
     | 
| 
       10 
10 
     | 
    
         | 
| 
       11 
     | 
    
         
            -
              : 
     | 
| 
       12 
     | 
    
         
            -
              : 
     | 
| 
      
 11 
     | 
    
         
            +
              author: "Alexey Petrushin",
         
     | 
| 
      
 12 
     | 
    
         
            +
              homepage: "http://github.com/alexeypetrushin/ruby_ext"
         
     | 
| 
       13 
13 
     | 
    
         
             
            )
         
     | 
    
        data/lib/rake_ext.rb
    CHANGED
    
    | 
         @@ -6,7 +6,7 @@ require 'fileutils' 
     | 
|
| 
       6 
6 
     | 
    
         
             
            # 
         
     | 
| 
       7 
7 
     | 
    
         
             
            begin
         
     | 
| 
       8 
8 
     | 
    
         
             
              require 'rspec/core/rake_task'
         
     | 
| 
       9 
     | 
    
         
            -
              task : 
     | 
| 
      
 9 
     | 
    
         
            +
              task default: :spec
         
     | 
| 
       10 
10 
     | 
    
         | 
| 
       11 
11 
     | 
    
         
             
              RSpec::Core::RakeTask.new('spec') do |t|
         
     | 
| 
       12 
12 
     | 
    
         
             
                t.pattern = "spec/**/[^_]*_spec.rb"
         
     | 
| 
         @@ -16,7 +16,7 @@ begin 
     | 
|
| 
       16 
16 
     | 
    
         | 
| 
       17 
17 
     | 
    
         
             
                desc "Run RSpec code exapmples in isolated mode (every spec file in another Ruby process)"
         
     | 
| 
       18 
18 
     | 
    
         
             
                task :isolated do
         
     | 
| 
       19 
     | 
    
         
            -
                  Dir.glob("spec 
     | 
| 
      
 19 
     | 
    
         
            +
                  Dir.glob("spec/[^_]**/[^_]*_spec.rb").each do |spec_file|
         
     | 
| 
       20 
20 
     | 
    
         
             
                    Kernel.system "rspec #{spec_file}"
         
     | 
| 
       21 
21 
     | 
    
         
             
                  end
         
     | 
| 
       22 
22 
     | 
    
         
             
                end
         
     | 
| 
         @@ -32,7 +32,7 @@ end 
     | 
|
| 
       32 
32 
     | 
    
         
             
            # 
         
     | 
| 
       33 
33 
     | 
    
         
             
            PROJECT_DIR = (
         
     | 
| 
       34 
34 
     | 
    
         
             
              caller.find{|line| line =~ /\/Rakefile\:/} || 
         
     | 
| 
       35 
     | 
    
         
            -
              raise("You can include the ''  
     | 
| 
      
 35 
     | 
    
         
            +
              raise("You can include the 'rake_ext' only in Rakefile!")
         
     | 
| 
       36 
36 
     | 
    
         
             
            ).sub(/\/Rakefile\:.*/, '')
         
     | 
| 
       37 
37 
     | 
    
         
             
            def project_dir
         
     | 
| 
       38 
38 
     | 
    
         
             
              PROJECT_DIR
         
     | 
| 
         @@ -40,7 +40,7 @@ end 
     | 
|
| 
       40 
40 
     | 
    
         | 
| 
       41 
41 
     | 
    
         | 
| 
       42 
42 
     | 
    
         
             
            # 
         
     | 
| 
       43 
     | 
    
         
            -
            # before  
     | 
| 
      
 43 
     | 
    
         
            +
            # before, after and remove task
         
     | 
| 
       44 
44 
     | 
    
         
             
            # 
         
     | 
| 
       45 
45 
     | 
    
         
             
            def before task_name, &block
         
     | 
| 
       46 
46 
     | 
    
         
             
              @task_counter ||= {}
         
     | 
| 
         @@ -57,6 +57,11 @@ def after task_name, &block 
     | 
|
| 
       57 
57 
     | 
    
         
             
              task task_name, &block
         
     | 
| 
       58 
58 
     | 
    
         
             
            end
         
     | 
| 
       59 
59 
     | 
    
         | 
| 
      
 60 
     | 
    
         
            +
            def remove_task(task_name)
         
     | 
| 
      
 61 
     | 
    
         
            +
              Rake.application.instance_variable_get('@tasks').delete(task_name.to_s)
         
     | 
| 
      
 62 
     | 
    
         
            +
            end
         
     | 
| 
      
 63 
     | 
    
         
            +
            alias :delete_task :remove_task
         
     | 
| 
      
 64 
     | 
    
         
            +
             
     | 
| 
       60 
65 
     | 
    
         | 
| 
       61 
66 
     | 
    
         
             
            # 
         
     | 
| 
       62 
67 
     | 
    
         
             
            # project
         
     | 
| 
         @@ -67,7 +72,7 @@ def project options = nil 
     | 
|
| 
       67 
72 
     | 
    
         
             
                options.each{|k, v| @options[k.to_sym] = v}
         
     | 
| 
       68 
73 
     | 
    
         | 
| 
       69 
74 
     | 
    
         
             
                @options[:name] || raise("project name not defined")
         
     | 
| 
       70 
     | 
    
         
            -
                @options[: 
     | 
| 
      
 75 
     | 
    
         
            +
                @options[:official_name] ||= @options[:name]
         
     | 
| 
       71 
76 
     | 
    
         | 
| 
       72 
77 
     | 
    
         
             
                require 'rake_ext/project'
         
     | 
| 
       73 
78 
     | 
    
         
             
              end
         
     | 
    
        data/lib/rake_ext/project.rb
    CHANGED
    
    | 
         @@ -2,8 +2,9 @@ 
     | 
|
| 
       2 
2 
     | 
    
         
             
            # parse_dependencies_for
         
     | 
| 
       3 
3 
     | 
    
         
             
            # 
         
     | 
| 
       4 
4 
     | 
    
         
             
            def parse_project_gemfile
         
     | 
| 
       5 
     | 
    
         
            -
              required_gems = [] 
     | 
| 
      
 5 
     | 
    
         
            +
              required_gems, required_fake_gems = [], []
         
     | 
| 
       6 
6 
     | 
    
         
             
              gem_file = "#{project_dir}/lib/#{project[:name]}/gems.rb"
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
       7 
8 
     | 
    
         
             
              if File.exist? gem_file
         
     | 
| 
       8 
9 
     | 
    
         
             
                # puts "Parsing gemfile #{gem_file}"
         
     | 
| 
       9 
10 
     | 
    
         | 
| 
         @@ -11,10 +12,12 @@ def parse_project_gemfile 
     | 
|
| 
       11 
12 
     | 
    
         | 
| 
       12 
13 
     | 
    
         
             
                stub_class = Class.new
         
     | 
| 
       13 
14 
     | 
    
         
             
                stub_class.send(:define_method, :gem){|*args| required_gems << args}
         
     | 
| 
       14 
     | 
    
         
            -
                 
     | 
| 
      
 15 
     | 
    
         
            +
                stub_class.send(:define_method, :fake_gem){|*args| required_fake_gems << args}
         
     | 
| 
      
 16 
     | 
    
         
            +
                stub = stub_class.new
         
     | 
| 
       15 
17 
     | 
    
         
             
                stub.instance_eval code, __FILE__, __LINE__
         
     | 
| 
       16 
18 
     | 
    
         
             
              end
         
     | 
| 
       17 
     | 
    
         
            -
               
     | 
| 
      
 19 
     | 
    
         
            +
              
         
     | 
| 
      
 20 
     | 
    
         
            +
              return required_gems, required_fake_gems
         
     | 
| 
       18 
21 
     | 
    
         
             
            end
         
     | 
| 
       19 
22 
     | 
    
         | 
| 
       20 
23 
     | 
    
         | 
| 
         @@ -24,15 +27,30 @@ end 
     | 
|
| 
       24 
27 
     | 
    
         
             
            namespace :gem do
         
     | 
| 
       25 
28 
     | 
    
         
             
              desc "Install gem required by project"
         
     | 
| 
       26 
29 
     | 
    
         
             
              task :install do
         
     | 
| 
       27 
     | 
    
         
            -
                gems = parse_project_gemfile    
         
     | 
| 
      
 30 
     | 
    
         
            +
                gems, fake_gems = parse_project_gemfile    
         
     | 
| 
       28 
31 
     | 
    
         
             
                gems.each do |name, version|
         
     | 
| 
      
 32 
     | 
    
         
            +
                  puts "Installing gem #{name} #{version}"
         
     | 
| 
      
 33 
     | 
    
         
            +
                  %x(gem install #{name}#{" -v #{version}" if version} --ignore-dependencies)
         
     | 
| 
      
 34 
     | 
    
         
            +
                end
         
     | 
| 
      
 35 
     | 
    
         
            +
              end  
         
     | 
| 
      
 36 
     | 
    
         
            +
              
         
     | 
| 
      
 37 
     | 
    
         
            +
              desc "List all gems required by project"
         
     | 
| 
      
 38 
     | 
    
         
            +
              task :list do
         
     | 
| 
      
 39 
     | 
    
         
            +
                puts "Gems required for #{project[:official_name]}:"
         
     | 
| 
      
 40 
     | 
    
         
            +
                gems, fake_gems = parse_project_gemfile
         
     | 
| 
      
 41 
     | 
    
         
            +
                puts(gems + fake_gems)
         
     | 
| 
      
 42 
     | 
    
         
            +
              end
         
     | 
| 
      
 43 
     | 
    
         
            +
              
         
     | 
| 
      
 44 
     | 
    
         
            +
              desc "Install all gem required by project (including fake gems)"
         
     | 
| 
      
 45 
     | 
    
         
            +
              task :install_all do
         
     | 
| 
      
 46 
     | 
    
         
            +
                gems, fake_gems = parse_project_gemfile    
         
     | 
| 
      
 47 
     | 
    
         
            +
                (gems + fake_gems).each do |name, version|
         
     | 
| 
       29 
48 
     | 
    
         
             
                  puts "Installing gem #{name} #{version}"
         
     | 
| 
       30 
49 
     | 
    
         
             
                  %x(gem install #{name} #{"-v #{version}" if version})
         
     | 
| 
       31 
50 
     | 
    
         
             
                end
         
     | 
| 
       32 
51 
     | 
    
         
             
              end
         
     | 
| 
       33 
52 
     | 
    
         
             
            end
         
     | 
| 
       34 
53 
     | 
    
         | 
| 
       35 
     | 
    
         
            -
             
     | 
| 
       36 
54 
     | 
    
         
             
            # 
         
     | 
| 
       37 
55 
     | 
    
         
             
            # Gem Spec, for sample look at Rakefile
         
     | 
| 
       38 
56 
     | 
    
         
             
            # 
         
     | 
| 
         @@ -42,17 +60,20 @@ require 'tmpdir' 
     | 
|
| 
       42 
60 
     | 
    
         | 
| 
       43 
61 
     | 
    
         
             
            namespace :gem do
         
     | 
| 
       44 
62 
     | 
    
         
             
              spec = Gem::Specification.new do |s|
         
     | 
| 
       45 
     | 
    
         
            -
                gems = parse_project_gemfile
         
     | 
| 
      
 63 
     | 
    
         
            +
                gems, fake_gems = parse_project_gemfile
         
     | 
| 
      
 64 
     | 
    
         
            +
                gems = gems + fake_gems
         
     | 
| 
      
 65 
     | 
    
         
            +
                
         
     | 
| 
       46 
66 
     | 
    
         
             
                gems.each{|name_version| s.add_dependency *name_version}
         
     | 
| 
       47 
67 
     | 
    
         | 
| 
       48 
68 
     | 
    
         
             
                options = project.clone
         
     | 
| 
       49 
69 
     | 
    
         | 
| 
       50 
70 
     | 
    
         
             
                options.delete(:name)
         
     | 
| 
       51 
     | 
    
         
            -
                s.name = options.delete(: 
     | 
| 
      
 71 
     | 
    
         
            +
                s.name = options.delete(:official_name)
         
     | 
| 
       52 
72 
     | 
    
         
             
                s.platform = options.delete(:platform) || Gem::Platform::RUBY
         
     | 
| 
       53 
73 
     | 
    
         
             
                s.has_rdoc = options.delete(:has_rdoc) == nil ? false : true
         
     | 
| 
       54 
74 
     | 
    
         
             
                s.require_path = options.delete(:lib) || "lib"
         
     | 
| 
       55 
75 
     | 
    
         
             
                s.files = options.delete(:files) || (%w{Rakefile readme.md} + Dir.glob("{lib,spec}/**/*"))
         
     | 
| 
      
 76 
     | 
    
         
            +
                s.bindir = options.delete(:bin) if options.include? :bin
         
     | 
| 
       56 
77 
     | 
    
         | 
| 
       57 
78 
     | 
    
         
             
                # s.name = options[:name)
         
     | 
| 
       58 
79 
     | 
    
         
             
                # s.author = options[:author)
         
     | 
| 
         @@ -61,7 +82,7 @@ namespace :gem do 
     | 
|
| 
       61 
82 
     | 
    
         
             
                options.each{|k, v| s.send "#{k}=", v}    
         
     | 
| 
       62 
83 
     | 
    
         
             
              end
         
     | 
| 
       63 
84 
     | 
    
         | 
| 
       64 
     | 
    
         
            -
              package_dir = Dir.tmpdir + "/#{project[: 
     | 
| 
      
 85 
     | 
    
         
            +
              package_dir = Dir.tmpdir + "/#{project[:official_name]}_tmp"
         
     | 
| 
       65 
86 
     | 
    
         
             
              Rake::GemPackageTask.new(spec) do |p|
         
     | 
| 
       66 
87 
     | 
    
         
             
                p.need_tar = true if RUBY_PLATFORM !~ /mswin/
         
     | 
| 
       67 
88 
     | 
    
         
             
                p.need_zip = true
         
     | 
| 
         @@ -69,7 +90,7 @@ namespace :gem do 
     | 
|
| 
       69 
90 
     | 
    
         
             
              end
         
     | 
| 
       70 
91 
     | 
    
         | 
| 
       71 
92 
     | 
    
         
             
              task :push do
         
     | 
| 
       72 
     | 
    
         
            -
                gem_file = Dir.glob("#{package_dir}/#{project[: 
     | 
| 
      
 93 
     | 
    
         
            +
                gem_file = Dir.glob("#{package_dir}/#{project[:official_name]}*.gem").first
         
     | 
| 
       73 
94 
     | 
    
         
             
                system "gem push #{gem_file}"
         
     | 
| 
       74 
95 
     | 
    
         
             
              end
         
     | 
| 
       75 
96 
     | 
    
         | 
| 
         @@ -77,12 +98,6 @@ namespace :gem do 
     | 
|
| 
       77 
98 
     | 
    
         
             
                system "rm -r #{package_dir}"
         
     | 
| 
       78 
99 
     | 
    
         
             
              end
         
     | 
| 
       79 
100 
     | 
    
         | 
| 
       80 
     | 
    
         
            -
              desc "List all gems required by project"
         
     | 
| 
       81 
     | 
    
         
            -
              task :list do
         
     | 
| 
       82 
     | 
    
         
            -
                puts "Gems required for #{project[:gem_name]}:"
         
     | 
| 
       83 
     | 
    
         
            -
                puts parse_project_gemfile
         
     | 
| 
       84 
     | 
    
         
            -
              end
         
     | 
| 
       85 
     | 
    
         
            -
                
         
     | 
| 
       86 
101 
     | 
    
         
             
              desc "Build and publish project as gem"
         
     | 
| 
       87 
     | 
    
         
            -
              task : 
     | 
| 
      
 102 
     | 
    
         
            +
              task release: [:gem, :push, :clean]
         
     | 
| 
       88 
103 
     | 
    
         
             
            end
         
     | 
    
        data/lib/rspec_ext.rb
    CHANGED
    
    | 
         @@ -2,42 +2,105 @@ require 'rspec' 
     | 
|
| 
       2 
2 
     | 
    
         
             
            require 'fileutils'
         
     | 
| 
       3 
3 
     | 
    
         | 
| 
       4 
4 
     | 
    
         
             
            RSpec.configure do |c|
         
     | 
| 
       5 
     | 
    
         
            -
              c.filter_run : 
     | 
| 
      
 5 
     | 
    
         
            +
              c.filter_run focus: true
         
     | 
| 
       6 
6 
     | 
    
         
             
              c.run_all_when_everything_filtered = true
         
     | 
| 
       7 
7 
     | 
    
         
             
            end
         
     | 
| 
       8 
8 
     | 
    
         | 
| 
       9 
     | 
    
         
            -
             
     | 
| 
      
 9 
     | 
    
         
            +
            def rspec &block
         
     | 
| 
      
 10 
     | 
    
         
            +
              RSpec::Core::ExampleGroup.class_eval &block if block
         
     | 
| 
      
 11 
     | 
    
         
            +
              return RSpec::Core::ExampleGroup
         
     | 
| 
      
 12 
     | 
    
         
            +
            end
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
            rspec do
         
     | 
| 
      
 15 
     | 
    
         
            +
              def self.define_matcher *args, &block
         
     | 
| 
      
 16 
     | 
    
         
            +
                RSpec::Matchers.define *args do |expected|
         
     | 
| 
      
 17 
     | 
    
         
            +
                  match do |actual|
         
     | 
| 
      
 18 
     | 
    
         
            +
                    block.call actual, expected if block
         
     | 
| 
      
 19 
     | 
    
         
            +
                  end
         
     | 
| 
      
 20 
     | 
    
         
            +
                end
         
     | 
| 
      
 21 
     | 
    
         
            +
              end
         
     | 
| 
      
 22 
     | 
    
         
            +
            end
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
            rspec do
         
     | 
| 
      
 25 
     | 
    
         
            +
              def self.with_load_path *args
         
     | 
| 
      
 26 
     | 
    
         
            +
                list = if args.first.is_a? Array
         
     | 
| 
      
 27 
     | 
    
         
            +
                  args.first
         
     | 
| 
      
 28 
     | 
    
         
            +
                else
         
     | 
| 
      
 29 
     | 
    
         
            +
                  args
         
     | 
| 
      
 30 
     | 
    
         
            +
                end
         
     | 
| 
      
 31 
     | 
    
         
            +
                
         
     | 
| 
      
 32 
     | 
    
         
            +
                before(:all){list.each{|path| $LOAD_PATH << path}}
         
     | 
| 
      
 33 
     | 
    
         
            +
                after(:all){list.each{|path| $LOAD_PATH.delete path}}
         
     | 
| 
      
 34 
     | 
    
         
            +
              end
         
     | 
| 
      
 35 
     | 
    
         
            +
              
         
     | 
| 
      
 36 
     | 
    
         
            +
              def self.with_tmp_spec_dir *args
         
     | 
| 
      
 37 
     | 
    
         
            +
                options = args.last.is_a?(Hash) ? args.pop : {}
         
     | 
| 
      
 38 
     | 
    
         
            +
                dir = args.first || self.spec_dir
         
     | 
| 
      
 39 
     | 
    
         
            +
                
         
     | 
| 
      
 40 
     | 
    
         
            +
                options[:before] ||= :all
         
     | 
| 
      
 41 
     | 
    
         
            +
                tmp_dir = "/tmp/#{dir.split('/').last}"
         
     | 
| 
      
 42 
     | 
    
         
            +
                
         
     | 
| 
      
 43 
     | 
    
         
            +
                before options do
         
     | 
| 
      
 44 
     | 
    
         
            +
                  FileUtils.rm_r tmp_dir if File.exist? tmp_dir
         
     | 
| 
      
 45 
     | 
    
         
            +
                  FileUtils.cp_r dir, tmp_dir
         
     | 
| 
      
 46 
     | 
    
         
            +
                  @spec_dir = tmp_dir
         
     | 
| 
      
 47 
     | 
    
         
            +
                end
         
     | 
| 
      
 48 
     | 
    
         
            +
                
         
     | 
| 
      
 49 
     | 
    
         
            +
                after options do      
         
     | 
| 
      
 50 
     | 
    
         
            +
                  FileUtils.rm_r tmp_dir if File.exist? tmp_dir
         
     | 
| 
      
 51 
     | 
    
         
            +
                  @spec_dir = nil
         
     | 
| 
      
 52 
     | 
    
         
            +
                end  
         
     | 
| 
      
 53 
     | 
    
         
            +
                
         
     | 
| 
      
 54 
     | 
    
         
            +
                tmp_dir
         
     | 
| 
      
 55 
     | 
    
         
            +
              end
         
     | 
| 
      
 56 
     | 
    
         
            +
              
         
     | 
| 
      
 57 
     | 
    
         
            +
              def self.with_spec_dir dir
         
     | 
| 
      
 58 
     | 
    
         
            +
                before(:all){@spec_dir = dir}
         
     | 
| 
      
 59 
     | 
    
         
            +
                after(:all){@spec_dir = nil}
         
     | 
| 
      
 60 
     | 
    
         
            +
              end
         
     | 
| 
      
 61 
     | 
    
         
            +
              
         
     | 
| 
      
 62 
     | 
    
         
            +
              # def self.with_spec_dir
         
     | 
| 
      
 63 
     | 
    
         
            +
                
         
     | 
| 
      
 64 
     | 
    
         
            +
              # def self.spec_dir dir = nil
         
     | 
| 
      
 65 
     | 
    
         
            +
              #   @spec_dir ||= calculate_spec_dir_for_current_caller
         
     | 
| 
      
 66 
     | 
    
         
            +
              # end
         
     | 
| 
      
 67 
     | 
    
         
            +
              
         
     | 
| 
      
 68 
     | 
    
         
            +
              def self.spec_dir
         
     | 
| 
      
 69 
     | 
    
         
            +
                self.calculate_default_spec_dir || raise(":spec_dir not defined!")
         
     | 
| 
      
 70 
     | 
    
         
            +
              end
         
     | 
| 
      
 71 
     | 
    
         
            +
              
         
     | 
| 
      
 72 
     | 
    
         
            +
              def spec_dir
         
     | 
| 
      
 73 
     | 
    
         
            +
                @spec_dir || self.class.spec_dir
         
     | 
| 
      
 74 
     | 
    
         
            +
              end
         
     | 
| 
      
 75 
     | 
    
         
            +
              
         
     | 
| 
      
 76 
     | 
    
         
            +
              def self.calculate_default_spec_dir
         
     | 
| 
      
 77 
     | 
    
         
            +
                spec_file_name = caller.find{|line| line =~ /_spec\.rb\:/}
         
     | 
| 
      
 78 
     | 
    
         
            +
                return nil unless spec_file_name    
         
     | 
| 
      
 79 
     | 
    
         
            +
                spec_dir = spec_file_name.sub(/\.rb\:.*/, '')
         
     | 
| 
      
 80 
     | 
    
         
            +
                raise "spec dir not exist (#{spec_dir})!" unless File.exist? spec_dir
         
     | 
| 
      
 81 
     | 
    
         
            +
                spec_dir
         
     | 
| 
      
 82 
     | 
    
         
            +
              end
         
     | 
| 
      
 83 
     | 
    
         
            +
              
         
     | 
| 
       10 
84 
     | 
    
         
             
              def remove_constants *args
         
     | 
| 
       11 
85 
     | 
    
         
             
                args = args.first if args.size == 1 and args.first.is_a?(Array)
         
     | 
| 
       12 
86 
     | 
    
         
             
                args.each{|c| Object.send :remove_const, c if Object.const_defined? c}       
         
     | 
| 
       13 
87 
     | 
    
         
             
              end
         
     | 
| 
       14 
88 
     | 
    
         | 
| 
       15 
     | 
    
         
            -
              def  
     | 
| 
       16 
     | 
    
         
            -
             
     | 
| 
       17 
     | 
    
         
            -
             
     | 
| 
       18 
     | 
    
         
            -
             
     | 
| 
       19 
     | 
    
         
            -
                FileUtils.rm_r dir if File.exist? dir
         
     | 
| 
       20 
     | 
    
         
            -
                FileUtils.cp_r original_data_dir, dir
         
     | 
| 
       21 
     | 
    
         
            -
             
     | 
| 
       22 
     | 
    
         
            -
                dir
         
     | 
| 
       23 
     | 
    
         
            -
              end
         
     | 
| 
       24 
     | 
    
         
            -
             
     | 
| 
       25 
     | 
    
         
            -
              def clean_spec_data spec_file_name
         
     | 
| 
       26 
     | 
    
         
            -
                dir = spec_file_name.sub(/\.rb$/, '')
         
     | 
| 
       27 
     | 
    
         
            -
                FileUtils.rm_r dir if File.exist? dir
         
     | 
| 
       28 
     | 
    
         
            -
              end
         
     | 
| 
      
 89 
     | 
    
         
            +
              # def spec_tmp_dir
         
     | 
| 
      
 90 
     | 
    
         
            +
              #   $spec_tmp_dir || raise("you should call :with_tmp_spec_dir to be able to use :spec_tmp_dir!")
         
     | 
| 
      
 91 
     | 
    
         
            +
              # end
         
     | 
| 
       29 
92 
     | 
    
         
             
            end
         
     | 
| 
       30 
93 
     | 
    
         | 
| 
       31 
94 
     | 
    
         
             
            class String
         
     | 
| 
       32 
     | 
    
         
            -
               
     | 
| 
      
 95 
     | 
    
         
            +
              unless "".respond_to? :dirname
         
     | 
| 
       33 
96 
     | 
    
         
             
                def dirname
         
     | 
| 
       34 
97 
     | 
    
         
             
                  File.expand_path(File.dirname(self))
         
     | 
| 
       35 
98 
     | 
    
         
             
                end
         
     | 
| 
       36 
     | 
    
         
            -
               
     | 
| 
      
 99 
     | 
    
         
            +
              end
         
     | 
| 
       37 
100 
     | 
    
         | 
| 
       38 
101 
     | 
    
         
             
              unless "".respond_to? :parent_dirname
         
     | 
| 
       39 
102 
     | 
    
         
             
                def parent_dirname
         
     | 
| 
       40 
     | 
    
         
            -
                  File.expand_path( 
     | 
| 
      
 103 
     | 
    
         
            +
                  File.expand_path(self + "/..")
         
     | 
| 
       41 
104 
     | 
    
         
             
                end
         
     | 
| 
       42 
105 
     | 
    
         
             
              end
         
     | 
| 
       43 
106 
     | 
    
         
             
            end
         
     | 
    
        data/lib/ruby_ext.rb
    CHANGED
    
    | 
         @@ -1,52 +1 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            require  
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
            core = [
         
     | 
| 
       4 
     | 
    
         
            -
              'facets/array/indexable', # Array first!, last!
         
     | 
| 
       5 
     | 
    
         
            -
              'facets/enumerable/every',
         
     | 
| 
       6 
     | 
    
         
            -
              'facets/enumerable/group_by',
         
     | 
| 
       7 
     | 
    
         
            -
              'facets/exception/detail', # pretty print
         
     | 
| 
       8 
     | 
    
         
            -
              'facets/object/dup', # false.dup(), false.clone() and so on.
         
     | 
| 
       9 
     | 
    
         
            -
              'facets/kernel/blank',
         
     | 
| 
       10 
     | 
    
         
            -
              'facets/numeric/round.rb', # round_at, round_to
         
     | 
| 
       11 
     | 
    
         
            -
              'facets/hash',
         
     | 
| 
       12 
     | 
    
         
            -
              'facets/string/interpolate',
         
     | 
| 
       13 
     | 
    
         
            -
              # 'facets/ostruct',
         
     | 
| 
       14 
     | 
    
         
            -
              # 'facets/openobject' it has broken implementation and is completelly rewritend in ruby-ext
         
     | 
| 
       15 
     | 
    
         
            -
            ]
         
     | 
| 
       16 
     | 
    
         
            -
             
     | 
| 
       17 
     | 
    
         
            -
            more = [
         
     | 
| 
       18 
     | 
    
         
            -
              # 'facets/basicobject', causes problem with rspec
         
     | 
| 
       19 
     | 
    
         
            -
              # 'facets/opencascade', causes problem with redefined OpenObject
         
     | 
| 
       20 
     | 
    
         
            -
            ]
         
     | 
| 
       21 
     | 
    
         
            -
             
     | 
| 
       22 
     | 
    
         
            -
            (core + more).each{|f| require f}
         
     | 
| 
       23 
     | 
    
         
            -
             
     | 
| 
       24 
     | 
    
         
            -
            {
         
     | 
| 
       25 
     | 
    
         
            -
              :BasicObject => 'basic_object',
         
     | 
| 
       26 
     | 
    
         
            -
              :OpenObject => 'open_object',
         
     | 
| 
       27 
     | 
    
         
            -
              :OpenConstructor => 'open_constructor',
         
     | 
| 
       28 
     | 
    
         
            -
              :Observable2 => 'observable2',
         
     | 
| 
       29 
     | 
    
         
            -
              :ExtraBlankSlate => 'extra_blank_slate', # do I need it?  
         
     | 
| 
       30 
     | 
    
         
            -
              :Tuple => 'tuple',
         
     | 
| 
       31 
     | 
    
         
            -
            }.each{|klass, file| Kernel.autoload klass, "ruby_ext/#{file}"}
         
     | 
| 
       32 
     | 
    
         
            -
             
     | 
| 
       33 
     | 
    
         
            -
            %w{
         
     | 
| 
       34 
     | 
    
         
            -
              file
         
     | 
| 
       35 
     | 
    
         
            -
              array
         
     | 
| 
       36 
     | 
    
         
            -
              hash
         
     | 
| 
       37 
     | 
    
         
            -
              kernel 
         
     | 
| 
       38 
     | 
    
         
            -
              module
         
     | 
| 
       39 
     | 
    
         
            -
              not_defined
         
     | 
| 
       40 
     | 
    
         
            -
              object
         
     | 
| 
       41 
     | 
    
         
            -
              class
         
     | 
| 
       42 
     | 
    
         
            -
              string
         
     | 
| 
       43 
     | 
    
         
            -
              symbol
         
     | 
| 
       44 
     | 
    
         
            -
              
         
     | 
| 
       45 
     | 
    
         
            -
              deep_clone  
         
     | 
| 
       46 
     | 
    
         
            -
              declarative_cache
         
     | 
| 
       47 
     | 
    
         
            -
              must
         
     | 
| 
       48 
     | 
    
         
            -
              prepare_arguments  
         
     | 
| 
       49 
     | 
    
         
            -
              synchronize
         
     | 
| 
       50 
     | 
    
         
            -
              micelaneous
         
     | 
| 
       51 
     | 
    
         
            -
              multiple_inheritance
         
     | 
| 
       52 
     | 
    
         
            -
            }.each{|f| require "ruby_ext/#{f}"}
         
     | 
| 
      
 1 
     | 
    
         
            +
            require "ruby_ext/more"
         
     | 
| 
         @@ -0,0 +1,24 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            raise 'ruby 1.9.2 or higher required!' if RUBY_VERSION < '1.9.2'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            require 'ruby_ext/gems'
         
     | 
| 
      
 4 
     | 
    
         
            +
            require 'ruby_ext/fixes'
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
            %w(
         
     | 
| 
      
 7 
     | 
    
         
            +
              basic_object
         
     | 
| 
      
 8 
     | 
    
         
            +
              file
         
     | 
| 
      
 9 
     | 
    
         
            +
              enumerable
         
     | 
| 
      
 10 
     | 
    
         
            +
              array
         
     | 
| 
      
 11 
     | 
    
         
            +
              hash
         
     | 
| 
      
 12 
     | 
    
         
            +
              kernel
         
     | 
| 
      
 13 
     | 
    
         
            +
              object    
         
     | 
| 
      
 14 
     | 
    
         
            +
              module
         
     | 
| 
      
 15 
     | 
    
         
            +
              not_defined  
         
     | 
| 
      
 16 
     | 
    
         
            +
              class
         
     | 
| 
      
 17 
     | 
    
         
            +
              string
         
     | 
| 
      
 18 
     | 
    
         
            +
              symbol  
         
     | 
| 
      
 19 
     | 
    
         
            +
              must
         
     | 
| 
      
 20 
     | 
    
         
            +
              open_object
         
     | 
| 
      
 21 
     | 
    
         
            +
              deep_clone
         
     | 
| 
      
 22 
     | 
    
         
            +
              multiple_inheritance
         
     | 
| 
      
 23 
     | 
    
         
            +
              micelaneous
         
     | 
| 
      
 24 
     | 
    
         
            +
            ).each{|f| require "ruby_ext/core/#{f}"} 
         
     | 
| 
         @@ -1,4 +1,4 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            class Array
         
     | 
| 
      
 1 
     | 
    
         
            +
            class Array    
         
     | 
| 
       2 
2 
     | 
    
         
             
              def sfilter *filters
         
     | 
| 
       3 
3 
     | 
    
         
             
                filters = filters.first if filters.size == 1 and filters.first.is_a?(Array)
         
     | 
| 
       4 
4 
     | 
    
         
             
                filters.collect!{|o| o.is_a?(Regexp) ? o : /#{Regexp.escape o}/}
         
     | 
| 
         @@ -9,5 +9,7 @@ class Array 
     | 
|
| 
       9 
9 
     | 
    
         | 
| 
       10 
10 
     | 
    
         
             
              def self.wrap value
         
     | 
| 
       11 
11 
     | 
    
         
             
                Array(value)
         
     | 
| 
       12 
     | 
    
         
            -
              end
         
     | 
| 
      
 12 
     | 
    
         
            +
              end    
         
     | 
| 
      
 13 
     | 
    
         
            +
              
         
     | 
| 
      
 14 
     | 
    
         
            +
              alias_method :filter, :select
         
     | 
| 
       13 
15 
     | 
    
         
             
            end
         
     | 
| 
         
            File without changes
         
     | 
| 
         @@ -0,0 +1,17 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module Enumerable
         
     | 
| 
      
 2 
     | 
    
         
            +
              class EveryProxy < BasicObject
         
     | 
| 
      
 3 
     | 
    
         
            +
                def initialize enumerable
         
     | 
| 
      
 4 
     | 
    
         
            +
                  @enumerable = enumerable
         
     | 
| 
      
 5 
     | 
    
         
            +
                end
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
                protected
         
     | 
| 
      
 8 
     | 
    
         
            +
                  def method_missing m, *a, &b
         
     | 
| 
      
 9 
     | 
    
         
            +
                    @enumerable.each{|o| o.send m, *a, &b}
         
     | 
| 
      
 10 
     | 
    
         
            +
                    self
         
     | 
| 
      
 11 
     | 
    
         
            +
                  end
         
     | 
| 
      
 12 
     | 
    
         
            +
              end
         
     | 
| 
      
 13 
     | 
    
         
            +
              
         
     | 
| 
      
 14 
     | 
    
         
            +
              def every
         
     | 
| 
      
 15 
     | 
    
         
            +
                EveryProxy.new(self)
         
     | 
| 
      
 16 
     | 
    
         
            +
              end
         
     | 
| 
      
 17 
     | 
    
         
            +
            end
         
     |