sinatraband 0.1.3

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/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
+