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.
Files changed (69) hide show
  1. data/Rakefile +6 -6
  2. data/lib/rake_ext.rb +10 -5
  3. data/lib/rake_ext/project.rb +31 -16
  4. data/lib/rspec_ext.rb +82 -19
  5. data/lib/ruby_ext.rb +1 -52
  6. data/lib/ruby_ext/core.rb +24 -0
  7. data/lib/ruby_ext/{array.rb → core/array.rb} +4 -2
  8. data/lib/ruby_ext/core/basic_object.rb +8 -0
  9. data/lib/ruby_ext/core/class.rb +0 -0
  10. data/lib/ruby_ext/{deep_clone.rb → core/deep_clone.rb} +3 -4
  11. data/lib/ruby_ext/core/enumerable.rb +17 -0
  12. data/lib/ruby_ext/{file.rb → core/file.rb} +5 -2
  13. data/lib/ruby_ext/core/hash.rb +23 -0
  14. data/lib/ruby_ext/{kernel.rb → core/kernel.rb} +0 -0
  15. data/lib/ruby_ext/{micelaneous.rb → core/micelaneous.rb} +0 -0
  16. data/lib/ruby_ext/{module.rb → core/module.rb} +13 -2
  17. data/lib/ruby_ext/{multiple_inheritance.rb → core/multiple_inheritance.rb} +30 -14
  18. data/lib/ruby_ext/{must.rb → core/must.rb} +30 -27
  19. data/lib/ruby_ext/{not_defined.rb → core/not_defined.rb} +0 -0
  20. data/lib/ruby_ext/{object.rb → core/object.rb} +0 -0
  21. data/lib/ruby_ext/{open_object.rb → core/open_object.rb} +21 -16
  22. data/lib/ruby_ext/{string.rb → core/string.rb} +27 -0
  23. data/lib/ruby_ext/{symbol.rb → core/symbol.rb} +0 -0
  24. data/lib/ruby_ext/fixes.rb +6 -0
  25. data/lib/ruby_ext/gems.rb +0 -1
  26. data/lib/ruby_ext/more.rb +11 -0
  27. data/lib/ruby_ext/more/declarative_cache.rb +96 -0
  28. data/lib/ruby_ext/more/micelaneous.rb +7 -0
  29. data/lib/ruby_ext/{observable2.rb → more/observable2.rb} +0 -0
  30. data/lib/ruby_ext/{open_constructor.rb → more/open_constructor.rb} +2 -2
  31. data/lib/ruby_ext/more/safe_hash.rb +214 -0
  32. data/lib/ruby_ext/{synchronize.rb → more/synchronize.rb} +5 -5
  33. data/lib/ruby_ext/{tuple.rb → more/tuple.rb} +0 -0
  34. data/lib/yaml_fix.rb +9 -0
  35. data/readme.md +46 -42
  36. data/spec/core/array_spec.rb +7 -0
  37. data/spec/{deep_clone_spec.rb → core/deep_clone_spec.rb} +2 -3
  38. data/spec/core/enumerable.rb +9 -0
  39. data/spec/{kernel_spec.rb → core/kernel_spec.rb} +4 -6
  40. data/spec/{kernel_spec → core/kernel_spec}/TheNamespace/ClassA.rb +0 -0
  41. data/spec/{kernel_spec → core/kernel_spec}/another_class.rb +0 -0
  42. data/spec/{kernel_spec → core/kernel_spec}/the_namespace/class_b.rb +0 -0
  43. data/spec/{module_spec.rb → core/module_spec.rb} +2 -4
  44. data/spec/{multiple_inheritance_spec.rb → core/multiple_inheritance_spec.rb} +28 -12
  45. data/spec/core/must_spec.rb +32 -0
  46. data/spec/{open_object_spec.rb → core/open_object_spec.rb} +6 -7
  47. data/spec/core/spec_helper.rb +2 -0
  48. data/spec/{declarative_cache_spec.rb → more/declarative_cache_spec.rb} +35 -8
  49. data/spec/{observable2_spec.rb → more/observable2_spec.rb} +3 -4
  50. data/spec/{open_constructor_spec.rb → more/open_constructor_spec.rb} +6 -7
  51. data/spec/more/safe_hash_spec.rb +133 -0
  52. data/spec/more/spec_helper.rb +2 -0
  53. data/spec/{synchronize_spec.rb → more/synchronize_spec.rb} +2 -3
  54. metadata +67 -100
  55. data/lib/ruby_ext/basic_object.rb +0 -22
  56. data/lib/ruby_ext/class.rb +0 -11
  57. data/lib/ruby_ext/declarative_cache.rb +0 -85
  58. data/lib/ruby_ext/extra_blank_slate.rb +0 -17
  59. data/lib/ruby_ext/hash.rb +0 -15
  60. data/lib/ruby_ext/prepare_arguments.rb +0 -105
  61. data/lib/ruby_ext/prototype_inheritance.rb +0 -110
  62. data/lib/ruby_ext/should.rb +0 -166
  63. data/lib/rubyopt.rb +0 -7
  64. data/spec/_prototype_inheritance_spec.rb +0 -190
  65. data/spec/array_spec.rb +0 -8
  66. data/spec/must_spec.rb +0 -29
  67. data/spec/prepare_arguments_spec.rb +0 -46
  68. data/spec/should_spec.rb +0 -24
  69. data/spec/spec_helper.rb +0 -19
