anupom-anobik 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,3 +1,11 @@
1
+ === 0.0.3 / 2009-09-10
2
+
3
+ * 1 major changes
4
+
5
+ * Added erb template rendering support
6
+ * Added phusion passanger support
7
+ * New directory structure introduced
8
+
1
9
  === 0.0.2 / 2009-05-24
2
10
 
3
11
  * 1 major changes
@@ -10,5 +18,4 @@
10
18
 
11
19
  * 1 major enhancement
12
20
 
13
- * Anobik's Birthday!
14
-
21
+ * Anobik's Birthday!
data/Manifest CHANGED
@@ -2,7 +2,10 @@ test/spec_rack_anobik.rb
2
2
  Rakefile
3
3
  CHANGELOG.txt
4
4
  lib/anobik.rb
5
+ lib/anobik_server.rb
6
+ lib/anobik_app.rb
5
7
  lib/rack/anobik.rb
6
- anobik-server
8
+ server
9
+ config.ru
7
10
  Manifest
8
11
  README.rdoc
@@ -7,43 +7,55 @@
7
7
  Anobik is a simple rack middleware ruby microframework
8
8
 
9
9
  == FEATURES/PROBLEMS:
10
-
11
10
  Anobik is a Rack based microframework that provides an easy way to map URL patterns to classes.
12
11
  URL patterns can be literal strings or regular expressions.
13
12
  when URLs are processed:
14
- * the beginning and end are anchored (^ $)
15
- * an optional end slash is added (/?)
16
- * the i option is added for case-insensitive searches
17
- * respective class method is called depending on the request method (GET/POST etc.)
13
+ * the beginning and end are anchored (^ $)
14
+ * an optional end slash is added (/?)
15
+ * the i option is added for case-insensitive searches
16
+ * respective class method is called depending on the request method (GET/POST etc.)
18
17
 
19
- It does not provide any view templating or database handling mechanism.
20
- you can ofcourse use any opensource view templating engine or database access layer with it.
21
- Anobik is very similar to web.py, but it is not a direct clone of web.py.
22
- It is ofcourse highly inspired by web.py and other similar lightweight microframeworks.
18
+ Anobik does not provide any database handling mechanism yet.
19
+ You can ofcourse use any opensource database access layer with it - it's pretty flexible.
20
+ Anobik is suitable for small micro-sites where you would love to use your
21
+ favorite programming language but Rails is a bit heavy for that.
23
22
 
24
23
  Anobik acts as a Rack middleware app and that means you can use it with a
25
24
  number of webservers including Thin, LiteSpeed, Phusion Passangeretc.
26
- And BTW, you can also use it with Rails, Sinatra or any other Rack based frameworks.
25
+ And the best part is, you can also use it with Rails, Sinatra or any other Rack based frameworks.
26
+
27
+ Anobik is truely feather-weight. It has < 250 LOC!
28
+ It does not have many features but it can get you started early.
29
+ More docs and more changes are coming soon, stay tuuneed!
27
30
 
28
31
  == SYNOPSIS:
29
32
 
30
- * routes.rb
31
- class Routes
32
- URLS = {
33
- "/" => "index",
34
- "/index/(\\d+)" => "index",
35
- }
36
- end
37
-
38
- * index.rb
39
- class Index
40
- def get(id=nil)
41
- "Hello world from anobik! #{id}"
42
- end
43
- end
33
+ * configs/routes.rb
34
+ class Routes
35
+ URLS = {
36
+ "/" => "index",
37
+ "/page/(\\d+)" => "page",
38
+ }
39
+ end
40
+
41
+ * resources/index.rb
42
+ class Index < Anobik::Resource
43
+ def get
44
+ @hello = "Hello"
45
+ render 'index', {:world => 'world'}
46
+ end
47
+ end
48
+
49
+ * faces/index.erb
50
+ <%= [@hello, @world].join(' ') %>
51
+
52
+ * command
53
+ $ ruby -rubygems server
54
+ OR
55
+ $ rackup config.ru
44
56
 
