sinatraband 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
data/bin/helper.rb ADDED
@@ -0,0 +1,53 @@
1
+ def generate_file_from_template input={:directory => './'+@name, :template => '', :final_file => '', :extension => ''}
2
+
3
+ File.open("./#{@name}#{input[:directory]}/#{input[:final_file]}.#{input[:extension]}", "w") do |f|
4
+ begin
5
+ file_template = ERB.new(File.open("#{@root}#{input[:directory]}/#{input[:template]}.erb").read)
6
+ rescue (Errno::ENOENT)
7
+ put_error_and_quit "Error: Missing template for file #{@root}#{input[:directory]}/#{input[:template]}.#{input[:extension]}."
8
+ end
9
+
10
+ begin
11
+ f.write(file_template.result(binding))
12
+ puts ".#{input[:directory]}/#{input[:final_file]}.#{input[:extension]} file created."
13
+ rescue (Errno::ENOENT)
14
+ put_error_and_quit "Error creating #{input[:final_file]}.#{input[:extension]}."
15
+ end
16
+
17
+ end
18
+ end
19
+
20
+
21
+ def mkdir input={:directory => './'+@name}
22
+ begin
23
+ Dir.mkdir input[:directory]
24
+ puts "#{input[:directory]} directory created."
25
+ rescue (Errno::EEXIST)
26
+ puts "Notice: You already have a directory #{input[:directory]}."
27
+ end
28
+ end
29
+
30
+
31
+ def elaborates_model_properties input={:model_properties => ''}
32
+
33
+ new_model_properties = Array.new
34
+
35
+ input[:model_properties].each do |model_property|
36
+ name = model_property.to_s.split(':')[0].downcase
37
+ type = model_property.to_s.split(':')[1].capitalize
38
+
39
+ if type == "Datetime" then type = "DateTime" end
40
+
41
+ if !["id", "created_at", "updated_at"].include? name
42
+ new_model_properties << "property :" + name + ", " + type
43
+ end
44
+ end
45
+
46
+ new_model_properties
47
+ end
48
+
49
+
50
+ def put_error_and_quit input={:error_message => 'An error has ocorred.'}
51
+ puts input[:error_message]
52
+ exit
53
+ end
data/bin/sinatraband ADDED
@@ -0,0 +1,92 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'pathname'
4
+ require 'erb'
5
+ require_relative './helper.rb'
6
+
7
+ class App
8
+ attr_accessor :name, :root
9
+
10
+ def proccess_arguments
11
+ #Get the global current path
12
+ @root = Pathname(__FILE__).dirname.realpath.to_s+"/../lib/templates"
13
+
14
+ #Defines operation
15
+ case ARGV[0].downcase
16
+ when "create"
17
+ #Get de App name
18
+ if ARGV[1].nil?
19
+ put_error_and_quit :error_message => "Error: Missing arguments for create action"
20
+ else
21
+ @name = ARGV[1]
22
+ create_app
23
+ end
24
+ when "model"
25
+ if ARGV[1].nil?
26
+ put_error_and_quit :error_message => "Error: Missing arguments for model action"
27
+ else
28
+ if ARGV.length > 2
29
+ model_properties = Array.new
30
+ ARGV.each_with_index do |property, index|
31
+ if index > 1
32
+ model_properties << property
33
+ end
34
+ end
35
+ end
36
+ create_model :model_name => ARGV[1], :model_properties => model_properties
37
+ end
38
+ else
39
+ put_error_and_quit :error_message => "Error: Missing or unknow arguments"
40
+ end
41
+ end
42
+
43
+ def create_app
44
+ #Creates de App diretory
45
+ mkdir :directory => "./#{@name}"
46
+
47
+ #Creates de App file
48
+ generate_file_from_template :directory => "", :template => "app", :final_file => "app", :extension => "rb"
49
+
50
+ #Creates de Database file
51
+ generate_file_from_template :directory => "", :template => "database", :final_file => "database", :extension => "rb"
52
+
53
+ #Creates de Models diretory
54
+ mkdir :directory => "./#{@name}/models"
55
+
56
+ #Creates de Controllers diretory
57
+ mkdir :directory => "./#{@name}/controllers"
58
+
59
+ #Creates de View diretory
60
+ mkdir :directory => "./#{@name}/views"
61
+
62
+ #Creates de index file
63
+ generate_file_from_template :directory => "/views", :template => "index", :final_file => "index", :extension => "erb"
64
+ end
65
+
66
+ def create_model input={:model_name => '', :model_properties => {}}
67
+ if input[:model_properties].nil?
68
+ put_error_and_quit :error_message => "Error: Missing arguments for model action"
69
+ end
70
+
71
+ @model_name = input[:model_name].capitalize
72
+ @model_properties = elaborates_model_properties :model_properties => input[:model_properties]
73
+
74
+ #Creates de Model file
75
+ generate_file_from_template :directory => "/models", :template => "model", :final_file => input[:model_name].downcase, :extension => "rb"
76
+
77
+ #Creates de Controller file
78
+ generate_file_from_template :directory => "/controllers", :template => "controller", :final_file => input[:model_name].downcase, :extension => "rb"
79
+
80
+ #Creates de View diretory
81
+ mkdir :directory => ".#{@name}/views/"+input[:model_name].downcase
82
+ end
83
+
84
+ end
85
+
86
+ #start de proccess
87
+ if ARGV.empty?
88
+ put_error_and_quit :error_message => "Error: Missing arguments"
89
+ else
90
+ app = App.new
91
+ app.proccess_arguments
92
+ end
@@ -0,0 +1,16 @@
1
+ require 'sinatra'
2
+
3
+ # Loads database configuration
4
+ require_relative './database.rb'
5
+
6
+ # Loads all models in models directory
7
+ Dir["./models/*.rb"].each {|file| require_relative file }
8
+
9
+ # Perform basic sanity checks and initialize all relationships
10
+ DataMapper.finalize
11
+
12
+ # Enables session
13
+ enable :sessions
14
+
15
+ # Loads all controllers in controllers directory
16
+ Dir["./controllers/*.rb"].each {|file| require_relative file }
@@ -0,0 +1,38 @@
1
+ get '/<%= @model_name.downcase %>' do
2
+ @<%= @model_name.downcase %> = <%= @model_name %>.all
3
+ erb :'<%= @model_name.downcase %>/index'
4
+ end
5
+
6
+ get '/<%= @model_name.downcase %>/new' do
7
+ erb :'<%= @model_name.downcase %>/new'
8
+ end
9
+
10
+ post '/<%= @model_name.downcase %>/create' do
11
+ @<%= @model_name.downcase %> = <%= @model_name %>.new(params)
12
+ if @<%= @model_name.downcase %>.save
13
+ redirect '/<%= @model_name.downcase %>'
14
+ else
15
+ erb :'<%= @model_name.downcase %>/new'
16
+ end
17
+ end
18
+
19
+ get '/<%= @model_name.downcase %>/edit/:id' do
20
+ @<%= @model_name.downcase %> = <%= @model_name %>.get(params[:id])
21
+ erb :'<%= @model_name.downcase %>/edit'
22
+ end
23
+
24
+ post '/<%= @model_name.downcase %>/update/:id' do
25
+ @<%= @model_name.downcase %> = <%= @model_name %>.get(params[:id])
26
+
27
+ if @<%= @model_name.downcase %>.update(params)
28
+ redirect '/<%= @model_name.downcase %>'
29
+ else
30
+ erb :'<%= @model_name.downcase %>/edit'
31
+ end
32
+ end
33
+
34
+ get '/<%= @model_name.downcase %>/delete/:id' do
35
+ @<%= @model_name.downcase %> = <%= @model_name %>.get(params[:id])
36
+ @<%= @model_name.downcase %>.destroy
37
+ redirect '/<%= @model_name.downcase %>'
38
+ end
@@ -0,0 +1,7 @@
1
+ require 'data_mapper'
2
+
3
+ # A MySQL connection:
4
+ DataMapper.setup(:default, 'mysql://root:@127.0.0.1/<%= @name %>')
5
+
6
+ # Set all String properties to have a default length of 255
7
+ DataMapper::Property::String.length(255)
@@ -0,0 +1,30 @@
1
+ class <%= @model_name %>
2
+ include DataMapper::Resource
3
+
4
+ property :id, Serial
5
+ <% @model_properties.each do |property|%>
6
+ <%= property %>
7
+ <% end%>
8
+ property :created_at, DateTime
9
+
10
+ property :updated_at, DateTime
11
+
12
+ #validates_absence_of
13
+ #validates_acceptance_of
14
+ #validates_with_block
15
+ #validates_confirmation_of
16
+ #validates_format_of
17
+ #validates_length_of
18
+ #validates_with_method
19
+ #validates_numericality_of
20
+ #validates_primitive_type_of
21
+ #validates_presence_of
22
+ #validates_uniqueness_of
23
+ #validates_within
24
+
25
+ #validates_with_method
26
+
27
+ end
28
+
29
+ # Automatically create the <%= @model_name %> table if you haven't already
30
+ <%= @model_name %>.auto_upgrade!
@@ -0,0 +1,15 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title><%= @name %></title>
5
+ </head>
6
+ <body>
7
+ <h1>Welcome to Sinatra</h1>
8
+ <h2>Powered by SinatraBand</h2>
9
+
10
+ <p>
11
+ You created the app called <%= @name %>.<br />
12
+ Keep developing!
13
+ </p>
14
+ </body>
15
+ </html>
metadata ADDED
@@ -0,0 +1,60 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: sinatraband
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 0.1.3
6
+ platform: ruby
7
+ authors:
8
+ - "J\xC3\xBAlio Bueno"
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+
13
+ date: 2012-09-17 00:00:00 Z
14
+ dependencies: []
15
+
16
+ description: Ruby gem to create a basic sinatra app.
17
+ email: julioce@gmail.com
18
+ executables:
19
+ - sinatraband
20
+ extensions: []
21
+
22
+ extra_rdoc_files: []
23
+
24
+ files:
25
+ - lib/templates/models/model.erb
26
+ - lib/templates/controllers/controller.erb
27
+ - lib/templates/views/index.erb
28
+ - lib/templates/app.erb
29
+ - lib/templates/database.erb
30
+ - bin/helper.rb
31
+ - bin/sinatraband
32
+ homepage: https://github.com/julioce/SinatraBand
33
+ licenses: []
34
+
35
+ post_install_message:
36
+ rdoc_options: []
37
+
38
+ require_paths:
39
+ - lib
40
+ required_ruby_version: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ">="
44
+ - !ruby/object:Gem::Version
45
+ version: "0"
46
+ required_rubygems_version: !ruby/object:Gem::Requirement
47
+ none: false
48
+ requirements:
49
+ - - ">="
50
+ - !ruby/object:Gem::Version
51
+ version: "0"
52
+ requirements: []
53
+
54
+ rubyforge_project:
55
+ rubygems_version: 1.8.24
56
+ signing_key:
57
+ specification_version: 3
58
+ summary: Sinatra app generator
59
+ test_files: []
60
+