@@ -0,0 +1,2 @@
1
+ require 'core/spec_helper'
2
+ require 'ruby_ext/more'
@@ -1,5 +1,4 @@
1
- require "spec_helper"
2
- require "ruby_ext/synchronize"
1
+ require "more/spec_helper"
3
2
 
4
3
  describe "Synchronize" do
5
4
  it "synchronize_method" do
@@ -75,6 +74,6 @@ describe "Synchronize" do
75
74
  def a; end
76
75
  end
77
76
  SAccount4.synchronize_method :a
78
- lambda{SAccount4.synchronize_method :a}.should raise_error(/twice/)
77
+ -> {SAccount4.synchronize_method :a}.should raise_error(/twice/)
79
78
  end
80
79
  end
metadata CHANGED
@@ -1,132 +1,99 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: ruby_ext
3
- version: !ruby/object:Gem::Version
4
- hash: 25
5
- prerelease: false
6
- segments:
7
- - 0
8
- - 4
9
- - 11
10
- version: 0.4.11
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.4.12
5
+ prerelease:
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - Alexey Petrushin
14
9
  autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
-
18
- date: 2010-10-15 00:00:00 +04:00
12
+ date: 2011-06-12 00:00:00.000000000 +04:00
19
13
  default_executable:
20
- dependencies:
21
- - !ruby/object:Gem::Dependency
22
- name: facets
23
- prerelease: false
24
- requirement: &id001 !ruby/object:Gem::Requirement
25
- none: false
26
- requirements:
27
- - - "="
28
- - !ruby/object:Gem::Version
29
- hash: 43
30
- segments:
31
- - 2
32
- - 9
33
- - 0
34
- version: 2.9.0
35
- type: :runtime
36
- version_requirements: *id001
14
+ dependencies: []
37
15
  description:
38
16
  email:
39
17
  executables: []
40
-
41
18
  extensions: []
42
-
43
19
  extra_rdoc_files: []
44
-
45
- files:
20
+ files:
46
21
  - Rakefile
47
22
  - readme.md
48
23
  - lib/rake_ext/project.rb
49
24
  - lib/rake_ext.rb
50
25
  - lib/rspec_ext.rb
51
- - lib/ruby_ext/array.rb
52
- - lib/ruby_ext/basic_object.rb
53
- - lib/ruby_ext/class.rb
54
- - lib/ruby_ext/declarative_cache.rb
55
- - lib/ruby_ext/deep_clone.rb
56
- - lib/ruby_ext/extra_blank_slate.rb
57
- - lib/ruby_ext/file.rb
26
+ - lib/ruby_ext/core/array.rb
27
+ - lib/ruby_ext/core/basic_object.rb
28
+ - lib/ruby_ext/core/class.rb
29
+ - lib/ruby_ext/core/deep_clone.rb
30
+ - lib/ruby_ext/core/enumerable.rb
31
+ - lib/ruby_ext/core/file.rb
32
+ - lib/ruby_ext/core/hash.rb
33
+ - lib/ruby_ext/core/kernel.rb
34
+ - lib/ruby_ext/core/micelaneous.rb
35
+ - lib/ruby_ext/core/module.rb
36
+ - lib/ruby_ext/core/multiple_inheritance.rb
37
+ - lib/ruby_ext/core/must.rb
38
+ - lib/ruby_ext/core/not_defined.rb
39
+ - lib/ruby_ext/core/object.rb
40
+ - lib/ruby_ext/core/open_object.rb
41
+ - lib/ruby_ext/core/string.rb
42
+ - lib/ruby_ext/core/symbol.rb
43
+ - lib/ruby_ext/core.rb
44
+ - lib/ruby_ext/fixes.rb
58
45
  - lib/ruby_ext/gems.rb
