kwatable 0.0.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/COPYING +340 -0
- data/ChangeLog.txt +27 -0
- data/README.txt +81 -0
- data/bin/kwatable +20 -0
- data/examples/ex1/Makefile +34 -0
- data/examples/ex1/example1.yaml +85 -0
- data/examples/ex2/Makefile +34 -0
- data/examples/ex2/example2.yaml +94 -0
- data/kwatable.gemspec +48 -0
- data/lib/kwatable.rb +31 -0
- data/lib/kwatable/error-msg.rb +37 -0
- data/lib/kwatable/kwatable.schema.yaml +133 -0
- data/lib/kwatable/main-program.rb +197 -0
- data/lib/kwatable/manufactory.rb +213 -0
- data/lib/kwatable/templates/ddl-mysql.eruby +169 -0
- data/lib/kwatable/templates/ddl-postgresql.eruby +153 -0
- data/lib/kwatable/templates/defaults.yaml +87 -0
- data/lib/kwatable/templates/dto-java.eruby +204 -0
- data/lib/kwatable/templates/dto-ruby.eruby +180 -0
- data/setup.rb +1331 -0
- data/test/assert-diff.rb +44 -0
- data/test/test.rb +202 -0
- data/test/test1/test1.ddl-mysql.expected +22 -0
- data/test/test1/test1.ddl-postgresql.expected +22 -0
- data/test/test1/test1.dto-java.Group.expected +32 -0
- data/test/test1/test1.dto-java.User.expected +59 -0
- data/test/test1/test1.dto-ruby.Group.expected +21 -0
- data/test/test1/test1.dto-ruby.User.expected +36 -0
- data/test/test1/test1.yaml +85 -0
- data/test/test2/test2.ddl-mysql.expected +49 -0
- data/test/test2/test2.ddl-postgresql.expected +49 -0
- data/test/test2/test2.dto-java.Address.expected +42 -0
- data/test/test2/test2.dto-java.Customer.expected +49 -0
- data/test/test2/test2.dto-java.Item.expected +37 -0
- data/test/test2/test2.dto-java.SalesOrder.expected +50 -0
- data/test/test2/test2.dto-java.SalesOrderLine.expected +56 -0
- data/test/test2/test2.dto-ruby.Address.expected +25 -0
- data/test/test2/test2.dto-ruby.Customer.expected +32 -0
- data/test/test2/test2.dto-ruby.Item.expected +23 -0
- data/test/test2/test2.dto-ruby.SalesOrder.expected +32 -0
- data/test/test2/test2.dto-ruby.SalesOrderLine.expected +39 -0
- data/test/test2/test2.yaml +94 -0
- metadata +91 -0
| @@ -0,0 +1,153 @@ | |
| 1 | 
            +
            <%
         | 
| 2 | 
            +
             | 
| 3 | 
            +
               ##
         | 
| 4 | 
            +
               ## kwatable template file for PostgreSQL
         | 
| 5 | 
            +
               ##
         | 
| 6 | 
            +
               ## copyright(c) 2005 kuwata-lab.com all rights reserved.
         | 
| 7 | 
            +
               ## $Release: 0.0.1 $
         | 
| 8 | 
            +
               ## $Rev: 12 $
         | 
| 9 | 
            +
               ##
         | 
| 10 | 
            +
               ## template properties:
         | 
| 11 | 
            +
               ##   (none)
         | 
| 12 | 
            +
             | 
| 13 | 
            +
             | 
| 14 | 
            +
               #
         | 
| 15 | 
            +
               # context variables
         | 
| 16 | 
            +
               #
         | 
| 17 | 
            +
               tables     = context['tables']
         | 
| 18 | 
            +
               properties = context['properties']
         | 
| 19 | 
            +
               raise "don't use '-m' option with 'ddl-mysql.eruby'." unless tables
         | 
| 20 | 
            +
             | 
| 21 | 
            +
             | 
| 22 | 
            +
               #
         | 
| 23 | 
            +
               # PostgreSQL keywords
         | 
| 24 | 
            +
               #
         | 
| 25 | 
            +
               keywords = <<-END
         | 
| 26 | 
            +
                  abort admin all analyse analyze and any as asc
         | 
| 27 | 
            +
                  between binary bit both
         | 
| 28 | 
            +
                  case cast char character check cluster coalesce
         | 
| 29 | 
            +
                  collate column constraint copy cross current_date
         | 
| 30 | 
            +
                  current_time current_timestamp current_user
         | 
| 31 | 
            +
                  dec decimal default deferrable desc distinct do
         | 
| 32 | 
            +
                  else end except exists explain extend extract
         | 
| 33 | 
            +
                  false float for foreign from full
         | 
| 34 | 
            +
                  global group
         | 
| 35 | 
            +
                  having
         | 
| 36 | 
            +
                  ilike in initially inner inout intersect into is isnull
         | 
| 37 | 
            +
                  join
         | 
| 38 | 
            +
                  leading leftlike limit listen local lock
         | 
