rhodes 0.2.3 → 0.2.4

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/History.txt CHANGED
@@ -1,3 +1,7 @@
1
+ == 0.2.4 2009-01-27
2
+ * added show.erb to model generator [#164]
3
+ * base source_adapter should include user_id on sync
4
+
1
5
  == 0.2.3 2009-01-26
2
6
  * added newgem dependency
3
7
 
data/Manifest.txt CHANGED
@@ -13,12 +13,14 @@ generators/templates/model/controller.rb
13
13
  generators/templates/model/edit.erb
14
14
  generators/templates/model/index.erb
15
15
  generators/templates/model/new.erb
16
+ generators/templates/model/show.erb
16
17
  generators/templates/source/source_adapter.rb
17
18
  lib/ServeME.rb
18
19
  lib/TestServe.rb
19
20
  lib/builtinME.rb
20
21
  lib/date.rb
21
22
  lib/date/format.rb
23
+ lib/dateME.rb
22
24
  lib/erb.rb
23
25
  lib/find.rb
24
26
  lib/rational.rb
data/generators/rhogen.rb CHANGED
@@ -10,13 +10,13 @@ module Rhogen
10
10
  DESC
11
11
 
12
12
  class BaseGenerator < Templater::Generator
13
- def class_name
14
- name.gsub('-', '_').camel_case
15
- end
16
-
17
- alias_method :module_name, :class_name
13
+ def class_name
14
+ name.gsub('-', '_').camel_case
18
15
  end
19
16
 
17
+ alias_method :module_name, :class_name
18
+ end
19
+
20
20
  class AppGenerator < BaseGenerator
21
21
 
22
22
  def self.source_root
@@ -34,17 +34,17 @@ module Rhogen
34
34
 
35
35
  template :application do |template|
36
36
  template.source = 'application.rb'
37
- template.destination = "#{name}/application.rb"
37
+ template.destination = "#{name.camel_case}/application.rb"
38
38
  end
39
39
 
40
40
  template :index do |template|
41
41
  template.source = 'index.erb'
42
- template.destination = "#{name}/index.erb"
42
+ template.destination = "#{name.camel_case}/index.erb"
43
43
  end
44
44
 
45
45
  template :layout do |template|
46
46
  template.source = 'layout.erb'
47
- template.destination = "#{name}/layout.erb"
47
+ template.destination = "#{name.camel_case}/layout.erb"
48
48
  end
49
49
 
50
50
  end
@@ -86,6 +86,11 @@ module Rhogen
86
86
  template.source = 'new.erb'
87
87
  template.destination = "#{name.camel_case}/new.erb"
88
88
  end
89
+
90
+ template :new do |template|
91
+ template.source = 'show.erb'
92
+ template.destination = "#{name.camel_case}/show.erb"
93
+ end
89
94
 
90
95
  template :controller do |template|
91
96
  template.source = 'controller.rb'
@@ -10,7 +10,8 @@ class <%= class_name %>Controller < Rho::RhoController
10
10
 
11
11
  # GET /<%= class_name %>/1
12
12
  def show
13
- @<%= name.pluralize %> = <%= class_name %>.find(@params['object'])
13
+ @<%= name %> = <%= class_name %>.find(@params['id'])
14
+ render :action => :show
14
15
  end
15
16
 
16
17
  # GET /<%= class_name %>/new
@@ -1,7 +1,7 @@
1
1
  <ul id="<%= name.pluralize %>" title="<%= class_name.pluralize %>">
2
2
  <%%@<%=name.pluralize%>.each do |x|%>
3
3
  <%if self.attributes?%>
4
- <li><%%=link_to "#{x.<%=attributes[0]%>}", "edit", x.object%></li>
4
+ <li><%%=link_to "#{x.<%=attributes[0]%>}", "show", x.object%></li>
5
5
  <%else%>
6
6
  <li>Some list entry...</li>
7
7
  <%end%>
@@ -0,0 +1,6 @@
1
+ <ul id="<%= name %>" title="Show <%= class_name %>">
2
+ <% attributes.each do |attribute| %>
3
+ <li><%%=@<%=name%>.<%=attribute%>%></li>
4
+ <% end %>
5
+ <li><%%=link_to "Edit #{@<%=name%>.<%=attributes[0]%>}", "edit", @<%=name%>.object%></li>
6
+ </ul>
@@ -24,6 +24,7 @@ class <%=name%> < SourceAdapter
24
24
  o.object=x['id']
25
25
  o.attrib=y.name
26
26
  o.value=y.value
27
+ o.user_id=user_id if user_id
27
28
  o.save
28
29
  end
29
30
  end
data/lib/builtinME.rb CHANGED
@@ -59,9 +59,9 @@ module Kernel
59
59
  end
60
60
 
61
61
  class Object
62
- def to_a
63
- [self]
64
- end
62
+ # def to_a
63
+ # [self]
64
+ # end
65
65
 
66
66
  alias type :class
67
67
 
@@ -76,6 +76,14 @@ module Enumerable
76
76
  each {|x| yield x, i; i = i + 1}
77
77
  end
78
78
 
79
+ def to_a
80
+ arr = []
81
+ each{|obj| arr <<obj}
82
+ return arr
83
+ end
84
+
85
+ alias entries :to_a
86
+
79
87
  def inject(*args)
80
88
  if args.size == 0 then
81
89
  vals = to_a
@@ -128,9 +136,9 @@ class Array
128
136
  a
129
137
  end
130
138
 
131
- def to_a
132
- self
133
- end
139
+ # def to_a
140
+ # self
141
+ # end
134
142
 
135
143
  def join(sepString="")
136
144
  return to_s if sepString.nil? || sepString == ""
@@ -215,6 +223,17 @@ class Hash
215
223
 
216
224
  alias each_pair each
217
225
 
226
+ def to_a
227
+ res = []
228
+ each_pair do |k, v|
229
+ item = []
230
+ item << k
231
+ item << v
232
+ res << item
233
+ end
234
+ res
235
+ end
236
+
218
237
  def inspect
219
238
  r = '{'
220
239
  is_first = true
data/lib/dateME.rb ADDED
@@ -0,0 +1,24 @@
1
+ require 'date/format'
2
+
3
+ class Time
4
+
5
+ def strftime(fmt='%F')
6
+ DateTimeME.new(self).strftime(fmt);
7
+ end
8
+ end
9
+
10
+ class DateTimeME < Date
11
+
12
+ def wday() @m_time.wday end
13
+ def mon() @m_time.mon end
14
+ def year() @m_time.year end
15
+ def mday() @m_time.mday end
16
+ def hour() @m_time.hour end
17
+ def min() @m_time.min end
18
+ def sec() @m_time.sec end
19
+
20
+ def initialize( time )
21
+ @m_time = time
22
+ end
23
+
24
+ end
@@ -20,7 +20,7 @@ module Rho
20
20
  def create!(properties)
21
21
  pb = Phonebook::openPhonebook
22
22
  unless pb.nil?
23
- record = Phonebook::createRecord
23
+ record = Phonebook::createRecord(pb)
24
24
  if record.nil?
25
25
  puts "Can't find record " + properties['id']
26
26
  else
data/lib/rhodes.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  module Rhodes
2
2
  unless defined? Rhodes::VERSION
3
- VERSION = '0.2.3'
3
+ VERSION = '0.2.4'
4
4
  end
5
5
  unless defined? Rhodes::DBVERSION
6
6
  DBVERSION = '0.2.2'
@@ -52,7 +52,7 @@ module Rhom
52
52
  def execute_sql(sql=nil)
53
53
  result = []
54
54
  if sql
55
- puts 'query is ' + sql
55
+ #puts 'query is ' + sql
56
56
  # Make sure we lock the sync engine's mutex
57
57
  # before we perform a database transaction.
58
58
  # This prevents concurrency issues.
@@ -71,7 +71,7 @@ module Rhom
71
71
  SyncEngine::unlock_sync_mutex
72
72
  end
73
73
  end
74
- puts "returned #{result.length.to_s} records..."
74
+ #puts "returned #{result.length.to_s} records..."
75
75
  result
76
76
  end
77
77
 
@@ -36,6 +36,10 @@ module Rhom
36
36
  end
37
37
  end
38
38
  end
39
+
40
+ def remove_var(name)
41
+ remove_instance_variable("@#{name}")
42
+ end
39
43
 
40
44
  def strip_braces(str=nil)
41
45
  str ? str.gsub(/\{/,"").gsub(/\}/,"") : nil
@@ -49,5 +53,9 @@ module Rhom
49
53
  end
50
54
  return hash
51
55
  end
56
+
57
+ def method_name_reserved?(method)
58
+ method =~ /object|source_id|update_type|type/
59
+ end
52
60
  end # RhomObject
53
61
  end # Rhom
@@ -76,22 +76,47 @@ module Rhom
76
76
  def get_source_id
77
77
  Rho::RhoConfig::sources[self.name.to_s]['source_id'].to_s
78
78
  end
79
+
79
80
  # retrieve a single record if object id provided, otherwise return
80
81
  # full list corresponding to factory's source id
81
82
  def find(*args)
82
83
  list = []
84
+ hash_list = {}
85
+ conditions = {}
86
+ attrib_length = 0
87
+ source = Rho::RhoConfig::sources[self.name.to_s]
88
+ attrib_length = source['attribs'].length if source
89
+ # source attributes are not initialized, try again
90
+ ::Rhom::RhomObjectFactory::init_source_attribs if attrib_length == 0
91
+
92
+ # first find all query objects
83
93
  if args.first == :all
84
- result = ::Rhom::RhomDbAdapter::select_from_table(::Rhom::TABLE_NAME,
85
- '*',
86
- {"source_id"=>get_source_id,"update_type"=>'query'},
87
- {"order by"=>'object'})
94
+ conditions = {"source_id"=>get_source_id}
88
95
  else
89
- obj = strip_braces(args.first.to_s)
90
- result = ::Rhom::RhomDbAdapter::select_from_table(::Rhom::TABLE_NAME,
91
- '*',
92
- {"object"=>obj,"update_type"=>'query'})
96
+ conditions = {"object"=>strip_braces(args.first.to_s)}
97
+ end
98
+
99
+ # process query, create, and update lists in order
100
+ ["query", "create", "update"].each do |update_type|
101
+ conditions.merge!({"update_type"=>update_type})
102
+ objs = ::Rhom::RhomDbAdapter::select_from_table(::Rhom::TABLE_NAME, '*', conditions,
103
+ {"order by"=>'object'})
104
+ objs.collect! do |obj|
105
+ object = obj['object']
106
+ attrib = obj['attrib']
107
+ value = obj['value']
108
+ hash_list[object] = get_new_obj(obj) if not hash_list[object]
109
+ if not method_name_reserved?(attrib) and hash_list[object].send attrib.to_sym
110
+ hash_list[object].remove_var(attrib)
111
+ end
112
+ hash_list[object].send attrib.to_sym, value if not method_name_reserved?(attrib)
113
+ nil # remove the element from the array
114
+ end
93
115
  end
94
- list = get_list(result)
116
+
117
+ # convert hash to array
118
+ list = hash_list.values
119
+ hash_list = nil
95
120
  if list.length == 1 and args.first != :all
96
121
  return list[0]
97
122
  end
@@ -101,54 +126,12 @@ module Rhom
101
126
  def find_by(*args)
102
127
  # TODO: implement
103
128
  end
104
-
105
- # returns an array of objects based on an existing array
106
- def get_list(objs)
107
- new_list = []
108
- attrib_length = 0
109
- source = Rho::RhoConfig::sources[self.name.to_s]
110
- if source
111
- attrib_length = source['attribs'].length
112
- end
113
- if attrib_length == 0
114
- # source attributes are not initialized, try again
115
- ::Rhom::RhomObjectFactory::init_source_attribs
116
- end
117
- if objs and source and attrib_length > 0
118
- list_length = 0
119
- list_length = (objs.length / attrib_length) unless attrib_length == 0
120
- new_obj = nil
121
- # iterate over the array and determine object
122
- # structure based on attribute/value pairs
123
- list_length.times do |i|
124
- new_obj = get_new_obj(objs[i*attrib_length])
125
- attrib_length.times do |j|
126
- # setup index and assign accessors
127
- idx = i*attrib_length+j
128
- begin
129
- # only update attributes if they belong
130
- # to the current object
131
- if objs[idx]['object'] == strip_braces((new_obj.send 'object'.to_sym))
132
- attrib = objs[idx]['attrib'].to_s
133
- value = objs[idx]['value'].to_s
134
- new_obj.send attrib.to_sym, value
135
- end
136
- rescue
137
- puts "failed to reference objs[#{idx}]..."
138
- end
139
- end
140
- new_list << new_obj
141
- end
142
- end
143
- new_list
144
- end
145
129
 
130
+ private
146
131
  # returns new model instance with a temp object id
147
132
  def get_new_obj(obj, type='query')
148
133
  tmp_obj = self.new
149
134
  tmp_obj.send 'object'.to_sym, "{#{obj['object'].to_s}}"
150
- tmp_obj.send 'source_id'.to_sym, get_source_id
151
- tmp_obj.send 'update_type'.to_sym, type
152
135
  tmp_obj
153
136
  end
154
137
  end #class methods
@@ -190,15 +173,6 @@ module Rhom
190
173
  "update_type"=>'create'})
