lore 0.4.7 → 0.4.8

Sign up to get free protection for your applications and to get access to all the features.
Files changed (34) hide show
  1. data/History.txt +6 -0
  2. data/custom_models.rb +0 -153
  3. data/lib/lore/behaviours/lockable.rb +27 -13
  4. data/lib/lore/behaviours/movable.rb +31 -13
  5. data/lib/lore/behaviours/paginated.rb +31 -0
  6. data/lib/lore/behaviours/versioned.rb +15 -3
  7. data/lib/lore/gui/form_generator.rb +72 -104
  8. data/lib/lore/gui/lore_model_select_field.rb +59 -0
  9. data/lore.gemspec +4 -3
  10. metadata +13 -27
  11. data/lib/lore/gui/erb_template.rb +0 -79
  12. data/lib/lore/gui/erb_template_helpers.rhtml +0 -19
  13. data/lib/lore/gui/form.rb +0 -314
  14. data/lib/lore/gui/form_element.rb +0 -676
  15. data/lib/lore/gui/templates/button.rhtml +0 -2
  16. data/lib/lore/gui/templates/checkbox.rhtml +0 -3
  17. data/lib/lore/gui/templates/checkbox_row.rhtml +0 -1
  18. data/lib/lore/gui/templates/file.rhtml +0 -2
  19. data/lib/lore/gui/templates/file_readonly.rhtml +0 -3
  20. data/lib/lore/gui/templates/form_element.rhtml +0 -5
  21. data/lib/lore/gui/templates/form_element_horizontal.rhtml +0 -3
  22. data/lib/lore/gui/templates/form_element_listed.rhtml +0 -8
  23. data/lib/lore/gui/templates/form_table.rhtml +0 -3
  24. data/lib/lore/gui/templates/form_table_blank.rhtml +0 -3
  25. data/lib/lore/gui/templates/form_table_horizontal.rhtml +0 -8
  26. data/lib/lore/gui/templates/password.rhtml +0 -2
  27. data/lib/lore/gui/templates/password_readonly.rhtml +0 -3
  28. data/lib/lore/gui/templates/radio.rhtml +0 -1
  29. data/lib/lore/gui/templates/radio_row.rhtml +0 -1
  30. data/lib/lore/gui/templates/select.rhtml +0 -23
  31. data/lib/lore/gui/templates/text.rhtml +0 -2
  32. data/lib/lore/gui/templates/text_readonly.rhtml +0 -3
  33. data/lib/lore/gui/templates/textarea.rhtml +0 -3
  34. data/lib/lore/gui/templates/textarea_readonly.rhtml +0 -4
data/History.txt CHANGED
@@ -1,3 +1,9 @@
1
+
2
+ === 0.4.8 / 2008-01-08
3
+
4
+ * Using Aurita::GUI (gem: aurita-gui) for
5
+ form generation.
6
+
1
7
  === 0.4.7 / 2008-12-29
2
8
 
3
9
  * Extended configuration (especially logging).
