keight 0.2.0 → 0.3.0
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.
- checksums.yaml +4 -4
- data/CHANGES.md +237 -0
- data/README.md +285 -81
- data/Rakefile +27 -1
- data/bench/benchmarker.rb +2 -2
- data/bin/k8rb +112 -305
- data/keight.gemspec +4 -6
- data/lib/keight.rb +860 -822
- data/test/keight_test.rb +1007 -933
- data/test/oktest.rb +2 -2
- metadata +4 -68
- data/CHANGES.txt +0 -64
- data/lib/keight/skeleton/.gitignore +0 -10
- data/lib/keight/skeleton/README.txt +0 -13
- data/lib/keight/skeleton/app/action.rb +0 -106
- data/lib/keight/skeleton/app/api/hello.rb +0 -39
- data/lib/keight/skeleton/app/form/.keep +0 -0
- data/lib/keight/skeleton/app/helper/.keep +0 -0
- data/lib/keight/skeleton/app/model.rb +0 -144
- data/lib/keight/skeleton/app/model/.keep +0 -0
- data/lib/keight/skeleton/app/page/welcome.rb +0 -17
- data/lib/keight/skeleton/app/template/_layout.html.eruby +0 -56
- data/lib/keight/skeleton/app/template/welcome.html.eruby +0 -6
- data/lib/keight/skeleton/app/usecase/.keep +0 -0
- data/lib/keight/skeleton/config.rb +0 -46
- data/lib/keight/skeleton/config.ru +0 -6
- data/lib/keight/skeleton/config/app.rb +0 -29
- data/lib/keight/skeleton/config/app_dev.rb +0 -8
- data/lib/keight/skeleton/config/app_prod.rb +0 -7
- data/lib/keight/skeleton/config/app_stg.rb +0 -5
- data/lib/keight/skeleton/config/app_test.rb +0 -8
- data/lib/keight/skeleton/config/server_puma.rb +0 -22
- data/lib/keight/skeleton/config/server_unicorn.rb +0 -21
- data/lib/keight/skeleton/config/urlpath_mapping.rb +0 -16
- data/lib/keight/skeleton/index.txt +0 -39
- data/lib/keight/skeleton/main.rb +0 -22
- data/lib/keight/skeleton/static/lib/.keep +0 -0
- data/lib/keight/skeleton/test/api/hello_test.rb +0 -27
- data/lib/keight/skeleton/test/test_helper.rb +0 -9
data/test/oktest.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
###
|
2
|
-
### $Release: 0.
|
2
|
+
### $Release: 0.3.0 $
|
3
3
|
### $Copyright: copyright(c) 2014-2016 kuwata-lab.com all rights reserved $
|
4
4
|
### $License: MIT License $
|
5
5
|
###
|
@@ -16,7 +16,7 @@ end
|
|
16
16
|
module Oktest
|
17
17
|
|
18
18
|
|
19
|
-
VERSION = '$Release: 0.
|
19
|
+
VERSION = '$Release: 0.3.0 $'.split(/ /)[1]
|
20
20
|
|
21
21
|
|
22
22
|
class SkipException < Exception
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: keight
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- makoto kuwata
|
@@ -9,42 +9,8 @@ autorequire:
|
|
9
9
|
bindir:
|
10
10
|
- bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2016-
|
12
|
+
date: 2016-10-13 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
|
-
- !ruby/object:Gem::Dependency
|
15
|
-
name: rack
|
16
|
-
requirement: !ruby/object:Gem::Requirement
|
17
|
-
requirements:
|
18
|
-
- - "~>"
|
19
|
-
- !ruby/object:Gem::Version
|
20
|
-
version: '1.6'
|
21
|
-
type: :runtime
|
22
|
-
prerelease: false
|
23
|
-
version_requirements: !ruby/object:Gem::Requirement
|
24
|
-
requirements:
|
25
|
-
- - "~>"
|
26
|
-
- !ruby/object:Gem::Version
|
27
|
-
version: '1.6'
|
28
|
-
- !ruby/object:Gem::Dependency
|
29
|
-
name: baby_erubis
|
30
|
-
requirement: !ruby/object:Gem::Requirement
|
31
|
-
requirements:
|
32
|
-
- - "~>"
|
33
|
-
- !ruby/object:Gem::Version
|
34
|
-
version: '2.1'
|
35
|
-
- - ">="
|
36
|
-
- !ruby/object:Gem::Version
|
37
|
-
version: 2.1.1
|
38
|
-
type: :runtime
|
39
|
-
prerelease: false
|
40
|
-
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
requirements:
|
42
|
-
- - "~>"
|
43
|
-
- !ruby/object:Gem::Version
|
44
|
-
version: '2.1'
|
45
|
-
- - ">="
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: 2.1.1
|
48
14
|
- !ruby/object:Gem::Dependency
|
49
15
|
name: rack-test_app
|
50
16
|
requirement: !ruby/object:Gem::Requirement
|
@@ -76,7 +42,7 @@ executables:
|
|
76
42
|
extensions: []
|
77
43
|
extra_rdoc_files: []
|
78
44
|
files:
|
79
|
-
- CHANGES.
|
45
|
+
- CHANGES.md
|
80
46
|
- MIT-LICENSE
|
81
47
|
- README.md
|
82
48
|
- Rakefile
|
@@ -85,36 +51,6 @@ files:
|
|
85
51
|
- bin/k8rb
|
86
52
|
- keight.gemspec
|
87
53
|
- lib/keight.rb
|
88
|
-
- lib/keight/skeleton/.gitignore
|
89
|
-
- lib/keight/skeleton/README.txt
|
90
|
-
- lib/keight/skeleton/app/action.rb
|
91
|
-
- lib/keight/skeleton/app/api/hello.rb
|
92
|
-
- lib/keight/skeleton/app/form/.keep
|
93
|
-
- lib/keight/skeleton/app/helper/.keep
|
94
|
-
- lib/keight/skeleton/app/model.rb
|
95
|
-
- lib/keight/skeleton/app/model/.keep
|
96
|
-
- lib/keight/skeleton/app/page/welcome.rb
|
97
|
-
- lib/keight/skeleton/app/template/_layout.html.eruby
|
98
|
-
- lib/keight/skeleton/app/template/welcome.html.eruby
|
99
|
-
- lib/keight/skeleton/app/usecase/.keep
|
100
|
-
- lib/keight/skeleton/config.rb
|
101
|
-
- lib/keight/skeleton/config.ru
|
102
|
-
- lib/keight/skeleton/config/app.rb
|
103
|
-
- lib/keight/skeleton/config/app_dev.private
|
104
|
-
- lib/keight/skeleton/config/app_dev.rb
|
105
|
-
- lib/keight/skeleton/config/app_prod.rb
|
106
|
-
- lib/keight/skeleton/config/app_stg.rb
|
107
|
-
- lib/keight/skeleton/config/app_test.private
|
108
|
-
- lib/keight/skeleton/config/app_test.rb
|
109
|
-
- lib/keight/skeleton/config/server_puma.rb
|
110
|
-
- lib/keight/skeleton/config/server_unicorn.rb
|
111
|
-
- lib/keight/skeleton/config/urlpath_mapping.rb
|
112
|
-
- lib/keight/skeleton/index.txt
|
113
|
-
- lib/keight/skeleton/main.rb
|
114
|
-
- lib/keight/skeleton/static/lib/.keep
|
115
|
-
- lib/keight/skeleton/test/api/hello_test.rb
|
116
|
-
- lib/keight/skeleton/test/test_helper.rb
|
117
|
-
- lib/keight/skeleton/tmp/upload/.keep
|
118
54
|
- test/data/example1.jpg
|
119
55
|
- test/data/example1.png
|
120
56
|
- test/data/multipart.form
|
@@ -124,7 +60,7 @@ files:
|
|
124
60
|
- test/oktest.rb
|
125
61
|
homepage: https://github.com/kwatch/keight/tree/ruby
|
126
62
|
licenses:
|
127
|
-
- MIT
|
63
|
+
- MIT
|
128
64
|
metadata: {}
|
129
65
|
post_install_message:
|
130
66
|
rdoc_options: []
|
data/CHANGES.txt
DELETED
@@ -1,64 +0,0 @@
|
|
1
|
-
Changes
|
2
|
-
=======
|
3
|
-
|
4
|
-
|
5
|
-
Release 0.2.0 (2016-01-06)
|
6
|
-
--------------------------
|
7
|
-
|
8
|
-
* [change] `K8::RackApplication#mount()` is removed.
|
9
|
-
Use `K8::RackApplication.new([...])` instead.
|
10
|
-
|
11
|
-
* [change] `k8rb init` is renamed to `k8rb project`.
|
12
|
-
|
13
|
-
$ k8rb project myapp1
|
14
|
-
$ cd myapp1
|
15
|
-
|
16
|
-
* [enhance] Auto redirection support.
|
17
|
-
For example, `GET /books` is defined and `GET /books/` is requested,
|
18
|
-
then it will be redirected to `GET /books`.
|
19
|
-
|
20
|
-
* [enhance] Performance improved for variable urlpath.
|
21
|
-
|
22
|
-
* [enhance] Implement urlpath helpers.
|
23
|
-
|
24
|
-
p BookAPI[:do_update].method #=> :PUT
|
25
|
-
p BookAPI[:do_update].urlpath(123) #=> '/api/books/123'
|
26
|
-
p BookAPI[:do_update].form_action_attr(123) #=> '/api/books/123?_method=PUT'
|
27
|
-
|
28
|
-
* [change] `k8rb mapping` now prints output in text format, not YAML format.
|
29
|
-
|
30
|
-
* [enhance] `k8rb mapping` supports `--format=FORMAT` option.
|
31
|
-
|
32
|
-
$ k8rb mapping --format=text # or yaml/json/javascript/jquery/angular
|
33
|
-
|
34
|
-
* [enhance] `k8rb` command supports `cdnjs` action which download JavaScript
|
35
|
-
libraries from cdnjs.com.
|
36
|
-
|
37
|
-
$ k8rb cdnjs # list library
|
38
|
-
$ k8rb cdnjs 'jquery*' # search library
|
39
|
-
$ k8rb cdnjs jquery # list versions
|
40
|
-
$ k8rb cdnjs jquery 2.1.4 # download library
|
41
|
-
|
42
|
-
* [change] `k8rb init` command downloads jquery and modernizr from cdnjs.com.
|
43
|
-
|
44
|
-
* [change] `K8::Mock` and `K8::TestApp` are removed.
|
45
|
-
Use rack-test_app gem instead.
|
46
|
-
|
47
|
-
* [bugfix] Document fixed.
|
48
|
-
|
49
|
-
* [internal] Remove `K8::ActionClassMapping`, 'K8::ActionRouter' and
|
50
|
-
'K8::ActionFinder' classes.
|
51
|
-
|
52
|
-
* [internal] Define new class `K8::ActionMapping` instead of remove classes.
|
53
|
-
|
54
|
-
|
55
|
-
Release 0.1.0 (2015-10-27)
|
56
|
-
--------------------------
|
57
|
-
|
58
|
-
* Public release
|
59
|
-
|
60
|
-
|
61
|
-
Release 0.0.1 (2015-10-26)
|
62
|
-
--------------------------
|
63
|
-
|
64
|
-
* Test release
|
@@ -1,106 +0,0 @@
|
|
1
|
-
# -*- coding: utf-8 -*-
|
2
|
-
|
3
|
-
require 'keight'
|
4
|
-
require 'baby_erubis'
|
5
|
-
require 'baby_erubis/renderer'
|
6
|
-
|
7
|
-
|
8
|
-
class StrippedHtmlTemplate < BabyErubis::Html
|
9
|
-
def parse(input, *args)
|
10
|
-
## strip spaces of indentation
|
11
|
-
stripped = input.gsub(/^[ \t]+</, '<')
|
12
|
-
return super(stripped, *args)
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
|
17
|
-
module My
|
18
|
-
end
|
19
|
-
|
20
|
-
|
21
|
-
class My::Action < K8::Action
|
22
|
-
|
23
|
-
|
24
|
-
##
|
25
|
-
## template
|
26
|
-
##
|
27
|
-
|
28
|
-
ERUBY_PATH = ['app/template']
|
29
|
-
ERUBY_LAYOUT = :_layout
|
30
|
-
#ERUBY_HTML = BabyErubis::Html
|
31
|
-
ERUBY_HTML = StrippedHtmlTemplate
|
32
|
-
ERUBY_HTML_EXT = '.html.eruby'
|
33
|
-
ERUBY_TEXT = BabyErubis::Text
|
34
|
-
ERUBY_TEXT_EXT = '.eruby'
|
35
|
-
ERUBY_CACHE = {}
|
36
|
-
|
37
|
-
include BabyErubis::HtmlEscaper # define escape()
|
38
|
-
include BabyErubis::Renderer # define eruby_render_{html,text}()
|
39
|
-
|
40
|
-
protected
|
41
|
-
|
42
|
-
alias render_html eruby_render_html
|
43
|
-
alias render_text eruby_render_text
|
44
|
-
|
45
|
-
|
46
|
-
##
|
47
|
-
## event handler (= exception handler)
|
48
|
-
##
|
49
|
-
|
50
|
-
protected
|
51
|
-
|
52
|
-
##
|
53
|
-
## Define event handlers here.
|
54
|
-
##
|
55
|
-
## ex:
|
56
|
-
## class Event < Exception; end
|
57
|
-
## class NotExist < Event; end
|
58
|
-
## class NotPermitted < Event; end
|
59
|
-
##
|
60
|
-
## def on_NotExist(ev) # or: define_method "on_Foo::Bar" do |ev|
|
61
|
-
## @resp.status_code = 404 # 404 Not Found
|
62
|
-
## {"error"=>"Not exist"}
|
63
|
-
## end
|
64
|
-
## def on_NotPermitted(ev)
|
65
|
-
## @resp.status_code = 403 # 403 Forbidden
|
66
|
-
## {"error"=>"Not permitted"}
|
67
|
-
## end
|
68
|
-
##
|
69
|
-
## def do_show(id)
|
70
|
-
## item = Item.find(id) or raise NotExist
|
71
|
-
## return {"item"=>{"id"=>id, "name"=>item.name}}
|
72
|
-
## end
|
73
|
-
##
|
74
|
-
|
75
|
-
|
76
|
-
end
|
77
|
-
|
78
|
-
|
79
|
-
class My::AdminAction < My::Action
|
80
|
-
|
81
|
-
## override template configs
|
82
|
-
ERUBY_PATH = ['admin/template']
|
83
|
-
ERUBY_LAYOUT = :_admin_layout
|
84
|
-
|
85
|
-
end
|
86
|
-
|
87
|
-
|
88
|
-
class My::StaticPage < My::Action
|
89
|
-
|
90
|
-
mapping '/{urlpath:.+}', :GET=>:do_send_file
|
91
|
-
STATIC_DIR = "static"
|
92
|
-
|
93
|
-
def do_send_file(urlpath)
|
94
|
-
filepath = "#{STATIC_DIR}/#{urlpath}"
|
95
|
-
File.file?(filepath) or raise K8::HttpException.new(404)
|
96
|
-
#env = @req.env
|
97
|
-
#header_name = env['sendfile.type'] || env['HTTP_X_SENDFILE_TYPE']
|
98
|
-
#if header_name && ! header_name.empty?
|
99
|
-
# @resp.headers[header_name] = filepath
|
100
|
-
# return nil
|
101
|
-
#else
|
102
|
-
return send_file(filepath)
|
103
|
-
#end
|
104
|
-
end
|
105
|
-
|
106
|
-
end
|
@@ -1,39 +0,0 @@
|
|
1
|
-
# -*- coding: utf-8 -*-
|
2
|
-
|
3
|
-
require 'keight'
|
4
|
-
|
5
|
-
#require_relative '../action'
|
6
|
-
|
7
|
-
|
8
|
-
class HelloAPI < K8::Action # or My::Action
|
9
|
-
|
10
|
-
mapping '' , :GET=>:do_index, :POST=>:do_create
|
11
|
-
mapping '/{id}' , :GET=>:do_show, :PUT=>:do_update, :DELETE=>:do_delete
|
12
|
-
## or if you want support '/hello.json' and '/hello/123.json':
|
13
|
-
#mapping '{ext}' , :GET=>:do_index, :POST=>:do_create
|
14
|
-
#mapping '/{id}{ext}' , :GET=>:do_show, :PUT=>:do_update, :DELETE=>:do_delete
|
15
|
-
|
16
|
-
def do_index()
|
17
|
-
query = @req.params_query # QUERY_STRING
|
18
|
-
{"action"=>"index", "query"=>query}
|
19
|
-
end
|
20
|
-
|
21
|
-
def do_create()
|
22
|
-
form = @req.params_form # or @req.params_json
|
23
|
-
{"action"=>"create", "form"=>form}
|
24
|
-
end
|
25
|
-
|
26
|
-
def do_show(id)
|
27
|
-
{"action"=>"show", "id"=>id}
|
28
|
-
end
|
29
|
-
|
30
|
-
def do_update(id)
|
31
|
-
form = @req.params_form # or @req.params_json
|
32
|
-
{"action"=>"update", "id"=>id, "form"=>form}
|
33
|
-
end
|
34
|
-
|
35
|
-
def do_delete(id)
|
36
|
-
{"action"=>"delete", "id"=>id}
|
37
|
-
end
|
38
|
-
|
39
|
-
end
|
File without changes
|
File without changes
|
@@ -1,144 +0,0 @@
|
|
1
|
-
# -*- coding: utf-8 -*-
|
2
|
-
|
3
|
-
##
|
4
|
-
## Define base classes of models here.
|
5
|
-
##
|
6
|
-
|
7
|
-
## ***********************************************
|
8
|
-
## The followings are just examples.
|
9
|
-
## Remove them and define your own classes.
|
10
|
-
## ***********************************************
|
11
|
-
|
12
|
-
class Entity
|
13
|
-
end
|
14
|
-
|
15
|
-
## ex: Customer, Department, Company, Product, ...
|
16
|
-
class ResourceEntity < Entity # or NounEntity
|
17
|
-
end
|
18
|
-
|
19
|
-
## ex: SalesOrder, Shipping, Requisition, Approval, ...
|
20
|
-
class EventEntity < Entity # or VerbEntity
|
21
|
-
end
|
22
|
-
|
23
|
-
## ex: Client, Supplier, Position, ...
|
24
|
-
class RoleEntity < Entity
|
25
|
-
end
|
26
|
-
|
27
|
-
## ex: Belonging, Writing, BOM, ...
|
28
|
-
class MappingEntity < Entity
|
29
|
-
end
|
30
|
-
|
31
|
-
|
32
|
-
## Define event class as exception in order to be
|
33
|
-
## caught in My::Action class.
|
34
|
-
class Event < Exception
|
35
|
-
end
|
36
|
-
|
37
|
-
class NotExist < Event
|
38
|
-
end
|
39
|
-
|
40
|
-
class NotPermitted < Event
|
41
|
-
end
|
42
|
-
|
43
|
-
class NotCorrect < Event
|
44
|
-
end
|
45
|
-
|
46
|
-
|
47
|
-
## Form class
|
48
|
-
class Form
|
49
|
-
|
50
|
-
def initialize(params={})
|
51
|
-
@params = params
|
52
|
-
end
|
53
|
-
|
54
|
-
attr_reader :params, :errors
|
55
|
-
|
56
|
-
def self.new_from(model)
|
57
|
-
params = {
|
58
|
-
#'val' => model.val,
|
59
|
-
}
|
60
|
-
self.new(params)
|
61
|
-
end
|
62
|
-
|
63
|
-
def validate
|
64
|
-
@errors = errors = {}
|
65
|
-
#
|
66
|
-
#k = 'val'
|
67
|
-
#v = @params[k].to_s.strip
|
68
|
-
#if v.empty?
|
69
|
-
# errors[k] = "Required"
|
70
|
-
#elsif v !~ /\A\d+\z/
|
71
|
-
# errors[k] = "Integer expected"
|
72
|
-
#end
|
73
|
-
#@params[k] = v
|
74
|
-
#
|
75
|
-
return errors
|
76
|
-
end
|
77
|
-
|
78
|
-
def error(name)
|
79
|
-
@errors[name]
|
80
|
-
end
|
81
|
-
|
82
|
-
def populate_into(model)
|
83
|
-
#model.val = @params['val'].to_i
|
84
|
-
return model
|
85
|
-
end
|
86
|
-
|
87
|
-
end
|
88
|
-
|
89
|
-
|
90
|
-
## Operation class (aka Service class)
|
91
|
-
class Operation
|
92
|
-
|
93
|
-
def initialize(db, login_user=nil)
|
94
|
-
@db = db
|
95
|
-
@login_user = login_user
|
96
|
-
end
|
97
|
-
|
98
|
-
end
|
99
|
-
|
100
|
-
|
101
|
-
## Usecase class in order to separate business logics from framework.
|
102
|
-
class UseCase
|
103
|
-
|
104
|
-
def initialize(db, login_user=nil)
|
105
|
-
@db = db
|
106
|
-
@login_user = login_user
|
107
|
-
end
|
108
|
-
|
109
|
-
def run(params, *urlpath_params)
|
110
|
-
errors = validate(params)
|
111
|
-
return nil, errors if errors
|
112
|
-
args = accommodate(params, *urlpath_params)
|
113
|
-
model, error = execute(*args)
|
114
|
-
return nil, error if error
|
115
|
-
content = represent(model)
|
116
|
-
return content, nil
|
117
|
-
end
|
118
|
-
|
119
|
-
private
|
120
|
-
|
121
|
-
## validate params and return errors as Hash object.
|
122
|
-
def validate(params)
|
123
|
-
errors = {}
|
124
|
-
return errors
|
125
|
-
end
|
126
|
-
|
127
|
-
## convert params and urlpath params into args of execute()
|
128
|
-
def accommodate(params, *urlpath_params)
|
129
|
-
args = urlpath_params + [params]
|
130
|
-
return args
|
131
|
-
end
|
132
|
-
|
133
|
-
## execute business logic
|
134
|
-
def execute(*args)
|
135
|
-
model = nil
|
136
|
-
return model
|
137
|
-
end
|
138
|
-
|
139
|
-
## convert model object into JSON or HTML
|
140
|
-
def represent(model)
|
141
|
-
return {}
|
142
|
-
end
|
143
|
-
|
144
|
-
end
|