191
174
  end
192
175
  end
193
- # Create a temporary query record to display in the list
194
- Rho::RhoConfig::sources[self.class.name.to_s]['attribs'].each do |attrib|
195
- result = ::Rhom::RhomDbAdapter::insert_into_table(::Rhom::TABLE_NAME,
196
- {"source_id"=>self.get_inst_source_id,
197
- "object"=>obj,
198
- "attrib"=>attrib['attrib'],
199
- "value"=>self.send(attrib['attrib'].to_sym),
200
- "update_type"=>'query'})
201
- end
202
176
  result
203
177
  end
204
178
 
@@ -236,10 +210,6 @@ module Rhom
236
210
  def inst_strip_braces(str=nil)
237
211
  str ? str.gsub(/\{/,"").gsub(/\}/,"") : nil
238
212
  end
239
-
240
- def method_name_reserved?(method)
241
- method =~ /object|source_id|update_type/
242
- end
243
213
  end)
244
214
  end
245
215
  end
@@ -3,6 +3,7 @@ require 'rhom/rhom_object'
3
3
 
4
4
  module Rhom
5
5
  class RhomSource
6
+ include RhomObject
6
7
  attr_accessor :source_url
7
8
  attr_reader :source_id, :name, :last_updated, :last_inserted_size,
