optionsful 0.4.0 → 0.4.1
Sign up to get free protection for your applications and to get access to all the features.
- data/README.textile +34 -21
- data/Rakefile +1 -1
- data/VERSION +1 -1
- data/lib/baurets/optionsful/configurator.rb +33 -0
- data/lib/baurets/optionsful/server.rb +8 -8
- data/lib/optionsful.rb +4 -5
- data/optionsful.gemspec +9 -6
- data/samples/optionsful.yml +13 -0
- data/samples/optionsful_true.yml +4 -13
- data/samples/optionsful_true_custom.yml +11 -0
- data/samples/optionsful_true_custom_base_path.yml +11 -0
- data/samples/optionsful_true_custom_propagate.yml +11 -0
- data/spec/fake_app.rb +2 -0
- data/spec/optionsful_configurator_spec.rb +65 -0
- data/spec/optionsful_server_spec.rb +21 -13
- data/spec/spec_helper.rb +19 -1
- data/tasks/optionsful.rake +4 -4
- metadata +11 -8
- data/lib/baurets/optionsful/config.rb +0 -49
- data/samples/optionsful.yml.sample +0 -20
- data/spec/optionsful_config_spec.rb +0 -76
data/README.textile
CHANGED
@@ -44,16 +44,22 @@ Link: "<http://localhost:3000/api/posts/1/comments>; type=text/html; rel=help"
|
|
44
44
|
</pre>
|
45
45
|
~Note the empty line which is part of the HTTP protocol.~
|
46
46
|
|
47
|
-
h3.
|
47
|
+
h3. I agree. Telnet is the geekest way.. ;-)
|
48
48
|
|
49
|
-
|
49
|
+
For testing purposes you would like better using an HTTP client software.
|
50
|
+
I use "HTTP Client":http://ditchnet.org/httpclient/ on my Mac OS X and "cURL":http://curl.haxx.se/ anywhere else.
|
51
|
+
And on real life, you are free to create your own usage scenario.
|
50
52
|
|
51
53
|
h1. INSTALLATION:
|
52
54
|
|
53
55
|
# Change directory to your Ruby on Rails web application,
|
54
|
-
# Add gem dependency to @
|
55
|
-
<pre>
|
56
|
-
#
|
56
|
+
# Add gem dependency to @Gemfile@:
|
57
|
+
<pre>gem 'optionsful'</pre>
|
58
|
+
# Add it to the stack at @config/application.rb@:
|
59
|
+
<pre>class Application < Rails::Application
|
60
|
+
config.middleware.use ::Baurets::Optionsful::Server
|
61
|
+
...</pre>
|
62
|
+
# To install it, run @bundle install@ or:
|
57
63
|
<pre>$ gem install optionsful</pre>
|
58
64
|
# Enjoy! And give feedback! :)
|
59
65
|
|
@@ -71,33 +77,40 @@ h2. Setting up the @Link@ header
|
|
71
77
|
|
72
78
|
h3. Possible values and effects: (the bold values are the default ones)
|
73
79
|
|
74
|
-
|
75
|
-
|
76
|
-
|
80
|
+
* @link@
|
81
|
+
** *false*: Do not include any "Link" header in the response.
|
82
|
+
** true: Do include it. Build the URI based on the 'host', 'base_path', and 'propagate' values, explained below.
|
77
83
|
|
78
|
-
|
79
|
-
|
80
|
-
|
84
|
+
* @host@
|
85
|
+
** *auto*: Use the application's own address and port.
|
86
|
+
** private.mycompany.com: point it to another location. For instance: www.baurets.net. (Do not include http://).
|
81
87
|
|
82
88
|
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
89
|
+
* @base_path@
|
90
|
+
** the path to be appended to the host. Default is */api*.
|
91
|
+
** to disable it, use @/@
|
92
|
+
** Example: /my_company/my_project/resources/api
|
87
93
|
|
88
|
-
|
89
|
-
|
90
|
-
|
94
|
+
* @propagate@
|
95
|
+
** false: Do not append the request's path info to the URI.
|
96
|
+
** *true*: Do append it, as it is.
|
91
97
|
|
92
|
-
Generated Link example:
|
93
|
-
(link: true
|
98
|
+
* Generated Link example:
|
99
|
+
(*link: true*, *host: auto*)
|
94
100
|
<pre>Link: "<http://localhost:3000/api/posts/1/comments>; type=text/html; rel=help"</pre>
|
95
|
-
|
101
|
+
|
102
|
+
* *Note*: @Allow@ *and* @Link@ *are expected headers on a response to an HTTP OPTIONS request.*
|
96
103
|
|
97
104
|
h2. KNOWN ISSUES
|
98
105
|
* Rails route recognition still need some work
|
99
106
|
* Platform: *Rails 3.0.0.rc* !!!
|
100
107
|
|
108
|
+
h2. Development notes
|
109
|
+
|
110
|
+
* To bleed on the edge, at your Rails 3 application's @Gemfile@:
|
111
|
+
<pre>gem 'optionsful', :path => "~/your_workspace/optionsful/"</pre>
|
112
|
+
|
113
|
+
|
101
114
|
h2. Get involved
|
102
115
|
* Mailing list: http://groups.google.com/group/optionsful
|
103
116
|
* Bug tracker : http://kayaman.lighthouseapp.com/projects/56438-optionsful/overview
|
data/Rakefile
CHANGED
@@ -6,7 +6,7 @@ begin
|
|
6
6
|
Jeweler::Tasks.new do |gem|
|
7
7
|
gem.name = "optionsful"
|
8
8
|
gem.summary = %Q{Support HTTP OPTIONS verb on your Rails 3 app.}
|
9
|
-
gem.description = %Q{
|
9
|
+
gem.description = %Q{Build RESTful web services supporting the HTTP OPTIONS verb on Ruby on Rails applications.}
|
10
10
|
gem.email = "kayaman@baurets.net"
|
11
11
|
gem.homepage = "http://github.com/kayaman/optionsful"
|
12
12
|
gem.authors = ["Marco Antonio Gonzalez Junior"]
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.4.
|
1
|
+
0.4.1
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
|
3
|
+
module Baurets
|
4
|
+
module Optionsful
|
5
|
+
class Configurator
|
6
|
+
|
7
|
+
DEFAULT = { :link => false, :host => 'auto', :base_path => "/api", :propagate => true }
|
8
|
+
|
9
|
+
def configure!
|
10
|
+
file = File.join(Rails.root, 'config', 'optionsful.yml')
|
11
|
+
configuration = load_yaml(file, Rails.env.to_sym) if File.exist?(file)
|
12
|
+
configuration = DEFAULT if configuration.nil?
|
13
|
+
configuration
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
def load_yaml(file, environment)
|
19
|
+
configuration = nil
|
20
|
+
begin
|
21
|
+
envs = YAML::load_file(file)
|
22
|
+
raise "Could not parse the YAML." if (envs.empty? or (not envs.kind_of?(Hash)))
|
23
|
+
envs = envs.symbolize_keys if envs
|
24
|
+
configuration = envs[environment].symbolize_keys if (envs && envs[environment])
|
25
|
+
rescue
|
26
|
+
configuration = nil
|
27
|
+
end
|
28
|
+
configuration
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -7,7 +7,7 @@ module Baurets
|
|
7
7
|
#
|
8
8
|
def initialize(app)
|
9
9
|
@app = app
|
10
|
-
@config =
|
10
|
+
@config = Configurator.new.configure!
|
11
11
|
end
|
12
12
|
|
13
13
|
##
|
@@ -36,29 +36,29 @@ module Baurets
|
|
36
36
|
unless allows.empty?
|
37
37
|
headers.merge!({"Allow" => allows})
|
38
38
|
status = 204
|
39
|
-
if @config
|
39
|
+
if @config[:link] == true
|
40
40
|
headers.merge!({"Link" => build_link_header})
|
41
41
|
end
|
42
42
|
else
|
43
43
|
status = 404
|
44
|
-
body = "Not found"
|
44
|
+
body = "Not found."
|
45
45
|
end
|
46
46
|
[status, headers, body]
|
47
47
|
end
|
48
48
|
|
49
49
|
def build_link_header
|
50
50
|
link = ""
|
51
|
-
if @config
|
51
|
+
if @config[:host] == "auto"
|
52
52
|
server_name = @env["SERVER_NAME"]
|
53
53
|
server_port = @env["SERVER_PORT"]
|
54
54
|
link = "\"<http://#{server_name}:#{server_port}"
|
55
55
|
else
|
56
|
-
link = "\"<http://#{@config
|
56
|
+
link = "\"<http://#{@config[:host]}"
|
57
57
|
end
|
58
|
-
unless @config
|
59
|
-
link += @config
|
58
|
+
unless @config[:base_path].empty?
|
59
|
+
link += @config[:base_path] unless @config[:base_path] == "/"
|
60
60
|
end
|
61
|
-
if @config
|
61
|
+
if @config[:propagate] == true
|
62
62
|
link += @env["PATH_INFO"]
|
63
63
|
end
|
64
64
|
link += ">; type=text/html; rel=help\""
|
data/lib/optionsful.rb
CHANGED
@@ -1,7 +1,3 @@
|
|
1
|
-
require 'rubygems'
|
2
|
-
require 'rake'
|
3
|
-
|
4
|
-
|
5
1
|
##
|
6
2
|
# Baurets Software
|
7
3
|
# kayaman@baurets.net
|
@@ -10,12 +6,15 @@ module Baurets
|
|
10
6
|
module Optionsful
|
11
7
|
autoload :Server, 'baurets/optionsful/server'
|
12
8
|
autoload :Introspections, 'baurets/optionsful/introspections'
|
13
|
-
autoload :
|
9
|
+
autoload :Configurator, 'baurets/optionsful/configurator'
|
14
10
|
|
15
11
|
LIB_ROOT = File.dirname(__FILE__)
|
16
12
|
end
|
17
13
|
end
|
18
14
|
|
15
|
+
|
16
|
+
require 'rubygems'
|
17
|
+
require 'rake'
|
19
18
|
unless Rake::Task.task_defined? "optionsful:yml"
|
20
19
|
load File.join(Baurets::Optionsful::LIB_ROOT, '..', 'tasks', 'optionsful.rake')
|
21
20
|
end
|
data/optionsful.gemspec
CHANGED
@@ -5,12 +5,12 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{optionsful}
|
8
|
-
s.version = "0.4.
|
8
|
+
s.version = "0.4.1"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Marco Antonio Gonzalez Junior"]
|
12
12
|
s.date = %q{2010-08-07}
|
13
|
-
s.description = %q{
|
13
|
+
s.description = %q{Build RESTful web services supporting the HTTP OPTIONS verb on Ruby on Rails applications.}
|
14
14
|
s.email = %q{kayaman@baurets.net}
|
15
15
|
s.extra_rdoc_files = [
|
16
16
|
"LICENSE",
|
@@ -27,17 +27,20 @@ Gem::Specification.new do |s|
|
|
27
27
|
"features/optionsful.feature",
|
28
28
|
"features/step_definitions/optionsful3_steps.rb",
|
29
29
|
"features/support/env.rb",
|
30
|
-
"lib/baurets/optionsful/
|
30
|
+
"lib/baurets/optionsful/configurator.rb",
|
31
31
|
"lib/baurets/optionsful/introspections.rb",
|
32
32
|
"lib/baurets/optionsful/server.rb",
|
33
33
|
"lib/optionsful.rb",
|
34
34
|
"optionsful.gemspec",
|
35
35
|
"rails/init.rb",
|
36
|
-
"samples/optionsful.yml
|
36
|
+
"samples/optionsful.yml",
|
37
37
|
"samples/optionsful_bug.yml",
|
38
38
|
"samples/optionsful_true.yml",
|
39
|
+
"samples/optionsful_true_custom.yml",
|
40
|
+
"samples/optionsful_true_custom_base_path.yml",
|
41
|
+
"samples/optionsful_true_custom_propagate.yml",
|
39
42
|
"spec/fake_app.rb",
|
40
|
-
"spec/
|
43
|
+
"spec/optionsful_configurator_spec.rb",
|
41
44
|
"spec/optionsful_server_spec.rb",
|
42
45
|
"spec/spec.opts",
|
43
46
|
"spec/spec_helper.rb",
|
@@ -51,7 +54,7 @@ Gem::Specification.new do |s|
|
|
51
54
|
s.summary = %q{Support HTTP OPTIONS verb on your Rails 3 app.}
|
52
55
|
s.test_files = [
|
53
56
|
"spec/fake_app.rb",
|
54
|
-
"spec/
|
57
|
+
"spec/optionsful_configurator_spec.rb",
|
55
58
|
"spec/optionsful_server_spec.rb",
|
56
59
|
"spec/spec_helper.rb"
|
57
60
|
]
|
data/samples/optionsful_true.yml
CHANGED
@@ -1,20 +1,11 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
# Link header configuration
|
4
|
-
development:
|
5
|
-
link: true
|
6
|
-
host: auto
|
7
|
-
base_path: /api
|
8
|
-
propagate: true
|
1
|
+
development:
|
2
|
+
<<: *test
|
9
3
|
|
10
|
-
test:
|
4
|
+
test: &test
|
11
5
|
link: true
|
12
6
|
host: auto
|
13
7
|
base_path: /api
|
14
8
|
propagate: false
|
15
9
|
|
16
10
|
production:
|
17
|
-
|
18
|
-
host: auto
|
19
|
-
base_path: /api
|
20
|
-
propagate: false
|
11
|
+
<<: *test
|
data/spec/fake_app.rb
CHANGED
@@ -0,0 +1,65 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
|
+
|
3
|
+
describe Baurets::Optionsful::Configurator do
|
4
|
+
|
5
|
+
include Rack::Test::Methods
|
6
|
+
|
7
|
+
context "Configuration do handle the custom settings" do
|
8
|
+
|
9
|
+
describe "if no directions were explicitly given, act as using the default settings" do
|
10
|
+
|
11
|
+
before do
|
12
|
+
delete_configuration_file
|
13
|
+
end
|
14
|
+
|
15
|
+
it "the Link header generation must be disabled" do
|
16
|
+
configuration[:link].should be false
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
|
21
|
+
describe "when there is a custom configuration file, load the settings from it" do
|
22
|
+
|
23
|
+
before(:each) do
|
24
|
+
FileUtils.rm [File.join(Rails.root, 'config', 'optionsful.yml')] if File.exist? File.join(Rails.root, 'config', 'optionsful.yml')
|
25
|
+
end
|
26
|
+
|
27
|
+
it "by default, the Link header generation must be disabled" do
|
28
|
+
simulate_rake_yml_task
|
29
|
+
configuration[:link].should be false
|
30
|
+
end
|
31
|
+
|
32
|
+
it "the Link header generation must be disabled (file looks corrupted!)" do
|
33
|
+
FileUtils.cp File.join(Rails.root, 'samples', 'optionsful_bug.yml'), File.join(Rails.root, 'config', 'optionsful.yml')
|
34
|
+
configuration[:link].should be false
|
35
|
+
end
|
36
|
+
|
37
|
+
it "the Link header generation must be enabled" do
|
38
|
+
FileUtils.cp File.join(Rails.root, 'samples', 'optionsful_true.yml'), File.join(Rails.root, 'config', 'optionsful.yml')
|
39
|
+
configuration[:link].should be true
|
40
|
+
end
|
41
|
+
|
42
|
+
it "if the Link header generation is enabled, host value must be set" do
|
43
|
+
FileUtils.cp File.join(Rails.root, 'samples', 'optionsful_true.yml'), File.join(Rails.root, 'config', 'optionsful.yml')
|
44
|
+
configuration[:link].should be true
|
45
|
+
configuration[:host].empty?.should_not be true
|
46
|
+
end
|
47
|
+
|
48
|
+
it "if the Link header generation is enabled, host value accepts 'auto'" do
|
49
|
+
FileUtils.cp File.join(Rails.root, 'samples', 'optionsful_true.yml'), File.join(Rails.root, 'config', 'optionsful.yml')
|
50
|
+
configuration[:link].should be true
|
51
|
+
configuration[:host].empty?.should_not be true
|
52
|
+
configuration[:host].should == "auto"
|
53
|
+
end
|
54
|
+
|
55
|
+
after(:each) do
|
56
|
+
delete_configuration_file
|
57
|
+
end
|
58
|
+
|
59
|
+
after(:all) do
|
60
|
+
FileUtils.rm [File.join(Rails.root, 'config', 'optionsful.yml')] if File.exist? File.join(Rails.root, 'config', 'optionsful.yml')
|
61
|
+
end
|
62
|
+
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
@@ -398,11 +398,10 @@ describe "Optionsful" do
|
|
398
398
|
rails_app.routes.draw do
|
399
399
|
resources :posts
|
400
400
|
end
|
401
|
-
|
401
|
+
delete_configuration_file
|
402
402
|
end
|
403
403
|
|
404
404
|
it "if no directions were given" do
|
405
|
-
Baurets::Optionsful::Config.new(nil, {:link => false})
|
406
405
|
response = http_options_request("/posts")
|
407
406
|
validate_response(response)
|
408
407
|
response[0].should be 204
|
@@ -421,51 +420,60 @@ describe "Optionsful" do
|
|
421
420
|
rails_app.routes.draw do
|
422
421
|
resources :posts
|
423
422
|
end
|
423
|
+
delete_configuration_file
|
424
|
+
end
|
425
|
+
|
426
|
+
before(:each) do
|
427
|
+
delete_configuration_file
|
424
428
|
end
|
425
429
|
|
426
430
|
it "the Link header MUST be quoted if it contains a semicolon or comma" do
|
427
|
-
|
431
|
+
copy_configuration_file('optionsful_true.yml')
|
428
432
|
response = http_options_request("/posts")
|
429
433
|
validate_response(response)
|
430
434
|
response[0].should be 204
|
431
435
|
link = response[1]["Link"]
|
432
436
|
link.should match /\A\".+\"\z/
|
433
437
|
end
|
434
|
-
|
438
|
+
|
435
439
|
it "the Link header may use its very current host" do
|
436
|
-
|
440
|
+
copy_configuration_file('optionsful_true.yml')
|
437
441
|
response = http_options_request("/posts")
|
438
442
|
validate_response(response)
|
439
443
|
response[0].should be 204
|
440
444
|
link = response[1]["Link"]
|
441
445
|
link.should match /\A\"<http:\/\/localhost.+\"\z/
|
442
446
|
end
|
443
|
-
|
447
|
+
|
444
448
|
it "the Link header may use a custom host value" do
|
445
|
-
|
449
|
+
copy_configuration_file('optionsful_true_custom.yml')
|
446
450
|
response = http_options_request("/posts")
|
447
451
|
validate_response(response)
|
448
452
|
response[0].should be 204
|
449
453
|
link = response[1]["Link"]
|
450
454
|
link.should match /\A\"<http:\/\/www.baurets.net.+\"\z/
|
451
455
|
end
|
452
|
-
|
456
|
+
|
453
457
|
it "the Link header may use a custom base path value" do
|
454
|
-
|
458
|
+
copy_configuration_file('optionsful_true_custom_base_path.yml')
|
455
459
|
response = http_options_request("/posts")
|
456
460
|
validate_response(response)
|
457
461
|
response[0].should be 204
|
458
462
|
link = response[1]["Link"]
|
459
|
-
link.should match /\A\"<http:\/\/www.baurets.net\/private\/api
|
463
|
+
link.should match /\A\"<http:\/\/www.baurets.net\/private\/api.+\"\z/
|
460
464
|
end
|
461
|
-
|
465
|
+
|
462
466
|
it "the Link header may propagate original path info" do
|
463
|
-
|
467
|
+
copy_configuration_file('optionsful_true_custom_propagate.yml')
|
464
468
|
response = http_options_request("/posts")
|
465
469
|
validate_response(response)
|
466
470
|
response[0].should be 204
|
467
471
|
link = response[1]["Link"]
|
468
|
-
link.should match /\A\"<http:\/\/www.baurets.net\/
|
472
|
+
link.should match /\A\"<http:\/\/www.baurets.net\/api\/posts.+\"\z/
|
473
|
+
end
|
474
|
+
|
475
|
+
after(:each) do
|
476
|
+
delete_configuration_file
|
469
477
|
end
|
470
478
|
|
471
479
|
after(:all) do
|
data/spec/spec_helper.rb
CHANGED
@@ -80,4 +80,22 @@ DEFAULT_ENV = { "rack.version" => Rack::VERSION, "rack.input" => StringIO.new, "
|
|
80
80
|
def rails_app
|
81
81
|
app = FakeApp.initialize!
|
82
82
|
app
|
83
|
-
end
|
83
|
+
end
|
84
|
+
|
85
|
+
def configuration
|
86
|
+
configurator = Baurets::Optionsful::Configurator.new
|
87
|
+
configuration = configurator.configure!
|
88
|
+
configuration
|
89
|
+
end
|
90
|
+
|
91
|
+
def delete_configuration_file
|
92
|
+
FileUtils.rm [File.join(Rails.root, 'config', 'optionsful.yml')] if File.exist? File.join(Rails.root, 'config', 'optionsful.yml')
|
93
|
+
end
|
94
|
+
|
95
|
+
def copy_configuration_file(name)
|
96
|
+
FileUtils.cp File.join(Rails.root, 'samples', name), File.join(Rails.root, 'config', 'optionsful.yml')
|
97
|
+
end
|
98
|
+
|
99
|
+
def simulate_rake_yml_task
|
100
|
+
FileUtils.cp File.join(Rails.root, 'samples', 'optionsful.yml'), File.join(Rails.root, 'config', 'optionsful.yml')
|
101
|
+
end
|
data/tasks/optionsful.rake
CHANGED
@@ -2,10 +2,10 @@ require 'fileutils'
|
|
2
2
|
require 'rake'
|
3
3
|
|
4
4
|
namespace :optionsful do
|
5
|
-
desc "
|
5
|
+
desc "Enable Optionsful custom configurations by creating the file 'config/optionsful.yml'"
|
6
6
|
task :yml do
|
7
|
-
FileUtils.cp File.join(Baurets::Optionsful::LIB_ROOT, '..','samples', 'optionsful.yml
|
8
|
-
puts "\nNow you are able to configure Link hader generation settings"
|
9
|
-
puts "\nEdit the file 'config/optionsful.yml'
|
7
|
+
FileUtils.cp File.join(Baurets::Optionsful::LIB_ROOT, '..','samples', 'optionsful.yml'), File.join(Rails.root, 'config', 'optionsful.yml')
|
8
|
+
puts "\nNow you are able to configure Optionsful Link hader generation settings"
|
9
|
+
puts "\nEdit the file 'config/optionsful.yml' at your Rails 3 application."
|
10
10
|
end
|
11
11
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: optionsful
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 13
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 4
|
9
|
-
-
|
10
|
-
version: 0.4.
|
9
|
+
- 1
|
10
|
+
version: 0.4.1
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Marco Antonio Gonzalez Junior
|
@@ -79,7 +79,7 @@ dependencies:
|
|
79
79
|
version: 3.0.0.rc
|
80
80
|
type: :runtime
|
81
81
|
version_requirements: *id004
|
82
|
-
description:
|
82
|
+
description: Build RESTful web services supporting the HTTP OPTIONS verb on Ruby on Rails applications.
|
83
83
|
email: kayaman@baurets.net
|
84
84
|
executables: []
|
85
85
|
|
@@ -99,17 +99,20 @@ files:
|
|
99
99
|
- features/optionsful.feature
|
100
100
|
- features/step_definitions/optionsful3_steps.rb
|
101
101
|
- features/support/env.rb
|
102
|
-
- lib/baurets/optionsful/
|
102
|
+
- lib/baurets/optionsful/configurator.rb
|
103
103
|
- lib/baurets/optionsful/introspections.rb
|
104
104
|
- lib/baurets/optionsful/server.rb
|
105
105
|
- lib/optionsful.rb
|
106
106
|
- optionsful.gemspec
|
107
107
|
- rails/init.rb
|
108
|
-
- samples/optionsful.yml
|
108
|
+
- samples/optionsful.yml
|
109
109
|
- samples/optionsful_bug.yml
|
110
110
|
- samples/optionsful_true.yml
|
111
|
+
- samples/optionsful_true_custom.yml
|
112
|
+
- samples/optionsful_true_custom_base_path.yml
|
113
|
+
- samples/optionsful_true_custom_propagate.yml
|
111
114
|
- spec/fake_app.rb
|
112
|
-
- spec/
|
115
|
+
- spec/optionsful_configurator_spec.rb
|
113
116
|
- spec/optionsful_server_spec.rb
|
114
117
|
- spec/spec.opts
|
115
118
|
- spec/spec_helper.rb
|
@@ -150,6 +153,6 @@ specification_version: 3
|
|
150
153
|
summary: Support HTTP OPTIONS verb on your Rails 3 app.
|
151
154
|
test_files:
|
152
155
|
- spec/fake_app.rb
|
153
|
-
- spec/
|
156
|
+
- spec/optionsful_configurator_spec.rb
|
154
157
|
- spec/optionsful_server_spec.rb
|
155
158
|
- spec/spec_helper.rb
|
@@ -1,49 +0,0 @@
|
|
1
|
-
|
2
|
-
require 'yaml'
|
3
|
-
|
4
|
-
module Baurets
|
5
|
-
module Optionsful
|
6
|
-
class Config
|
7
|
-
|
8
|
-
DEFAULT = { :link => false, :host => 'auto', :base_path => "/api", :propagate => true }
|
9
|
-
|
10
|
-
def initialize(file = nil, options = {})
|
11
|
-
if file.nil?
|
12
|
-
file = File.join(Rails.root, 'config', 'optionsful.yml')
|
13
|
-
end
|
14
|
-
config = load_yaml(file, get_env)
|
15
|
-
config = DEFAULT if config.nil? or config.empty?
|
16
|
-
config.merge!(options) unless options.empty?
|
17
|
-
@config = config
|
18
|
-
config
|
19
|
-
end
|
20
|
-
|
21
|
-
def get_env
|
22
|
-
:test if Rails.env.test?
|
23
|
-
:development if Rails.env.development?
|
24
|
-
:production if Rails.env.production?
|
25
|
-
end
|
26
|
-
|
27
|
-
def load_yaml(file, environment)
|
28
|
-
config = nil
|
29
|
-
if File.exist?(file)
|
30
|
-
begin
|
31
|
-
envs = YAML::load_file(file)
|
32
|
-
raise "Could not parse the YAML." if (envs.empty? or (not envs.kind_of?(Hash)))
|
33
|
-
envs = envs.symbolize_keys if envs
|
34
|
-
config = envs[environment].symbolize_keys if (envs && envs[environment])
|
35
|
-
rescue
|
36
|
-
config = nil
|
37
|
-
end
|
38
|
-
config
|
39
|
-
end
|
40
|
-
|
41
|
-
end
|
42
|
-
|
43
|
-
def method_missing(name, *args)
|
44
|
-
return @config[name.to_sym]
|
45
|
-
end
|
46
|
-
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
@@ -1,20 +0,0 @@
|
|
1
|
-
# Optionsful custom settings
|
2
|
-
|
3
|
-
# Link header configuration
|
4
|
-
development:
|
5
|
-
link: false
|
6
|
-
host: auto
|
7
|
-
base_path: /api
|
8
|
-
propagate: true
|
9
|
-
|
10
|
-
test:
|
11
|
-
link: false
|
12
|
-
host: auto
|
13
|
-
base_path: /api
|
14
|
-
propagate: false
|
15
|
-
|
16
|
-
production:
|
17
|
-
link: false
|
18
|
-
host: auto
|
19
|
-
base_path: /api
|
20
|
-
propagate: false
|
@@ -1,76 +0,0 @@
|
|
1
|
-
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
|
-
|
3
|
-
describe Baurets::Optionsful::Config do
|
4
|
-
|
5
|
-
include Rack::Test::Methods
|
6
|
-
|
7
|
-
context "Config carries specific settings" do
|
8
|
-
|
9
|
-
describe "when there's NO custom config file, use expected default settings" do
|
10
|
-
|
11
|
-
it "the Link header generation must be disabled" do
|
12
|
-
config = Baurets::Optionsful::Config.new("file_error.txt")
|
13
|
-
config.link.should be false
|
14
|
-
end
|
15
|
-
|
16
|
-
end
|
17
|
-
|
18
|
-
describe "when there is a custom config file, load the settings from it" do
|
19
|
-
|
20
|
-
before(:each) do
|
21
|
-
@config = nil
|
22
|
-
end
|
23
|
-
|
24
|
-
it "the Link header generation must be disabled" do
|
25
|
-
@config = Baurets::Optionsful::Config.new()
|
26
|
-
@config.link.should be false
|
27
|
-
end
|
28
|
-
|
29
|
-
it "the Link header generation must be disabled (file found but looks corrupted!)" do
|
30
|
-
FileUtils.cp File.join(Rails.root, 'samples', 'optionsful_bug.yml'), File.join(Rails.root, 'config', 'optionsful.yml')
|
31
|
-
@config = Baurets::Optionsful::Config.new
|
32
|
-
@config.link.should == false
|
33
|
-
end
|
34
|
-
|
35
|
-
it "the Link header generation must be disabled (file given but looks corrupted!)" do
|
36
|
-
@config = Baurets::Optionsful::Config.new(File.join(Rails.root, 'samples', 'optionsful_bug.yml'))
|
37
|
-
@config.link.should be false
|
38
|
-
end
|
39
|
-
|
40
|
-
it "the Link header generation must be enabled" do
|
41
|
-
@config = Baurets::Optionsful::Config.new(nil, {:link => true})
|
42
|
-
@config.link.should be true
|
43
|
-
end
|
44
|
-
|
45
|
-
it "the Link header generation must be enabled (file found)" do
|
46
|
-
FileUtils.cp File.join(Rails.root, 'samples', 'optionsful_true.yml'), File.join(Rails.root, 'config', 'optionsful.yml')
|
47
|
-
@config = Baurets::Optionsful::Config.new()
|
48
|
-
@config.link.should be true
|
49
|
-
end
|
50
|
-
|
51
|
-
it "if the Link header generation is enabled, host value must be set" do
|
52
|
-
@config = Baurets::Optionsful::Config.new(File.join(Rails.root, 'samples', 'optionsful_true.yml'))
|
53
|
-
@config.link.should be true
|
54
|
-
@config.host.empty?.should_not be true
|
55
|
-
end
|
56
|
-
|
57
|
-
it "if the Link header generation is enabled, host value accepts 'auto'" do
|
58
|
-
@config = Baurets::Optionsful::Config.new(File.join(File.dirname(__FILE__), 'config', 'optionsful_host_auto.yml'))
|
59
|
-
@config.link.should be true
|
60
|
-
@config.host.should == "auto"
|
61
|
-
end
|
62
|
-
|
63
|
-
after(:each) do
|
64
|
-
FileUtils.rm [File.join(Rails.root, 'config', 'optionsful.yml')] if File.exist? File.join(Rails.root, 'config', 'optionsful.yml')
|
65
|
-
@config = nil
|
66
|
-
end
|
67
|
-
|
68
|
-
after(:all) do
|
69
|
-
FileUtils.rm [File.join(Rails.root, 'config', 'optionsful.yml')] if File.exist? File.join(Rails.root, 'config', 'optionsful.yml')
|
70
|
-
@config = nil
|
71
|
-
end
|
72
|
-
|
73
|
-
end
|
74
|
-
|
75
|
-
end
|
76
|
-
end
|