data/custom_models.rb CHANGED
@@ -1,153 +0,0 @@
1
-
2
- require('lore/model')
3
-
4
- module Some
5
- module App
6
-
7
- class New_Model < Lore::Model
8
- table :new_model, :public
9
- primary_key :model_id, :model_id_seq
10
- has_attribute :name, Lore::Type.integer
11
- has_attribute :created, Lore::Type.timestamp
12
- has_attribute :model_id, Lore::Type.integer
13
-
14
-
15
- end
16
- end
17
- end
18
-
19
- module Some
20
- module App
21
-
22
- class New_Model < Lore::Model
23
- table :new_model, :public
24
- primary_key :model_id, :model_id_seq
25
- has_attribute :name, Lore::Type.integer
26
- has_attribute :created, Lore::Type.timestamp
27
- has_attribute :model_id, Lore::Type.integer
28
-
29
-
30
- end
31
- end
32
- end
33
-
34
- module Some
35
- module App
36
-
37
- class New_Model < Lore::Model
38
- table :new_model, :public
39
- primary_key :model_id, :model_id_seq
40
- has_attribute :name, Lore::Type.integer
41
- has_attribute :created, Lore::Type.timestamp
42
- has_attribute :model_id, Lore::Type.integer
43
-
44
-
45
- end
46
- end
47
- end
48
-
49
- module Some
50
- module App
51
-
52
- class New_Model < Lore::Model
53
- table :new_model, :public
54
- primary_key :model_id, :model_id_seq
55
- has_attribute :name, Lore::Type.integer
56
- has_attribute :created, Lore::Type.timestamp
57
- has_attribute :model_id, Lore::Type.integer
58
-
59
-
60
- end
61
- end
62
- end
63
-
64
- module Some
65
- module App
66
-
67
- class New_Model < Lore::Model
68
- table :new_model, :public
69
- primary_key :model_id, :model_id_seq
70
- has_attribute :name, Lore::Type.integer
71
- has_attribute :created, Lore::Type.timestamp
72
- has_attribute :model_id, Lore::Type.integer
73
-
74
-
75
- end
76
- end
77
- end
78
-
79
- module Some
80
- module App
81
-
82
- class New_Model < Lore::Model
83
- table :new_model, :public
84
- primary_key :model_id, :model_id_seq
85
- has_attribute :name, Lore::Type.integer
86
- has_attribute :created, Lore::Type.timestamp
87
- has_attribute :model_id, Lore::Type.integer
88
-
89
-
90
- end
91
- end
92
- end
93
-
94
- module Some
95
- module App
96
-
97
- class New_Model < Lore::Model
98
- table :new_model, :public
99
- primary_key :model_id, :model_id_seq
100
- has_attribute :name, Lore::Type.integer
101
- has_attribute :created, Lore::Type.timestamp
102
- has_attribute :model_id, Lore::Type.integer
103
-
104
-
105
- end
106
- end
107
- end
108
-
109
- module Some
110
- module App
111
-
112
- class New_Model < Lore::Model
113
- table :new_model, :public
114
- primary_key :model_id, :model_id_seq
115
- has_attribute :name, Lore::Type.integer
116
- has_attribute :created, Lore::Type.timestamp
117
- has_attribute :model_id, Lore::Type.integer
118
-
119
-
120
- end
121
- end
122
- end
123
-
124
- module Some
125
- module App
126
-
127
- class New_Model < Lore::Model
128
- table :new_model, :public
129
- primary_key :model_id, :model_id_seq
130
- has_attribute :name, Lore::Type.integer
131
- has_attribute :created, Lore::Type.timestamp
132
- has_attribute :model_id, Lore::Type.integer
133
-
134
-
135
- end
136
- end
137
- end
138
-
139
- module Some
140
- module App
141
-
142
- class New_Model < Lore::Model
143
- table :new_model, :public
144
- primary_key :model_id, :model_id_seq
145
- has_attribute :name, Lore::Type.integer
146
- has_attribute :created, Lore::Type.timestamp
147
- has_attribute :model_id, Lore::Type.integer
148
-
149
-
150
- end
151
- end
152
- end
153
-
@@ -5,37 +5,51 @@ module Behaviours
5
5
  module Lockable
6
6
 
7
7
  # Defines which attribute to use for locking.
8
- # Default is 'lock'.
9
8
  # Usage:
10
9
  #
11
- # If a block is given, a lock is only set when it
12
- # evaluates to true:
10
+ # class My_Model < Lore::Model
11
+ # extend Lockable
12
+ # include Lockable_Entity
13
+ #
14
+ # # ...
15
+ # lock_by(:lock_field)
13
16
  #
14
- # lock_by(:lock) { |me|
15
- # me.user_id != $user.user_id
16
- # }
17
+ # end
17
18
  #
