ov 0.0.2 → 0.0.3

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,15 +1,7 @@
1
1
  ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- NmM0ZWU4ODJhZGE2NjA2ZjE4ZGU3YWQ5NWJlOGUwOWRmNWU2OWYwNg==
5
- data.tar.gz: !binary |-
6
- N2UxYWIzMGI2ZGVmMTU4NjM4MDJiMDBiNWYyMjcyZTcxNjU2OGI3Mw==
2
+ SHA1:
3
+ metadata.gz: a2fb8e560e4e2f7ebed892f926df1f81238781f3
4
+ data.tar.gz: 82cba6f07a2aee4fc5e0b959f655559bcb9134e6
7
5
  SHA512:
8
- metadata.gz: !binary |-
9
- ZDA1ZTBkNGQ3OWMzMTVkNDFkZWFkNGI5OTc3MGM1Mjg1ZTI2OTIyZWIwOTJk
10
- MWNhMWExM2ZkMWNhODAxZjllZTJkNGZjOTEyZmQxOGQ1YTRjYjc1NzIwNmQ3
11
- OTBjMjhhNzljMmI5OWFmOWE2OWEzMTVkNDBiOGQ1YjNkOTQyNmY=
12
- data.tar.gz: !binary |-
13
- OWI2OTcyOWZkZmMzM2JkMGFkMGU2M2I1ZTBkZmVmNjZjYTQ2OGE5NWJiNzY3
14
- MWQ0NjMxNzZjMDY1ODhhYTkzYjAyODI1MTZlN2NhZDU5ZmQxNDJkYjgzZWYy
15
- NWQ0MmM1YzVlOWIyY2U5ZTRmMThjNDM3M2Q2N2E3ZWRhZjNjNGM=
6
+ metadata.gz: b5fd66e11d9c6d638888c6e5a83e65f7f01d8ded65091f626c58eb6bb22aa6bba2d0152d21fa1cd838d8c06b5d91ec7982bd13255d697e82ee73693199cb7172
7
+ data.tar.gz: 19ba949b79b683f21dae23c05fd3162372b87fb955a49586d44953870578fe3bb96c4714b41b1fd8a6b205fbaeafff033fb9ab4540030213c1ecb8b64e5a0414
@@ -1,4 +1,4 @@
1
- Copyright (c) 2013 fntzr
1
+ Copyright (c) 2013-2014 fntzr
2
2
 
3
3
  MIT License
4
4
 
data/README.md CHANGED
@@ -86,9 +86,32 @@ my_class.cool_method(1) => 1
86
86
  my_class.cool_method("foo") => "foo"
87
87
  ```
88
88
 
89
+
90
+ Redefine methods
91
+
92
+ ```ruby
93
+ class A
94
+ def test(str)
95
+ p "A#test"
96
+ end
97
+ end
98
+
99
+ class B < A
100
+ include Ov
101
+ let :test, Fixnum do |num|
102
+ p "only for fixnum"
103
+ end
104
+ end
105
+
106
+ b = B.new
107
+ b.test("asd") # => A#test
108
+ b.test(123) # => only for fixnum
109
+
110
+ ```
111
+
89
112
  Examples
90
113
  --------
91
- see [link](https://github.com/fntzr/ov/blob/master/samples/example.rb)
114
+ see [link](https://github.com/fntzr/ov/blob/master/samples)
92
115
 
93
116
  ## Contributing
94
117
 
data/lib/ov.rb CHANGED
@@ -50,7 +50,8 @@ require "ov/exception"
50
50
  # end
51
51
  #
52
52
  # my_class = MyClass.new
53
- # my_class.cool_method(1) # => 1
53
+ # my_class.cool_method(1)
54
+ # => 1
54
55
  # my_class.cool_method("foo") # => "foo"
55
56
  #
56
57
  # Is the same so ruby `def`
@@ -96,6 +97,13 @@ module Ov
96
97
  # +types+ types for method
97
98
  #
98
99
  def let(name, *types, &block)
100
+ included = false
101
+
102
+ if self.instance_methods.include?(name)
103
+ included = true
104
+ class_eval "alias :ov_old_#{name.to_s} #{name}"
105
+ undef_method name
106
+ end
99
107
 
100
108
  __overridable_methods << OverrideMethod.new(name, types, self, block)
101
109
 
@@ -121,9 +129,14 @@ module Ov
121
129
  z = owner.send(:__overridable_methods).where(method)
122
130
 
123
131
  if z.nil?
124
- raise NotImplementError.new("Method `#{name}` in `#{self}` class with types `#{types.join(', ')}` not implemented.")
132
+ if included
133
+ send("ov_old_#{name.to_s}", *args, &block)
134
+ else
135
+ raise Ov::NotImplementError.new("Method `#{name}` in `#{self}` class with types `#{types.join(', ')}` not implemented.")
136
+ end
137
+ else
138
+ instance_exec(*args, &z.body)
125
139
  end
