srizzo-irber 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +13 -0
- data/README.markdown +95 -0
- data/VERSION +1 -1
- data/features/get_a_generated_source_code_on_the_fly.feature +8 -8
- data/features/{make_an_object_print_itself.feature → make_any_object_inspect_itself.feature} +11 -3
- data/features/print_an_objects_api.feature +67 -0
- data/features/print_generated_source_code.feature +3 -3
- data/features/step_definitions/irber_steps.rb +9 -0
- data/irber.gemspec +21 -11
- data/lib/irber.rb +3 -2
- data/lib/irber/api.rb +57 -0
- data/lib/irber/papi.rb +22 -0
- data/lib/irber/psrc.rb +11 -0
- data/lib/irber/{printing.rb → self_inspect.rb} +13 -3
- data/lib/irber/signature.rb +45 -0
- data/lib/irber/src.rb +45 -7
- data/spec/irber/api_spec.rb +66 -0
- data/spec/irber/papi_spec.rb +43 -0
- data/spec/irber/psrc_spec.rb +33 -0
- data/spec/irber/self_inspect_spec.rb +90 -0
- data/spec/irber/signature_spec.rb +66 -0
- data/spec/irber/src_spec.rb +140 -18
- metadata +21 -11
- data/README.rdoc +0 -73
- data/lib/irber/to_code.rb +0 -50
- data/spec/irber/printing_spec.rb +0 -52
- data/spec/irber/to_code_spec.rb +0 -143
data/History.txt
CHANGED
@@ -1,3 +1,16 @@
|
|
1
|
+
=== 0.0.4 2009-07-19
|
2
|
+
|
3
|
+
* 3 major enhancement:
|
4
|
+
* print an object's api - adds a papi method to print a class public methods (filtering low level methods from Object, Kernel, Module and Class)
|
5
|
+
* make any object print its api - adds a method papi_it to make an object print its class public methods (filtering low level methods from Object, Kernel, Module and Class)
|
6
|
+
* make any object print its src - adds a method psrc_it to make an object print its (generated) source code
|
7
|
+
|
8
|
+
* 2 major api changes:
|
9
|
+
* renamed #to_code to #src to make it consistent with its printing equivalent #psrc
|
10
|
+
* renamed #src to #psrc to maintain consistency with other printing methods
|
11
|
+
|
12
|
+
|
13
|
+
|
1
14
|
=== 0.0.3 2009-07-16
|
2
15
|
|
3
16
|
* 1 major enhancement:
|
data/README.markdown
ADDED
@@ -0,0 +1,95 @@
|
|
1
|
+
## DESCRIPTION:
|
2
|
+
|
3
|
+
Little tools to enhance your irb experience
|
4
|
+
|
5
|
+
## INSTALL:
|
6
|
+
|
7
|
+
* sudo gem install srizzo-irber
|
8
|
+
* add to your ~/.irbrc
|
9
|
+
|
10
|
+
require 'irber'
|
11
|
+
|
12
|
+
|
13
|
+
|
14
|
+
## BASIC USAGE:
|
15
|
+
|
16
|
+
|
17
|
+
E.g. a class:
|
18
|
+
|
19
|
+
class A
|
20
|
+
def a
|
21
|
+
"a"
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
|
26
|
+
* generate a class or method's source code on the fly
|
27
|
+
|
28
|
+
|
29
|
+
>> psrc A
|
30
|
+
class A < Object
|
31
|
+
def a()
|
32
|
+
"a"
|
33
|
+
end
|
34
|
+
end
|
35
|
+
=> nil
|
36
|
+
|
37
|
+
|
38
|
+
|
39
|
+
>> psrc A, :a
|
40
|
+
def a()
|
41
|
+
"a"
|
42
|
+
end
|
43
|
+
=> nil
|
44
|
+
|
45
|
+
|
46
|
+
* print its api
|
47
|
+
|
48
|
+
>> papi A
|
49
|
+
A # a()
|
50
|
+
|
51
|
+
|
52
|
+
* make any object inspect itself
|
53
|
+
|
54
|
+
>> [1,2].puts_it
|
55
|
+
1
|
56
|
+
2
|
57
|
+
|
58
|
+
|
59
|
+
>> [1,2].pp_it
|
60
|
+
[1, 2]
|
61
|
+
|
62
|
+
|
63
|
+
>> A.psrc_it
|
64
|
+
class A < Object
|
65
|
+
def a()
|
66
|
+
"a"
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
|
71
|
+
>> A.papi_it
|
72
|
+
A # a()
|
73
|
+
|
74
|
+
|
75
|
+
|
76
|
+
|
77
|
+
|
78
|
+
## FEATURES/PROBLEMS:
|
79
|
+
|
80
|
+
* generate a class or method source code on the fly (won't work for all classes and methods e.g: native classes)
|
81
|
+
* print any object's formatted api (filters Object, Kernel, Module and Class methods)
|
82
|
+
* make an object inspect itself
|
83
|
+
|
84
|
+
|
85
|
+
## REQUIREMENTS:
|
86
|
+
|
87
|
+
* Ruby 1.8.x only
|
88
|
+
* ParseTree
|
89
|
+
* Ruby2Ruby
|
90
|
+
|
91
|
+
|
92
|
+
|
93
|
+
## Copyright
|
94
|
+
|
95
|
+
Copyright (c) 2009 Samuel Rizzo. See LICENSE for details.
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.4
|
@@ -27,11 +27,11 @@ Feature: get a generated source code on the fly
|
|
27
27
|
end
|
28
28
|
end
|
29
29
|
"""
|
30
|
-
And I have required "irber/
|
30
|
+
And I have required "irber/src"
|
31
31
|
|
32
32
|
|
33
33
|
Scenario: get source for a class
|
34
|
-
When I run "A.
|
34
|
+
When I run "A.src"
|
35
35
|
Then I should get the code
|
36
36
|
"""
|
37
37
|
class A < Object
|
@@ -45,7 +45,7 @@ Feature: get a generated source code on the fly
|
|
45
45
|
"""
|
46
46
|
|
47
47
|
Scenario: get source for an object
|
48
|
-
When I run "A.new.
|
48
|
+
When I run "A.new.src"
|
49
49
|
Then I should get the code
|
50
50
|
"""
|
51
51
|
class A < Object
|
@@ -59,7 +59,7 @@ Feature: get a generated source code on the fly
|
|
59
59
|
"""
|
60
60
|
|
61
61
|
Scenario: get source for a module
|
62
|
-
When I run "M.
|
62
|
+
When I run "M.src"
|
63
63
|
Then I should get the code
|
64
64
|
"""
|
65
65
|
module M
|
@@ -74,7 +74,7 @@ Feature: get a generated source code on the fly
|
|
74
74
|
|
75
75
|
|
76
76
|
Scenario: get source for a class method
|
77
|
-
When I run "A.
|
77
|
+
When I run "A.src :a_class_method"
|
78
78
|
Then I should get the code
|
79
79
|
"""
|
80
80
|
def a_class_method()
|
@@ -83,7 +83,7 @@ Feature: get a generated source code on the fly
|
|
83
83
|
"""
|
84
84
|
|
85
85
|
Scenario: get source for an object method
|
86
|
-
When I run "A.new.
|
86
|
+
When I run "A.new.src :an_instance_method"
|
87
87
|
Then I should get the code
|
88
88
|
"""
|
89
89
|
def an_instance_method()
|
@@ -92,10 +92,10 @@ Feature: get a generated source code on the fly
|
|
92
92
|
"""
|
93
93
|
|
94
94
|
Scenario: try to get an inexisting method
|
95
|
-
When I run "A.new.
|
95
|
+
When I run "A.new.src :an_inexisting_method"
|
96
96
|
Then I should get the error "NameError"
|
97
97
|
|
98
98
|
Scenario: try on native code
|
99
99
|
Given a native implemented class "String"
|
100
|
-
When I run "String.
|
100
|
+
When I run "String.src"
|
101
101
|
Then I should get the error "ParseError"
|
data/features/{make_an_object_print_itself.feature → make_any_object_inspect_itself.feature}
RENAMED
@@ -1,4 +1,4 @@
|
|
1
|
-
Feature: make
|
1
|
+
Feature: make any object inspect itself
|
2
2
|
In order to save time going to the beginning of the line
|
3
3
|
As a lazy programmer
|
4
4
|
I want to print an object appending a method to it
|
@@ -7,6 +7,9 @@ Feature: make an object print itself
|
|
7
7
|
Given the definition
|
8
8
|
"""
|
9
9
|
class O
|
10
|
+
def a arg
|
11
|
+
"a"
|
12
|
+
end
|
10
13
|
def to_s
|
11
14
|
"O#to_s"
|
12
15
|
end
|
@@ -15,7 +18,7 @@ Feature: make an object print itself
|
|
15
18
|
end
|
16
19
|
end
|
17
20
|
"""
|
18
|
-
And I have required "irber/
|
21
|
+
And I have required "irber/self_inspect"
|
19
22
|
And I have run "@o = O.new"
|
20
23
|
|
21
24
|
When I run "@o.puts_it"
|
@@ -26,4 +29,9 @@ Feature: make an object print itself
|
|
26
29
|
|
27
30
|
When I run "@o.pp_it"
|
28
31
|
Then I should get the same stdout as "pp @o"
|
29
|
-
|
32
|
+
|
33
|
+
When I run "@o.psrc_it"
|
34
|
+
Then I should get the same stdout as "psrc @o"
|
35
|
+
|
36
|
+
When I run "@o.papi_it"
|
37
|
+
Then I should get the same stdout as "papi @o"
|
@@ -0,0 +1,67 @@
|
|
1
|
+
Feature print an objects api
|
2
|
+
In order to save time looking for documentation
|
3
|
+
As a lazy programmer
|
4
|
+
I want a method that prints the objects api
|
5
|
+
|
6
|
+
Background:
|
7
|
+
Given the definition
|
8
|
+
"""
|
9
|
+
class A
|
10
|
+
def an_instance_method
|
11
|
+
"result"
|
12
|
+
end
|
13
|
+
def self.a_class_method
|
14
|
+
"result"
|
15
|
+
end
|
16
|
+
end
|
17
|
+
"""
|
18
|
+
And the definition
|
19
|
+
"""
|
20
|
+
class C
|
21
|
+
def method_with_args some_arg
|
22
|
+
"result"
|
23
|
+
end
|
24
|
+
def method_with_var_args req_arg, opt_arg1=nil, opt_arg2=nil
|
25
|
+
"result"
|
26
|
+
end
|
27
|
+
end
|
28
|
+
"""
|
29
|
+
And I have required "irber/papi"
|
30
|
+
|
31
|
+
|
32
|
+
Scenario: print api for a class
|
33
|
+
When I run "papi A"
|
34
|
+
Then I should have printed its class method
|
35
|
+
"""
|
36
|
+
a_class_method()
|
37
|
+
"""
|
38
|
+
And I should have printed its instance method
|
39
|
+
"""
|
40
|
+
an_instance_method()
|
41
|
+
"""
|
42
|
+
|
43
|
+
Scenario: print api for an object
|
44
|
+
When I run "papi A.new"
|
45
|
+
Then I should have printed its instance method
|
46
|
+
"""
|
47
|
+
an_instance_method()
|
48
|
+
"""
|
49
|
+
|
50
|
+
|
51
|
+
Scenario: print api with method args
|
52
|
+
When I run "papi C"
|
53
|
+
Then I should have printed its instance method
|
54
|
+
"""
|
55
|
+
method_with_args(some_arg)
|
56
|
+
"""
|
57
|
+
And I should have printed its instance method
|
58
|
+
"""
|
59
|
+
method_with_var_args(req_arg, opt_arg1 = nil, opt_arg2 = nil)
|
60
|
+
"""
|
61
|
+
|
62
|
+
Scenario: print api for a native class with method args
|
63
|
+
When I run "papi String"
|
64
|
+
And I should have printed its instance method
|
65
|
+
"""
|
66
|
+
between?(arg1, arg2)
|
67
|
+
"""
|
@@ -17,12 +17,12 @@ Feature: print generated source code
|
|
17
17
|
end
|
18
18
|
end
|
19
19
|
"""
|
20
|
-
And I have required "irber/
|
20
|
+
And I have required "irber/psrc"
|
21
21
|
|
22
22
|
|
23
23
|
|
24
24
|
Scenario: print source for a class
|
25
|
-
When I run "
|
25
|
+
When I run "psrc A"
|
26
26
|
Then I should have the code printed
|
27
27
|
"""
|
28
28
|
class A < Object
|
@@ -37,7 +37,7 @@ Feature: print generated source code
|
|
37
37
|
"""
|
38
38
|
|
39
39
|
Scenario: print source for a class
|
40
|
-
When I run "
|
40
|
+
When I run "psrc A, :an_instance_method"
|
41
41
|
Then I should have the code printed
|
42
42
|
"""
|
43
43
|
def an_instance_method()
|
@@ -40,3 +40,12 @@ end
|
|
40
40
|
Then /^I should have the code printed$/ do |code|
|
41
41
|
stdout{ @result.call }.should match_code code
|
42
42
|
end
|
43
|
+
|
44
|
+
|
45
|
+
Then /^I should have printed its class method$/ do |string|
|
46
|
+
stdout{ @result.call }.should include(string.unindented)
|
47
|
+
end
|
48
|
+
|
49
|
+
Then /^I should have printed its instance method$/ do |string|
|
50
|
+
stdout{ @result.call }.should include(string.unindented)
|
51
|
+
end
|
data/irber.gemspec
CHANGED
@@ -2,39 +2,46 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = %q{irber}
|
5
|
-
s.version = "0.0.
|
5
|
+
s.version = "0.0.4"
|
6
6
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
8
8
|
s.authors = ["srizzo"]
|
9
|
-
s.date = %q{2009-07-
|
9
|
+
s.date = %q{2009-07-19}
|
10
10
|
s.email = %q{rizzolabs@gmail.com}
|
11
11
|
s.extra_rdoc_files = [
|
12
12
|
"LICENSE",
|
13
|
-
"README.
|
13
|
+
"README.markdown"
|
14
14
|
]
|
15
15
|
s.files = [
|
16
16
|
".document",
|
17
17
|
".gitignore",
|
18
18
|
"History.txt",
|
19
19
|
"LICENSE",
|
20
|
-
"README.
|
20
|
+
"README.markdown",
|
21
21
|
"Rakefile",
|
22
22
|
"VERSION",
|
23
23
|
"features/get_a_generated_source_code_on_the_fly.feature",
|
24
|
-
"features/
|
24
|
+
"features/make_any_object_inspect_itself.feature",
|
25
|
+
"features/print_an_objects_api.feature",
|
25
26
|
"features/print_generated_source_code.feature",
|
26
27
|
"features/step_definitions/irber_steps.rb",
|
27
28
|
"features/support/env.rb",
|
28
29
|
"irber.gemspec",
|
29
30
|
"lib/irber.rb",
|
30
|
-
"lib/irber/
|
31
|
+
"lib/irber/api.rb",
|
32
|
+
"lib/irber/papi.rb",
|
33
|
+
"lib/irber/psrc.rb",
|
34
|
+
"lib/irber/self_inspect.rb",
|
35
|
+
"lib/irber/signature.rb",
|
31
36
|
"lib/irber/src.rb",
|
32
|
-
"lib/irber/to_code.rb",
|
33
37
|
"spec/custom_helpers.rb",
|
34
38
|
"spec/custom_matchers.rb",
|
35
|
-
"spec/irber/
|
39
|
+
"spec/irber/api_spec.rb",
|
40
|
+
"spec/irber/papi_spec.rb",
|
41
|
+
"spec/irber/psrc_spec.rb",
|
42
|
+
"spec/irber/self_inspect_spec.rb",
|
43
|
+
"spec/irber/signature_spec.rb",
|
36
44
|
"spec/irber/src_spec.rb",
|
37
|
-
"spec/irber/to_code_spec.rb",
|
38
45
|
"spec/spec_helper.rb"
|
39
46
|
]
|
40
47
|
s.has_rdoc = true
|
@@ -46,9 +53,12 @@ Gem::Specification.new do |s|
|
|
46
53
|
s.test_files = [
|
47
54
|
"spec/custom_helpers.rb",
|
48
55
|
"spec/custom_matchers.rb",
|
49
|
-
"spec/irber/
|
56
|
+
"spec/irber/api_spec.rb",
|
57
|
+
"spec/irber/papi_spec.rb",
|
58
|
+
"spec/irber/psrc_spec.rb",
|
59
|
+
"spec/irber/self_inspect_spec.rb",
|
60
|
+
"spec/irber/signature_spec.rb",
|
50
61
|
"spec/irber/src_spec.rb",
|
51
|
-
"spec/irber/to_code_spec.rb",
|
52
62
|
"spec/spec_helper.rb"
|
53
63
|
]
|
54
64
|
|
data/lib/irber.rb
CHANGED
data/lib/irber/api.rb
ADDED
@@ -0,0 +1,57 @@
|
|
1
|
+
require 'irber/src'
|
2
|
+
require 'irber/signature'
|
3
|
+
|
4
|
+
|
5
|
+
module Irber
|
6
|
+
module Api
|
7
|
+
module InstanceMethods
|
8
|
+
def api
|
9
|
+
|
10
|
+
all_methods = []
|
11
|
+
|
12
|
+
methods = self.methods
|
13
|
+
|
14
|
+
methods -= Object.methods
|
15
|
+
methods -= Module.methods
|
16
|
+
methods -= Class.methods
|
17
|
+
methods -= Kernel.methods
|
18
|
+
|
19
|
+
all_methods += methods.collect { |method_name| self.method(method_name) }
|
20
|
+
|
21
|
+
if self.respond_to? :instance_methods
|
22
|
+
|
23
|
+
instance_methods = self.instance_methods
|
24
|
+
|
25
|
+
instance_methods -= Object.instance_methods
|
26
|
+
instance_methods -= Module.instance_methods
|
27
|
+
instance_methods -= Class.instance_methods
|
28
|
+
instance_methods -= Kernel.instance_methods
|
29
|
+
|
30
|
+
all_methods += instance_methods.collect { |method_name| self.instance_method(method_name) }
|
31
|
+
|
32
|
+
end
|
33
|
+
|
34
|
+
all_methods.sort! { |x, y| x.name <=> y.name }
|
35
|
+
|
36
|
+
signatures = all_methods.collect { |method| method.signature }
|
37
|
+
|
38
|
+
signatures
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
|
43
|
+
def self.included(receiver)
|
44
|
+
receiver.send :include, InstanceMethods
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
|
51
|
+
|
52
|
+
class Object
|
53
|
+
include Irber::Api
|
54
|
+
end
|
55
|
+
|
56
|
+
|
57
|
+
|