| 39 | 
            +
                  move
         | 
| 40 | 
            +
                  natural nchar new not notnull null nullif numeric
         | 
| 41 | 
            +
                  off offset old on only or order out outer overlaps
         | 
| 42 | 
            +
                  position precision primary public
         | 
| 43 | 
            +
                  references reset right
         | 
| 44 | 
            +
                  select session_user setof showsome substring
         | 
| 45 | 
            +
                  table then to trailing transaction trim true
         | 
| 46 | 
            +
                  union unique user using
         | 
| 47 | 
            +
                  vacuum varchar verbose
         | 
| 48 | 
            +
                  when where
         | 
| 49 | 
            +
               END
         | 
| 50 | 
            +
               KEYWORDS = {}
         | 
| 51 | 
            +
               keywords.split(/\s+/).each { |word| KEYWORDS[word] = true }
         | 
| 52 | 
            +
             | 
| 53 | 
            +
             | 
| 54 | 
            +
               #
         | 
| 55 | 
            +
               # escape keyword
         | 
| 56 | 
            +
               #
         | 
| 57 | 
            +
               def _(word)
         | 
| 58 | 
            +
                  return KEYWORDS[word.downcase] ? "\"#{word}\"" : word
         | 
| 59 | 
            +
               end
         | 
| 60 | 
            +
             | 
| 61 | 
            +
             | 
| 62 | 
            +
               #
         | 
| 63 | 
            +
               # start output
         | 
| 64 | 
            +
               #
         | 
| 65 | 
            +
            %>
         | 
| 66 | 
            +
            ----------------------------------------------------------------------
         | 
| 67 | 
            +
            -- DDL for PostgreSQL
         | 
| 68 | 
            +
            --   generated by kwatable with template 'ddl-postgresql.eruby'
         | 
| 69 | 
            +
            --   at <%= Time.now.to_s %>
         | 
| 70 | 
            +
             | 
| 71 | 
            +
            ----------------------------------------------------------------------
         | 
| 72 | 
            +
            <%
         | 
| 73 | 
            +
               #
         | 
| 74 | 
            +
               # create table statement
         | 
| 75 | 
            +
               #
         | 
| 76 | 
            +
             %>
         | 
| 77 | 
            +
            <% for table in tables %>
         | 
| 78 | 
            +
             | 
| 79 | 
            +
            -- <%= table['desc'] %>
         | 
| 80 | 
            +
             | 
| 81 | 
            +
            create table <%= _(table['name']) %> (
         | 
| 82 | 
            +
            <%
         | 
| 83 | 
            +
                  n = table['columns'].length
         | 
| 84 | 
            +
                  i = 0
         | 
| 85 | 
            +
                  for column in table['columns']
         | 
| 86 | 
            +
                     i += 1
         | 
| 87 | 
            +
                     flag_last_loop = (i == n)
         | 
| 88 | 
            +
             | 
| 89 | 
            +
                     name  = column['name']
         | 
| 90 | 
            +
                     type  = column['type']
         | 
| 91 | 
            +
                     width = column['width']
         | 
| 92 | 
            +
             | 
| 93 | 
            +
                     #
         | 
| 94 | 
            +
                     # column type
         | 
| 95 | 
            +
                     #
         | 
| 96 | 
            +
                     case type
         | 
| 97 | 
            +
                     when 'char'      ;
         | 
| 98 | 
            +
                     when 'short'     ;  type = 'smallint'
         | 
| 99 | 
            +
                     when 'int'       ;  type = 'integer'
         | 
| 100 | 
            +
                     when 'inteter'   ;
         | 
| 101 | 
            +
                     when 'str'       ;  type = 'varchar' ; width ||= 255
         | 
| 102 | 
            +
                     when 'string'    ;  type = 'varchar' ; width ||= 255
         | 
| 103 | 
            +
                     when 'text'      ;
         | 
| 104 | 
            +
                     when 'float'     ;  type = 'real'
         | 
| 105 | 
            +
                     when 'double'    ;  type = 'double precision'
         | 
| 106 | 
            +
                     when 'bool'      ;  type = 'boolean'
         | 
| 107 | 
            +
                     when 'boolean'   ;
         | 
| 108 | 
            +
                     when 'date'      ;
         | 
| 109 | 
            +
                     when 'timestamp' ;
         | 
| 110 | 
            +
                     when 'money'     ;  type = 'decimal'
         | 
| 111 | 
            +
                     end
         | 
| 112 | 
            +
                     type += "(#{width})" if width
         | 
| 113 | 
            +
             | 
| 114 | 
            +
                     #
         | 
| 115 | 
            +
                     # use 'bigserial' instead of 'serial' if width is large
         | 
| 116 | 
            +
                     #
         | 
| 117 | 
            +
                     if column['serial']
         | 
| 118 | 
            +
                        type = width && width >= 10 ? 'bigserial' : 'serial'
         | 
| 119 | 
            +
                     end
         | 
| 120 | 
            +
             | 
| 121 | 
            +
                     #
         | 
| 122 | 
            +
                     # constraints
         | 
| 123 | 
            +
                     #
         | 
| 124 | 
            +
                     constraints = []
         | 
| 125 | 
            +
                     constraints << 'not null'    if column['not-null'] && !column['serial'] && !column['primary-key']
         | 
| 126 | 
            +
                     constraints << 'primary key' if column['primary-key']
         | 
| 127 | 
            +
                     constraints << 'unique'      if column['unique']
         | 
| 128 | 
            +
                     constraints << "references #{column['ref-table']['name']}(#{column['ref-column']['name']})" if column['ref-table']
         | 
| 129 | 
            +
             | 
| 130 | 
            +
                     #
         | 
| 131 | 
            +
                     # column definition
         | 
| 132 | 
            +
                     #
         | 
| 133 | 
            +
                     name_part  = '%-20s' % _(name)
         | 
| 134 | 
            +
                     type_part  = '%-20s' % type
         | 
| 135 | 
            +
                     const_part = constraints.join(' ')
         | 
| 136 | 
            +
                     comma   = flag_last_loop ? '' : ','
         | 
| 137 | 
            +
                     comment = column['values'] ? "  -- #{column['values'].join(',')}" : ""
         | 
| 138 | 
            +
             %>
         | 
| 139 | 
            +
               <%= name_part %> <%= type_part %> <%= const_part %><%= comma %><%= comment %>
         | 
| 140 | 
            +
             | 
| 141 | 
            +
            <%
         | 
| 142 | 
            +
                  end
         | 
| 143 | 
            +
             | 
| 144 | 
            +
                  #
         | 
| 145 | 
            +
                  # composite primary key
         | 
| 146 | 
            +
                  #
         | 
| 147 | 
            +
             %>
         | 
| 148 | 
            +
            <%    if table['primary-keys'] %>
         | 
| 149 | 
            +
            <%       pkeystr = table['primary-keys'].collect { |pkey| _(pkey) }.join(', ') %>
         | 
| 150 | 
            +
               , primary key (<%= pkeystr %>)
         | 
| 151 | 
            +
            <%    end %>
         | 
| 152 | 
            +
            );
         | 