45
57
  * url
46
- GET /index/1
58
+ GET /index/1
47
59
 
48
60
  == REQUIREMENTS:
49
61
 
@@ -51,7 +63,8 @@ Ruby 1.9 and Rack are the pre-requisites
51
63
 
52
64
  == INSTALL:
53
65
 
54
- sudo gem install anobik
66
+ gem sources -a http://gems.github.com
67
+ sudo gem install anupom-anobik
55
68
 
56
69
  == LICENSE:
57
70
 
data/Rakefile CHANGED
@@ -2,7 +2,7 @@ require 'rubygems'
2
2
  require 'rake'
3
3
  require 'echoe'
4
4
 
5
- Echoe.new('anobik', '0.0.2') do |p|
5
+ Echoe.new('anobik', '0.0.3') do |p|
6
6
  p.description = "Rack middleware Ruby micro-framework"
7
7
  p.url = "http://github.com/anupom/anobik"
8
8
  p.author = "Anupom Syam"
@@ -2,15 +2,17 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{anobik}
5
- s.version = "0.0.2"
5
+ s.version = "0.0.3"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Anupom Syam"]
9
- s.date = %q{2009-05-24}
9
+ s.date = %q{2009-09-10}
10
10
  s.description = %q{Rack middleware Ruby micro-framework}
11
11
  s.email = %q{anupom.syam@gmail.com}
12
- s.extra_rdoc_files = ["CHANGELOG.txt", "lib/anobik.rb", "lib/rack/anobik.rb", "README.rdoc"]
13
- s.files = ["test/spec_rack_anobik.rb", "Rakefile", "CHANGELOG.txt", "lib/anobik.rb", "lib/rack/anobik.rb", "anobik-server", "Manifest", "README.rdoc", "anobik.gemspec"]
12
+ s.extra_rdoc_files = ["CHANGELOG.txt", "lib/anobik/server.rb", "lib/anobik/app.rb", "lib/rack/anobik.rb", "README.rdoc"]
13
+ s.files = ["test/spec_rack_anobik.rb", "Rakefile", "CHANGELOG.txt", "lib/anobik/server.rb", "lib/anobik/app.rb",
14
+ "lib/anobik/consts.rb", "lib/anobik/utils.rb", "lib/rack/anobik.rb", "server",
15
+ "config.ru", "Manifest", "README.rdoc", "anobik.gemspec"]
14
16
  s.has_rdoc = true
