nyanko 0.0.5 → 0.0.6
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.
- data/Gemfile +1 -0
- data/lib/nyanko/config.rb +6 -1
- data/lib/nyanko/controller.rb +11 -0
- data/lib/nyanko/exception_handler.rb +1 -34
- data/lib/nyanko/function.rb +1 -2
- data/lib/nyanko/invoker.rb +2 -0
- data/lib/nyanko/loader.rb +1 -1
- data/lib/nyanko/logger.rb +60 -0
- data/lib/nyanko/unit.rb +4 -5
- data/lib/nyanko/unit_proxy_provider.rb +13 -5
- data/lib/nyanko/version.rb +1 -1
- data/lib/nyanko.rb +1 -0
- data/nyanko.gemspec +1 -0
- data/spec/controllers/application_controller_spec.rb +15 -0
- data/spec/nyanko/exception_handler_spec.rb +1 -41
- data/spec/nyanko/invoker_spec.rb +7 -0
- data/spec/nyanko/loader_spec.rb +0 -14
- data/spec/nyanko/logger_spec.rb +90 -0
- data/spec/nyanko/unit_proxy_provider_spec.rb +14 -4
- metadata +23 -2
data/Gemfile
CHANGED
data/lib/nyanko/config.rb
CHANGED
@@ -4,14 +4,19 @@ module Nyanko
|
|
4
4
|
attr_accessor(
|
5
5
|
:backtrace_limit,
|
6
6
|
:cache_units,
|
7
|
+
:clear_units_cache,
|
7
8
|
:compatible_css_class,
|
9
|
+
:enable_logger,
|
10
|
+
:proxy_method_name,
|
8
11
|
:raise_error,
|
9
12
|
:units_directory_path
|
10
13
|
)
|
11
14
|
|
12
15
|
def reset
|
13
16
|
self.backtrace_limit = 10
|
14
|
-
self.
|
17
|
+
self.clear_units_cache = Rails.env.development? || Rails.env.test?
|
18
|
+
self.enable_logger = true
|
19
|
+
self.proxy_method_name = :unit
|
15
20
|
self.raise_error = Rails.env.development?
|
16
21
|
self.units_directory_path = "app/units"
|
17
22
|
end
|
data/lib/nyanko/controller.rb
CHANGED
@@ -5,6 +5,17 @@ module Nyanko
|
|
5
5
|
module ClassMethods
|
6
6
|
private
|
7
7
|
|
8
|
+
def inherited(base)
|
9
|
+
if Config.clear_units_cache && base.name == "ApplicationController"
|
10
|
+
base.class_eval do
|
11
|
+
prepend_before_filter do
|
12
|
+
Nyanko::Loader.cache.clear
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
super
|
17
|
+
end
|
18
|
+
|
8
19
|
def unit_action(unit_name, *function_names, &block)
|
9
20
|
options = function_names.extract_options!
|
10
21
|
block ||= Proc.new { head 400 }
|
@@ -2,42 +2,9 @@ module Nyanko
|
|
2
2
|
module ExceptionHandler
|
3
3
|
class << self
|
4
4
|
def handle(exception)
|
5
|
-
|
5
|
+
Logger.debug(exception)
|
6
6
|
raise exception if Config.raise_error
|
7
7
|
end
|
8
|
-
|
9
|
-
def logger
|
10
|
-
Rails.logger
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
class Message
|
15
|
-
def initialize(exception)
|
16
|
-
@exception = exception
|
17
|
-
end
|
18
|
-
|
19
|
-
def to_s
|
20
|
-
"#{prefix} #{klass}#{body}\n#{backtrace}"
|
21
|
-
end
|
22
|
-
|
23
|
-
def prefix
|
24
|
-
" [Nyanko]"
|
25
|
-
end
|
26
|
-
|
27
|
-
def body
|
28
|
-
unless @exception.message.empty?
|
29
|
-
" - #{@exception}"
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
def klass
|
34
|
-
@exception.class
|
35
|
-
end
|
36
|
-
|
37
|
-
def backtrace
|
38
|
-
lines = @exception.backtrace[0...Config.backtrace_limit]
|
39
|
-
lines.map {|line| "#{prefix} #{line}" }.join("\n")
|
40
|
-
end
|
41
8
|
end
|
42
9
|
end
|
43
10
|
end
|
data/lib/nyanko/function.rb
CHANGED
@@ -55,12 +55,11 @@ module Nyanko
|
|
55
55
|
|
56
56
|
def with_unit_view_path(context)
|
57
57
|
if context.view?
|
58
|
-
origin = context.view_paths
|
59
58
|
context.view_paths.unshift unit.view_path
|
60
59
|
end
|
61
60
|
yield
|
62
61
|
ensure
|
63
|
-
context.view_paths
|
62
|
+
context.view_paths.paths.unshift if context.view?
|
64
63
|
end
|
65
64
|
end
|
66
65
|
end
|
data/lib/nyanko/invoker.rb
CHANGED
@@ -11,6 +11,8 @@ module Nyanko
|
|
11
11
|
result = function.invoke(self, options.invoke_options)
|
12
12
|
result = surround_with_html_tag(result, function, options) if view?
|
13
13
|
result
|
14
|
+
rescue FunctionFinder::FunctionNotFound
|
15
|
+
run_default
|
14
16
|
rescue Exception => exception
|
15
17
|
ExceptionHandler.handle(exception)
|
16
18
|
run_default
|
data/lib/nyanko/loader.rb
CHANGED
@@ -0,0 +1,60 @@
|
|
1
|
+
module Nyanko
|
2
|
+
module Logger
|
3
|
+
|
4
|
+
class << self
|
5
|
+
::Logger::Severity.constants.each do |level|
|
6
|
+
method_name = level.downcase
|
7
|
+
define_method(method_name) do |message|
|
8
|
+
logger.send(method_name, decorate(message)) if Config.enable_logger
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
def decorate(message)
|
13
|
+
Message.new(message).to_s
|
14
|
+
end
|
15
|
+
|
16
|
+
def logger
|
17
|
+
Rails.logger
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
class Message
|
22
|
+
PREFIX = " [Nyanko]"
|
23
|
+
|
24
|
+
def initialize(object)
|
25
|
+
@object = object
|
26
|
+
end
|
27
|
+
|
28
|
+
def to_s
|
29
|
+
prefix(content)
|
30
|
+
end
|
31
|
+
|
32
|
+
def prefix(str)
|
33
|
+
str.split("\n").map {|line| "#{PREFIX} #{line}" }.join("\n")
|
34
|
+
end
|
35
|
+
|
36
|
+
def content
|
37
|
+
if @object.is_a?(Exception)
|
38
|
+
"#{klass}#{body}\n#{backtrace}"
|
39
|
+
else
|
40
|
+
@object.to_s
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def body
|
45
|
+
unless @object.message.empty?
|
46
|
+
" - #@object"
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def klass
|
51
|
+
@object.class
|
52
|
+
end
|
53
|
+
|
54
|
+
def backtrace
|
55
|
+
lines = @object.backtrace[0...Config.backtrace_limit]
|
56
|
+
lines.map {|line| " #{line}" }.join("\n")
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
data/lib/nyanko/unit.rb
CHANGED
@@ -62,11 +62,10 @@ module Nyanko
|
|
62
62
|
end
|
63
63
|
|
64
64
|
def find_function(identifier, label)
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
scope[label] if scope
|
65
|
+
scope = ScopeFinder.find(identifier)
|
66
|
+
target = scope.ancestors.find {|klass| scopes[klass] }
|
67
|
+
functions = scopes[target]
|
68
|
+
functions[label] if functions
|
70
69
|
end
|
71
70
|
|
72
71
|
def functions
|
@@ -7,12 +7,20 @@ module Nyanko
|
|
7
7
|
include Helper
|
8
8
|
end
|
9
9
|
|
10
|
-
def
|
11
|
-
|
12
|
-
|
13
|
-
|
10
|
+
def method_missing(method_name, *args, &block)
|
11
|
+
if method_name == Config.proxy_method_name.to_sym
|
12
|
+
class_eval do
|
13
|
+
define_method(method_name) do |*_args|
|
14
|
+
name = _args.first || Function.current_unit.try(:to_key)
|
15
|
+
if name && unit = Loader.load(name)
|
16
|
+
UnitProxy.new(unit, self)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
send(method_name, args.first)
|
21
|
+
else
|
22
|
+
super
|
14
23
|
end
|
15
24
|
end
|
16
|
-
alias_method :ext, :unit
|
17
25
|
end
|
18
26
|
end
|
data/lib/nyanko/version.rb
CHANGED
data/lib/nyanko.rb
CHANGED
data/nyanko.gemspec
CHANGED
@@ -0,0 +1,15 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe ApplicationController do
|
4
|
+
controller do
|
5
|
+
def index
|
6
|
+
head 200
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
it "clears cache before each request" do
|
11
|
+
Nyanko::Loader.cache.should_receive(:clear).exactly(2)
|
12
|
+
get :index
|
13
|
+
get :index
|
14
|
+
end
|
15
|
+
end
|
@@ -2,33 +2,6 @@ require "spec_helper"
|
|
2
2
|
|
3
3
|
module Nyanko
|
4
4
|
describe ExceptionHandler do
|
5
|
-
let(:exception) do
|
6
|
-
exception = Exception.new("error message")
|
7
|
-
exception.set_backtrace(20.times.map {|i| "test.rb:#{i + 1}:in `method#{i + 1}'" })
|
8
|
-
exception
|
9
|
-
end
|
10
|
-
|
11
|
-
let(:lines) do
|
12
|
-
<<-EOS.strip_heredoc.split("\n").map {|line| " #{line}" }
|
13
|
-
[Nyanko] Exception - error message
|
14
|
-
[Nyanko] test.rb:1:in `method1'
|
15
|
-
[Nyanko] test.rb:2:in `method2'
|
16
|
-
[Nyanko] test.rb:3:in `method3'
|
17
|
-
[Nyanko] test.rb:4:in `method4'
|
18
|
-
[Nyanko] test.rb:5:in `method5'
|
19
|
-
[Nyanko] test.rb:6:in `method6'
|
20
|
-
[Nyanko] test.rb:7:in `method7'
|
21
|
-
[Nyanko] test.rb:8:in `method8'
|
22
|
-
[Nyanko] test.rb:9:in `method9'
|
23
|
-
[Nyanko] test.rb:10:in `method10'
|
24
|
-
EOS
|
25
|
-
end
|
26
|
-
|
27
|
-
it "logs exception as debug level" do
|
28
|
-
Rails.logger.should_receive(:debug).with(lines.join("\n"))
|
29
|
-
described_class.handle(exception)
|
30
|
-
end
|
31
|
-
|
32
5
|
context "when Config.raise_error is truthy" do
|
33
6
|
around do |example|
|
34
7
|
origin, Config.raise_error = Config.raise_error, true
|
@@ -37,20 +10,7 @@ module Nyanko
|
|
37
10
|
end
|
38
11
|
|
39
12
|
it "raises up error" do
|
40
|
-
expect { described_class.handle(
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
describe "when Config.backtrace_limit is configured" do
|
45
|
-
around do |example|
|
46
|
-
origin, Config.backtrace_limit = Config.backtrace_limit, 5
|
47
|
-
example.run
|
48
|
-
Config.backtrace_limit = origin
|
49
|
-
end
|
50
|
-
|
51
|
-
it "prints backtrace up to configured depth" do
|
52
|
-
Rails.logger.should_receive(:debug).with(lines[0..5].join("\n"))
|
53
|
-
described_class.handle(exception)
|
13
|
+
expect { described_class.handle(Exception.new) }.to raise_error
|
54
14
|
end
|
55
15
|
end
|
56
16
|
end
|
data/spec/nyanko/invoker_spec.rb
CHANGED
@@ -113,6 +113,13 @@ module Nyanko
|
|
113
113
|
end
|
114
114
|
end
|
115
115
|
|
116
|
+
context "when function is not found" do
|
117
|
+
it "runs default but not handled by ExceptionHandler" do
|
118
|
+
ExceptionHandler.should_not_receive(:handle)
|
119
|
+
view.invoke(:example_unit, :non_existent_function) { "default" }.should == "default"
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
116
123
|
context "when an error is raised in invoking" do
|
117
124
|
context "when block is given" do
|
118
125
|
context "when context is a view" do
|
data/spec/nyanko/loader_spec.rb
CHANGED
@@ -38,20 +38,6 @@ module Nyanko
|
|
38
38
|
described_class.load(:non_existent_unit)
|
39
39
|
end
|
40
40
|
end
|
41
|
-
|
42
|
-
context "when Config.cache_unit is false" do
|
43
|
-
around do |example|
|
44
|
-
origin, Config.cache_units = Config.cache_units, false
|
45
|
-
example.run
|
46
|
-
Config.cache_units = origin
|
47
|
-
end
|
48
|
-
|
49
|
-
it "loads unit without cache" do
|
50
|
-
described_class.any_instance.should_not_receive(:load_from_cache)
|
51
|
-
described_class.load(:example_unit)
|
52
|
-
described_class.load(:example_unit)
|
53
|
-
end
|
54
|
-
end
|
55
41
|
end
|
56
42
|
end
|
57
43
|
end
|
@@ -0,0 +1,90 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
require "stringio"
|
3
|
+
|
4
|
+
module Nyanko
|
5
|
+
describe Logger do
|
6
|
+
around do |example|
|
7
|
+
origin, Rails.logger = Rails.logger, ::Logger.new(io)
|
8
|
+
example.run
|
9
|
+
Rails.logger = origin
|
10
|
+
end
|
11
|
+
|
12
|
+
let(:io) do
|
13
|
+
StringIO.new
|
14
|
+
end
|
15
|
+
|
16
|
+
let(:log) do
|
17
|
+
io.string.rstrip
|
18
|
+
end
|
19
|
+
|
20
|
+
let(:exception) do
|
21
|
+
exception = Exception.new("error message")
|
22
|
+
exception.set_backtrace(20.times.map {|i| "test.rb:#{i + 1}:in `method#{i + 1}'" })
|
23
|
+
exception
|
24
|
+
end
|
25
|
+
|
26
|
+
let(:lines) do
|
27
|
+
<<-EOS.strip_heredoc.split("\n").map {|line| " #{line}" }
|
28
|
+
[Nyanko] Exception - error message
|
29
|
+
[Nyanko] test.rb:1:in `method1'
|
30
|
+
[Nyanko] test.rb:2:in `method2'
|
31
|
+
[Nyanko] test.rb:3:in `method3'
|
32
|
+
[Nyanko] test.rb:4:in `method4'
|
33
|
+
[Nyanko] test.rb:5:in `method5'
|
34
|
+
[Nyanko] test.rb:6:in `method6'
|
35
|
+
[Nyanko] test.rb:7:in `method7'
|
36
|
+
[Nyanko] test.rb:8:in `method8'
|
37
|
+
[Nyanko] test.rb:9:in `method9'
|
38
|
+
[Nyanko] test.rb:10:in `method10'
|
39
|
+
EOS
|
40
|
+
end
|
41
|
+
|
42
|
+
context "when Config.enable_logger is true" do
|
43
|
+
around do |example|
|
44
|
+
origin, Config.enable_logger = Config.enable_logger, true
|
45
|
+
example.run
|
46
|
+
Config.enable_logger = origin
|
47
|
+
end
|
48
|
+
|
49
|
+
context "when given Exception" do
|
50
|
+
it "parses and logs it" do
|
51
|
+
described_class.debug(exception)
|
52
|
+
log.should == lines.join("\n")
|
53
|
+
end
|
54
|
+
|
55
|
+
context "when Config.backtrace_limit is configured" do
|
56
|
+
around do |example|
|
57
|
+
origin, Config.backtrace_limit = Config.backtrace_limit, 5
|
58
|
+
example.run
|
59
|
+
Config.backtrace_limit = origin
|
60
|
+
end
|
61
|
+
|
62
|
+
it "prints backtrace up to configured depth" do
|
63
|
+
described_class.debug(exception)
|
64
|
+
log.should == lines[0..5].join("\n")
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
context "when given String" do
|
70
|
+
it "adds prefix" do
|
71
|
+
described_class.debug("test")
|
72
|
+
log.should == " [Nyanko] test"
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
context "when Config.enable_logger is false" do
|
78
|
+
around do |example|
|
79
|
+
origin, Config.enable_logger = Config.enable_logger, false
|
80
|
+
example.run
|
81
|
+
Config.enable_logger = origin
|
82
|
+
end
|
83
|
+
|
84
|
+
it "logs nothing" do
|
85
|
+
described_class.debug("test")
|
86
|
+
log.should == ""
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
@@ -7,10 +7,6 @@ module Nyanko
|
|
7
7
|
end
|
8
8
|
|
9
9
|
describe "#unit" do
|
10
|
-
it "is aliased with `ext`" do
|
11
|
-
view.ext(:example_unit).should be_a UnitProxy
|
12
|
-
end
|
13
|
-
|
14
10
|
context "when given unit name" do
|
15
11
|
it "returns proxy for specified unit" do
|
16
12
|
proxy = view.unit(:example_unit)
|
@@ -33,6 +29,20 @@ module Nyanko
|
|
33
29
|
proxy.unit.should == ExampleUnit
|
34
30
|
end
|
35
31
|
end
|
32
|
+
|
33
|
+
context "when Config.proxy_method_name is configured" do
|
34
|
+
around do |example|
|
35
|
+
origin, Config.proxy_method_name = Config.proxy_method_name, :proxy
|
36
|
+
example.run
|
37
|
+
Config.proxy_method_name = origin
|
38
|
+
end
|
39
|
+
|
40
|
+
it "change this method name with it" do
|
41
|
+
proxy = view.proxy(:example_unit)
|
42
|
+
proxy.should be_a UnitProxy
|
43
|
+
view.should be_respond_to(:proxy)
|
44
|
+
end
|
45
|
+
end
|
36
46
|
end
|
37
47
|
end
|
38
48
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nyanko
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.6
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-01-
|
12
|
+
date: 2013-01-29 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rails
|
@@ -155,6 +155,22 @@ dependencies:
|
|
155
155
|
- - ! '>='
|
156
156
|
- !ruby/object:Gem::Version
|
157
157
|
version: '0'
|
158
|
+
- !ruby/object:Gem::Dependency
|
159
|
+
name: thin
|
160
|
+
requirement: !ruby/object:Gem::Requirement
|
161
|
+
none: false
|
162
|
+
requirements:
|
163
|
+
- - ! '>='
|
164
|
+
- !ruby/object:Gem::Version
|
165
|
+
version: '0'
|
166
|
+
type: :development
|
167
|
+
prerelease: false
|
168
|
+
version_requirements: !ruby/object:Gem::Requirement
|
169
|
+
none: false
|
170
|
+
requirements:
|
171
|
+
- - ! '>='
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '0'
|
158
174
|
- !ruby/object:Gem::Dependency
|
159
175
|
name: uglifier
|
160
176
|
requirement: !ruby/object:Gem::Requirement
|
@@ -194,6 +210,7 @@ files:
|
|
194
210
|
- lib/nyanko/invoker/function_finder.rb
|
195
211
|
- lib/nyanko/invoker/options.rb
|
196
212
|
- lib/nyanko/loader.rb
|
213
|
+
- lib/nyanko/logger.rb
|
197
214
|
- lib/nyanko/railtie.rb
|
198
215
|
- lib/nyanko/unit.rb
|
199
216
|
- lib/nyanko/unit/extender.rb
|
@@ -204,6 +221,7 @@ files:
|
|
204
221
|
- lib/nyanko/unit_proxy_provider.rb
|
205
222
|
- lib/nyanko/version.rb
|
206
223
|
- nyanko.gemspec
|
224
|
+
- spec/controllers/application_controller_spec.rb
|
207
225
|
- spec/dummy/README.rdoc
|
208
226
|
- spec/dummy/Rakefile
|
209
227
|
- spec/dummy/app/assets/javascripts/application.js
|
@@ -255,6 +273,7 @@ files:
|
|
255
273
|
- spec/nyanko/helper_spec.rb
|
256
274
|
- spec/nyanko/invoker_spec.rb
|
257
275
|
- spec/nyanko/loader_spec.rb
|
276
|
+
- spec/nyanko/logger_spec.rb
|
258
277
|
- spec/nyanko/unit/extender_spec.rb
|
259
278
|
- spec/nyanko/unit/scope_finder_spec.rb
|
260
279
|
- spec/nyanko/unit_proxy_provider_spec.rb
|
@@ -286,6 +305,7 @@ signing_key:
|
|
286
305
|
specification_version: 3
|
287
306
|
summary: Rails extension tool
|
288
307
|
test_files:
|
308
|
+
- spec/controllers/application_controller_spec.rb
|
289
309
|
- spec/dummy/README.rdoc
|
290
310
|
- spec/dummy/Rakefile
|
291
311
|
- spec/dummy/app/assets/javascripts/application.js
|
@@ -337,6 +357,7 @@ test_files:
|
|
337
357
|
- spec/nyanko/helper_spec.rb
|
338
358
|
- spec/nyanko/invoker_spec.rb
|
339
359
|
- spec/nyanko/loader_spec.rb
|
360
|
+
- spec/nyanko/logger_spec.rb
|
340
361
|
- spec/nyanko/unit/extender_spec.rb
|
341
362
|
- spec/nyanko/unit/scope_finder_spec.rb
|
342
363
|
- spec/nyanko/unit_proxy_provider_spec.rb
|