dubious 0.0.0-java

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.
Files changed (120) hide show
  1. data/LICENSE +202 -0
  2. data/README.rdoc +160 -0
  3. data/ROADMAP.rdoc +28 -0
  4. data/Rakefile +130 -0
  5. data/bin/dubious +4 -0
  6. data/examples/contacts/Rakefile +169 -0
  7. data/examples/contacts/WEB-INF/app.yaml +9 -0
  8. data/examples/contacts/WEB-INF/appengine-web.xml +14 -0
  9. data/examples/contacts/WEB-INF/classes/controllers/ApplicationController.class +0 -0
  10. data/examples/contacts/WEB-INF/classes/controllers/ContactsController.class +0 -0
  11. data/examples/contacts/WEB-INF/classes/controllers/InfoPropertiesController.class +0 -0
  12. data/examples/contacts/WEB-INF/classes/controllers/SourceController.class +0 -0
  13. data/examples/contacts/WEB-INF/classes/models/Contact$Query.class +0 -0
  14. data/examples/contacts/WEB-INF/classes/models/Contact.class +0 -0
  15. data/examples/contacts/WEB-INF/lib/appengine-api.jar +0 -0
  16. data/examples/contacts/WEB-INF/lib/dubious.jar +0 -0
  17. data/examples/contacts/WEB-INF/lib/dubydatastore.jar +0 -0
  18. data/examples/contacts/WEB-INF/web.xml +3 -0
  19. data/examples/contacts/app.yaml +44 -0
  20. data/examples/contacts/app/controllers/application_controller.mirah +5 -0
  21. data/examples/contacts/app/controllers/contacts_controller.mirah +62 -0
  22. data/examples/contacts/app/controllers/info_properties_controller.mirah +55 -0
  23. data/examples/contacts/app/controllers/source_controller.mirah +30 -0
  24. data/examples/contacts/app/models/contact.mirah +28 -0
  25. data/examples/contacts/app/views/contacts/edit.html.erb +50 -0
  26. data/examples/contacts/app/views/contacts/index.html.erb +38 -0
  27. data/examples/contacts/app/views/contacts/new.html.erb +49 -0
  28. data/examples/contacts/app/views/contacts/show.html.erb +47 -0
  29. data/examples/contacts/app/views/layouts/application.html.erb +10 -0
  30. data/examples/contacts/app/views/layouts/contacts.html.erb +20 -0
  31. data/examples/contacts/app/views/source/list.html.erb +27 -0
  32. data/examples/contacts/app/views/source/show.html.erb +15 -0
  33. data/examples/contacts/config/application.properties +4 -0
  34. data/examples/contacts/config/asset.properties +32 -0
  35. data/examples/contacts/config/build.properties +10 -0
  36. data/examples/contacts/config/routes.properties +1 -0
  37. data/examples/contacts/public/404.html +30 -0
  38. data/examples/contacts/public/422.html +30 -0
  39. data/examples/contacts/public/500.html +30 -0
  40. data/examples/contacts/public/favicon.ico +0 -0
  41. data/examples/contacts/public/images/appengine_duby.png +0 -0
  42. data/examples/contacts/public/images/back.gif +0 -0
  43. data/examples/contacts/public/images/dir.gif +0 -0
  44. data/examples/contacts/public/images/dubious.png +0 -0
  45. data/examples/contacts/public/images/file.gif +0 -0
  46. data/examples/contacts/public/images/silver-120x30.gif +0 -0
  47. data/examples/contacts/public/index.html +144 -0
  48. data/examples/contacts/public/javascripts/effects.js +1128 -0
  49. data/examples/contacts/public/javascripts/jquery.rails.min.js +117 -0
  50. data/examples/contacts/public/javascripts/lang/sh_css.min.js +1 -0
  51. data/examples/contacts/public/javascripts/lang/sh_duby.min.js +1 -0
  52. data/examples/contacts/public/javascripts/lang/sh_erb.min.js +1 -0
  53. data/examples/contacts/public/javascripts/lang/sh_html.min.js +1 -0
  54. data/examples/contacts/public/javascripts/lang/sh_java.min.js +1 -0
  55. data/examples/contacts/public/javascripts/lang/sh_js.min.js +1 -0
  56. data/examples/contacts/public/javascripts/lang/sh_mirah.min.js +1 -0
  57. data/examples/contacts/public/javascripts/lang/sh_properties.min.js +1 -0
  58. data/examples/contacts/public/javascripts/lang/sh_rb.min.js +1 -0
  59. data/examples/contacts/public/javascripts/lang/sh_sh.min.js +1 -0
  60. data/examples/contacts/public/javascripts/lang/sh_xml.min.js +1 -0
  61. data/examples/contacts/public/javascripts/lang/sh_yaml.min.js +1 -0
  62. data/examples/contacts/public/javascripts/prototype.js +4320 -0
  63. data/examples/contacts/public/javascripts/sh_main.min.js +4 -0
  64. data/examples/contacts/public/robots.txt +0 -0
  65. data/examples/contacts/public/stylesheets/main.css +188 -0
  66. data/examples/contacts/public/stylesheets/scaffold.css +57 -0
  67. data/examples/contacts/public/stylesheets/sh_style.css +66 -0
  68. data/examples/contacts/public/stylesheets/source.css +27 -0
  69. data/examples/shout/Rakefile +138 -0
  70. data/examples/shout/WEB-INF/appengine-web.xml +14 -0
  71. data/examples/shout/WEB-INF/web.xml +11 -0
  72. data/examples/shout/app.mirah +35 -0
  73. data/examples/shout/app.yaml +11 -0
  74. data/examples/shout/public/404.html +30 -0
  75. data/examples/shout/public/422.html +30 -0
  76. data/examples/shout/public/500.html +30 -0
  77. data/examples/shout/public/favicon.ico +0 -0
  78. data/examples/shout/public/images/appengine_duby.png +0 -0
  79. data/examples/shout/public/images/back.gif +0 -0
  80. data/examples/shout/public/images/dir.gif +0 -0
  81. data/examples/shout/public/images/file.gif +0 -0
  82. data/examples/shout/public/images/silver-120x30.gif +0 -0
  83. data/examples/shout/public/index.html +116 -0
  84. data/examples/shout/public/javascripts/effects.js +1128 -0
  85. data/examples/shout/public/javascripts/jquery.rails.min.js +117 -0
  86. data/examples/shout/public/javascripts/prototype.js +4320 -0
  87. data/examples/shout/public/robots.txt +0 -0
  88. data/examples/shout/public/stylesheets/main.css +185 -0
  89. data/examples/shout/public/stylesheets/scaffold.css +57 -0
  90. data/examples/shout/views/application.html.erb +10 -0
  91. data/examples/shout/views/list.html.erb +14 -0
  92. data/javalib/dubydatastore.jar +0 -0
  93. data/lib/dubious.jar +0 -0
  94. data/lib/dubious.rb +2 -0
  95. data/lib/dubious/cli.rb +65 -0
  96. data/lib/dubious/templates/base/Rakefile +169 -0
  97. data/lib/dubious/templates/base/WEB-INF/app.yaml.tt +9 -0
  98. data/lib/dubious/templates/base/app/controllers/application_controller.mirah +5 -0
  99. data/lib/dubious/templates/base/config/application.properties.tt +6 -0
  100. data/lib/dubious/templates/base/config/asset.properties +0 -0
  101. data/lib/dubious/templates/base/config/build.properties +0 -0
  102. data/lib/dubious/templates/base/config/routes.properties +1 -0
  103. data/lib/dubious/templates/base/public/404.html +30 -0
  104. data/lib/dubious/templates/base/public/422.html +30 -0
  105. data/lib/dubious/templates/base/public/500.html +30 -0
  106. data/lib/dubious/templates/base/public/favicon.ico +0 -0
  107. data/lib/dubious/templates/base/public/images/appengine_duby.png +0 -0
  108. data/lib/dubious/templates/base/public/images/back.gif +0 -0
  109. data/lib/dubious/templates/base/public/images/dir.gif +0 -0
  110. data/lib/dubious/templates/base/public/images/dubious.png +0 -0
  111. data/lib/dubious/templates/base/public/images/file.gif +0 -0
  112. data/lib/dubious/templates/base/public/images/silver-120x30.gif +0 -0
  113. data/lib/dubious/templates/base/public/index.html +144 -0
  114. data/lib/dubious/templates/base/public/javascripts/jquery.rails.min.js +117 -0
  115. data/lib/dubious/templates/base/public/robots.txt +0 -0
  116. data/lib/dubious/templates/base/public/stylesheets/main.css +188 -0
  117. data/lib/dubious/templates/base/public/stylesheets/scaffold.css +57 -0
  118. data/lib/dubious/templates/generator/controller.mirah.tt +5 -0
  119. data/lib/dubious/templates/generator/model.mirah.tt +6 -0
  120. metadata +224 -0
