kangaroo 0.0.1.pre
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +1 -0
- data/.rspec +2 -0
- data/.yardopts +6 -0
- data/Gemfile +2 -0
- data/Gemfile.lock +66 -0
- data/LICENSE +22 -0
- data/README.md +65 -0
- data/Rakefile +36 -0
- data/config/kangaroo.yml.sample +12 -0
- data/docs/AdditionalServices.md +3 -0
- data/docs/Architecture.md +50 -0
- data/docs/Installation.md +73 -0
- data/docs/Usage.md +161 -0
- data/features/connection.feature +5 -0
- data/features/env.rb +8 -0
- data/features/step_definitions/basic_steps.rb +24 -0
- data/features/step_definitions/connection_steps.rb +13 -0
- data/features/support/test.yml +11 -0
- data/features/utility_services.feature +39 -0
- data/kangaroo.gemspec +29 -0
- data/lib/kangaroo.rb +6 -0
- data/lib/kangaroo/exception.rb +7 -0
- data/lib/kangaroo/model/attributes.rb +124 -0
- data/lib/kangaroo/model/base.rb +70 -0
- data/lib/kangaroo/model/condition_normalizer.rb +63 -0
- data/lib/kangaroo/model/default_attributes.rb +22 -0
- data/lib/kangaroo/model/field.rb +20 -0
- data/lib/kangaroo/model/finder.rb +92 -0
- data/lib/kangaroo/model/inspector.rb +55 -0
- data/lib/kangaroo/model/open_object_orm.rb +117 -0
- data/lib/kangaroo/model/persistence.rb +180 -0
- data/lib/kangaroo/model/relation.rb +212 -0
- data/lib/kangaroo/model/remote_execute.rb +29 -0
- data/lib/kangaroo/railtie.rb +13 -0
- data/lib/kangaroo/ruby_adapter/base.rb +28 -0
- data/lib/kangaroo/ruby_adapter/class_definition.rb +46 -0
- data/lib/kangaroo/ruby_adapter/fields.rb +18 -0
- data/lib/kangaroo/util/client.rb +59 -0
- data/lib/kangaroo/util/configuration.rb +82 -0
- data/lib/kangaroo/util/database.rb +92 -0
- data/lib/kangaroo/util/loader.rb +98 -0
- data/lib/kangaroo/util/loader/model.rb +21 -0
- data/lib/kangaroo/util/loader/namespace.rb +15 -0
- data/lib/kangaroo/util/proxy.rb +35 -0
- data/lib/kangaroo/util/proxy/common.rb +111 -0
- data/lib/kangaroo/util/proxy/db.rb +34 -0
- data/lib/kangaroo/util/proxy/object.rb +153 -0
- data/lib/kangaroo/util/proxy/report.rb +24 -0
- data/lib/kangaroo/util/proxy/superadmin.rb +71 -0
- data/lib/kangaroo/util/proxy/wizard.rb +25 -0
- data/lib/kangaroo/util/proxy/workflow.rb +14 -0
- data/lib/kangaroo/version.rb +3 -0
- data/spec/model/attributes_spec.rb +70 -0
- data/spec/model/base_spec.rb +19 -0
- data/spec/model/default_attributes_spec.rb +37 -0
- data/spec/model/finder_spec.rb +104 -0
- data/spec/model/inspector_spec.rb +56 -0
- data/spec/model/open_object_orm_spec.rb +134 -0
- data/spec/model/persistence_spec.rb +53 -0
- data/spec/model/relation_spec.rb +122 -0
- data/spec/ruby_adapter/class_definition_spec.rb +51 -0
- data/spec/server_helper.rb +167 -0
- data/spec/spec_helper.rb +14 -0
- data/spec/test_env/test.yml +11 -0
- data/spec/util/configuration_spec.rb +36 -0
- data/spec/util/loader_spec.rb +50 -0
- data/spec/util/proxy_spec.rb +61 -0
- metadata +260 -0
@@ -0,0 +1,21 @@
|
|
1
|
+
module Kangaroo
|
2
|
+
module Util
|
3
|
+
class Loader
|
4
|
+
module Model
|
5
|
+
def self.included klass
|
6
|
+
klass.class_attribute :column_names
|
7
|
+
klass.column_names = %w(state osv_memory name model info field_id access_ids)
|
8
|
+
klass.define_multiple_accessors *klass.column_names
|
9
|
+
end
|
10
|
+
|
11
|
+
def length_of_model_name
|
12
|
+
model.length
|
13
|
+
end
|
14
|
+
|
15
|
+
def model_class_name
|
16
|
+
self.class.namespace.oo_to_ruby model
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Kangaroo
|
2
|
+
module Util
|
3
|
+
class Loader
|
4
|
+
module Namespace
|
5
|
+
def oo_to_ruby oo_name
|
6
|
+
name + "::" + oo_name.gsub('.','/').camelize
|
7
|
+
end
|
8
|
+
|
9
|
+
def ruby_to_oo ruby_name
|
10
|
+
ruby_name.sub(name + "::",'').underscore.gsub '/', '.'
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'rapuncel'
|
2
|
+
|
3
|
+
module Kangaroo
|
4
|
+
module Util
|
5
|
+
class Proxy < Rapuncel::Proxy
|
6
|
+
autoload :Common, 'kangaroo/util/proxy/common'
|
7
|
+
autoload :Db, 'kangaroo/util/proxy/db'
|
8
|
+
autoload :Superadmin, 'kangaroo/util/proxy/superadmin'
|
9
|
+
autoload :Object, 'kangaroo/util/proxy/object'
|
10
|
+
autoload :Workflow, 'kangaroo/util/proxy/workflow'
|
11
|
+
autoload :Report, 'kangaroo/util/proxy/report'
|
12
|
+
autoload :Wizard, 'kangaroo/util/proxy/wizard'
|
13
|
+
|
14
|
+
def __initialize__ client, *curry_args
|
15
|
+
super client, nil
|
16
|
+
@curry_args = curry_args
|
17
|
+
end
|
18
|
+
|
19
|
+
def call! name, *args
|
20
|
+
super name, *__curry__(*args)
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.new *args
|
24
|
+
allocate.__tap__ do |proxy|
|
25
|
+
proxy.__initialize__ *args
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
protected
|
30
|
+
def __curry__ *args
|
31
|
+
@curry_args + args
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,111 @@
|
|
1
|
+
module Kangaroo
|
2
|
+
module Util
|
3
|
+
class Proxy::Common < Proxy
|
4
|
+
# Login to an OpenERP database
|
5
|
+
#
|
6
|
+
# @param [String] db_name The database to log in
|
7
|
+
# @param [String] user Username
|
8
|
+
# @param [String] password Password
|
9
|
+
def login db_name, user, password
|
10
|
+
call! :login, db_name, user, password
|
11
|
+
end
|
12
|
+
|
13
|
+
# Get information about the OpenERP Server
|
14
|
+
#
|
15
|
+
# @param [boolean] extended Display extended information
|
16
|
+
# @return About information
|
17
|
+
def about extended = false
|
18
|
+
call! :about, extended
|
19
|
+
end
|
20
|
+
|
21
|
+
# Get OpenERP Servers timezone configuration
|
22
|
+
#
|
23
|
+
# @param database
|
24
|
+
# @param login
|
25
|
+
# @param password
|
26
|
+
# @return Timezone information
|
27
|
+
def timezone_get database, login, password
|
28
|
+
call! :timezone_get, database, login, password
|
29
|
+
end
|
30
|
+
|
31
|
+
# Get server environment
|
32
|
+
#
|
33
|
+
# @return Details about server environment
|
34
|
+
def get_server_environment
|
35
|
+
call! :get_server_environment
|
36
|
+
end
|
37
|
+
|
38
|
+
# Get login message
|
39
|
+
#
|
40
|
+
# @return login message
|
41
|
+
def login_message
|
42
|
+
call! :login_message
|
43
|
+
end
|
44
|
+
|
45
|
+
# Set log level
|
46
|
+
#
|
47
|
+
# @param super_password Superadmin password
|
48
|
+
# @param loglevel Loglevel to set
|
49
|
+
# @return true
|
50
|
+
def set_loglevel super_password, loglevel
|
51
|
+
call! :set_loglevel, loglevel.upcase
|
52
|
+
end
|
53
|
+
|
54
|
+
# Get server stats
|
55
|
+
#
|
56
|
+
# @return Server stats
|
57
|
+
def get_stats
|
58
|
+
call! :get_stats
|
59
|
+
end
|
60
|
+
|
61
|
+
# List HTTP services
|
62
|
+
#
|
63
|
+
# @return List of HTTP services
|
64
|
+
def list_http_services
|
65
|
+
call! :list_http_services
|
66
|
+
end
|
67
|
+
|
68
|
+
# Check connectivity
|
69
|
+
#
|
70
|
+
# @return [boolean] true/false
|
71
|
+
def check_connectivity
|
72
|
+
call! :check_connectivity
|
73
|
+
end
|
74
|
+
|
75
|
+
# Get servers OS time
|
76
|
+
#
|
77
|
+
# @param [String] super_password Superadmin password
|
78
|
+
# @return servers OS time
|
79
|
+
def get_os_time super_password
|
80
|
+
call! :get_os_time, super_password
|
81
|
+
end
|
82
|
+
|
83
|
+
# Get SQL count, needs loglevel DEBUG_SQL
|
84
|
+
#
|
85
|
+
# @return Count of SQL queries
|
86
|
+
def get_sqlcount
|
87
|
+
call! :get_sqlcount
|
88
|
+
end
|
89
|
+
|
90
|
+
# Get list of available updates, needs valid Publisher's Warranty
|
91
|
+
#
|
92
|
+
# @param super_password Superadmin password
|
93
|
+
# @param contract_id Publisher's Warranty ID
|
94
|
+
# @param contract_password Publisher's Warranty Password
|
95
|
+
# @return list of available updates
|
96
|
+
def get_available_updates super_password, contract_id, contract_password
|
97
|
+
call! :get_available_updates, contract_id, contract_password
|
98
|
+
end
|
99
|
+
|
100
|
+
# Get migration scripts, needs valid Publisher's Warranty
|
101
|
+
#
|
102
|
+
# @param super_password Superadmin password
|
103
|
+
# @param contract_id Publisher's Warranty ID
|
104
|
+
# @param contract_password Publisher's Warranty Password
|
105
|
+
# @return migration scripts
|
106
|
+
def get_migration_scripts super_password, contract_id, contract_password
|
107
|
+
call! :get_migration_scripts, contract_id, contract_password
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
module Kangaroo
|
2
|
+
module Util
|
3
|
+
class Proxy::Db < Proxy
|
4
|
+
# Check if a database exists
|
5
|
+
#
|
6
|
+
# @param db_name Name of database to check
|
7
|
+
# @return [boolean] true if database exists
|
8
|
+
def db_exist db_name
|
9
|
+
call! :db_exist, db_name
|
10
|
+
end
|
11
|
+
|
12
|
+
# Get a list of available databases
|
13
|
+
#
|
14
|
+
# @return list of databases
|
15
|
+
def list
|
16
|
+
call! :list
|
17
|
+
end
|
18
|
+
|
19
|
+
# Get a list of available languages
|
20
|
+
#
|
21
|
+
# @return list of languages
|
22
|
+
def list_lang
|
23
|
+
call! :list_lang
|
24
|
+
end
|
25
|
+
|
26
|
+
# Get running server version
|
27
|
+
#
|
28
|
+
# @return server version
|
29
|
+
def server_version
|
30
|
+
call! :server_version
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,153 @@
|
|
1
|
+
module Kangaroo
|
2
|
+
module Util
|
3
|
+
class Proxy::Object < Proxy
|
4
|
+
# Call function via execute on OpenERPs object service.
|
5
|
+
#
|
6
|
+
# @param name function name to call
|
7
|
+
# @return returned value
|
8
|
+
def call! name, *args
|
9
|
+
puts "#{name.to_s.upcase}: #{args.inspect}"
|
10
|
+
super :execute, name, *args
|
11
|
+
end
|
12
|
+
|
13
|
+
# Get for a model
|
14
|
+
#
|
15
|
+
# @param [Array] list of field names, nil for all
|
16
|
+
# @param [Hash] context
|
17
|
+
# @return [Hash] field names and properties
|
18
|
+
def fields_get fields = nil, context = {}
|
19
|
+
call! :fields_get, fields, context
|
20
|
+
end
|
21
|
+
|
22
|
+
# Get default values for a model
|
23
|
+
#
|
24
|
+
# @param [Array] fields list of field names
|
25
|
+
# @param [Hash] context
|
26
|
+
# @return [Hash]
|
27
|
+
def default_get fields = nil, context = nil
|
28
|
+
call! :default_get, fields, context
|
29
|
+
end
|
30
|
+
|
31
|
+
# Get names of records for to-many relationships
|
32
|
+
#
|
33
|
+
# @param [Array] ids
|
34
|
+
# @param [Hash] context
|
35
|
+
# @return [Array<Array>] List of arrays [id, name]
|
36
|
+
def name_get ids, context = nil
|
37
|
+
call! :name_get, ids, context
|
38
|
+
end
|
39
|
+
|
40
|
+
# Search for records by name
|
41
|
+
#
|
42
|
+
# @param [String] name
|
43
|
+
# @param [Array] args
|
44
|
+
# @param [String] operator
|
45
|
+
# @param [Hash] context
|
46
|
+
# @param [Number] limit
|
47
|
+
# @return list of object names
|
48
|
+
def name_search name = '', args = nil, operator = 'ilike', context = nil, limit = 100
|
49
|
+
call! :name_search, name, args, operator, context, limit
|
50
|
+
end
|
51
|
+
|
52
|
+
# Read metadata for records, including
|
53
|
+
# - create user
|
54
|
+
# - create date
|
55
|
+
# - write user
|
56
|
+
# - write date
|
57
|
+
# - xml id
|
58
|
+
#
|
59
|
+
# @param [Array] ids
|
60
|
+
# @param [Hash] context
|
61
|
+
# @param [boolean] details
|
62
|
+
# @return [Array] list of Hashes with metadata
|
63
|
+
def read_perm ids, context = nil, details = false
|
64
|
+
call! :read_perm, ids, context, details
|
65
|
+
end
|
66
|
+
|
67
|
+
# Copy a record
|
68
|
+
#
|
69
|
+
# @param id
|
70
|
+
# @param default values to override on copy (defaults to nil)
|
71
|
+
# @param [Hash] context
|
72
|
+
# @return attributes of copied record
|
73
|
+
def copy id, default = nil, context = nil
|
74
|
+
call! :copy, id, default, context
|
75
|
+
end
|
76
|
+
|
77
|
+
# Check if records with given ids exist
|
78
|
+
#
|
79
|
+
# @param ids
|
80
|
+
# @param context
|
81
|
+
# @return [boolean] true if all exist, else false
|
82
|
+
def exists ids, context = nil
|
83
|
+
call! :exists, ids, context
|
84
|
+
end
|
85
|
+
|
86
|
+
# Get xml ids for records
|
87
|
+
#
|
88
|
+
# @param ids
|
89
|
+
# @return [Hash] Hash with ids as keys and xml_ids as values
|
90
|
+
def get_xml_id ids
|
91
|
+
call! :get_xml_id, ids
|
92
|
+
end
|
93
|
+
|
94
|
+
# Create a new record
|
95
|
+
#
|
96
|
+
# @param [Hash] attributes attributes to set on new record
|
97
|
+
# @return id of new record
|
98
|
+
def create attributes, context = nil
|
99
|
+
call! :create, attributes, context
|
100
|
+
end
|
101
|
+
|
102
|
+
# Search for records
|
103
|
+
#
|
104
|
+
# @param model_name OpenERP model to search
|
105
|
+
# @param [Array] conditions search conditions
|
106
|
+
# @param offset number of records to skip, defaults to 0
|
107
|
+
# @param limit max number of records, defaults to nil
|
108
|
+
def search conditions, offset = 0, limit = nil, order = nil, context = nil, count = false
|
109
|
+
call! :search, conditions, offset, limit, order, context, count
|
110
|
+
end
|
111
|
+
|
112
|
+
# Read fields from records
|
113
|
+
#
|
114
|
+
# @param [Array] ids ids of record to read fields from
|
115
|
+
# @param [Array] fields fields to read
|
116
|
+
# @param [Hash] context
|
117
|
+
# @return [Array] Array of Hashes with field names and values
|
118
|
+
def read ids, fields = [], context = nil
|
119
|
+
call! :read, ids, fields
|
120
|
+
end
|
121
|
+
|
122
|
+
# Update records
|
123
|
+
#
|
124
|
+
# @param [Array] ids ids of record to update
|
125
|
+
# @param [Hash] values Hash of field names => values
|
126
|
+
# @return true
|
127
|
+
def write ids, values, context = nil
|
128
|
+
call! :write, ids, values, context
|
129
|
+
end
|
130
|
+
|
131
|
+
# Delete records
|
132
|
+
#
|
133
|
+
# @param [Array] ids ids to to remove
|
134
|
+
# @return true
|
135
|
+
def unlink ids, context = nil
|
136
|
+
call! :unlink, ids, context
|
137
|
+
end
|
138
|
+
|
139
|
+
# Read records grouped by a field
|
140
|
+
#
|
141
|
+
# @param [Array] domain search conditions
|
142
|
+
# @param [Array] fields field names to read
|
143
|
+
# @param [Array] groupby field names to group by
|
144
|
+
# @param offset number of records to skip (defaults to 0)
|
145
|
+
# @param limit max number of records to retrieve (defaults to nil)
|
146
|
+
# @param order order by clause
|
147
|
+
# @return [Array]
|
148
|
+
def read_group domain, fields, groupby, offset = 0, limit = nil, order = nil
|
149
|
+
call! :read_group, domain, fields, groupby, offset, limit, order
|
150
|
+
end
|
151
|
+
end
|
152
|
+
end
|
153
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module Kangaroo
|
2
|
+
module Util
|
3
|
+
class Proxy::Report < Proxy
|
4
|
+
# Initiate report generation
|
5
|
+
#
|
6
|
+
# @param object
|
7
|
+
# @param ids
|
8
|
+
# @param datas
|
9
|
+
# @param context
|
10
|
+
# @return id to check status on/get report
|
11
|
+
def report object, ids, datas = {}, context = {}
|
12
|
+
call! :report, object, ids, data, context
|
13
|
+
end
|
14
|
+
|
15
|
+
# Check status on/get report by id
|
16
|
+
#
|
17
|
+
# @param id
|
18
|
+
# @return [Hash] report state, report result and format
|
19
|
+
def report_get id
|
20
|
+
call! report_get, id
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
module Kangaroo
|
2
|
+
module Util
|
3
|
+
class Proxy::Superadmin < Proxy
|
4
|
+
# Create a new database
|
5
|
+
#
|
6
|
+
# @param [String] db_name name for new database
|
7
|
+
# @param [boolean] demo preload database with demo data
|
8
|
+
# @param [String] lang default language for new database
|
9
|
+
# @param [String] password set administrator password for new database
|
10
|
+
# @return [Integer] thread id to check progress
|
11
|
+
def create db_name, demo, lang, password
|
12
|
+
call! :create, db_name, demo, lang, password
|
13
|
+
end
|
14
|
+
|
15
|
+
# Check progress on database creation. Pass the id you get
|
16
|
+
# from #create as only parameter
|
17
|
+
#
|
18
|
+
# @param id id from #create
|
19
|
+
# @return progress as float between 0.0 and 1.0
|
20
|
+
def get_progress id
|
21
|
+
call! :get_progress, id
|
22
|
+
end
|
23
|
+
|
24
|
+
# Drop a database by name
|
25
|
+
#
|
26
|
+
# @param db_name name of database to drop
|
27
|
+
def drop db_name
|
28
|
+
call! :drop, db_name
|
29
|
+
end
|
30
|
+
|
31
|
+
# Dump/Backup a database by name
|
32
|
+
#
|
33
|
+
# @param db_name name of database to backup
|
34
|
+
# @return database dump
|
35
|
+
def dump db_name
|
36
|
+
call! :dump, db_name
|
37
|
+
end
|
38
|
+
|
39
|
+
# Load/Restore a database
|
40
|
+
#
|
41
|
+
# @param db_name name of database to restore to (or create)
|
42
|
+
# @param data dump data to load into database
|
43
|
+
def restore db_name, data
|
44
|
+
call! :restore, db_name, data
|
45
|
+
end
|
46
|
+
|
47
|
+
# Rename a database
|
48
|
+
#
|
49
|
+
# @param old_name database to rename
|
50
|
+
# @param new_name new name for database
|
51
|
+
def rename old_name, new_name
|
52
|
+
call! :rename, old_name, new_name
|
53
|
+
end
|
54
|
+
|
55
|
+
# Change superadmin password
|
56
|
+
#
|
57
|
+
# @param new_password new superadmin password
|
58
|
+
# @return true
|
59
|
+
def change_admin_password new_password
|
60
|
+
call! :change_admin_password, new_password
|
61
|
+
end
|
62
|
+
|
63
|
+
# Migrate specified databases
|
64
|
+
#
|
65
|
+
# @param databases list of databases to migrate
|
66
|
+
def migrate_databases databases
|
67
|
+
call! :migrate_databases, databases
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|