ki 0.3.3 → 0.4.1
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 +7 -0
- data/.gitignore +10 -0
- data/.rspec +1 -1
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/Gemfile +2 -21
- data/Gemfile.lock +60 -100
- data/Guardfile +1 -1
- data/LICENSE.md +21 -0
- data/README.md +63 -0
- data/Rakefile +3 -45
- data/bin/ki +1 -1
- data/ki.gemspec +31 -137
- data/lib/ki.rb +21 -21
- data/lib/ki/api_error.rb +28 -0
- data/lib/ki/base_request.rb +34 -0
- data/lib/ki/helpers.rb +55 -0
- data/lib/ki/ki.rb +40 -0
- data/lib/ki/ki_cli.rb +46 -0
- data/lib/ki/ki_config.rb +20 -0
- data/lib/ki/middleware.rb +155 -0
- data/lib/ki/model.rb +70 -0
- data/lib/{modules → ki/modules}/callbacks.rb +0 -0
- data/lib/ki/modules/format_of.rb +10 -0
- data/lib/{modules → ki/modules}/model_helpers.rb +0 -12
- data/lib/ki/modules/public_file_helper.rb +13 -0
- data/lib/ki/modules/query_interface.rb +36 -0
- data/lib/{modules → ki/modules}/restrictions.rb +0 -30
- data/lib/ki/modules/view_helper.rb +13 -0
- data/lib/ki/orm.rb +65 -0
- data/lib/ki/version.rb +3 -0
- data/spec/examples/base/.ruby-gemset +1 -0
- data/spec/examples/base/.ruby-version +1 -0
- data/spec/examples/base/Gemfile +4 -0
- data/spec/examples/base/app.rb +1 -0
- data/{examples → spec/examples}/base/config.ru +0 -3
- data/spec/examples/base/config.yml +17 -0
- data/spec/examples/base/public/favicon.ico +0 -0
- data/spec/examples/base/public/javascripts/.gitkeep +0 -0
- data/spec/examples/base/public/stylesheets/.gitkeep +0 -0
- data/spec/examples/base/views/index.haml +6 -0
- data/spec/examples/couch-lock/.ruby-gemset +1 -0
- data/spec/examples/couch-lock/.ruby-version +1 -0
- data/spec/examples/couch-lock/Gemfile +4 -0
- data/spec/examples/couch-lock/Gemfile.lock +48 -0
- data/spec/examples/couch-lock/app.rb +42 -0
- data/spec/examples/couch-lock/config.ru +3 -0
- data/spec/examples/couch-lock/config.yml +17 -0
- data/spec/examples/couch-lock/install.sh +3 -0
- data/spec/examples/couch-lock/public/favicon.ico +0 -0
- data/spec/examples/couch-lock/public/javascripts/.gitkeep +0 -0
- data/spec/examples/couch-lock/public/stylesheets/.gitkeep +0 -0
- data/spec/examples/couch-lock/views/index.haml +18 -0
- data/spec/examples/json.northpole.ro/.ruby-gemset +1 -0
- data/spec/examples/json.northpole.ro/.ruby-version +1 -0
- data/spec/examples/json.northpole.ro/Capfile +25 -0
- data/spec/examples/json.northpole.ro/Gemfile +6 -0
- data/spec/examples/json.northpole.ro/Gemfile.lock +68 -0
- data/spec/examples/json.northpole.ro/app.rb +79 -0
- data/spec/examples/json.northpole.ro/client.rb +25 -0
- data/spec/examples/json.northpole.ro/config.ru +3 -0
- data/spec/examples/json.northpole.ro/config.yml +17 -0
- data/spec/examples/json.northpole.ro/config/deploy.rb +59 -0
- data/spec/examples/json.northpole.ro/config/deploy/production.rb +39 -0
- data/spec/examples/json.northpole.ro/foo.rb +10 -0
- data/spec/examples/json.northpole.ro/public/JNorthPole.jar +0 -0
- data/spec/examples/json.northpole.ro/public/favicon.ico +0 -0
- data/spec/examples/json.northpole.ro/public/font/FontAwesome.otf +0 -0
- data/spec/examples/json.northpole.ro/public/font/fontawesome-webfont.eot +0 -0
- data/spec/examples/json.northpole.ro/public/font/fontawesome-webfont.svg +284 -0
- data/spec/examples/json.northpole.ro/public/font/fontawesome-webfont.ttf +0 -0
- data/spec/examples/json.northpole.ro/public/font/fontawesome-webfont.woff +0 -0
- data/spec/examples/json.northpole.ro/public/images/bear.png +0 -0
- data/spec/examples/json.northpole.ro/public/images/bg.png +0 -0
- data/spec/examples/json.northpole.ro/public/images/cloud.png +0 -0
- data/spec/examples/json.northpole.ro/public/images/dotnet.png +0 -0
- data/spec/examples/json.northpole.ro/public/images/dotnet_small.png +0 -0
- data/spec/examples/json.northpole.ro/public/images/footer.png +0 -0
- data/spec/examples/json.northpole.ro/public/images/glyphicons-halflings-white.png +0 -0
- data/spec/examples/json.northpole.ro/public/images/glyphicons-halflings.png +0 -0
- data/spec/examples/json.northpole.ro/public/images/ice.png +0 -0
- data/spec/examples/json.northpole.ro/public/images/java.png +0 -0
- data/spec/examples/json.northpole.ro/public/images/java_small.png +0 -0
- data/spec/examples/json.northpole.ro/public/images/json.png +0 -0
- data/spec/examples/json.northpole.ro/public/images/json_small.png +0 -0
- data/spec/examples/json.northpole.ro/public/images/logo.png +0 -0
- data/spec/examples/json.northpole.ro/public/images/mobile.png +0 -0
- data/spec/examples/json.northpole.ro/public/images/php.png +0 -0
- data/spec/examples/json.northpole.ro/public/images/php_small.png +0 -0
- data/spec/examples/json.northpole.ro/public/images/python.png +0 -0
- data/spec/examples/json.northpole.ro/public/images/python_small.png +0 -0
- data/spec/examples/json.northpole.ro/public/images/ruby.png +0 -0
- data/spec/examples/json.northpole.ro/public/images/ruby_small.png +0 -0
- data/spec/examples/json.northpole.ro/public/images/shell.png +0 -0
- data/spec/examples/json.northpole.ro/public/images/shell_small.png +0 -0
- data/spec/examples/json.northpole.ro/public/javascripts/analytics.js +9 -0
- data/spec/examples/json.northpole.ro/public/javascripts/app.coffee +133 -0
- data/spec/examples/json.northpole.ro/public/javascripts/docs.min.js +16 -0
- data/spec/examples/json.northpole.ro/public/javascripts/jnorthpole.coffee +34 -0
- data/spec/examples/json.northpole.ro/public/javascripts/util.coffee +31 -0
- data/spec/examples/json.northpole.ro/public/stylesheets/app.sass +23 -0
- data/spec/examples/json.northpole.ro/public/stylesheets/application.sass +222 -0
- data/spec/examples/json.northpole.ro/public/stylesheets/cover.css +154 -0
- data/spec/examples/json.northpole.ro/views/curl.haml +19 -0
- data/spec/examples/json.northpole.ro/views/doc.haml +16 -0
- data/spec/examples/json.northpole.ro/views/doc_table.haml +45 -0
- data/spec/examples/json.northpole.ro/views/dotnet.haml +24 -0
- data/spec/examples/json.northpole.ro/views/examples.haml +28 -0
- data/spec/examples/json.northpole.ro/views/faq.haml +32 -0
- data/spec/examples/json.northpole.ro/views/foo.haml +7 -0
- data/spec/examples/json.northpole.ro/views/index.haml +4 -0
- data/spec/examples/json.northpole.ro/views/java.haml +0 -0
- data/spec/examples/json.northpole.ro/views/layout.haml +42 -0
- data/spec/examples/json.northpole.ro/views/php.haml +37 -0
- data/spec/examples/json.northpole.ro/views/playground.haml +38 -0
- data/spec/examples/json.northpole.ro/views/python.haml +17 -0
- data/spec/examples/json.northpole.ro/views/ruby.haml +12 -0
- data/spec/examples/json.northpole.ro/views/signup.haml +2 -0
- data/spec/examples/json.northpole.ro/views/thanks.haml +12 -0
- data/spec/functional_spec.rb +4 -0
- data/spec/lib/ki/base_request_spec.rb +88 -0
- data/spec/lib/ki/helpers_spec.rb +12 -0
- data/spec/lib/ki/ki_config_spec.rb +7 -0
- data/spec/lib/ki/middleware_spec.rb +11 -0
- data/spec/lib/ki/model_spec.rb +100 -0
- data/spec/lib/ki/modules/format_of_spec.rb +15 -0
- data/spec/lib/ki/orm_spec.rb +83 -0
- data/spec/spec_helper.rb +18 -5
- data/spec/util_spec.rb +7 -36
- metadata +269 -193
- data/.document +0 -5
- data/.rvmrc +0 -1
- data/LICENSE.txt +0 -20
- data/README.rdoc +0 -3
- data/VERSION +0 -1
- data/examples/base/Gemfile +0 -3
- data/examples/base/Gemfile.lock +0 -24
- data/examples/base/app.rb +0 -4
- data/examples/base/config.yml +0 -16
- data/gfx/colors.xcf +0 -0
- data/gfx/ki3.eps +0 -0
- data/gfx/logo.png +0 -0
- data/ki_wrap.rb +0 -35
- data/lib/conf.rb +0 -28
- data/lib/db.rb +0 -73
- data/lib/helpers.rb +0 -34
- data/lib/ki_cli.rb +0 -76
- data/lib/mockreq.rb +0 -45
- data/lib/model.rb +0 -110
- data/lib/modules/email.rb +0 -51
- data/lib/modules/query_interface.rb +0 -42
- data/lib/req.rb +0 -57
- data/lib/resp.rb +0 -70
- data/lib/static_file.rb +0 -68
- data/lib/util.rb +0 -114
- data/lib/views/404.haml +0 -1
- data/lib/views/406.haml +0 -1
- data/lib/views/index.haml +0 -7
- data/lib/views/layout.haml +0 -1
- data/spec/conf_spec.rb +0 -6
- data/spec/db_spec.rb +0 -93
- data/spec/integration/integration_spec.rb +0 -114
- data/spec/ki_spec.rb +0 -7
- data/spec/model_spec.rb +0 -91
- data/spec/modules/callbacks_spec.rb +0 -25
- data/spec/modules/email_spec.rb +0 -19
- data/spec/modules/query_interface_spec.rb +0 -93
- data/spec/modules/restrictions_spec.rb +0 -110
- data/spec/performance/performance.sh +0 -1
- data/spec/req_spec.rb +0 -29
|
@@ -1,114 +0,0 @@
|
|
|
1
|
-
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
|
2
|
-
|
|
3
|
-
def encrypt s
|
|
4
|
-
s + '!'
|
|
5
|
-
end
|
|
6
|
-
|
|
7
|
-
describe 'Integration Tests' do
|
|
8
|
-
before :each do
|
|
9
|
-
@db = Ki::Db.instance
|
|
10
|
-
@db.remove_collections
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
it "should handle user and storage" do
|
|
14
|
-
class User < Ki::Model
|
|
15
|
-
requires :mail, :password
|
|
16
|
-
respond_to :json
|
|
17
|
-
forbid :delete, :update
|
|
18
|
-
unique :mail
|
|
19
|
-
|
|
20
|
-
def before_all
|
|
21
|
-
params['password'] = encrypt(params['password']) if params['password']
|
|
22
|
-
end
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
class Storage < Ki::Model
|
|
26
|
-
respond_to :json
|
|
27
|
-
requires :mail, :all_my_data
|
|
28
|
-
|
|
29
|
-
def before_all
|
|
30
|
-
ensure_authorization
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
private
|
|
34
|
-
|
|
35
|
-
def ensure_authorization
|
|
36
|
-
if params['mail'].nil? || params['password'].nil?
|
|
37
|
-
raise 'not authorized'
|
|
38
|
-
end
|
|
39
|
-
h = { 'mail' => params['mail'], 'password' => encrypt(params['password'])}
|
|
40
|
-
u = User.find(h)
|
|
41
|
-
if u.empty?
|
|
42
|
-
raise 'not authorized'
|
|
43
|
-
end
|
|
44
|
-
params.delete('password')
|
|
45
|
-
end
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
expect {
|
|
49
|
-
User.new(Ki::ReqFactory.new(:post, { 'mail' => 'cool@beans.com'})).hash['id']
|
|
50
|
-
}.to raise_error 'password missing'
|
|
51
|
-
|
|
52
|
-
expect {
|
|
53
|
-
id = User.new(Ki::ReqFactory.new(:post, { 'mail' => 'cool@beans.com', 'password' => '123'})).hash['id']
|
|
54
|
-
User.new(Ki::ReqFactory.new(:get, { 'id' => id })).hash[0]['password'].should == '123!'
|
|
55
|
-
}.to change(User, :count).by(1)
|
|
56
|
-
|
|
57
|
-
expect {
|
|
58
|
-
id = User.new(Ki::ReqFactory.new(:post, { 'mail' => 'cool@beans.com', 'password' => '123'})).hash['id']
|
|
59
|
-
}.to raise_error 'mail not unique'
|
|
60
|
-
|
|
61
|
-
expect {
|
|
62
|
-
Storage.new(Ki::ReqFactory.new(:post, {}))
|
|
63
|
-
}.to raise_error 'not authorized'
|
|
64
|
-
|
|
65
|
-
expect {
|
|
66
|
-
Storage.new(Ki::ReqFactory.new(:post, {'mail' => 'cool@beans.com'}))
|
|
67
|
-
}.to raise_error 'not authorized'
|
|
68
|
-
|
|
69
|
-
# create storage
|
|
70
|
-
storage = Storage.new(Ki::ReqFactory.new(:post, {'mail' => 'cool@beans.com', 'password' => '123', 'all_my_data' => [1,2,3]}))
|
|
71
|
-
id = storage.hash['id']
|
|
72
|
-
r = Storage.new(Ki::ReqFactory.new(:get, { 'mail' => 'cool@beans.com', 'password' => '123'}))
|
|
73
|
-
r.hash[0]['all_my_data'].should == [1,2,3]
|
|
74
|
-
r.hash[0]['password'].should == nil
|
|
75
|
-
|
|
76
|
-
expect {
|
|
77
|
-
Storage.new(Ki::ReqFactory.new(:delete, {}))
|
|
78
|
-
}.to raise_error 'not authorized'
|
|
79
|
-
|
|
80
|
-
expect {
|
|
81
|
-
Storage.new(Ki::ReqFactory.new(:delete, {'id' => id}))
|
|
82
|
-
}.to raise_error 'not authorized'
|
|
83
|
-
|
|
84
|
-
expect {
|
|
85
|
-
Storage.new(Ki::ReqFactory.new(:delete, {'mail' => 'cool@beans.com', 'password' => '123'}))
|
|
86
|
-
}.to raise_error 'param id missing'
|
|
87
|
-
|
|
88
|
-
# delete from storage
|
|
89
|
-
expect {
|
|
90
|
-
Storage.new(Ki::ReqFactory.new(:delete, {'id' => id, 'mail' => 'cool@beans.com', 'password' => '123'}))
|
|
91
|
-
}.to change(Storage, :count).by(-1)
|
|
92
|
-
|
|
93
|
-
# not allowed to delete user
|
|
94
|
-
expect {
|
|
95
|
-
id = User.new(Ki::ReqFactory.new(:post, { 'mail' => 'other@beans.com', 'password' => '123'})).hash['id']
|
|
96
|
-
p User.new(Ki::ReqFactory.new(:delete, { 'id' => id }))
|
|
97
|
-
}.to raise_error 'action forbidden'
|
|
98
|
-
|
|
99
|
-
storage = Storage.new(Ki::ReqFactory.new(:post, {'mail' => 'cool@beans.com', 'password' => '123', 'all_my_data' => [4,4,5]}))
|
|
100
|
-
id = storage.hash['id']
|
|
101
|
-
expect {
|
|
102
|
-
Storage.new(Ki::ReqFactory.new(:put, {'mail' => 'cool@beans.com', 'password' => '123', 'all_my_data' => [1]}))
|
|
103
|
-
}.to raise_error 'param id missing'
|
|
104
|
-
|
|
105
|
-
expect {
|
|
106
|
-
Storage.new(Ki::ReqFactory.new(:put, {'mail' => 'cool@beans.com', 'password' => '1234', 'all_my_data' => [1]}))
|
|
107
|
-
}.to raise_error 'not authorized'
|
|
108
|
-
|
|
109
|
-
storage = Storage.new(Ki::ReqFactory.new(:put, {'id' => id, 'mail' => 'cool@beans.com', 'password' => '123', 'all_my_data' => [1]}))
|
|
110
|
-
storage.hash['id'].should == id
|
|
111
|
-
storage = Storage.find(id)
|
|
112
|
-
storage['all_my_data'].should == [1]
|
|
113
|
-
end
|
|
114
|
-
end
|
data/spec/ki_spec.rb
DELETED
data/spec/model_spec.rb
DELETED
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
|
2
|
-
|
|
3
|
-
describe Ki::Model do
|
|
4
|
-
before :each do
|
|
5
|
-
class Zoidberg < Ki::Model
|
|
6
|
-
end
|
|
7
|
-
@db = Ki::Db.instance
|
|
8
|
-
@db.remove_collections
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
it "should correctly extract class_name" do
|
|
12
|
-
# Zoidberg.new(@get).class_name.should == "zoidberg"
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
it "should create a new item in the databse" do
|
|
16
|
-
post = Ki::ReqFactory.new(:post_homer)
|
|
17
|
-
@db.db['zoidberg'].count.should == 0
|
|
18
|
-
hash = Zoidberg.new(post).hash
|
|
19
|
-
@db.db['zoidberg'].count.should == 1
|
|
20
|
-
@db.find('zoidberg', hash['id'])['user'].should == 'homer'
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
it "should get a model depending on id" do
|
|
24
|
-
id = @db.create 'zoidberg', { :name => 'homer' }
|
|
25
|
-
|
|
26
|
-
get = Ki::ReqFactory.new(:get, {'id' => id})
|
|
27
|
-
Zoidberg.new(get).hash[0]['name'].should == 'homer'
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
it "should find objects depending on params" do
|
|
31
|
-
@db.create 'zoidberg', { :name => 'homer', :valid => true }
|
|
32
|
-
@db.create 'zoidberg', { :name => 'bart', :valid => true }
|
|
33
|
-
@db.create 'zoidberg', { :name => 'batman', :valid => false, :cool => true }
|
|
34
|
-
@db.create 'zoidberg', { :name => 'joker', :valid => false, :cool => true }
|
|
35
|
-
@db.create 'zoidberg', { :name => 'joker', :valid => false, :cool => false }
|
|
36
|
-
|
|
37
|
-
r = Zoidberg.new(Ki::ReqFactory.new(:get, { :name => 'homer' })).hash
|
|
38
|
-
r[0]['name'].should == 'homer'
|
|
39
|
-
|
|
40
|
-
r = Zoidberg.new(Ki::ReqFactory.new(:get, { :valid => true })).hash
|
|
41
|
-
r.length.should == 2
|
|
42
|
-
|
|
43
|
-
r.collect { |z|
|
|
44
|
-
z['valid'].should be_true
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
r = Zoidberg.new(Ki::ReqFactory.new(:get, { :valid => false, :cool => true })).hash
|
|
48
|
-
r.length.should == 2
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
it "should only accept valid object ids" do
|
|
52
|
-
expect {
|
|
53
|
-
Zoidberg.new(Ki::ReqFactory.new(:get_with_params, { :id => 'homer' }))
|
|
54
|
-
}.to raise_error
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
it "should update a document" do
|
|
58
|
-
id = @db.create 'zoidberg', { :name => 'homer' }
|
|
59
|
-
@db.find('zoidberg', id)['name'].should == 'homer'
|
|
60
|
-
|
|
61
|
-
Zoidberg.new(Ki::ReqFactory.new(:put, {'id' => id, :name => 'bart'}))
|
|
62
|
-
@db.find('zoidberg', id)['name'].should == 'bart'
|
|
63
|
-
end
|
|
64
|
-
|
|
65
|
-
it "should raise error if id is missing when updating" do
|
|
66
|
-
expect {
|
|
67
|
-
Zoidberg.new(Ki::ReqFactory.new(:put, {:name => 'bart'}))
|
|
68
|
-
}.to raise_error
|
|
69
|
-
end
|
|
70
|
-
|
|
71
|
-
it "should raise error if id is invalid" do
|
|
72
|
-
expect {
|
|
73
|
-
Zoidberg.new(Ki::ReqFactory.new(:put, {'id' => 'f*ck', :name => 'bart'}))
|
|
74
|
-
}.to raise_error
|
|
75
|
-
end
|
|
76
|
-
|
|
77
|
-
it "should delete a document" do
|
|
78
|
-
expect {
|
|
79
|
-
Zoidberg.new(Ki::ReqFactory.new(:delete))
|
|
80
|
-
}.to raise_error
|
|
81
|
-
|
|
82
|
-
expect {
|
|
83
|
-
Zoidberg.new(Ki::ReqFactory.new(:delete, {'id' => 'f*ck', :name => 'bart'}))
|
|
84
|
-
}.to raise_error
|
|
85
|
-
|
|
86
|
-
id = @db.create 'zoidberg', { :name => 'homer' }
|
|
87
|
-
expect {
|
|
88
|
-
Zoidberg.new(Ki::ReqFactory.new(:delete, {'id' => id}))
|
|
89
|
-
}.to change(@db.db['zoidberg'], :count).by(-1)
|
|
90
|
-
end
|
|
91
|
-
end
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
|
2
|
-
|
|
3
|
-
describe Ki::Callbacks do
|
|
4
|
-
it "should have before and after find" do
|
|
5
|
-
class Foo < Ki::Model
|
|
6
|
-
def before_create
|
|
7
|
-
@req.params['meaning_of_life'] = 42
|
|
8
|
-
end
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
id = Foo.new(Ki::ReqFactory.new(:post, {:foo => 'bar'})).hash['id']
|
|
12
|
-
Foo.new(Ki::ReqFactory.new(:get, { 'id' => id })).hash[0]['meaning_of_life'].should == 42
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
it "should handle before and after all" do
|
|
16
|
-
class Foo < Ki::Model
|
|
17
|
-
def before_all
|
|
18
|
-
params[:cool] = true unless get?
|
|
19
|
-
end
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
id = Foo.new(Ki::ReqFactory.new(:post, {:foo => 'bar'})).hash['id']
|
|
23
|
-
Foo.new(Ki::ReqFactory.new(:get, { 'id' => id })).hash[0]['cool'].should be_true
|
|
24
|
-
end
|
|
25
|
-
end
|
data/spec/modules/email_spec.rb
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
|
2
|
-
|
|
3
|
-
describe Ki::Email do
|
|
4
|
-
it "should validate email properly" do
|
|
5
|
-
extend Ki::Email
|
|
6
|
-
|
|
7
|
-
valid_mail?('asd').should be_false
|
|
8
|
-
valid_mail?('asd.asd').should be_false
|
|
9
|
-
valid_mail?('').should be_false
|
|
10
|
-
valid_mail?(nil).should be_false
|
|
11
|
-
valid_mail?('asda@asdasd').should be_false
|
|
12
|
-
valid_mail?('cool$#Q!@asd.com').should be_false
|
|
13
|
-
|
|
14
|
-
valid_mail?('cool1@gmail.com').should be_true
|
|
15
|
-
valid_mail?('cool@gmail.co').should be_true
|
|
16
|
-
valid_mail?('cool@gmail.co.uk').should be_true
|
|
17
|
-
valid_mail?('cool+beans@gmail.com').should be_true
|
|
18
|
-
end
|
|
19
|
-
end
|
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
|
2
|
-
|
|
3
|
-
describe Ki::QueryInterface do
|
|
4
|
-
before :each do
|
|
5
|
-
@db = Ki::Db.instance
|
|
6
|
-
@db.remove_collections
|
|
7
|
-
end
|
|
8
|
-
|
|
9
|
-
it "should find waldo" do
|
|
10
|
-
id = @db.create 'waldo', { :location => 'amsterdam' }
|
|
11
|
-
|
|
12
|
-
class Waldo < Ki::Model
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
waldo = Waldo.find(id)
|
|
16
|
-
waldo['location'].should == 'amsterdam'
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
it "should find by a hash" do
|
|
20
|
-
@db.create 'waldo', { :location => 'amsterdam', :cool => true, :value => 0 }
|
|
21
|
-
@db.create 'waldo', { :location => 'copenhagen', :cool => true, :value => 1 }
|
|
22
|
-
@db.create 'waldo', { :location => 'kronstadt', :cool => true, :value => 1 }
|
|
23
|
-
|
|
24
|
-
class Waldo < Ki::Model
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
r = Waldo.find({ :cool => true })
|
|
28
|
-
r.length.should == 3
|
|
29
|
-
|
|
30
|
-
r = Waldo.find({ :cool => true, :value => 1 })
|
|
31
|
-
r.length.should == 2
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
it "should delete porn" do
|
|
35
|
-
id = @db.create 'porn', { :website => 'youporn.com' }
|
|
36
|
-
|
|
37
|
-
class Porn < Ki::Model
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
expect {
|
|
41
|
-
Porn.delete(id)
|
|
42
|
-
}.to change(@db.db['porn'], :count).by(-1)
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
it "should count sheep" do
|
|
46
|
-
class Sheep < Ki::Model
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
Sheep.count.should == 0
|
|
50
|
-
expect {
|
|
51
|
-
@db.create 'sheep', { :wool => 'green' }
|
|
52
|
-
}.to change(Sheep, :count).by(1)
|
|
53
|
-
Sheep.count.should == 1
|
|
54
|
-
end
|
|
55
|
-
|
|
56
|
-
it "should create the universe in 7 days" do
|
|
57
|
-
class Universe < Ki::Model
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
universe = { :water => true }
|
|
61
|
-
Universe.count.should == 0
|
|
62
|
-
expect {
|
|
63
|
-
id = Universe.create universe
|
|
64
|
-
Universe.find(id)['water'].should be_true
|
|
65
|
-
}.to change(Universe, :count).by(1)
|
|
66
|
-
end
|
|
67
|
-
|
|
68
|
-
it "should update all the software" do
|
|
69
|
-
class Software < Ki::Model
|
|
70
|
-
end
|
|
71
|
-
|
|
72
|
-
id = Software.create({ :version => 1.1 })
|
|
73
|
-
expect {
|
|
74
|
-
Software.update({'id' => id, :version => 1.2})
|
|
75
|
-
Software.find(id)['version'].should == 1.2
|
|
76
|
-
}.to change(Software, :count).by(0)
|
|
77
|
-
end
|
|
78
|
-
|
|
79
|
-
it "should find or create" do
|
|
80
|
-
class Crab < Ki::Model
|
|
81
|
-
end
|
|
82
|
-
hash = {'user' => 'name', 'birth' => '2015'}
|
|
83
|
-
|
|
84
|
-
Crab.find(hash).empty?.should be_true
|
|
85
|
-
expect {
|
|
86
|
-
Crab.find_or_create hash
|
|
87
|
-
}.to change(Crab, :count).by(1)
|
|
88
|
-
|
|
89
|
-
expect {
|
|
90
|
-
Crab.find_or_create hash
|
|
91
|
-
}.to change(Crab, :count).by(0)
|
|
92
|
-
end
|
|
93
|
-
end
|
|
@@ -1,110 +0,0 @@
|
|
|
1
|
-
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
|
2
|
-
|
|
3
|
-
describe Ki::Restrictions do
|
|
4
|
-
before :each do
|
|
5
|
-
@db = Ki::Db.instance
|
|
6
|
-
@db.remove_collections
|
|
7
|
-
end
|
|
8
|
-
|
|
9
|
-
it "should only allow specified methods" do
|
|
10
|
-
class Foo < Ki::Model
|
|
11
|
-
end
|
|
12
|
-
expect {
|
|
13
|
-
Foo.new(Ki::ReqFactory.new(:head))
|
|
14
|
-
}.to raise_error
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
it "should not have any restrictions by default" do
|
|
18
|
-
class Foo < Ki::Model
|
|
19
|
-
end
|
|
20
|
-
Foo.forbidden_actions.empty?.should be_true
|
|
21
|
-
Foo.new(Ki::ReqFactory.new(:post_homer))
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
it "should restrict search when find is forbidden" do
|
|
25
|
-
class Foo < Ki::Model
|
|
26
|
-
forbid :find
|
|
27
|
-
end
|
|
28
|
-
expect {
|
|
29
|
-
Foo.new(Ki::ReqFactory.new(:search, {'foo' => 'bar'} ))
|
|
30
|
-
}.to raise_exception
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
it "should only restrict :delete" do
|
|
34
|
-
class Foo < Ki::Model
|
|
35
|
-
forbid :delete
|
|
36
|
-
end
|
|
37
|
-
Foo.forbidden_actions.include?(:delete).should be_true
|
|
38
|
-
id = Foo.new(Ki::ReqFactory.new(:post_homer)).hash['id']
|
|
39
|
-
expect {
|
|
40
|
-
Foo.new(Ki::ReqFactory.new(:delete, { 'id' => id } ))
|
|
41
|
-
}.to raise_exception
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
it "should respond to html and json by default" do
|
|
45
|
-
class Foo < Ki::Model
|
|
46
|
-
end
|
|
47
|
-
Foo.responds_to_formats.should == [:json, :html]
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
it "should allow only json" do
|
|
51
|
-
class Foo < Ki::Model
|
|
52
|
-
respond_to :json
|
|
53
|
-
end
|
|
54
|
-
Foo.responds_to_formats.include?(:json).should be_true
|
|
55
|
-
Foo.responds_to_formats.include?(:html).should be_false
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
it "should not have any required attributes" do
|
|
59
|
-
class Foo < Ki::Model
|
|
60
|
-
end
|
|
61
|
-
Foo.required_attributes.empty?.should be_true
|
|
62
|
-
end
|
|
63
|
-
|
|
64
|
-
it "should require name" do
|
|
65
|
-
class Foo < Ki::Model
|
|
66
|
-
requires :name
|
|
67
|
-
end
|
|
68
|
-
Foo.required_attributes.include?(:name).should be_true
|
|
69
|
-
|
|
70
|
-
expect {
|
|
71
|
-
Foo.new(Ki::ReqFactory.new(:post_homer))
|
|
72
|
-
}.to raise_exception
|
|
73
|
-
|
|
74
|
-
expect {
|
|
75
|
-
Foo.new(Ki::ReqFactory.new(:post, {'name' => 'bart' }))
|
|
76
|
-
}.to change(Ki::Db.instance.db['foo'], :count).by(1)
|
|
77
|
-
end
|
|
78
|
-
|
|
79
|
-
it "should handle unique attributes" do
|
|
80
|
-
class Foo < Ki::Model
|
|
81
|
-
end
|
|
82
|
-
Foo.unique_attributes.should == []
|
|
83
|
-
|
|
84
|
-
class Bar < Ki::Model
|
|
85
|
-
unique :foo
|
|
86
|
-
end
|
|
87
|
-
Bar.unique_attributes.should == [:foo]
|
|
88
|
-
|
|
89
|
-
expect {
|
|
90
|
-
Bar.new(Ki::ReqFactory.new(:post, { 'foo' => 'bar'}))
|
|
91
|
-
}.to change(Bar, :count).by(1)
|
|
92
|
-
|
|
93
|
-
expect {
|
|
94
|
-
Bar.new(Ki::ReqFactory.new(:post, { 'foo' => 'bar'}))
|
|
95
|
-
}.to raise_error 'foo not unique'
|
|
96
|
-
end
|
|
97
|
-
|
|
98
|
-
it "should default to :layout" do
|
|
99
|
-
class Foo < Ki::Model
|
|
100
|
-
end
|
|
101
|
-
Foo.selected_layout.should == :layout
|
|
102
|
-
end
|
|
103
|
-
|
|
104
|
-
it "should chage default layout" do
|
|
105
|
-
class Foo < Ki::Model
|
|
106
|
-
layout :none
|
|
107
|
-
end
|
|
108
|
-
Foo.selected_layout.should == :none
|
|
109
|
-
end
|
|
110
|
-
end
|