ki 0.3.0 → 0.3.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.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.3.0
1
+ 0.3.1
data/ki.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "ki"
8
- s.version = "0.3.0"
8
+ s.version = "0.3.1"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Cristian Mircea Messel"]
12
- s.date = "2013-03-25"
12
+ s.date = "2013-03-31"
13
13
  s.description = "Fuck setting up a database for your prototypes. Some call it an ORM with a RESTful interface. Some say its for prototyping."
14
14
  s.email = "mess110@gmail.com"
15
15
  s.executables = ["ki"]
data/lib/db.rb CHANGED
@@ -17,16 +17,24 @@ module Ki
17
17
  end
18
18
 
19
19
  def find_all name
20
- @db[name].find.collect{ |row| row }
20
+ @db[name].find.collect{ |row| row }.stringify_ids
21
21
  end
22
22
 
23
23
  def find name, id
24
- @db[name].find( { '_id' => BSON::ObjectId(id) }).first
24
+ @db[name].find( { '_id' => BSON::ObjectId(id) }).to_a.stringify_ids.first
25
25
  end
26
26
 
27
27
  def find_by name, hash
28
- hash['_id'] = BSON::ObjectId(hash['_id']) if hash['_id']
29
- @db[name].find(hash).to_a
28
+ if hash['_id']
29
+ hash['_id'] = BSON::ObjectId(hash['_id'])
30
+ end
31
+
32
+ if hash['id']
33
+ hash['_id'] = BSON::ObjectId(hash['id'])
34
+ hash.delete('id')
35
+ end
36
+
37
+ @db[name].find(hash).to_a.stringify_ids
30
38
  end
31
39
 
32
40
  def create name, hash
@@ -36,8 +44,8 @@ module Ki
36
44
  # document doesn't update if :_id is in the hash
37
45
  # all prev object data is deleted
38
46
  def update name, hash
39
- id = hash['_id']
40
- hash.delete('_id')
47
+ id = hash['id']
48
+ hash.delete('id')
41
49
  @db[name].update({:_id => BSON::ObjectId(id)}, hash)
42
50
  id
43
51
  end
data/lib/model.rb CHANGED
@@ -37,20 +37,20 @@ module Ki
37
37
  def create
38
38
  check_for_required_attributes
39
39
  check_for_unique_attributes
40
- @hash['_id'] = @db.create(class_name, @req.params)
40
+ @hash['id'] = @db.create(class_name, @req.params)
41
41
  end
42
42
 
43
43
  def update
44
44
  raise 'params missing' unless @req.params
45
- raise 'param _id missing' unless @req.params['_id']
45
+ raise 'param id missing' unless @req.params['id']
46
46
  check_for_required_attributes
47
- @hash['_id'] = @db.update(class_name, @req.params)
47
+ @hash['id'] = @db.update(class_name, @req.params)
48
48
  end
49
49
 
50
50
  def delete
51
51
  raise 'params missing' unless @req.params
52
- raise 'param _id missing' unless @req.params['_id']
53
- @hash = @db.delete(class_name, @req.params['_id'])
52
+ raise 'param id missing' unless @req.params['id']
53
+ @hash = @db.delete(class_name, @req.params['id'])
54
54
  end
55
55
 
56
56
  def to_json
@@ -105,7 +105,7 @@ module Ki
105
105
  send "after_#{m.to_s}".to_sym
106
106
  after_all
107
107
  rescue BSON::InvalidObjectId
108
- raise "invalid _id format: #{params['_id']}"
108
+ raise "invalid id format: #{params['id']}"
109
109
  end
110
110
  end
111
111
 
data/lib/util.rb CHANGED
@@ -1,3 +1,13 @@
1
+ class Array
2
+ def stringify_ids
3
+ self.collect do |e|
4
+ e['id'] = e['_id'].to_s
5
+ e.delete('_id')
6
+ e
7
+ end
8
+ end
9
+ end
10
+
1
11
  class NilClass
2
12
  def responds_to_formats
3
13
  [:json, :html]
data/spec/db_spec.rb CHANGED
@@ -35,9 +35,14 @@ describe Ki::Db do
35
35
  @db.find('zoidberg', post_id)['foo'].should == [1,2]
36
36
  end
37
37
 
