rack-crud 0.0.4 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b1b9c0bf9359717d24a3366b70b4cca44c9599a0
4
- data.tar.gz: 10b2b0da8af2c96307c40b301f754b9e4717ff84
3
+ metadata.gz: b963945623b1f520255e729f4d491267548bce1f
4
+ data.tar.gz: 126c9dace6be448ae48b316a288dbf00c1f0aa35
5
5
  SHA512:
6
- metadata.gz: 5266deadcf43c5946472574f4f5c2fbf6eca2bbc579aa15f3922e9bc6442230429e6f749bdfb3110251ee7f079b7ce7c449d7b89bc39f4aba0deec3be2cf1ef7
7
- data.tar.gz: 963ee0bdcb7b28a7a3d5d9e17832d159935f5e23c08c48006b148f032228ae9c00414be414d05d93d48975273154a7f82e7e426ce407b06398975c0ba47f1af1
6
+ metadata.gz: fc7bd90a0cabe43c3a909b46285a6594aa4854d40273cfca468116a891ef60bd008a24cef88f34a70b61011544d16ed32f451db75ef6af69673057da4cec01d1
7
+ data.tar.gz: 663176b11322e4c89c0682f8a644f31d832674eb934fd9d2f0510fa71d6250ba7c73516814a71e06275d71fac5e8bdcf019398dbf675b53953031456c609d259
@@ -0,0 +1,26 @@
1
+ class Request
2
+ def initialize env
3
+ @env = env
4
+ @request = Rack::Request.new( env )
5
+ @params = params_for( env )
6
+ end
7
+
8
+ def params_for env
9
+ case env[ 'REQUEST_METHOD' ].to_sym
10
+ when :GET
11
+ Rack::Utils.parse_nested_query( env[ 'QUERY_STRING' ])
12
+ when :POST, :PUT
13
+ body = @request.body.read.to_s
14
+
15
+ Rack::Utils.parse_nested_query( body ).symbolize_keys
16
+ end
17
+ end
18
+
19
+ def response
20
+ routing = Rack::Routing::Router.for( @env )
21
+ @url_params = routing[ :params ]
22
+
23
+ rh = RequestHandler.new( @env, @params, @url_params )
24
+ rh.send routing[ :method ]
25
+ end
26
+ end
@@ -0,0 +1,19 @@
1
+ class Response
2
+ class << self
3
+ def ok
4
+ Rack::Response.new '', 200
5
+ end
6
+
7
+ def ok_for body
8
+ Rack::Response.new body, 200
9
+ end
10
+
11
+ def not_found_for body
12
+ Rack::Response.new body, 404
13
+ end
14
+
15
+ def unprocessable_entity_for body
16
+ Rack::Response.new body, 422
17
+ end
18
+ end
19
+ end
data/lib/rack/crud.rb CHANGED
@@ -1 +1,5 @@
1
+ require 'rack/app/request'
1
2
  require 'rack/app/request_handler'
3
+ require 'rack/app/response'
4
+ require 'models/crud_model'
5
+ require 'requests/crud'
@@ -0,0 +1,13 @@
1
+ module CRUDModel
2
+ def editable_fields
3
+ editable = fields.map( &:first )
4
+
5
+ editable.delete( '_id' )
6
+ editable.delete( '_type' )
7
+ editable.delete( 'connection_id' )
8
+ editable.delete( 'created_at' )
9
+ editable.delete( 'updated_at' )
10
+
11
+ editable.map( &:to_sym )
12
+ end
13
+ end
@@ -0,0 +1,75 @@
1
+ module CRUDRequest
2
+ def new_for klass
3
+ fields = klass.new.editable_fields
4
+ attributes = Hash[ *fields.map{| f | [ f.to_sym, '' ]}.flatten ]
5
+
6
+ submit_method = "postObject('#{ klass.to_s.downcase }')"
7
+ data = { instance:attributes ,
8
+ submit_method:submit_method ,
9
+ header:"Create New #{ klass }" }
10
+
11
+ Response.ok_for render( klass.to_s.downcase, :form, data )
12
+ end
13
+
14
+ def create_for klass
15
+ object = klass.create( @params )
16
+
17
+ return Response.ok if object.valid?
18
+
19
+ Response.unprocessable_entity_for object.errors.full_messages
20
+ end
21
+
22
+ def get_for klass
23
+ instances = klass.all
24
+ .map( &:attributes )
25
+ .sort_by{| instance | instance[ :display_name ]}
26
+
27
+ fields = klass.new.editable_fields
28
+ count = instances.count
29
+ data = { fields:fields, instances:instances, count:count }
30
+ Response.ok_for render( klass.to_s.downcase, :all, data )
31
+ end
32
+
33
+ def show_for klass
34
+ attributes = klass.find( @url_params[ :id ]).attributes
35
+
36
+ data = { id:attributes[ '_id' ], instance:attributes }
37
+
38
+ Response.ok_for render( klass.to_s.downcase, :show, data )
39
+ end
40
+
41
+ def edit_for klass
42
+ id = @url_params[ :id ]
43
+ attributes = klass.find( id ).attributes
44
+
45
+ submit_method = "putObject('#{ klass.to_s.downcase }', '#{ id }')"
46
+ data = { id:id,
47
+ instance:attributes,
48
+ submit_method:submit_method,
49
+ header:"Edit #{ klass }" }
50
+
51
+ Response.ok_for render( klass.to_s.downcase, :form, data )
52
+ end
53
+
54
+ def put_for klass
55
+ instance = klass.find( @url_params[ :id ])
56
+
57
+ if instance.update_attributes( @params )
58
+ return Response.ok
59
+ end
60
+
61
+ Response.unprocessable_entity_for instance.errors.full_messages
62
+ end
63
+
64
+ def delete_for klass
65
+ object = klass.find( @url_params[ :id ])
66
+
67
+ if object.nil?
68
+ Log.info "#{ __method__ } #{ klass } could not delete id #{ @url_params[ :id ]}"
69
+ else
70
+ object.delete
71
+ end
72
+
73
+ Response.ok
74
+ end
75
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rack-crud
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - George Ulmer
@@ -100,8 +100,12 @@ executables: []
100
100
  extensions: []
101
101
  extra_rdoc_files: []
102
102
  files:
103
+ - lib/rack/app/request.rb
103
104
  - lib/rack/app/request_handler.rb
105
+ - lib/rack/app/response.rb
104
106
  - lib/rack/crud.rb
107
+ - lib/rack/models/crud_model.rb
108
+ - lib/rack/requests/crud.rb
105
109
  homepage: http://rubygems.org/gems/rack-crud
106
110
  licenses:
107
111
  - MIT