18
- def lock_by(attrib, &block)
19
- @lock_proc = block
19
+ # my_model_entity.lock!
20
+ # # same as
21
+ # My_Model.lock!(my_model_entity)
22
+ #
23
+ def lock_by(attrib)
20
24
  @lock_attr = attrib
21
25
  @lock_attr_name = attrib.to_s.split('.')[-1].intern
22
26
  end
23
27
 
24
28
  def lock!(inst)
25
- inst[@lock_attr] = true
29
+ inst.attr[@lock_attr] = true
26
30
  commit
27
31
  end # def
28
-
29
32
  def release!(inst)
30
- inst[@lock_attr] = false
33
+ inst.attr[@lock_attr] = false
31
34
  commit
32
35
  end # def
33
-
34
36
  def locked?(inst)
35
- (inst[@lock_attr] == true) || (inst[@lock_attr] == 't')
37
+ (inst.attr[@lock_attr] == true) || (inst.attr[@lock_attr] == 't')
36
38
  end # def
37
39
 
38
40
  end # module
39
41
 
42
+ module Lockable_Entity
43
+ def lock!
44
+ self.class.lock!(self)
45
+ end
46
+ def release!
47
+ self.class.release!(self)
48
+ end
49
+ def locked?
50
+ self.class.locked?(self)
51
+ end
52
+ end
53
+
40
54
  end # module
41
55
  end # module
@@ -2,23 +2,40 @@
2
2
  module Lore
3
3
  module Behaviours
4
4
 
5
+ # Move an entity within a given criteria range,
6
+ # e.g. within nodes of a tree.
7
+ #
8
+ # Usage:
9
+ #
10
+ # class My_Model < Lore::Model
11
+ # extend Lore::Behaviours::Movable
12
+ # include Lore::Behaviours::Movable_Entity
13
+ # # ...
14
+ # ordered_by(:position)
15
+ # end
16
+ #
17
+ # # Will move entity to position 12 within child entries
18
+ # # of node with id 2:
19
+ # my_model_entity.move_to(12, (My_Model.parent_id == 2))
20
+ # # Same as
21
+ # My_Model.move(my_model_entity, 12, (My_Model.parent_id == 2))
22
+ #
5
23
  module Movable
6
24
 
7
- def ordered_by(attr)
8
- @order_attr = attr
9
- @order_attr_name = attr.to_s.split('.')[-1].intern
25
+ def ordered_by(attrib)
26
+ @order_attr = attrib
27
+ @order_attr_name = attrib.to_s.split('.')[-1].intern
10
28
  end
11
29
 
12
30
  def move(inst, sortpos, criteria)
13
-
14
31
  sortpos = sortpos.to_i
15
32
  return if sortpos < 1
16
-
33
+
34
+ criteria ||= Lore::Clause.new()
17
35
  sortpos_old = inst.attr[@order_attr_name].to_i
18
36
 
19
37
  # move down:
20
38
  if sortpos.to_i > sortpos_old then
21
-
22
39
  self.update { |na|
23
40
  na.set({@order_attr_name => @order_attr-1}).where(
24
41
  (criteria) &
@@ -26,9 +43,8 @@ module Behaviours
26
43
  (@order_attr > sortpos_old)
27
44
  )
28
45
  }
29
-
46
+ # move up:
30
47
  elsif sortpos.to_i < sortpos_old then
31
-
32
48
  self.update { |na|
33
49
  na.set({@order_attr_name => @order_attr+1}).where(
34
50
  (criteria) &
@@ -36,19 +52,21 @@ module Behaviours
36
52
  (@order_attr < sortpos_old)
37
53
  )
38
54
  }
39
-
40
55
  end
41
-
56
+ # In case we actually had to move the entity:
42
57
  if sortpos != sortpos_old then
43
-
44
58
  inst.set_attribute_value(@order_attr_name, sortpos)
45
59
  inst.commit()
46
-
47
60
  end
48
-
49
61
  end # def
50
62
 
51
63
  end # module
52
64
 
