ki 0.4.6 → 0.4.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +24 -0
- data/Gemfile.lock +25 -6
- data/Guardfile +11 -5
- data/README.md +78 -0
- data/Rakefile +4 -4
- data/ki.gemspec +24 -23
- data/lib/ki.rb +7 -4
- data/lib/ki/base_request.rb +2 -2
- data/lib/ki/helpers.rb +7 -7
- data/lib/ki/ki.rb +12 -18
- data/lib/ki/ki_app.rb +16 -0
- data/lib/ki/ki_cli.rb +11 -12
- data/lib/ki/ki_config.rb +12 -8
- data/lib/ki/middleware/admin_interface_generator.rb +1 -1
- data/lib/ki/middleware/api_handler.rb +7 -8
- data/lib/ki/middleware/base_middleware.rb +1 -1
- data/lib/ki/middleware/coffee_compiler.rb +2 -2
- data/lib/ki/middleware/doc_generator.rb +5 -4
- data/lib/ki/middleware/haml_compiler.rb +4 -22
- data/lib/ki/{modules/format_of.rb → middleware/helpers/format_of_helper.rb} +3 -3
- data/lib/ki/middleware/helpers/haml_compiler_helper.rb +27 -0
- data/lib/ki/{modules → middleware/helpers}/public_file_helper.rb +2 -2
- data/lib/ki/{modules → middleware/helpers}/view_helper.rb +3 -3
- data/lib/ki/middleware/init_middleware.rb +1 -1
- data/lib/ki/middleware/public_file_server.rb +1 -1
- data/lib/ki/middleware/sass_compiler.rb +3 -3
- data/lib/ki/model.rb +10 -11
- data/lib/ki/modules/{model_helpers.rb → model_helper.rb} +1 -1
- data/lib/ki/modules/query_interface.rb +7 -7
- data/lib/ki/modules/restrictions.rb +4 -5
- data/lib/ki/orm.rb +11 -11
- data/lib/ki/utils/api_error.rb +4 -4
- data/lib/ki/utils/extra_ruby.rb +3 -3
- data/lib/ki/utils/indifferent_hash.rb +1 -1
- data/lib/ki/version.rb +1 -1
- data/lib/ki/views/404.haml +1 -0
- data/lib/ki/views/instadmin.haml +47 -4
- data/spec/examples/base/app.rb +5 -0
- data/spec/examples/json.northpole.ro/Gemfile +1 -1
- data/spec/lib/ki/base_request_spec.rb +24 -24
- data/spec/lib/ki/helpers_spec.rb +1 -1
- data/spec/lib/ki/ki_app_spec.rb +13 -0
- data/spec/lib/ki/ki_config_spec.rb +16 -2
- data/spec/lib/ki/ki_spec.rb +11 -0
- data/spec/lib/ki/middleware/haml_compiler_spec.rb +6 -4
- data/spec/lib/ki/{modules/format_of_spec.rb → middleware/helpers/format_of_helper_spec.rb} +4 -1
- data/spec/lib/ki/model_spec.rb +14 -14
- data/spec/lib/ki/modules/model_helper_spec.rb +4 -0
- data/spec/lib/ki/orm_spec.rb +25 -25
- data/spec/spec_helper.rb +6 -4
- data/spec/util_spec.rb +2 -2
- metadata +36 -14
- data/spec/lib/ki/modules/model_helpers_spec.rb +0 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 506138e83d5016227ef6acdf6a5f7bf29e6191e8
|
4
|
+
data.tar.gz: c79f376faf3bca31d325f41d0e760ab9fb774861
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 00331f90e93a2dab923bf5d3131c773fd5ffdd1f6e6bf0a914cabcd5069ff24c6e2b3a27aa99758ad25ed062cda3c995cfbb1bf88b806e13a399023f68da49c9
|
7
|
+
data.tar.gz: b7d60288bbb44bdf9e7a0aa4b3502117bf36e5254131d762d514e951fcdcd163d0fe9f589b0168027f9d3aee248fe2ce39de73e4968d5093b819ff8a4998ae86
|
data/.rubocop.yml
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
AllCops:
|
2
|
+
Exclude:
|
3
|
+
- 'spec/examples/**/*'
|
4
|
+
|
5
|
+
Style/BracesAroundHashParameters:
|
6
|
+
Enabled: false
|
7
|
+
|
8
|
+
Style/Documentation:
|
9
|
+
Enabled: false
|
10
|
+
|
11
|
+
Style/BlockDelimiters:
|
12
|
+
Enabled: false
|
13
|
+
|
14
|
+
Metrics/LineLength:
|
15
|
+
Enabled: false
|
16
|
+
|
17
|
+
Metrics/MethodLength:
|
18
|
+
Enabled: false
|
19
|
+
|
20
|
+
Metrics/AbcSize:
|
21
|
+
Enabled: false
|
22
|
+
|
23
|
+
Lint/UnusedMethodArgument:
|
24
|
+
Enabled: false
|
data/Gemfile.lock
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
ki (0.4.
|
4
|
+
ki (0.4.7)
|
5
5
|
bson_ext
|
6
6
|
bundler (~> 1.5)
|
7
7
|
coffee-script
|
8
8
|
haml
|
9
|
-
mongo
|
9
|
+
mongo (= 1.9.2)
|
10
10
|
rack
|
11
11
|
rack-cors
|
12
12
|
rack-parser
|
@@ -16,8 +16,12 @@ PATH
|
|
16
16
|
GEM
|
17
17
|
remote: https://rubygems.org/
|
18
18
|
specs:
|
19
|
-
|
20
|
-
|
19
|
+
ast (2.0.0)
|
20
|
+
astrolabe (1.3.0)
|
21
|
+
parser (>= 2.2.0.pre.3, < 3.0)
|
22
|
+
bson (1.9.2)
|
23
|
+
bson_ext (1.9.2)
|
24
|
+
bson (~> 1.9.2)
|
21
25
|
celluloid (0.15.2)
|
22
26
|
timers (~> 1.1.0)
|
23
27
|
celluloid-io (0.15.0)
|
@@ -44,6 +48,9 @@ GEM
|
|
44
48
|
guard-rspec (4.2.8)
|
45
49
|
guard (~> 2.1)
|
46
50
|
rspec (>= 2.14, < 4.0)
|
51
|
+
guard-rubocop (1.2.0)
|
52
|
+
guard (~> 2.0)
|
53
|
+
rubocop (~> 0.20)
|
47
54
|
haml (4.0.6)
|
48
55
|
tilt
|
49
56
|
listen (2.7.1)
|
@@ -53,10 +60,13 @@ GEM
|
|
53
60
|
rb-inotify (>= 0.9)
|
54
61
|
lumberjack (1.0.5)
|
55
62
|
method_source (0.8.2)
|
56
|
-
mongo (
|
57
|
-
bson (~>
|
63
|
+
mongo (1.9.2)
|
64
|
+
bson (~> 1.9.2)
|
58
65
|
multi_json (1.11.0)
|
59
66
|
nio4r (1.0.0)
|
67
|
+
parser (2.2.2.1)
|
68
|
+
ast (>= 1.1, < 3.0)
|
69
|
+
powerpack (0.1.0)
|
60
70
|
pry (0.9.12.6)
|
61
71
|
coderay (~> 1.0)
|
62
72
|
method_source (~> 0.8)
|
@@ -67,6 +77,7 @@ GEM
|
|
67
77
|
rack
|
68
78
|
rack-test (0.6.2)
|
69
79
|
rack (>= 1.0)
|
80
|
+
rainbow (2.0.0)
|
70
81
|
rake (10.1.1)
|
71
82
|
rb-fsevent (0.9.4)
|
72
83
|
rb-inotify (0.9.3)
|
@@ -79,6 +90,13 @@ GEM
|
|
79
90
|
rspec-expectations (2.14.5)
|
80
91
|
diff-lcs (>= 1.1.3, < 2.0)
|
81
92
|
rspec-mocks (2.14.6)
|
93
|
+
rubocop (0.30.1)
|
94
|
+
astrolabe (~> 1.3)
|
95
|
+
parser (>= 2.2.2.1, < 3.0)
|
96
|
+
powerpack (~> 0.1)
|
97
|
+
rainbow (>= 1.99.1, < 3.0)
|
98
|
+
ruby-progressbar (~> 1.4)
|
99
|
+
ruby-progressbar (1.7.5)
|
82
100
|
sass (3.4.13)
|
83
101
|
simplecov (0.9.2)
|
84
102
|
docile (~> 1.1.0)
|
@@ -96,6 +114,7 @@ PLATFORMS
|
|
96
114
|
DEPENDENCIES
|
97
115
|
codeclimate-test-reporter
|
98
116
|
guard-rspec
|
117
|
+
guard-rubocop
|
99
118
|
ki!
|
100
119
|
rack-test
|
101
120
|
rake
|
data/Guardfile
CHANGED
@@ -1,9 +1,15 @@
|
|
1
1
|
# A sample Guardfile
|
2
2
|
# More info at https://github.com/guard/guard#readme
|
3
3
|
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
4
|
+
group :red_green_refactor, halt_on_fail: true do
|
5
|
+
guard :rspec do
|
6
|
+
watch(%r{^spec/.+_spec\.rb$})
|
7
|
+
watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
|
8
|
+
watch('spec/spec_helper.rb') { 'spec' }
|
9
|
+
end
|
9
10
|
|
11
|
+
guard :rubocop, cli: ['--config=.rubocop.yml', '--display-cop-names'] do
|
12
|
+
watch(/.+\.rb$/)
|
13
|
+
watch(%r{(?:.+/)?\.rubocop\.yml$}) { |m| File.dirname(m[0]) }
|
14
|
+
end
|
15
|
+
end
|
data/README.md
CHANGED
@@ -9,6 +9,36 @@ Tiny REST JSON ORM framework with MongoDB.
|
|
9
9
|
Ki's goal is to help you protoype your ideas blazing fast. It has a db backend
|
10
10
|
and provides a fullblown REST api on top.
|
11
11
|
|
12
|
+
**Table of Contents**
|
13
|
+
|
14
|
+
- [TLDR](#tldr)
|
15
|
+
- [Install](#install)
|
16
|
+
- [Getting started](#getting-started)
|
17
|
+
- [Create a new app](#create-a-new-app)
|
18
|
+
- [Adding a view](#adding-a-view)
|
19
|
+
- [Adding assets](#adding-assets)
|
20
|
+
- [View layout](#view-layout)
|
21
|
+
- [Middleware](#middleware)
|
22
|
+
- [Helpers](#helpers)
|
23
|
+
- [Adding a resource](#adding-a-resource)
|
24
|
+
- [Create](#create)
|
25
|
+
- [Get all](#get-all)
|
26
|
+
- [Get by id](#get-by-id)
|
27
|
+
- [Get advanced queries](#advanced-queries)
|
28
|
+
- [Update](#update)
|
29
|
+
- [Delete](#delete)
|
30
|
+
- [Required attributes](#required-attributes)
|
31
|
+
- [Unique attributes](#unique-attributes)
|
32
|
+
- [Restricting resource requests](#restricting-resource-requests)
|
33
|
+
- [Before/after callbacks](#beforeafter-callbacks)
|
34
|
+
- [Accessing the json object within the callback](#accessing-the-json-object-within-the-callback)
|
35
|
+
- [Exceptions](#exceptions)
|
36
|
+
- [Deploy](#deploy)
|
37
|
+
- [Heroku deployment](#heroku-deployment)
|
38
|
+
- [CORS enabled](#cors-enabled)
|
39
|
+
- [Documentation](#documentation)
|
40
|
+
- [Administration Interface](#administration-interface)
|
41
|
+
|
12
42
|
## TLDR
|
13
43
|
|
14
44
|
To create an api endpoint '/todo.json' with GET/POST/PATCH and restricting
|
@@ -198,6 +228,30 @@ curl -X GET http://localhost:9292/todo.json
|
|
198
228
|
curl -X GET http://localhost:9292/todo.json?id=ITEM_ID
|
199
229
|
```
|
200
230
|
|
231
|
+
#### Advanced queries
|
232
|
+
|
233
|
+
Mongo syntax is supported. See [here](http://docs.mongodb.org/manual/tutorial/query-documents/) for more details.
|
234
|
+
|
235
|
+
Some examples:
|
236
|
+
|
237
|
+
Search in array
|
238
|
+
|
239
|
+
```
|
240
|
+
curl -k -X GET -d '{"category": {"$in": ["music"]}}' "https://json.northpole.ro/storage.json?api_key=guest&secret=guest"
|
241
|
+
```
|
242
|
+
|
243
|
+
Greater than number
|
244
|
+
|
245
|
+
```
|
246
|
+
curl -k -X GET -d '{"i": {"$gt": 0}}' "https://json.northpole.ro/storage.json?api_key=guest&secret=guest"
|
247
|
+
```
|
248
|
+
|
249
|
+
OR Query
|
250
|
+
|
251
|
+
```
|
252
|
+
curl -k -X GET -d '{"$or": [{"category": "music"}, {"category": "band"}]}' "https://json.northpole.ro/storage.json?api_key=secret&secret=secret"
|
253
|
+
```
|
254
|
+
|
201
255
|
#### Update
|
202
256
|
|
203
257
|
```shell
|
@@ -224,6 +278,21 @@ end
|
|
224
278
|
This will make sure a Todo item can not be saved or updated in the database
|
225
279
|
without a title attribute.
|
226
280
|
|
281
|
+
### Unique attributes
|
282
|
+
|
283
|
+
You can add unique attributes on resources with the *unique* method. It
|
284
|
+
takes one parameter or an array of parameters as an argument.
|
285
|
+
|
286
|
+
```ruby
|
287
|
+
class Todo < Ki::Model
|
288
|
+
unique :title
|
289
|
+
end
|
290
|
+
```
|
291
|
+
|
292
|
+
This will make sure a Todo item can not be saved or updated in the database
|
293
|
+
if it is not unique.
|
294
|
+
|
295
|
+
|
227
296
|
### Restricting resource requests
|
228
297
|
|
229
298
|
Let's say you want to forbid access to deleting items. You can do that with
|
@@ -304,7 +373,16 @@ git push heroku master
|
|
304
373
|
heroku open
|
305
374
|
```
|
306
375
|
|
376
|
+
## CORS enabled
|
377
|
+
|
378
|
+
Yes.
|
379
|
+
|
307
380
|
## Documentation
|
308
381
|
|
309
382
|
Ki offers instant documentation. Add the middleware 'DocGenerator' and access
|
310
383
|
*/instadoc*.
|
384
|
+
|
385
|
+
## Administration Interface
|
386
|
+
|
387
|
+
Ki offers an instant administration interface. Add the middleware 'AdminIntefaceGenerator'
|
388
|
+
and access */instadmin*.
|
data/Rakefile
CHANGED
@@ -3,12 +3,12 @@ require 'rspec/core/rake_task'
|
|
3
3
|
require 'rdoc/task'
|
4
4
|
|
5
5
|
RDoc::Task.new do |rdoc|
|
6
|
-
rdoc.main =
|
7
|
-
rdoc.rdoc_files
|
8
|
-
include(
|
6
|
+
rdoc.main = 'README.md'
|
7
|
+
rdoc.rdoc_files
|
8
|
+
.include('README.md', 'lib/**/*.rb')
|
9
9
|
rdoc.rdoc_dir = 'doc'
|
10
10
|
end
|
11
11
|
|
12
12
|
RSpec::Core::RakeTask.new(:spec)
|
13
13
|
|
14
|
-
task :
|
14
|
+
task default: :spec
|
data/ki.gemspec
CHANGED
@@ -4,34 +4,35 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
4
|
require 'ki/version'
|
5
5
|
|
6
6
|
Gem::Specification.new do |spec|
|
7
|
-
spec.name =
|
7
|
+
spec.name = 'ki'
|
8
8
|
spec.version = Ki::VERSION
|
9
|
-
spec.authors = [
|
10
|
-
spec.email = [
|
11
|
-
spec.summary =
|
12
|
-
spec.description =
|
13
|
-
spec.homepage =
|
14
|
-
spec.license =
|
9
|
+
spec.authors = ['Cristian Mircea Messel']
|
10
|
+
spec.email = ['mess110@gmail.com']
|
11
|
+
spec.summary = 'it said optional'
|
12
|
+
spec.description = 'it said optional'
|
13
|
+
spec.homepage = 'https://github.com/mess110/ki'
|
14
|
+
spec.license = 'MIT'
|
15
15
|
|
16
16
|
spec.files = `git ls-files -z`.split("\x0")
|
17
17
|
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
-
spec.require_paths =
|
19
|
+
spec.require_paths = %w(lib examples)
|
20
20
|
|
21
|
-
spec.add_runtime_dependency
|
22
|
-
spec.add_runtime_dependency
|
23
|
-
spec.add_runtime_dependency
|
24
|
-
spec.add_runtime_dependency
|
25
|
-
spec.add_runtime_dependency
|
26
|
-
spec.add_runtime_dependency
|
27
|
-
spec.add_runtime_dependency
|
28
|
-
spec.add_runtime_dependency
|
29
|
-
spec.add_runtime_dependency
|
30
|
-
spec.add_runtime_dependency
|
21
|
+
spec.add_runtime_dependency 'bundler', '~> 1.5'
|
22
|
+
spec.add_runtime_dependency 'rack'
|
23
|
+
spec.add_runtime_dependency 'rack-parser'
|
24
|
+
spec.add_runtime_dependency 'thor'
|
25
|
+
spec.add_runtime_dependency 'haml'
|
26
|
+
spec.add_runtime_dependency 'sass'
|
27
|
+
spec.add_runtime_dependency 'coffee-script'
|
28
|
+
spec.add_runtime_dependency 'mongo', '1.9.2'
|
29
|
+
spec.add_runtime_dependency 'bson_ext'
|
30
|
+
spec.add_runtime_dependency 'rack-cors'
|
31
31
|
|
32
|
-
spec.add_development_dependency
|
33
|
-
spec.add_development_dependency
|
34
|
-
spec.add_development_dependency
|
35
|
-
spec.add_development_dependency
|
36
|
-
spec.add_development_dependency
|
32
|
+
spec.add_development_dependency 'rake'
|
33
|
+
spec.add_development_dependency 'rack-test'
|
34
|
+
spec.add_development_dependency 'rspec'
|
35
|
+
spec.add_development_dependency 'guard-rspec'
|
36
|
+
spec.add_development_dependency 'guard-rubocop'
|
37
|
+
spec.add_development_dependency 'codeclimate-test-reporter'
|
37
38
|
end
|
data/lib/ki.rb
CHANGED
@@ -19,10 +19,12 @@ require 'ki/utils/indifferent_hash'
|
|
19
19
|
require 'ki/modules/query_interface'
|
20
20
|
require 'ki/modules/restrictions'
|
21
21
|
require 'ki/modules/callbacks'
|
22
|
-
require 'ki/modules/
|
23
|
-
|
24
|
-
require 'ki/
|
25
|
-
require 'ki/
|
22
|
+
require 'ki/modules/model_helper'
|
23
|
+
|
24
|
+
require 'ki/middleware/helpers/format_of_helper'
|
25
|
+
require 'ki/middleware/helpers/public_file_helper'
|
26
|
+
require 'ki/middleware/helpers/haml_compiler_helper'
|
27
|
+
require 'ki/middleware/helpers/view_helper'
|
26
28
|
|
27
29
|
require 'ki/middleware/base_middleware'
|
28
30
|
require 'ki/middleware/init_middleware'
|
@@ -39,5 +41,6 @@ require 'ki/helpers'
|
|
39
41
|
require 'ki/orm'
|
40
42
|
require 'ki/model'
|
41
43
|
require 'ki/base_request'
|
44
|
+
require 'ki/ki_app'
|
42
45
|
|
43
46
|
require 'ki/ki'
|
data/lib/ki/base_request.rb
CHANGED
@@ -19,7 +19,7 @@ module Ki
|
|
19
19
|
end
|
20
20
|
|
21
21
|
def to_ki_model_class
|
22
|
-
|
22
|
+
path.to_s.gsub('/', '').gsub(format_of(path), '').gsub('.', '').to_class
|
23
23
|
end
|
24
24
|
|
25
25
|
def to_action
|
@@ -35,7 +35,7 @@ module Ki
|
|
35
35
|
when 'SEARCH'
|
36
36
|
:find
|
37
37
|
else
|
38
|
-
|
38
|
+
fail 'unkown action'
|
39
39
|
end
|
40
40
|
end
|
41
41
|
end
|
data/lib/ki/helpers.rb
CHANGED
@@ -2,24 +2,24 @@ module Ki
|
|
2
2
|
module Helpers
|
3
3
|
include Middleware::Helpers::View
|
4
4
|
|
5
|
-
def css
|
6
|
-
|
5
|
+
def css(url)
|
6
|
+
haml "%link{:href => '#{url}', :rel => 'stylesheet'}"
|
7
7
|
end
|
8
8
|
|
9
|
-
def js
|
10
|
-
|
9
|
+
def js(url)
|
10
|
+
haml "%script{:src => '#{url}'}"
|
11
11
|
end
|
12
12
|
|
13
|
-
def
|
13
|
+
def haml(s)
|
14
14
|
Haml::Engine.new(s).render
|
15
15
|
end
|
16
16
|
|
17
|
-
def partial
|
17
|
+
def partial(s)
|
18
18
|
path = view_path(s)
|
19
19
|
if File.file?(path)
|
20
20
|
render_haml(File.read(path))
|
21
21
|
else
|
22
|
-
|
22
|
+
fail PartialNotFoundError, path
|
23
23
|
end
|
24
24
|
end
|
25
25
|
end
|
data/lib/ki/ki.rb
CHANGED
@@ -1,13 +1,4 @@
|
|
1
1
|
module Ki
|
2
|
-
class KiApp
|
3
|
-
# should never reach this
|
4
|
-
# middleware should catch all the requests
|
5
|
-
def call env
|
6
|
-
s = 'misplaced in space'
|
7
|
-
Rack::Response.new(s).finish
|
8
|
-
end
|
9
|
-
end
|
10
|
-
|
11
2
|
class Ki
|
12
3
|
PUBLIC_PATH = 'public'
|
13
4
|
VIEWS_PATH = 'views'
|
@@ -17,17 +8,20 @@ module Ki
|
|
17
8
|
|
18
9
|
@app = Rack::Builder.new do
|
19
10
|
use Middleware::InitMiddleware
|
20
|
-
|
21
|
-
|
11
|
+
use Rack::Parser, content_types: {
|
12
|
+
'application/json' => proc { |body| ::MultiJson.decode body }
|
13
|
+
}
|
14
|
+
if KiConfig.instance.cors?
|
15
|
+
use Rack::Cors do
|
16
|
+
allow do
|
17
|
+
origins '*'
|
18
|
+
resource '*', headers: :any, methods: [:get, :search, :put, :post, :delete]
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
22
|
KiConfig.instance.middleware.each do |middleware|
|
23
23
|
use middleware
|
24
24
|
end
|
25
|
-
use Rack::Cors do
|
26
|
-
allow do
|
27
|
-
origins '*'
|
28
|
-
resource '*', headers: :any, methods: :any
|
29
|
-
end
|
30
|
-
end
|
31
25
|
run KiApp.new
|
32
26
|
end
|
33
27
|
end
|
@@ -41,7 +35,7 @@ module Ki
|
|
41
35
|
ENV['RACK_ENV'] || 'development'
|
42
36
|
end
|
43
37
|
|
44
|
-
def call
|
38
|
+
def call(env)
|
45
39
|
@app.call env
|
46
40
|
end
|
47
41
|
end
|