table 0.1.1
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/table/USAGE +11 -0
 - data/table/table_generator.rb +105 -0
 - metadata +49 -0
 
    
        data/table/USAGE
    ADDED
    
    | 
         @@ -0,0 +1,11 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            Description:
         
     | 
| 
      
 2 
     | 
    
         
            +
                The table generator simply generates a database table for storing data from a model object.  If the model and or scaffole do not exist, it creates them as well. Minimum parameters are a table name followed by at least one field name.
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            Example:
         
     | 
| 
      
 5 
     | 
    
         
            +
                ./script/generate table Branch name 
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            Example:
         
     | 
| 
      
 8 
     | 
    
         
            +
                ./script/generate table Account account_no:integer:10 type:varchar:50 balance:float created_on:date branch_id:int
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
             
         
     | 
| 
         @@ -0,0 +1,105 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            class TableColumn
         
     | 
| 
      
 2 
     | 
    
         
            +
              attr_writer :name, :type, :typeSize
         
     | 
| 
      
 3 
     | 
    
         
            +
              attr_reader :name, :type, :typeSize
         
     | 
| 
      
 4 
     | 
    
         
            +
              @@types = Array['varchar', 'int', 'datetime', 'float', 'text' ]
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
              def initialize(name, type, typeSize )
         
     | 
| 
      
 7 
     | 
    
         
            +
                @type='varchar'
         
     | 
| 
      
 8 
     | 
    
         
            +
                @typeSize = '50' 
         
     | 
| 
      
 9 
     | 
    
         
            +
                if (type=='int') : @typeSize = '10' end
         
     | 
| 
      
 10 
     | 
    
         
            +
                @name=name
         
     | 
| 
      
 11 
     | 
    
         
            +
                if (type != nil) : self.type=type end
         
     | 
| 
      
 12 
     | 
    
         
            +
                if (typeSize !=nil) : self.typeSize=typeSize end
         
     | 
| 
      
 13 
     | 
    
         
            +
              end
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
              def type=(t)
         
     | 
| 
      
 16 
     | 
    
         
            +
                t = t.downcase     
         
     | 
| 
      
 17 
     | 
    
         
            +
                if (t.match('^b')) 
         
     | 
| 
      
 18 
     | 
    
         
            +
                   @type='int' 
         
     | 
| 
      
 19 
     | 
    
         
            +
                   @typeSize = '1'
         
     | 
| 
      
 20 
     | 
    
         
            +
                elsif (t.match('^s')) : @type='varchar' 
         
     | 
| 
      
 21 
     | 
    
         
            +
                elsif (@@types.include? t) : @type=t
         
     | 
| 
      
 22 
     | 
    
         
            +
                else @@types.each{|type|  
         
     | 
| 
      
 23 
     | 
    
         
            +
                    @type = type if (type[0]==t[0])
         
     | 
| 
      
 24 
     | 
    
         
            +
                  }
         
     | 
| 
      
 25 
     | 
    
         
            +
                end
         
     | 
| 
      
 26 
     | 
    
         
            +
              end
         
     | 
| 
      
 27 
     | 
    
         
            +
              def to_s
         
     | 
| 
      
 28 
     | 
    
         
            +
                   sql = '`'+name+'` '+type
         
     | 
| 
      
 29 
     | 
    
         
            +
                   sql << '('+typeSize+')' if(type=='int' || type=='varchar')
         
     | 
| 
      
 30 
     | 
    
         
            +
                   sql  
         
     | 
| 
      
 31 
     | 
    
         
            +
              end 
         
     | 
| 
      
 32 
     | 
    
         
            +
            end
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
            class TableGenerator < Rails::Generator::NamedBase
         
     | 
| 
      
 36 
     | 
    
         
            +
              attr_reader :columns 
         
     | 
| 
      
 37 
     | 
    
         
            +
              def initialize(runtime_args, runtime_options = {})
         
     | 
| 
      
 38 
     | 
    
         
            +
                super
         
     | 
| 
      
 39 
     | 
    
         
            +
                @columns = Array.new
         
     | 
| 
      
 40 
     | 
    
         
            +
                @args.each {|arg| 
         
     | 
| 
      
 41 
     | 
    
         
            +
                  arr = arg.split(':')
         
     | 
| 
      
 42 
     | 
    
         
            +
                  name = arr[0]
         
     | 
| 
      
 43 
     | 
    
         
            +
                  type = arr[1] if arr.length>1   
         
     | 
| 
      
 44 
     | 
    
         
            +
                  length = arr[2] if arr.length>2
         
     | 
| 
      
 45 
     | 
    
         
            +
                  @columns.push TableColumn.new(name, type, length)
         
     | 
| 
      
 46 
     | 
    
         
            +
                }     
         
     | 
| 
      
 47 
     | 
    
         
            +
              end
         
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
      
 49 
     | 
    
         
            +
              # Removed director logic.
         
     | 