| 153 | 
            +
            <% end %>
         | 
| @@ -0,0 +1,87 @@ | |
| 1 | 
            +
            ##
         | 
| 2 | 
            +
            ## default definition of columns
         | 
| 3 | 
            +
            ##
         | 
| 4 | 
            +
            ## copyright(c) 2005 kuwata-lab all rights reserverd
         | 
| 5 | 
            +
            ## 
         | 
| 6 | 
            +
            ## $Id: defaults.yaml 11 2005-09-11 13:15:45Z kwatch $
         | 
| 7 | 
            +
            ## $Release: 0.0.1 $
         | 
| 8 | 
            +
            ##
         | 
| 9 | 
            +
             | 
| 10 | 
            +
            columns:
         | 
| 11 | 
            +
              - name:	id
         | 
| 12 | 
            +
                type:	integer
         | 
| 13 | 
            +
                primary-key: yes
         | 
| 14 | 
            +
                sequence:	yes
         | 
| 15 | 
            +
                
         | 
| 16 | 
            +
              - name:	name
         | 
| 17 | 
            +
                namepattern: /_name$/
         | 
| 18 | 
            +
                type:	string
         | 
| 19 | 
            +
                #not-null:	yes
         | 
| 20 | 
            +
                
         | 
| 21 | 
            +
              - name:	desc
         | 
| 22 | 
            +
                type:	string
         | 
| 23 | 
            +
                
         | 
| 24 | 
            +
              - name:	email
         | 
| 25 | 
            +
                type:	string
         | 
| 26 | 
            +
                
         | 
| 27 | 
            +
              - name:	status
         | 
| 28 | 
            +
                type:	string
         | 
| 29 | 
            +
                
         | 
| 30 | 
            +
              - name:	username
         | 
| 31 | 
            +
                type:	string
         | 
| 32 | 
            +
                
         | 
| 33 | 
            +
              - name:	password
         | 
| 34 | 
            +
                type:	string
         | 
| 35 | 
            +
                
         | 
| 36 | 
            +
              - name:	memo
         | 
| 37 | 
            +
                type:	text
         | 
| 38 | 
            +
                
         | 
| 39 | 
            +
              - name:	note
         | 
| 40 | 
            +
                type:	text
         | 
| 41 | 
            +
                
         | 
| 42 | 
            +
              - name:	comment
         | 
| 43 | 
            +
                type:	text
         | 
| 44 | 
            +
                
         | 
| 45 | 
            +
              - name:	text
         | 
| 46 | 
            +
                type:	text
         | 
| 47 | 
            +
              
         | 
| 48 | 
            +
              - name:	birth
         | 
| 49 | 
            +
                type:	date
         | 
| 50 | 
            +
              
         | 
| 51 | 
            +
              - name:	age
         | 
| 52 | 
            +
                type:	short
         | 
| 53 | 
            +
                constraint:	value >= 0
         | 