65
+ module Movable_Entity
66
+ def move_to(position, criteria=nil)
67
+ self.class.move(self, position, criteria)
68
+ end
69
+ end
70
+
53
71
  end # module
54
72
  end # module
@@ -0,0 +1,31 @@
1
+
2
+ module Lore
3
+ module Behaviours
4
+
5
+
6
+ # Usage:
7
+ #
8
+ # class My_Model < Lore::Model
9
+ # extend Lore::Behaviours::Paginated
10
+ #
11
+ # def self.search(search, page)
12
+ # paginate(:per_page => 10,
13
+ # :page => page,
14
+ # :filter => all_with(search).order_by(:name, :desc))
15
+ # end
16
+ #
17
+ # end
18
+ #
19
+ # first_page_entities => My_Model.search((My_Model.attribute == 'foo'), 1)
20
+ #
21
+ module Paginated
22
+
23
+ def paginate(params)
24
+ entities = params[:filter].limit(params[:per_page], params[:page]).entities
25
+ end
26
+
27
+ end
28
+
29
+ end
30
+ end
31
+
@@ -2,20 +2,32 @@
2
2
  module Lore
3
3
  module Behaviours
4
4
 
5
+ # Usage:
6
+ #
7
+ # class My_Model < Lore::Model
8
+ # extend Lore::Behaviours::Versioned
9
+ # # ...
10
+ # version_by :version_number
11
+ # end
12
+ #
13
+ # my_model_entity.foo = 'bar'
14
+ # my_model_entity.commit # Will create a new version
15
+ #
5
16
  module Versioned
6
17
 
7
18
  # Defines attribute the version number is stored in.
8
19
  # Default is 'version'.
9
- def version_by(attrib)
20
+ def version_by(attrib=:version)
10
21
  @version_attr = attrib
11
22
  @version_attr_name = attrib.to_s.split('.')[-1].intern
12
23
  end
13
24
 
14
25
  # Overloads commit so it increments the version attribute
15
- # before saving instance to database.
26
+ # before saving instance to database and creates a new
27
+ # entity with incremented version instead.
16
28
  def commit()
17
29
  set_attribute_value(@version_attr, self.attr[@version_attr].to_i + 1)
18
- super()
30
+ create(self.attr)
19
31
  end
20
32
 
21
33
  end # module
@@ -1,151 +1,119 @@
1
1
 
2
- require('lore/types')
3
- require('lore/gui/form')
2
+ require('aurita')
3
+ Aurita.import_module :gui, :module
4
+ Aurita.import_module :gui, :model_select_field
4
5
 
5
6
  module Lore
6
7
  module GUI
7
8
 
9
+ # A factory rendering Aurita::GUI:Form instances for
10
+ # Aurita::Model classes.
11
+ #
8
12
  # Usage:
9
- #
10
- # generator = Form_Generator.new(Table_Accessor, Lang, :readonly | :mutable)
11
- # form = generator.generate
12
- #
13
- # See documentation of Cuba::GUI::Form for usage of form instances.
13
+ #
14
+ # generator = Lore_Form_Generator.new(Some_Lore_Model)
15
+ # generator.params = { :action => '/aurita/dispatch', :onsubmit => "alert('submitting'); " }
16
+ # generator.generate
17
+ # puts generator.form
14
18
  #
15
- class Form_Generator
19
+ class Form_Generator
16
20
 
17
- def initialize(klass=nil, labels={}, mode=:mutable, custom_elements={}) # {{{
18
-
19
- @logger = Lore.logger
20
- @form = Form.new()
21
- @labels = labels
22
- @klass = klass
23
- @custom_elements = custom_elements
21
+ attr_reader :form, :klass
22
+ attr_accessor :custom_elements, :labels, :params
24
23
 
25
- Textarea.reset_counter
24
+ def initialize(klass=nil)
25
+ @klass = klass
26
+ @labels = {}
27
+ @params = {}
28
+ @custom_elements = {}
29
+ @form = false
30
+ end
26
31
 
