og 0.29.0 → 0.30.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.
- data/ProjectInfo +17 -28
 - data/README +6 -6
 - data/doc/AUTHORS +6 -0
 - data/doc/RELEASES +36 -0
 - data/lib/glue/hierarchical.rb +3 -4
 - data/lib/glue/optimistic_locking.rb +1 -1
 - data/lib/glue/orderable.rb +3 -3
 - data/lib/glue/taggable.rb +29 -26
 - data/lib/glue/timestamped.rb +3 -4
 - data/lib/og.rb +21 -9
 - data/lib/og/entity.rb +44 -2
 - data/lib/og/manager.rb +9 -6
 - data/lib/og/markers.rb +9 -1
 - data/lib/og/relation.rb +9 -5
 - data/lib/og/relation/joins_many.rb +2 -2
 - data/lib/og/store/alpha/memory.rb +8 -8
 - data/lib/og/store/alpha/sqlserver.rb +3 -3
 - data/lib/og/store/kirby.rb +422 -279
 - data/lib/og/store/mysql.rb +33 -24
 - data/lib/og/store/psql.rb +28 -18
 - data/lib/og/store/sql.rb +99 -33
 - data/lib/og/store/sqlite.rb +13 -7
 - data/lib/og/store/sqlite2.rb +14 -4
 - data/test/og/CONFIG.rb +2 -2
 - data/test/og/store/tc_sti.rb +41 -0
 - data/test/og/tc_aggregations_calculations.rb +8 -2
 - data/test/og/tc_cacheable.rb +6 -2
 - data/test/og/tc_camel_case_join.rb +51 -0
 - data/test/og/tc_ez.rb +30 -1
 - data/test/og/tc_join.rb +73 -6
 - data/test/og/tc_multi_validations.rb +1 -1
 - metadata +53 -53
 - data/Rakefile +0 -220
 
    
        data/Rakefile
    DELETED
    
    | 
         @@ -1,220 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            require 'rake/rdoctask'
         
     | 
| 
       2 
     | 
    
         
            -
            require 'rake/testtask'
         
     | 
| 
       3 
     | 
    
         
            -
            require 'rake/gempackagetask'
         
     | 
| 
       4 
     | 
    
         
            -
             
     | 
| 
       5 
     | 
    
         
            -
            # Initialize some variables.
         
     | 
| 
       6 
     | 
    
         
            -
             
     | 
| 
       7 
     | 
    
         
            -
            readme = File.read('README')
         
     | 
| 
       8 
     | 
    
         
            -
            Release = (readme[/^= (.+) README$/, 1] || 'unknown').downcase.tr(" ", "-")
         
     | 
| 
       9 
     | 
    
         
            -
            Name = Release[/\D+/].sub(/\-+$/, '') || 'unknown'
         
     | 
| 
       10 
     | 
    
         
            -
            Version = Release[/[\d.]+/] || 'unknown'
         
     | 
| 
       11 
     | 
    
         
            -
             
     | 
| 
       12 
     | 
    
         
            -
            AuthorName, AuthorMail = 'George Moschovitis', 'gm@navel.gr'
         
     | 
| 
       13 
     | 
    
         
            -
            RubyVersion = '1.8.3' 
         
     | 
| 
       14 
     | 
    
         
            -
             
     | 
| 
       15 
     | 
    
         
            -
            # Description = (readme[/README\s+(.+?)\n\n/m, 1] || "unknown").gsub(/\s+/, " ")
         
     | 
| 
       16 
     | 
    
         
            -
            # Summary = Description[/^.+?>/] || "unknown"
         
     | 
| 
       17 
     | 
    
         
            -
             
     | 
| 
       18 
     | 
    
         
            -
            # DocFiles = %w(README NEWS TODO COPYING GPL)
         
     | 
| 
       19 
     | 
    
         
            -
            # RDocFiles = DocFiles - %w(GPL)
         
     | 
| 
       20 
     | 
    
         
            -
            RDocOpts = ["--inline-source", "--line-numbers","--title", Name ]
         
     | 
| 
       21 
     | 
    
         
            -
            # AdditionalFiles = DocFiles + %w(setup.rb)
         
     | 
| 
       22 
     | 
    
         
            -
            VersionFile = MainFile = File.join("lib", Name + '.rb')
         
     | 
| 
       23 
     | 
    
         
            -
             
     | 
| 
       24 
     | 
    
         
            -
            RubyForgeProject = 'nitro' 
         
     | 
| 
       25 
     | 
    
         
            -
            RubyForgeUser = 'gmosx'
         
     | 