| 54 | 
            +
                
         | 
| 55 | 
            +
              - name:	date
         | 
| 56 | 
            +
                namepattern:  /_date$/
         | 
| 57 | 
            +
                type:	date
         | 
| 58 | 
            +
                
         | 
| 59 | 
            +
              - name:	time
         | 
| 60 | 
            +
                namepattern: /_time$/
         | 
| 61 | 
            +
                type:	time
         | 
| 62 | 
            +
                
         | 
| 63 | 
            +
              - name:	gender
         | 
| 64 | 
            +
                type:	char
         | 
| 65 | 
            +
                width:	1
         | 
| 66 | 
            +
                values:
         | 
| 67 | 
            +
                  - M
         | 
| 68 | 
            +
                  - F
         | 
| 69 | 
            +
                  
         | 
| 70 | 
            +
              - name:	blood
         | 
| 71 | 
            +
                type:	char
         | 
| 72 | 
            +
                width:	2
         | 
| 73 | 
            +
                values:
         | 
| 74 | 
            +
                  - A
         | 
| 75 | 
            +
                  - B
         | 
| 76 | 
            +
                  - O
         | 
| 77 | 
            +
                  - AB
         | 
| 78 | 
            +
                
         | 
| 79 | 
            +
              - name:	created_at
         | 
| 80 | 
            +
                type:	timestamp
         | 
| 81 | 
            +
              
         | 
| 82 | 
            +
              - name:	updated_at
         | 
| 83 | 
            +
                type:	timestamp
         | 
| 84 | 
            +
                
         | 
| 85 | 
            +
              - name:	last_update
         | 
| 86 | 
            +
                type:	timestamp
         | 
| 87 | 
            +
             | 
| @@ -0,0 +1,204 @@ | |
| 1 | 
            +
            <%
         | 
| 2 | 
            +
             | 
| 3 | 
            +
               ##
         | 
| 4 | 
            +
               ## kwatable template file for Java DTO class
         | 
| 5 | 
            +
               ##
         | 
| 6 | 
            +
               ## copyright(c) 2005 kuwata-lab.com all rights reserved.
         | 
| 7 | 
            +
               ## $Release: 0.0.1 $
         | 
| 8 | 
            +
               ## $Rev: 12 $
         | 
| 9 | 
            +
               ##
         | 
| 10 | 
            +
               ## template properties:
         | 
| 11 | 
            +
               ##   package   -  package name
         | 
| 12 | 
            +
               ##   parent    -  parent class
         | 
| 13 | 
            +
             | 
| 14 | 
            +
             | 
| 15 | 
            +
               #
         | 
| 16 | 
            +
               # context variables
         | 
| 17 | 
            +
               #
         | 
| 18 | 
            +
               table      = context['table']
         | 
| 19 | 
            +
               properties = context['properties']
         | 
| 20 | 
            +
               raise "option '-m' is required when using 'dto-java.eruby'." unless table
         | 
| 21 | 
            +
             | 
| 22 | 
            +
             | 
| 23 | 
            +
               unless defined?(KEYWORDS)
         | 
| 24 | 
            +
                  #
         | 
| 25 | 
            +
                  # java keywords
         | 
| 26 | 
            +
                  #
         | 
| 27 | 
            +
                  keywords = <<-END
         | 
| 28 | 
            +
                    abstract boolean break byte case catch char class const
         | 
| 29 | 
            +
                    continue default do double else extends final finally float
         | 
| 30 | 
            +
                    for goto if implements import instanceof int interface long
         | 
| 31 | 
            +
                    native new package private protected public return short
         | 
| 32 | 
            +
                    static strictfp super switch synchronized this throw throws
         | 
| 33 | 
            +
                    transient try void volatile while
         | 
| 34 | 
            +
                  END
         | 
| 35 | 
            +
                  KEYWORDS = {}
         | 
| 36 | 
            +
                  keywords.split(/\s+/).each { |word| KEYWORDS[word] = true }
         | 
| 37 | 
            +
             | 
| 38 | 
            +
             | 
| 39 | 
            +
                  #
         | 
| 40 | 
            +
                  # escape java keywords
         | 
| 41 | 
            +
                  #
         | 
| 42 | 
            +
                  def _(word)
         | 
| 43 | 
            +
                     return KEYWORDS[word] ? "_#{word}" : word
         | 
| 44 | 
            +
                  end
         | 
| 45 | 
            +
             | 
| 46 | 
            +
             | 
| 47 | 
            +
                  #
         | 
| 48 | 
            +
                  # convert 'aaa_bbb_ccc' into 'AaaBbbCcc'
         | 
| 49 | 
            +
                  #
         | 
| 50 | 
            +
                  def camel_case(name, flag_all=true)
         | 
| 51 | 
            +
                     s = ''
         | 
| 52 | 
            +
                     name.split('_').each_with_index do |word, i|
         | 
| 53 | 
            +
                        s << (!flag_all && i == 0 ? word.downcase : word.capitalize)
         | 
