rulebook 0.3.2 → 0.3.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.
Files changed (4) hide show
  1. data/VERSION +1 -1
  2. data/lib/rulebook.rb +41 -17
  3. data/rulebook.gemspec +2 -2
  4. metadata +3 -3
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.3.2
1
+ 0.3.3
data/lib/rulebook.rb CHANGED
@@ -1,18 +1,19 @@
1
1
  class RuleBook
2
2
  class Rule
3
- attr_accessor :what_to_capture, :block
3
+ attr :block
4
4
 
5
5
  def initialize(what_to_capture, &block)
6
6
  raise(TypeError, 'what_to_capture must be of type Regexp') unless what_to_capture.is_a?(Regexp)
7
7
  @what_to_capture, @block = what_to_capture, block
8
8
  end
9
9
 
10
- def matches_against?(query)
11
- !match_against(query).nil?
10
+ def [](query)
11
+ query.to_s.match(@what_to_capture)
12
12
  end
13
+ alias_method :match_against, :[]
13
14
 
14
- def match_against(query)
15
- query.to_s.match(@what_to_capture)
15
+ def matches_against?(query)
16
+ !self[query].nil?
16
17
  end
17
18
  end
18
19
  end
@@ -30,30 +31,42 @@ class RuleBook
30
31
  rule
31
32
  end
32
33
 
33
- def find_rules_that_match_against(query)
34
- @rules.find_all { |rule| !query.to_s.match(rule.what_to_capture).nil? }
34
+ def rules_that_match_against(regexp)
35
+ @rules.find_all { |rule| rule.matches_against?(regexp) }
35
36
  end
36
37
  end
37
38
 
39
+ # TODO: DRY up the code here a bit...
38
40
  class RuleBook
39
41
  module IncludeMethods
40
42
  def respond_to?(meth)
41
43
  rulebook = self.class.const_get('INSTANCE_RULEBOOK')
42
- rulebook.find_rules_that_match_against(meth).any? || super
44
+ rulebook.rules_that_match_against(meth).any? || super
43
45
  end
44
46
 
45
47
  def method_missing(meth, *args, &block)
46
48
  rulebook = self.class.const_get('INSTANCE_RULEBOOK')
47
- rules = rulebook.find_rules_that_match_against(meth)
49
+ rules = rulebook.rules_that_match_against(meth)
48
50
 
51
+ # TODO: Why would this ever be nil?
49
52
  unless rules.nil? || rules.empty?
50
- rule = rules.first
51
- captures = rule.match_against(meth).captures || []
53
+ # Run the first matched rule..
54
+ # TODO: if the method NEXT if called within the rule,
55
+ # then goto the next matched rule
56
+ rule = rules.first
57
+ captures = rule[meth].captures || []
52
58
  block = rule.block
59
+
60
+ # Remove the possibility of optional arguments
53
61
  arity = block.arity == -1 ? 0 : block.arity
54
- self.class.send(:define_method, meth) do |*args|
62
+
63
+ # Define the method
64
+ klass = self.class
65
+ klass.send(:define_method, meth) do |*args|
55
66
  instance_exec(*(captures + args).take(arity), &block)
56
67
  end
68
+
69
+ # Call the method
57
70
  send(meth, *args, &block)
58
71
  else
59
72
  super
@@ -64,22 +77,32 @@ class RuleBook
64
77
  module ExtendMethods
65
78
  def respond_to?(meth)
66
79
  rulebook = const_get('CLASS_NOTEBOOK')
67
- rulebook.find_rules_that_match_against(meth).any? || super
80
+ rulebook.rules_that_match_against(meth).any? || super
68
81
  end
69
82
 
70
83
  def method_missing(meth, *args, &block)
71
84
  rulebook = const_get('CLASS_NOTEBOOK')
72
- rules = rulebook.find_rules_that_match_against(meth)
85
+ rules = rulebook.rules_that_match_against(meth)
73
86
 
74
- unless rules.nil?
75
- rule = rules.first
76
- captures = rule.match_against(meth).captures || []
87
+ # TODO: Why would this ever be nil?
88
+ unless rules.nil? || rules.empty?
89
+ # Run the first matched rule..
90
+ # TODO: if the method NEXT if called within the rule,
91
+ # then goto the next matched rule
92
+ rule = rules.first
93
+ captures = rule[meth].captures || []
77
94
  block = rule.block
95
+
96
+ # Remove the possibility of optional arguments
78
97
  arity = block.arity == -1 ? 0 : block.arity
98
+
99
+ # Define the method
79
100
  klass = class << self; self; end
80
101
  klass.send(:define_method, meth) do |*args|
81
102
  class_exec(*(captures + args).take(arity), &block)
82
103
  end
104
+
105
+ # Call the method
83
106
  send(meth, *args, &block)
84
107
  else
85
108
  super
@@ -88,6 +111,7 @@ class RuleBook
88
111
  end
89
112
  end
90
113
 
114
+ # TODO: DRY up the code here too...
91
115
  class Module
92
116
  def rule(what_to_capture, &block)
93
117
  raise(ArgumentError, 'rules must have a block') unless block_given?
data/rulebook.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{rulebook}
8
- s.version = "0.3.2"
8
+ s.version = "0.3.3"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Ryan Lewis"]
12
- s.date = %q{2010-05-01}
12
+ s.date = %q{2010-05-10}
13
13
  s.description = %q{Lets you define methods with regex for dynamic methods}
14
14
  s.email = %q{c00lryguy@gmail.com}
15
15
  s.extra_rdoc_files = [
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 3
8
- - 2
9
- version: 0.3.2
8
+ - 3
9
+ version: 0.3.3
10
10
  platform: ruby
11
11
  authors:
12
12
  - Ryan Lewis
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-05-01 00:00:00 -04:00
17
+ date: 2010-05-10 00:00:00 -04:00
18
18
  default_executable:
19
19
  dependencies: []
20
20