| 
      
 50 
     | 
    
         
            +
              # way easier to append namespace at the begining of the tablename.
         
     | 
| 
      
 51 
     | 
    
         
            +
              def manifest
         
     | 
| 
      
 52 
     | 
    
         
            +
                 record do |m|
         
     | 
| 
      
 53 
     | 
    
         
            +
                  # Check for class naming collisions.
         
     | 
| 
      
 54 
     | 
    
         
            +
                  m.class_collisions class_path, class_name 
         
     | 
| 
      
 55 
     | 
    
         
            +
                  # I tried using m.template to create sql but there's a catch22:
         
     | 
| 
      
 56 
     | 
    
         
            +
                  # With template, The correct sql files aren't created until after
         
     | 
| 
      
 57 
     | 
    
         
            +
                  # the mainifest is done, but the table has to exist
         
     | 
| 
      
 58 
     | 
    
         
            +
                  # before the scaffold generator is run. 
         
     | 
| 
      
 59 
     | 
    
         
            +
                  tablename = table_name 
         
     | 
| 
      
 60 
     | 
    
         
            +
                  # class path info is used as a table prefix.
         
     | 
| 
      
 61 
     | 
    
         
            +
                  if class_path.any? 
         
     | 
| 
      
 62 
     | 
    
         
            +
                    tablename = class_path.last + '_' + tablename 
         
     | 
| 
      
 63 
     | 
    
         
            +
                  end
         
     | 
| 
      
 64 
     | 
    
         
            +
               
         
     | 
| 
      
 65 
     | 
    
         
            +
                  sql =  createSql(tablename) 
         
     | 
| 
      
 66 
     | 
    
         
            +
             
     | 
| 
      
 67 
     | 
    
         
            +
                  if options[:command] == :destroy 
         
     | 
| 
      
 68 
     | 
    
         
            +
                    sql = dropSql(tablename)
         
     | 
| 
      
 69 
     | 
    
         
            +
                  else
         
     | 
| 
      
 70 
     | 
    
         
            +
                    # need #{RAILS_ROOT} here for running from FastCGI
         
     | 
| 
      
 71 
     | 
    
         
            +
                    tableSqlFileName = File.join("#{RAILS_ROOT}",'db',"#{tablename}.sql")
         
     | 
| 
      
 72 
     | 
    
         
            +
                    sqlFile = File.open(tableSqlFileName,'w')
         
     | 
| 
      
 73 
     | 
    
         
            +
                    sqlFile.write(sql)
         
     | 
| 
      
 74 
     | 
    
         
            +
                    sqlFile.close 
         
     | 
| 
      
 75 
     | 
    
         
            +
                    # scaffold generator needs to know about the prefix.
         
     | 
| 
      
 76 
     | 
    
         
            +
                    if class_path.any? 
         
     | 
| 
      
 77 
     | 
    
         
            +
                      ActiveRecord::Base.table_name_prefix = class_path.last+"_" 
         
     | 
| 
      
 78 
     | 
    
         
            +
                    end
         
     | 
| 
      
 79 
     | 
    
         
            +
                    logger.debug(class_path.last) 
         
     | 
| 
      
 80 
     | 
    
         
            +
                  end
         
     | 
| 
      
 81 
     | 
    
         
            +
                  ActiveRecord::Base.connection.execute(sql)
         
     | 
| 
      
 82 
     | 
    
         
            +
                  options[:generator] = 'scaffold'
         
     | 
| 
      
 83 
     | 
    
         
            +
                  # name is passed twice to enforce singular controller names.     
         
     | 
| 
      
 84 
     | 
    
         
            +
                  logger.debug(name)
         
     | 
| 
      
 85 
     | 
    
         
            +
                  m.dependency 'scaffold', [name, name], options
         
     | 
| 
      
 86 
     | 
    
         
            +
                 end
         
     | 
| 
      
 87 
     | 
    
         
            +
              end
         
     | 
| 
      
 88 
     | 
    
         
            +
             
         
     | 
| 
      
 89 
     | 
    
         
            +
             
         
     | 
| 
      
 90 
     | 
    
         
            +
             
         
     | 
| 
      
 91 
     | 
    
         
            +
              private 
         
     | 
| 
      
 92 
     | 
    
         
            +
             
     | 
| 
      
 93 
     | 
    
         
            +
              def createSql(name)
         
     | 
| 
      
 94 
     | 
    
         
            +
               'CREATE TABLE `'+name+'` ('+
         
     | 
| 
      
 95 
     | 
    
         
            +
               '`id` int(10) unsigned zerofill NOT NULL auto_increment,'+
         
     | 
| 
      
 96 
     | 
    
         
            +
                @columns.join(", ") +', PRIMARY KEY  (`id`) )'
         
     | 
| 
      
 97 
     | 
    
         
            +
              end 
         
     | 
| 
      
 98 
     | 
    
         
            +
             
     | 
| 
      
 99 
     | 
    
         
            +
              def dropSql(name)
         
     | 