126
- instance_exec(*args, &z.body)
127
140
  end
128
141
  end
129
142
  end
@@ -2,4 +2,4 @@
2
2
  #
3
3
  # Throw when +method+ with given +types+ not defined
4
4
  #
5
- class NotImplementError < Exception ; end
5
+ class Ov::NotImplementError < Exception ; end
@@ -1,3 +1,3 @@
1
1
  module Ov
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
@@ -0,0 +1,34 @@
1
+ require "ov"
2
+
3
+ class A
4
+ def test(str)
5
+ p "A#test"
6
+ end
7
+
8
+ def self.class_test(str)
9
+ p "A#class_test"
10
+ end
11
+ end
12
+
13
+ class B < A
14
+ include Ov
15
+ let :test, Fixnum do |num|
16
+ p "only for fixnum"
17
+ end
18
+
19
+ class << self
20
+ include Ov
21
+
22
+ let :class_test, Fixnum do |num|
23
+ p "class method for fixnum"
24
+ end
25
+ end
26
+ end
27
+
28
+ b = B.new
29
+ b.test("asd") # => A#test
30
+ b.test(123) # => only for fixnum
31
+
32
+ B.class_test("asd") # => "A#class_test"
33
+ B.class_test(123) # => "class method for fixnum"
34
+
@@ -15,7 +15,7 @@ module Matching
15
15
  end
16
16
  begin
17
17
  z.anon_method(*args)
18
- rescue NotImplementError => e
18
+ rescue Ov::NotImplementError => e
19
19
  z.otherwise
20
20
  end
21
21
  end
@@ -44,7 +44,7 @@ describe Ov do
44
44
  context "exceptions" do
45
45
  let(:test){TestException.new}
46
46
  it "throw NotImplementError when method not defined" do
47
- expect { test.some_method("foo") }.to raise_error(NotImplementError)
47
+ expect { test.some_method("foo") }.to raise_error(Ov::NotImplementError)
48
48
  end
49
49
  end
50
50
 
@@ -78,8 +78,8 @@ describe Ov do
78
78
  end
79
79
 
80
80
  it "exception when many arguments or without arguments" do
81
- expect{ test.my_instance_method(1,2,3)}.to raise_error(NotImplementError)
82
- expect{ test.my_instance_method()}.to raise_error(NotImplementError)
81
+ expect{ test.my_instance_method(1,2,3)}.to raise_error(Ov::NotImplementError)
82
+ expect{ test.my_instance_method()}.to raise_error(Ov::NotImplementError)
83
83
  end
84
84
  end
85
85
 
@@ -130,7 +130,7 @@ describe Ov do
130
130
  end
131
131
 
132
132
  it "exception when not defined" do
133
- expect{ test_ins.my_instance_method(1,2,3)}.to raise_error(NotImplementError)
133
+ expect{ test_ins.my_instance_method(1,2,3)}.to raise_error(Ov::NotImplementError)
134
134
  end
135
135
  end
136
136
  end
metadata CHANGED
@@ -1,55 +1,55 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ov
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - fntzr
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-12-14 00:00:00.000000000 Z
11
+ date: 2014-09-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
19
  version: '1.3'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ~>
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.3'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ! '>='
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ! '>='
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rspec
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ~>
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
47
  version: 2.14.0
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ~>
52
+ - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: 2.14.0
55
55
  description: write overridable methods for fun :)
@@ -59,7 +59,7 @@ executables: []
59
59
  extensions: []
60
60
  extra_rdoc_files: []
61
61
  files:
62
- - .gitignore
62
+ - ".gitignore"
63
63
  - Gemfile
64
64
  - LICENSE.txt
65
65
  - README.md
@@ -72,6 +72,7 @@ files:
72
72
  - lib/ov/version.rb
73
73
  - ov.gemspec
74
74
  - samples/class_methods.rb
75
+ - samples/instances.rb
75
76
  - samples/myarray.rb
76
77
  - samples/pm.rb
77
78
  - samples/rack.rb
@@ -89,17 +90,17 @@ require_paths:
89
90
  - lib
90
91
  required_ruby_version: !ruby/object:Gem::Requirement
91
92
  requirements:
92
- - - ! '>='
93
+ - - ">="
93
94
  - !ruby/object:Gem::Version
94
95
  version: '0'
95
96
  required_rubygems_version: !ruby/object:Gem::Requirement
96
97
  requirements:
97
- - - ! '>='
98
+ - - ">="
98
99
  - !ruby/object:Gem::Version
99
100
  version: '0'
100
101
  requirements: []
101
102
  rubyforge_project:
102
- rubygems_version: 2.1.5
103
+ rubygems_version: 2.2.2
103
104
  signing_key:
104
105
  specification_version: 4
105
106
  summary: ov gem provides hacks for write polymorphic methods in Ruby.