diff options
author | Jérémy Zurcher <jeremy@asynk.ch> | 2012-01-09 10:24:33 +0100 |
---|---|---|
committer | Jérémy Zurcher <jeremy@asynk.ch> | 2012-01-09 10:24:33 +0100 |
commit | 78ee762b597a6774407160235e019222e94ffb93 (patch) | |
tree | 83a4b008a1488fe33201703469d6adc7a2fcf692 | |
parent | 4a59765ad8f696f9cf7719b354c2d1be0741289f (diff) | |
parent | 7172b548b7571c55e0d705761c0a09b33b2256cc (diff) | |
download | bin-78ee762b597a6774407160235e019222e94ffb93.zip bin-78ee762b597a6774407160235e019222e94ffb93.tar.gz |
Merge branch 'master' of asynk.ch:bin
-rwxr-xr-x | easy_e17.sh | 2 | ||||
-rwxr-xr-x | git-synk | 2 | ||||
-rwxr-xr-x | pg2rb.rb | 153 |
3 files changed, 155 insertions, 2 deletions
diff --git a/easy_e17.sh b/easy_e17.sh index 7b540c4..faf7b3b 100755 --- a/easy_e17.sh +++ b/easy_e17.sh @@ -43,7 +43,7 @@ cmd_svn_update_conflicts_ask="svn update -r" efl_basic="eina eet evas ecore efreet eio eeze e_dbus embryo edje" efl_extra="imlib2 azy emotion ethumb libeweather emap elementary elev8 enlil ensure libast \ - python-evas python-ecore python-e_dbus python-edje python-ethumb python-emotion python-elementary shellementary vala" + python-evas python-ecore python-e_dbus python-edje python-emotion python-elementary shellementary vala" bin_basic="exchange e" e_modules_bin="emprint exalt" e_modules_extra="alarm calendar comp-scale cpu deskshow diskio drawer eenvader.fractal empris engage eooorg e-tiling \ @@ -75,7 +75,7 @@ for gitdir in ${GIT_DIR}; do STASH=1 echo -e "${RED}head is not clean, ${CYAN}git stash save${RESET}" && git stash save -q else - fail "head is not clean, USE_STASH=0 ... " && continue + fail "head is not clean, use -s flag to use stash ... " && continue fi fi # PULL diff --git a/pg2rb.rb b/pg2rb.rb new file mode 100755 index 0000000..764c94e --- /dev/null +++ b/pg2rb.rb @@ -0,0 +1,153 @@ +#! /usr/bin/env ruby +# -*- coding: UTF-8 -*- + +#---------------------------------------------------------------------------- +# +# File : dia2pg.rb +# Author : Jérémy Zurcher <jeremy@asynk.ch> +# Date : 24/08/10 +# License : +# +# Permission is hereby granted, free of charge, to any person obtaining +# a copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sublicense, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice shall be +# included in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +# +#---------------------------------------------------------------------------- +# +require 'ostruct' +require 'optparse' +# +class OpenStruct + def to_h; @table end +end +# +options = OpenStruct.new +# +options.verbose = false +options.input = nil +options.database = nil +options.indent=4 +# +opts = OptionParser.new do |opts| + opts.banner = "Usage: #{$0} [options]" + opts.on( "-i", "--input FILENAME", "input file" ) { |n| options.input = n } + opts.on( "-V", "--verbose", "produce verbose output" ) { options.verbose = true } + opts.on( "-d", "--database DATABASE", "set default database" ) { |n| options.database = n } + opts.on( "-n", "--indent N", "set number of indentation spaces" ) { |n| options.indent = n.to_i } +end +# +options.tbl_prefix+='_' if not options.tbl_prefix.nil? and options.tbl_prefix[-1]!='_' +# +opts.parse!(ARGV) +# +if options.input.nil? + $stderr << "missing input file argument\n" + exit 1 +end +# +INDENT="\n"+" "*options.indent +# +class Table + # + def initialize n, t, a, d + @name = n + @tbl_prefix = t + @attr_prefix = a + @db = d + @ids = [] + @bools = [] + @floats = [] + @integers = [] + @texts = [] + @times = [] + end + attr_reader :ids, :bools, :floats, :integers, :texts, :times + # + def name + (@tbl_prefix.nil? ? @name : @name[@tbl_prefix.length..-1]).capitalize # TODO replace _(.) by $1.capitalize + end + # + def to_s + r="class #{name}" + r << INDENT+'#' + r << INDENT+'include Hmsa_lib::PgsqlModel' + r << INDENT+'#' + r << INDENT+"db '#{@db}'.freeze" unless @db.nil? + r << INDENT+"prefix '#{@attr_prefix}'.freeze" unless @attr_prefix.nil? + r << INDENT+'#' unless @db.nil? and @attr_prefix.nil? + r << INDENT+"ids " + @ids.collect { |i| ":#{i}" }.join(', ') unless @ids.empty? + [ :bools, :floats, :integers, :texts, :times].each do |sym| + attrs = send sym + next if attrs.empty? + r << INDENT+"#{sym} " + attrs.collect { |a| ":#{@attr_prefix.nil? ? a : a[@attr_prefix.length..-1]}" }.join(', ') + end + r << INDENT+'#' + r << INDENT+'sql_stmts( {' + r << INDENT+" # :exists => [ 'select count(*) from #{@name} where #{@ids[0]}=$1::int', :#{@ids[0]} ]," unless @ids.empty? + r << INDENT+'} )' + r << INDENT+'#' + r << "\nend" + end +end +# +TABLES=[] +# +tbl=nil +tbl_prefix=nil +attr_prefix=nil +File.open(options.input).readlines.each do |l| +# puts l + if l=~/dia2pg/ + l.split.each do |s| + k,v = s.split '=' + if k=~/tbl_prefix/ + tbl_prefix=v + elsif k=~/attr_prefix/ + attr_prefix=v + end + end + elsif l=~/CREATE TABLE (\S+)/ + tbl = Table.new $1, tbl_prefix, attr_prefix, options.database + tbl_prefix=nil + attr_prefix=nil + TABLES << tbl + elsif l=~/PRIMARY\s+KEY\s+\((\w*)\)/ + $1.split(/,/).reverse.each do |i| + tbl.ids.insert 0, i + end + elsif l=~/(\w+)\s+integer\s+REFERENCES/ + tbl.ids << $1 + elsif l=~/(\w+)\s+boolean/ + tbl.bools << $1 + elsif l=~/(\w+)\s+double/ + tbl.floats << $1 + elsif l=~/(\w+)\s+integer/ + tbl.integers << $1 + elsif l=~/(\w+)\s+text/ + tbl.texts << $1 + elsif l=~/(\w+)\s+char/ + tbl.texts << $1 + elsif l=~/(\w+)\s+timestamp/ + tbl.times << $1 + end +end +# +TABLES.each do |t| + puts "#" + puts t +end |