momomoto 0.1.1 → 0.1.2

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/Rakefile CHANGED
@@ -1,6 +1,5 @@
1
1
 
2
2
  require 'rake/testtask'
3
- require 'rcov/rcovtask'
4
3
 
5
4
  task(:default => :test)
6
5
 
@@ -13,17 +12,20 @@ Rake::TestTask.new do | t |
13
12
  t.warning = true
14
13
  end
15
14
 
16
- Rcov::RcovTask.new do | t |
17
- t.libs << 'test_setup.rb'
18
- t.rcov_opts << '--xrefs'
19
- t.rcov_opts << '--comments'
20
- t.rcov_opts << '-x test_setup.rb'
21
- t.test_files = FileList['test/test*.rb'].unshift( 'test_setup.rb' )
22
- end
15
+ begin
16
+ require 'rcov/rcovtask'
17
+
18
+ Rcov::RcovTask.new do | t |
19
+ t.libs << 'test_setup.rb'
20
+ # t.rcov_opts << '--xrefs'
21
+ t.rcov_opts << '--comments'
22
+ # t.rcov_opts << '--profile'
23
+ t.rcov_opts << '-x test_setup.rb'
24
+ t.rcov_opts << '-x rcov.rb'
25
+ t.test_files = FileList['test/test*.rb'].unshift( 'test_setup.rb' )
26
+ end
23
27
 
24
- desc "copy the coverage information to pentabarf.org"
25
- task :coverage do | t |
26
- sh "scp -r coverage pulsar:public_html"
28
+ rescue LoadError
27
29
  end
28
30
 
29
31
  desc "create documentation for ri"
data/lib/momomoto/base.rb CHANGED
@@ -46,17 +46,16 @@ module Momomoto
46
46
 
47
47
  # set the schema name of the table this class operates on
48
48
  def schema_name=( schema_name )
49
- class_variable_set( :@@schema_name, schema_name )
49
+ @schema_name = schema_name
50
50
  end
51
51
 
52
52
  # get the schema name of the table this class operates on
53
53
  def schema_name( schema_name = nil )
54
54
  return self.schema_name=( schema_name ) if schema_name
55
- begin
56
- class_variable_get( :@@schema_name )
57
- rescue NameError
58
- construct_schema_name( self.name )
55
+ if not instance_variable_defined?( :@schema_name )
56
+ self.schema_name=( construct_schema_name( self.name ) )
59
57
  end
58
+ @schema_name
60
59
  end
61
60
 
62
61
  # get the database connection
@@ -1,7 +1,6 @@
1
1
 
2
2
  require 'momomoto/base'
3
3
  require 'momomoto/table'
4
- require 'momomoto/join'
5
4
  require 'momomoto/procedure'
6
5
  require 'momomoto/order'
7
6
  require 'momomoto/row'
@@ -9,23 +9,10 @@ module Momomoto
9
9
 
10
10
  def initialize_procedure # :nodoc:
11
11
 
12
- unless class_variables.member?( '@@procedure_name' )
13
- procedure_name( construct_procedure_name( self.name ) )
14
- end
15
-
16
- unless class_variables.member?( '@@schema_name' )
17
- schema_name( construct_schema_name( self.name ) )
18
- end
19
-
20
- unless class_variables.member?( '@@parameters' )
21
- parameters( database.fetch_procedure_parameters( procedure_name ) )
22
- raise CriticalError if not parameters
23
- end
24
-
25
- unless class_variables.member?( '@@columns' )
26
- columns( database.fetch_procedure_columns( procedure_name ) )
27
- raise CriticalError if not columns
28
- end
12
+ @procedure_name ||= construct_procedure_name( self.name )
13
+ @schema_name ||= construct_schema_name( self.name )
14
+ @parameters ||= database.fetch_procedure_parameters( procedure_name )
15
+ @columns ||= database.fetch_procedure_columns( procedure_name )
29
16
 
30
17
  const_set( :Row, Class.new( Momomoto::Row ) ) if not const_defined?( :Row )
31
18
  initialize_row( const_get( :Row ), self )
@@ -42,17 +29,16 @@ module Momomoto
42
29
 
43
30
  # set the procedure name
44
31
  def procedure_name=( procedure_name )
