scarecrow 0.0.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.
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
+