38
+ it "should find by _id, id, and objid" do
39
+ post_id = @db.create 'zoidberg', { :foo => [1,2] }
40
+ @db.find_by('zoidberg', {'id' => post_id})[0]['id'].should == post_id
41
+ end
42
+
38
43
  it "should update a document" do
39
44
  post_id = @db.create 'zoidberg', { :foo => [1,2], :bar => 'highj' }
40
- @db.update 'zoidberg', { '_id' => post_id, :foo => 3.1415 }
45
+ @db.update 'zoidberg', { 'id' => post_id, :foo => 3.1415 }
41
46
  doc = @db.find('zoidberg', post_id)
42
47
  doc['foo'].should == 3.1415
43
48
  doc['bar'].should == nil
@@ -72,7 +77,7 @@ describe Ki::Db do
72
77
  it "should transform _id in BSON::ObjectId when using find_by" do
73
78
  hash = { :foo => [1,2], :bar => 'highj' }
74
79
  id = @db.create 'zoidberg', hash
75
- hash['_id'] = id
80
+ hash['id'] = id
76
81
  r = @db.find_by 'zoidberg', hash
77
82
  r.length.should == 1
78
83
  end
@@ -46,16 +46,16 @@ describe 'Integration Tests' do
46
46
  end
47
47
 
48
48
  expect {
49
- User.new(ReqFactory.new(:post, { 'mail' => 'cool@beans.com'})).hash['_id']
49
+ User.new(ReqFactory.new(:post, { 'mail' => 'cool@beans.com'})).hash['id']
50
50
  }.to raise_error 'password missing'
51
51
 
52
52
  expect {
53
- id = User.new(ReqFactory.new(:post, { 'mail' => 'cool@beans.com', 'password' => '123'})).hash['_id']
54
- User.new(ReqFactory.new(:get, { '_id' => id })).hash[0]['password'].should == '123!'
53
+ id = User.new(ReqFactory.new(:post, { 'mail' => 'cool@beans.com', 'password' => '123'})).hash['id']
54
+ User.new(ReqFactory.new(:get, { 'id' => id })).hash[0]['password'].should == '123!'
55
55
  }.to change(User, :count).by(1)
56
56
 
57
57
  expect {
58
- id = User.new(ReqFactory.new(:post, { 'mail' => 'cool@beans.com', 'password' => '123'})).hash['_id']
58
+ id = User.new(ReqFactory.new(:post, { 'mail' => 'cool@beans.com', 'password' => '123'})).hash['id']
59
59
  }.to raise_error 'mail not unique'
60
60
 
61
61
  expect {
@@ -68,7 +68,7 @@ describe 'Integration Tests' do
68
68
 
69
69
  # create storage
70
70
  storage = Storage.new(ReqFactory.new(:post, {'mail' => 'cool@beans.com', 'password' => '123', 'all_my_data' => [1,2,3]}))
71
- id = storage.hash['_id']
71
+ id = storage.hash['id']
72
72
  r = Storage.new(ReqFactory.new(:get, { 'mail' => 'cool@beans.com', 'password' => '123'}))
73
73
  r.hash[0]['all_my_data'].should == [1,2,3]
74
74
  r.hash[0]['password'].should == nil
@@ -78,36 +78,36 @@ describe 'Integration Tests' do
78
78
  }.to raise_error 'not authorized'
79
79
 
80
80
  expect {
81
- Storage.new(ReqFactory.new(:delete, {'_id' => id}))
81
+ Storage.new(ReqFactory.new(:delete, {'id' => id}))
82
82
  }.to raise_error 'not authorized'
83
83
 
84
84
  expect {
85
85
  Storage.new(ReqFactory.new(:delete, {'mail' => 'cool@beans.com', 'password' => '123'}))
86
- }.to raise_error 'param _id missing'
86
+ }.to raise_error 'param id missing'
87
87
 
88
88
  # delete from storage
89
89
  expect {
90
- Storage.new(ReqFactory.new(:delete, {'_id' => id, 'mail' => 'cool@beans.com', 'password' => '123'}))
90
+ Storage.new(ReqFactory.new(:delete, {'id' => id, 'mail' => 'cool@beans.com', 'password' => '123'}))
91
91
  }.to change(Storage, :count).by(-1)
92
92
 
93
93
  # not allowed to delete user