45
- class_variable_set( :@@procedure_name, procedure_name )
32
+ @procedure_name = procedure_name
46
33
  end
47
34
 
48
35
  # get the procedure name
49
36
  def procedure_name( procedure_name = nil )
50
37
  return self.procedure_name=( procedure_name ) if procedure_name
51
- begin
52
- class_variable_get( :@@procedure_name )
53
- rescue NameError
54
- construct_procedure_name( self.name )
38
+ if not instance_variable_defined?( :@procedure_name )
39
+ self.procedure_name = construct_procedure_name( self.name )
55
40
  end
41
+ @procedure_name
56
42
  end
57
43
 
58
44
  # get the full name of the procedure including schema if set
@@ -62,37 +48,28 @@ module Momomoto
62
48
 
63
49
  # set the parameters this procedures accepts
64
50
  # example: parameters = {:param1=>Momomoto::Datatype::Text.new}
65
- # example: parameters = {:param1=>Momomoto::Datatype::Text.new}
66
51
  def parameters=( *p )
67
52
  p = p.flatten
68
- class_variable_set( :@@parameters, p )
53
+ @parameters = p
69
54
  end
70
55
 
71
56
  # get the parameters this procedure accepts
72
57
  def parameters( *p )
73
58
  return self.send( :parameters=, *p ) if not p.empty?
74
- begin
75
- class_variable_get( :@@parameters )
76
- rescue NameError
77
- initialize_procedure
78
- class_variable_get( :@@parameters )
79
- end
59
+ initialize_procedure if not instance_variable_defined?( :@parameters )
60
+ @parameters
80
61
  end
81
62
 
82
63
  # get the columns of the resultset this procedure returns
83
64
  def columns=( columns )
84
- class_variable_set( :@@columns, columns)
65
+ @columns = columns
85
66
  end
86
67
 
87
68
  # get the columns of the resultset this procedure returns
88
69
  def columns( c = nil )
89
70
  return self.columns=( c ) if c
90
- begin
91
- class_variable_get( :@@columns )
92
- rescue NameError
93
- initialize_procedure
94
- class_variable_get( :@@columns )
95
- end
71
+ initialize_procedure if not instance_variable_defined?( :@columns )
72
+ @columns
96
73
  end
97
74
 
98
75
  def compile_parameter( params ) # :nodoc:
@@ -9,62 +9,49 @@ module Momomoto
9
9
 
10
10
  # set the default order for selects
11
11
  def default_order=( order )
12
- class_variable_set( :@@default_order, order )
12
+ @default_order = order
13
13
  end
14
14
 
15
15
  # get the columns of the table this class operates on
16
16
  def default_order( order = nil )
17
17
  return self.default_order=( order ) if order
18
- begin
19
- class_variable_get( :@@default_order )
20
- rescue NameError
21
- class_variable_set( :@@default_order, nil )
22
- end
18
+ @default_order
23
19
  end
24
20
 
25
21
  # set the columns of the table this class operates on
26
22
  def columns=( columns )
27
- class_variable_set( :@@columns, columns)
28
23
  # we store the order separate because it's quite important
29
24
  # that it's constant otherwise get_colum and set_column
30
25
  # on the row class might stop working
31
- class_variable_set( :@@column_order, columns.keys )
32
- end
33
-
34
- # get the columns of this table
35
- def column_order
36
- class_variable_get( :@@column_order )
26
+ @column_order = columns.keys
27
+ @columns = columns
37
28
  end
38
29
 
39
30
  # get the columns of the table this class operates on
40
31
  def columns( columns = nil )
41
32
  return self.columns=( columns ) if columns
42
- begin
43
- class_variable_get( :@@columns )
44
- rescue NameError
33
+ if not instance_variable_defined?( :@columns )
45
34
  initialize_table
46
- class_variable_get( :@@columns )
47
35
  end
36
+ @columns
48
37
  end
49
38
 
50
- def initialize_table # :nodoc:
39
+ # get the columns of this table
40
+ def column_order #:nodoc:
41
+ @column_order
42
+ end
51
43
 
52
- unless class_variables.member?( '@@table_name' )
53
- table_name( construct_table_name( self.name ) )
54
- end
44
+ def initialize_table # :nodoc:
55
45
 
