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.
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