File without changes
@@ -0,0 +1,185 @@
1
+ body {
2
+ margin: 0;
3
+ margin-bottom: 25px;
4
+ padding: 0;
5
+ background-color: #f0f0f0;
6
+ font-family: "Lucida Grande", "Bitstream Vera Sans", "Verdana";
7
+ font-size: 13px;
8
+ color: #333;
9
+ }
10
+
11
+ h1 {
12
+ font-size: 28px;
13
+ color: #000;
14
+ }
15
+
16
+ a {color: #666}
17
+ a:hover {
18
+ background-color: #ccc;
19
+ color: white;
20
+ text-decoration: none;
21
+ }
22
+
23
+
24
+ #page {
25
+ background-color: #f0f0f0;
26
+ width: 750px;
27
+ margin: 0;
28
+ margin-left: auto;
29
+ margin-right: auto;
30
+ }
31
+
32
+ #content {
33
+ float: left;
34
+ background-color: white;
35
+ border: 3px solid #aaa;
36
+ border-top: none;
37
+ padding: 25px;
38
+ width: 500px;
39
+ }
40
+
41
+ #sidebar {
42
+ float: right;
43
+ width: 175px;
44
+ }
45
+
46
+ #footer {
47
+ clear: both;
48
+ }
49
+
50
+ #header, #about, #getting-started {
51
+ padding-left: 75px;
52
+ padding-right: 30px;
53
+ }
54
+
55
+ #header {
56
+ height: 64px;
57
+ }
58
+
59
+ #header h1, #header h2 {margin: 0}
60
+ #header h2 {
61
+ color: #888;
62
+ font-weight: normal;
63
+ font-size: 16px;
64
+ }
65
+
66
+ td.mono { font-family: "Andale Mono", "monospace"; }
67
+
68
+ #about h3 {
69
+ margin: 0;
70
+ margin-bottom: 10px;
71
+ font-size: 14px;
72
+ }
73
+
74
+ #about-content {
75
+ background-color: #ffd;
76
+ border: 1px solid #fc0;
77
+ margin-left: -11px;
78
+ }
79
+ #about-content table {
80
+ margin-top: 10px;
81
+ margin-bottom: 10px;
82
+ font-size: 11px;
83
+ border-collapse: collapse;
84
+ }
85
+ #about-content td {
86
+ padding: 10px;
87
+ padding-top: 3px;
88
+ padding-bottom: 3px;
89
+ }
90
+ #about-content td.name {color: #555}
91
+ #about-content td.value {color: #000}
92
+
93
+ #about-content.failure {
94
+ background-color: #fcc;
95
+ border: 1px solid #f00;
96
+ }
97
+ #about-content.failure p {
98
+ margin: 0;
99
+ padding: 10px;
100
+ }
101
+
102
+ code {
103
+ color: Brown;
104
+ }
105
+
106
+ #getting-started {
107
+ border-top: 1px solid #ccc;
108
+ margin-top: 25px;
109
+ padding-top: 15px;
110
+ }
111
+ #getting-started h1 {
112
+ margin: 0;
113
+ font-size: 20px;
114
+ }
115
+ #getting-started h2 {
116
+ margin: 0;
117
+ font-size: 14px;
118
+ font-weight: normal;
119
+ color: #333;
120
+ margin-bottom: 25px;
121
+ }
122
+ #getting-started ul {
123
+ margin-left: 0;
124
+ padding-left: 0;
125
+ }
126
+ #getting-started ol {
127
+ margin-left: 0;
128
+ padding-left: 0;
129
+ }
130
+ #getting-started li {
131
+ font-size: 18px;
132
+ color: #888;
133
+ margin-bottom: 25px;
134
+ }
135
+ #getting-started li h2 {
136
+ margin: 0;
137
+ font-weight: normal;
138
+ font-size: 18px;
139
+ color: #333;
140
+ }
141
+ #getting-started li p {
142
+ color: #555;
143
+ font-size: 13px;
144
+ }
145
+
146
+
147
+ #search {
148
+ margin: 0;
149
+ padding-top: 10px;
150
+ padding-bottom: 10px;
151
+ font-size: 11px;
152
+ }
153
+ #search input {
154
+ font-size: 11px;
155
+ margin: 2px;
156
+ }
157
+ #search-text {width: 170px}
158
+
159
+
160
+ #sidebar ul {
161
+ margin-left: 0;
162
+ padding-left: 0;
163
+ }
164
+ #sidebar ul h3 {
165
+ margin-top: 25px;
166
+ font-size: 16px;
167
+ padding-bottom: 10px;
168
+ border-bottom: 1px solid #ccc;
169
+ }
170
+ #sidebar li {
171
+ list-style-type: none;
172
+ }
173
+ #sidebar ul.links li {
174
+ margin-bottom: 5px;
175
+ }
176
+ span.comment {
177
+ color: blue;
178
+ font-weight: plain;
179
+ }
180
+ pre {
181
+ font-size: 12pt;
182
+ }
183
+ span.appid {
184
+ color: green;
185
+ }
@@ -0,0 +1,57 @@
1
+ div.ui-datepicker-title { font-size: 8pt; }
2
+ th { font-size: 8pt; }
3
+
4
+ body { background-color: #fff; color: #333; }
5
+
6
+ body, p, ol, ul, td {
7
+ font-family: verdana, arial, helvetica, sans-serif;
8
+ font-size: 13px;
9
+ line-height: 18px;
10
+ }
11
+
12
+ pre {
13
+ background-color: #eee;
14
+ padding: 10px;
15
+ font-size: 11px;
16
+ }
17
+
18
+ a { color: #000; }
19
+ a:visited { color: #666; }
20
+ a:hover { color: #fff; background-color:#000; }
21
+
22
+ .fieldWithErrors {
23
+ padding: 2px;
24
+ background-color: red;
25
+ display: table;
26
+ }
27
+
28
+ #errorExplanation {
29
+ width: 400px;
30
+ border: 2px solid red;
31
+ padding: 7px;
32
+ padding-bottom: 12px;
33
+ margin-bottom: 20px;
34
+ background-color: #f0f0f0;
35
+ }
36
+
37
+ #errorExplanation h2 {
38
+ text-align: left;
39
+ font-weight: bold;
40
+ padding: 5px 5px 5px 15px;
41
+ font-size: 12px;
42
+ margin: -7px;
43
+ background-color: #c00;
44
+ color: #fff;
45
+ }
46
+
47
+ #errorExplanation p {
48
+ color: #333;
49
+ margin-bottom: 0;
50
+ padding: 5px;
51
+ }
52
+
53
+ #errorExplanation ul li {
54
+ font-size: 12px;
55
+ list-style: square;
56
+ }
57
+
@@ -0,0 +1,10 @@
1
+ <!DOCTYPE html>
2
+ <head>
3
+ <meta charset="UTF-8" />
4
+ <title><%= @page_title %></title>
5
+ <%= stylesheet_link_tag 'source' %>
6
+ </head>
7
+ <body>
8
+ <div id="content"><%= @page_content %></div>
9
+ </body>
10
+ </html>
@@ -0,0 +1,14 @@
1
+
2
+ <h1>All Shouts:</h1>
3
+ <% for shout in @shouts %>
4
+ <p><b><%=h shout.title %></b> &mdash; <%=h shout.body %></p>
5
+ <% end %>
6
+ <hr>
7
+ <h1>New Shout:</h1>
8
+ <form method=post>
9
+ Title: <input id='shout_title' type='text' name='title' /><br/>
10
+ Body: <input id='shout_body' type='text' name='body' /><br/>
11
+ <input type=submit>
12
+ </form>
13
+ <br/><% options = HashMap.new; options.put("size", "120x30") %>
14
+ <%= image_tag "silver-120x30.gif", options %>
Binary file
Binary file
@@ -0,0 +1,2 @@
1
+ module Dubious
2
+ end
@@ -0,0 +1,65 @@
1
+ require 'thor'
2
+ require 'thor/group'
3
+ require 'active_support'
4
+
5
+ module Dubious
6
+ class Init < Thor::Group
7
+ include Thor::Actions
8
+ argument :name, :required => true, :desc => "Name of the application/directory"
9
+ source_root File.dirname(__FILE__)+"/templates/base"
10
+
11
+ no_tasks do
12
+ def name= name
13
+ @name = name.sub /\/$/,'' #remove trailing slash
14
+ end
15
+ end
16
+
17
+ def self.subcommand_help *args
18
+ %Q(
19
+ Creates a new dubious project application structure in the NAME directory.
20
+ Uses NAME as the appengine app name.
21
+ )
22
+ end
23
+
24
+ def init
25
+ directory '.', "#{name}/"
26
+ end
27
+
28
+ def cp_dubious_jar
29
+ copy_file '../../../dubious.jar', "#{name}/WEB-INF/lib/dubious.jar"
30
+ end
31
+
32
+ def cp_dubydatastore_jar
33
+ copy_file '../../../../javalib/dubydatastore.jar', "#{name}/WEB-INF/lib/dubydatastore.jar"
34
+ end
35
+
36
+ end
37
+
38
+ class Generator < Thor
39
+ include Thor::Actions
40
+ source_root File.dirname(__FILE__)+"/templates/generator"
41
+ argument :name
42
+
43
+
44
+ desc "model NAME", "creates model file"
45
+ def model#(name)
46
+ template "model.mirah.tt", "app/models/#{name.underscore}.mirah"
47
+ end
48
+
49
+ desc "controller NAME", "creates controller file"
50
+ def controller#(name)
51
+ template "controller.mirah.tt", "app/controllers/#{name.underscore}_controller.mirah"
52
+ empty_directory "app/views/#{name.underscore}"
53
+ inject_into_file "WEB-INF/app.yaml", " - url: /#{name.underscore}/*\n servlet: controller.#{name.classify}Controller\n name: #{name.underscore}\n",:after => "handlers:\n"
54
+ end
55
+ end
56
+
57
+ class CLI < Thor
58
+ desc "new NAME", "creates a new dubious project in NAME"
59
+ subcommand :new, Init
60
+
61
+ desc "generate GENERATOR", "run generator GENERATOR"
62
+ subcommand :generate, Generator
63
+ end
64
+
65
+ end
@@ -0,0 +1,169 @@
1
+ begin
2
+ require 'ant'
3
+ rescue LoadError
4
+ puts 'This Rakefile requires JRuby. Please use jruby -S rake.'
5
+ exit 1
6
+ end
7
+
8
+ if ENV['MIRAH_HOME'] && File.exist?(ENV['MIRAH_HOME'] +'/lib/mirah.rb')
9
+ $: << File.expand_path(ENV['MIRAH_HOME'] +'/lib')
10
+ end
11
+
12
+ if File.exist?('../bitescript/lib/bitescript.rb')
13
+ $: << File.expand_path('../bitescript/lib/')
14
+ end
15
+
16
+ MIRAH_HOME = ENV['MIRAH_HOME'] ? ENV['MIRAH_HOME'] : Gem.find_files('mirah').first.sub(/lib\/mirah.rb/,'')
17
+
18
+ MODEL_SRC_JAR = File.join(MIRAH_HOME, 'examples', 'appengine', 'war',
19
+ 'WEB-INF', 'lib', 'dubydatastore.jar')
20
+
21
+
22
+ require 'rake/clean'
23
+ require 'mirah/appengine_tasks'
24
+
25
+ def mirahc *files
26
+ if files[-1].kind_of?(Hash)
27
+ options = files.pop
28
+ else
29
+ options = {}
30
+ end
31
+ source_dir = options.fetch(:dir, Duby.source_path)
32
+ dest = File.expand_path(options.fetch(:dest, Duby.dest_path))
33
+ files = files.map {|f| f.sub(/^#{source_dir}\//, '')}
34
+ flags = options.fetch(:options, Duby.compiler_options)
35
+ args = ['-d', dest, *flags] + files
36
+ chdir(source_dir) do
37
+ cmd = "mirahc #{args.join ' '}"
38
+ puts cmd
39
+ if files.any? {|f|f.include? 'controllers'}
40
+ system cmd
41
+ else
42
+ Duby.compile(*args)
43
+ Duby.reset
44
+ end
45
+ end
46
+ end
47
+
48
+
49
+ OUTDIR = 'WEB-INF/classes'
50
+
51
+ def class_files_for files
52
+ files.map do |f|
53
+ explode = f.split('/')[1..-1]
54
+ explode.last.gsub!(/(^[a-z]|_[a-z])/) {|m|m.sub('_','').upcase}
55
+ explode.last.sub! /\.(duby|java|mirah)$/, '.class'
56
+ OUTDIR + '/' + explode.join('/')
57
+ end
58
+ end
59
+
60
+ MODEL_JAR = "WEB-INF/lib/dubydatastore.jar"
61
+
62
+ LIB_MIRAH_SRC = Dir["lib/**/*.duby"]
63
+ LIB_JAVA_SRC = Dir["lib/**/*.java"]
64
+ LIB_SRC = LIB_MIRAH_SRC + LIB_JAVA_SRC
65
+ LIB_CLASSES = class_files_for LIB_SRC
66
+
67
+ STDLIB_CLASSES= LIB_CLASSES.select{|l|l.include? 'stdlib'}
68
+
69
+
70
+ CLASSPATH = [AppEngine::Rake::SERVLET, AppEngine::SDK::API_JAR].join(":")
71
+
72
+
73
+
74
+ Duby.dest_paths << OUTDIR
75
+ Duby.source_paths << 'lib'
76
+ Duby.source_paths << 'app'
77
+ Duby.compiler_options << '--classpath' << [File.expand_path(OUTDIR), *FileList["WEB-INF/lib/*.jar"].map{|f|File.expand_path(f)}].join(':') + ':' + CLASSPATH
78
+
79
+ CLEAN.include(OUTDIR)
80
+ CLOBBER.include("WEB-INF/lib/dubious.jar", 'WEB-INF/appengine-generated')
81
+
82
+ APP_SRC = Dir["app/**/{*.duby,*.mirah}"]
83
+ APP_CLASSES = class_files_for APP_SRC
84
+ APP_MODEL_CLASSES = APP_CLASSES.select {|app| app.include? '/models' }
85
+ APP_CONTROLLER_CLASSES = APP_CLASSES.select {|app| app.include? '/controllers' }
86
+ APP_APPLICATION_CONTROLLER_CLASS = APP_CONTROLLER_CLASSES.find {|controller| controller.include? 'ApplicationController' }
87
+ TEMPLATES = Dir["app/views/**/*.erb"]
88
+
89
+ directory OUTDIR
90
+
91
+ (APP_CLASSES+LIB_CLASSES).zip(APP_SRC+LIB_SRC).each do |klass,src|
92
+ file klass => src
93
+ end
94
+
95
+ APP_CONTROLLER_CLASSES.reject {|k|k == APP_APPLICATION_CONTROLLER_CLASS}.each do |klass|
96
+ file klass => APP_APPLICATION_CONTROLLER_CLASS
97
+ end
98
+
99
+ APP_CONTROLLER_CLASSES.each do |f|
100
+ file f => APP_MODEL_CLASSES + TEMPLATES
101
+ end
102
+
103
+ APP_CLASSES.each do |f|
104
+ file f => LIB_CLASSES
105
+ end
106
+
107
+ file MODEL_JAR => MODEL_SRC_JAR do |t|
108
+ cp MODEL_SRC_JAR, MODEL_JAR
109
+ end
110
+
111
+ appengine_app :app, 'app', '' => APP_CLASSES+LIB_CLASSES
112
+
113
+ #there is an upload task in appengine_tasks, but I couldn't get it to work
114
+ desc "publish to appengine"
115
+ task :publish => 'compile:app' do
116
+ sh "appcfg.sh update ."
117
+ end
118
+
119
+ namespace :compile do
120
+ task :app => APP_CLASSES
121
+
122
+ task :java => OUTDIR do
123
+ ant.javac :srcdir => 'lib', :destdir => OUTDIR, :classpath => CLASSPATH
124
+ end
125
+
126
+ end
127
+
128
+ desc "compile app"
129
+ task :compile => 'compile:app'
130
+
131
+ desc "run development server"
132
+ task :server
133
+
134
+ task :default => :server
135
+
136
+ task :generate_build_properties do
137
+ def git_data(dir, file='')
138
+ returning = nil
139
+ chdir dir do
140
+ # ["commit abc....123", "2010-06-23 12:58:06 -0700"]
141
+ IO.popen("git rev-list --pretty=format:%ci -1 HEAD #{file}") do |f|
142
+ returning = [f.gets.chomp, f.gets.chomp]
143
+ end
144
+ end
145
+ returning
146
+ end
147
+
148
+ dubious_data = git_data(".")
149
+ mirah_data = git_data(MIRAH_HOME)
150
+ bite_data = git_data(MIRAH_HOME + '/../bitescript')
151
+ model_data = git_data(File.dirname(MODEL_SRC_JAR),File.basename(MODEL_SRC_JAR))
152
+
153
+ prop_file = "config/build.properties"
154
+ File.open(prop_file, 'w') do |f|
155
+ f.write <<-EOF
156
+ # the current build environment
157
+ application.build.time=#{Time.now.xmlschema}
158
+ dubious.version.commit=#{dubious_data[0][7..-1]}
159
+ dubious.version.time=#{Time.parse(dubious_data[1]).xmlschema}
160
+ mirah.version.commit=#{mirah_data[0][7..-1]}
161
+ mirah.version.time=#{Time.parse(mirah_data[1]).xmlschema}
162
+ bitescript.version.commit=#{bite_data[0][7..-1]}
163
+ bitescript.version.time=#{Time.parse(bite_data[1]).xmlschema}
164
+ model.version.commit=#{model_data[0][7..-1]}
165
+ model.version.time=#{Time.parse(model_data[1]).xmlschema}
166
+ EOF
167
+ end
168
+
169
+ end