56
- unless class_variables.member?( '@@schema_name' )
57
- schema_name( construct_schema_name( self.name ) )
58
- end
46
+ @table_name ||= construct_table_name( self.name )
47
+ @schema_name ||= construct_schema_name( self.name )
59
48
 
60
- unless class_variables.member?( '@@columns' )
61
- columns( database.fetch_table_columns( table_name(), schema_name() ) )
62
- end
49
+ @columns ||= database.fetch_table_columns( table_name(), schema_name() )
63
50
  raise CriticalError, "No fields in table #{table_name}" if columns.keys.empty?
64
51
 
65
- unless class_variables.member?( '@@primary_keys' )
66
- primary_keys( database.fetch_primary_keys( table_name(), schema_name() ) )
67
- end
52
+ @primary_keys ||= database.fetch_primary_keys( table_name(), schema_name() )
53
+ @column_order = @columns.keys
54
+ @default_order ||= nil
68
55
 
69
56
  const_set( :Row, Class.new( Momomoto::Row ) ) if not const_defined?( :Row )
70
57
  initialize_row( const_get( :Row ), self )
@@ -81,17 +68,13 @@ module Momomoto
81
68
 
82
69
  # set the table_name of the table this class operates on
83
70
  def table_name=( table_name )
84
- class_variable_set( :@@table_name, table_name )
71
+ @table_name = table_name
85
72
  end
86
73
 
87
74
  # get the table_name of the table this class operates on
88
75
  def table_name( table_name = nil )
89
76
  return self.table_name=( table_name ) if table_name
90
- begin
91
- class_variable_get( :@@table_name )
92
- rescue NameError
93
- construct_table_name( self.name )
94
- end
77
+ @table_name
95
78
  end
96
79
 
97
80
  # get the full name of a table including schema if set
@@ -101,17 +84,16 @@ module Momomoto
101
84
 
102
85
  # set the primary key fields of the table
103
86
  def primary_keys=( keys ) # :nodoc:
104
- class_variable_set( :@@primary_keys, keys )
87
+ @primary_keys = keys
105
88
  end
106
89
 
107
90
  # get the primary key fields of the table
108
91
  def primary_keys( keys = nil )
109
92
  return self.primary_keys=( keys ) if keys
110
- begin
111
- class_variable_get( :@@primary_keys )
112
- rescue
93
+ if not instance_variable_defined?( :@primary_keys )
113
94
  self.primary_keys=( database.fetch_primary_keys( table_name(), schema_name()) )
114
95
  end
96
+ @primary_keys
115
97
  end
116
98
 
117
99
  ## Searches for records and returns an array containing the records
@@ -13,6 +13,21 @@ class TestDatabase < Test::Unit::TestCase
13
13
  assert_raise( Momomoto::Error ) do db.commit end
14
14
  end
15
15
 
16
+ def test_config
17
+ db = Momomoto::Database.instance
18
+ db.disconnect
19
+ old_config = db.send( :instance_variable_get, :@config )
20
+ Momomoto::Database.config( :port => 65535 )
21
+ assert_raise( Momomoto::CriticalError ) do
22
+ Momomoto::Database.connect
23
+ end
24
+ Momomoto::Database.config( old_config )
25
+ assert_nothing_raised do
26
+ db.connect
27
+ end
28
+ db.connect
29
+ end
30
+
16
31
  def test_connect
17
32
  db = Momomoto::Database.instance
18
33
  db.disconnect
data/test/test_row.rb CHANGED
@@ -43,5 +43,20 @@ class TestRow < Test::Unit::TestCase
43
43
  assert_equal( a.person_id, a['person_id'])
44
44
  end
45
45
 
46
+ def test_primary_key_setting
47
+ a = Person.select_single( nil, {:limit=>1})
48
+ assert_raise( Momomoto::Error ) do
49
+ a.person_id = 42
50
+ end
51
+ assert_raise( Momomoto::Error ) do
52
+ a.set_column( :person_id, 42 )
53
+ end
54
+ end
55
+
56
+ def test_to_hash
57
+ a = Person.new
58
+ assert_instance_of( Hash, a.to_hash )
59
+ end
60
+
46
61
  end
47
62
 