| 
      
 100 
     | 
    
         
            +
               'drop TABLE `'+name+'`'
         
     | 
| 
      
 101 
     | 
    
         
            +
              end 
         
     | 
| 
      
 102 
     | 
    
         
            +
             
     | 
| 
      
 103 
     | 
    
         
            +
             
     | 
| 
      
 104 
     | 
    
         
            +
            end
         
     | 
| 
      
 105 
     | 
    
         
            +
             
     | 
    
        metadata
    ADDED
    
    | 
         @@ -0,0 +1,49 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            --- !ruby/object:Gem::Specification 
         
     | 
| 
      
 2 
     | 
    
         
            +
            rubygems_version: 0.8.10
         
     | 
| 
      
 3 
     | 
    
         
            +
            specification_version: 1
         
     | 
| 
      
 4 
     | 
    
         
            +
            name: table
         
     | 
| 
      
 5 
     | 
    
         
            +
            version: !ruby/object:Gem::Version 
         
     | 
| 
      
 6 
     | 
    
         
            +
              version: 0.1.1
         
     | 
| 
      
 7 
     | 
    
         
            +
            date: 2005-12-06
         
     | 
| 
      
 8 
     | 
    
         
            +
            summary: Rails Table Generator
         
     | 
| 
      
 9 
     | 
    
         
            +
            require_paths: 
         
     | 
| 
      
 10 
     | 
    
         
            +
              - lib
         
     | 
| 
      
 11 
     | 
    
         
            +
            email: 
         
     | 
| 
      
 12 
     | 
    
         
            +
            homepage: 
         
     | 
| 
      
 13 
     | 
    
         
            +
            rubyforge_project: 
         
     | 
| 
      
 14 
     | 
    
         
            +
            description: "table generator simply generates a database table for storing data from a model
         
     | 
| 
      
 15 
     | 
    
         
            +
              object.  If the model and or scaffold do not exist, it creates them as well."
         
     | 
| 
      
 16 
     | 
    
         
            +
            autorequire: 
         
     | 
| 
      
 17 
     | 
    
         
            +
            default_executable: 
         
     | 
| 
      
 18 
     | 
    
         
            +
            bindir: bin
         
     | 
| 
      
 19 
     | 
    
         
            +
            has_rdoc: false
         
     | 
| 
      
 20 
     | 
    
         
            +
            required_ruby_version: !ruby/object:Gem::Version::Requirement 
         
     | 
| 
      
 21 
     | 
    
         
            +
              requirements: 
         
     | 
| 
      
 22 
     | 
    
         
            +
                - 
         
     | 
| 
      
 23 
     | 
    
         
            +
                  - ">"
         
     | 
| 
      
 24 
     | 
    
         
            +
                  - !ruby/object:Gem::Version 
         
     | 
| 
      
 25 
     | 
    
         
            +
                    version: 0.0.0
         
     | 
| 
      
 26 
     | 
    
         
            +
              version: 
         
     | 
| 
      
 27 
     | 
    
         
            +
            platform: ruby
         
     | 
| 
      
 28 
     | 
    
         
            +
            authors: []
         
     | 
| 
      
 29 
     | 
    
         
            +
            files: 
         
     | 
| 
      
 30 
     | 
    
         
            +
              - table/table_generator.rb
         
     | 
| 
      
 31 
     | 
    
         
            +
              - table/USAGE
         
     | 
| 
      
 32 
     | 
    
         
            +
            test_files: []
         
     | 
| 
      
 33 
     | 
    
         
            +
            rdoc_options: []
         
     | 
| 
      
 34 
     | 
    
         
            +
            extra_rdoc_files: []
         
     | 
| 
      
 35 
     | 
    
         
            +
            executables: []
         
     | 
| 
      
 36 
     | 
    
         
            +
            extensions: []
         
     | 
| 
      
 37 
     | 
    
         
            +
            requirements: 
         
     | 
| 
      
 38 
     | 
    
         
            +
              - rails
         
     | 
| 
      
 39 
     | 
    
         
            +
            dependencies: 
         
     | 
| 
      
 40 
     | 
    
         
            +
              - !ruby/object:Gem::Dependency 
         
     | 
| 
      
 41 
     | 
    
         
            +
                name: rails
         
     | 
| 
      
 42 
     | 
    
         
            +
                version_requirement: 
         
     | 
| 
      
 43 
     | 
    
         
            +
                version_requirements: !ruby/object:Gem::Version::Requirement 
         
     | 
| 
      
 44 
     | 
    
         
            +
                  requirements: 
         
     | 
| 
      
 45 
     | 
    
         
            +
                    - 
         
     | 
| 
      
 46 
     | 
    
         
            +
                      - ">="
         
     | 
| 
      
 47 
     | 
    
         
            +
                      - !ruby/object:Gem::Version 
         
     | 
| 
      
 48 
     | 
    
         
            +
                        version: 0.13.1
         
     | 
| 
      
 49 
     | 
    
         
            +
                  version: 
         
     |