15
17
  s.homepage = %q{http://github.com/anupom/anobik}
16
18
  s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Anobik", "--main", "README.rdoc"]
@@ -31,4 +33,4 @@ Gem::Specification.new do |s|
31
33
  else
32
34
  s.add_dependency(%q<rack>, [">= 0"])
33
35
  end
34
- end
36
+ end
@@ -0,0 +1,10 @@
1
+ require 'anobik/app'
2
+
3
+ ANOBIK_ROOT = "#{File.dirname(File.expand_path(__FILE__))}/" unless defined?(ANOBIK_ROOT)
4
+
5
+ PRODUCTION = false
6
+ DEBUGGER = true
7
+
8
+ app = Anobik::App::create DEBUGGER, PRODUCTION
9
+
10
+ run app
@@ -0,0 +1,22 @@
1
+ require 'rack'
2
+ require 'rack/anobik'
3
+ require 'anobik/utils'
4
+
5
+ module Anobik
6
+ class App
7
+ def self.create debugger, production
8
+ Rack::Builder.new {
9
+ use Rack::CommonLogger if debugger
10
+ use Rack::ShowExceptions
11
+ use Rack::ShowStatus
12
+ use Rack::Static, :urls => ['/public']
13
+ use Rack::Anobik, :url => '/', :production => production
14
+
15
+ #should never get through here if url is set to '/'
16
+ run lambda { |env|
17
+ [404, {'Content-Type' => 'text/plain'}, 'Not a Anobik Request :)']
18
+ }
19
+ }.to_app
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,6 @@
1
+ module Anobik
2
+ ROUTES_FILE = 'routes'
3
+ RESOURCE_DIR = 'resources/'
4
+ CONFIG_DIR = 'configs/'
5
+ FACES_DIR = 'faces/'
6
+ end
@@ -0,0 +1,66 @@
1
+ require 'anobik/app'
2
+ require 'optparse'
3
+
4
+ module Anobik
5
+ class Server
6
+ #
7
+ # Runs the Anobik middleware app
8
+ #
9
+ def self.run
10
+ #partially stolen from Rails
11
+ options = {
12
+ :Port => 9291,
13
+ :Host => "0.0.0.0",
14
+ :detach => false,
15
+ :debugger => false,
16
+ :production => false
17
+ }
18
+
19
+ ARGV.clone.options do |option|
20
+ option.on("-p", "--port=port", Integer,
21
+ "Runs Server on the specified port.", "Default: #{options[:Port]}") { |v| options[:Port] = v }
22
+ option.on("-b", "--binding=ip", String,
23
+ "Binds Server to the specified ip.", "Default: #{options[:Host]}") { |v| options[:Host] = v }
24
+ option.on("-d", "--daemon", "Make server run as a Daemon.") { options[:detach] = true }
25
+ option.on("-x", "--production", "Run the server in production mode.") { options[:production] = true }
26
+ option.on("-u", "--debugger", "Enable rack server debugging.") { options[:debugger] = true }
27
+
28
+ option.separator ""
29
+
30
+ option.on("-h", "--help", "Show this help message.") { puts option.help; exit }
31
+ option.parse!
32
+ end
33
+
34
+ unless server = Rack::Handler.get(ARGV.first) rescue nil
35
+ begin
36
+ server = Rack::Handler::Mongrel
37
+ rescue LoadError => e
38
+ server = Rack::Handler::WEBrick
39
+ end
40
+ end
41
+
42
+ puts "=> Booting with #{server}"
43
+ puts "=> Running in production mode" if options[:production]
44
+ puts "=> Application starting on http://#{options[:Host]}:#{options[:Port]}#{options[:path]}"
45
+
46
+ if options[:detach]
47
+ puts "=> Running as deamon with pid: #{Process.pid}"
48
+ Process.daemon
49
+ else
50
+ puts "=> Call with -d to detach"
51
+ end
52
+
53
+ app = Anobik::App::create options[:debugger], options[:production]
54
+
55
+ trap(:INT) { exit }
56
+
57
+ puts "=> Ctrl-C to shutdown server"
58
+
59
+ begin
60
+ server.run app, options.merge(:AccessLog => [])
61
+ ensure
62
+ puts "Exiting"
63
+ end
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,19 @@
1
+ require 'anobik/consts'
2
+
3
+ #TODO make @request/@response $request/$response?
4
+ module Anobik
5
+ class Resource
6
+ def initialize
7
+ @anobik_env = yield
8
+ @request = Rack::Request.new(@anobik_env)
9
+ @response = Rack::Request.new(@anobik_env)
10
+ end
11
+
12
+ def render facename, local_assigns = {}
13
+ local_assigns.each do |key,value|
14
+ eval "@#{key} = #{value.inspect}"
15
+ end
16
+ ERB.new(File.read(ANOBIK_ROOT + ::Anobik::FACES_DIR + facename + '.erb')).result(binding)
17
+ end
18
+ end
19
+ end
@@ -1,3 +1,5 @@
1
+ require 'anobik/consts'
2
+
1
3
  module Rack
2
4
  #
3
5
  # Anobik is a Rack based microframework that provides an easy way to map URL patterns to classes.
@@ -8,34 +10,48 @@ module Rack
8
10
  # * the i option is added for case-insensitive searches
9
11
  # * respective class method is called depending on the request method (GET/POST etc.)
10
12
  #
11
- # It does not provide any view templating or database handling mechanism.
12
- # you can ofcourse use any opensource view templating engine or database access layer with it.
13
- # Anobik is very similar to web.py, but it is not a direct clone of web.py.
14
- # It is ofcourse highly inspired by web.py and other similar lightweight microframeworks.
13
+ # Anobik does not provide any database handling mechanism yet.
14
+ # You can ofcourse use any opensource database access layer with it - it's pretty flexible.
15
+ # Anobik is suitable for small micro-sites where you would love to use your
16
+ # favorite programming language but Rails is a bit heavy for that.
15
17
  #
16
18
  # Anobik acts as a Rack middleware app and that means you can use it with a
17
19
  # number of webservers including Thin, LiteSpeed, Phusion Passangeretc.
18
- # And BTW, you can also use it with Rails, Sinatra or any other Rack based frameworks.
20
+ # And the best part is, you can also use it with Rails, Sinatra or any other Rack based frameworks.
21
+ #
22
+ # Anobik is truely feather-weight. It has < 250 LOC!
23
+ # It does not have many features but it can get you started early.
24
+ # More docs coming soon, stay tuuneed!
19
25
  #
20
26
  # e.g:
21
27
  #
22
- # * routes.rb
28
+ # * configs/routes.rb
23
29
  # class Routes
24
30
  # URLS = {
25
31
  # "/" => "index",
26
- # "/index/(\\d+)" => "index",
32
+ # "/page/(\\d+)" => "page",
27
33
  # }
28
34
  # end
29
35
  #
30
- # * index.rb
31
- # class Index
32
- # def get (id=nil)
33
- # "Hello world from web.rb! #{id}"
36
+ # * resources/index.rb
37
+ # class Index < Anobik::Resource
38
+ # def get
39
+ # @hello = "Hello"
40
+ # render 'index', {:world => 'world'}
34
41
  # end
35
42
  # end
36
43
  #
44
+ # * faces/index.erb
45
+ # <%= [@hello, @world].join(' ') %>
46
+ #
47
+ # * command
48
+ # $ ruby -rubygems server
49
+ # OR
50
+ # $ rackup config.ru
51
+ #
37
52
  # * url
38
53
  # GET /index/1
54
+ #
39
55
  #
40
56
  # MIT-License - Anupom Syam
41
57
  #
@@ -50,7 +66,6 @@ module Rack
50
66
  :missing_routes_class => "Class %s is missing in routes file %s.rb"
51
67
  }