8
9
  :last_deleted_size, :last_sync_duration,
@@ -1,3 +1,3 @@
1
1
  require 'rho'
2
2
 
3
- Rho::RhoConfig::add_source("Account", {"url"=>"http://rhosync.rhohub.com/sources/1", "source_id"=>1})
3
+ Rho::RhoConfig::add_source("Account", {"url"=>"http://rhosyncdev.rhohub.com/sources/1", "source_id"=>1})
data/spec/configs/case.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  require 'rho'
2
2
 
3
- Rho::RhoConfig::add_source("Case", {"url"=>"http://rhosync.rhohub.com/sources/2", "source_id"=>2})
3
+ Rho::RhoConfig::add_source("Case", {"url"=>"http://rhosyncdev.rhohub.com/sources/2", "source_id"=>2})
@@ -1,3 +1,3 @@
1
1
  require 'rho'
2
2
 
3
- Rho::RhoConfig::add_source("Employee", {"url"=>"http://rhosync.rhohub.com/sources/3", "source_id"=>3})
3
+ Rho::RhoConfig::add_source("Employee", {"url"=>"http://rhosyncdev.rhohub.com/sources/3", "source_id"=>3})
@@ -24,7 +24,7 @@ describe Rhogen::ModelGenerator do
24
24
  end