| 
       26 
     | 
    
         
            -
            Homepage = "http://www.nitrohq.com/"
         
     | 
| 
       27 
     | 
    
         
            -
             
     | 
| 
       28 
     | 
    
         
            -
            task :default => :package
         
     | 
| 
       29 
     | 
    
         
            -
             
     | 
| 
       30 
     | 
    
         
            -
            # Run the tests.
         
     | 
| 
       31 
     | 
    
         
            -
             
     | 
| 
       32 
     | 
    
         
            -
            Rake::TestTask.new do |t|
         
     | 
| 
       33 
     | 
    
         
            -
              cwd = File.expand_path(File.join(File.dirname(__FILE__), '..'))
         
     | 
| 
       34 
     | 
    
         
            -
              t.libs << 'test'
         
     | 
| 
       35 
     | 
    
         
            -
              %w[glue nitro og].each do |dir|
         
     | 
| 
       36 
     | 
    
         
            -
                t.libs << File.join(cwd, dir, 'lib')
         
     | 
| 
       37 
     | 
    
         
            -
              end
         
     | 
| 
       38 
     | 
    
         
            -
              t.test_files = FileList['test/**/tc*.rb']
         
     | 
| 
       39 
     | 
    
         
            -
              t.verbose = true
         
     | 
| 
       40 
     | 
    
         
            -
            end
         
     | 
| 
       41 
     | 
    
         
            -
             
     | 
| 
       42 
     | 
    
         
            -
            # Generate RDoc documentation.
         
     | 
| 
       43 
     | 
    
         
            -
             
     | 
| 
       44 
     | 
    
         
            -
            Rake::RDocTask.new do |rd|
         
     | 
| 
       45 
     | 
    
         
            -
              rd.main = 'README'
         
     | 
| 
       46 
     | 
    
         
            -
              rd.rdoc_dir = 'rdoc'
         
     | 
| 
       47 
     | 
    
         
            -
              rd.rdoc_files.include('README', 'INSTALL', 'doc/tutorial.txt', 'lib/**/*.rb')
         
     | 
| 
       48 
     | 
    
         
            -
              rd.options << '--all --inline-source'
         
     | 
| 
       49 
     | 
    
         
            -
            end
         
     | 
| 
       50 
     | 
    
         
            -
             
     | 
| 
       51 
     | 
    
         
            -
            # Build gem.
         
     | 
| 
       52 
     | 
    
         
            -
             
     | 
| 
       53 
     | 
    
         
            -
            spec = Gem::Specification.new do |s|
         
     | 
| 
       54 
     | 
    
         
            -
              s.name = 'og'
         
     | 
| 
       55 
     | 
    
         
            -
              if File.read('lib/og.rb') =~ /Version\s+=\s+'(\d+\.\d+\.\d+)'/
         
     | 
| 
       56 
     | 
    
         
            -
                s.version = $1 
         
     | 
| 
       57 
     | 
    
         
            -
              else
         
     | 
| 
       58 
     | 
    
         
            -
                raise 'No version found'
         
     | 
| 
       59 
     | 
    
         
            -
              end
         
     | 
| 
       60 
     | 
    
         
            -
              s.summary = 'Og (ObjectGraph)'
         
     | 
| 
       61 
     | 
    
         
            -
              s.description = 'An efficient and transparent Object-Relational mapping library'
         
     | 
| 
       62 
     | 
    
         
            -
              
         
     | 
| 
       63 
     | 
    
         
            -
              s.add_dependency 'glue', "= #{s.version}"
         
     | 
| 
       64 
     | 
    
         
            -
              #s.add_dependency 'postgres-pr', '>= 0.3.0'
         
     | 
| 
       65 
     | 
    
         
            -
              #s.add_dependency 'postgres', '>= 0.7.1'
         
     | 
| 
       66 
     | 
    
         
            -
              #s.add_dependency 'sqlite3-ruby', '>= 1.0.0'
         
     | 
| 
       67 
     | 
    
         
            -
              #s.add_dependency 'mysql', '>= 2.5.1'
         
     | 
| 
       68 
     | 
    
         
            -
             
     | 
| 
       69 
     | 
    
         
            -
              s.required_ruby_version = '= 1.8.3'
         
     | 
| 
       70 
     | 
    
         
            -
             
     | 
| 
       71 
     | 
    
         
            -
              s.files = FileList[
         
     | 
| 
       72 
     | 
    
         
            -
                '[A-Z]*', 'setup.rb', '{bin,benchmark,examples,doc,lib,test,vendor}/**/*' 
         
     | 
| 
       73 
     | 
    
         
            -
              ].exclude("_darcs").exclude("_darcs/**/*").exclude('**/*.log').to_a
         
     | 