59
- - lib/ruby_ext/hash.rb
60
- - lib/ruby_ext/kernel.rb
61
- - lib/ruby_ext/micelaneous.rb
62
- - lib/ruby_ext/module.rb
63
- - lib/ruby_ext/multiple_inheritance.rb
64
- - lib/ruby_ext/must.rb
65
- - lib/ruby_ext/not_defined.rb
66
- - lib/ruby_ext/object.rb
67
- - lib/ruby_ext/observable2.rb
68
- - lib/ruby_ext/open_constructor.rb
69
- - lib/ruby_ext/open_object.rb
70
- - lib/ruby_ext/prepare_arguments.rb
71
- - lib/ruby_ext/prototype_inheritance.rb
72
- - lib/ruby_ext/should.rb
73
- - lib/ruby_ext/string.rb
74
- - lib/ruby_ext/symbol.rb
75
- - lib/ruby_ext/synchronize.rb
76
- - lib/ruby_ext/tuple.rb
46
+ - lib/ruby_ext/more/declarative_cache.rb
47
+ - lib/ruby_ext/more/micelaneous.rb
48
+ - lib/ruby_ext/more/observable2.rb
49
+ - lib/ruby_ext/more/open_constructor.rb
50
+ - lib/ruby_ext/more/safe_hash.rb
51
+ - lib/ruby_ext/more/synchronize.rb
52
+ - lib/ruby_ext/more/tuple.rb
53
+ - lib/ruby_ext/more.rb
77
54
  - lib/ruby_ext.rb
78
- - lib/rubyopt.rb
79
- - spec/_prototype_inheritance_spec.rb
80
- - spec/array_spec.rb
81
- - spec/declarative_cache_spec.rb
82
- - spec/deep_clone_spec.rb
83
- - spec/kernel_spec/another_class.rb
84
- - spec/kernel_spec/the_namespace/class_b.rb
85
- - spec/kernel_spec/TheNamespace/ClassA.rb
86
- - spec/kernel_spec.rb
87
- - spec/module_spec.rb
88
- - spec/multiple_inheritance_spec.rb
89
- - spec/must_spec.rb
90
- - spec/observable2_spec.rb
91
- - spec/open_constructor_spec.rb
92
- - spec/open_object_spec.rb
93
- - spec/prepare_arguments_spec.rb
94
- - spec/should_spec.rb
95
- - spec/spec_helper.rb
96
- - spec/synchronize_spec.rb
55
+ - lib/yaml_fix.rb
56
+ - spec/core/array_spec.rb
57
+ - spec/core/deep_clone_spec.rb
58
+ - spec/core/enumerable.rb
59
+ - spec/core/kernel_spec/another_class.rb
60
+ - spec/core/kernel_spec/the_namespace/class_b.rb
61
+ - spec/core/kernel_spec/TheNamespace/ClassA.rb
62
+ - spec/core/kernel_spec.rb
63
+ - spec/core/module_spec.rb
64
+ - spec/core/multiple_inheritance_spec.rb
65
+ - spec/core/must_spec.rb
66
+ - spec/core/open_object_spec.rb
67
+ - spec/core/spec_helper.rb
68
+ - spec/more/declarative_cache_spec.rb
69
+ - spec/more/observable2_spec.rb
70
+ - spec/more/open_constructor_spec.rb
71
+ - spec/more/safe_hash_spec.rb
72
+ - spec/more/spec_helper.rb
73
+ - spec/more/synchronize_spec.rb
97
74
  has_rdoc: true
98
75
  homepage: http://github.com/alexeypetrushin/ruby_ext
99
76
  licenses: []
100
-
101
77
  post_install_message:
102
78
  rdoc_options: []
103
-
104
- require_paths:
79
+ require_paths:
105
80
  - lib
