optionsful 0.4.0 → 0.4.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/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
|