| 
       74 
     | 
    
         
            -
             
     | 
| 
       75 
     | 
    
         
            -
              s.require_path = 'lib'
         
     | 
| 
       76 
     | 
    
         
            -
              s.autorequire = 'og'
         
     | 
| 
       77 
     | 
    
         
            -
              
         
     | 
| 
       78 
     | 
    
         
            -
              s.has_rdoc = true
         
     | 
| 
       79 
     | 
    
         
            -
              s.extra_rdoc_files = FileList['README', 'INSTALL', 'doc/tutorial.txt'].to_a
         
     | 
| 
       80 
     | 
    
         
            -
              s.rdoc_options << '--main' << 'README' << '--title' << 'Og Documentation'
         
     | 
| 
       81 
     | 
    
         
            -
              s.rdoc_options << '--all' << '--inline-source'
         
     | 
| 
       82 
     | 
    
         
            -
             
     | 
| 
       83 
     | 
    
         
            -
              s.author = 'George Moschovitis'
         
     | 
| 
       84 
     | 
    
         
            -
              s.email = 'gm@navel.gr'
         
     | 
| 
       85 
     | 
    
         
            -
              s.homepage = 'http://www.nitrohq.com'
         
     | 
| 
       86 
     | 
    
         
            -
              s.rubyforge_project = 'nitro'
         
     | 
| 
       87 
     | 
    
         
            -
            end
         
     | 
| 
       88 
     | 
    
         
            -
             
     | 
| 
       89 
     | 
    
         
            -
            Rake::GemPackageTask.new(spec) do |pkg|
         
     | 
| 
       90 
     | 
    
         
            -
              pkg.package_dir = 'dist'
         
     | 
| 
       91 
     | 
    
         
            -
              pkg.need_zip = true
         
     | 
| 
       92 
     | 
    
         
            -
              pkg.need_tar = true
         
     | 
| 
       93 
     | 
    
         
            -
            end
         
     | 
| 
       94 
     | 
    
         
            -
             
     | 
| 
       95 
     | 
    
         
            -
            # Manual install (not recommended).
         
     | 
| 
       96 
     | 
    
         
            -
             
     | 
| 
       97 
     | 
    
         
            -
            task :install do
         
     | 
| 
       98 
     | 
    
         
            -
              ruby 'install.rb'
         
     | 
| 
       99 
     | 
    
         
            -
            end
         
     | 
| 
       100 
     | 
    
         
            -
             
     | 
| 
       101 
     | 
    
         
            -
            # Release files to Rubyforge.
         
     | 
| 
       102 
     | 
    
         
            -
            # The code for this task provided by Florian Gross.
         
     | 
| 
       103 
     | 
    
         
            -
             
     | 
| 
       104 
     | 
    
         
            -
            desc "Publish the release files to RubyForge."
         
     | 
| 
       105 
     | 
    
         
            -
            task :publish => [:package] do
         
     | 
| 
       106 
     | 
    
         
            -
              files = ['gem', 'tgz', 'zip'].map { |ext| "dist/#{Release}.#{ext}" }
         
     | 
| 
       107 
     | 
    
         
            -
             
     | 
| 
       108 
     | 
    
         
            -
              if RubyForgeProject then
         
     | 
| 
       109 
     | 
    
         
            -
                require 'net/http'
         
     | 
| 
       110 
     | 
    
         
            -
                require 'open-uri'
         
     | 
| 
       111 
     | 
    
         
            -
             
     | 
| 
       112 
     | 
    
         
            -
                changes = ''
         
     | 
| 
       113 
     | 
    
         
            -
                if File.exist?('doc/RELEASES') then
         
     | 
| 
       114 
     | 
    
         
            -
                  changes_re = /^== \s+ Version \s+ #{Regexp.quote(Version)} \s*
         
     | 
| 
       115 
     | 
    
         
            -
                                (.+?) (?:==|\Z)/mx
         
     | 
| 
       116 
     | 
    
         
            -
                  changes = File.read('doc/RELEASES')[changes_re, 1] || ''
         
     | 
| 
       117 
     | 
    
         
            -
                end
         
     | 
| 
       118 
     | 
    
         
            -
             
     | 
| 
       119 
     | 
    
         
            -
                project_uri = "http://rubyforge.org/projects/#{RubyForgeProject}/"
         
     | 
| 
       120 
     | 
    
         
            -
                project_data = open(project_uri) { |data| data.read }
         
     | 
| 
       121 
     | 
    
         
            -
                group_id = project_data[/[?&]group_id=(\d+)/, 1]
         
     | 
