method_watcher 0.0.1 → 0.0.2

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 94ffebd1dd2af6d564b2333d52438e7501b68fbe
4
+ data.tar.gz: f420c4f3d4f52cc15d342429e40c5b1ba78b5fd5
5
+ SHA512:
6
+ metadata.gz: 9ca24c51345a35a4ea80651d301460f7fe211d80c5e3b2fb19641dd868573d73dc0a3f806898bcc222ba94a276010b9f4b0d7d078b649d5918ef0f81a0c0c22e
7
+ data.tar.gz: 63fb3299fefb13414a3ea8aa1a80d5c53cf401b1ba5c7bc7729efdfa54a5750993947b1a1e9615d6990a5cf07c7a8855eeec163af77055349d65a3e813f4c500
data/.travis.yml ADDED
@@ -0,0 +1,6 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.0.0
4
+ - 1.9.3
5
+ - jruby-19mode
6
+ - rbx-19mode
data/README.md CHANGED
@@ -1,5 +1,8 @@
1
1
  # MethodWatcher
2
2
 
3
+ [![Gem Version](https://badge.fury.io/rb/method_watcher.png)](http://badge.fury.io/rb/method_watcher)
4
+ [![Build Status](https://travis-ci.org/jjyr/method_watcher.png?branch=master)](https://travis-ci.org/jjyr/method_watcher)
5
+
3
6
  Provide method\_overriding callback.
4
7
 
5
8
  ## Installation
@@ -30,6 +33,7 @@ class A
30
33
  end
31
34
 
32
35
  watch_methods :foo, :bar
36
+ unwatch_methods :bar
33
37
  end
34
38
 
35
39
  class B < A
@@ -38,12 +42,36 @@ class B < A
38
42
  end
39
43
 
40
44
  #you will get a warning:
41
- #method A#foo is overridden
45
+ # => method A#foo is overridden
42
46
 
43
47
  #you can define you own behavior when method overriding.
44
48
  #in class A:
45
49
  def self.method_overriding method
46
- puts "OMG, method #{method} is overridden!!"
50
+ raise "OMG, method #{method} is overridden!!"
51
+ end
52
+
53
+ #you can also use it like ruby core methods private, protect and public
54
+ require 'method_watcher'
55
+
56
+ class A
57
+ include MethodWatcher
58
+
59
+ # if you pass no arguments, all methods below it will be watched
60
+ watch_methods
61
+
62
+ def foo
63
+ end
64
+
65
+ def foo2
66
+ end
67
+
68
+ # if you pass no arguments, it will disable watching, methods below it will not be watched
69
+ unwatch_methods
70
+
71
+ def bar
72
+ end
73
+
74
+ #in this example, methods foo, foo2 should be watched
47
75
  end
48
76
  ```
49
77
 
data/Rakefile CHANGED
@@ -1 +1,5 @@
1
1
  require "bundler/gem_tasks"
2
+ require 'rspec/core/rake_task'
3
+
4
+ RSpec::Core::RakeTask.new
5
+ task :default => :spec
@@ -2,17 +2,33 @@ require "method_watcher/version"
2
2
 
3
3
  module MethodWatcher
4
4
  class << self
5
+ def init_method_watcher mod
6
+ super_watch_methods = (mod.respond_to?(:superclass) && mod.superclass && mod.superclass.instance_variable_get("@_watch_methods")) || {}
7
+ mod.instance_variable_set "@_watch_methods", super_watch_methods.merge({})
8
+ mod.instance_variable_set "@_watch_method", false
9
+ end
10
+
5
11
  def included mod
6
- mod.instance_variable_set "@_watch_methods", {}
12
+ MethodWatcher.init_method_watcher mod
7
13
  mod.singleton_class.class_eval do
8
14
  def watch_methods *methods
9
- methods.each do |method|
10
- watch_method method
15
+ if methods.empty?
16
+ @_watch_method = true
17
+ else
18
+ methods.each do |method|
19
+ @_watch_methods[method.to_sym] = self
20
+ end
11
21
  end
12
22
  end
13
23
 
14
- def watch_method method
15
- @_watch_methods[method.to_sym] = self
24
+ def unwatch_methods *methods
25
+ if methods.empty?
26
+ @_watch_method = false
27
+ else
28
+ methods.each do |method|
29
+ @_watch_methods.delete method.to_sym
30
+ end
31
+ end
16
32
  end
17
33
 
18
34
  def method_added method
@@ -20,6 +36,8 @@ module MethodWatcher
20
36
  if @_watch_methods.has_key?(method.to_sym)
21
37
  @_watch_methods[method].method_overriding method
22
38
  end
39
+
40
+ watch_methods method if @_watch_method
23
41
  end
24
42
 
25
43
  def method_overriding method
@@ -29,8 +47,7 @@ module MethodWatcher
29
47
 
30
48
  def inherited mod
31
49
  super
32
- super_watch_methods = (mod.respond_to?(:superclass) && mod.superclass && mod.superclass.instance_variable_get("@_watch_methods")) || {}
33
- mod.instance_variable_set "@_watch_methods", super_watch_methods.merge({})
50
+ MethodWatcher.init_method_watcher mod
34
51
  end
35
52
  end
36
53
  end
@@ -1,3 +1,3 @@
1
1
  module MethodWatcher
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -28,12 +28,21 @@ class B < A
28
28
  def foo3
29
29
  end
30
30
 
31
+ watch_methods
32
+ def foo4
33
+ end
34
+
35
+ def foo5
36
+ end
37
+ unwatch_methods
38
+
31
39
  def foo
32
40
  end
33
41
 
34
42
  @overridden_methods = []
35
43
 
36
- watch_method :foo2
44
+ watch_methods :foo2
45
+ unwatch_methods :foo3, :foo5
37
46
 
38
47
  def self.method_overriding method
39
48
  self.overridden_methods << method
@@ -42,13 +51,15 @@ class B < A
42
51
  end
43
52
 
44
53
  class C < B
45
- def foo2
54
+ (2..5).each do |i|
55
+ define_method "foo#{i}".to_sym do
56
+ end
46
57
  end
47
58
  end
48
59
 
49
60
  describe MethodWatcher do
50
61
  it 'should right!' do
51
62
  A.overridden_methods.should == [:foo3, :foo]
52
- B.overridden_methods.should == [:foo2, :test]
63
+ B.overridden_methods.should == [:foo2, :test, :foo4, :test]
53
64
  end
54
65
  end
metadata CHANGED
@@ -1,20 +1,18 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: method_watcher
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
5
- prerelease:
4
+ version: 0.0.2
6
5
  platform: ruby
7
6
  authors:
8
7
  - jjy
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-07-03 00:00:00.000000000 Z
11
+ date: 2013-07-25 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: bundler
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
17
  - - ~>
20
18
  - !ruby/object:Gem::Version
@@ -22,7 +20,6 @@ dependencies:
22
20
  type: :development
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
24
  - - ~>
28
25
  - !ruby/object:Gem::Version
@@ -30,33 +27,29 @@ dependencies:
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: rake
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
- - - ! '>='
31
+ - - '>='
36
32
  - !ruby/object:Gem::Version
37
33
  version: '0'
38
34
  type: :development
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
- - - ! '>='
38
+ - - '>='
44
39
  - !ruby/object:Gem::Version
45
40
  version: '0'
46
41
  - !ruby/object:Gem::Dependency
47
42
  name: rspec
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
- - - ! '>='
45
+ - - '>='
52
46
  - !ruby/object:Gem::Version
53
47
  version: '0'
54
48
  type: :development
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
- - - ! '>='
52
+ - - '>='
60
53
  - !ruby/object:Gem::Version
61
54
  version: '0'
62
55
  description: Provide method_overriding callback
@@ -67,6 +60,7 @@ extensions: []
67
60
  extra_rdoc_files: []
68
61
  files:
69
62
  - .gitignore
63
+ - .travis.yml
70
64
  - Gemfile
71
65
  - LICENSE.txt
72
66
  - README.md
@@ -79,27 +73,26 @@ files:
79
73
  homepage: https://github.com/jjyr/method_watcher
80
74
  licenses:
81
75
  - MIT
76
+ metadata: {}
82
77
  post_install_message:
83
78
  rdoc_options: []
84
79
  require_paths:
85
80
  - lib
86
81
  required_ruby_version: !ruby/object:Gem::Requirement
87
- none: false
88
82
  requirements:
89
- - - ! '>='
83
+ - - '>='
90
84
  - !ruby/object:Gem::Version
91
85
  version: '0'
92
86
  required_rubygems_version: !ruby/object:Gem::Requirement
93
- none: false
94
87
  requirements:
95
- - - ! '>='
88
+ - - '>='
96
89
  - !ruby/object:Gem::Version
97
90
  version: '0'
98
91
  requirements: []
99
92
  rubyforge_project:
100
- rubygems_version: 1.8.23
93
+ rubygems_version: 2.0.5
101
94
  signing_key:
102
- specification_version: 3
95
+ specification_version: 4
103
96
  summary: You can watch some methods, and use method_overriding callback
104
97
  test_files:
105
98
  - spec/method_watcher_spec.rb