ooorest 0.0.5
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/MIT-LICENSE +20 -0
- data/README.md +68 -0
- data/lib/app/controllers/open_objects_controller.rb +123 -0
- data/lib/ooorest.rb +33 -0
- metadata +77 -0
data/MIT-LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2009 [Raphaël Valyi]
|
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.
|
data/README.md
ADDED
@@ -0,0 +1,68 @@
|
|
1
|
+
OOOREST - OpenObject On Rails, REST layer
|
2
|
+
====
|
3
|
+
|
4
|
+
<table>
|
5
|
+
<tr>
|
6
|
+
<td><a href="http://github.com/rvalyi/ooor" title="OOOR - OpenObject On Rails"><img src="http://sites.google.com/site/assetserversite/_/rsrc/1257126460164/home/ooor_s.jpg" width="159px" height="124px" /></a></td>
|
7
|
+
<td><b>BY</b></td>
|
8
|
+
<td><a href="http://www.akretion.com" title="Akretion - open source to spin the world"><img src="http://sites.google.com/site/assetserversite/_/rsrc/1257126470309/home/akretion_s.png" width="228px" height="124px" /></a></td>
|
9
|
+
<td>
|
10
|
+
OOOR stands for OpenObject On Rails. OpenObject is the RAD framework behind OpenERP,
|
11
|
+
the ERP that doesn't hurt, just like Rails is "web development that doesn't hurt".
|
12
|
+
So OOOR exposes seamlessly your OpenOpbject application, to your custom Rails application.
|
13
|
+
Needless to say, OOOR doubly doesn't hurt.
|
14
|
+
Furthermore, OOOR only depends on the "activeresource" gem. So it can even be used
|
15
|
+
in any (J)Ruby application without Rails.
|
16
|
+
</td>
|
17
|
+
</tr>
|
18
|
+
</table>
|
19
|
+
|
20
|
+
OooREST enables REST HTTP routes to your OpenERP models:
|
21
|
+
Before anything, make sure you read the doc of [OOOR](http://github.com/rvalyi/ooor)
|
22
|
+
Install the gem using gem install ooorest.
|
23
|
+
|
24
|
+
we assume you created a working Rails application, in your config/environment.rb
|
25
|
+
Inside the Rails::Initializer.run do |config| statement, paste the following gem dependency (along with the ooor dependency):
|
26
|
+
|
27
|
+
$ config.gem "ooorest"
|
28
|
+
|
29
|
+
in your config/route.rb, you can alternatively enable routes to all your OpenERP models by addding:
|
30
|
+
$ OOOREST.load_all_controllers(map)
|
31
|
+
|
32
|
+
Or only enable the route to some specific model instead (here partners):
|
33
|
+
$ map.resources :res_partner
|
34
|
+
|
35
|
+
|
36
|
+
REST HTTP API:
|
37
|
+
|
38
|
+
$ http://localhost:3000/res_partner
|
39
|
+
$ http://localhost:3000/res_partner.xml
|
40
|
+
$ http://localhost:3000/res_partner.json
|
41
|
+
$ http://localhost:3000/res_partner/2
|
42
|
+
$ http://localhost:3000/res_partner/2.json
|
43
|
+
$ http://localhost:3000/res_partner/2.xml
|
44
|
+
$ http://localhost:3000/res_partner/[2,3,4].xml
|
45
|
+
$ http://localhost:3000/res_partner/[2,3,4].json
|
46
|
+
|
47
|
+
$ TODO http://localhost:3000/res_partner.xml?active=1
|
48
|
+
|
49
|
+
$ TODO http://localhost:3000/res_partner.xml?domain=TODO
|
50
|
+
|
51
|
+
|
52
|
+
FAQ
|
53
|
+
------------
|
54
|
+
|
55
|
+
|
56
|
+
### Can I extend the OOOR controllers?
|
57
|
+
|
58
|
+
Yes, you can do that, see the "how to extends models" section as it's very similar. Instead, in the app/controllers directory, you'll re-open defined controllers,
|
59
|
+
for the product.product controllers, it means creating a product_product_controller.rb file with:
|
60
|
+
|
61
|
+
$ class ProductProduct < OpenObjectsController
|
62
|
+
$ def foo
|
63
|
+
$ render :text => "bar"
|
64
|
+
$ end
|
65
|
+
$ end
|
66
|
+
|
67
|
+
Now, if you register that new method in your route.rb file GET /product_product/1/foo will render "bar" on your browser screen.
|
68
|
+
You could instead just customize the existing CRUD methods so you don't need to regiter any other route in route.rb.
|
@@ -0,0 +1,123 @@
|
|
1
|
+
require 'action_controller'
|
2
|
+
|
3
|
+
class OpenObjectsController < ActionController::Base
|
4
|
+
|
5
|
+
#TODO get lang from URL in before filter
|
6
|
+
#TODO use timezone from HTTP header and put is in context
|
7
|
+
|
8
|
+
# ******************** class methods ********************
|
9
|
+
class << self
|
10
|
+
|
11
|
+
cattr_accessor :logger
|
12
|
+
attr_accessor :model_class
|
13
|
+
|
14
|
+
def model_class
|
15
|
+
if defined?(@model_class)
|
16
|
+
@model_class
|
17
|
+
elsif superclass != Object && superclass.model_class
|
18
|
+
superclass.model_class.dup.freeze
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def model_class=(_model_class)
|
23
|
+
@model_class = _model_class
|
24
|
+
end
|
25
|
+
|
26
|
+
def ids_from_param(param)
|
27
|
+
if param.split(',').size > 0
|
28
|
+
return eval param
|
29
|
+
else
|
30
|
+
return param
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
35
|
+
|
36
|
+
|
37
|
+
# ******************** instance methods ********************
|
38
|
+
|
39
|
+
# GET /models
|
40
|
+
# GET /models.xml
|
41
|
+
def index
|
42
|
+
@models = self.class.model_class.find(:all)
|
43
|
+
|
44
|
+
respond_to do |format|
|
45
|
+
format.html # index.html.erb
|
46
|
+
format.xml { render :xml => @models }
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
# GET /models/1
|
51
|
+
# GET /models/1.xml
|
52
|
+
def show
|
53
|
+
@models = self.class.model_class.find(self.class.ids_from_param(params[:id]))
|
54
|
+
|
55
|
+
respond_to do |format|
|
56
|
+
format.html # show.html.erb
|
57
|
+
format.xml { render :xml => @models }
|
58
|
+
format.json { render :json => @models }
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
# GET /models/new
|
63
|
+
# GET /models/new.xml
|
64
|
+
def new
|
65
|
+
@models = self.class.model_class.new
|
66
|
+
|
67
|
+
respond_to do |format|
|
68
|
+
format.html # new.html.erb
|
69
|
+
format.xml { render :xml => @models }
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
# GET /models/1/edit
|
74
|
+
def edit
|
75
|
+
@models = self.class.model_class.find(params[:id])
|
76
|
+
end
|
77
|
+
|
78
|
+
# POST /models
|
79
|
+
# POST /models.xml
|
80
|
+
def create
|
81
|
+
@models = self.class.model_class.new(params[:partners])
|
82
|
+
|
83
|
+
respond_to do |format|
|
84
|
+
if @models.save
|
85
|
+
flash[:notice] = 'Model was successfully created.'
|
86
|
+
format.html { redirect_to(@models) }
|
87
|
+
format.xml { render :xml => @models, :status => :created, :location => @models }
|
88
|
+
else
|
89
|
+
format.html { render :action => "new" }
|
90
|
+
format.xml { render :xml => @models.errors, :status => :unprocessable_entity }
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
# PUT /models/1
|
96
|
+
# PUT /models/1.xml
|
97
|
+
def update
|
98
|
+
@models = self.class.model_class.find(params[:id])
|
99
|
+
|
100
|
+
respond_to do |format|
|
101
|
+
if @models.update_attributes(params[:partners])
|
102
|
+
flash[:notice] = 'Partners was successfully updated.'
|
103
|
+
format.html { redirect_to(@models) }
|
104
|
+
format.xml { head :ok }
|
105
|
+
else
|
106
|
+
format.html { render :action => "edit" }
|
107
|
+
format.xml { render :xml => @models.errors, :status => :unprocessable_entity }
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
# DELETE /models/1
|
113
|
+
# DELETE /models/1.xml
|
114
|
+
def destroy
|
115
|
+
@models = self.class.model_class.find(params[:id])
|
116
|
+
@models.destroy
|
117
|
+
|
118
|
+
respond_to do |format|
|
119
|
+
format.html { redirect_to(url_for(:action => index)) }
|
120
|
+
format.xml { head :ok }
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|
data/lib/ooorest.rb
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'app/controllers/open_objects_controller'
|
2
|
+
|
3
|
+
class OooREST
|
4
|
+
|
5
|
+
attr_accessor :ooor
|
6
|
+
|
7
|
+
def initialize(ooor)
|
8
|
+
@ooor = ooor
|
9
|
+
models = @ooor.config[:models] && @ooor.all_loaded_models.select {|model| ooor.config[:models].index(model.openerp_model)} || @ooor.all_loaded_models
|
10
|
+
OpenObjectsController.logger = @ooor.logger
|
11
|
+
models.each {|model| define_openerp_controller(model)}
|
12
|
+
end
|
13
|
+
|
14
|
+
def define_openerp_controller(model_class)
|
15
|
+
controller_class_name = model_class.to_s + "Controller"
|
16
|
+
OpenObjectsController.logger.info "registering #{controller_class_name} as a Rails ActiveResource Controller wrapper for OpenObject #{model_class} model"
|
17
|
+
klass = Class.new(OpenObjectsController)
|
18
|
+
klass.model_class = model_class
|
19
|
+
Object.const_set(controller_class_name, klass)
|
20
|
+
klass
|
21
|
+
end
|
22
|
+
|
23
|
+
def load_all_controllers(map)
|
24
|
+
@ooor.all_loaded_models.each do |model|
|
25
|
+
map.resources model.openerp_model.gsub('.', '_').to_sym
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
|
31
|
+
if defined?(Rails) && defined?(OOOR)
|
32
|
+
OOOREST = OooREST.new(OOOR)
|
33
|
+
end
|
metadata
ADDED
@@ -0,0 +1,77 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: ooorest
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.5
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Raphael Valyi - www.akretion.com
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2009-12-19 00:00:00 -02:00
|
13
|
+
default_executable:
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: ooor
|
17
|
+
type: :runtime
|
18
|
+
version_requirement:
|
19
|
+
version_requirements: !ruby/object:Gem::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: 1.2.0
|
24
|
+
version:
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: actionpack
|
27
|
+
type: :runtime
|
28
|
+
version_requirement:
|
29
|
+
version_requirements: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 2.3.1
|
34
|
+
version:
|
35
|
+
description: OOOREST is a thin layer over the OOOR Model layer, an ActiveResource proxy for OpenERP models. OOOREST depends on actionpack and OOOR, thus OpenERP models Restfully over HTTP, using the Rails formats.
|
36
|
+
email: rvalyi@akretion.com
|
37
|
+
executables: []
|
38
|
+
|
39
|
+
extensions: []
|
40
|
+
|
41
|
+
extra_rdoc_files: []
|
42
|
+
|
43
|
+
files:
|
44
|
+
- README.md
|
45
|
+
- MIT-LICENSE
|
46
|
+
- lib/ooorest.rb
|
47
|
+
- lib/app/controllers/open_objects_controller.rb
|
48
|
+
has_rdoc: true
|
49
|
+
homepage: http://github.com/rvalyi/ooor
|
50
|
+
licenses: []
|
51
|
+
|
52
|
+
post_install_message:
|
53
|
+
rdoc_options: []
|
54
|
+
|
55
|
+
require_paths:
|
56
|
+
- lib
|
57
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: "0"
|
62
|
+
version:
|
63
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - ">="
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: "0"
|
68
|
+
version:
|
69
|
+
requirements: []
|
70
|
+
|
71
|
+
rubyforge_project:
|
72
|
+
rubygems_version: 1.3.5
|
73
|
+
signing_key:
|
74
|
+
specification_version: 3
|
75
|
+
summary: OOOR - OpenObject On Rails
|
76
|
+
test_files: []
|
77
|
+
|