rhodes-framework 1.0.0

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 (67) hide show
  1. data/.gitignore +2 -0
  2. data/History.txt +37 -0
  3. data/Manifest.txt +66 -0
  4. data/README.rdoc +2 -0
  5. data/Rakefile +50 -0
  6. data/lib/ServeME.rb +7 -0
  7. data/lib/TestServe.rb +9 -0
  8. data/lib/bsearch.rb +120 -0
  9. data/lib/builtinME.rb +626 -0
  10. data/lib/date/format.rb +1339 -0
  11. data/lib/date.rb +1792 -0
  12. data/lib/dateME.rb +24 -0
  13. data/lib/erb.rb +896 -0
  14. data/lib/find.rb +81 -0
  15. data/lib/rational.rb +19 -0
  16. data/lib/rationalME.rb +530 -0
  17. data/lib/rho/render.rb +51 -0
  18. data/lib/rho/rho.rb +255 -0
  19. data/lib/rho/rhoapplication.rb +36 -0
  20. data/lib/rho/rhocontact.rb +110 -0
  21. data/lib/rho/rhocontroller.rb +35 -0
  22. data/lib/rho/rhofsconnector.rb +32 -0
  23. data/lib/rho/rhosupport.rb +146 -0
  24. data/lib/rho/rhoviewhelpers.rb +130 -0
  25. data/lib/rho.rb +1 -0
  26. data/lib/rhodes-framework.rb +2 -0
  27. data/lib/rhodes.rb +9 -0
  28. data/lib/rhoframework.rb +38 -0
  29. data/lib/rhofsconnector.rb +1 -0
  30. data/lib/rhom/rhom.rb +58 -0
  31. data/lib/rhom/rhom_db_adapter.rb +185 -0
  32. data/lib/rhom/rhom_db_adapterME.rb +93 -0
  33. data/lib/rhom/rhom_object.rb +69 -0
  34. data/lib/rhom/rhom_object_factory.rb +309 -0
  35. data/lib/rhom/rhom_source.rb +60 -0
  36. data/lib/rhom.rb +1 -0
  37. data/lib/singleton.rb +137 -0
  38. data/lib/time.rb +489 -0
  39. data/lib/version.rb +8 -0
  40. data/res/sqlite3/constants.rb +49 -0
  41. data/res/sqlite3/database.rb +715 -0
  42. data/res/sqlite3/driver/dl/api.rb +154 -0
  43. data/res/sqlite3/driver/dl/driver.rb +307 -0
  44. data/res/sqlite3/driver/native/driver.rb +257 -0
  45. data/res/sqlite3/errors.rb +68 -0
  46. data/res/sqlite3/pragmas.rb +271 -0
  47. data/res/sqlite3/resultset.rb +176 -0
  48. data/res/sqlite3/sqlite3_api.rb +0 -0
  49. data/res/sqlite3/statement.rb +230 -0
  50. data/res/sqlite3/translator.rb +109 -0
  51. data/res/sqlite3/value.rb +57 -0
  52. data/res/sqlite3/version.rb +14 -0
  53. data/rhodes-framework.gemspec +18 -0
  54. data/rhodes.gemspec +18 -0
  55. data/spec/app_manifest.txt +4 -0
  56. data/spec/configs/account.rb +3 -0
  57. data/spec/configs/case.rb +3 -0
  58. data/spec/configs/employee.rb +3 -0
  59. data/spec/rho_controller_spec.rb +144 -0
  60. data/spec/rho_spec.rb +75 -0
  61. data/spec/rhom_object_factory_spec.rb +372 -0
  62. data/spec/rhom_spec.rb +45 -0
  63. data/spec/spec.opts +1 -0
  64. data/spec/spec_helper.rb +49 -0
  65. data/spec/stubs.rb +39 -0
  66. data/spec/syncdbtest.sqlite +0 -0
  67. metadata +202 -0