metadata CHANGED
@@ -3,7 +3,7 @@ rubygems_version: 0.8.11
3
3
  specification_version: 1
4
4
  name: momomoto
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.1.1
6
+ version: 0.1.2
7
7
  date: 2007-08-13 00:00:00 +02:00
8
8
  summary: Momomoto is an object relational mapper for PostgreSQL.
9
9
  require_paths:
@@ -29,7 +29,6 @@ authors:
29
29
  - Sven Klemm
30
30
  files:
31
31
  - lib/momomoto.rb
32
- - lib/momomoto/join.rb
33
32
  - lib/momomoto/database.rb
34
33
  - lib/momomoto/momomoto.rb
35
34
  - lib/momomoto/row.rb
@@ -77,7 +76,6 @@ files:
77
76
  - test/test_character.rb
78
77
  - test/test_integer.rb
79
78
  - test/test_inet.rb
80
- - test/test_join.rb
81
79
  - test/test_timestamp_without_time_zone.rb
82
80
  - test/test_numeric.rb
83
81
  - test/test_time_with_time_zone.rb
data/lib/momomoto/join.rb DELETED
@@ -1,66 +0,0 @@
1
-
2
- module Momomoto
3
-
4
- # this class implements the join functionality it is an abstract class
5
- # it must not be used directly but you should inherit from this class
6
- class Join < Base
7
-
8
- attr_reader :base_table, :join_rules
9
-
10
- # constructor of the join class
11
- # base_table is the base table of the join
12
- # join_rules is an array of Hashes consisting of the table to join as key
13
- # and an symbol or an array of symbols on which fields to join the table
14
- # Example: Momomoto::Join.new(Event, {Event_Person=>:event_id},{Person=>:person_id})
15
- # results in SELECT * FROM event INNER JOIN event_person USING (event_id) INNER JOIN Person USING(person_id)
16
- # if you leave out the eclipit braces to mark the hash you may get
17
- # unexpected results because of the undefined order of hashs
18
- def initialize( base_table, *join_rules )
19
- @base_table = base_table
20
- @join_rules = join_rules
21
-
22
- metaclass.instance_eval do
23
- define_method( base_table.table_name ) do base_table end
24
- end
25
- join_rules.each do | rule |
26
- rule.keys.each do | table, join_columns |
27
- metaclass.instance_eval do
28
- define_method( table.table_name ) do table end
29
- end
30
- end
31
- end
32
- end
33
-
34
- def metaclass # :nodoc:
35
- class << self; self; end
36
- end
37
-
38
- def class_variable_set( variable, value ) # :nodoc:
39
- self.class.send( :class_variable_set, variable, value )
40
- end
41
-
42
- def select( conditions = {}, options = {} )
43
- sql = "SELECT " + base_table.columns.keys.map{ | field | "#{base_table.table_name}.\"#{field}\"" }.join( "," )
44
- join_rules.each do | rules |
45
- rules.each do | table, fields |
46
- sql += ','
47
- sql += table.columns.keys.map{ | field | "#{table.table_name}.\"#{field}\"" }.join( ',' )
48
- end
49
- end
50
- sql += " FROM "
51
- sql += base_table.full_name
52
- join_rules.each do | rules |
53
- rules.each do | table_name, fields |
54
- fields = fields.class === Array ? fields : [fields]
55
- sql += " INNER JOIN #{table_name} USING(#{fields.join(', ')})"
56
- end
57
- end
58
- sql += self.class.compile_where( conditions )
59
- @data = []
60
- self.class.database.execute( sql )
61
- end
62
-
63
- end
64
-
65
- end
66
-
data/test/test_join.rb DELETED
@@ -1,19 +0,0 @@
1
-
2
- class Person < Momomoto::Table; end
3
- class Event_Person < Momomoto::Table; end
4
-
5
- class TestJoin < Test::Unit::TestCase
6
-
7
- def test_initialize
8
- a = Momomoto::Join.new( Person, {Event_Person=>:person_id})
9
- assert_equal( true, a.respond_to?( :event_person ) )
10
- assert_equal( true, a.respond_to?( :person ) )
11
- end
12
-
13
- def test_select
14
- a = Momomoto::Join.new( Person, {Event_Person=>:person_id})
15
- a.select
16
- end
17
-
18
- end
19
-