94
94
  expect {
95
- id = User.new(ReqFactory.new(:post, { 'mail' => 'other@beans.com', 'password' => '123'})).hash['_id']
96
- p User.new(ReqFactory.new(:delete, { '_id' => id }))
95
+ id = User.new(ReqFactory.new(:post, { 'mail' => 'other@beans.com', 'password' => '123'})).hash['id']
96
+ p User.new(ReqFactory.new(:delete, { 'id' => id }))
97
97
  }.to raise_error 'action forbidden'
98
98
 
99
99
  storage = Storage.new(ReqFactory.new(:post, {'mail' => 'cool@beans.com', 'password' => '123', 'all_my_data' => [4,4,5]}))
100
- id = storage.hash['_id']
100
+ id = storage.hash['id']
101
101
  expect {
102
102
  Storage.new(ReqFactory.new(:put, {'mail' => 'cool@beans.com', 'password' => '123', 'all_my_data' => [1]}))
103
- }.to raise_error 'param _id missing'
103
+ }.to raise_error 'param id missing'
104
104
 
105
105
  expect {
106
106
  Storage.new(ReqFactory.new(:put, {'mail' => 'cool@beans.com', 'password' => '1234', 'all_my_data' => [1]}))
107
107
  }.to raise_error 'not authorized'
108
108
 
109
- storage = Storage.new(ReqFactory.new(:put, {'_id' => id, 'mail' => 'cool@beans.com', 'password' => '123', 'all_my_data' => [1]}))
110
- storage.hash['_id'].should == id
109
+ storage = Storage.new(ReqFactory.new(:put, {'id' => id, 'mail' => 'cool@beans.com', 'password' => '123', 'all_my_data' => [1]}))
110
+ storage.hash['id'].should == id
111
111
  storage = Storage.find(id)
112
112
  storage['all_my_data'].should == [1]
113
113
  end
data/spec/model_spec.rb CHANGED
@@ -17,13 +17,13 @@ describe Ki::Model do
17
17
  @db.db['zoidberg'].count.should == 0
18
18
  hash = Zoidberg.new(post).hash
19
19
  @db.db['zoidberg'].count.should == 1
20
- @db.find('zoidberg', hash['_id'])['user'].should == 'homer'
20
+ @db.find('zoidberg', hash['id'])['user'].should == 'homer'
21
21
  end
22
22
 
23
23
  it "should get a model depending on id" do
24
24
  id = @db.create 'zoidberg', { :name => 'homer' }
25
25
 
26
- get = ReqFactory.new(:get, {'_id' => id})
26
+ get = ReqFactory.new(:get, {'id' => id})
27
27
  Zoidberg.new(get).hash[0]['name'].should == 'homer'
28
28
  end
29
29
 
@@ -50,7 +50,7 @@ describe Ki::Model do
50
50
 
51
51
  it "should only accept valid object ids" do
52
52
  expect {
53
- Zoidberg.new(ReqFactory.new(:get_with_params, { :_id => 'homer' }))
53
+ Zoidberg.new(ReqFactory.new(:get_with_params, { :id => 'homer' }))
54
54
  }.to raise_error
55
55
  end
56
56
 
@@ -58,7 +58,7 @@ describe Ki::Model do
58
58
  id = @db.create 'zoidberg', { :name => 'homer' }
59
59
  @db.find('zoidberg', id)['name'].should == 'homer'
60
60
 
61
- Zoidberg.new(ReqFactory.new(:put, {'_id' => id, :name => 'bart'}))
61
+ Zoidberg.new(ReqFactory.new(:put, {'id' => id, :name => 'bart'}))
62
62
  @db.find('zoidberg', id)['name'].should == 'bart'
63
63
  end
64
64
 
@@ -70,7 +70,7 @@ describe Ki::Model do
70
70
 
71
71
  it "should raise error if id is invalid" do
72
72
  expect {
73
- Zoidberg.new(ReqFactory.new(:put, {'_id' => 'f*ck', :name => 'bart'}))
73
+ Zoidberg.new(ReqFactory.new(:put, {'id' => 'f*ck', :name => 'bart'}))
74
74
  }.to raise_error
75
75
  end
76
76
 
@@ -80,12 +80,12 @@ describe Ki::Model do
80
80
  }.to raise_error
81
81
 