52
68
  STATUSES = { :ok => 200, :bad_request => 404}
53
- ROUTES_FILENAME = 'routes'
54
69
 
55
70
  def initialize app, options
56
71
  @app = app
@@ -63,7 +78,7 @@ module Rack
63
78
  def call env
64
79
  req = Rack::Request.new(env)
65
80
  path = req.path_info
66
- method = req.request_method
81
+ method = req.request_method.downcase
67
82
 
68
83
  @headers = { 'Content-Type' => 'text/html' }
69
84
 
@@ -73,16 +88,19 @@ module Rack
73
88
  end
74
89
 
75
90
  begin
76
- anobik_load ROUTES_FILENAME
91
+ anobik_load_config ::Anobik::ROUTES_FILE
77
92
  rescue Exception
78
- return anobik_error(:missing_routes_file, [ROUTES_FILENAME, ANOBIK_ROOT])
93
+ return anobik_error(:missing_routes_file, [::Anobik::ROUTES_FILE,
94
+ ANOBIK_ROOT + ::Anobik::CONFIG_DIR])
79
95
  end
80
96
 
81
- routes_classname = to_class_name ROUTES_FILENAME
97
+ routes_classname = to_class_name ::Anobik::ROUTES_FILE
82
98
  begin
83
99
  raise NameError unless Object.const_get(routes_classname).kind_of? Class