| 54 | 
            +
                     end
         | 
| 55 | 
            +
                     return s
         | 
| 56 | 
            +
                     #s = name.split('_').collect { |w| w.capitalize }.join()
         | 
| 57 | 
            +
                     #s[0] = s[0].to_s.upcase.chr unless flag_all
         | 
| 58 | 
            +
                  end
         | 
| 59 | 
            +
             | 
| 60 | 
            +
               end
         | 
| 61 | 
            +
               
         | 
| 62 | 
            +
               
         | 
| 63 | 
            +
               #
         | 
| 64 | 
            +
               # class definition
         | 
| 65 | 
            +
               #
         | 
| 66 | 
            +
               klass = {
         | 
| 67 | 
            +
                  :name    => table['class']   || camel_case(table['name']),
         | 
| 68 | 
            +
                  :package => table['package'] || properties[:package],
         | 
| 69 | 
            +
                  :parent  => table['parent']  || properties[:parent],
         | 
| 70 | 
            +
                  :desc    => table['desc'],
         | 
| 71 | 
            +
               }
         | 
| 72 | 
            +
               
         | 
| 73 | 
            +
             | 
| 74 | 
            +
               #
         | 
| 75 | 
            +
               # output file name
         | 
| 76 | 
            +
               #
         | 
| 77 | 
            +
               context[:output_filename] = klass[:name] + ".java"
         | 
| 78 | 
            +
             | 
| 79 | 
            +
             | 
| 80 | 
            +
               #
         | 
| 81 | 
            +
               # instance variables
         | 
| 82 | 
            +
               #
         | 
| 83 | 
            +
               variables = []
         | 
| 84 | 
            +
               imports   = []
         | 
| 85 | 
            +
               for column in table['columns']
         | 
| 86 | 
            +
                  type = column['class']
         | 
| 87 | 
            +
                  unless type
         | 
| 88 | 
            +
                     type  = column['type']
         | 
| 89 | 
            +
                     width = column['width']
         | 
| 90 | 
            +
                     case type
         | 
| 91 | 
            +
                     when 'char'            ;  type = (!width || width == 1) ? 'char' : 'String'
         | 
| 92 | 
            +
                     when 'short'           ;
         | 
| 93 | 
            +
                     when 'int', 'integer'  ;  type = 'int'
         | 
| 94 | 
            +
                     when 'str', 'string'   ;  type = width == 1 ? 'char' : 'String'
         | 
| 95 | 
            +
                     when 'text'            ;  type = width == 1 ? 'char' : 'String'
         | 
| 96 | 
            +
                     when 'float'           ;
         | 
| 97 | 
            +
                     when 'double'          ;
         | 
| 98 | 
            +
                     when 'bool', 'boolean' ;  type = 'boolean'
         | 
| 99 | 
            +
                     when 'date'            ;  type = 'Date' ; imports << 'java.util.Date'
         | 
| 100 | 
            +
                     when 'timestamp'       ;  type = 'Date' ; imports << 'java.util.Date'
         | 
| 101 | 
            +
                     when 'money'           ;  type = 'double'
         | 
| 102 | 
            +
                     end
         | 
| 103 | 
            +
                  end
         | 
| 104 | 
            +
                  var = {
         | 
| 105 | 
            +
                     :name => column['name'],
         | 
| 106 | 
            +
                     :type => type,
         | 
| 107 | 
            +
                     :desc => column['desc'],
         | 
| 108 | 
            +
                  }
         | 
| 109 | 
            +
                  variables << var
         | 
| 110 | 
            +
               end
         | 
| 111 | 
            +
               imports.uniq!
         | 
| 112 | 
            +
             | 
| 113 | 
            +
             %>
         | 
| 114 | 
            +
            /*
         | 
| 115 | 
            +
             * DTO for Java
         | 
| 116 | 
            +
             *   generated by kwatable with template 'dto-java.eruby'
         | 
| 117 | 
            +
             *   at <%= Time.now.to_s %>
         | 
| 118 | 
            +
             | 
| 119 | 
            +
             */
         | 
| 120 | 
            +
            <% if klass[:package] %>
         | 
| 121 | 
            +
            package <%= package %>;
         | 
| 122 | 
            +
            <% end %>
         | 
| 123 | 
            +
            <% for class_name in imports %>
         | 
| 124 | 
            +
            import <%= class_name %>;
         | 
| 125 | 
            +
            <% end %>
         | 
| 126 | 
            +
             | 
| 127 | 
            +
            /**
         | 
| 128 | 
            +
             * <%= klass[:desc] %>
         | 
| 129 | 
            +
             | 
| 130 | 
            +
             */
         | 
| 131 | 
            +
            <% extends = klass[:parent] ? ' extends ' + klass[:parent] : '' %>
         | 
