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.
Files changed (42) hide show
  1. data/.gitignore +17 -0
  2. data/Gemfile +4 -0
  3. data/LICENSE +22 -0
  4. data/README.md +29 -0
  5. data/Rakefile +2 -0
  6. data/bin/sft +5 -0
  7. data/bin/shift +5 -0
  8. data/lib/app_engine_templates/app.yaml +13 -0
  9. data/lib/app_engine_templates/pystache/__init__.py +8 -0
  10. data/lib/app_engine_templates/pystache/__init__.pyc +0 -0
  11. data/lib/app_engine_templates/pystache/loader.py +47 -0
  12. data/lib/app_engine_templates/pystache/loader.pyc +0 -0
  13. data/lib/app_engine_templates/pystache/template.py +177 -0
  14. data/lib/app_engine_templates/pystache/template.pyc +0 -0
  15. data/lib/app_engine_templates/pystache/view.py +94 -0
  16. data/lib/app_engine_templates/pystache/view.pyc +0 -0
  17. data/lib/heroku_templates/Gemfile +6 -0
  18. data/lib/heroku_templates/Procfile +1 -0
  19. data/lib/shift-lang/builder/db_model.rb +20 -0
  20. data/lib/shift-lang/builder/url_handler.rb +17 -0
  21. data/lib/shift-lang/builder.rb +103 -0
  22. data/lib/shift-lang/generator/javascript_generator.rb +410 -0
  23. data/lib/shift-lang/generator/javascript_templates.rb +37 -0
  24. data/lib/shift-lang/generator/python_generator.rb +330 -0
  25. data/lib/shift-lang/generator/python_templates.rb +44 -0
  26. data/lib/shift-lang/generator/ruby_generator.rb +334 -0
  27. data/lib/shift-lang/generator/ruby_templates.rb +50 -0
  28. data/lib/shift-lang/generator.rb +41 -0
  29. data/lib/shift-lang/parser/control_statement_parser.rb +17 -0
  30. data/lib/shift-lang/parser/db_query_parser.rb +20 -0
  31. data/lib/shift-lang/parser/keyword_parser.rb +52 -0
  32. data/lib/shift-lang/parser/operator_parser.rb +35 -0
  33. data/lib/shift-lang/parser/routing_expression_parser.rb +33 -0
  34. data/lib/shift-lang/parser/simple_expression_parser.rb +87 -0
  35. data/lib/shift-lang/parser/token_parser.rb +69 -0
  36. data/lib/shift-lang/parser/value_returning_expression_parser.rb +18 -0
  37. data/lib/shift-lang/parser/void_statement_parser.rb +12 -0
  38. data/lib/shift-lang/parser.rb +120 -0
  39. data/lib/shift-lang/version.rb +3 -0
  40. data/lib/shift-lang.rb +224 -0
  41. data/shift-lang.gemspec +19 -0
  42. 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
@@ -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: []