84
- rescue Exception
85
- return anobik_error(:missing_routes_class, [routes_classname, ANOBIK_ROOT+ROUTES_FILENAME])
100
+ rescue Exception
101
+ return anobik_error(:missing_routes_class,
102
+ [routes_classname, ANOBIK_ROOT + ::Anobik::CONFIG_DIR +
103
+ ::Anobik::ROUTES_FILE])
86
104
  end
87
105
 
88
106
  begin
@@ -91,39 +109,41 @@ module Rack
91
109
  rescue Exception
92
110
  urls = { "/" => "index" }
93
111
  end
94
- controller_filename = nil
112
+ resource_filename = nil
95
113
  matches = nil
96
114
  urls.each do |regex, filename|
97
115
  matches = path.match(Regexp.new('^' << @url << regex << '/?$', true))
98
116
  unless matches.nil?
99
- controller_filename = filename
117
+ resource_filename = filename
100
118
  break
101
119
  end
102
120
  end
103
121
 
104
- if controller_filename.nil?
122
+ if resource_filename.nil?
105
123
  return anobik_error(:invalid_path, [path])
106
124
  end
107
125
 
108
126
  begin
109
- anobik_load controller_filename
127
+ anobik_load_resource resource_filename
110
128
  rescue Exception
111
- return anobik_error(:missing_file, [controller_filename, ANOBIK_ROOT])
129
+ return anobik_error(:missing_file, [resource_filename, ANOBIK_ROOT +
130
+ ::Anobik::RESOURCE_DIR])
112
131
  end
113
132
 
114
- controller_classname = to_class_name controller_filename
133
+ resource_classname = to_class_name resource_filename
115
134
  begin
116
- raise NameError unless Object.const_get(controller_classname).kind_of? Class
135
+ raise NameError unless Object.const_get(resource_classname).kind_of? Class
117
136
  rescue Exception
118
- return anobik_error(:missing_class, [controller_classname, ANOBIK_ROOT+controller_filename])
137
+ return anobik_error(:missing_class, [resource_classname, ANOBIK_ROOT +
138
+ ::Anobik::RESOURCE_DIR + resource_filename])
119
139
  end
120
140
 
121
- controller = Object.const_get(controller_classname).new
122
- unless controller.respond_to?(method)
123
- return anobik_error(:missing_method, [controller_classname, method])
141
+ resource = Object.const_get(resource_classname).new(){env}
142
+ unless resource.respond_to?(method)
143
+ return anobik_error(:missing_method, [resource_classname, method])
124
144
  end
125
145
 
126
- body = eval 'controller.' << method <<
146
+ body = eval 'resource.' << method <<
127
147
  '(' << matches.captures.join(' , ') << ')'
128
148
 
129
149
  [STATUSES[:ok], @headers, body]
@@ -141,19 +161,27 @@ module Rack
141
161
  return [STATUSES[:bad_request], @headers, '']
142
162
  end
143
163
 
144
- def anobik_root
145
- ANOBIK_ROOT
164
+ def anobik_load_config filename
165
+ anobik_load ::Anobik::CONFIG_DIR, filename
146
166
  end
147
167
 
148
- def anobik_load filename
168
+ def anobik_load_resource filename
169
+ anobik_load ::Anobik::RESOURCE_DIR, filename
170
+ end
171
+
172
+ def anobik_load dirname, filename
149
173
  if (@production)
150
- require filename
174
+ require dirname + filename
151
175
  else
152
176
  classname = to_class_name(filename).to_sym
153
177
  Object.class_eval { remove_const classname } if Object.const_defined? classname
154
- Kernel.load filename + '.rb'
178
+ Kernel.load dirname + filename + '.rb'
155
179
  end
156
180
  end
181
+
182
+ def anobik_root
183
+ ANOBIK_ROOT
184
+ end
157
185
 
158
186
  end