82
82
  expect {
83
- Zoidberg.new(ReqFactory.new(:delete, {'_id' => 'f*ck', :name => 'bart'}))
83
+ Zoidberg.new(ReqFactory.new(:delete, {'id' => 'f*ck', :name => 'bart'}))
84
84
  }.to raise_error
85
85
 
86
86
  id = @db.create 'zoidberg', { :name => 'homer' }
87
87
  expect {
88
- Zoidberg.new(ReqFactory.new(:delete, {'_id' => id}))
88
+ Zoidberg.new(ReqFactory.new(:delete, {'id' => id}))
89
89
  }.to change(@db.db['zoidberg'], :count).by(-1)
90
90
  end
91
91
  end
@@ -8,8 +8,8 @@ describe Ki::Callbacks do
8
8
  end
9
9
  end
10
10
 
11
- id = Foo.new(ReqFactory.new(:post, {:foo => 'bar'})).hash['_id']
12
- Foo.new(ReqFactory.new(:get, { '_id' => id })).hash[0]['meaning_of_life'].should == 42
11
+ id = Foo.new(ReqFactory.new(:post, {:foo => 'bar'})).hash['id']
12
+ Foo.new(ReqFactory.new(:get, { 'id' => id })).hash[0]['meaning_of_life'].should == 42
13
13
  end
14
14
 
15
15
  it "should handle before and after all" do
@@ -19,7 +19,7 @@ describe Ki::Callbacks do
19
19
  end
20
20
  end
21
21
 
22
- id = Foo.new(ReqFactory.new(:post, {:foo => 'bar'})).hash['_id']
23
- Foo.new(ReqFactory.new(:get, { '_id' => id })).hash[0]['cool'].should be_true
22
+ id = Foo.new(ReqFactory.new(:post, {:foo => 'bar'})).hash['id']
23
+ Foo.new(ReqFactory.new(:get, { 'id' => id })).hash[0]['cool'].should be_true
24
24
  end
25
25
  end
@@ -71,7 +71,7 @@ describe Ki::QueryInterface do
71
71
 
72
72
  id = Software.create({ :version => 1.1 })
73
73
  expect {
74
- Software.update({'_id' => id, :version => 1.2})
74
+ Software.update({'id' => id, :version => 1.2})
75
75
  Software.find(id)['version'].should == 1.2
76
76
  }.to change(Software, :count).by(0)
77
77
  end
@@ -21,14 +21,23 @@ describe Ki::Restrictions do
21
21
  Foo.new(ReqFactory.new(:post_homer))
22
22
  end
23
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(ReqFactory.new(:search, {'foo' => 'bar'} ))
30
+ }.to raise_exception
31
+ end
32
+
24
33
  it "should only restrict :delete" do
25
34
  class Foo < Ki::Model
26
35
  forbid :delete
27
36
  end
28
37
  Foo.forbidden_actions.include?(:delete).should be_true
29
- id = Foo.new(ReqFactory.new(:post_homer)).hash['_id']
38
+ id = Foo.new(ReqFactory.new(:post_homer)).hash['id']
30
39
  expect {
31
- Foo.new(ReqFactory.new(:delete, { '_id' => id } ))
40
+ Foo.new(ReqFactory.new(:delete, { 'id' => id } ))
32
41
  }.to raise_exception
33
42
  end
34
43
 
data/spec/req_spec.rb CHANGED
@@ -16,4 +16,14 @@ describe Ki::Req do
16
16
  hash = Book.new(search).hash
17
17
  hash[0]['title'].should == 'Foundation'
18
18
  end
19
+
20
+ it "should format the id properly" do
21
+ post = ReqFactory.new(:post, { :title => 'Foundation' })
22
+ id = Book.new(post).hash['id']
23
+
24
+ get = ReqFactory.new(:get, { :title => 'Foundation' })
25
+ Book.new(get).hash[0]['id'].should == id
26
+
27
+ update = ReqFactory.new(:put, { 'id' => id, :title => 'Foundation' })
28
+ end
19
29
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ki
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.3.1
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-03-25 00:00:00.000000000 Z
12
+ date: 2013-03-31 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rack
@@ -343,7 +343,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
343
343
  version: '0'
344
344
  segments:
345
345
  - 0
346
- hash: -4473479922562030383
346
+ hash: -1443684808405340499
347
347
  required_rubygems_version: !ruby/object:Gem::Requirement
348
348
  none: false
349
349
  requirements: