lunetas 0.1.2 → 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/README.md CHANGED
@@ -25,6 +25,9 @@ running, you just need to add `run Lunetas::Bag` in your config.ru file.
25
25
  If you are going to use Lunetas behind a framework like Rails. You just need to add
26
26
  the gem, `require 'lunetas'` in your metal, and you are ready to go.
27
27
 
28
+ Now with support for public assets, and templates. Check out the example under
29
+ /examples/stand_alone_app, to see how it works!
30
+
28
31
  Examples
29
32
  --------
30
33
 
data/Rakefile CHANGED
@@ -21,16 +21,10 @@ rescue LoadError
21
21
  puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
22
22
  end
23
23
 
24
- require 'spec/rake/spectask'
25
- Spec::Rake::SpecTask.new(:spec) do |spec|
26
- spec.libs << 'lib' << 'spec'
27
- spec.spec_files = FileList['spec/**/*_spec.rb']
28
- end
29
-
30
- Spec::Rake::SpecTask.new(:rcov) do |spec|
31
- spec.libs << 'lib' << 'spec'
24
+ require 'rspec/core/rake_task'
25
+ RSpec::Core::RakeTask.new(:spec) do |spec|
26
+ spec.rspec_opts = ["-c", "-f progress", "-r ./spec/spec_helper.rb"]
32
27
  spec.pattern = 'spec/**/*_spec.rb'
33
- spec.rcov = true
34
28
  end
35
29
 
36
30
  task :spec => :check_dependencies
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.2
1
+ 0.1.3
@@ -0,0 +1,12 @@
1
+ require 'lunetas'
2
+
3
+ class App
4
+ include Lunetas::Candy
5
+ matches '/(\w+)$', :path
6
+
7
+ def get
8
+ @message = "So, were you looking for #{@path}?"
9
+ erb :index
10
+ end
11
+ end
12
+
@@ -0,0 +1,3 @@
1
+ require 'app'
2
+
3
+ run Lunetas::Bag
@@ -0,0 +1,12 @@
1
+ <html>
2
+ <head>
3
+ <title><%= @path %></title>
4
+ </head>
5
+ <body>
6
+ <center>
7
+ <h1>Hello from Lunetas!</h1>
8
+ <h4><%= @message %></h4>
9
+ <img src="/lunetas.jpg" alt="lunetas" />
10
+ </center>
11
+ </body>
12
+ </html>
@@ -1,6 +1,7 @@
1
1
  require 'rubygems'
2
2
  gem 'rack'
3
3
  require 'rack'
4
+ require 'erb'
4
5
 
5
6
  module Lunetas
6
7
  base_dir = File.dirname(__FILE__) + '/lunetas/'
@@ -13,6 +13,22 @@ module Lunetas::Bag
13
13
  @@candies[regex] = candy
14
14
  end
15
15
 
16
+ # Specifies where the public assets are located.
17
+ # @param [String] directory where the assets are located.
18
+ # @raise [Lunetas::Error::NoSuchDirectory] if the directory does not exists.
19
+ def self.set_public_directory(directory)
20
+ unless File.directory? File.expand_path(directory)
21
+ raise Lunetas::Error::NoSuchDirectory
22
+ end
23
+ @@public_directory = File.expand_path(directory)
24
+ end
25
+
26
+ # Gets the public directory of assets.
27
+ # @return [String] the location, if not set public/
28
+ def self.public_directory
29
+ @@public_directory ||= File.expand_path("public")
30
+ end
31
+
16
32
  # Rack's call method. Will be called with the env, from rack. If it matches
17
33
  # a regular expression, it will start a new instance of the propiertary class.
18
34
  # If there's no matching class, it will return a 404.
@@ -21,11 +37,17 @@ module Lunetas::Bag
21
37
  # @return [Array] the rack response.
22
38
  def self.call(env)
23
39
  @url_match = nil
24
- match_regex = @@candies.keys.find do |regex|
40
+ match_regex = @@candies.keys.find do |regex|
25
41
  @url_match = env['PATH_INFO'].match(regex)
26
42
  end
27
43
  unless match_regex