| 
       122 
     | 
    
         
            -
                raise "Couldn't get group id" unless group_id
         
     | 
| 
       123 
     | 
    
         
            -
             
     | 
| 
       124 
     | 
    
         
            -
                print "#{RubyForgeUser}@rubyforge.org's password: "
         
     | 
| 
       125 
     | 
    
         
            -
                password = STDIN.gets.chomp
         
     | 
| 
       126 
     | 
    
         
            -
             
     | 
| 
       127 
     | 
    
         
            -
                login_response = Net::HTTP.start('rubyforge.org', 80) do |http|
         
     | 
| 
       128 
     | 
    
         
            -
                  data = [
         
     | 
| 
       129 
     | 
    
         
            -
                    "login=1",
         
     | 
| 
       130 
     | 
    
         
            -
                    "form_loginname=#{RubyForgeUser}",
         
     | 
| 
       131 
     | 
    
         
            -
                    "form_pw=#{password}"
         
     | 
| 
       132 
     | 
    
         
            -
                  ].join("&")
         
     | 
| 
       133 
     | 
    
         
            -
                  http.post('/account/login.php', data)
         
     | 
| 
       134 
     | 
    
         
            -
                end
         
     | 
| 
       135 
     | 
    
         
            -
             
     | 
| 
       136 
     | 
    
         
            -
                cookie = login_response['set-cookie']
         
     | 
| 
       137 
     | 
    
         
            -
                raise 'Login failed' unless cookie
         
     | 
| 
       138 
     | 
    
         
            -
                headers = { 'Cookie' => cookie }
         
     | 
| 
       139 
     | 
    
         
            -
             
     | 
| 
       140 
     | 
    
         
            -
                release_uri = "http://rubyforge.org/frs/admin/?group_id=#{group_id}"
         
     | 
| 
       141 
     | 
    
         
            -
                release_data = open(release_uri, headers) { |data| data.read }
         
     | 
| 
       142 
     | 
    
         
            -
                package_id = release_data[/[?&]package_id=(\d+)/, 1]
         
     | 
| 
       143 
     | 
    
         
            -
                raise "Couldn't get package id" unless package_id
         
     | 
| 
       144 
     | 
    
         
            -
             
     | 
| 
       145 
     | 
    
         
            -
                first_file = true
         
     | 
| 
       146 
     | 
    
         
            -
                release_id = ""
         
     | 
| 
       147 
     | 
    
         
            -
             
     | 
| 
       148 
     | 
    
         
            -
                files.each do |filename|
         
     | 
| 
       149 
     | 
    
         
            -
                  basename = File.basename(filename)
         
     | 
| 
       150 
     | 
    
         
            -
                  file_ext = File.extname(filename)
         
     | 
| 
       151 
     | 
    
         
            -
                  file_data = File.open(filename, "rb") { |file| file.read }
         
     | 
| 
       152 
     | 
    
         
            -
             
     | 
| 
       153 
     | 
    
         
            -
                  puts "Releasing #{basename}..."
         
     | 
| 
       154 
     | 
    
         
            -
             
     | 
| 
       155 
     | 
    
         
            -
                  release_response = Net::HTTP.start('rubyforge.org', 80) do |http|
         
     | 
| 
       156 
     | 
    
         
            -
                    release_date = Time.now.strftime('%Y-%m-%d %H:%M')
         
     | 
| 
       157 
     | 
    
         
            -
                    type_map = {
         
     | 
| 
       158 
     | 
    
         
            -
                      '.zip'    => '3000',
         
     | 
| 
       159 
     | 
    
         
            -
                      '.tgz'    => '3110',
         
     | 
| 
       160 
     | 
    
         
            -
                      '.gz'     => '3110',
         
     | 
| 
       161 
     | 
    
         
            -
                      '.gem'    => '1400',
         
     | 
| 
       162 
     | 
    
         
            -
                      '.md5sum' => '8100'
         
     | 
| 
       163 
     | 
    
         
            -
                    }; type_map.default = '9999'
         
     | 
| 
       164 
     | 
    
         
            -
                    type = type_map[file_ext]
         
     | 
| 
       165 
     | 
    
         
            -
                    boundary = 'rubyqMY6QN9bp6e4kS21H4y0zxcvoor'
         
     | 
| 
       166 
     | 
    
         
            -
             
     | 
| 
       167 
     | 
    
         
            -
                    query_hash = if first_file then
         
     | 