159
187
  end
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
+ #$ ruby -rubygems server
2
3
  ANOBIK_ROOT = "#{File.dirname(File.expand_path(__FILE__))}/" unless defined?(ANOBIK_ROOT)
3
- require 'rubygems'
4
- require 'anobik'
5
- AnobikServer::run
4
+ require 'anobik/server'
5
+ Anobik::Server::run
@@ -32,7 +32,7 @@ describe "Rack::Anobik" do
32
32
 
33
33
  setup do
34
34
  remove_routes_file
35
- remove_file 'index'
35
+ remove_resource_file 'index'
36
36
  end
37
37
 
38
38
  it "should return default when non-anobik URL with production" do
@@ -90,7 +90,7 @@ describe "Rack::Anobik" do
90
90
  end
91
91
 
92
92
  it "should return 404 when filename does not exist with production" do
93
- remove_file 'index'
93
+ remove_resource_file 'index'
94
94
  create_routes_file "class Routes\nend"
95
95
  response = anobik_app_production.get('/')
96
96
  response.should equal_not_found
@@ -98,7 +98,7 @@ describe "Rack::Anobik" do
98
98
  end
99
99
 
100
100
  it "should return 500 when filename does not exist with dev" do
101
- remove_file 'index'
101
+ remove_resource_file 'index'
102
102
  create_routes_file "class Routes\nend"
103
103
  response = anobik_app_dev.get('/')
104
104
  response.should equal_response({:status => 500, :body => 'missing ' << 'in directory'})
@@ -107,74 +107,74 @@ describe "Rack::Anobik" do
107
107
 
108
108
  it "should return 404 when filename exists but class missing with production" do
109
109
  create_routes_file "class Routes\nend"
110
- create_file 'index', ''
110
+ create_resource_file 'index', ''
111
111
  response = anobik_app_production.get('/')
112
112
  response.should equal_not_found
113
113
  remove_routes_file
114
- remove_file 'index'
114
+ remove_resource_file 'index'
115
115
  end
116
116
 
117
117
  it "should return 500 when filename exists but class missing with dev" do
118
118
  create_routes_file "class Routes\nend"
119
- create_file 'index', ''
119
+ create_resource_file 'index', ''
120
120
  response = anobik_app_dev.get('/')
121
121
  response.should equal_response({:status => 500, :body => 'Class Index ' << 'not found in file'})
122
122
  remove_routes_file
123
- remove_file 'index'
123
+ remove_resource_file 'index'
124
124
  end
125
125
 
126
126
  it "should return 404 when class exists but method missing with production" do
127
127
  create_routes_file "class Routes\nend"
128
- create_file 'index', "class Index\nend"
128
+ create_resource_file 'index', "class Index\nend"
129
129
  response = anobik_app_production.get('/')
130
130
  response.should equal_not_found
131
131
  remove_routes_file
132
- remove_file 'index'
132
+ remove_resource_file 'index'
133
133
  end
134
134
 
135
135
  it "should return 500 when class exists but method missing with dev" do
136
136
  create_routes_file "class Routes\nend"
137
- create_file 'index', "class Index\nend"
137
+ create_resource_file 'index', "class Index\nend"
138
138
  response = anobik_app_dev.get('/')
139
- response.should equal_response({:status => 500, :body => 'Method Index::#GET ' << 'not supported'})
139
+ response.should equal_response({:status => 500, :body => 'Method Index::#get ' << 'not supported'})
140
140
  remove_routes_file
141
- remove_file 'index'
141
+ remove_resource_file 'index'
142
142
  end
143
143
 
144
144
  it "should return 200 for GET when everything's ok" do
145
145
  create_routes_file routes_file
146
- create_file 'index', index_file
146
+ create_resource_file 'index', index_file
147
147
  response = anobik_app_dev.get('/')
148
148
  response.should equal_response({:status => 200, :body => 'GET_' << 'SUCCESS'})
149
149
  remove_routes_file