28
- return [404, {"Content-Type" => "text/html", "X-Cascade" => "pass"}, ["Not Found"]]
44
+ if File.exists? public_directory + env['PATH_INFO']
45
+ file = public_directory + env['PATH_INFO']
46
+ content_type = Rack::Mime.mime_type(File.extname(file))
47
+ return [200, {"Content-Type" => content_type}, [File.read(file)]]
48
+ else
49
+ return [404, {"Content-Type" => "text/html", "X-Cascade" => "pass"}, ["Not Found"]]
50
+ end
29
51
  end
30
52
  candy = @@candies[match_regex].new(env, @url_match.to_a)
31
53
  candy.bite
@@ -16,6 +16,7 @@ module Lunetas::Candy
16
16
  autoload :MethodStrategy, base_dir + 'method_strategy.rb'
17
17
  autoload :RequestWrapper, base_dir + 'request_wrapper.rb'
18
18
  autoload :ResponseHandler, base_dir + 'response_handler.rb'
19
+ autoload :TemplateParsing, base_dir + 'template_parsing.rb'
19
20
 
20
21
  # @private
21
22
  def self.included(receiver)
@@ -25,5 +26,6 @@ module Lunetas::Candy
25
26
  receiver.send :include, RequestWrapper::InstanceMethods
26
27
  receiver.send :include, ResponseHandler::InstanceMethods
27
28
  receiver.send :extend, ResponseHandler::ClassMethods
29
+ receiver.send :include, TemplateParsing::InstanceMethods
28
30
  end
29
31
  end
@@ -7,20 +7,13 @@ module Lunetas::Candy::ResponseHandler
7
7
  # @return [Array] a Rack::Request response.
8
8
  def handle_call
9
9
  case @req.request_method
10
- when 'GET'
11
- get
12
- when 'POST'
13
- post
14
- when 'PUT'
15
- put
16
- when 'DELETE'
17
- delete
18
- when 'HEAD'
19
- head
20
- when 'TRACE'
21
- trace
22
- when 'OPTIONS'
23
- options
10
+ when 'GET' then get
11
+ when 'POST' then post
12
+ when 'PUT' then put
13
+ when 'DELETE' then delete
14
+ when 'HEAD' then head
15
+ when 'TRACE' then trace
16
+ when 'OPTIONS' then options
24
17
  else
25
18
  response = other_verb(@req.request_method)
26
19
  raise Lunetas::Error::APIError unless response
@@ -0,0 +1,17 @@
1
+ module Lunetas::Candy::TemplateParsing
2
+ module InstanceMethods
3
+ # Parses the given file, located in templates/[template_name].erb.
4
+ # @param filename the file located in the templates directory.
5
+ # @return [String] the erb parsed template.
6
+ def erb(filename)
7
+ file = File.expand_path("templates/#{filename}.erb")
8
+ ERB.new(File.read(file)).result(get_binding)
9
+ end
10
+
11
+ private
12
+ # @private
13
+ def get_binding
14
+ binding
15
+ end
16
+ end
17
+ end
@@ -39,4 +39,7 @@ module Lunetas::Error
39
39
  "API route error"
40
40
  end
41
41
  end
42
+
43
+ class NoSuchDirectory < StandardError
44
+ end
42
45
  end
@@ -36,5 +36,26 @@ describe Lunetas::Bag do
36
36
  @luneta_class.should_receive(:new).with(env, ['bacon/bbacon', 'bbacon'])
37
37
  Lunetas::Bag.call(env)
38
38
  end
39
+
40
+ it 'should serve an external file' do
41
+ Lunetas::Bag.set_public_directory "spec/support"
42
+ env = mock_env('/image.png')
43
+ response = [200, {"Content-Type" => "image/png"}, ["test\n"]]
44
+ Lunetas::Bag.call(env).should == response
45
+ end
46
+ end
47
+
48
+ describe 'set_public_directory' do
49
+ it 'should raise an exception if the directory is not found' do
50
+ lambda {
51
+ Lunetas::Bag.set_public_directory "blah"
52
+ }.should raise_error
53
+ end
54
+
55
+ it 'should change the value if the directory is found' do
56
+ lambda {
57
+ Lunetas::Bag.set_public_directory "examples"
58
+ }.should change(Lunetas::Bag, :public_directory)
59
+ end
39
60
  end