106
- required_ruby_version: !ruby/object:Gem::Requirement
81
+ required_ruby_version: !ruby/object:Gem::Requirement
107
82
  none: false
108
- requirements:
109
- - - ">="
110
- - !ruby/object:Gem::Version
111
- hash: 3
112
- segments:
113
- - 0
114
- version: "0"
115
- required_rubygems_version: !ruby/object:Gem::Requirement
83
+ requirements:
84
+ - - ! '>='
85
+ - !ruby/object:Gem::Version
86
+ version: '0'
87
+ required_rubygems_version: !ruby/object:Gem::Requirement
116
88
  none: false
117
- requirements:
118
- - - ">="
119
- - !ruby/object:Gem::Version
120
- hash: 3
121
- segments:
122
- - 0
123
- version: "0"
89
+ requirements:
90
+ - - ! '>='
91
+ - !ruby/object:Gem::Version
92
+ version: '0'
124
93
  requirements: []
125
-
126
94
  rubyforge_project:
127
- rubygems_version: 1.3.7
95
+ rubygems_version: 1.5.1
128
96
  signing_key:
129
97
  specification_version: 3
130
- summary: Ruby language extensions
98
+ summary: Ruby Extensions
131
99
  test_files: []
132
-
@@ -1,22 +0,0 @@
1
- if defined? ::BasicObject
2
- # A class with no predefined methods that behaves similarly to Builder's
3
- # BlankSlate. Used for proxy classes.
4
- class BasicObject < ::BasicObject
5
- begin
6
- undef_method :==
7
- undef_method :equal?
8
- rescue
9
- end
10
-
11
- # Let ActiveSupport::BasicObject at least raise exceptions.
12
- def raise(*args)
13
- ::Object.send(:raise, *args)
14
- end
15
- end
16
- else
17
- class BasicObject #:nodoc:
18
- instance_methods.each do |m|
19
- undef_method(m) if m.to_s !~ /(?:^__|^nil\?$|^send$|^object_id$)/
20
- end
21
- end
22
- end
@@ -1,11 +0,0 @@
1
- Class.class_eval do
2
- def alias name = nil
3
- if name
4
- name.must_be.a String
5
- name.must_not_be.blank
6
- @alias = name.to_s
7
- else
8
- @alias ||= self.name.split('::').last
9
- end
10
- end
11
- end
@@ -1,85 +0,0 @@
1
- require 'monitor'
2
-
3
- class Module
4
- def cache_method *methods
5
- DeclarativeCache.cache_method self, *methods
6
- end
7
-
8
- def cache_method_with_params *methods
9
- DeclarativeCache.cache_method_with_params self, *methods
10
- end
11
- end
12
-
13
- class Object
14
- def clear_cache_method
15
- instance_variables.each do |iv|
16
- remove_instance_variable iv if iv =~ /^@cached_/
17
- end
18
- end
19
- end
20
-
21
- module DeclarativeCache
22
- DISABLED = false
23
-
24
- warn "CASHE DISABLED" if DISABLED
25
- unless DISABLED
26
- class << self
27
-
28
- def cache_method klass, *methods
29
- methods.each do |method|
30
- klass.class_eval do
31
- als = "cached_#{escape_method(method)}"
32
- iv_check = "@#{als}_check"
33
- iv = "@#{als}"
34
-
35
- raise "Can't cache the #{method} twice!" if instance_methods.include?(als)
36
-
37
- alias_method als, method
38
-
39
- define_method method do |*args|
40
- raise "You tried to use cache without params for method with params (use 'cache_method_with_params' instead)!" unless args.empty?
41
- unless cached = instance_variable_get(iv)
42
- unless check = instance_variable_get(iv_check)
43
- cached = send als
44
- instance_variable_set iv, cached
45
- instance_variable_set iv_check, true
46
- end
47
- end
48
- cached
49
- end
50
- end
51
- end
52
- end
53
-
54
- def cache_method_with_params klass, *methods
55
- methods.each do |method|
56
- klass.class_eval do
57
- als = "cached_#{escape_method(method)}"
58
- iv = "@#{als}"
59
-
60
- raise "Can't cache the '#{method}' twice!" if instance_methods.include?(als)
61
-
62
- alias_method als, method
63
-
64
- define_method method do |*args|
65
- unless results = instance_variable_get(iv)
66
- results = Hash.new(NotDefined)
67
- instance_variable_set iv, results
68
- end
69
-
70
- result = results[args]
71
-
72
- if result.equal? NotDefined
73
- result = send als, *args
74
- results[args] = result
75
- end
76
-
77
- result
78
- end
79
- end
80
- end
81
- end
82
-
83
- end
84
- end
85
- end
@@ -1,17 +0,0 @@
1
- class ExtraBlankSlate
2
- PRESERVE_METHODS = %w(object_id)
3
- instance_methods.each { |m| undef_method m unless m =~ /^__/ or PRESERVE_METHODS.include?(m.to_s)}
4
-
5
- CUSTOM_UNDEFINE = [:p, :select, :puts]
6
-
7
- undefine = Kernel.instance_methods + Object.instance_methods + CUSTOM_UNDEFINE
8
- ExtraBlankSlate.instance_methods.each{|m| undefine.delete m}
9
-
10
- undefine.each do |m|
11
- script = %{\
12
- def #{m} *p, &b
13
- method_missing :#{m}, *p, &b
14
- end}
15
- class_eval script, __FILE__, __LINE__
16
- end
17
- end
data/lib/ruby_ext/hash.rb DELETED
@@ -1,15 +0,0 @@
1
- class Hash
2
- def subset keys = nil, &block
3
- h = {}
4
- if keys
5
- self.each do |k, v|
6
- h[k] = v if keys.include? k
7
- end
8
- else
9
- self.each do |k, v|
10
- h[k] = v if block.call k
11
- end
12
- end
13
- h
14
- end
15
- end
@@ -1,105 +0,0 @@
1
- class ArgumentsParser
2
- class << self
3
- def register method, arguments
4
- # check and prepare metadata
5
- arguments.collect!{|meta| meta.is_a?(Hash) ? meta : {:type => meta}}
6
- arguments.each{|meta| meta.must.include :type}
7
-
8
- # register
9
- @registry ||= {}
10
- @registry[method] = arguments
11
- end
12
-
13
- def parse_arguments_for method, *args, &block
14
- metadata = @registry[method]
15
- index = 0
16
- parsed_args = metadata.collect do |options|
17
- send options[:type], args, block, options, index, (index == metadata.size - 1)
18
- end
19
- args.must_be.empty
20
- return parsed_args
21
- end
22
-
23
- protected
24
- def string args, block, options, index, last
25
- object(args, block, options, index, last) || ""
26
- end
27
-
28
- def object args, block, options, index, last
29
- a = if range = options[:range]
30
- if range == :except_last_hash
31
- if args.size == 1 and args.last.is_a? Hash
32
- nil
33
- else
34
- args.shift
35
- end
36
- else
37
- must_be.never_called
38
- end
39
- else
40
- args.shift
41
- end
42
-
43
- a = _common_options a, options
44
- a
45
- end
46
-
47
- def array args, block, options, index, last
48
- a = if last
49
- args
50
- elsif range = options[:range]
51
- if range == :except_last_hash
52
- if args.last.is_a? Hash
53
- tmp = args[0..-2]
54
- args[0..-2] = nil
55
- tmp
56
- else
57
- tmp = args[0..-1]
58
- args.clear
59
- tmp
60
- end
61
- else
62
- must_be.never_called
63
- end
64
- else
65
- args.shift
66
- end
67
-
68
- a = _common_options a, options
69
- a ||= []
70
- a = [a] unless a.is_a?(Array)
71
- a
72
- end
73
-
74
- def hash args, block, options, index, last
75
- a = object(args, block, options, index, last) || {}
76
- a.must_be.a Hash
77
- a
78
- end
79
-
80
- def _common_options a, options
81
- a.must_not_be.nil if options[:require]
82
- if (default = options[:default]) and a.eql?(nil)
83
- a = default
84
- end
85
- a
86
- end
87
- end
88
- end
89
-
90
- Module.class_eval do
91
- def prepare_arguments_for method, *args
92
- # Register parsers
93
- ArgumentsParser.register method, args
94
-
95
- # Wrap method
96
- old_method = :"#{method}_wparg"
97
- alias_method old_method, method
98
- code = <<END
99
- def #{method} *args, &block
100
- #{old_method} *ArgumentsParser.parse_arguments_for(:#{method}, *args), &block
101
- end
102
- END
103
- class_eval code, __FILE__, __LINE__
104
- end
105
- end