ki 0.3.3 → 0.4.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (170) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +10 -0
  3. data/.rspec +1 -1
  4. data/.ruby-gemset +1 -0
  5. data/.ruby-version +1 -0
  6. data/Gemfile +2 -21
  7. data/Gemfile.lock +60 -100
  8. data/Guardfile +1 -1
  9. data/LICENSE.md +21 -0
  10. data/README.md +63 -0
  11. data/Rakefile +3 -45
  12. data/bin/ki +1 -1
  13. data/ki.gemspec +31 -137
  14. data/lib/ki.rb +21 -21
  15. data/lib/ki/api_error.rb +28 -0
  16. data/lib/ki/base_request.rb +34 -0
  17. data/lib/ki/helpers.rb +55 -0
  18. data/lib/ki/ki.rb +40 -0
  19. data/lib/ki/ki_cli.rb +46 -0
  20. data/lib/ki/ki_config.rb +20 -0
  21. data/lib/ki/middleware.rb +155 -0
  22. data/lib/ki/model.rb +70 -0
  23. data/lib/{modules → ki/modules}/callbacks.rb +0 -0
  24. data/lib/ki/modules/format_of.rb +10 -0
  25. data/lib/{modules → ki/modules}/model_helpers.rb +0 -12
  26. data/lib/ki/modules/public_file_helper.rb +13 -0
  27. data/lib/ki/modules/query_interface.rb +36 -0
  28. data/lib/{modules → ki/modules}/restrictions.rb +0 -30
  29. data/lib/ki/modules/view_helper.rb +13 -0
  30. data/lib/ki/orm.rb +65 -0
  31. data/lib/ki/version.rb +3 -0
  32. data/spec/examples/base/.ruby-gemset +1 -0
  33. data/spec/examples/base/.ruby-version +1 -0
  34. data/spec/examples/base/Gemfile +4 -0
  35. data/spec/examples/base/app.rb +1 -0
  36. data/{examples → spec/examples}/base/config.ru +0 -3
  37. data/spec/examples/base/config.yml +17 -0
  38. data/spec/examples/base/public/favicon.ico +0 -0
  39. data/spec/examples/base/public/javascripts/.gitkeep +0 -0
  40. data/spec/examples/base/public/stylesheets/.gitkeep +0 -0
  41. data/spec/examples/base/views/index.haml +6 -0
  42. data/spec/examples/couch-lock/.ruby-gemset +1 -0
  43. data/spec/examples/couch-lock/.ruby-version +1 -0
  44. data/spec/examples/couch-lock/Gemfile +4 -0
  45. data/spec/examples/couch-lock/Gemfile.lock +48 -0
  46. data/spec/examples/couch-lock/app.rb +42 -0
  47. data/spec/examples/couch-lock/config.ru +3 -0
  48. data/spec/examples/couch-lock/config.yml +17 -0
  49. data/spec/examples/couch-lock/install.sh +3 -0
  50. data/spec/examples/couch-lock/public/favicon.ico +0 -0
  51. data/spec/examples/couch-lock/public/javascripts/.gitkeep +0 -0
  52. data/spec/examples/couch-lock/public/stylesheets/.gitkeep +0 -0
  53. data/spec/examples/couch-lock/views/index.haml +18 -0
  54. data/spec/examples/json.northpole.ro/.ruby-gemset +1 -0
  55. data/spec/examples/json.northpole.ro/.ruby-version +1 -0
  56. data/spec/examples/json.northpole.ro/Capfile +25 -0
  57. data/spec/examples/json.northpole.ro/Gemfile +6 -0
  58. data/spec/examples/json.northpole.ro/Gemfile.lock +68 -0
  59. data/spec/examples/json.northpole.ro/app.rb +79 -0
  60. data/spec/examples/json.northpole.ro/client.rb +25 -0
  61. data/spec/examples/json.northpole.ro/config.ru +3 -0
  62. data/spec/examples/json.northpole.ro/config.yml +17 -0
  63. data/spec/examples/json.northpole.ro/config/deploy.rb +59 -0
  64. data/spec/examples/json.northpole.ro/config/deploy/production.rb +39 -0
  65. data/spec/examples/json.northpole.ro/foo.rb +10 -0
  66. data/spec/examples/json.northpole.ro/public/JNorthPole.jar +0 -0
  67. data/spec/examples/json.northpole.ro/public/favicon.ico +0 -0
  68. data/spec/examples/json.northpole.ro/public/font/FontAwesome.otf +0 -0
  69. data/spec/examples/json.northpole.ro/public/font/fontawesome-webfont.eot +0 -0
  70. data/spec/examples/json.northpole.ro/public/font/fontawesome-webfont.svg +284 -0
  71. data/spec/examples/json.northpole.ro/public/font/fontawesome-webfont.ttf +0 -0
  72. data/spec/examples/json.northpole.ro/public/font/fontawesome-webfont.woff +0 -0
  73. data/spec/examples/json.northpole.ro/public/images/bear.png +0 -0
  74. data/spec/examples/json.northpole.ro/public/images/bg.png +0 -0
  75. data/spec/examples/json.northpole.ro/public/images/cloud.png +0 -0
  76. data/spec/examples/json.northpole.ro/public/images/dotnet.png +0 -0
  77. data/spec/examples/json.northpole.ro/public/images/dotnet_small.png +0 -0
  78. data/spec/examples/json.northpole.ro/public/images/footer.png +0 -0
  79. data/spec/examples/json.northpole.ro/public/images/glyphicons-halflings-white.png +0 -0
  80. data/spec/examples/json.northpole.ro/public/images/glyphicons-halflings.png +0 -0
  81. data/spec/examples/json.northpole.ro/public/images/ice.png +0 -0
  82. data/spec/examples/json.northpole.ro/public/images/java.png +0 -0
  83. data/spec/examples/json.northpole.ro/public/images/java_small.png +0 -0
  84. data/spec/examples/json.northpole.ro/public/images/json.png +0 -0
  85. data/spec/examples/json.northpole.ro/public/images/json_small.png +0 -0
  86. data/spec/examples/json.northpole.ro/public/images/logo.png +0 -0
  87. data/spec/examples/json.northpole.ro/public/images/mobile.png +0 -0
  88. data/spec/examples/json.northpole.ro/public/images/php.png +0 -0
  89. data/spec/examples/json.northpole.ro/public/images/php_small.png +0 -0
  90. data/spec/examples/json.northpole.ro/public/images/python.png +0 -0
  91. data/spec/examples/json.northpole.ro/public/images/python_small.png +0 -0
  92. data/spec/examples/json.northpole.ro/public/images/ruby.png +0 -0
  93. data/spec/examples/json.northpole.ro/public/images/ruby_small.png +0 -0
  94. data/spec/examples/json.northpole.ro/public/images/shell.png +0 -0
  95. data/spec/examples/json.northpole.ro/public/images/shell_small.png +0 -0
  96. data/spec/examples/json.northpole.ro/public/javascripts/analytics.js +9 -0
  97. data/spec/examples/json.northpole.ro/public/javascripts/app.coffee +133 -0
  98. data/spec/examples/json.northpole.ro/public/javascripts/docs.min.js +16 -0
  99. data/spec/examples/json.northpole.ro/public/javascripts/jnorthpole.coffee +34 -0
  100. data/spec/examples/json.northpole.ro/public/javascripts/util.coffee +31 -0
  101. data/spec/examples/json.northpole.ro/public/stylesheets/app.sass +23 -0
  102. data/spec/examples/json.northpole.ro/public/stylesheets/application.sass +222 -0
  103. data/spec/examples/json.northpole.ro/public/stylesheets/cover.css +154 -0
  104. data/spec/examples/json.northpole.ro/views/curl.haml +19 -0
  105. data/spec/examples/json.northpole.ro/views/doc.haml +16 -0
  106. data/spec/examples/json.northpole.ro/views/doc_table.haml +45 -0
  107. data/spec/examples/json.northpole.ro/views/dotnet.haml +24 -0
  108. data/spec/examples/json.northpole.ro/views/examples.haml +28 -0
  109. data/spec/examples/json.northpole.ro/views/faq.haml +32 -0
  110. data/spec/examples/json.northpole.ro/views/foo.haml +7 -0
  111. data/spec/examples/json.northpole.ro/views/index.haml +4 -0
  112. data/spec/examples/json.northpole.ro/views/java.haml +0 -0
  113. data/spec/examples/json.northpole.ro/views/layout.haml +42 -0
  114. data/spec/examples/json.northpole.ro/views/php.haml +37 -0
  115. data/spec/examples/json.northpole.ro/views/playground.haml +38 -0
  116. data/spec/examples/json.northpole.ro/views/python.haml +17 -0
  117. data/spec/examples/json.northpole.ro/views/ruby.haml +12 -0
  118. data/spec/examples/json.northpole.ro/views/signup.haml +2 -0
  119. data/spec/examples/json.northpole.ro/views/thanks.haml +12 -0
  120. data/spec/functional_spec.rb +4 -0
  121. data/spec/lib/ki/base_request_spec.rb +88 -0
  122. data/spec/lib/ki/helpers_spec.rb +12 -0
  123. data/spec/lib/ki/ki_config_spec.rb +7 -0
  124. data/spec/lib/ki/middleware_spec.rb +11 -0
  125. data/spec/lib/ki/model_spec.rb +100 -0
  126. data/spec/lib/ki/modules/format_of_spec.rb +15 -0
  127. data/spec/lib/ki/orm_spec.rb +83 -0
  128. data/spec/spec_helper.rb +18 -5
  129. data/spec/util_spec.rb +7 -36
  130. metadata +269 -193
  131. data/.document +0 -5
  132. data/.rvmrc +0 -1
  133. data/LICENSE.txt +0 -20
  134. data/README.rdoc +0 -3
  135. data/VERSION +0 -1
  136. data/examples/base/Gemfile +0 -3
  137. data/examples/base/Gemfile.lock +0 -24
  138. data/examples/base/app.rb +0 -4
  139. data/examples/base/config.yml +0 -16
  140. data/gfx/colors.xcf +0 -0
  141. data/gfx/ki3.eps +0 -0
  142. data/gfx/logo.png +0 -0
  143. data/ki_wrap.rb +0 -35
  144. data/lib/conf.rb +0 -28
  145. data/lib/db.rb +0 -73
  146. data/lib/helpers.rb +0 -34
  147. data/lib/ki_cli.rb +0 -76
  148. data/lib/mockreq.rb +0 -45
  149. data/lib/model.rb +0 -110
  150. data/lib/modules/email.rb +0 -51
  151. data/lib/modules/query_interface.rb +0 -42
  152. data/lib/req.rb +0 -57
  153. data/lib/resp.rb +0 -70
  154. data/lib/static_file.rb +0 -68
  155. data/lib/util.rb +0 -114
  156. data/lib/views/404.haml +0 -1
  157. data/lib/views/406.haml +0 -1
  158. data/lib/views/index.haml +0 -7
  159. data/lib/views/layout.haml +0 -1
  160. data/spec/conf_spec.rb +0 -6
  161. data/spec/db_spec.rb +0 -93
  162. data/spec/integration/integration_spec.rb +0 -114
  163. data/spec/ki_spec.rb +0 -7
  164. data/spec/model_spec.rb +0 -91
  165. data/spec/modules/callbacks_spec.rb +0 -25
  166. data/spec/modules/email_spec.rb +0 -19
  167. data/spec/modules/query_interface_spec.rb +0 -93
  168. data/spec/modules/restrictions_spec.rb +0 -110
  169. data/spec/performance/performance.sh +0 -1
  170. data/spec/req_spec.rb +0 -29