40
61
  end
@@ -1,10 +1,9 @@
1
1
  $LOAD_PATH.unshift(File.dirname(__FILE__))
2
2
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
3
3
  require 'lunetas'
4
- require 'spec'
5
- require 'spec/autorun'
4
+ require 'rspec'
6
5
 
7
- Spec::Runner.configure do |config|
6
+ RSpec.configure do |config|
8
7
 
9
8
  end
10
9
 
@@ -0,0 +1 @@
1
+ test
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lunetas
3
3
  version: !ruby/object:Gem::Version
4
- hash: 31
4
+ hash: 29
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 2
10
- version: 0.1.2
9
+ - 3
10
+ version: 0.1.3
11
11
  platform: ruby
12
12
  authors:
13
13
  - "Iv\xC3\xA1n Vald\xC3\xA9s (@ivanvc)"
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-08-27 00:00:00 -05:00
18
+ date: 2010-12-02 00:00:00 -06:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -87,7 +87,6 @@ extra_rdoc_files:
87
87
  - README.md
88
88
  files:
89
89
  - .document
90
- - .gitignore
91
90
  - LICENSE
92
91
  - README.md
93
92
  - Rakefile
@@ -96,6 +95,10 @@ files:
96
95
  - examples/content_types.rb
97
96
  - examples/jay_son.rb
98
97
  - examples/redirect.rb
98
+ - examples/stand_alone_app/app.rb
99
+ - examples/stand_alone_app/config.ru
100
+ - examples/stand_alone_app/public/lunetas.jpg
101
+ - examples/stand_alone_app/templates/index.erb
99
102
  - examples/testing.rb
100
103
  - lib/lunetas.rb
101
104
  - lib/lunetas/bag.rb
@@ -104,18 +107,20 @@ files:
104
107
  - lib/lunetas/candy/method_strategy.rb
105
108
  - lib/lunetas/candy/request_wrapper.rb
106
109
  - lib/lunetas/candy/response_handler.rb
110
+ - lib/lunetas/candy/template_parsing.rb
107
111
  - lib/lunetas/error.rb
108
112
  - spec/lunetas/bag_spec.rb
109
113
  - spec/lunetas/candy_spec.rb
110
114
  - spec/spec.opts
111
115
  - spec/spec_helper.rb
116
+ - spec/support/image.png
112
117
  has_rdoc: true
113
118
  homepage: http://github.com/ivanvc/lunetas
114
119
  licenses: []
115
120
 
116
121
  post_install_message:
117
- rdoc_options:
118
- - --charset=UTF-8
122
+ rdoc_options: []
123
+
119
124
  require_paths:
120
125
  - lib
121
126
  required_ruby_version: !ruby/object:Gem::Requirement
@@ -144,10 +149,11 @@ signing_key:
144
149
  specification_version: 3
145
150
  summary: Rack micro framework intended for APIs
146
151
  test_files:
147
- - spec/lunetas/bag_spec.rb
148
- - spec/lunetas/candy_spec.rb
149
- - spec/spec_helper.rb
150
152
  - examples/content_types.rb
151
153
  - examples/jay_son.rb
152
154
  - examples/redirect.rb
155
+ - examples/stand_alone_app/app.rb
153
156
  - examples/testing.rb
157
+ - spec/lunetas/bag_spec.rb
158
+ - spec/lunetas/candy_spec.rb
159
+ - spec/spec_helper.rb
data/.gitignore DELETED
@@ -1,24 +0,0 @@
1
- ## MAC OS
2
- .DS_Store
3
-
4
- ## TEXTMATE
5
- *.tmproj
6
- tmtags
7
-
8
- ## EMACS
9
- *~
10
- \#*
11
- .\#*
12
-
13
- ## VIM
14
- *.swp
15
-
16
- ## PROJECT::GENERAL
17
- coverage
18
- rdoc
19
- pkg
20
- *.gemspec
21
- doc/**
22
-
23
- ## PROJECT::SPECIFIC
24
-