nyanko 0.0.1 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +7 -6
- data/lib/nyanko/config.rb +17 -0
- data/lib/nyanko/controller.rb +1 -0
- data/lib/nyanko/exception_handler.rb +43 -0
- data/lib/nyanko/invoker/function_finder.rb +4 -4
- data/lib/nyanko/invoker.rb +2 -2
- data/lib/nyanko/loader.rb +6 -1
- data/lib/nyanko/railtie.rb +0 -2
- data/lib/nyanko/unit_proxy_provider.rb +1 -0
- data/lib/nyanko/version.rb +1 -1
- data/lib/nyanko.rb +2 -0
- data/spec/fixtures/units/example_unit/example_unit.rb +4 -0
- data/spec/nyanko/controller_spec.rb +5 -0
- data/spec/nyanko/exception_handler_spec.rb +57 -0
- data/spec/nyanko/unit_proxy_provider_spec.rb +4 -0
- metadata +51 -26
- checksums.yaml +0 -7
data/README.md
CHANGED
@@ -1,8 +1,11 @@
|
|
1
1
|
# Nyanko
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
2
|
+
```
|
3
|
+
_ ∧ ∧___
|
4
|
+
/(*゚ー゚) /\ Nyanko is a Rails extension framework,
|
5
|
+
/| ̄ ∪∪  ̄|\/ which is deeply inspired from Chanko
|
6
|
+
| |/ and has same API and clean implementation as Chanko.
|
7
|
+
 ̄ ̄ ̄ ̄ ̄ https://github.com/cookpad/chanko
|
8
|
+
```
|
6
9
|
|
7
10
|
|
8
11
|
## Requirements
|
@@ -98,8 +101,6 @@ $ rails s
|
|
98
101
|
|
99
102
|
## Todo
|
100
103
|
* auto-reloading
|
101
|
-
* logger
|
102
104
|
* configuration
|
103
|
-
* backwoard compatibility (alias ext to unit)
|
104
105
|
* document
|
105
106
|
* test (for now, test coverage is 100%)
|
data/lib/nyanko/config.rb
CHANGED
@@ -8,6 +8,23 @@ module Nyanko
|
|
8
8
|
def units_directory_path=(path)
|
9
9
|
@units_directory_path = path
|
10
10
|
end
|
11
|
+
|
12
|
+
def raise_error
|
13
|
+
@raise_error ||= lambda { Rails.env.development? }
|
14
|
+
@raise_error.respond_to?(:call) ? @raise_error.call : @raise_error
|
15
|
+
end
|
16
|
+
|
17
|
+
def raise_error=(raise_error)
|
18
|
+
@raise_error = raise_error
|
19
|
+
end
|
20
|
+
|
21
|
+
def backtrace_limit
|
22
|
+
@backtrace_limit ||= 10
|
23
|
+
end
|
24
|
+
|
25
|
+
def backtrace_limit=(limit)
|
26
|
+
@backtrace_limit = limit
|
27
|
+
end
|
11
28
|
end
|
12
29
|
end
|
13
30
|
end
|
data/lib/nyanko/controller.rb
CHANGED
@@ -0,0 +1,43 @@
|
|
1
|
+
module Nyanko
|
2
|
+
module ExceptionHandler
|
3
|
+
class << self
|
4
|
+
def handle(exception)
|
5
|
+
logger.debug Message.new(exception).to_s
|
6
|
+
raise exception if Config.raise_error
|
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
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -1,11 +1,11 @@
|
|
1
1
|
module Nyanko
|
2
2
|
module Invoker
|
3
3
|
class FunctionFinder
|
4
|
-
UnitNotFound = Class.new(StandardError)
|
5
4
|
FunctionNotFound = Class.new(StandardError)
|
6
5
|
|
7
|
-
def self.find(
|
8
|
-
new(
|
6
|
+
def self.find(context, options)
|
7
|
+
new(context, options).find or
|
8
|
+
raise FunctionNotFound, "The function for #{options[:functions].inspect} is not found"
|
9
9
|
end
|
10
10
|
|
11
11
|
def initialize(context, options)
|
@@ -29,7 +29,7 @@ module Nyanko
|
|
29
29
|
alias_method_chain :find, :dependencies
|
30
30
|
|
31
31
|
def find_unit(name)
|
32
|
-
Loader.load(name)
|
32
|
+
Loader.load(name)
|
33
33
|
end
|
34
34
|
|
35
35
|
def has_inactive_dependent_unit?
|
data/lib/nyanko/invoker.rb
CHANGED
@@ -10,8 +10,8 @@ module Nyanko
|
|
10
10
|
result = function.invoke(self, options.invoke_options)
|
11
11
|
result = surround_with_html_tag(result, function, options) if view?
|
12
12
|
result
|
13
|
-
rescue Exception
|
14
|
-
|
13
|
+
rescue Exception => exception
|
14
|
+
ExceptionHandler.handle(exception)
|
15
15
|
case
|
16
16
|
when !block
|
17
17
|
nil
|
data/lib/nyanko/loader.rb
CHANGED
@@ -2,6 +2,8 @@ require "pathname"
|
|
2
2
|
|
3
3
|
module Nyanko
|
4
4
|
class Loader
|
5
|
+
UnitNotFound = Class.new(StandardError)
|
6
|
+
|
5
7
|
class << self
|
6
8
|
def load(unit_name)
|
7
9
|
new(unit_name).load
|
@@ -31,7 +33,8 @@ module Nyanko
|
|
31
33
|
def load_from_file
|
32
34
|
require_unit_files
|
33
35
|
cache[@name] = constantize
|
34
|
-
rescue Exception
|
36
|
+
rescue Exception => exception
|
37
|
+
ExceptionHandler.handle(exception)
|
35
38
|
cache[@name] = false
|
36
39
|
nil
|
37
40
|
end
|
@@ -50,6 +53,8 @@ module Nyanko
|
|
50
53
|
|
51
54
|
def constantize
|
52
55
|
@name.to_s.camelize.constantize
|
56
|
+
rescue NameError
|
57
|
+
raise UnitNotFound, "The unit for #{@name.inspect} is not found"
|
53
58
|
end
|
54
59
|
|
55
60
|
def cache
|
data/lib/nyanko/railtie.rb
CHANGED
data/lib/nyanko/version.rb
CHANGED
data/lib/nyanko.rb
CHANGED
@@ -2,10 +2,12 @@ require "action_controller"
|
|
2
2
|
require "action_view"
|
3
3
|
require "active_record"
|
4
4
|
require "active_support/all"
|
5
|
+
require "rails"
|
5
6
|
|
6
7
|
require "nyanko/active_if"
|
7
8
|
require "nyanko/config"
|
8
9
|
require "nyanko/controller"
|
10
|
+
require "nyanko/exception_handler"
|
9
11
|
require "nyanko/function"
|
10
12
|
require "nyanko/helper"
|
11
13
|
require "nyanko/invoker"
|
@@ -9,6 +9,7 @@ module Nyanko
|
|
9
9
|
unit_action(:example_unit, :test)
|
10
10
|
unit_action(:example_unit, :foo, :bar)
|
11
11
|
unit_action(:example_unit, :error)
|
12
|
+
ext_action(:example_unit, :alias)
|
12
13
|
|
13
14
|
def head(code)
|
14
15
|
"Bad Request #{code}"
|
@@ -29,6 +30,10 @@ module Nyanko
|
|
29
30
|
controller.bar.should == "bar"
|
30
31
|
end
|
31
32
|
|
33
|
+
it "is aliased with `ext_action`" do
|
34
|
+
controller.alias.should == "alias"
|
35
|
+
end
|
36
|
+
|
32
37
|
context "when invoke is fallen back" do
|
33
38
|
it "halts with 400 status code" do
|
34
39
|
controller.error.should == "Bad Request 400"
|
@@ -0,0 +1,57 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
module Nyanko
|
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
|
+
context "when Config.raise_error is truthy" do
|
33
|
+
around do |example|
|
34
|
+
origin, Config.raise_error = Config.raise_error, true
|
35
|
+
example.run
|
36
|
+
Config.raise_error = origin
|
37
|
+
end
|
38
|
+
|
39
|
+
it "raises up error" do
|
40
|
+
expect { described_class.handle(exception) }.to raise_error
|
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)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
metadata
CHANGED
@@ -1,74 +1,84 @@
|
|
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.3
|
5
|
+
prerelease:
|
5
6
|
platform: ruby
|
6
7
|
authors:
|
7
8
|
- Ryo Nakamura
|
8
9
|
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
|
-
date: 2013-01-
|
12
|
+
date: 2013-01-28 00:00:00.000000000 Z
|
12
13
|
dependencies:
|
13
14
|
- !ruby/object:Gem::Dependency
|
14
15
|
name: rails
|
15
16
|
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
16
18
|
requirements:
|
17
|
-
- -
|
19
|
+
- - ! '>='
|
18
20
|
- !ruby/object:Gem::Version
|
19
21
|
version: 3.0.10
|
20
22
|
type: :runtime
|
21
23
|
prerelease: false
|
22
24
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
23
26
|
requirements:
|
24
|
-
- -
|
27
|
+
- - ! '>='
|
25
28
|
- !ruby/object:Gem::Version
|
26
29
|
version: 3.0.10
|
27
30
|
- !ruby/object:Gem::Dependency
|
28
31
|
name: coffee-rails
|
29
32
|
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
30
34
|
requirements:
|
31
|
-
- -
|
35
|
+
- - ! '>='
|
32
36
|
- !ruby/object:Gem::Version
|
33
37
|
version: 3.0.10
|
34
38
|
type: :development
|
35
39
|
prerelease: false
|
36
40
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
37
42
|
requirements:
|
38
|
-
- -
|
43
|
+
- - ! '>='
|
39
44
|
- !ruby/object:Gem::Version
|
40
45
|
version: 3.0.10
|
41
46
|
- !ruby/object:Gem::Dependency
|
42
47
|
name: jquery-rails
|
43
48
|
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
44
50
|
requirements:
|
45
|
-
- -
|
51
|
+
- - ! '>='
|
46
52
|
- !ruby/object:Gem::Version
|
47
53
|
version: '0'
|
48
54
|
type: :development
|
49
55
|
prerelease: false
|
50
56
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
51
58
|
requirements:
|
52
|
-
- -
|
59
|
+
- - ! '>='
|
53
60
|
- !ruby/object:Gem::Version
|
54
61
|
version: '0'
|
55
62
|
- !ruby/object:Gem::Dependency
|
56
63
|
name: pry
|
57
64
|
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
58
66
|
requirements:
|
59
|
-
- -
|
67
|
+
- - ! '>='
|
60
68
|
- !ruby/object:Gem::Version
|
61
69
|
version: '0'
|
62
70
|
type: :development
|
63
71
|
prerelease: false
|
64
72
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
65
74
|
requirements:
|
66
|
-
- -
|
75
|
+
- - ! '>='
|
67
76
|
- !ruby/object:Gem::Version
|
68
77
|
version: '0'
|
69
78
|
- !ruby/object:Gem::Dependency
|
70
79
|
name: rspec-rails
|
71
80
|
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
72
82
|
requirements:
|
73
83
|
- - '='
|
74
84
|
- !ruby/object:Gem::Version
|
@@ -76,6 +86,7 @@ dependencies:
|
|
76
86
|
type: :development
|
77
87
|
prerelease: false
|
78
88
|
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
79
90
|
requirements:
|
80
91
|
- - '='
|
81
92
|
- !ruby/object:Gem::Version
|
@@ -83,71 +94,81 @@ dependencies:
|
|
83
94
|
- !ruby/object:Gem::Dependency
|
84
95
|
name: sass-rails
|
85
96
|
requirement: !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
86
98
|
requirements:
|
87
|
-
- -
|
99
|
+
- - ! '>='
|
88
100
|
- !ruby/object:Gem::Version
|
89
101
|
version: 3.0.10
|
90
102
|
type: :development
|
91
103
|
prerelease: false
|
92
104
|
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
93
106
|
requirements:
|
94
|
-
- -
|
107
|
+
- - ! '>='
|
95
108
|
- !ruby/object:Gem::Version
|
96
109
|
version: 3.0.10
|
97
110
|
- !ruby/object:Gem::Dependency
|
98
111
|
name: simplecov
|
99
112
|
requirement: !ruby/object:Gem::Requirement
|
113
|
+
none: false
|
100
114
|
requirements:
|
101
|
-
- -
|
115
|
+
- - ! '>='
|
102
116
|
- !ruby/object:Gem::Version
|
103
117
|
version: '0'
|
104
118
|
type: :development
|
105
119
|
prerelease: false
|
106
120
|
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
none: false
|
107
122
|
requirements:
|
108
|
-
- -
|
123
|
+
- - ! '>='
|
109
124
|
- !ruby/object:Gem::Version
|
110
125
|
version: '0'
|
111
126
|
- !ruby/object:Gem::Dependency
|
112
127
|
name: slim
|
113
128
|
requirement: !ruby/object:Gem::Requirement
|
129
|
+
none: false
|
114
130
|
requirements:
|
115
|
-
- -
|
131
|
+
- - ! '>='
|
116
132
|
- !ruby/object:Gem::Version
|
117
133
|
version: '0'
|
118
134
|
type: :development
|
119
135
|
prerelease: false
|
120
136
|
version_requirements: !ruby/object:Gem::Requirement
|
137
|
+
none: false
|
121
138
|
requirements:
|
122
|
-
- -
|
139
|
+
- - ! '>='
|
123
140
|
- !ruby/object:Gem::Version
|
124
141
|
version: '0'
|
125
142
|
- !ruby/object:Gem::Dependency
|
126
143
|
name: sqlite3
|
127
144
|
requirement: !ruby/object:Gem::Requirement
|
145
|
+
none: false
|
128
146
|
requirements:
|
129
|
-
- -
|
147
|
+
- - ! '>='
|
130
148
|
- !ruby/object:Gem::Version
|
131
149
|
version: '0'
|
132
150
|
type: :development
|
133
151
|
prerelease: false
|
134
152
|
version_requirements: !ruby/object:Gem::Requirement
|
153
|
+
none: false
|
135
154
|
requirements:
|
136
|
-
- -
|
155
|
+
- - ! '>='
|
137
156
|
- !ruby/object:Gem::Version
|
138
157
|
version: '0'
|
139
158
|
- !ruby/object:Gem::Dependency
|
140
159
|
name: uglifier
|
141
160
|
requirement: !ruby/object:Gem::Requirement
|
161
|
+
none: false
|
142
162
|
requirements:
|
143
|
-
- -
|
163
|
+
- - ! '>='
|
144
164
|
- !ruby/object:Gem::Version
|
145
165
|
version: '0'
|
146
166
|
type: :development
|
147
167
|
prerelease: false
|
148
168
|
version_requirements: !ruby/object:Gem::Requirement
|
169
|
+
none: false
|
149
170
|
requirements:
|
150
|
-
- -
|
171
|
+
- - ! '>='
|
151
172
|
- !ruby/object:Gem::Version
|
152
173
|
version: '0'
|
153
174
|
description: Nyanko is a Rails extension tool deeply inspired from Chanko
|
@@ -157,7 +178,7 @@ executables: []
|
|
157
178
|
extensions: []
|
158
179
|
extra_rdoc_files: []
|
159
180
|
files:
|
160
|
-
-
|
181
|
+
- .gitignore
|
161
182
|
- Gemfile
|
162
183
|
- MIT-LICENSE
|
163
184
|
- README.md
|
@@ -166,6 +187,7 @@ files:
|
|
166
187
|
- lib/nyanko/active_if.rb
|
167
188
|
- lib/nyanko/config.rb
|
168
189
|
- lib/nyanko/controller.rb
|
190
|
+
- lib/nyanko/exception_handler.rb
|
169
191
|
- lib/nyanko/function.rb
|
170
192
|
- lib/nyanko/helper.rb
|
171
193
|
- lib/nyanko/invoker.rb
|
@@ -228,6 +250,7 @@ files:
|
|
228
250
|
- spec/fixtures/units/example_unit/example_unit.rb
|
229
251
|
- spec/fixtures/units/inactive_unit/inactive_unit.rb
|
230
252
|
- spec/nyanko/controller_spec.rb
|
253
|
+
- spec/nyanko/exception_handler_spec.rb
|
231
254
|
- spec/nyanko/function_spec.rb
|
232
255
|
- spec/nyanko/helper_spec.rb
|
233
256
|
- spec/nyanko/invoker_spec.rb
|
@@ -240,26 +263,27 @@ files:
|
|
240
263
|
- spec/spec_helper.rb
|
241
264
|
homepage: https://github.com/r7kamura/nyanko
|
242
265
|
licenses: []
|
243
|
-
metadata: {}
|
244
266
|
post_install_message:
|
245
267
|
rdoc_options: []
|
246
268
|
require_paths:
|
247
269
|
- lib
|
248
270
|
required_ruby_version: !ruby/object:Gem::Requirement
|
271
|
+
none: false
|
249
272
|
requirements:
|
250
|
-
- -
|
273
|
+
- - ! '>='
|
251
274
|
- !ruby/object:Gem::Version
|
252
275
|
version: '0'
|
253
276
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
277
|
+
none: false
|
254
278
|
requirements:
|
255
|
-
- -
|
279
|
+
- - ! '>='
|
256
280
|
- !ruby/object:Gem::Version
|
257
281
|
version: '0'
|
258
282
|
requirements: []
|
259
283
|
rubyforge_project:
|
260
|
-
rubygems_version:
|
284
|
+
rubygems_version: 1.8.24
|
261
285
|
signing_key:
|
262
|
-
specification_version:
|
286
|
+
specification_version: 3
|
263
287
|
summary: Rails extension tool
|
264
288
|
test_files:
|
265
289
|
- spec/dummy/README.rdoc
|
@@ -308,6 +332,7 @@ test_files:
|
|
308
332
|
- spec/fixtures/units/example_unit/example_unit.rb
|
309
333
|
- spec/fixtures/units/inactive_unit/inactive_unit.rb
|
310
334
|
- spec/nyanko/controller_spec.rb
|
335
|
+
- spec/nyanko/exception_handler_spec.rb
|
311
336
|
- spec/nyanko/function_spec.rb
|
312
337
|
- spec/nyanko/helper_spec.rb
|
313
338
|
- spec/nyanko/invoker_spec.rb
|
checksums.yaml
DELETED
@@ -1,7 +0,0 @@
|
|
1
|
-
---
|
2
|
-
!binary "U0hBMQ==":
|
3
|
-
metadata.gz: 3bf6a9e3b51bc80536b6dd54ca34a36cce8bde19
|
4
|
-
data.tar.gz: ee455931da637b0687a514b177bdbcb42a43c1b1
|
5
|
-
!binary "U0hBNTEy":
|
6
|
-
metadata.gz: 49253ba6ec4aa0195957714b64ab93802ed1727c3af38a90b2c7bf003f861517209261f2e1c9a0a8b3d9e5b39191fe09d526bc4d03ce9cc0696db4180ac9a3dd
|
7
|
-
data.tar.gz: 29bb6270a940e5a74208536928f58c547c9b4fa042f69135e92a672b2dbf6b4458de9f388d7feaa58dbef81340c686131dddfe9096a8735ae63d0f2fa2598041
|