lore 0.4.3 → 0.4.5

Sign up to get free protection for your applications and to get access to all the features.
data/custom_models.rb ADDED
@@ -0,0 +1,93 @@
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
+
data/lib/lore/README.txt CHANGED
@@ -26,9 +26,9 @@ A: First provide login data for a database (aka Context):
26
26
 
27
27
  Lore::Context.enter :dbname
28
28
  # Operate in database dbname
29
- Lore::Context.enter :other_dbname
30
- # Operate in database other_dbname
31
- Lore::Context.leave
29
+ Lore::Context.enter :other_dbname
30
+ # Operate in database other_dbname
31
+ Lore::Context.leave
32
32
  # Operate in database dbname
33
33
  Lore::Context.enter :other_dbname
34
34
 
@@ -45,7 +45,7 @@ module Cache
45
45
  # Create cache entry for a specific query_string on a model.
46
46
  # Expects result from given query string as it has to be
47
47
  # returned when calling Cache_Implementation.read(query_string)
48
- def self.create(accessor, query_string, result)
48
+ def self.create(accessor, query_object, result)
49
49
  raise ::Exception.new('Not implemented')
50
50
  end
51
51
 
@@ -33,20 +33,20 @@ module Cache
33
33
  }
34
34
  end
35
35
 
36
- def self.read(accessor, query_string)
37
- @@logger.debug('Loading from cache: ' << index_for(query_string))
38
- store = Mmap.new(storefile_of(accessor.table_name, query_string))
36
+ def self.read(accessor, query_obj)
37
+ @@logger.debug('Loading from cache: ' << index_for(query_obj[:query]))
38
+ store = Mmap.new(storefile_of(accessor.table_name, query_obj[:query]))
39
39
  @@logger.debug('STORE: ' << store.inspect)
40
40
  return [] unless store
41
41
  result = Marshal::load(store)
42
42
  return result['dump']
43
43
  end
44
44
 
45
- def self.create(accessor, query_string, result)
46
- storefile = create_mmap(accessor, query_string, result)
45
+ def self.create(accessor, query_object, result)
46
+ storefile = create_mmap(accessor, query_object, result)
47
47
  end
48
- def self.create_mmap(accessor, query_string, result)
49
- storefile = storefile_of(accessor.table_name, query_string)
48
+ def self.create_mmap(accessor, query_object, result)
49
+ storefile = storefile_of(accessor.table_name, query_object[:query])
50
50
  store = create_store(storefile)
51
51
  store.transaction do
52
52
  store['dump'] = result
@@ -56,8 +56,8 @@ module Cache
56
56
  return storefile
57
57
  end
58
58
 
59
- def self.include?(accessor, query_string)
60
- FileTest.exist?(storefile_of(accessor.table_name, query_string))
59
+ def self.include?(accessor, query_obj)
60
+ FileTest.exist?(storefile_of(accessor.table_name, query_obj[:query]))
61
61
  end
62
62
 
63
63
  def self.delete(index)
data/lib/lore/clause.rb CHANGED
@@ -35,23 +35,24 @@ module Lore
35
35
  class Join # :nodoc:
36
36
  # {{{
37
37
 
38
- def initialize(clause, join_klass, type=:natural)
38
+ def initialize(clause, base_klass, join_klass, type=:natural)
39
39
  @type = type
40
40
  @clause_parser = clause
41
+ @base_klass = base_klass
41
42
  @join_klass = join_klass
42
43
  @string = ''
43
44
  # By joining with another klass, new attributes are added
44
45
  # we have to include in the AS part of the query:
45
46
  new_attributes = ''
46
- join_klass.get_attributes.each { |attr_set|
47
- table = attr_set[0]
48
- attr_set[1].each { |attrib_name|
49
- new_attributes += ', ' << "\n"
50
- new_attributes += table + '.' << attrib_name
51
- new_attributes += ' AS '
52
- new_attributes += '"' << table << '.' << attrib_name << '" '
53
- }
54
- }
47
+ # join_klass.get_attributes.each { |attr_set|
48
+ # table = attr_set[0]
49
+ # attr_set[1].each { |attrib_name|
50
+ # new_attributes += ', ' << "\n"
51
+ # new_attributes += table + '.' << attrib_name
52
+ # new_attributes += ' AS '
53
+ # new_attributes += '"' << table << '.' << attrib_name << '" '
54
+ # }
55
+ # }
55
56
  implicit_joins = ''
56
57
  @clause_parser.add_as(new_attributes)
57
58
 
@@ -72,12 +73,16 @@ module Lore
72
73
  @string
73
74
  end
74
75
 
76
+ # Will transform into ON clause, as USING drops duplicate fields
75
77
  def using(key, &block)
76
78
  if @type == :natural then cmd = 'JOIN '
77
79
  elsif @type == :left then cmd = 'LEFT JOIN '
78
80
  elsif @type == :right then cmd = 'RIGHT JOIN '
79
81
  end
80
- @string = "\n" << cmd << @join_klass.table_name << ' USING (' << key.to_s << ') '
82
+ key = key.to_s
83
+ using_string = "#{@base_klass.table_name}.#{key} = "
84
+ using_string << "#{@join_klass.table_name}.#{key}"
85
+ @string = "\n" << cmd << @join_klass.table_name << ' ON (' << using_string << ') '
81
86
  @clause_parser.append_join(self)
82
87
  yield @clause_parser # use extended clause parser for inner block argument
83
88
  end
@@ -99,14 +104,14 @@ module Lore
99
104
 
100
105
  attr_reader :field_name, :value_string, :left_side, :plan