27
- @logger.debug('CUSTOM ELEMENTS: ' << @custom_elements.inspect)
28
-
29
- if @klass.nil? then return end
30
- @logger.debug('GET_ATTRIBUTES: ' << @klass.inspect)
31
- @logger.debug('GET_ATTRIBUTES: ' << @klass.get_attributes.inspect)
32
- @klass.get_attributes.each_pair { |table, attributes|
32
+ def form
33
+ generate() unless @form
34
+ @form
35
+ end
33
36
 
34
- # handle attributes passed via attrib_setup:
35
-
36
- attributes.each { |attrib|
37
+ def generate
38
+ @form = Aurita::GUI::Form.new(@params)
37
39
 
38
- label_tag = table.gsub('.','--') << '--' << attrib
39
- if(@labels[label_tag].to_s != '' && @labels[label_tag] != label_tag) then
40
- label = @labels[label_tag]
41
- else
42
- label = attrib.gsub('_',' ').capitalize
43
- end
40
+ @klass.get_attributes.each_pair { |table, attributes|
41
+ attributes.each { |attribute|
42
+ label_tag = table.gsub('.','--') << '--' << attribute
43
+ label = @labels[label_tag]
44
+ label ||= label_tag
45
+ full_attrib = table + '.' << attribute
46
+ field_name = full_attrib.gsub('.','_')
47
+ form_element = false
44
48
 
45
49
  # @custom_elements is a hash mapping attribute names to
46
50
  # Custom_Element instances.
47
51
  if ((@custom_elements[table]) and
48
- (@custom_elements[table][attrib])) then
52
+ (@custom_elements[table][attribute])) then
49
53
 
50
- form_element = @custom_elements[table][attrib].new(table, attrib, label)
51
- form_element.mode = mode
52
- @form.add(form_element)
54
+ form_element = @custom_elements[table][attribute].new(table, attribute, label)
53
55
 
54
- elsif (@klass.get_primary_keys[table].nil? or
55
- !@klass.get_primary_keys[table].include? attrib) and
56
- (@klass.get_implicit_attributes[table].nil? or
57
- !@klass.get_implicit_attributes[table].include? attrib) and
58
- (@klass.get_has_a_klasses.nil? or
59
- @klass.get_has_a_klasses[table+'.'+attrib].nil?) and
60
- (@klass.get_hidden_attributes[table].nil? or
61
- !@klass.get_hidden_attributes[table].include? attrib)
56
+ elsif (@klass.get_primary_keys[table].nil? or # Ignore primary key attributes
57
+ !@klass.get_primary_keys[table].include? attribute) and
58
+ (@klass.get_implicit_attributes[table].nil? or # Ignore implicit attributes
59
+ !@klass.get_implicit_attributes[table].include? attribute) and
60
+ (@klass.get_has_a_klasses.nil? or # Ignore attributes aggregated via has_a associations (added later)
61
+ @klass.get_has_a_klasses[table+'.'+attribute].nil?) and
62
+ (@klass.get_hidden_attributes[table].nil? or # Ignore otherwise hidden attributes
63
+ !@klass.get_hidden_attributes[table].include? attribute)
62
64
  then
63
-
64
- case @klass.get_attribute_types[table][attrib]
65
-
65
+ # Attribute has to be added to form, according to data type
66
+ case @klass.get_attribute_types[table][attribute]
66
67
  when Lore::PG_BOOL
67
- form_element = Radio.new(table, attrib, label, ['t','f'])
68
+ form_element = Radio_Field.new(:label => label,
69
+ :name => field_name,
70
+ :options => { 't' => 'yes', 'f' => 'no' } )
68
71
 
69
72
  when Lore::PG_SMALLINT || Lore::PG_INT
70
- form_element = Text.new(table, attrib, label, nil)
71
-
73
+ form_element = Input_Field.new(:label => label, :name => field_name)
72
74
  when Lore::PG_VARCHAR
73
- form_element = Text.new(table, attrib, label, nil, nil)
74
- if (!@klass.get_maxlength.nil? &&
75
- !@klass.get_maxlength[table].nil? &&
76
- !@klass.get_maxlength[table][attrib.intern].nil?) then
77
- form_element.set_length(@klass.get_maxlength[table][attrib.intern])
78
- end
79
-
75
+ form_element = Input_Field.new(:label => label, :name => field_name)
80
76
  when Lore::PG_TEXT
81
- form_element = Textarea.new(table, attrib, label, nil, nil)
82
- if (!@klass.get_maxlength.nil? &&
83
- !@klass.get_maxlength[table].nil? &&
84
- !@klass.get_maxlength[table][attrib.intern].nil?) then
85
- form_element.set_length(@klass.get_maxlength[table][attrib.intern])
86
- end
87
-
77
+ form_element = Textarea_Field.new(:label => label, :name => field_name)
88
78
  when Lore::PG_TIMESTAMP_TIMEZONE
89
- form_element = Date.new(table, attrib, label, nil)
90
-
79
+ form_element = Datetime_Field.new(:label => label, :name => field_name, :date_format => 'dmy', :time_format => 'hms', :year_range => (2009..2020))
91
80
  when Lore::PG_DATE
92
- form_element = Date.new(table, attrib, label, nil)
93
-
81
+ form_element = Date_Field.new(:label => label, :name => field_name, :date_format => 'dmy', :year_range => (2009..2020))
94
82
  else
95
- form_element = Text.new(table, attrib, label, nil)
83
+ form_element = Input_Field.new(:label => label, :name => field_name)
96
84
  end
97
-
98
- form_element.set_mode(mode)
99
- @form.add(form_element)
100
-
85
+
101
86
  elsif (!@klass.get_has_a_klasses.nil? and
102
- !@klass.get_has_a_klasses[table+'.'+attrib].nil?)
87
+ !@klass.get_has_a_klasses[full_attrib].nil?)
103
88
  then
104
- foreign_klass = @klass.get_has_a_klasses[table+'.'+attrib]
105
- foreign_table = foreign_klass.table_name
106
-
107
- form_element = Klass_Select.new(foreign_klass, table, attrib, label)
108
- form_element.set_mode(mode)
109
- @form.add(form_element)
110
-
89
+ foreign_klass = @klass.get_has_a_klasses[full_attrib]
90
+ form_element = Model_Select_Field.new(foreign_klass, :label => label, :name => field_name)
91
+
111
92
  elsif (!@klass.get_aggregate_klasses.nil? and
112
- !@klass.get_aggregate_klasses[table+'.'+attrib].nil?)
93
+ !@klass.get_aggregate_klasses[full_attrib].nil?)
113
94
  then
114
- foreign_klass = @klass.get_aggregate_klasses[table+'.'+attrib]
115
- foreign_table = foreign_klass.table_name
116
-
117
- form_element = Klass_Select.new(foreign_klass, table, attrib, label)
118
- form_element.set_mode(mode)
119
- @form.add(form_element)
95
+ foreign_klass = @klass.get_aggregate_klasses[full_attrib]
96
+ form_element = Model_Select_Field.new(foreign_klass, :label => label, :name => field_name)
120
97
 
121
98
  # Attribute is explixit (expected/required) but not
122
99
  # catched before -> Add attribute as hidden field:
123
100
  elsif (!@klass.get_explicit_attributes[table].nil? and
124
- @klass.get_explicit_attributes[table].include? attrib)
101
+ @klass.get_explicit_attributes[table].include? attribute)
125
102
  then
