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
data/.document DELETED
@@ -1,5 +0,0 @@
1
- lib/**/*.rb
2
- bin/*
3
- -
4
- features/**/*.feature
5
- LICENSE.txt
data/.rvmrc DELETED
@@ -1 +0,0 @@
1
- rvm use 1.9.3@ki --create
@@ -1,20 +0,0 @@
1
- Copyright (c) 2013 Cristian Mircea Messel
2
-
3
- Permission is hereby granted, free of charge, to any person obtaining
4
- a copy of this software and associated documentation files (the
5
- "Software"), to deal in the Software without restriction, including
6
- without limitation the rights to use, copy, modify, merge, publish,
7
- distribute, sublicense, and/or sell copies of the Software, and to
8
- permit persons to whom the Software is furnished to do so, subject to
9
- the following conditions:
10
-
11
- The above copyright notice and this permission notice shall be
12
- included in all copies or substantial portions of the Software.
13
-
14
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -1,3 +0,0 @@
1
- = ki
2
-
3
- http://openclipart.org/detail/97081/polar-bear-by-aguasas
data/VERSION DELETED
@@ -1 +0,0 @@
1
- 0.3.3
@@ -1,3 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- gem 'ki'
@@ -1,24 +0,0 @@
1
- PATH
2
- remote: ../../
3
- specs:
4
- ki (0.0.1)
5
- rack
6
- thin
7
- thor
8
-
9
- GEM
10
- specs:
11
- daemons (1.1.9)
12
- eventmachine (1.0.0)
13
- rack (1.5.1)
14
- thin (1.5.0)
15
- daemons (>= 1.0.9)
16
- eventmachine (>= 0.12.6)
17
- rack (>= 1.0.0)
18
- thor (0.17.0)
19
-
20
- PLATFORMS
21
- ruby
22
-
23
- DEPENDENCIES
24
- ki!
@@ -1,4 +0,0 @@
1
- require 'ki'
2
-
3
- class Foo < Ki::Model
4
- end
@@ -1,16 +0,0 @@
1
- ---
2
- chdir: PATH_TO_YOUR_APP
3
- environment: development
4
- address: 0.0.0.0
5
- port: 3000
6
- timeout: 30
7
- log: log/thin.log
8
- pid: tmp/pids/thin.pid
9
- max_conns: 1024
10
- max_persistent_conns: 100
11
- require: []
12
- wait: 30
13
- daemonize: false
14
- database_name: np
15
- database_host: 127.0.0.1
16
- database_port: 27017
Binary file
Binary file
Binary file
data/ki_wrap.rb DELETED
@@ -1,35 +0,0 @@
1
- require 'httparty'
2
-
3
- class Resource
4
- include HTTParty
5
- base_uri 'localhost:3000'
6
-
7
- def self.create h
8
- post("/#{klass}.json", h)
9
- end
10
-
11
- def self.find h
12
- get("/#{klass}.json", h)
13
- end
14
-
15
- private
16
-
17
- def self.klass
18
- to_s.downcase
19
- end
20
- end
21
-
22
- class Storage < Resource
23
- end
24
-
25
- class User < Resource
26
- end
27
-
28
- # user = 'mess121'
29
- # pass = '123'
30
- #
31
- # p User.create({ :body => { 'mail' => user, 'password' => pass}})
32
- # p User.find({ :query => { 'mail' => user, 'password' => pass}})
33
- #
34
- # p Storage.create({ :body => { 'mail' => user, 'password' => pass, 'cool' => true, 'vals' => [3,3.14,4.20]}})
35
- # p Storage.find({ :query => { 'mail' => user, 'password' => pass}})
@@ -1,28 +0,0 @@
1
- require 'singleton'
2
-
3
- module Ki
4
- # named conf because ruby has Config class :(
5
- # in version 2 Config class will be deprecated and
6
- # replace with RbConfig
7
- # When you update to ruby2, think about changing the name
8
- class Conf
9
- include Singleton
10
-
11
- attr_accessor :yaml
12
-
13
- def initialize
14
- super
15
-
16
- config_path = File.join(Dir.pwd, 'config.yml')
17
- if File.exists? config_path
18
- @yaml = YAML.load_file(config_path)
19
- else
20
- @yaml = YAML.load({
21
- 'database_host' => '127.0.0.1',
22
- 'database_port' => 27017,
23
- 'database_name' => 'ki_default_db'
24
- }.to_yaml)
25
- end
26
- end
27
- end
28
- end
data/lib/db.rb DELETED
@@ -1,73 +0,0 @@
1
- require 'mongo'
2
- require 'singleton'
3
- require 'json'
4
-
5
- module Ki
6
- class Db
7
- include Singleton
8
-
9
- attr_reader :db
10
-
11
- def initialize
12
- super
13
-
14
- config
15
- end
16
-
17
- def collection_names
18
- @db.collection_names.delete_if{|name| name =~ /^system/}
19
- end
20
-
21
- def remove_collections
22
- collection_names.each{|c| @db[c].drop}
23
- end
24
-
25
- def find_all name
26
- @db[name].find.collect{ |row| row }.stringify_ids
27
- end
28
-
29
- def find name, id
30
- @db[name].find( { '_id' => BSON::ObjectId(id) }).to_a.stringify_ids.first
31
- end
32
-
33
- def find_by name, hash
34
- if hash['id']
35
- hash['_id'] = BSON::ObjectId(hash['id'])
36
- hash.delete('id')
37
- end
38
-
39
- @db[name].find(hash).to_a.stringify_ids
40
- end
41
-
42
- def create name, hash
43
- @db[name].insert(hash).to_s
44
- end
45
-
46
- # document doesn't update if :_id is in the hash
47
- # all prev object data is deleted
48
- def update name, hash
49
- id = hash['id']
50
- hash.delete('id')
51
- @db[name].update({:_id => BSON::ObjectId(id)}, hash)
52
- id
53
- end
54
-
55
- def delete name, id
56
- @db[name].remove(:_id => BSON::ObjectId(id))
57
- end
58
-
59
- def db_name db_name
60
- Conf.instance.yaml['database_name'] = db_name
61
- @db = @con.db(db_name)
62
- end
63
-
64
- def config
65
- yaml = Conf.instance.yaml
66
- @con = Mongo::Connection.new(yaml['database_host'], yaml['database_port'])
67
- @db = @con.db(yaml['database_name'])
68
- rescue Mongo::ConnectionFailure
69
- puts "Could not connect to MongoDB"
70
- exit 1
71
- end
72
- end
73
- end
@@ -1,34 +0,0 @@
1
- module Ki
2
- module Helpers
3
- # Example usage from haml
4
- # locals is the param variable
5
- #
6
- # = partial 'index', locals
7
- def partial s, hash={}
8
- Util.render_partial(s, hash)
9
- end
10
-
11
- def partial? s
12
- path = Util.root_view_path(s)
13
- File.exists? path
14
- end
15
-
16
- def css url
17
- render_haml "%link{:href => '#{url}', :rel => 'stylesheet'}"
18
- end
19
-
20
- def js url
21
- render_haml "%script{:src => '#{url}'}"
22
- end
23
-
24
- def haml s
25
- render_haml s
26
- end
27
-
28
- private
29
-
30
- def render_haml s
31
- Haml::Engine.new(s).render
32
- end
33
- end
34
- end
@@ -1,76 +0,0 @@
1
- require 'thor'
2
-
3
- require 'util'
4
-
5
- class KiGenerator < Thor::Group
6
- include Thor::Actions
7
-
8
- def self.source_root
9
- File.join(File.dirname(__FILE__), '..', 'examples', 'base')
10
- end
11
- end
12
-
13
- class AppGenerator < KiGenerator
14
-
15
- argument :app_name
16
-
17
- def prepare_dir
18
- dest_root = File.join(Dir.pwd, app_name)
19
-
20
- if Dir.exists? dest_root
21
- unless yes? "#{app_name} already exists. Do you want to overwrite it?"
22
- say 'aborted'
23
- exit 1
24
- end
25
- else
26
- Dir.mkdir dest_root
27
- end
28
- end
29
-
30
- def create_app
31
- dest_root = File.join(Dir.pwd, app_name)
32
-
33
- ['Gemfile', 'config.ru', 'app.rb', 'config.yml'].each do |f|
34
- copy_file f, File.join(dest_root, f)
35
- end
36
- end
37
- end
38
-
39
- class KiCli < Thor
40
- register AppGenerator, :new, 'new [APP_NAME]', 'generate a new app'
41
-
42
- desc 'config', 'set a specific value to a key in config.yml'
43
- method_option :key, :type => :string, :aliases => '-k', :desc => 'specify which key to use'
44
- method_option :val, :type => :string, :aliases => '-v', :desc => 'specify value for the key'
45
- def config
46
- if options[:key].nil? || options[:val].nil?
47
- say "key and val required", :red
48
- return 0
49
- end
50
-
51
- path = File.join(Dir.pwd, 'config.yml')
52
- lines = File.open(path, 'r').read.split("\n")
53
- File.open(path, 'w') { |f|
54
- lines.each do |l|
55
- if l.start_with? options[:key]
56
-
57
- l = options[:key].to_s + ": " + options[:val].to_s
58
- end
59
- f.write l + "\n"
60
- end
61
- }
62
- end
63
-
64
- desc 'server', 'starts the app'
65
- # method_option :reload, :type => :boolean, :aliases => '-r', :desc => 'Recommended for development'
66
- method_option :port, :type => :numeric, :aliases => '-p', :desc => 'port'
67
- def server
68
- port = options[:port] ? options[:port] : 3000
69
- # if options[:reload]
70
- # say 'Starting Ki Reloaded', :yellow
71
- #else
72
- say 'Starting Ki', :green
73
- #end
74
- system "bundle exec thin start -p #{port}"
75
- end
76
- end
@@ -1,45 +0,0 @@
1
- module Ki
2
- class MockReq
3
- attr_accessor :request_method
4
- attr_accessor :params
5
-
6
- def get?
7
- request_method == 'GET'
8
- end
9
-
10
- def post?
11
- request_method == 'POST'
12
- end
13
-
14
- def put?
15
- request_method == 'PUT'
16
- end
17
-
18
- def delete?
19
- request_method == 'DELETE'
20
- end
21
-
22
- def search?
23
- request_method == 'SEARCH'
24
- end
25
- end
26
-
27
- class ReqFactory
28
- def self.new sym, params={}
29
- case sym
30
- when :get, :post, :put, :delete, :head, :search
31
- mr = MockReq.new
32
- mr.request_method = sym.to_s.upcase
33
- mr.params = params
34
- return mr
35
- when :post_homer
36
- mr = MockReq.new
37
- mr.request_method = 'POST'
38
- mr.params = { 'user' => 'homer' }
39
- return mr
40
- else
41
- raise "not a valid factory"
42
- end
43
- end
44
- end
45
- end
@@ -1,110 +0,0 @@
1
- require 'modules/callbacks'
2
- require 'modules/restrictions'
3
- require 'modules/query_interface'
4
- require 'modules/model_helpers'
5
- require 'modules/email'
6
-
7
- module Ki
8
- class Model
9
- extend Restrictions
10
- extend QueryInterface
11
-
12
- include Callbacks
13
- include ModelHelpers
14
-
15
- attr_accessor :hash
16
- attr_accessor :req
17
-
18
- layout :layout
19
-
20
- def initialize req
21
- @hash = {}
22
- @db = Db.instance
23
- @req = req
24
-
25
- action = to_action(req)
26
- raise 'action forbidden' if forbidden_actions.include? action
27
- ccall action
28
- end
29
-
30
- def find
31
- raise 'params missing' unless @req.params
32
- @hash = @db.find_by(class_name, @req.params)
33
- raise "#{class_name} not found" if @hash.nil?
34
- end
35
-
36
- def create
37
- check_for_required_attributes
38
- check_for_unique_attributes
39
- @hash['id'] = @db.create(class_name, @req.params)
40
- end
41
-
42
- def update
43
- raise 'params missing' unless @req.params
44
- raise 'param id missing' unless @req.params['id']
45
- check_for_required_attributes
46
- @hash['id'] = @db.update(class_name, @req.params)
47
- end
48
-
49
- def delete
50
- raise 'params missing' unless @req.params
51
- raise 'param id missing' unless @req.params['id']
52
- @hash = @db.delete(class_name, @req.params['id'])
53
- end
54
-
55
- def to_json
56
- @hash.to_json
57
- end
58
-
59
- def class_name
60
- self.class.to_s.downcase
61
- end
62
-
63
- private
64
-
65
- def check_for_required_attributes
66
- required_attributes.each do |ra|
67
- if !@req.params.keys.include?(ra.to_s)
68
- raise "#{ra.to_s} missing"
69
- end
70
- end
71
- end
72
-
73
- def check_for_unique_attributes
74
- unique_attributes.each do |ua|
75
- u = self.class.find({ua.to_s => params[ua.to_s]})
76
- unless u.empty?
77
- raise "#{ua.to_s} not unique"
78
- end
79
- end
80
- end
81
-
82
- def to_action req
83
- case req.request_method
84
- when 'GET'
85
- :find
86
- when 'POST'
87
- :create
88
- when 'PUT'
89
- :update
90
- when 'DELETE'
91
- :delete
92
- when 'SEARCH'
93
- :find
94
- else
95
- raise 'unkown action'
96
- end
97
- end
98
-
99
- # calls method m + before and after methods
100
- def ccall m
101
- before_all
102
- send "before_#{m.to_s}".to_sym
103
- send m.to_sym
104
- send "after_#{m.to_s}".to_sym
105
- after_all
106
- rescue BSON::InvalidObjectId
107
- raise "invalid id format: #{params['id']}"
108
- end
109
- end
110
- end