@@ -0,0 +1,130 @@
1
+ module Rho
2
+ class RhoController
3
+
4
+ def truncate(text,length)
5
+ if text
6
+ omission = '...'
7
+ l = length - omission.length
8
+ (text.length > length ? text[0...l] + omission : text).to_s
9
+ end
10
+ end
11
+
12
+ def click_to_call(phone,description=nil)
13
+ description = phone if description.nil?
14
+ return "" if phone.nil? or phone.length == 0
15
+ "<a href=\"tel:#{phone}\" target=\"_self\">#{description}</a>"
16
+ end
17
+
18
+ def mailto(address,description=nil)
19
+ description = address if description.nil?
20
+ return "" if address.nil? or address.length == 0
21
+ "<a href=\"mailto:#{address}\" target=\"_self\">#{description}</a>"
22
+ end
23
+
24
+ # Examples of how to use link_to method:
25
+ #
26
+ # link_to "Visit Other Site", "http://www.rhomobile.com/"
27
+ # ==> <a href=\"http://www.rhomobile.com/\" >Visit Other Site</a>
28
+ #
29
+ # link_to "Help", { :action => "help" }
30
+ # ==> <a href=\"/application/model/help\" >Help</a>
31
+ #
32
+ # link_to "Delete", { :action => "delete", :id => '{12}' }
33
+ # ==> <a href="/application/model/{12}/delete" onclick="var f = document.createElement('form');
34
+ # f.style.display = 'none';this.parentNode.appendChild(f); f.method = 'POST';
35
+ # f.action = this.href;f.submit();return false;">Delete</a>
36
+ #
37
+ # link_to "Show", { :action => "show", :id => '{12}'},"style=\"height:4px;width:7px;border-width:0px;\""
38
+ # ==> <a href="/application/model/{12}/show" style="height:4px;width:7px;border-width:0px;">Show</a>
39
+ #
40
+ # link_to "Delete", { :action => "delete", :id => '{12}' }, "class=\"delete_link\""
41
+ # ==> <a href="/application/model/{12}/delete" class="delete_link" onclick="var f = document.createElement('form');
42
+ # f.style.display = 'none';this.parentNode.appendChild(f); f.method = 'POST';
43
+ # f.action = this.href;f.submit();return false;\">Delete</a>"
44
+ #
45
+ # link_to "Invate",:action => :invite, :query => {:name => 'John Smith', 'address' => "http://john.smith.com"}
46
+ # ==> <a href="/application/model/invite?name=John%20Smith&address=http%3A%2F%2Fjohn.smith.com" >Invate</a>
47
+ #
48
+ def link_to(name,url_params = {},html_options = "",confirm = nil)
49
+ url = url_for(url_params)
50
+ if (url_params[:action].to_s != 'delete')
51
+ "<a href=\"#{url}\" #{html_options}>#{name || url}</a>"
52
+ else
53
+ "<a href=\"#{url}\" #{html_options} onclick=\""+ #if (confirm('#{confirm}')) {
54
+ "var f = document.createElement('form'); f.style.display = 'none';" +
55
+ "this.parentNode.appendChild(f); f.method = 'POST'; f.action = this.href;f.submit();"+
56
+ "return false;\">#{name || url}</a>"
57
+ end
58
+ end
59
+
60
+ # Examples of how to use url_for method:
61
+ #
62
+ # url_for '/some_url'
63
+ # ==> /some_url
64
+ #
65
+ # When generating a new URL, missing values may be filled in from the current request's parameters.
66
+ # For example, if application name or model are not specifyed in the call parameters, they would be filled from the request.
67
+ #
68
+ # url_for :action => :index
69
+ # ==> /application/model
70
+ #
71
+ # url_for :action => :create
72
+ # ==> /application/model
73
+ #
74
+ # url_for :action => :new
75
+ # ==> /application/model/new
76
+ #
77
+ # url_for :action => :show, :id => '{12}'
78
+ # ==> /application/model/{12}/show
79
+ #
80
+ # url_for :model => :another_model, :action => :show, :id => '{12}'
81
+ # ==> /application/another_model/{12}/show
82
+ #
83
+ # url_for :controller => :another_controller, :action => :show, :id => '{12}'
84
+ # ==> /application/another_controller/{12}/show
85
+ #
86
+ # url_for :application => :another_app, :model => :another_model, :action => :show, :id => '{12}'
87
+ # ==> /another_app/another_model/{12}/show
88
+ #
89
+ # url_for :action => :create, :query => {:name => 'John Smith', 'address' => "http://john.smith.com"}
90
+ # ==> /application/model?name=John%20Smith&address=http%3A%2F%2Fjohn.smith.com
91
+ #
92
+ # url_for :action => :show, :id => '{12}', :fragment => "an-anchor"
93
+ # ==> /application/model/{12}/show#an-anchor
94
+ #
95
+ def url_for(params = {})
96
+ return params.to_s if params.is_a? String or params.is_a? Symbol
97
+ return '/' if not params.is_a? Hash or params.nil?
98
+
99
+ application = params[:application] || @request['application']
100
+ model = params[:controller] || params[:model] || @request['model']
101
+ action = params[:action].nil? ? nil : params[:action].to_s
102
+ id = params[:id].nil? ? nil : params[:id].to_s
103
+ query = query_to_s(params[:query])
104
+ fragment = params[:fragment].nil? ? '' : '#' + params[:fragment]
105
+
106
+ amurl = '/' + application.to_s + '/' + model.to_s
107
+
108
+ return amurl + query + fragment if action.nil? or action == 'create' or action == 'index'
109
+ return amurl +'/'+ (id.nil? ? action : id + '/' + action) + query + fragment
110
+ end
111
+
112
+ private
113
+ def query_to_s(query)
114
+ return '' if query.nil?
115
+ qstring = '?'
116
+ query.each do |key,value|
117
+ qstring += '&' if qstring.length > 1
118
+ qstring += Rho::RhoSupport.url_encode(key.to_s) + '=' + Rho::RhoSupport.url_encode(value.to_s)
119
+ end
120
+ qstring
121
+ end
122
+
123
+ # def url_encode(s)
124
+ # s.to_s.dup.force_encoding("ASCII-8BIT").gsub(/[^a-zA-Z0-9_\-.]/n) {
125
+ # sprintf("%%%02X", $&.unpack("C")[0])
126
+ # }
127
+ # end
128
+
129
+ end # RhoController
130
+ end # Rho
data/lib/rho.rb ADDED
@@ -0,0 +1 @@
1
+ require 'rho/rho'
@@ -0,0 +1,2 @@
1
+ require 'version.rb'
2
+ $rhodeslib = File.dirname(__FILE__)
data/lib/rhodes.rb ADDED
@@ -0,0 +1,9 @@
1
+ module Rhodes
2
+ unless defined? Rhodes::VERSION
3
+ VERSION = '1.0.0'
4
+ end
5
+ unless defined? Rhodes::DBVERSION
6
+ DBVERSION = '1.0.0'
7
+ end
8
+
9
+ end
@@ -0,0 +1,38 @@
1
+ begin
2
+ require 'rational'
3
+ require 'date/format'
4
+ require 'time'
5
+
6
+ require 'sqlite3/constants'
7
+ require 'sqlite3/errors'
8
+ require 'sqlite3/pragmas'
9
+
10
+ require 'sqlite3/resultset'
11
+ require 'sqlite3/statement'
12
+
13
+ require 'date'
14
+ require 'sqlite3/translator'
15
+
16
+ require 'sqlite3/value'
17
+
18
+ require 'sqlite3/database'
19
+ require 'rhom/rhom_db_adapter'
20
+
21
+ require 'rhom/rhom_object'
22
+ require 'rhofsconnector'
23
+
24
+ require 'rhom/rhom_object_factory'
25
+
26
+ require 'rhom/rhom'
27
+ require 'rhom'
28
+
29
+ require 'rho/rhoapplication'
30
+
31
+ require 'rho/rho'
32
+ require 'rho'
33
+
34
+ puts 'RHO loaded'
35
+ Rho::RHO.new
36
+ rescue Exception => e
37
+ puts e.message
38
+ end
@@ -0,0 +1 @@
1
+ require 'rho/rhofsconnector.rb'
data/lib/rhom/rhom.rb ADDED
@@ -0,0 +1,58 @@
1
+ #
2
+ # rhom.rb
3
+ # rhodes
4
+ # This module represents the rhodes mini OM
5
+ #
6
+ # Copyright (C) 2008 Rhomobile, Inc. All rights reserved.
7
+ #
8
+ # This program is free software: you can redistribute it and/or modify
9
+ # it under the terms of the GNU General Public License as published by
10
+ # the Free Software Foundation, either version 3 of the License, or
11
+ # (at your option) any later version.
12
+ #
13
+ # This program is distributed in the hope that it will be useful,
14
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
+ # GNU General Public License for more details.
17
+ #
18
+ # You should have received a copy of the GNU General Public License
19
+ # along with this program. If not, see <http://www.gnu.org/licenses/>.
20
+ #
21
+
22
+ require 'rhom/rhom_object_factory'
23
+ require 'rhom/rhom_object'
24
+ if defined? RHO_ME
25
+ require 'rhom/rhom_db_adapterME'
26
+ else
27
+ require 'rhom/rhom_db_adapter'
28
+ end
29
+
30
+ module Rhom
31
+ TABLE_NAME = 'object_values'
32
+
33
+ class Rhom
34
+ include RhomObject
35
+ attr_accessor :factory
36
+
37
+ def initialize
38
+ @factory = RhomObjectFactory.new
39
+ end
40
+
41
+ class << Rhom
42
+ def client_id
43
+ c_id = ::Rhom::RhomDbAdapter::select_from_table('client_info','client_id')[0]
44
+ c_id.nil? ? nil : c_id['client_id']
45
+ end
46
+
47
+ def database_full_reset
48
+ ::Rhom::RhomDbAdapter::delete_all_from_table(TABLE_NAME)
49
+ ::Rhom::RhomDbAdapter::delete_all_from_table('client_info')
50
+ end
51
+
52
+ def database_full_reset_and_logout
53
+ database_full_reset
54
+ SyncEngine::logout
55
+ end
56
+ end #class methods
57
+ end # Rhom
58
+ end # Rhom
@@ -0,0 +1,185 @@
1
+ #
2
+ # rhom_db_adapter.rb
3
+ # rhodes
4
+ #
5
+ # Copyright (C) 2008 Rhomobile, Inc. All rights reserved.
6
+ #
7
+ # This program is free software: you can redistribute it and/or modify
8
+ # it under the terms of the GNU General Public License as published by
9
+ # the Free Software Foundation, either version 3 of the License, or
10
+ # (at your option) any later version.
11
+ #
12
+ # This program is distributed in the hope that it will be useful,
13
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
+ # GNU General Public License for more details.
16
+ #
17
+ # You should have received a copy of the GNU General Public License
18
+ # along with this program. If not, see <http://www.gnu.org/licenses/>.
19
+ #
20
+ #$:.unshift(File.join(File.dirname(__FILE__), '../../'))
21
+ require 'sqlite3/database'
22
+
23
+ module Rhom
24
+ class RhomDbAdapter
25
+
26
+ @@database = nil
27
+
28
+ class << self
29
+
30
+ # maintains a single database connection
31
+ def open(dbfile=nil)
32
+ #puts "DB name = " + dbfile.inspect
33
+ unless @@database or dbfile.nil?
34
+ @@database = SQLite3::Database.new(dbfile)
35
+ end
36
+ end
37
+
38
+ # closes the database if and only if it is open
39
+ def close
40
+ if @@database and not @@database.closed?
41
+ @@database.close
42
+ @@database = nil
43
+ else
44
+ return false
45
+ end
46
+ return true
47
+ end
48
+
49
+ # execute a sql statement
50
+ # optionally, disable the factory processing
51
+ # which returns the result array directly
52
+ def execute_sql(sql=nil)
53
+ result = []
54
+ if sql
55
+ #puts 'query is ' + sql
56
+ # Make sure we lock the sync engine's mutex
57
+ # before we perform a database transaction.
58
+ # This prevents concurrency issues.
59
+ begin
60
+ SyncEngine::lock_sync_mutex
61
+ # execute sql statement inside of transaction
62
+ # result is returned as an array of hashes
63
+ @@database.transaction unless @@database.transaction_active?
64
+ @@database.results_as_hash = true
65
+ result = @@database.execute sql
66
+ @@database.commit
67
+ SyncEngine::unlock_sync_mutex
68
+ rescue Exception => e
69
+ puts "exception when running query: #{e}"
70
+ # make sure we unlock even if there's an error!
71
+ SyncEngine::unlock_sync_mutex
72
+ end
73
+ end
74
+ #puts "returned #{result.length.to_s} records..."
75
+ result
76
+ end
77
+
78
+ # generates where clause based on hash
79
+ def where_str(condition)
80
+ cond = string_from_key_vals(condition," and")
81
+ cond[0..cond.length - 5]
82
+ end
83
+
84
+ # generates value clause based on hash
85
+ def vals_str(values)
86
+ vals = string_from_key_vals(values, ",")
87
+ vals[0..vals.length - 2]
88
+ end
89
+
90
+ # generates key/value list
91
+ def string_from_key_vals(values, delim)
92
+ vals = ""
93
+ values.each do |key,value|
94
+ val = value.is_a?(String) ? "'#{value}'" : "#{value}"
95
+ vals << " #{key} = #{val}#{delim}"
96
+ end
97
+ vals
98
+ end
99
+
100
+ # support for select statements
101
+ # this function takes table name, columns (as a comma-separated list),
102
+ # condition (as a hash), and params (as a hash)
103
+ # example usage is the following:
104
+ # select_from_table('object_values', '*', {"source_id"=>2,"update_type"=>'query'},
105
+ # {"order by"=>'object'})
106
+ # this would return all columns where source_id = 2 and update_type = 'query' ordered
107
+ # by the "object" column
108
+ def select_from_table(table=nil,columns=nil,condition=nil,params=nil)
109
+ query = nil
110
+ if table and columns and condition
111
+ if params and params['distinct']
112
+ query = "select distinct #{columns} from #{table} where #{where_str(condition)}"
113
+ elsif params and params['order by']
114
+ query = "select #{columns} from #{table} where #{where_str(condition)} \
115
+ order by #{params['order by']}"
116
+ else
117
+ query = "select #{columns} from #{table} where #{where_str(condition)}"
118
+ end
119
+ elsif table and columns
120
+ query = "select #{columns} from #{table}"
121
+ end
122
+ execute_sql query
123
+ end
124
+
125
+ # inserts a single row into the database
126
+ # takes the table name and values (hash) as arguments
127
+ # exmaple usage is the following:
128
+ # insert_into_table('object_values, {"source_id"=>1,"object"=>"some-object","update_type"=>'delete'})
129
+ # this would execute the following sql:
130
+ # insert into object_values (source_id,object,update_type) values (1,'some-object','delete');
131
+ def insert_into_table(table=nil,values=nil)
132
+ query = nil
133
+ cols = ""
134
+ vals = ""
135
+ if table and values
136
+ values.each do |key,val|
137
+ value = val.is_a?(Fixnum) ? "#{val}," : "'#{val}',"
138
+ cols << "#{key},"
139
+ vals << value
140
+ end
141
+ cols = cols[0..cols.length - 2]
142
+ vals = vals[0..vals.length - 2]
143
+ query = "insert into #{table} (#{cols}) values (#{vals})"
144
+ end
145
+ execute_sql query
146
+ end
147
+
148
+ # deletes rows from a table which satisfy condition (hash)
149
+ # example usage is the following:
150
+ # delete_from_table('object_values',{"object"=>"some-object"})
151
+ # this would execute the following sql:
152
+ # delete from object_values where object="some-object"
153
+ def delete_from_table(table=nil,condition=nil)
154
+ query = nil
155
+ if table and condition
156
+ query = "delete from #{table} where #{where_str(condition)}"
157
+ end
158
+ execute_sql query
159
+ end
160
+
161
+ # deletes all rows from a given table
162
+ def delete_all_from_table(table=nil)
163
+ query = nil
164
+ if table
165
+ query = "delete from #{table}"
166
+ end
167
+ execute_sql query
168
+ end
169
+
170
+ # updates values (hash) in a given table which satisfy condition (hash)
171
+ # example usage is the following:
172
+ # update_into_table('object_values',{"value"=>"Electronics"},{"object"=>"some-object", "attrib"=>"industry"})
173
+ # this executes the following sql:
174
+ # update table object_values set value='Electronics' where object='some-object' and attrib='industry';
175
+ def update_into_table(table=nil,values=nil,condition=nil)
176
+ query = nil
177
+ vals = values.nil? ? nil : vals_str(values)
178
+ if table and condition and vals
179
+ query = "update #{table} set #{vals} where #{where_str(condition)}"
180
+ end
181
+ execute_sql query
182
+ end
183
+ end # class methods
184
+ end # RhomDbAdapter
185
+ end # Rhom
@@ -0,0 +1,93 @@
1
+ #
2
+ # rhom_db_adapter.rb
3
+ # rhodes
4
+ #
5
+ # Copyright (C) 2008 Rhomobile, Inc. All rights reserved.
6
+ #
7
+ # This program is free software: you can redistribute it and/or modify
8
+ # it under the terms of the GNU General Public License as published by
9
+ # the Free Software Foundation, either version 3 of the License, or
10
+ # (at your option) any later version.
11
+ #
12
+ # This program is distributed in the hope that it will be useful,
13
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
+ # GNU General Public License for more details.
16
+ #
17
+ # You should have received a copy of the GNU General Public License
18
+ # along with this program. If not, see <http://www.gnu.org/licenses/>.
19
+ #
20
+ require 'rhodes'
21
+
22
+ module Rhom
23
+ class RhomDbAdapter
24
+
25
+ @@database = nil
26
+
27
+ class << self
28
+ def open(dbfile=nil)
29
+ puts "DB name = " + dbfile.inspect
30
+ unless @@database or dbfile.nil?
31
+ db = DbAdapter.new(Rhodes::DBVERSION)
32
+ @@database = db
33
+ end
34
+
35
+ end
36
+
37
+ def close
38
+ if @@database and not @@database.closed?
39
+ @@database.close
40
+ @@database = nil
41
+ else
42
+ return false
43
+ end
44
+ return true
45
+ end
46
+
47
+ # execute a sql statement
48
+ # optionally, disable the factory processing
49
+ # which returns the result array directly
50
+ def execute_sql
51
+ result = []
52
+ # Make sure we lock the sync engine's mutex
53
+ # before we perform a database transaction.
54
+ # This prevents concurrency issues.
55
+ begin
56
+ SyncEngine::lock_sync_mutex
57
+ result = yield
58
+ SyncEngine::unlock_sync_mutex
59
+ rescue Exception => e
60
+ puts "exception when running query: #{e}"
61
+ # make sure we unlock even if there's an error!
62
+ SyncEngine::unlock_sync_mutex
63
+ end
64
+ puts "returned #{result.length.to_s} records..."
65
+ result
66
+ end
67
+
68
+ def select_from_table(table=nil,columns=nil,condition=nil,params=nil)
69
+ execute_sql { @@database.selectFromTable(table, columns, condition, params) }
70
+ end
71
+
72
+ def insert_into_table(table=nil,values=nil)
73
+ execute_sql { @@database.insertIntoTable(table, values) }
74
+ end
75
+
76
+ def delete_from_table(table=nil,condition=nil)
77
+ execute_sql { @@database.deleteFromTable(table, condition) }
78
+ end
79
+
80
+ def delete_all_from_table(table=nil)
81
+ execute_sql { @@database.deleteAllFromTable(table) }
82
+ end
83
+
84
+ def update_into_table(table=nil,values=nil,condition=nil)
85
+ execute_sql { @@database.updateIntoTable(table, values, condition) }
86
+ end
87
+ end # class methods
88
+ end # RhomDbAdapter
89
+ end # Rhom
90
+
91
+ at_exit do
92
+ Rhom::RhomDbAdapter::close
93
+ end
@@ -0,0 +1,69 @@
1
+ #
2
+ # rhom_object.rb
3
+ # rhodes
4
+ #
5
+ # Copyright (C) 2008 Rhomobile, Inc. All rights reserved.
6
+ #
7
+ # This program is free software: you can redistribute it and/or modify
8
+ # it under the terms of the GNU General Public License as published by
9
+ # the Free Software Foundation, either version 3 of the License, or
10
+ # (at your option) any later version.
11
+ #
12
+ # This program is distributed in the hope that it will be useful,
13
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
+ # GNU General Public License for more details.
16
+ #
17
+ # You should have received a copy of the GNU General Public License
18
+ # along with this program. If not, see <http://www.gnu.org/licenses/>.
19
+ #
20
+ module Rhom
21
+ module RhomObject
22
+ # defines a method at runtime for the
23
+ # dynamically created class
24
+
25
+
26
+ # we override method_missing here so that instance variables,
27
+ # when retrieved or set, are added to the object
28
+ def method_missing(name, *args)
29
+ unless name == Fixnum
30
+ varname = name.to_s.gsub(/=/,"")
31
+ setting = (name.to_s =~ /=/)
32
+ inst_var = nil
33
+
34
+ if setting
35
+ inst_var = instance_variable_set( "@#{varname}", args[0] )
36
+ else
37
+ inst_var = instance_variable_get( "@#{varname}" )
38
+ end
39
+
40
+ inst_var
41
+ end
42
+ end
43
+
44
+ def remove_var(name)
45
+ remove_instance_variable("@#{name}")
46
+ end
47
+
48
+ def strip_braces(str=nil)
49
+ str ? str.gsub(/\{/,"").gsub(/\}/,"") : nil
50
+ end
51
+
52
+ # use djb hash function to generate temp object id
53
+ def djb_hash(str, len)
54
+ hash = 5381
55
+ for i in (0..len)
56
+ hash = ((hash << 5) + hash) + str[i].to_i
57
+ end
58
+ return hash
59
+ end
60
+
61
+ def extract_options(arr=[])
62
+ arr.last.is_a?(::Hash) ? arr.pop : {}
63
+ end
64
+
65
+ def method_name_reserved?(method)
66
+ method =~ /\bobject\b|\bsource_id\b|\bupdate_type\b|\battrib_type\b|\btype\b|\bset_notification\b|\bclear_notification\b/
67
+ end
68
+ end # RhomObject
69
+ end # Rhom