126
- form_element = Hidden.new(table, attrib)
127
- @form.add(form_element)
128
-
103
+ form_element = Hidden_Field.new(:name => field_name)
104
+
129
105
  elsif (!@klass.get_implicit_attributes[table].nil? and
130
- @klass.get_implicit_attributes[table].include? attrib)
106
+ @klass.get_implicit_attributes[table].include? attribute)
131
107
  then
132
- @logger.debug(attrib+' is implicit')
133
-
108
+ # Implicit field, ignored
134
109
  end
135
-
110
+
111
+ @form.add(form_element) if form_element
136
112
  }
137
113
  }
138
- end # }}}
114
+ end
139
115
 
140
- # Returns instance of Cuba::GUI::Form configured
141
- # for klass passed in constructor:
142
- def generate() # {{{
143
- return @form
144
- end # }}}
145
-
146
116
  end # class
147
117
 
148
-
149
118
  end # module
150
119
  end # module
151
-
@@ -0,0 +1,59 @@
1
+
2
+ require('aurita-gui/form/select_field')
3
+
4
+ module Aurita
5
+ module GUI
6
+
7
+ class Lore_Model_Select_Field < Select_Field
8
+
9
+ def initialize(model, params, &block)
10
+ @model = model
11
+ @filter = params[:filter]
12
+ @filter ||= true
13
+ if block_given? then
14
+ @select_block = block
15
+ else
16
+ @select_block = Proc.new { |clause| clause.where(@filter) }
17
+ end
18
+ params.delete(:filter)
19
+ super(params)
20
+ end
21
+
22
+ def option_elements
23
+ elements = []
24
+ options = []
25
+
26
+ foreign_table = @model.table_name
27
+ selectables = @model.select(&@select_block)
28
+ selectables.each { |foreign|
29
+ foreign_label = ''
30
+ if @model.get_labels.nil? then
31
+ raise Aurita::GUI::Form_Error.new('Specify a label for has_a - related model klasses (here: ' << @model.to_s + ') via "use_label".')
32
+ end
33
+ @model.get_labels.each { |label_attrib|
34
+ foreign_label << foreign.get_attribute_values[foreign_table][label_attrib.split('.')[-1]].to_s << ' '
35
+ }
36
+
37
+ @model.get_primary_keys[foreign_table].uniq.each { |keys|
38
+ key_string = ''
39
+ keys.each { |key|
40
+ # concatenate combined primary keys like 'id--id2' -> '3--4'
41
+ if key_string != '' then key_string << '--' end
42
+ key_string << foreign.get_attribute_values[foreign_table][key]
43
+ }
44
+ options << { key_string => foreign_label }
45
+ }
46
+ }
47
+
48
+ options.each { |map|
49
+ map.each_pair { |k,v|
50
+ elements << HTML.option(:value => k) { v }
51
+ }
52
+ }
53
+ elements
54
+ end
55
+
56
+ end # class
57
+
58
+ end
59
+ end
data/lore.gemspec CHANGED
@@ -16,12 +16,13 @@ spec = Gem::Specification.new { |s|
16
16
  high coverage of native SQL functions and features.
17
17
  Lore is currently using PostgreSQL as database backend.
18
18
  EOF
19
- s.version = '0.4.7'
19
+ s.version = '0.4.8'
20
20
  s.author = 'Tobias Fuchs'
21
21
  s.email = 'fuchs@atomnode.net'
22
22
  s.date = Time.now
23
23
  s.files = '*.rb'
24
24
  s.add_dependency('postgres', '>= 0.1')
25
+ s.add_dependency('aurita-gui', '>= 0.1')
25
26
  s.files = FileList['*',
26
27
  'lib/*',
27
28
  'lib/lore/*',
@@ -36,8 +37,8 @@ spec = Gem::Specification.new { |s|
36
37
 
37
38
  s.has_rdoc = true
38
39
  s.rdoc_options << '--title' << 'Lore ORM' <<
39
- '--main' << 'Lore::Model' <<
40
- '--line-numbers'
40
+ '--main' << 'Lore::Model' <<
41
+ '--line-numbers'
41
42
 
42
43
  s.homepage = 'http://lore.rubyforge.org'
43
44