| 
       168 
     | 
    
         
            -
                      {
         
     | 
| 
       169 
     | 
    
         
            -
                        'group_id' => group_id,
         
     | 
| 
       170 
     | 
    
         
            -
                        'package_id' => package_id,
         
     | 
| 
       171 
     | 
    
         
            -
                        'release_name' => Release,
         
     | 
| 
       172 
     | 
    
         
            -
                        'release_date' => release_date,
         
     | 
| 
       173 
     | 
    
         
            -
                        'type_id' => type,
         
     | 
| 
       174 
     | 
    
         
            -
                        'processor_id' => '8000', # Any
         
     | 
| 
       175 
     | 
    
         
            -
                        'release_notes' => '',
         
     | 
| 
       176 
     | 
    
         
            -
                        'release_changes' => changes,
         
     | 
| 
       177 
     | 
    
         
            -
                        'preformatted' => '1',
         
     | 
| 
       178 
     | 
    
         
            -
                        'submit' => '1'
         
     | 
| 
       179 
     | 
    
         
            -
                      }
         
     | 
| 
       180 
     | 
    
         
            -
                    else
         
     | 
| 
       181 
     | 
    
         
            -
                      {
         
     | 
| 
       182 
     | 
    
         
            -
                        'group_id' => group_id,
         
     | 
| 
       183 
     | 
    
         
            -
                        'release_id' => release_id,
         
     | 
| 
       184 
     | 
    
         
            -
                        'package_id' => package_id,
         
     | 
| 
       185 
     | 
    
         
            -
                        'step2' => '1',
         
     | 
| 
       186 
     | 
    
         
            -
                        'type_id' => type,
         
     | 
| 
       187 
     | 
    
         
            -
                        'processor_id' => '8000', # Any
         
     | 
| 
       188 
     | 
    
         
            -
                        'submit' => 'Add This File'
         
     | 
| 
       189 
     | 
    
         
            -
                      }
         
     | 
| 
       190 
     | 
    
         
            -
                    end
         
     | 
| 
       191 
     | 
    
         
            -
             
     | 
| 
       192 
     | 
    
         
            -
                    query = '?' + query_hash.map do |(name, value)|
         
     | 
| 
       193 
     | 
    
         
            -
                      [name, URI.encode(value)].join('=')
         
     | 
| 
       194 
     | 
    
         
            -
                    end.join('&')
         
     | 
| 
       195 
     | 
    
         
            -
             
     | 
| 
       196 
     | 
    
         
            -
                    data = [
         
     | 
| 
       197 
     | 
    
         
            -
                      "--" + boundary,
         
     | 
| 
       198 
     | 
    
         
            -
                      "Content-Disposition: form-data; name=\"userfile\"; filename=\"#{basename}\"",
         
     | 
| 
       199 
     | 
    
         
            -
                      "Content-Type: application/octet-stream",
         
     | 
| 
       200 
     | 
    
         
            -
                      "Content-Transfer-Encoding: binary",
         
     | 
| 
       201 
     | 
    
         
            -
                      "", file_data, ""
         
     | 
| 
       202 
     | 
    
         
            -
                      ].join("\x0D\x0A")
         
     | 
| 
       203 
     | 
    
         
            -
             
     | 
| 
       204 
     | 
    
         
            -
                    release_headers = headers.merge(
         
     | 
| 
       205 
     | 
    
         
            -
                      'Content-Type' => "multipart/form-data; boundary=#{boundary}"
         
     | 
| 
       206 
     | 
    
         
            -
                    )
         
     | 
| 
       207 
     | 
    
         
            -
             
     | 
| 
       208 
     | 
    
         
            -
                    target = first_file ? '/frs/admin/qrs.php' : '/frs/admin/editrelease.php'
         
     | 
| 
       209 
     | 
    
         
            -
                    http.post(target + query, data, release_headers)
         
     | 
| 
       210 
     | 
    
         
            -
                  end
         
     | 
| 
       211 
     | 
    
         
            -
             
     | 
| 
       212 
     | 
    
         
            -
                  if first_file then
         
     | 
| 
       213 
     | 
    
         
            -
                    release_id = release_response.body[/release_id=(\d+)/, 1]
         
     | 
| 
       214 
     | 
    
         
            -
                    raise("Couldn't get release id") unless release_id
         
     | 
| 
       215 
     | 
    
         
            -
                  end
         
     | 
| 
       216 
     | 
    
         
            -
             
     | 
| 
       217 
     | 
    
         
            -
                  first_file = false
         
     | 
| 
       218 
     | 
    
         
            -
                end
         
     | 
| 
       219 
     | 
    
         
            -
              end
         
     | 
| 
       220 
     | 
    
         
            -
            end
         
     |