@@ -1,51 +0,0 @@
1
- require 'mail'
2
- require 'net/smtp'
3
-
4
- module Ki
5
- module Email
6
- def valid_mail? s
7
- return false if s == '' || s.nil?
8
- r = /^[a-z0-9\+\-\.]+@[a-z0-9]+\.[a-z0-9\.\-]+$/i =~ s
9
- !r.nil?
10
- end
11
-
12
- def send_mail *params
13
- params = params[0] if params.class == Array
14
-
15
- if params.length != 4
16
- raise 'params missing'
17
- end
18
-
19
- params.each do |elem|
20
- if !self.class.required_attributes.include? elem
21
- raise "invalid attribute #{elem.to_s}"
22
- end
23
- end
24
-
25
- from = @req[params[0].to_s]
26
- to = @req[params[1].to_s]
27
- subject = @req[params[2].to_s]
28
- body = @req[params[3].to_s]
29
-
30
- really_send from, to, subject, body
31
- end
32
-
33
- def really_send f, t, s, b
34
- mail = Mail.new do
35
- from f
36
- to t
37
- subject s
38
- body b
39
- end
40
- mail.deliver
41
- end
42
-
43
- def really_send2 f, t, s, b
44
- msgstr = "From: #{f}\nTo: #{t}\nSubject: #{s}\n\n#{b}\n"
45
- Net::SMTP.start('localhost', 25) do |smtp|
46
- smtp.send_message msgstr, f, t
47
- end
48
- end
49
-
50
- end
51
- end
@@ -1,42 +0,0 @@
1
- module Ki
2
- module QueryInterface
3
- def count
4
- Db.instance.db[class_name].count
5
- end
6
-
7
- def find id
8
- if id.class == String
9
- Db.instance.find class_name, id
10
- else
11
- Db.instance.find_by class_name, id
12
- end
13
- end
14
-
15
- def find_or_create hash
16
- elem = find(hash)
17
- if elem.empty?
18
- elem_id = create(hash)
19
- elem = find(elem_id)
20
- end
21
- elem
22
- end
23
-
24
- def create hash
25
- Db.instance.create class_name, hash
26
- end
27
-
28
- def update hash
29
- Db.instance.update class_name, hash
30
- end
31
-
32
- def delete id
33
- Db.instance.delete class_name, id
34
- end
35
-
36
- private
37
-
38
- def class_name
39
- self.to_s.downcase
40
- end
41
- end
42
- end
data/lib/req.rb DELETED
@@ -1,57 +0,0 @@
1
- module Ki
2
- class Req < Rack::Request
3
- attr_accessor :code, :klass, :format
4
-
5
- def initialize env
6
- super env
7
- end
8
-
9
- def serve
10
- unless static_path_requested?
11
- route
12
- Resp.new(self).finish
13
- else
14
- StaticFile.new(self).finish
15
- end
16
- end
17
-
18
- def route
19
- @klass = Util.base(path).to_class
20
- @format = content_type == 'application/json' ? :json : Util.format(path)
21
- if @klass || path == '/' || has_view?
22
- @code = 200
23
- else
24
- @code = 404
25
- end
26
- end
27
-
28
- def json?
29
- @format == :json
30
- end
31
-
32
- def html?
33
- @format == :html
34
- end
35
-
36
- def index?
37
- path == '/'
38
- end
39
-
40
- def content_type_for_result
41
- {
42
- :json => 'application/json',
43
- :html => 'text/html'
44
- }[@format]
45
- end
46
-
47
- def has_view?
48
- File.exists?(Util.root_view_path(Util.base(path)))
49
- end
50
-
51
- private
52
-
53
- def static_path_requested?
54
- path.start_with? '/public/'
55
- end
56
- end
57
- end
@@ -1,70 +0,0 @@
1
- require 'json'
2
-
3
- module Ki
4
- class Resp < Rack::Response
5
- include Helpers
6
-
7
- attr_accessor :req
8
-
9
- def initialize req
10
- @req = req
11
- headers = {
12
- 'Content-Type' => @req.content_type_for_result
13
- }
14
-
15
- # TODO think of a way to clean this up
16
- # here be dragons. don't try to understand this because it is a nested mess
17
- # it is my duty to clean it. one day
18
- klass = @req.klass
19
- if klass.responds_to_formats.include? @req.format
20
- if @req.code == 404
21
- body = @req.html? ? partial('404') : { :error => 404 }
22
- else
23
- if @req.index?
24
- body = @req.html? ? partial('index') : { :index => 200 }
25
- else
26
- if @req.html?
27
- if klass == nil # if route is /ruby it means ruby.haml exists in views
28
- body = Util.render_partial Util.base(@req.path), { 'env' => @req.env }, 'layout'
29
- else
30
- klass_view = Util.root_view_path(klass.to_s.downcase)
31
- body = File.exists?(klass_view) ? partial(klass.to_s.downcase) : partial('index')
32
- end
33
- else
34
- begin
35
- interpret_json_params
36
- body = klass.new(@req).to_json
37
- rescue Exception => e
38
- @req.code = 400
39
- body = { :error => e.to_s }.to_json
40
- end
41
- end
42
- end
43
- end
44
- else
45
- @req.code = 406
46
- body = @req.html? ? partial('406') : { :error => 'format not allowed' }.to_json
47
- end
48
-
49
- super [body], @req.code, headers
50
- end
51
-
52
- private
53
-
54
- def partial s
55
- Util.render_partial s, { 'env' => @req.env }, @req.klass.selected_layout
56
- end
57
-
58
- def interpret_json_params
59
- if @req.json? && @req.body.length > 0
60
- begin
61
- @req.body.rewind
62
- @req.env.update('rack.request.form_hash' => JSON.parse(@req.body.string),
63
- 'rack.request.form_input' => @req.env['rack.input'])
64
- rescue JSON::ParserError
65
- raise "json body invalid: #{@req.body.string}"
66
- end
67
- end
68
- end
69
- end
70
- end
@@ -1,68 +0,0 @@
1
- module Ki
2
- # serve files from public folder
3
- # and compile them if they are coffee of sass
4
- class StaticFile < Rack::File
5
- attr_reader :env
6
-
7
- def initialize req
8
- super Util.root
9
- @env = req.env
10
-
11
- if ENV['RACK_ENV'] == 'development'
12
- StaticFile.compile_css(@env['REQUEST_PATH'])
13
- StaticFile.compile_js(@env['REQUEST_PATH'])
14
- end
15
-
16
- @env
17
- end
18
-
19
- def finish
20
- call(@env)
21
- end
22
-
23
- def self.compile_js filename
24
- if filename.end_with? '.js'
25
- js_path = File.join(Util.root, filename)
26
- coffee_path = js_path.gsub('.js', '.coffee')
27
- coffee_to_js coffee_path, js_path
28
- elsif filename.end_with? '.coffee'
29
- coffee_path = File.join(Util.root, filename)
30
- js_path = coffee_path.gsub('.coffee', '.js')
31
- coffee_to_js coffee_path, js_path
32
- end
33
- end
34
-
35
- def self.compile_css filename
36
- if filename.end_with? '.css'
37
- css_path = File.join(Util.root, filename)
38
- sass_path = css_path.gsub('.css', '.sass')
39
- sass_to_css sass_path, css_path
40
- elsif filename.end_with? '.sass'
41
- sass_path = File.join(Util.root, filename)
42
- css_path = sass_path.gsub('.sass', '.css')
43
- sass_to_css sass_path, css_path
44
- end
45
- end
46
-
47
- private
48
-
49
- def self.sass_to_css sass_path, css_path
50
- if File.exists? sass_path
51
- eng = Sass::Engine.new(File.read(sass_path), :syntax => :sass)
52
- File.open(css_path, 'w') do |f|
53
- f.puts eng.render
54
- end
55
- end
56
- end
57
-
58
- def self.coffee_to_js coffee_path, js_path
59
- if File.exists? coffee_path
60
- coffee_file = File.read(coffee_path)
61
- cont = CoffeeScript.compile(coffee_file)
62
- File.open(js_path, 'w') do |f|
63
- f.puts cont
64
- end
65
- end
66
- end
67
- end
68
- end
@@ -1,114 +0,0 @@
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
-
11
- class NilClass
12
- def responds_to_formats
13
- [:json, :html]
14
- end
15
-
16
- def selected_layout
17
- :layout
18
- end
19
- end
20
-
21
- class String
22
- def to_class
23
- chain = self.split "::"
24
- klass = Kernel
25
- chain.each do |klass_string|
26
- klass = klass.const_get klass_string.capitalize
27
- end
28
- klass.is_a?(Class) ? klass : nil
29
- rescue NameError
30
- nil
31
- end
32
- end
33
-
34
- module Ki
35
- class Util
36
- def self.base s
37
- if s == '/'
38
- return ''
39
- end
40
-
41
- s = s.split('/')[1]
42
-
43
- iq = s.index '?'
44
- ip = s.index '.'
45
-
46
- if ip.nil? && iq.nil?
47
- return s
48
- end
49
-
50
- if !ip.nil?
51
- return s[0...ip]
52
- end
53
-
54
- if !iq.nil?
55
- return s[0...iq]
56
- end
57
- end
58
-
59
- def self.root_view_path name
60
- File.join(root, 'views', name) + '.haml'
61
- end
62
-
63
- def self.format s
64
- if s == '/'
65
- return :html
66
- end
67
-
68
- base = s.split('/')[1]
69
- if base.include? '.'
70
- base.split('.')[1].split('?')[0].to_sym rescue :html
71
- else
72
- :html
73
- end
74
- end
75
-
76
- def self.src_path
77
- File.join(File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib')))
78
- end
79
-
80
- def self.root
81
- Dir.getwd
82
- end
83
-
84
- def self.app_name
85
- File.basename(root)
86
- end
87
-
88
- def self.render_partial s, hash={}, l=:layout
89
- contents = file_contents(s)
90
- case l
91
- when :none
92
- layout_contents = "= yield"
93
- else
94
- layout_contents = file_contents(l.to_s)
95
- end
96
-
97
- haml(layout_contents).render do
98
- haml(contents).render(Object.new(), hash)
99
- end
100
- end
101
-
102
- def self.haml contents
103
- Haml::Engine.new("- extend Ki::Helpers\n" + contents)
104
- end
105
-
106
- def self.file_contents s
107
- path = Util.root_view_path s
108
- unless File.exists? path
109
- path = File.join(Util.src_path, 'views', s) + '.haml'
110
- end
111
- File.read(path)
112
- end
113
- end
114
- end
@@ -1 +0,0 @@
1
- %center 404 - Not Found
@@ -1 +0,0 @@
1
- %center 406 - Not Acceptable Format
@@ -1,7 +0,0 @@
1
- !!!
2
- %html
3
- %head
4
- %title 200 - Hello World
5
- %meta{"http-equiv" => "Content-Type", :content => "text/html; charset=utf-8"}
6
- %body
7
- %center 200 - Hello World
@@ -1 +0,0 @@
1
- = yield
@@ -1,6 +0,0 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
-
3
- describe Ki::Conf do
4
- it "should work" do
5
- end
6
- end
@@ -1,93 +0,0 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
-
3
- describe Ki::Db do
4
- before :each do
5
- @db = Ki::Db.instance
6
- @db.remove_collections
7
- end
8
-
9
- it "should start with an empty database" do
10
- @db.collection_names.empty?.should be_true
11
- end
12
-
13
- it "should create a collection" do
14
- @db.collection_names.empty?.should be_true
15
- @db.create 'zoidberg', { :foo => 'bar' }
16
- @db.collection_names.empty?.should be_false
17
- @db.collection_names.include?('zoidberg').should be_true
18
- end
19
-
20
- it "should create an model" do
21
- @db.db['zoidberg'].count.should == 0
22
- @db.create 'zoidberg', { :foo => [1,2] }
23
- @db.db['zoidberg'].count.should == 1
24
- end
25
-
26
- it "should return doc id when creating a model" do
27
- post_id = @db.create 'zoidberg', { :foo => [1,2] }
28
- post_id.class.should == String
29
- bson_id = BSON::ObjectId.from_string(post_id)
30
- @db.db['zoidberg'].find('_id' => bson_id).first['foo'].should == [1,2]
31
- end
32
-
33
- it "should find a specific document" do
34
- post_id = @db.create 'zoidberg', { :foo => [1,2] }
35
- @db.find('zoidberg', post_id)['foo'].should == [1,2]
36
- end
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
-
43
- it "should update a document" do
44
- post_id = @db.create 'zoidberg', { :foo => [1,2], :bar => 'highj' }
45
- @db.update 'zoidberg', { 'id' => post_id, :foo => 3.1415 }
46
- doc = @db.find('zoidberg', post_id)
47
- doc['foo'].should == 3.1415
48
- doc['bar'].should == nil
49
- end
50
-
51
- it "should delete a document" do
52
- post_id = @db.create 'zoidberg', { :foo => [1,2], :bar => 'highj' }
53
- @db.db['zoidberg'].count.should == 1
54
- @db.delete('zoidberg', post_id)
55
- @db.db['zoidberg'].count.should == 0
56
- end
57
-
58
- it "should find all documents in collection" do
59
- @db.create 'zoidberg', { :foo => [1,2], :bar => 'highj' }
60
- @db.create 'zoidberg', { :foo => [3,4], :bar => 'lowj' }
61
- @db.find_all('zoidberg').count.should == @db.db['zoidberg'].count
62
- end
63
-
64
- it "should find by an attribute" do
65
- id = @db.create 'zoidberg', { :foo => [1,2], :bar => 'highj' }
66
- @db.create 'zoidberg', { :foo => [3,4], :bar => 'lowj' }
67
- @db.create 'zoidberg', { :foo => [5,6], :bar => 'lowj' }
68
- r = @db.find_by 'zoidberg', { :bar => 'lowj' }
69
- r.class.should == Array
70
- r.length.should == 2
71
-
72
- r = @db.find_by 'zoidberg', { :bar => 'lowj', :foo => [3,4] }
73
- r.class.should == Array
74
- r.length.should == 1
75
- end
76
-
77
- it "should transform _id in BSON::ObjectId when using find_by" do
78
- hash = { :foo => [1,2], :bar => 'highj' }
79
- id = @db.create 'zoidberg', hash
80
- hash['id'] = id
81
- r = @db.find_by 'zoidberg', hash
82
- r.length.should == 1
83
- end
84
-
85
- it "should be able to change db name" do
86
- new_db_name = 'test_ki_change_name'
87
- @db.db.name.should == DB_NAME
88
-
89
- @db.db_name new_db_name
90
-
91
- @db.db.name.should == new_db_name
92
- end
93
- end