150
- remove_file 'index'
150
+ remove_resource_file 'index'
151
151
  end
152
152
 
153
153
  it "should return 200 when regex is valid" do
154
154
  create_routes_file routes_file
155
- create_file 'index', index_file
155
+ create_resource_file 'index', index_file
156
156
  response = anobik_app_dev.get('/index/98')
157
157
  response.should equal_response({:status => 200, :body => 'GET_' << 'SUCCESS98'})
158
158
  remove_routes_file
159
- remove_file 'index'
159
+ remove_resource_file 'index'
160
160
  end
161
161
 
162
- xit "should return 200 when root URL is called and index is present" do
162
+ it "should return 200 when root URL is called and index is present" do
163
163
  create_routes_file routes_file
164
- create_file 'index', index_file
164
+ create_resource_file 'index', index_file
165
165
  response = anobik_app_dev.get('/')
166
166
  response.should equal_response({:status => 200, :body => 'GET_' << 'SUCCESS'})
167
167
  remove_routes_file
168
- remove_file 'index'
168
+ remove_resource_file 'index'
169
169
  end
170
170
 
171
171
  it "should handle POST data" do
172
172
  create_routes_file routes_file
173
- create_file 'index', index_file
173
+ create_resource_file 'index', index_file
174
174
  response = anobik_app_dev.post('/')
175
175
  response.should equal_response({:status => 200, :body => 'POST_SUC' << 'CESS'})
176
176
  remove_routes_file
177
- remove_file 'index'
177
+ remove_resource_file 'index'
178
178
  end
179
179
 
180
180
  xit "should handle DELETE requests" do