| 132 | 
            +
            public class <%= klass[:name] %><%= extends %> implements java.io.Serializable {
         | 
| 133 | 
            +
             | 
| 134 | 
            +
            <%
         | 
| 135 | 
            +
               #
         | 
| 136 | 
            +
               # instance variables
         | 
| 137 | 
            +
               #
         | 
| 138 | 
            +
               for var in variables
         | 
| 139 | 
            +
                  vartype = '%-12s' % var[:type]
         | 
| 140 | 
            +
                  varname = '%-12s' % (var[:name]+';')
         | 
| 141 | 
            +
             %>
         | 
| 142 | 
            +
                private  <%= vartype %> <%= _(varname) %>  /* <%= var[:desc] %> */
         | 
| 143 | 
            +
            <%
         | 
| 144 | 
            +
              end
         | 
| 145 | 
            +
             %>
         | 
| 146 | 
            +
             | 
| 147 | 
            +
            <%
         | 
| 148 | 
            +
               #
         | 
| 149 | 
            +
               # constructor
         | 
| 150 | 
            +
               #
         | 
| 151 | 
            +
               argstr = variables.collect { |var| "#{var[:type]} #{_(var[:name])}" }.join(', ')
         | 
| 152 | 
            +
             %>
         | 
| 153 | 
            +
                public <%= klass[:name] %>(<%= argstr %>) {
         | 
| 154 | 
            +
            <% for var in variables %>
         | 
| 155 | 
            +
                    this.<%= _(var[:name]) %> = <%= _(var[:name]) %>;
         | 
| 156 | 
            +
            <% end %>
         | 
| 157 | 
            +
                }
         | 
| 158 | 
            +
             | 
| 159 | 
            +
            <%
         | 
| 160 | 
            +
               #
         | 
| 161 | 
            +
               # getter/setter
         | 
| 162 | 
            +
               #
         | 
| 163 | 
            +
               for var in variables
         | 
| 164 | 
            +
                  vartype = var[:type]
         | 
| 165 | 
            +
                  varname = var[:name]
         | 
| 166 | 
            +
                  getter  = "#{vartype == 'boolean' ? 'is' : 'get'}#{camel_case(varname)}"
         | 
| 167 | 
            +
                  setter  = "set#{camel_case(varname)}"
         | 
| 168 | 
            +
             %>
         | 
| 169 | 
            +
                public <%= vartype %> <%= getter %>() { return <%= _(varname) %> }
         | 
| 170 | 
            +
                public void <%= setter %>(<%= vartype %> <%= _(varname) %>) { this.<%= _(varname) %> = <%= _(varname) %>; }
         | 
| 171 | 
            +
             | 
| 172 | 
            +
            <%
         | 
| 173 | 
            +
               end
         | 
| 174 | 
            +
             %>
         | 
| 175 | 
            +
                // -----------
         | 
| 176 | 
            +
             | 
| 177 | 
            +
            <%
         | 
| 178 | 
            +
               #
         | 
| 179 | 
            +
               # foreign keys
         | 
| 180 | 
            +
               #
         | 
| 181 | 
            +
               for column in table['columns']
         | 
| 182 | 
            +
                  if column['ref-table']
         | 
| 183 | 
            +
                     reftype = column['ref-table']['class']
         | 
| 184 | 
            +
                     refcol  = column['ref-column']['name']
         | 
| 185 | 
            +
                     refname = column['ref-name']
         | 
| 186 | 
            +
                     varname = column['name']
         | 
| 187 | 
            +
                     if refname == varname
         | 
| 188 | 
            +
                        raise "table #{table['name']}: column #{column['name']}: proper ref-name is required."
         | 
| 189 | 
            +
                     end
         | 
| 190 | 
            +
                     getter  = "get#{camel_case(column['ref-name'])}"
         | 
| 191 | 
            +
                     setter  = getter.sub(/^get/, 'set')
         | 
| 192 | 
            +
             %>
         | 
| 193 | 
            +
                private <%= reftype %> <%= _(refname) %>;
         | 
| 194 | 
            +
                public <%= reftype %> <%= getter %>() { return <%= _(refname) %>; }
         | 
| 195 | 
            +
                public void <%= setter %>(<%= reftype %> <%= _(refname) %>) {
         | 
| 196 | 
            +
                    this.<%= _(refname) %> = <%= _(refname) %>;
         | 
| 197 | 
            +
                    this.<%= _(varname) %> = <%= _(refname) %>.get<%= camel_case(refcol) %>();
         | 
| 198 | 
            +
                }
         | 
| 199 | 
            +
             | 
| 200 | 
            +
            <%
         | 
| 201 | 
            +
                  end
         | 
| 202 | 
            +
               end
         | 
| 203 | 
            +
            %>
         | 
| 204 | 
            +
            }
         | 
| @@ -0,0 +1,180 @@ | |
| 1 | 
            +
            <%
         | 
| 2 | 
            +
             | 
| 3 | 
            +
               ##
         | 
| 4 | 
            +
               ## kwatable template file for Java DTO class
         | 
| 5 | 
            +
               ##
         | 
| 6 | 
            +
               ## copyright(c) 2005 kuwata-lab.com all rights reserved.
         | 