101
106
 
102
- def initialize(field_name, left_side='', value_string='', plan={})
107
+ def initialize(field_name='', left_side='', value_string='', plan={})
103
108
  @value_string = value_string
104
109
  @left_side = left_side
105
110
  @field_name = field_name
106
111
  end
107
112
 
108
113
  def self.for(accessor)
109
- Clause_Parser.new(accessor.table_name, accessor.get_attributes)
114
+ Clause_Parser.new(accessor)
110
115
  end
111
116
 
112
117
  def not_in(nested_query_string)
@@ -296,10 +301,6 @@ module Lore
296
301
  def to_sql
297
302
  @left_side + @value_string
298
303
  end
299
-
300
- def plan_name
301
-
302
- end
303
304
 
304
305
  end # class }}}
305
306
 
@@ -308,7 +309,7 @@ module Lore
308
309
  class Clause_Parser # :nodoc
309
310
  # {{{
310
311
 
311
- def initialize(base_table, *table_fields)
312
+ def initialize(base_accessor)
312
313
 
313
314
  @clause = Hash.new
314
315
  @clause[:limit] = ''
@@ -320,12 +321,13 @@ module Lore
320
321
  @clause[:set] = ''
321
322
  @clause[:filter] = ''
322
323
  @clause[:where] = 't'
323
- @base_table = base_table
324
+ @clause[:joined] = []
325
+ @base_accessor = base_accessor
324
326
 
325
327
  end # def
326
328
 
327
329
  def self.for(accessor)
328
- Clause_Parser.new(accessor.table_name, accessor.get_attributes)
330
+ Clause_Parser.new(accessor)
329
331
  end
330
332
 
331
333
  def parts
@@ -433,19 +435,20 @@ module Lore
433
435
  def join(join_klass)
434
436
  # this Join instance also will update this Clause_Parser's
435
437
  # as_part (so passing self is crucial):
436
- j = Join.new(self, join_klass)
438
+ @clause[:joined] << join_klass
439
+ j = Join.new(self, @base_accessor, join_klass)
437
440
  return j
438
441
  end
439
442
  def left_join(join_klass)
440
443
  # this Join instance also will update this Clause_Parser's
441
444
  # as_part (so passing self is crucial):
442
- j = Join.new(self, join_klass, :left)
445
+ j = Join.new(self, @base_accessor, join_klass, :left)
443
446
  return j
444
447
  end
445
448
  def right_join(join_klass)
446
449
  # this Join instance also will update this Clause_Parser's
447
450
  # as_part (so passing self is crucial):
448
- j = Join.new(self, join_klass, :right)
451
+ j = Join.new(self, @base_accessor, join_klass, :right)
449
452
  return j
450
453
  end
451
454
 
@@ -511,11 +514,12 @@ module Lore
511
514
  field_name = absolute_field_name.to_s
512
515
  end
513
516
 
514
- return Clause.new("#{@base_table}.#{field_name}")
517
+ # return Clause.new("#{@base_table}.#{field_name}")
518
+ return Clause.new(field_name)
515
519
  end
516
520
 
517
521
  def id()
518
- return Clause.new("#{@base_table}.id")
522
+ return Clause.new("#{@base_accessor.table_name}.id")
519
523
  end
520
524
 
521
525
  def perform
@@ -1,5 +1,5 @@
1
1
 
2
- require('lore/lore')
2
+ require('lore')
3
3
  require('logger')
4
4
  require('erb')
5
5
 
@@ -38,11 +38,11 @@ module GUI
38
38
  @logger = Lore.logger
39
39
 
40
40
  @template = ''
41
- IO.foreach(Lore.path + 'gui/erb_template_helpers.rhtml') { |line|
41
+ IO.foreach(Lore.path + 'lore/gui/erb_template_helpers.rhtml') { |line|
42
42
  @template << line
43
43
  }
44
44
  template_path = template_path.to_s << '.rhtml' if template_path.instance_of? Symbol
45
- IO.foreach(Lore.path + 'gui/templates/' << template_path) { |line|
45
+ IO.foreach(Lore.path + 'lore/gui/templates/' << template_path) { |line|
46
46
  @template << line
47
47
  }
48
48
 
@@ -658,8 +658,8 @@ module GUI
658
658
  class Hidden < Form_Element
659
659
  # {{{
660
660
 
661
- def initialize(_table, _attrib_name)
662
- setup(_table, _attrib_name, '', nil, nil)
661
+ def initialize(_table, _attrib_name, value=nil)
662
+ setup(_table, _attrib_name, '', nil, value)
663
663
  end
664
664
 
665
665
  def string()
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
data/lib/lore/result.rb CHANGED
@@ -72,6 +72,25 @@ class Result
72
72
  @result_rows[row_num] = row_result
73
73
  return row_result
74
74
 
75
+ end
76
+ def get_row_with_field_names(row_num=0)
77
+
78
+ return @result_rows.at(row_num) if @result_rows.at(row_num)
79
+ return if @result.num_tuples == 0
80
+
81
+ row_result = Array.new
82
+
83
+ @field_counter = 0
84
+ for @field_counter in 0...@num_fields do
85
+ row_result << @result.getvalue(row_num, @field_counter)
86
+ end
87
+ @result_rows[row_num] = row_result
88
+ @fieldnames = []
89
+ for @field_counter in 0...@num_fields do
90
+ @fieldnames << @result.fieldname(@field_counter)
91
+ end
92
+ return { :values => row_result, :fields => @fieldnames }
93
+
75
94
  end
76
95
 
77
96
  def get_rows()