@@ -193,7 +193,7 @@ describe "Rack::Anobik" do
193
193
  Rack::Builder.new {
194
194
  use Rack::ShowExceptions
195
195
  use Rack::ShowStatus
196
- use Rack::Static, :urls => ['/statics']
196
+ use Rack::Static, :urls => ['/public']
197
197
  use Rack::Anobik, :url => options[:url], :production => options[:production]
198
198
  run lambda { |env|
199
199
  [200, { 'Content-Type' => 'text/plain' }, 'Not a Anobik Request :)']
@@ -216,27 +216,36 @@ describe "Rack::Anobik" do
216
216
  end
217
217
 
218
218
  def create_routes_file str
219
- create_file 'routes', str
219
+ create_file 'routes', 'configs/', str
220
220
  end
221
221
 
222
222
  def remove_routes_file
223
- remove_file 'routes'
223
+ remove_file 'routes', 'configs/'
224
224
  end
225
225
 
226
- def create_file filename, str
227
- ::File.open(ANOBIK_ROOT + filename + '.rb', 'w') {|f| f.write(str) }
226
+ def create_resource_file filename, str
227
+ create_file filename, 'resources/', str
228
228
  end
229
229
 
230
- def remove_file filename
231
- ::File.delete(ANOBIK_ROOT + filename + '.rb') if ::File.exist?(ANOBIK_ROOT + filename + '.rb')
230
+ def remove_resource_file filename
231
+ remove_file filename, 'resources/'
232
232
  end
233
233
 
234
+ def create_file filename, directory, str
235
+ ::File.open(ANOBIK_ROOT + directory + filename + '.rb', 'w') {|f| f.write(str) }
236
+ end
237
+
238
+ def remove_file filename, directory
239
+ file = ANOBIK_ROOT + directory + filename + '.rb'
240
+ ::File.delete(file) if ::File.exist?(file)
241
+ end
242
+
234
243
  def index_file
235
244
  return "class Index\n" <<
236
- "def GET(id=nil)\n" <<
237
- "'GET_SUCCESS'<<id.to_s\n" <<
245
+ "def get(id=nil)\n" <<
246
+ "'GET_SUCCESS' << id.to_s\n" <<
238
247
  "end\n" <<
239
- "def POST()\n" <<
248
+ "def post()\n" <<
240
249
  "'POST_SUCCESS'\n" <<
241
250
  "end\n" <<
242
251
  "end"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: anupom-anobik
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Anupom Syam
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-05-24 00:00:00 -07:00
12
+ date: 2009-09-10 00:00:00 -07:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -30,16 +30,21 @@ extensions: []
30
30
 
31
31
  extra_rdoc_files:
32
32
  - CHANGELOG.txt
33
- - lib/anobik.rb
33
+ - lib/anobik/server.rb
34
+ - lib/anobik/app.rb
34
35
  - lib/rack/anobik.rb
35
36
  - README.rdoc
36
37
  files:
37
38
  - test/spec_rack_anobik.rb
38
39
  - Rakefile
39
40
  - CHANGELOG.txt
40
- - lib/anobik.rb
41
+ - lib/anobik/server.rb
42
+ - lib/anobik/app.rb
43
+ - lib/anobik/consts.rb
44
+ - lib/anobik/utils.rb
41
45
  - lib/rack/anobik.rb
42
- - anobik-server
46
+ - server
47
+ - config.ru
43
48
  - Manifest
44
49
  - README.rdoc
45
50
  - anobik.gemspec
@@ -1,75 +0,0 @@
1
- require 'rack'
2
- require 'rack/anobik'
3
- require 'optparse'
4
-
5
- class AnobikServer
6
- #
7
- # Runs the Anobik middleware app
8
- #
9
- def self.run
10
- #partially stolen from Rails
11
- options = {
12
- :Port => 3001,
13
- :Host => "0.0.0.0",
14
- :detach => false,
15
- :debugger => false,
16
- :production => false
17
- }
18
-
19
- ARGV.clone.options do |option|
20
- option.on("-p", "--port=port", Integer,
21
- "Runs Server on the specified port.", "Default: #{options[:Port]}") { |v| options[:Port] = v }
22
- option.on("-b", "--binding=ip", String,
23
- "Binds Server to the specified ip.", "Default: #{options[:Host]}") { |v| options[:Host] = v }
24
- option.on("-d", "--daemon", "Make server run as a Daemon.") { options[:detach] = true }
25
- option.on("-x", "--production", "Run the server in production mode.") { options[:production] = true }
26
- option.on("-u", "--debugger", "Enable rack server debugging.") { options[:debugger] = true }
27
-
28
- option.separator ""
29
-
30
- option.on("-h", "--help", "Show this help message.") { puts option.help; exit }
31
- option.parse!
32
- end
33
-
34
- unless server = Rack::Handler.get(ARGV.first) rescue nil
35
- begin
36
- server = Rack::Handler::Mongrel
37
- rescue LoadError => e
38
- server = Rack::Handler::WEBrick
39
- end
40
- end
41
-
42
- puts "=> Booting with #{server}"
43
- puts "=> Running in production mode" if options[:production]
44
- puts "=> Application starting on http://#{options[:Host]}:#{options[:Port]}#{options[:path]}"
45
-
46
- if options[:detach]
47
- puts "=> Running as deamon with pid: #{Process.pid}"
48
- Process.daemon
49
- else
50
- puts "=> Call with -d to detach"
51
- end
52
-
53
- app = Rack::Builder.new {
54
- use Rack::CommonLogger if options[:debugger]
55
- use Rack::ShowExceptions
56
- use Rack::ShowStatus
57
- use Rack::Static, :urls => ['/statics']
58
- use Rack::Anobik, :url => '/', :production => options[:production]
59
-
60
- run lambda { |env|
61
- [404, {'Content-Type' => 'text/plain'}, 'Not a Anobik Request :)']
62
- }
63
- }.to_app
64
-
65
- trap(:INT) { exit }
66
-
67
- puts "=> Ctrl-C to shutdown server"
68
-
69
- begin
70
- server.run app, options.merge(:AccessLog => [])
71
- ensure
72
- puts "Exiting"
73
- end
74
- end
75
- end