25
25
 
26
26
  it "should create config.rb, controller.rb, index.erb, edit.erb, and new.erb files" do
27
- ['config.rb', 'controller.rb', 'index.erb', 'edit.erb', 'new.erb'].each do |template|
27
+ ['config.rb', 'controller.rb', 'index.erb', 'edit.erb', 'new.erb', 'show.erb'].each do |template|
28
28
  @generator.should create("/tmp/#{model_name.camel_case}/#{template}")
29
29
  end
30
30
  end
@@ -34,6 +34,7 @@ describe "RhomObjectFactory" do
34
34
  it "should set source_id attributes" do
35
35
  "1".should == Account.get_source_id
36
36
  "2".should == Case.get_source_id
37
+ "3".should == Employee.get_source_id
37
38
  end
38
39
 
39
40
  it "should dynamically assign values" do
@@ -50,30 +51,26 @@ describe "RhomObjectFactory" do
50
51
 
51
52
  it "should retrieve Case models" do
52
53
  results = Case.find(:all)
53
- #array_print(results)
54
- results.length.should == 5
55
- "60".should == results[0].case_number
56
- "hire another engineer".should == results[4].name
54
+ results.length.should == 7
55
+ results[0].case_number.should == "57"
56
+ results[4].name.should == "implement SugarCRM sample app"
57
57
  end
