create 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. data/bin/create +3 -0
  2. data/create.gemspec +17 -0
  3. data/lib/create.rb +154 -0
  4. metadata +48 -0
data/bin/create ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'create'
data/create.gemspec ADDED
@@ -0,0 +1,17 @@
1
+ Gem::Specification.new do |gem|
2
+ gem.name = 'create'
3
+ gem.version = '0.1.1'
4
+ gem.date = '2011-07-05'
5
+
6
+ gem.description = 'Sinatra directory structure and code generator.'
7
+ gem.summary = gem.description
8
+
9
+ gem.author = 'Denis Fadeev'
10
+ gem.email = 'denis@fadeev.in'
11
+
12
+ gem.files = %w{ create.gemspec lib/create.rb bin/create }
13
+
14
+ gem.executable = 'create'
15
+
16
+ gem.homepage = 'http://github.com/fadeev/create'
17
+ end
data/lib/create.rb ADDED
@@ -0,0 +1,154 @@
1
+ require 'fileutils'
2
+ require 'open-uri'
3
+
4
+ include FileUtils
5
+
6
+ arguments = %w{ haml erb sass reset jquery prototype datamapper textile }
7
+ arguments.each do |argument|
8
+ instance_variable_set("@#{argument}", true) if ARGV.include? argument
9
+ end
10
+
11
+ if ARGV.empty?
12
+ puts " \033[31merror\033[0m\ Please supply at least one argument (name of the app)."
13
+ exit
14
+ elsif arguments.include?(ARGV.first)
15
+ puts " \033[31merror\033[0m\ First argument cannot be #{arguments}."
16
+ exit
17
+ elsif Dir.exists?(ARGV.first)
18
+ puts " \033[31merror\033[0m\ Directory '#{ARGV.first}' already exists."
19
+ exit
20
+ end
21
+
22
+ app_name = ARGV.first
23
+
24
+ mkdir app_name
25
+ cd app_name
26
+ mkdir_p ['views', 'public/javascripts', 'public/stylesheets', 'public/images']
27
+
28
+ File.open "#{app_name}.rb", 'w' do |f|
29
+ puts " \033[32mnew\033[0m\ #{app_name}.rb"
30
+ f << "# encoding: utf-8\n"
31
+ f << "\n"
32
+ f << "require 'sinatra'\n"
33
+ f << "require 'data_mapper'\n" if @datamapper
34
+ f << "require 'haml'\n" if @haml
35
+ f << "require 'sass'\n" if @sass
36
+ f << "\n"
37
+ f << "use Rack::MethodOverride\n"
38
+ f << "\n"
39
+ if @datamapper || @haml
40
+ f << "configure do\n"
41
+ f << " set :haml, :format => :html5\n" if @haml
42
+ f << ' DataMapper::setup(:default, ENV["DATABASE_URL"] || "sqlite3://#{Dir.pwd}/data.db")' + "\n" if @datamapper
43
+ f << " DataMapper.auto_upgrade!\n" if @datamapper
44
+ f << "end\n"
45
+ f << "\n"
46
+ end
47
+ if @sass
48
+ f << "get '/stylesheets/application.css' do\n"
49
+ f << " sass :stylesheet, :style => :expanded\n"
50
+ f << "end\n"
51
+ f << "\n"
52
+ end
53
+ f << "get '/' do\n"
54
+ f << " haml :index\n" if @haml
55
+ f << " erb :index\n" if @erb
56
+ f << "end\n"
57
+ end
58
+
59
+ File.open 'config.ru', 'w' do |f|
60
+ puts " \033[32mnew\033[0m\ config.ru"
61
+ f << "# encoding: utf-8\n"
62
+ f << "\n"
63
+ f << "require 'sinatra'\n"
64
+ f << "require './#{app_name}.rb'\n"
65
+ f << "\n"
66
+ f << "run Sinatra::Application\n"
67
+ end
68
+
69
+ File.open 'Gemfile', 'w' do |f|
70
+ puts " \033[32mnew\033[0m\ Gemfile"
71
+ f << "source :rubygems\n"
72
+ f << "\n"
73
+ f << "gem 'sinatra'\n"
74
+ f << "gem 'data_mapper'\n" if @datamapper
75
+ f << "gem 'haml'\n" if @haml
76
+ f << "gem 'sass\n" if @sass
77
+ f << "gem 'RedCloth'\n"
78
+ end
79
+
80
+ if @haml
81
+ File.open './views/layout.haml', 'w' do |f|
82
+ puts " \033[32mnew\033[0m\ views/layout.haml"
83
+ f << "!!!\n"
84
+ f << "%html\n"
85
+ f << " %head\n"
86
+ f << " %meta{charset: 'utf-8'}\n"
87
+ f << " %title \n"
88
+ f << " %link{rel: 'stylesheet', type: 'text/stylesheet', href: '/stylesheets/reset.css'}\n" if @reset
89
+ f << " %link{rel: 'stylesheet', type: 'text/stylesheet', href: '/stylesheets/application.css'}\n"
90
+ f << " %script{type: 'text/javascript', src: '/javascripts/jquery.min.js'}\n" if @jquery
91
+ f << " %script{type: 'text/javascript', src: '/javascripts/prototype.js'}\n" if @prototype
92
+ f << " %script{type: 'text/javascript', src: '/javascripts/application.js'}\n"
93
+ f << " %body\n"
94
+ f << " = yield\n"
95
+ end
96
+
97
+ touch './views/index.haml'
98
+ puts " \033[32mnew\033[0m\ views/index.haml"
99
+
100
+ elsif @erb
101
+ File.open './views/layout.erb', 'w' do |f|
102
+ puts " \033[32mnew\033[0m\ views/layout.erb"
103
+ f << "<!DOCTYPE html>\n"
104
+ f << "<html>\n"
105
+ f << " <head>\n"
106
+ f << " <meta charset='utf-8' />\n"
107
+ f << " <title> </title>\n"
108
+ f << " <link rel='stylesheet' type='text/stylesheet' href='/stylesheets/reset.css' />\n" if @reset
109
+ f << " <link rel='stylesheet' type='text/stylesheet' href='/stylesheets/application.css' />\n"
110
+ f << " <script type='text/javascript' src='/javascripts/jquery.min.js' />\n" if @jquery
111
+ f << " <script type='text/javascript' src='/javascripts/prototype.js' />\n" if @prototype
112
+ f << " <script type='text/javascript' src='/javascripts/application.js' />\n"
113
+ f << " </head>\n"
114
+ f << " <body>\n"
115
+ f << " <%= yield %>\n"
116
+ f << " </body>\n"
117
+ f << "</html>\n"
118
+ end
119
+
120
+ touch './views/index.erb'
121
+ puts " \033[32mnew\033[0m\ views/index.erb"
122
+ end
123
+
124
+ File.open './public/stylesheets/reset.css', 'w' do |f|
125
+ puts " \033[32mnew\033[0m\ public/stylesheets/reset.css"
126
+ f << open('http://meyerweb.com/eric/tools/css/reset/reset.css').read
127
+ end if @reset
128
+
129
+ File.open './views/application.sass', 'w' do |f|
130
+ puts " \033[32mnew\033[0m\ public/application.sass"
131
+ end
132
+
133
+ touch './public/javascripts/application.js'
134
+ puts " \033[32mnew\033[0m\ public/javascripts/application.js"
135
+
136
+ if @jquery
137
+ File.open './public/javascripts/jquery.min.js', 'w' do |f|
138
+ puts " \033[32mnew\033[0m\ public/javascripts/jquery.min.js"
139
+ f << open('http://code.jquery.com/jquery.min.js').read
140
+ end
141
+
142
+ File.open './public/javascripts/application.js', 'w' do |f|
143
+ f << "$(function() {\n"
144
+ f << " \n"
145
+ f << " // Code goes here...\n"
146
+ f << " \n"
147
+ f << "});\n"
148
+ end
149
+ elsif @prototype
150
+ File.open './public/javascripts/prototype.js', 'w' do |f|
151
+ puts " \033[32mnew\033[0m\ public/javascripts/prototype.js"
152
+ f << open('https://ajax.googleapis.com/ajax/libs/prototype/1.7.0.0/prototype.js').read
153
+ end
154
+ end
metadata ADDED
@@ -0,0 +1,48 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: create
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Denis Fadeev
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2011-07-05 00:00:00.000000000Z
13
+ dependencies: []
14
+ description: Sinatra directory structure and code generator.
15
+ email: denis@fadeev.in
16
+ executables:
17
+ - create
18
+ extensions: []
19
+ extra_rdoc_files: []
20
+ files:
21
+ - create.gemspec
22
+ - lib/create.rb
23
+ - bin/create
24
+ homepage: http://github.com/fadeev/create
25
+ licenses: []
26
+ post_install_message:
27
+ rdoc_options: []
28
+ require_paths:
29
+ - lib
30
+ required_ruby_version: !ruby/object:Gem::Requirement
31
+ none: false
32
+ requirements:
33
+ - - ! '>='
34
+ - !ruby/object:Gem::Version
35
+ version: '0'
36
+ required_rubygems_version: !ruby/object:Gem::Requirement
37
+ none: false
38
+ requirements:
39
+ - - ! '>='
40
+ - !ruby/object:Gem::Version
41
+ version: '0'
42
+ requirements: []
43
+ rubyforge_project:
44
+ rubygems_version: 1.8.5
45
+ signing_key:
46
+ specification_version: 3
47
+ summary: Sinatra directory structure and code generator.
48
+ test_files: []