| 7 | 
            +
               ## $Release: 0.0.1 $
         | 
| 8 | 
            +
               ## $Rev: 12 $
         | 
| 9 | 
            +
               ##
         | 
| 10 | 
            +
               ## template properties:
         | 
| 11 | 
            +
               ##   module    -  module name
         | 
| 12 | 
            +
               ##   parent    -  parent class
         | 
| 13 | 
            +
               ##   reqpath   -  require path
         | 
| 14 | 
            +
             | 
| 15 | 
            +
             | 
| 16 | 
            +
               #
         | 
| 17 | 
            +
               # context variables
         | 
| 18 | 
            +
               #
         | 
| 19 | 
            +
               table      = context['table']
         | 
| 20 | 
            +
               properties = context['properties']
         | 
| 21 | 
            +
               raise "option '-m' is required when using 'dto-java.eruby'." unless table
         | 
| 22 | 
            +
             | 
| 23 | 
            +
             | 
| 24 | 
            +
               unless defined?(KEYWORDS)
         | 
| 25 | 
            +
                  #
         | 
| 26 | 
            +
                  # java keywords
         | 
| 27 | 
            +
                  #
         | 
| 28 | 
            +
                  keywords = <<-END
         | 
| 29 | 
            +
                    BEGIN END alias and begin break case
         | 
| 30 | 
            +
                    class def defined do else elsif end
         | 
| 31 | 
            +
                    ensure false for if in module next
         | 
| 32 | 
            +
                    nil not or redo rescue retry return
         | 
| 33 | 
            +
                    self super then true undef unless
         | 
| 34 | 
            +
                    until when while yield
         | 
| 35 | 
            +
                  END
         | 
| 36 | 
            +
                  KEYWORDS = {}
         | 
| 37 | 
            +
                  keywords.split(/\s+/).each { |word| KEYWORDS[word] = true }
         | 
| 38 | 
            +
             | 
| 39 | 
            +
             | 
| 40 | 
            +
                  #
         | 
| 41 | 
            +
                  # escape java keywords
         | 
| 42 | 
            +
                  #
         | 
| 43 | 
            +
                  def _(word)
         | 
| 44 | 
            +
                     return KEYWORDS[word] ? "_#{word}" : word
         | 
| 45 | 
            +
                  end
         | 
| 46 | 
            +
             | 
| 47 | 
            +
             | 
| 48 | 
            +
                  #
         | 
| 49 | 
            +
                  # convert 'aaa_bbb_ccc' into 'AaaBbbCcc'
         | 
| 50 | 
            +
                  #
         | 
| 51 | 
            +
                  def camel_case(name, flag_all=true)
         | 
| 52 | 
            +
                     s = ''
         | 
| 53 | 
            +
                     name.split('_').each_with_index do |word, i|
         | 
| 54 | 
            +
                        s << (!flag_all && i == 0 ? word.downcase : word.capitalize)
         | 
| 55 | 
            +
                     end
         | 
| 56 | 
            +
                     return s
         | 
| 57 | 
            +
                     #s = name.split('_').collect { |w| w.capitalize }.join()
         | 
| 58 | 
            +
                     #s[0] = s[0].to_s.upcase.chr unless flag_all
         | 
| 59 | 
            +
                  end
         | 
| 60 | 
            +
             | 
| 61 | 
            +
               end
         | 
| 62 | 
            +
             | 
| 63 | 
            +
             | 
| 64 | 
            +
               #
         | 
| 65 | 
            +
               # class definition
         | 
| 66 | 
            +
               #
         | 
| 67 | 
            +
               klass = {
         | 
| 68 | 
            +
                  :name    => table['class']   || camel_case(table['name']),
         | 
| 69 | 
            +
                  :module  => table['module']  || properties[:module],
         | 
| 70 | 
            +
                  :parent  => table['parent']  || properties[:parent],
         | 
| 71 | 
            +
                  :desc    => table['desc'],
         | 
| 72 | 
            +
               }
         | 
| 73 | 
            +
             | 
| 74 | 
            +
             | 
| 75 | 
            +
               #
         | 
| 76 | 
            +
               # output file name
         | 
| 77 | 
            +
               #
         | 
| 78 | 
            +
               context[:output_filename] = klass[:name] + ".rb"
         | 
| 79 | 
            +
             | 
| 80 | 
            +
             | 
| 81 | 
            +
               #
         | 
| 82 | 
            +
               # instance variables
         | 
| 83 | 
            +
               #
         | 
| 84 | 
            +
               variables = []
         | 
| 85 | 
            +
               for column in table['columns']
         | 
| 86 | 
            +
                  var = {
         | 
| 87 | 
            +
                     :name => column['name'],
         | 
| 88 | 
            +
                     :type => column['class'] || column['type'],
         | 
| 89 | 
            +
                     :desc => column['desc'],
         | 
| 90 | 
            +
                  }
         | 
| 91 | 
            +
                  variables << var
         | 
| 92 | 
            +
               end
         | 
| 93 | 
            +
             | 