58
58
 
59
59
  it "should retrieve Account models" do
60
60
  results = Account.find(:all)
61
61
  results.length.should == 5
62
- #array_print(results)
63
-
64
- "Mobio India".should == results[0].name
65
- "Technology".should == results[0].industry
66
- "Aeroprise".should == results[1].name
67
- "Technology".should == results[1].industry
68
- "Electronics".should == results[4].industry
69
- "Mirapath".should == results[4].name
62
+ results[0].name.should == "vSpring"
63
+ results[0].industry.should == "Finance"
64
+ results[1].name.should == "Rhomobile"
65
+ results[1].industry.should == "Technology"
66
+ results[4].industry.should == "Technology"
67
+ results[4].name.should == "Mobio India"
70
68
  end
71
69
 
72
70
  it "should have correct number of attributes" do
73
71
  @account = Account.find(:all).first
74
-
75
- # expecting name, industry, update_type, object, source_id
76
- @account.instance_variables.size.should == 5
72
+
73
+ @account.instance_variables.size.should == 36
77
74
  end
78
75
 
79
76
  it "should calculate same djb_hash" do
@@ -99,38 +96,28 @@ describe "RhomObjectFactory" do
99
96
  destroy_id = @account.object
100
97
  @account.destroy
101
98
  @account_nil = Account.find(destroy_id)
102
-
103
99
  @account_nil.size.should == 0
104
100
  new_count = Account.find(:all).size
105
-
106
101
  (count - 1).should == new_count
107
102
  end
108
103
 
109
104
  it "should partially update a record" do
110
- pending "due to bug #128 this fails"
111
- =begin
112
105
  new_attributes = {"name"=>"Mobio US"}
113
- @account = Account.find(:all).first
106
+ @account = Account.find("44e804f2-4933-4e20-271c-48fcecd9450d")
114
107
  @account.update_attributes(new_attributes)
115
-
116
- @new_acct = Account.find(:all).first
117
-
118
- "Mobio US".should == @new_acct.name
119
- "Technology".should == @new_acct.industry
120
- =end
108
+ @new_acct = Account.find("44e804f2-4933-4e20-271c-48fcecd9450d")
109
+ @new_acct.name.should == "Mobio US"
110
+ @new_acct.industry.should == "Technology"
121
111
  end
122
112
 
123
113
  it "should fully update a record" do
124
- pending "due to bug #128 this fails"
125
- =begin
126
114
  new_attributes = {"name"=>"Mobio US", "industry"=>"Electronics"}
127
115
  @account = Account.find(:all).first
128
116
  @account.update_attributes(new_attributes)
129
117
 
130
118
  @new_acct = Account.find(:all).first
131
119
 
132
- "Mobio US".should == @new_acct.name
133
- "Electronics".should == @new_acct.industry
134
- =end
120
+ @new_acct.name.should == "Mobio US"
121
+ @new_acct.industry.should == "Electronics"
135
122
  end
136
123
  end
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rhodes
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.3
4
+ version: 0.2.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rhomobile Dev
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-01-26 00:00:00 -08:00
12
+ date: 2009-01-27 00:00:00 -08:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -120,12 +120,14 @@ files:
120
120
  - generators/templates/model/edit.erb
121
121
  - generators/templates/model/index.erb
122
122
  - generators/templates/model/new.erb
123
+ - generators/templates/model/show.erb
123
124
  - generators/templates/source/source_adapter.rb
124
125
  - lib/ServeME.rb
125
126
  - lib/TestServe.rb
126
127
  - lib/builtinME.rb
127
128
  - lib/date.rb
128
129
  - lib/date/format.rb
130
+ - lib/dateME.rb
129
131
  - lib/erb.rb
130
132
  - lib/find.rb
131
133
  - lib/rational.rb