reflexive 0.0.6 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +9 -7
- data/Rakefile +10 -4
- data/config.ru +1 -1
- data/lib/reflexive/application.rb +50 -30
- data/lib/reflexive/coderay_html_encoder.rb +1 -1
- data/lib/reflexive/coderay_ruby_scanner.rb +2 -0
- data/lib/reflexive/core_ext/module/reflexive_instance_methods.rb +44 -0
- data/lib/reflexive/descendants.rb +12 -2
- data/lib/reflexive/helpers.rb +26 -9
- data/lib/reflexive/method_lookup.rb +199 -0
- data/lib/reflexive/methods.rb +3 -2
- data/lib/reflexive/parse_tree_top_down_walker.rb +69 -8
- data/lib/reflexive/reflexive_ripper.rb +5 -2
- data/lib/reflexive/routing_helpers.rb +74 -53
- data/public/stylesheets/reflexive/reflexive.css +5 -0
- data/reflexive.gemspec +9 -6
- data/spec/coderay_html_encoder_spec.rb +8 -2
- data/spec/integration_spec.rb +227 -0
- data/spec/integration_spec_fixture.rb +87 -0
- data/spec/method_lookup_spec.rb +348 -0
- data/spec/methods_spec.rb +246 -28
- data/spec/rails_integration_spec.rb +7 -0
- data/spec/rails_integration_spec_helper.rb +21 -11
- data/spec/reflexive_ripper_spec.rb +57 -19
- data/spec/reflexive_spec.rb +15 -0
- data/views/constants_show.erb +18 -1
- data/views/dashboard.erb +3 -4
- data/views/layout.erb +10 -0
- data/views/methods_apidock.erb +9 -1
- data/views/methods_choose.erb +19 -0
- metadata +76 -40
@@ -10,6 +10,10 @@ shared_examples_for "fresh Rails app with Reflexive installed" do
|
|
10
10
|
get("/").should include("Welcome aboard")
|
11
11
|
end
|
12
12
|
|
13
|
+
it "doesn't respond on not existing path" do
|
14
|
+
proc { get("/not_exist") }.should raise_error
|
15
|
+
end
|
16
|
+
|
13
17
|
it "responds for Reflexive paths" do
|
14
18
|
constant_reflexion = get("/reflexive/constants/ActiveRecord::Base")
|
15
19
|
constant_reflexion.should include("ActiveRecord")
|
@@ -112,11 +116,14 @@ describe "Integration with" do
|
|
112
116
|
class Application < Rails::Application
|
113
117
|
config.middleware.insert_after("Rack::Lock", "Reflexive::Application")
|
114
118
|
RUBY
|
119
|
+
|
120
|
+
patch_app_file("Gemfile", /\z/, "\ngem 'reflexive'")
|
115
121
|
end
|
116
122
|
|
117
123
|
it "properly" do
|
118
124
|
Dir.chdir($app_dir) do
|
119
125
|
IO.read("config/application.rb").should include("Reflexive")
|
126
|
+
IO.read("Gemfile").should include("reflexive")
|
120
127
|
end
|
121
128
|
end
|
122
129
|
|
@@ -69,25 +69,35 @@ def build_and_install_test_gem
|
|
69
69
|
end
|
70
70
|
end
|
71
71
|
|
72
|
+
SERVER_STARTUP_TIME = 20
|
72
73
|
def spawn_server_and_wait_for_response(cmd)
|
73
74
|
$server_pid = spawn(tmp_gemset_env, cmd)
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
75
|
+
begin
|
76
|
+
trap("CLD") { raise "Failed to start server: server died prematurely" }
|
77
|
+
puts "Spawned server with #{ $server_pid } PID"
|
78
|
+
tries = 0
|
79
|
+
print "Waiting for server to start..."
|
80
|
+
started = false
|
81
|
+
while (tries += 1) < SERVER_STARTUP_TIME && !started
|
82
|
+
started = get("/").include?("Welcome aboard") rescue false
|
83
|
+
print "."
|
84
|
+
sleep 1
|
85
|
+
end
|
86
|
+
print "\n"
|
87
|
+
unless started
|
88
|
+
raise "Failed to start server: server didn't respond in #{ SERVER_STARTUP_TIME } seconds"
|
89
|
+
end
|
90
|
+
rescue Exception => e
|
91
|
+
raise e.exception("Failed to start server: #{ e.message }")
|
92
|
+
ensure
|
93
|
+
trap("CLD", nil)
|
82
94
|
end
|
83
|
-
print "\n"
|
84
|
-
abort "Failed to start server" unless started
|
85
95
|
end
|
86
96
|
|
87
97
|
def terminate_server_blocking
|
88
98
|
puts "Terminating server with #{ $server_pid } PID..."
|
89
99
|
`kill -9 #{ $server_pid }`
|
90
|
-
Process::waitpid2($server_pid)
|
100
|
+
Process::waitpid2($server_pid) rescue nil
|
91
101
|
end
|
92
102
|
|
93
103
|
def get(path)
|
@@ -57,7 +57,7 @@ describe Reflexive::ReflexiveRipper do
|
|
57
57
|
describe "injects method call scanner event tags" do
|
58
58
|
specify "m!" do
|
59
59
|
scanner_events_for("m!").should(have_tags(
|
60
|
-
{:method_call=>{:name=>"m!", :receiver
|
60
|
+
{:method_call=>{:name=>"m!", :receiver=>:class, :scope => []}}
|
61
61
|
))
|
62
62
|
end
|
63
63
|
|
@@ -109,7 +109,7 @@ describe Reflexive::ReflexiveRipper do
|
|
109
109
|
specify "1.tap { (dv = 1).tap { puts dv } }" do
|
110
110
|
scanner_events_for("1.tap { (dv = 1).tap { puts dv } }").should(have_exact_tags(
|
111
111
|
{:local_variable_assignment=>"2:dv"},
|
112
|
-
{:method_call=>{:name=>"puts", :receiver
|
112
|
+
{:method_call=>{:name=>"puts", :receiver=>:class, :scope => []}},
|
113
113
|
{:local_variable_access=>"2:dv"}
|
114
114
|
))
|
115
115
|
end
|
@@ -123,8 +123,9 @@ describe Reflexive::ReflexiveRipper do
|
|
123
123
|
specify "tv = 1; def m; puts tv; end" do
|
124
124
|
scanner_events_for("tv = 1; def m; puts tv; end").should(have_tags(
|
125
125
|
{:local_variable_assignment=>"1:tv"},
|
126
|
-
{:method_call=>{:name=>"puts", :receiver
|
127
|
-
{:method_call=>{:name=>"tv", :receiver
|
126
|
+
{:method_call=>{:name=>"puts", :receiver=>:instance, :scope => []}},
|
127
|
+
{:method_call=>{:name=>"tv", :receiver=>:instance, :scope => []}}
|
128
|
+
))
|
128
129
|
end
|
129
130
|
|
130
131
|
end
|
@@ -133,44 +134,54 @@ describe Reflexive::ReflexiveRipper do
|
|
133
134
|
describe "for method calls" do
|
134
135
|
specify "from top level" do
|
135
136
|
scanner_events_for("m()").should(have_tags(
|
136
|
-
{:method_call=>{:name=>"m", :receiver
|
137
|
+
{:method_call=>{:name=>"m", :receiver=>:class, :scope => []}}
|
138
|
+
))
|
137
139
|
end
|
138
140
|
|
139
141
|
specify "class definition level" do
|
140
142
|
scanner_events_for("class C; cm(); end").should(have_tags(
|
141
|
-
{:method_call=>{:name=>"cm", :receiver
|
143
|
+
{:method_call=>{:name=>"cm", :receiver=>:class, :scope => ["C"]}}
|
144
|
+
))
|
142
145
|
scanner_events_for("module M; cm(); end").should(have_tags(
|
143
|
-
{:method_call=>{:name=>"cm", :receiver
|
146
|
+
{:method_call=>{:name=>"cm", :receiver=>:class, :scope => ["M"]}}
|
147
|
+
))
|
144
148
|
end
|
145
149
|
|
146
150
|
specify "class instance level" do
|
147
151
|
scanner_events_for("class C; def im1; im2; end end").should(have_tags(
|
148
|
-
{:method_call=>{:name=>"im2", :receiver
|
152
|
+
{:method_call=>{:name=>"im2", :receiver=>:instance, :scope => ["C"]}}
|
153
|
+
))
|
149
154
|
scanner_events_for("module M; def im1; im2; end end").should(have_tags(
|
150
|
-
{:method_call=>{:name=>"im2", :receiver
|
155
|
+
{:method_call=>{:name=>"im2", :receiver=>:instance, :scope => ["M"]}}
|
156
|
+
))
|
151
157
|
end
|
152
158
|
|
153
159
|
specify "class singleton level" do
|
154
160
|
scanner_events_for("class C; def self.cm1() cm2; end end").should(have_tags(
|
155
|
-
{:method_call=>{:name=>"cm2", :receiver
|
161
|
+
{:method_call=>{:name=>"cm2", :receiver=>:class, :scope => ["C"]}}
|
162
|
+
))
|
156
163
|
scanner_events_for("module M; def self.cm1() cm2; end end").should(have_tags(
|
157
|
-
{:method_call=>{:name=>"cm2", :receiver
|
164
|
+
{:method_call=>{:name=>"cm2", :receiver=>:class, :scope => ["M"]}}
|
165
|
+
))
|
166
|
+
end
|
167
|
+
|
168
|
+
specify "class singleton level for methods defined with class << self" do
|
169
|
+
scanner_events_for("class C; class << self; def cm1(); cm2; end end end").should(have_tags(
|
170
|
+
{:method_call=>{:name=>"cm2", :receiver=>:class, :scope => ["C"]}}
|
171
|
+
))
|
158
172
|
end
|
159
173
|
|
160
|
-
|
174
|
+
specify "nested method calls with constant references" do
|
161
175
|
src = <<-RUBY
|
162
176
|
module M
|
163
177
|
class C
|
164
|
-
def self.m
|
165
|
-
end
|
166
|
-
end
|
167
|
-
end
|
168
|
-
class M::C
|
169
|
-
def m
|
170
|
-
c = C.m
|
171
178
|
end
|
179
|
+
C.new
|
172
180
|
end
|
173
181
|
RUBY
|
182
|
+
scanner_events_for(src).should(have_tags(
|
183
|
+
{:method_call=>{:name=>"new", :receiver=>["C"], :scope => ["M"]}}
|
184
|
+
))
|
174
185
|
end
|
175
186
|
end
|
176
187
|
|
@@ -233,6 +244,33 @@ describe Reflexive::ReflexiveRipper do
|
|
233
244
|
))
|
234
245
|
|
235
246
|
end
|
247
|
+
|
248
|
+
specify "from instance methods params" do
|
249
|
+
scanner_events_for("def m(a = C.new(m1), b = D.new(m2)); end").should(have_tags(
|
250
|
+
{:constant_access=>{:name=>"C", :scope=>[]}},
|
251
|
+
{:constant_access=>{:name=>"D", :scope=>[]}}
|
252
|
+
))
|
253
|
+
end
|
254
|
+
|
255
|
+
specify "for superclass" do
|
256
|
+
scanner_events_for("class C < D; end").should(have_tags(
|
257
|
+
{:constant_access=>{:name=>"D", :scope=>[]}}
|
258
|
+
))
|
259
|
+
end
|
260
|
+
|
261
|
+
specify "autoload hint" do
|
262
|
+
scanner_events_for("module M; autoload :C; end").should(have_tags(
|
263
|
+
{:constant_access=>{:name=>"C", :scope=>["M"]}}
|
264
|
+
))
|
265
|
+
|
266
|
+
scanner_events_for("module M; autoload 'C'; end").should(have_tags(
|
267
|
+
{:constant_access=>{:name=>"C", :scope=>["M"]}}
|
268
|
+
))
|
269
|
+
|
270
|
+
scanner_events_for("module M; autoload('C'); end").should(have_tags(
|
271
|
+
{:constant_access=>{:name=>"C", :scope=>["M"]}}
|
272
|
+
))
|
273
|
+
end
|
236
274
|
end
|
237
275
|
end
|
238
276
|
|
data/spec/reflexive_spec.rb
CHANGED
@@ -26,6 +26,13 @@ end
|
|
26
26
|
|
27
27
|
C2.extend(M2)
|
28
28
|
|
29
|
+
module ModuleDescendantBaseModule
|
30
|
+
end
|
31
|
+
|
32
|
+
module ModuleDescendantModule
|
33
|
+
include ModuleDescendantBaseModule
|
34
|
+
end
|
35
|
+
|
29
36
|
describe "Reflexive.loaded_features_lookup" do
|
30
37
|
before(:all) do
|
31
38
|
@native_feature = $LOADED_FEATURES.detect { |f| f =~ /\.so\z/ }
|
@@ -61,6 +68,10 @@ describe "Reflexive.constant_lookup" do
|
|
61
68
|
Reflexive.constant_lookup("::String", "Some::Ignored::Scope").should == ::String
|
62
69
|
end
|
63
70
|
|
71
|
+
it "looks up top-level constants when passed empty scope" do
|
72
|
+
Reflexive.constant_lookup("String", "").should == ::String
|
73
|
+
end
|
74
|
+
|
64
75
|
it "returns nil for non existing top-level constant" do
|
65
76
|
Reflexive.constant_lookup("::StringAsd", "Some::Ignored::Scope").should == nil
|
66
77
|
end
|
@@ -96,4 +107,8 @@ describe "Reflexive.descendants" do
|
|
96
107
|
it "finds singleton class descendant" do
|
97
108
|
Reflexive.descendants(M2).should =~ [C2]
|
98
109
|
end
|
110
|
+
|
111
|
+
it "reports modules which include module as descendants" do
|
112
|
+
Reflexive.descendants(ModuleDescendantBaseModule) =~ [ModuleDescendantModule]
|
113
|
+
end
|
99
114
|
end
|
data/views/constants_show.erb
CHANGED
@@ -19,9 +19,26 @@
|
|
19
19
|
<% unless @methods.files.empty? %>
|
20
20
|
<div>
|
21
21
|
<h4>Defined In Files</h4>
|
22
|
-
|
22
|
+
|
23
|
+
<% files = @methods.files.sort %>
|
24
|
+
<% shown, hidden = files[0..5], files[6..-1] %>
|
25
|
+
|
26
|
+
<% shown.each do |path| %>
|
23
27
|
<%= link_to_file(path) %><br/>
|
24
28
|
<% end %>
|
29
|
+
|
30
|
+
<% if hidden && !hidden.empty? %>
|
31
|
+
<div class="opener">
|
32
|
+
<a class="trigger" href="#">
|
33
|
+
... <%= hidden.size %> files more
|
34
|
+
</a>
|
35
|
+
<div class="content">
|
36
|
+
<% hidden.each do |path| %>
|
37
|
+
<%= link_to_file(path) %><br/>
|
38
|
+
<% end %>
|
39
|
+
</div>
|
40
|
+
</div>
|
41
|
+
<% end %>
|
25
42
|
</div>
|
26
43
|
<% end %>
|
27
44
|
|
data/views/dashboard.erb
CHANGED
@@ -1,10 +1,9 @@
|
|
1
|
-
<h1>
|
2
|
-
Reflexive </h1>
|
1
|
+
<h1> Reflexive </h1>
|
3
2
|
|
4
3
|
<div class="dashboard">
|
5
4
|
<% if defined?(ActiveRecord::Base) || defined?(ApplicationController) %>
|
6
5
|
<div class="row">
|
7
|
-
<div class="column">
|
6
|
+
<div class="column first">
|
8
7
|
<% if defined?(::ActiveRecord::Base) %>
|
9
8
|
<h2>Models</h2>
|
10
9
|
|
@@ -27,7 +26,7 @@
|
|
27
26
|
</div>
|
28
27
|
<% end %>
|
29
28
|
<div class="row">
|
30
|
-
<div class="column">
|
29
|
+
<div class="column first">
|
31
30
|
<h2>Favorites</h2>
|
32
31
|
<% favorites = filter_existing_constants(%w(Rails ActiveSupport ActiveResource
|
33
32
|
ActiveRecord ActionView ActionController ActionDispatch ActionMailer ActiveModel
|
data/views/layout.erb
CHANGED
@@ -10,6 +10,16 @@
|
|
10
10
|
</head>
|
11
11
|
<body>
|
12
12
|
|
13
|
+
<% if Reflexive.class_reloading_active? %>
|
14
|
+
<div style="background-color: #ffc0cb; border: 1px solid gray; padding: 1em 1em; width: 500px">
|
15
|
+
Warning! You're running Reflexive with <code>config.cache_classes = false</code> <br/>
|
16
|
+
Rails setting (which is the default for running server in development environment).<br/>
|
17
|
+
Currently Reflexive isn't compatible with this setting and you may want to<br/>
|
18
|
+
either set <code>config.cache_classes = true</code> in your environment configuration<br/>
|
19
|
+
file or run the server in production mode with <br/><code>rails s --environment=production</code>
|
20
|
+
</div>
|
21
|
+
<% end %>
|
22
|
+
|
13
23
|
<div class="dashboard-link">
|
14
24
|
<%= link_to("Reflexive Dashboard", dashboard_path) unless request.path == dashboard_path %>
|
15
25
|
</div>
|
data/views/methods_apidock.erb
CHANGED
@@ -1,9 +1,17 @@
|
|
1
1
|
<h2>
|
2
2
|
<%= @klass.name %>#<%= @method_name %>
|
3
3
|
</h2>
|
4
|
+
|
5
|
+
<div>
|
6
|
+
Documentation provided by <a href="http://apidock.com/">APIdock</a>
|
7
|
+
<%= link_to apidock_path(@klass.name, @level, @method_name),
|
8
|
+
apidock_path(@klass.name, @level, @method_name) %> :
|
9
|
+
|
10
|
+
</div>
|
11
|
+
|
4
12
|
<%= content_tag :iframe,
|
5
13
|
"",
|
6
|
-
:src => apidock_path(@klass.name, @method_name),
|
14
|
+
:src => apidock_path(@klass.name, @level, @method_name),
|
7
15
|
:frameborder => 0,
|
8
16
|
:style => "width: 960px; height: 100%; position: absolute",
|
9
17
|
:id => "apidock" %>
|
@@ -0,0 +1,19 @@
|
|
1
|
+
<div>
|
2
|
+
Calling <code><%= @name %></code> <%= @level %> method from
|
3
|
+
<code><%= @klass %></code> can dispatch to following methods
|
4
|
+
</div>
|
5
|
+
|
6
|
+
<% if @last_resort_lookup_used %>
|
7
|
+
<div>
|
8
|
+
Note: the list of methods below was generated using last resort lookup
|
9
|
+
algorithm, i.e. by just looking for named method in any class/module
|
10
|
+
currently loaded.
|
11
|
+
</div>
|
12
|
+
<% end %>
|
13
|
+
|
14
|
+
<div>
|
15
|
+
<% links = @definitions.
|
16
|
+
sort_by { |klass, _, _| klass.to_s }.
|
17
|
+
map { |d| full_name_link_to_method(*d) } %>
|
18
|
+
<%= content_tag :pre, links.join("\n") %>
|
19
|
+
</div>
|
metadata
CHANGED
@@ -1,13 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: reflexive
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash: 19
|
5
4
|
prerelease: false
|
6
5
|
segments:
|
7
6
|
- 0
|
7
|
+
- 1
|
8
8
|
- 0
|
9
|
-
|
10
|
-
version: 0.0.6
|
9
|
+
version: 0.1.0
|
11
10
|
platform: ruby
|
12
11
|
authors:
|
13
12
|
- Evgeniy Dolzhenko
|
@@ -15,7 +14,7 @@ autorequire:
|
|
15
14
|
bindir: bin
|
16
15
|
cert_chain: []
|
17
16
|
|
18
|
-
date: 2010-05-
|
17
|
+
date: 2010-05-20 00:00:00 -07:00
|
19
18
|
default_executable:
|
20
19
|
dependencies:
|
21
20
|
- !ruby/object:Gem::Dependency
|
@@ -24,12 +23,13 @@ dependencies:
|
|
24
23
|
requirement: &id001 !ruby/object:Gem::Requirement
|
25
24
|
none: false
|
26
25
|
requirements:
|
27
|
-
- - "
|
26
|
+
- - "="
|
28
27
|
- !ruby/object:Gem::Version
|
29
|
-
hash: 3
|
30
28
|
segments:
|
29
|
+
- 1
|
30
|
+
- 1
|
31
31
|
- 0
|
32
|
-
version:
|
32
|
+
version: 1.1.0
|
33
33
|
type: :runtime
|
34
34
|
version_requirements: *id001
|
35
35
|
- !ruby/object:Gem::Dependency
|
@@ -38,12 +38,12 @@ dependencies:
|
|
38
38
|
requirement: &id002 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
|
-
- - "
|
41
|
+
- - "="
|
42
42
|
- !ruby/object:Gem::Version
|
43
|
-
hash: 3
|
44
43
|
segments:
|
44
|
+
- 1
|
45
45
|
- 0
|
46
|
-
version: "0"
|
46
|
+
version: "1.0"
|
47
47
|
type: :runtime
|
48
48
|
version_requirements: *id002
|
49
49
|
- !ruby/object:Gem::Dependency
|
@@ -52,12 +52,13 @@ dependencies:
|
|
52
52
|
requirement: &id003 !ruby/object:Gem::Requirement
|
53
53
|
none: false
|
54
54
|
requirements:
|
55
|
-
- - "
|
55
|
+
- - "="
|
56
56
|
- !ruby/object:Gem::Version
|
57
|
-
hash: 3
|
58
57
|
segments:
|
59
58
|
- 0
|
60
|
-
|
59
|
+
- 3
|
60
|
+
- 40
|
61
|
+
version: 0.3.40
|
61
62
|
type: :runtime
|
62
63
|
version_requirements: *id003
|
63
64
|
- !ruby/object:Gem::Dependency
|
@@ -66,77 +67,108 @@ dependencies:
|
|
66
67
|
requirement: &id004 !ruby/object:Gem::Requirement
|
67
68
|
none: false
|
68
69
|
requirements:
|
69
|
-
- - "
|
70
|
+
- - "="
|
70
71
|
- !ruby/object:Gem::Version
|
71
|
-
hash: 3
|
72
72
|
segments:
|
73
73
|
- 0
|
74
|
-
|
74
|
+
- 9
|
75
|
+
- 3
|
76
|
+
version: 0.9.3
|
75
77
|
type: :runtime
|
76
78
|
version_requirements: *id004
|
77
79
|
- !ruby/object:Gem::Dependency
|
78
|
-
name:
|
80
|
+
name: rails
|
79
81
|
prerelease: false
|
80
82
|
requirement: &id005 !ruby/object:Gem::Requirement
|
81
83
|
none: false
|
82
84
|
requirements:
|
83
|
-
- - "
|
85
|
+
- - "="
|
84
86
|
- !ruby/object:Gem::Version
|
85
|
-
hash: 3
|
86
87
|
segments:
|
88
|
+
- 3
|
87
89
|
- 0
|
88
|
-
|
89
|
-
|
90
|
+
- 0
|
91
|
+
- beta3
|
92
|
+
version: 3.0.0.beta3
|
93
|
+
type: :development
|
90
94
|
version_requirements: *id005
|
91
95
|
- !ruby/object:Gem::Dependency
|
92
|
-
name:
|
96
|
+
name: rspec
|
93
97
|
prerelease: false
|
94
98
|
requirement: &id006 !ruby/object:Gem::Requirement
|
95
99
|
none: false
|
96
100
|
requirements:
|
97
101
|
- - "="
|
98
102
|
- !ruby/object:Gem::Version
|
99
|
-
hash: -690468206
|
100
103
|
segments:
|
101
|
-
-
|
104
|
+
- 2
|
102
105
|
- 0
|
103
106
|
- 0
|
104
|
-
-
|
105
|
-
|
107
|
+
- beta
|
108
|
+
- 8
|
109
|
+
version: 2.0.0.beta.8
|
106
110
|
type: :development
|
107
111
|
version_requirements: *id006
|
108
112
|
- !ruby/object:Gem::Dependency
|
109
|
-
name:
|
113
|
+
name: sinatra-reloader
|
110
114
|
prerelease: false
|
111
115
|
requirement: &id007 !ruby/object:Gem::Requirement
|
112
116
|
none: false
|
113
117
|
requirements:
|
114
118
|
- - "="
|
115
119
|
- !ruby/object:Gem::Version
|
116
|
-
hash: -44051750
|
117
120
|
segments:
|
118
|
-
- 2
|
119
|
-
- 0
|
120
121
|
- 0
|
121
|
-
-
|
122
|
-
-
|
123
|
-
version:
|
122
|
+
- 4
|
123
|
+
- 1
|
124
|
+
version: 0.4.1
|
124
125
|
type: :development
|
125
126
|
version_requirements: *id007
|
126
127
|
- !ruby/object:Gem::Dependency
|
127
|
-
name:
|
128
|
+
name: thin
|
128
129
|
prerelease: false
|
129
130
|
requirement: &id008 !ruby/object:Gem::Requirement
|
130
131
|
none: false
|
131
132
|
requirements:
|
132
|
-
- - "
|
133
|
+
- - "="
|
133
134
|
- !ruby/object:Gem::Version
|
134
|
-
hash: 3
|
135
135
|
segments:
|
136
|
-
-
|
137
|
-
|
136
|
+
- 1
|
137
|
+
- 2
|
138
|
+
- 7
|
139
|
+
version: 1.2.7
|
138
140
|
type: :development
|
139
141
|
version_requirements: *id008
|
142
|
+
- !ruby/object:Gem::Dependency
|
143
|
+
name: rack-test
|
144
|
+
prerelease: false
|
145
|
+
requirement: &id009 !ruby/object:Gem::Requirement
|
146
|
+
none: false
|
147
|
+
requirements:
|
148
|
+
- - "="
|
149
|
+
- !ruby/object:Gem::Version
|
150
|
+
segments:
|
151
|
+
- 0
|
152
|
+
- 5
|
153
|
+
- 3
|
154
|
+
version: 0.5.3
|
155
|
+
type: :development
|
156
|
+
version_requirements: *id009
|
157
|
+
- !ruby/object:Gem::Dependency
|
158
|
+
name: webrat
|
159
|
+
prerelease: false
|
160
|
+
requirement: &id010 !ruby/object:Gem::Requirement
|
161
|
+
none: false
|
162
|
+
requirements:
|
163
|
+
- - "="
|
164
|
+
- !ruby/object:Gem::Version
|
165
|
+
segments:
|
166
|
+
- 0
|
167
|
+
- 7
|
168
|
+
- 1
|
169
|
+
version: 0.7.1
|
170
|
+
type: :development
|
171
|
+
version_requirements: *id010
|
140
172
|
description:
|
141
173
|
email:
|
142
174
|
- dolzenko@gmail.com
|
@@ -153,10 +185,12 @@ files:
|
|
153
185
|
- lib/reflexive/columnizer.rb
|
154
186
|
- lib/reflexive/constantize.rb
|
155
187
|
- lib/reflexive/core_ext/kernel/singleton_class.rb
|
188
|
+
- lib/reflexive/core_ext/module/reflexive_instance_methods.rb
|
156
189
|
- lib/reflexive/descendants.rb
|
157
190
|
- lib/reflexive/faster_open_struct.rb
|
158
191
|
- lib/reflexive/helpers.rb
|
159
192
|
- lib/reflexive/methods.rb
|
193
|
+
- lib/reflexive/method_lookup.rb
|
160
194
|
- lib/reflexive/parse_tree_top_down_walker.rb
|
161
195
|
- lib/reflexive/reflexive_ripper.rb
|
162
196
|
- lib/reflexive/routing_helpers.rb
|
@@ -174,12 +208,16 @@ files:
|
|
174
208
|
- views/files_show.erb
|
175
209
|
- views/layout.erb
|
176
210
|
- views/methods_apidock.erb
|
211
|
+
- views/methods_choose.erb
|
177
212
|
- views/methods_definition.erb
|
178
213
|
- views/methods_rubydoc.erb
|
179
214
|
- spec/coderay_html_encoder_spec.rb
|
180
215
|
- spec/coderay_ruby_scanner_spec.rb
|
216
|
+
- spec/integration_spec.rb
|
217
|
+
- spec/integration_spec_fixture.rb
|
181
218
|
- spec/io_interceptor.rb
|
182
219
|
- spec/methods_spec.rb
|
220
|
+
- spec/method_lookup_spec.rb
|
183
221
|
- spec/rails_integration_spec.rb
|
184
222
|
- spec/rails_integration_spec_helper.rb
|
185
223
|
- spec/reflexive_ripper_spec.rb
|
@@ -206,7 +244,6 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
206
244
|
requirements:
|
207
245
|
- - ">="
|
208
246
|
- !ruby/object:Gem::Version
|
209
|
-
hash: 49
|
210
247
|
segments:
|
211
248
|
- 1
|
212
249
|
- 9
|
@@ -217,7 +254,6 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
217
254
|
requirements:
|
218
255
|
- - ">="
|
219
256
|
- !ruby/object:Gem::Version
|
220
|
-
hash: 3
|
221
257
|
segments:
|
222
258
|
- 0
|
223
259
|
version: "0"
|