shift-lang 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/.gitignore +17 -0
- data/Gemfile +4 -0
- data/LICENSE +22 -0
- data/README.md +29 -0
- data/Rakefile +2 -0
- data/bin/sft +5 -0
- data/bin/shift +5 -0
- data/lib/app_engine_templates/app.yaml +13 -0
- data/lib/app_engine_templates/pystache/__init__.py +8 -0
- data/lib/app_engine_templates/pystache/__init__.pyc +0 -0
- data/lib/app_engine_templates/pystache/loader.py +47 -0
- data/lib/app_engine_templates/pystache/loader.pyc +0 -0
- data/lib/app_engine_templates/pystache/template.py +177 -0
- data/lib/app_engine_templates/pystache/template.pyc +0 -0
- data/lib/app_engine_templates/pystache/view.py +94 -0
- data/lib/app_engine_templates/pystache/view.pyc +0 -0
- data/lib/heroku_templates/Gemfile +6 -0
- data/lib/heroku_templates/Procfile +1 -0
- data/lib/shift-lang/builder/db_model.rb +20 -0
- data/lib/shift-lang/builder/url_handler.rb +17 -0
- data/lib/shift-lang/builder.rb +103 -0
- data/lib/shift-lang/generator/javascript_generator.rb +410 -0
- data/lib/shift-lang/generator/javascript_templates.rb +37 -0
- data/lib/shift-lang/generator/python_generator.rb +330 -0
- data/lib/shift-lang/generator/python_templates.rb +44 -0
- data/lib/shift-lang/generator/ruby_generator.rb +334 -0
- data/lib/shift-lang/generator/ruby_templates.rb +50 -0
- data/lib/shift-lang/generator.rb +41 -0
- data/lib/shift-lang/parser/control_statement_parser.rb +17 -0
- data/lib/shift-lang/parser/db_query_parser.rb +20 -0
- data/lib/shift-lang/parser/keyword_parser.rb +52 -0
- data/lib/shift-lang/parser/operator_parser.rb +35 -0
- data/lib/shift-lang/parser/routing_expression_parser.rb +33 -0
- data/lib/shift-lang/parser/simple_expression_parser.rb +87 -0
- data/lib/shift-lang/parser/token_parser.rb +69 -0
- data/lib/shift-lang/parser/value_returning_expression_parser.rb +18 -0
- data/lib/shift-lang/parser/void_statement_parser.rb +12 -0
- data/lib/shift-lang/parser.rb +120 -0
- data/lib/shift-lang/version.rb +3 -0
- data/lib/shift-lang.rb +224 -0
- data/shift-lang.gemspec +19 -0
- metadata +106 -0
data/lib/shift-lang.rb
ADDED
@@ -0,0 +1,224 @@
|
|
1
|
+
require 'erb'
|
2
|
+
require 'fileutils'
|
3
|
+
|
4
|
+
require_relative 'shift-lang/generator'
|
5
|
+
require_relative 'shift-lang/version'
|
6
|
+
|
7
|
+
module Shift
|
8
|
+
class CLI
|
9
|
+
def initialize(args)
|
10
|
+
if(!args[0])
|
11
|
+
puts "Enter the project name : "
|
12
|
+
project_name = gets.chomp
|
13
|
+
|
14
|
+
if(!File.exists?(project_name))
|
15
|
+
Dir.mkdir(project_name)
|
16
|
+
Dir.chdir(project_name)
|
17
|
+
|
18
|
+
puts "Creating " + project_name + ".shift"
|
19
|
+
puts "Creating views directory"
|
20
|
+
Dir.mkdir("views")
|
21
|
+
file = File.new(project_name + ".shift", "w")
|
22
|
+
file.puts ""
|
23
|
+
file.close
|
24
|
+
else
|
25
|
+
puts "A file already exists with the same name"
|
26
|
+
end
|
27
|
+
else
|
28
|
+
case args[0]
|
29
|
+
when "generate"
|
30
|
+
case args[1]
|
31
|
+
when "python"
|
32
|
+
generate_python
|
33
|
+
when "ruby"
|
34
|
+
generate_ruby
|
35
|
+
when "javascript"
|
36
|
+
generate_javascript
|
37
|
+
else
|
38
|
+
puts "Unknown target platform. Options are ruby, python and javascript"
|
39
|
+
end
|
40
|
+
else
|
41
|
+
puts "Unknown option"
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def get_files_from_directory(directory, extension = ".shift", log = true)
|
47
|
+
files = []
|
48
|
+
Dir.foreach(directory) do | file |
|
49
|
+
if(File.directory?(file) == false)
|
50
|
+
file = File.join(directory, file)
|
51
|
+
if(File.extname(file) == extension)
|
52
|
+
if log
|
53
|
+
puts "Found file : " + File.absolute_path(file)
|
54
|
+
end
|
55
|
+
files.push File.absolute_path(file)
|
56
|
+
end
|
57
|
+
else
|
58
|
+
if ((file.to_s != '.') && (file.to_s != '..'))
|
59
|
+
file = File.join(directory, file)
|
60
|
+
files.concat get_files_from_directory(file)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
files
|
66
|
+
end
|
67
|
+
|
68
|
+
def get_files()
|
69
|
+
get_files_from_directory Dir.pwd
|
70
|
+
end
|
71
|
+
|
72
|
+
def get_project_name()
|
73
|
+
project_name = Dir.pwd.split("/")
|
74
|
+
project_name[project_name.length - 1]
|
75
|
+
end
|
76
|
+
|
77
|
+
def generate_python()
|
78
|
+
files = get_files
|
79
|
+
|
80
|
+
generated_code = Shift::Generator::generatePython(files)
|
81
|
+
|
82
|
+
if generated_code == ""
|
83
|
+
return
|
84
|
+
end
|
85
|
+
|
86
|
+
project_name = get_project_name
|
87
|
+
|
88
|
+
view_sources = File.absolute_path(File.join(Dir.pwd, "views"))
|
89
|
+
|
90
|
+
gae_sources = File.absolute_path(File.join(File.dirname(__FILE__), "app_engine_templates"))
|
91
|
+
pystache = File.join(gae_sources, "pystache")
|
92
|
+
config = File.join(gae_sources, "app.yaml")
|
93
|
+
|
94
|
+
config_contents = File.open(config, "r") { |io| io.read }
|
95
|
+
|
96
|
+
config_template = ERB.new(config_contents)
|
97
|
+
|
98
|
+
if(!File.exists?("release"))
|
99
|
+
Dir.mkdir("release")
|
100
|
+
end
|
101
|
+
Dir.chdir("release")
|
102
|
+
|
103
|
+
if(File.exists?("python"))
|
104
|
+
FileUtils.remove_dir("python", true)
|
105
|
+
end
|
106
|
+
|
107
|
+
Dir.mkdir("python")
|
108
|
+
Dir.chdir("python")
|
109
|
+
|
110
|
+
puts "Creating target folder 'release/" + project_name + "'"
|
111
|
+
Dir.mkdir(project_name)
|
112
|
+
Dir.chdir(project_name)
|
113
|
+
|
114
|
+
puts "Writing application file"
|
115
|
+
File.open(project_name + ".py", "w") do |file|
|
116
|
+
file.puts generated_code
|
117
|
+
end
|
118
|
+
|
119
|
+
puts "Copying templates"
|
120
|
+
FileUtils.cp_r(pystache, Dir.pwd)
|
121
|
+
FileUtils.cp_r(view_sources, Dir.pwd)
|
122
|
+
|
123
|
+
template_files = get_files_from_directory(File.join(Dir.pwd, "views"), ".html", false)
|
124
|
+
template_files.each do | template_file |
|
125
|
+
text = File.read(template_file)
|
126
|
+
File.open(template_file, "w") { | file | file.puts text.gsub("{{id}}", "{{#key}}{{id}}{{/key}}") }
|
127
|
+
end
|
128
|
+
|
129
|
+
puts "Writing Google App Engine configuration file"
|
130
|
+
File.open("app.yaml", "w") do |file|
|
131
|
+
file.puts config_template.result(binding)
|
132
|
+
end
|
133
|
+
|
134
|
+
puts "Done."
|
135
|
+
end
|
136
|
+
|
137
|
+
def generate_ruby()
|
138
|
+
files = get_files
|
139
|
+
|
140
|
+
generated_code = Shift::Generator::generateRuby(files)
|
141
|
+
|
142
|
+
if generated_code == ""
|
143
|
+
return
|
144
|
+
end
|
145
|
+
|
146
|
+
project_name = get_project_name
|
147
|
+
|
148
|
+
view_sources = File.absolute_path(File.join(Dir.pwd, "views"))
|
149
|
+
template_sources = File.absolute_path(File.join(File.dirname(__FILE__), "heroku_templates"))
|
150
|
+
gemfile = File.join(template_sources, "Gemfile")
|
151
|
+
procfile = File.join(template_sources, "Procfile")
|
152
|
+
|
153
|
+
if(!File.exists?("release"))
|
154
|
+
Dir.mkdir("release")
|
155
|
+
end
|
156
|
+
Dir.chdir("release")
|
157
|
+
|
158
|
+
if(File.exists?("ruby"))
|
159
|
+
FileUtils.remove_dir("ruby", true)
|
160
|
+
end
|
161
|
+
|
162
|
+
Dir.mkdir("ruby")
|
163
|
+
Dir.chdir("ruby")
|
164
|
+
|
165
|
+
puts "Creating target folder 'release/" + project_name + "'"
|
166
|
+
Dir.mkdir(project_name)
|
167
|
+
Dir.chdir(project_name)
|
168
|
+
|
169
|
+
puts "Writing application file"
|
170
|
+
File.open("app.rb", "w") do |file|
|
171
|
+
file.puts generated_code
|
172
|
+
end
|
173
|
+
|
174
|
+
puts "Copying templates"
|
175
|
+
FileUtils.cp_r(view_sources, Dir.pwd)
|
176
|
+
|
177
|
+
puts "Generating Heroku configuration files"
|
178
|
+
FileUtils.cp(gemfile, Dir.pwd)
|
179
|
+
FileUtils.cp(procfile, Dir.pwd)
|
180
|
+
|
181
|
+
puts "Done."
|
182
|
+
end
|
183
|
+
|
184
|
+
def generate_javascript()
|
185
|
+
files = get_files
|
186
|
+
|
187
|
+
generated_code = Shift::Generator::generateJavaScript(files)
|
188
|
+
|
189
|
+
if generated_code == ""
|
190
|
+
return
|
191
|
+
end
|
192
|
+
|
193
|
+
project_name = get_project_name
|
194
|
+
|
195
|
+
view_sources = File.absolute_path(File.join(Dir.pwd, "views"))
|
196
|
+
|
197
|
+
if(!File.exists?("release"))
|
198
|
+
Dir.mkdir("release")
|
199
|
+
end
|
200
|
+
Dir.chdir("release")
|
201
|
+
|
202
|
+
if(File.exists?("javascript"))
|
203
|
+
FileUtils.remove_dir("javascript", true)
|
204
|
+
end
|
205
|
+
|
206
|
+
Dir.mkdir("javascript")
|
207
|
+
Dir.chdir("javascript")
|
208
|
+
|
209
|
+
puts "Creating target folder 'release/" + project_name + "'"
|
210
|
+
Dir.mkdir(project_name)
|
211
|
+
Dir.chdir(project_name)
|
212
|
+
|
213
|
+
puts "Writing application file"
|
214
|
+
File.open("app.js", "w") do |file|
|
215
|
+
file.puts generated_code
|
216
|
+
end
|
217
|
+
|
218
|
+
puts "Copying templates"
|
219
|
+
FileUtils.cp_r(view_sources, Dir.pwd)
|
220
|
+
|
221
|
+
puts "Done."
|
222
|
+
end
|
223
|
+
end
|
224
|
+
end
|
data/shift-lang.gemspec
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
require File.expand_path('../lib/shift-lang/version', __FILE__)
|
3
|
+
|
4
|
+
Gem::Specification.new do |gem|
|
5
|
+
gem.authors = ["Pradeek"]
|
6
|
+
gem.email = ["jpradeek@gmail.com"]
|
7
|
+
gem.description = %q{Shift is a Domain-Specific Language that can be used to quickly write server-side applications}
|
8
|
+
gem.summary = %q{Shift is a Domain-Specific Language that can be used to quickly write server-side applications}
|
9
|
+
gem.homepage = "https://rubygems.org/gems/shift-lang"
|
10
|
+
|
11
|
+
gem.files = `git ls-files`.split($\)
|
12
|
+
gem.executables = ["sft", "shift"]
|
13
|
+
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
14
|
+
gem.name = "shift-lang"
|
15
|
+
gem.require_paths = ["lib"]
|
16
|
+
gem.version = Shift::VERSION
|
17
|
+
|
18
|
+
gem.add_dependency('parslet')
|
19
|
+
end
|
metadata
ADDED
@@ -0,0 +1,106 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: shift-lang
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Pradeek
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-04-10 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: parslet
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
30
|
+
description: Shift is a Domain-Specific Language that can be used to quickly write
|
31
|
+
server-side applications
|
32
|
+
email:
|
33
|
+
- jpradeek@gmail.com
|
34
|
+
executables:
|
35
|
+
- sft
|
36
|
+
- shift
|
37
|
+
extensions: []
|
38
|
+
extra_rdoc_files: []
|
39
|
+
files:
|
40
|
+
- .gitignore
|
41
|
+
- Gemfile
|
42
|
+
- LICENSE
|
43
|
+
- README.md
|
44
|
+
- Rakefile
|
45
|
+
- bin/sft
|
46
|
+
- bin/shift
|
47
|
+
- lib/app_engine_templates/app.yaml
|
48
|
+
- lib/app_engine_templates/pystache/__init__.py
|
49
|
+
- lib/app_engine_templates/pystache/__init__.pyc
|
50
|
+
- lib/app_engine_templates/pystache/loader.py
|
51
|
+
- lib/app_engine_templates/pystache/loader.pyc
|
52
|
+
- lib/app_engine_templates/pystache/template.py
|
53
|
+
- lib/app_engine_templates/pystache/template.pyc
|
54
|
+
- lib/app_engine_templates/pystache/view.py
|
55
|
+
- lib/app_engine_templates/pystache/view.pyc
|
56
|
+
- lib/heroku_templates/Gemfile
|
57
|
+
- lib/heroku_templates/Procfile
|
58
|
+
- lib/shift-lang.rb
|
59
|
+
- lib/shift-lang/builder.rb
|
60
|
+
- lib/shift-lang/builder/db_model.rb
|
61
|
+
- lib/shift-lang/builder/url_handler.rb
|
62
|
+
- lib/shift-lang/generator.rb
|
63
|
+
- lib/shift-lang/generator/javascript_generator.rb
|
64
|
+
- lib/shift-lang/generator/javascript_templates.rb
|
65
|
+
- lib/shift-lang/generator/python_generator.rb
|
66
|
+
- lib/shift-lang/generator/python_templates.rb
|
67
|
+
- lib/shift-lang/generator/ruby_generator.rb
|
68
|
+
- lib/shift-lang/generator/ruby_templates.rb
|
69
|
+
- lib/shift-lang/parser.rb
|
70
|
+
- lib/shift-lang/parser/control_statement_parser.rb
|
71
|
+
- lib/shift-lang/parser/db_query_parser.rb
|
72
|
+
- lib/shift-lang/parser/keyword_parser.rb
|
73
|
+
- lib/shift-lang/parser/operator_parser.rb
|
74
|
+
- lib/shift-lang/parser/routing_expression_parser.rb
|
75
|
+
- lib/shift-lang/parser/simple_expression_parser.rb
|
76
|
+
- lib/shift-lang/parser/token_parser.rb
|
77
|
+
- lib/shift-lang/parser/value_returning_expression_parser.rb
|
78
|
+
- lib/shift-lang/parser/void_statement_parser.rb
|
79
|
+
- lib/shift-lang/version.rb
|
80
|
+
- shift-lang.gemspec
|
81
|
+
homepage: https://rubygems.org/gems/shift-lang
|
82
|
+
licenses: []
|
83
|
+
post_install_message:
|
84
|
+
rdoc_options: []
|
85
|
+
require_paths:
|
86
|
+
- lib
|
87
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
88
|
+
none: false
|
89
|
+
requirements:
|
90
|
+
- - ! '>='
|
91
|
+
- !ruby/object:Gem::Version
|
92
|
+
version: '0'
|
93
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
94
|
+
none: false
|
95
|
+
requirements:
|
96
|
+
- - ! '>='
|
97
|
+
- !ruby/object:Gem::Version
|
98
|
+
version: '0'
|
99
|
+
requirements: []
|
100
|
+
rubyforge_project:
|
101
|
+
rubygems_version: 1.8.21
|
102
|
+
signing_key:
|
103
|
+
specification_version: 3
|
104
|
+
summary: Shift is a Domain-Specific Language that can be used to quickly write server-side
|
105
|
+
applications
|
106
|
+
test_files: []
|