scarecrow 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/Manifest ADDED
@@ -0,0 +1,21 @@
1
+ Manifest
2
+ README.rdoc
3
+ Rakefile
4
+ bin/scarecrow
5
+ lib/scarecrow.rb
6
+ lib/scarecrow/generator.rb
7
+ lib/scarecrow/generators/application.rb
8
+ lib/scarecrow/generators/application/Rakefile
9
+ lib/scarecrow/urlmap.rb
10
+ pkg/scarecrow-0.0.1.gem
11
+ pkg/scarecrow-0.0.1.tar.gz
12
+ pkg/scarecrow-0.0.1/Manifest
13
+ pkg/scarecrow-0.0.1/README.rdoc
14
+ pkg/scarecrow-0.0.1/Rakefile
15
+ pkg/scarecrow-0.0.1/bin/scarecrow
16
+ pkg/scarecrow-0.0.1/lib/scarecrow.rb
17
+ pkg/scarecrow-0.0.1/lib/scarecrow/generator.rb
18
+ pkg/scarecrow-0.0.1/lib/scarecrow/generators/application.rb
19
+ pkg/scarecrow-0.0.1/lib/scarecrow/generators/application/Rakefile
20
+ pkg/scarecrow-0.0.1/lib/scarecrow/urlmap.rb
21
+ pkg/scarecrow-0.0.1/scarecrow.gemspec
data/README.rdoc ADDED
@@ -0,0 +1,16 @@
1
+ = Scarecrow
2
+
3
+ Scarecrow is a simple web framework based on Sinatra.
4
+
5
+ == Installation
6
+
7
+ Use RubyGem as usual
8
+
9
+ $ gem install hackenporsche-scarecrow
10
+ or
11
+ $ sudo gem install hackenporsche-scarecrow
12
+
13
+
14
+ Make sure you have Github in your RubyGem sources (if not use the following)
15
+
16
+ $ sudo gem source -a http://gems.github.com/
data/Rakefile ADDED
@@ -0,0 +1,12 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+ require 'echoe'
4
+
5
+ Echoe.new("scarecrow", "0.0.1") do |config|
6
+ config.description = "A simple web framework for Ruby based on Sinatra"
7
+ config.url = "http://github.com/hackenporsche/scarecrow"
8
+ config.author = "hackenporsche"
9
+ config.email = "sin3141592@gmail.com"
10
+ config.ignore_pattern = ["tmp"]
11
+ config.development_dependencies = []
12
+ end
data/bin/scarecrow ADDED
@@ -0,0 +1,15 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'rubygems'
4
+ require 'scarecrow/generator'
5
+
6
+ def main
7
+ if ARGV.length == 0
8
+ puts "Usage: scarecrow APPNAME"
9
+ exit 1
10
+ end
11
+ puts "Create new application called #{ARGV.first}"
12
+ Scarecrow::Generator.generate(:application, {:appname => ARGV.first})
13
+ end
14
+
15
+ main
data/lib/scarecrow.rb ADDED
@@ -0,0 +1,56 @@
1
+ require "erb"
2
+
3
+ # Add useful methods to standard classes
4
+
5
+ class File
6
+ def self.cut_extension(path)
7
+ path[0..path.length - File.extname(path).length - 1]
8
+ end
9
+ end
10
+
11
+ class String
12
+ def camelcase
13
+ (self.split("_").map { |part| part.capitalize }).join("")
14
+ end
15
+
16
+ def upcase?
17
+ self == self.upcase
18
+ end
19
+
20
+ def downcase?
21
+ self == self.downcase
22
+ end
23
+
24
+ def to_classobj
25
+ Kernel.const_get(self)
26
+ end
27
+
28
+ def to_presenter
29
+ (self.camelcase + "Presenter").to_classobj
30
+ end
31
+ end
32
+
33
+ class Presenter
34
+ def render(locals, template)
35
+ path = File.join("views", presenter_name, template + ".html.erb")
36
+ ERB.new(open(path).read).result
37
+ end
38
+
39
+ def presenter_name
40
+ class_name = self.class.to_s
41
+ if class_name.end_with?("Presenter")
42
+ name = class_name[0..class_name.length - "Presenter".length - 1]
43
+ else
44
+ name = class_name[0..class_name.length - 1]
45
+ end
46
+ result = name[0..0].downcase
47
+ name[1..name.length - 1].each_char do |char|
48
+ if char.upcase?
49
+ result += "_#{char.downcase}"
50
+ else
51
+ result += char
52
+ end
53
+ end
54
+ result
55
+ end
56
+ end
@@ -0,0 +1,42 @@
1
+ require 'rubygems'
2
+ require 'ftools'
3
+
4
+ module Scarecrow
5
+ module Generator
6
+ def self.generate(structure, args)
7
+ structure = structure.to_s
8
+ require "scarecrow/generators/#{structure}"
9
+ obj = get_structure_object(structure)
10
+ create_folders(obj.needed_folders(args))
11
+ create_files(structure, obj.needed_files(args), args)
12
+ end
13
+
14
+ def self.create_folders(folders)
15
+ folders.each do |folder|
16
+ puts "\tcreate #{folder}"
17
+ Dir.mkdir(folder)
18
+ end
19
+ end
20
+
21
+ def self.create_files(structure, files, args)
22
+ path = "scarecrow/generators/#{structure}"
23
+ obj = get_structure_object(structure)
24
+ files.each do |file|
25
+ puts "\tcreate #{args[:appname]}/#{file}"
26
+ File.copy(File.join(obj.path, file),
27
+ File.join(args[:appname], file))
28
+ if obj.apply_template?
29
+ apply_template(file)
30
+ end
31
+ end
32
+ end
33
+
34
+ def self.apply_template(file)
35
+ end
36
+
37
+ def self.get_structure_object(structure)
38
+ # obj = Kernel.const_get(structure.downcase.capitalize)
39
+ Scarecrow::Generator.const_get(structure.downcase.capitalize)
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,27 @@
1
+ require "rubygems"
2
+ require "scarecrow"
3
+ require "scarecrow/generator"
4
+
5
+ module Scarecrow
6
+ module Generator
7
+ class Application
8
+ def self.needed_folders(args)
9
+ ["presenters", "views", "models", "config"].map do |folder|
10
+ File.join(args[:appname], folder)
11
+ end.unshift(args[:appname])
12
+ end
13
+
14
+ def self.needed_files(args)
15
+ ["Rakefile"]
16
+ end
17
+
18
+ def self.apply_template?
19
+ false
20
+ end
21
+
22
+ def self.path
23
+ File.cut_extension(__FILE__)
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,8 @@
1
+ require "rubygems"
2
+ require "scarecrow"
3
+
4
+ task "server" do
5
+ require "sinatra"
6
+ require "config/routes"
7
+ Sinatra::Application.run!
8
+ end
@@ -0,0 +1,33 @@
1
+ class UrlMap
2
+ def self.configure(&block)
3
+ urlmap = UrlMap.new
4
+ block.call urlmap
5
+ end
6
+
7
+ def resource(class_name)
8
+ require "presenters/#{class_name}"
9
+ obj = class_name.to_s.to_presenter.new
10
+ routes = [{:route => "",
11
+ :method => "get",
12
+ :action => "index"},
13
+ {:route => "show",
14
+ :method => "get",
15
+ :action => "show"}]
16
+ routes.each do |route|
17
+ block = Proc.new { obj.method(route[:action]).call }
18
+ url = "/#{class_name}"
19
+ if route[:route] != ""
20
+ url << "/#{route[:route]}"
21
+ else
22
+ url << "/?"
23
+ end
24
+ send route[:method], url, &block
25
+ end
26
+ end
27
+
28
+ def connect(route, class_name, action, method = "get")
29
+ obj = class_name.to_s.to_presenter.new
30
+ block = Proc.new { obj.send action }
31
+ send method, route, &block
32
+ end
33
+ end
Binary file
Binary file
@@ -0,0 +1,21 @@
1
+ Manifest
2
+ README.rdoc
3
+ Rakefile
4
+ bin/scarecrow
5
+ lib/scarecrow.rb
6
+ lib/scarecrow/generator.rb
7
+ lib/scarecrow/generators/application.rb
8
+ lib/scarecrow/generators/application/Rakefile
9
+ lib/scarecrow/urlmap.rb
10
+ pkg/scarecrow-0.0.1.gem
11
+ pkg/scarecrow-0.0.1.tar.gz
12
+ pkg/scarecrow-0.0.1/Manifest
13
+ pkg/scarecrow-0.0.1/README.rdoc
14
+ pkg/scarecrow-0.0.1/Rakefile
15
+ pkg/scarecrow-0.0.1/bin/scarecrow
16
+ pkg/scarecrow-0.0.1/lib/scarecrow.rb
17
+ pkg/scarecrow-0.0.1/lib/scarecrow/generator.rb
18
+ pkg/scarecrow-0.0.1/lib/scarecrow/generators/application.rb
19
+ pkg/scarecrow-0.0.1/lib/scarecrow/generators/application/Rakefile
20
+ pkg/scarecrow-0.0.1/lib/scarecrow/urlmap.rb
21
+ pkg/scarecrow-0.0.1/scarecrow.gemspec
@@ -0,0 +1,16 @@
1
+ = Scarecrow
2
+
3
+ Scarecrow is a simple web framework based on Sinatra.
4
+
5
+ == Installation
6
+
7
+ Use RubyGem as usual
8
+
9
+ $ gem install hackenporsche-scarecrow
10
+ or
11
+ $ sudo gem install hackenporsche-scarecrow
12
+
13
+
14
+ Make sure you have Github in your RubyGem sources (if not use the following)
15
+
16
+ $ sudo gem source -a http://gems.github.com/
@@ -0,0 +1,12 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+ require 'echoe'
4
+
5
+ Echoe.new("scarecrow", "0.0.1") do |config|
6
+ config.description = "A simple web framework for Ruby based on Sinatra"
7
+ config.url = "http://github.com/hackenporsche/scarecrow"
8
+ config.author = "hackenporsche"
9
+ config.email = "sin3141592@gmail.com"
10
+ config.ignore_pattern = ["tmp"]
11
+ config.development_dependencies = []
12
+ end
@@ -0,0 +1,15 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'rubygems'
4
+ require 'scarecrow/generator'
5
+
6
+ def main
7
+ if ARGV.length == 0
8
+ puts "Usage: scarecrow APPNAME"
9
+ exit 1
10
+ end
11
+ puts "Create new application called #{ARGV.first}"
12
+ Scarecrow::Generator.generate(:application, {:appname => ARGV.first})
13
+ end
14
+
15
+ main
@@ -0,0 +1,56 @@
1
+ require "erb"
2
+
3
+ # Add useful methods to standard classes
4
+
5
+ class File
6
+ def self.cut_extension(path)
7
+ path[0..path.length - File.extname(path).length - 1]
8
+ end
9
+ end
10
+
11
+ class String
12
+ def camelcase
13
+ (self.split("_").map { |part| part.capitalize }).join("")
14
+ end
15
+
16
+ def upcase?
17
+ self == self.upcase
18
+ end
19
+
20
+ def downcase?
21
+ self == self.downcase
22
+ end
23
+
24
+ def to_classobj
25
+ Kernel.const_get(self)
26
+ end
27
+
28
+ def to_presenter
29
+ (self.camelcase + "Presenter").to_classobj
30
+ end
31
+ end
32
+
33
+ class Presenter
34
+ def render(locals, template)
35
+ path = File.join("views", presenter_name, template + ".html.erb")
36
+ ERB.new(open(path).read).result
37
+ end
38
+
39
+ def presenter_name
40
+ class_name = self.class.to_s
41
+ if class_name.end_with?("Presenter")
42
+ name = class_name[0..class_name.length - "Presenter".length - 1]
43
+ else
44
+ name = class_name[0..class_name.length - 1]
45
+ end
46
+ result = name[0..0].downcase
47
+ name[1..name.length - 1].each_char do |char|
48
+ if char.upcase?
49
+ result += "_#{char.downcase}"
50
+ else
51
+ result += char
52
+ end
53
+ end
54
+ result
55
+ end
56
+ end
@@ -0,0 +1,42 @@
1
+ require 'rubygems'
2
+ require 'ftools'
3
+
4
+ module Scarecrow
5
+ module Generator
6
+ def self.generate(structure, args)
7
+ structure = structure.to_s
8
+ require "scarecrow/generators/#{structure}"
9
+ obj = get_structure_object(structure)
10
+ create_folders(obj.needed_folders(args))
11
+ create_files(structure, obj.needed_files(args), args)
12
+ end
13
+
14
+ def self.create_folders(folders)
15
+ folders.each do |folder|
16
+ puts "\tcreate #{folder}"
17
+ Dir.mkdir(folder)
18
+ end
19
+ end
20
+
21
+ def self.create_files(structure, files, args)
22
+ path = "scarecrow/generators/#{structure}"
23
+ obj = get_structure_object(structure)
24
+ files.each do |file|
25
+ puts "\tcreate #{args[:appname]}/#{file}"
26
+ File.copy(File.join(obj.path, file),
27
+ File.join(args[:appname], file))
28
+ if obj.apply_template?
29
+ apply_template(file)
30
+ end
31
+ end
32
+ end
33
+
34
+ def self.apply_template(file)
35
+ end
36
+
37
+ def self.get_structure_object(structure)
38
+ # obj = Kernel.const_get(structure.downcase.capitalize)
39
+ Scarecrow::Generator.const_get(structure.downcase.capitalize)
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,27 @@
1
+ require "rubygems"
2
+ require "scarecrow"
3
+ require "scarecrow/generator"
4
+
5
+ module Scarecrow
6
+ module Generator
7
+ class Application
8
+ def self.needed_folders(args)
9
+ ["presenters", "views", "models", "config"].map do |folder|
10
+ File.join(args[:appname], folder)
11
+ end.unshift(args[:appname])
12
+ end
13
+
14
+ def self.needed_files(args)
15
+ ["Rakefile"]
16
+ end
17
+
18
+ def self.apply_template?
19
+ false
20
+ end
21
+
22
+ def self.path
23
+ File.cut_extension(__FILE__)
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,8 @@
1
+ require "rubygems"
2
+ require "scarecrow"
3
+
4
+ task "server" do
5
+ require "sinatra"
6
+ require "config/routes"
7
+ Sinatra::Application.run!
8
+ end
@@ -0,0 +1,33 @@
1
+ class UrlMap
2
+ def self.configure(&block)
3
+ urlmap = UrlMap.new
4
+ block.call urlmap
5
+ end
6
+
7
+ def resource(class_name)
8
+ require "presenters/#{class_name}"
9
+ obj = class_name.to_s.to_presenter.new
10
+ routes = [{:route => "",
11
+ :method => "get",
12
+ :action => "index"},
13
+ {:route => "show",
14
+ :method => "get",
15
+ :action => "show"}]
16
+ routes.each do |route|
17
+ block = Proc.new { obj.method(route[:action]).call }
18
+ url = "/#{class_name}"
19
+ if route[:route] != ""
20
+ url << "/#{route[:route]}"
21
+ else
22
+ url << "/?"
23
+ end
24
+ send route[:method], url, &block
25
+ end
26
+ end
27
+
28
+ def connect(route, class_name, action, method = "get")
29
+ obj = class_name.to_s.to_presenter.new
30
+ block = Proc.new { obj.send action }
31
+ send method, route, &block
32
+ end
33
+ end
@@ -0,0 +1,33 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = %q{scarecrow}
5
+ s.version = "0.0.1"
6
+
7
+ s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
8
+ s.authors = ["hackenporsche"]
9
+ s.date = %q{2009-10-09}
10
+ s.default_executable = %q{scarecrow}
11
+ s.description = %q{A simple web framework for Ruby based on Sinatra}
12
+ s.email = %q{sin3141592@gmail.com}
13
+ s.executables = ["scarecrow"]
14
+ s.extra_rdoc_files = ["README.rdoc", "bin/scarecrow", "lib/scarecrow.rb", "lib/scarecrow/generator.rb", "lib/scarecrow/generators/application.rb", "lib/scarecrow/generators/application/Rakefile", "lib/scarecrow/urlmap.rb"]
15
+ s.files = ["Manifest", "README.rdoc", "Rakefile", "bin/scarecrow", "lib/scarecrow.rb", "lib/scarecrow/generator.rb", "lib/scarecrow/generators/application.rb", "lib/scarecrow/generators/application/Rakefile", "lib/scarecrow/urlmap.rb", "scarecrow.gemspec"]
16
+ s.has_rdoc = true
17
+ s.homepage = %q{http://github.com/hackenporsche/scarecrow}
18
+ s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Scarecrow", "--main", "README.rdoc"]
19
+ s.require_paths = ["lib"]
20
+ s.rubyforge_project = %q{scarecrow}
21
+ s.rubygems_version = %q{1.3.2}
22
+ s.summary = %q{A simple web framework for Ruby based on Sinatra}
23
+
24
+ if s.respond_to? :specification_version then
25
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
26
+ s.specification_version = 3
27
+
28
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
29
+ else
30
+ end
31
+ else
32
+ end
33
+ end
data/scarecrow.gemspec ADDED
@@ -0,0 +1,33 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = %q{scarecrow}
5
+ s.version = "0.0.1"
6
+
7
+ s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
8
+ s.authors = ["hackenporsche"]
9
+ s.date = %q{2009-10-12}
10
+ s.default_executable = %q{scarecrow}
11
+ s.description = %q{A simple web framework for Ruby based on Sinatra}
12
+ s.email = %q{sin3141592@gmail.com}
13
+ s.executables = ["scarecrow"]
14
+ s.extra_rdoc_files = ["README.rdoc", "bin/scarecrow", "lib/scarecrow.rb", "lib/scarecrow/generator.rb", "lib/scarecrow/generators/application.rb", "lib/scarecrow/generators/application/Rakefile", "lib/scarecrow/urlmap.rb"]
15
+ s.files = ["Manifest", "README.rdoc", "Rakefile", "bin/scarecrow", "lib/scarecrow.rb", "lib/scarecrow/generator.rb", "lib/scarecrow/generators/application.rb", "lib/scarecrow/generators/application/Rakefile", "lib/scarecrow/urlmap.rb", "pkg/scarecrow-0.0.1.gem", "pkg/scarecrow-0.0.1.tar.gz", "pkg/scarecrow-0.0.1/Manifest", "pkg/scarecrow-0.0.1/README.rdoc", "pkg/scarecrow-0.0.1/Rakefile", "pkg/scarecrow-0.0.1/bin/scarecrow", "pkg/scarecrow-0.0.1/lib/scarecrow.rb", "pkg/scarecrow-0.0.1/lib/scarecrow/generator.rb", "pkg/scarecrow-0.0.1/lib/scarecrow/generators/application.rb", "pkg/scarecrow-0.0.1/lib/scarecrow/generators/application/Rakefile", "pkg/scarecrow-0.0.1/lib/scarecrow/urlmap.rb", "pkg/scarecrow-0.0.1/scarecrow.gemspec", "scarecrow.gemspec"]
16
+ s.has_rdoc = true
17
+ s.homepage = %q{http://github.com/hackenporsche/scarecrow}
18
+ s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Scarecrow", "--main", "README.rdoc"]
19
+ s.require_paths = ["lib"]
20
+ s.rubyforge_project = %q{scarecrow}
21
+ s.rubygems_version = %q{1.3.2}
22
+ s.summary = %q{A simple web framework for Ruby based on Sinatra}
23
+
24
+ if s.respond_to? :specification_version then
25
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
26
+ s.specification_version = 3
27
+
28
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
29
+ else
30
+ end
31
+ else
32
+ end
33
+ end
metadata ADDED
@@ -0,0 +1,87 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: scarecrow
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - hackenporsche
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-10-12 00:00:00 +02:00
13
+ default_executable: scarecrow
14
+ dependencies: []
15
+
16
+ description: A simple web framework for Ruby based on Sinatra
17
+ email: sin3141592@gmail.com
18
+ executables:
19
+ - scarecrow
20
+ extensions: []
21
+
22
+ extra_rdoc_files:
23
+ - README.rdoc
24
+ - bin/scarecrow
25
+ - lib/scarecrow.rb
26
+ - lib/scarecrow/generator.rb
27
+ - lib/scarecrow/generators/application.rb
28
+ - lib/scarecrow/generators/application/Rakefile
29
+ - lib/scarecrow/urlmap.rb
30
+ files:
31
+ - Manifest
32
+ - README.rdoc
33
+ - Rakefile
34
+ - bin/scarecrow
35
+ - lib/scarecrow.rb
36
+ - lib/scarecrow/generator.rb
37
+ - lib/scarecrow/generators/application.rb
38
+ - lib/scarecrow/generators/application/Rakefile
39
+ - lib/scarecrow/urlmap.rb
40
+ - pkg/scarecrow-0.0.1.gem
41
+ - pkg/scarecrow-0.0.1.tar.gz
42
+ - pkg/scarecrow-0.0.1/Manifest
43
+ - pkg/scarecrow-0.0.1/README.rdoc
44
+ - pkg/scarecrow-0.0.1/Rakefile
45
+ - pkg/scarecrow-0.0.1/bin/scarecrow
46
+ - pkg/scarecrow-0.0.1/lib/scarecrow.rb
47
+ - pkg/scarecrow-0.0.1/lib/scarecrow/generator.rb
48
+ - pkg/scarecrow-0.0.1/lib/scarecrow/generators/application.rb
49
+ - pkg/scarecrow-0.0.1/lib/scarecrow/generators/application/Rakefile
50
+ - pkg/scarecrow-0.0.1/lib/scarecrow/urlmap.rb
51
+ - pkg/scarecrow-0.0.1/scarecrow.gemspec
52
+ - scarecrow.gemspec
53
+ has_rdoc: true
54
+ homepage: http://github.com/hackenporsche/scarecrow
55
+ licenses: []
56
+
57
+ post_install_message:
58
+ rdoc_options:
59
+ - --line-numbers
60
+ - --inline-source
61
+ - --title
62
+ - Scarecrow
63
+ - --main
64
+ - README.rdoc
65
+ require_paths:
66
+ - lib
67
+ required_ruby_version: !ruby/object:Gem::Requirement
68
+ requirements:
69
+ - - ">="
70
+ - !ruby/object:Gem::Version
71
+ version: "0"
72
+ version:
73
+ required_rubygems_version: !ruby/object:Gem::Requirement
74
+ requirements:
75
+ - - ">="
76
+ - !ruby/object:Gem::Version
77
+ version: "1.2"
78
+ version:
79
+ requirements: []
80
+
81
+ rubyforge_project: scarecrow
82
+ rubygems_version: 1.3.2
83
+ signing_key:
84
+ specification_version: 3
85
+ summary: A simple web framework for Ruby based on Sinatra
86
+ test_files: []
87
+