| 94 | 
            +
             %>
         | 
| 95 | 
            +
            ##
         | 
| 96 | 
            +
            ## DTO for Ruby
         | 
| 97 | 
            +
            ##   generated by kwatable with template 'dto-ruby.eruby'
         | 
| 98 | 
            +
            ##   at <%= Time.now.to_s %>
         | 
| 99 | 
            +
             | 
| 100 | 
            +
            ##
         | 
| 101 | 
            +
            <%
         | 
| 102 | 
            +
               #
         | 
| 103 | 
            +
               # require other dto file
         | 
| 104 | 
            +
               #
         | 
| 105 | 
            +
               for column in table['columns']
         | 
| 106 | 
            +
                  if column['ref-table']
         | 
| 107 | 
            +
                     refclass = column['ref-table']['class']
         | 
| 108 | 
            +
                     refclass ||= camel_case(column['ref-table']['name'])
         | 
| 109 | 
            +
                     reqpath = properties[:reqpath]
         | 
| 110 | 
            +
            %>
         | 
| 111 | 
            +
            require '<%= reqpath %><%= reqpath ? '/' : '' %><%= refclass %>'
         | 
| 112 | 
            +
            <%
         | 
| 113 | 
            +
                  end
         | 
| 114 | 
            +
               end
         | 
| 115 | 
            +
             %>
         | 
| 116 | 
            +
             | 
| 117 | 
            +
            <%
         | 
| 118 | 
            +
               #
         | 
| 119 | 
            +
               # class definition start
         | 
| 120 | 
            +
               #
         | 
| 121 | 
            +
               mod     = klass[:module] ? "#{klass[:module]}::" : ""
         | 
| 122 | 
            +
               extends = klass[:parent] ? " < #{klass[:parent]}" : ""
         | 
| 123 | 
            +
             %>
         | 
| 124 | 
            +
            ## <%= klass[:desc] %>
         | 
| 125 | 
            +
             | 
| 126 | 
            +
            class <%= mod %><%= klass[:name] %><% extends %>
         | 
| 127 | 
            +
             | 
| 128 | 
            +
            <%
         | 
| 129 | 
            +
               #
         | 
| 130 | 
            +
               # initializer
         | 
| 131 | 
            +
               #
         | 
| 132 | 
            +
               argstr = variables.collect { |var| _(var[:name]) }.join(", ")
         | 
| 133 | 
            +
             %>
         | 
| 134 | 
            +
             | 
| 135 | 
            +
               def initialize(<%= argstr %>)
         | 
| 136 | 
            +
            <% for var in variables %>
         | 
| 137 | 
            +
                  @<%= var[:name] %> = <%=_ var[:name] %>
         | 
| 138 | 
            +
             | 
| 139 | 
            +
            <% end %>
         | 
| 140 | 
            +
               end
         | 
| 141 | 
            +
             | 
| 142 | 
            +
            <%
         | 
| 143 | 
            +
               #
         | 
| 144 | 
            +
               # accessor
         | 
| 145 | 
            +
               #
         | 
| 146 | 
            +
             %>
         | 
| 147 | 
            +
            <% for var in variables %>
         | 
| 148 | 
            +
               attr_accessor :<%= '%-14s' % var[:name] %> # <%= var[:desc] %>
         | 
| 149 | 
            +
             | 
| 150 | 
            +
            <% end %>
         | 
| 151 | 
            +
             | 
| 152 | 
            +
                // -----------
         | 
| 153 | 
            +
             | 
| 154 | 
            +
            <%
         | 
| 155 | 
            +
               #
         | 
| 156 | 
            +
               # foreign keys
         | 
| 157 | 
            +
               #
         | 
| 158 | 
            +
               table['columns'].each do |column|
         | 
| 159 | 
            +
                  if column['ref-table']
         | 
| 160 | 
            +
                     refcol  = column['ref-column']['name']
         | 
| 161 | 
            +
                     refname = column['ref-name']
         | 
| 162 | 
            +
                     varname = column['name']
         | 
| 163 | 
            +
                     if refname == varname
         | 
| 164 | 
            +
                        raise "table #{table['name']}: column #{column['name']}: proper ref-name is required."
         | 
| 165 | 
            +
                     end
         | 
| 166 | 
            +
             %>
         | 
| 167 | 
            +
               attr_reader :<%= refname %>
         | 
| 168 | 
            +
             | 
| 169 | 
            +
               def <%= refname %>=(<%=_ refname %>)
         | 
| 170 | 
            +
                  @<%= refname %> = <%=_ refname %>
         | 
| 171 | 
            +
             | 
| 172 | 
            +
                  @<%= varname %> = <%=_ refname %>.<%= refcol %>
         | 
| 173 | 
            +
             | 
| 174 | 
            +
               end
         | 
| 175 | 
            +
             | 
| 176 | 
            +
            <%
         | 
| 177 | 
            +
                  end
         | 
| 178 | 
            +
               end
         | 
| 179 | 
            +
             %>
         | 
| 180 | 
            +
            end
         |