washout_builder 0.11.1 → 0.11.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/.travis.yml +1 -5
- data/README.rdoc +2 -2
- data/Rakefile +13 -1
- data/lib/washout_builder.rb +1 -8
- data/lib/washout_builder/document/complex_type.rb +1 -1
- data/lib/washout_builder/version.rb +1 -1
- data/spec/app/controllers/washout_builder_controller_spec.rb +20 -1
- data/spec/lib/washout_builder/dispatcher_spec.rb +12 -4
- data/spec/lib/washout_builder/document/complex_type_spec.rb +61 -0
- data/spec/lib/washout_builder/document/virtus_model_spec.rb +35 -0
- data/spec/lib/washout_builder_spec.rb +8 -8
- data/spec/support/exceptions/another_exception.rb +1 -1
- data/spec/support/exceptions/custom2.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
MWJiN2YxMDQ0NDg1ZGY0N2U4Y2Q0NWM5MjE1MjMyMTJkMjM0NzM5Nw==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
NjUzYzA4YTc2MTBmOTg0ZDRkZWNlZDRkZWY5NzAzYmVjZmNiOTVjMA==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
NTk4YmY4Y2ZlYjhjOWYyNzBmOGFiM2I4MjU5NmUxMmUyYzM2MDQ3OGRlNTI0
|
10
|
+
ZGNhZjNjZjBjYmY1MmUyNDg0MGVlYTVlYmQ3Nzc4OWQzOGI0MGNmNmMzMzM0
|
11
|
+
MTY4NjUzYzEyNTIxZDRmNjU5NThmYmZjM2I1YTcwYjg4ZjFhMDQ=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
MjNkMmNiY2I3MzY4YmMzZTM5MTE2NzgyZTU1YjlkMmRlYzBkMWY4MzUwODc3
|
14
|
+
ZjliYWZhZDU2ZTc4YjA2NjdiYWY2ZGM4ZWRlNzUzYmYwMTE1ZmVmNDBkMWFl
|
15
|
+
NmNjODYwNDlhOWVmYzQ1Y2JiN2NjN2JkMjlhZjc2MTcxNWU3OGE=
|
data/.travis.yml
CHANGED
data/README.rdoc
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
= washout_builder {<img src="https://travis-ci.org/bogdanRada/washout_builder.png" />}[https://travis-ci.org/bogdanRada/washout_builder] {<img src="https://badge.fury.io/rb/washout_builder.png" alt="Gem Version" />}[http://badge.fury.io/rb/washout_builder]
|
1
|
+
= washout_builder {<img src="https://travis-ci.org/bogdanRada/washout_builder.png?branch=master,develop" />}[https://travis-ci.org/bogdanRada/washout_builder] {<img src="https://badge.fury.io/rb/washout_builder.png" alt="Gem Version" />}[http://badge.fury.io/rb/washout_builder]
|
2
2
|
|
3
3
|
= Overview
|
4
4
|
WashOutBuilder is a Soap Service Documentation generator (extends WashOut https://github.com/inossidabile/wash_out/)
|
@@ -20,7 +20,7 @@ The way WashOut is used is not modified, it just extends its functionality by ge
|
|
20
20
|
|
21
21
|
1. {Ruby 1.9.x or Ruby 2.0.x}[http://www.ruby-lang.org]
|
22
22
|
2. {Ruby on Rails}[http://rubyonrails.org].
|
23
|
-
3. {WashOut Gem version >= 0.
|
23
|
+
3. {WashOut Gem version >= 0.9.1}[https://github.com/inossidabile/wash_out]
|
24
24
|
4. {Virtus Gem}[https://github.com/solnic/virtus]
|
25
25
|
|
26
26
|
= Compatibility
|
data/Rakefile
CHANGED
@@ -7,8 +7,20 @@ RSpec::Core::RakeTask.new(:spec) do |spec|
|
|
7
7
|
# spec.rspec_opts = ['--backtrace ']
|
8
8
|
end
|
9
9
|
|
10
|
+
#desc "Prepare dummy application"
|
11
|
+
#task :prepare do
|
12
|
+
# ENV["RAILS_ENV"] ||= 'test'
|
13
|
+
#
|
14
|
+
# require File.expand_path("./spec/dummy/config/environment", File.dirname(__FILE__))
|
15
|
+
# Dummy::Application.load_tasks
|
16
|
+
#
|
17
|
+
# Rake::Task["db:test:prepare"].invoke
|
18
|
+
#end
|
19
|
+
|
20
|
+
|
21
|
+
|
10
22
|
desc "Default: run the unit tests."
|
11
|
-
task :default => [:all]
|
23
|
+
task :default => [ :all]
|
12
24
|
|
13
25
|
desc 'Test the plugin under all supported Rails versions.'
|
14
26
|
task :all => ["appraisal:install"] do |t|
|
data/lib/washout_builder.rb
CHANGED
@@ -30,7 +30,7 @@ end
|
|
30
30
|
Virtus::InstanceMethods::Constructor.class_eval do
|
31
31
|
alias_method :original_initialize,:initialize
|
32
32
|
def initialize(attributes = nil)
|
33
|
-
if self.class.ancestors.detect{ |fault| WashoutBuilder::Type.get_fault_classes.include?(fault) }.present?
|
33
|
+
if self.class.ancestors.detect{ |fault| WashoutBuilder::Type.get_fault_classes.include?(fault) }.present? || WashoutBuilder::Type.get_fault_classes.include?(self.class)
|
34
34
|
attributes = {:message => attributes} unless attributes.is_a?(Hash)
|
35
35
|
end
|
36
36
|
original_initialize(attributes)
|
@@ -40,13 +40,6 @@ end
|
|
40
40
|
|
41
41
|
WashOut::Param.send :include, WashoutBuilder::Document::ComplexType
|
42
42
|
|
43
|
-
if defined?(WashOut::Model)
|
44
|
-
WashOut::Model.class_eval do
|
45
|
-
def wash_out_param_name(*args)
|
46
|
-
return name.underscore
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
50
43
|
|
51
44
|
WashoutBuilder::Type.get_fault_classes.each do |exception_class|
|
52
45
|
exception_class.class_eval do
|
@@ -37,7 +37,7 @@ module WashoutBuilder
|
|
37
37
|
def fix_descendant_wash_out_type(config, complex_class)
|
38
38
|
param_class = complex_class.is_a?(Class) ? complex_class : complex_class.constantize rescue nil
|
39
39
|
if !param_class.nil? && param_class.ancestors.include?(WashOut::Type) && !map[0].nil?
|
40
|
-
descendant = WashOut::Param.
|
40
|
+
descendant = WashOut::Param.parse_builder_def(config, param_class.wash_out_param_map)[0]
|
41
41
|
self.name = descendant.name
|
42
42
|
self.map = descendant.map
|
43
43
|
end
|
@@ -1,8 +1,27 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
|
3
|
+
|
4
|
+
describe WashoutBuilderController, :type => :controller do
|
5
|
+
|
6
|
+
let(:soap_config) { OpenStruct.new(
|
7
|
+
camelize_wsdl: false,
|
8
|
+
namespace: "/api/wsdl",
|
9
|
+
) }
|
4
10
|
|
11
|
+
before(:each) do
|
12
|
+
ApiController.stubs(:soap_config).returns(soap_config)
|
13
|
+
end
|
14
|
+
|
15
|
+
it "gets the services" do
|
16
|
+
get :all
|
17
|
+
assigns(:services).should eq([{"service_name"=>"Api", "namespace"=>"/api/wsdl", "endpoint"=>"/api/action", "documentation_url"=>"http://test.host/api/doc"}])
|
18
|
+
end
|
5
19
|
|
6
20
|
|
21
|
+
it "renders the template" do
|
22
|
+
get :all
|
23
|
+
response.should render_template("wash_with_html/all_services")
|
24
|
+
end
|
7
25
|
|
26
|
+
|
8
27
|
end
|
@@ -5,7 +5,7 @@ mock_controller do
|
|
5
5
|
soap_action 'dispatcher_method', :args => nil, :return => nil
|
6
6
|
|
7
7
|
def dispatcher_method
|
8
|
-
|
8
|
+
#nothing
|
9
9
|
end
|
10
10
|
end
|
11
11
|
|
@@ -23,9 +23,17 @@ describe ApiController, :type => :controller do
|
|
23
23
|
WashoutBuilder::Document::Generator.expects(:new).with(
|
24
24
|
:config => ApiController.soap_config,
|
25
25
|
:service_class => ApiController,
|
26
|
-
:soap_actions => {
|
27
|
-
|
28
|
-
|
26
|
+
:soap_actions => {"dispatcher_method"=>{
|
27
|
+
:args=>nil,
|
28
|
+
:return=>nil,
|
29
|
+
:in=>[],
|
30
|
+
:out=>[],
|
31
|
+
:to=>"dispatcher_method",
|
32
|
+
:response_tag=>"tns:dispatcher_methodResponse",
|
33
|
+
:builder_in=>[],
|
34
|
+
:builder_out=>[]
|
35
|
+
}
|
36
|
+
}
|
29
37
|
)
|
30
38
|
get :_generate_doc
|
31
39
|
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
#encoding:utf-8
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
|
5
|
+
describe WashoutBuilder::Document::ComplexType do
|
6
|
+
let(:soap_config) { OpenStruct.new(
|
7
|
+
camelize_wsdl: false,
|
8
|
+
namespace: "/api/wsdl",
|
9
|
+
description: "some description"
|
10
|
+
) }
|
11
|
+
|
12
|
+
def get_wash_out_param(class_name_or_structure, soap_config = soap_config)
|
13
|
+
WashOut::Param.parse_builder_def(soap_config, class_name_or_structure)[0]
|
14
|
+
end
|
15
|
+
|
16
|
+
let(:subject) { get_wash_out_param(ProjectType) }
|
17
|
+
let(:namespaced_object) { get_wash_out_param(Api::TestType) }
|
18
|
+
|
19
|
+
it "returns the complex class name" do
|
20
|
+
subject.get_complex_class_name.should eq("ProjectType")
|
21
|
+
end
|
22
|
+
|
23
|
+
|
24
|
+
it "returns the complex class name" do
|
25
|
+
subject.get_complex_class_name.should eq("ProjectType")
|
26
|
+
end
|
27
|
+
|
28
|
+
|
29
|
+
it "returns the complex class with namespace" do
|
30
|
+
namespaced_object.get_complex_class_name.should eq("Api::TestType")
|
31
|
+
end
|
32
|
+
|
33
|
+
|
34
|
+
it "returns error if classname already detected (only used for hashes)" do
|
35
|
+
subject.stubs(:classified?).returns(false)
|
36
|
+
subject.stubs(:basic_type).returns("ProjectType")
|
37
|
+
defined = [ { :class= => "ProjectType" }]
|
38
|
+
defined.stubs(:detect).returns({:class => "ProjectType"})
|
39
|
+
expect {subject.get_complex_class_name(defined) }.to raise_error(RuntimeError, "Duplicate use of `ProjectType` type name. Consider using classified types.")
|
40
|
+
end
|
41
|
+
|
42
|
+
it "returns the param structure" do
|
43
|
+
subject.get_param_structure.should eq({"project"=>"struct"})
|
44
|
+
end
|
45
|
+
|
46
|
+
it "fixes the first descendant " do
|
47
|
+
descendant = get_wash_out_param(ProjectType.wash_out_param_map)
|
48
|
+
subject.fix_descendant_wash_out_type(soap_config, ProjectType)
|
49
|
+
subject.name.should eq(descendant.name)
|
50
|
+
subject.map[0].get_param_structure.should eq(descendant.map[0].get_param_structure)
|
51
|
+
end
|
52
|
+
|
53
|
+
it "same as ancestor" do
|
54
|
+
subject.get_ancestors(ProjectType).should eq([])
|
55
|
+
end
|
56
|
+
|
57
|
+
|
58
|
+
|
59
|
+
|
60
|
+
|
61
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
#encoding:utf-8
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
class SOAPError < WashOut::Dispatcher::SOAPError
|
5
|
+
|
6
|
+
end
|
7
|
+
|
8
|
+
describe WashoutBuilder::Document::VirtusModel do
|
9
|
+
|
10
|
+
let(:subject) { SOAPError}
|
11
|
+
|
12
|
+
|
13
|
+
|
14
|
+
it "gets the strcuture" do
|
15
|
+
subject.get_virtus_model_structure.should eq({"code"=>{:primitive=>"Integer", :member_type=>nil}, "message"=>{:primitive=>"String", :member_type=>nil}, "backtrace"=>{:primitive=>"String", :member_type=>nil}})
|
16
|
+
end
|
17
|
+
|
18
|
+
it "gets the member type for arrays" do
|
19
|
+
subject.get_virtus_member_type_primitive({:primitive=>"Array", :member_type=>"SomeInexistentClass"}).should eq("SomeInexistentClass")
|
20
|
+
end
|
21
|
+
|
22
|
+
it "gets the member type for clasified types" do
|
23
|
+
subject.get_virtus_member_type_primitive({:primitive=>"SomeInexistentClass", :member_type=>nil}).should eq("SomeInexistentClass")
|
24
|
+
end
|
25
|
+
|
26
|
+
it "returns nil because is not a classified object" do
|
27
|
+
subject.get_virtus_member_type_primitive({:primitive=>"integer", :member_type=>nil}).should eq(nil)
|
28
|
+
end
|
29
|
+
|
30
|
+
|
31
|
+
it "gets the strcuture" do
|
32
|
+
subject.remove_fault_type_inheritable_elements(["code"]).should eq({ "message"=>{:primitive=>"String", :member_type=>nil}, "backtrace"=>{:primitive=>"String", :member_type=>nil}})
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
@@ -5,10 +5,10 @@ require 'spec_helper'
|
|
5
5
|
describe WashoutBuilder do
|
6
6
|
|
7
7
|
before(:each) do
|
8
|
-
WashOut::
|
9
|
-
WashOut::
|
10
|
-
WashOut::
|
11
|
-
WashOut::
|
8
|
+
WashOut::Engine.config.wash_out[:wsdl_style] = 'rpc'
|
9
|
+
WashOut::Engine.config.wash_out[:parser] = :nokogiri
|
10
|
+
WashOut::Engine.config.wash_out[:catch_xml_errors] = true
|
11
|
+
WashOut::Engine.config.wash_out[:camelize_wsdl] = "lower"
|
12
12
|
end
|
13
13
|
|
14
14
|
let :nori do
|
@@ -558,12 +558,12 @@ describe WashoutBuilder do
|
|
558
558
|
end
|
559
559
|
|
560
560
|
lambda { savon(:bad) }.should raise_exception(
|
561
|
-
WashOut::ProgrammerError,
|
561
|
+
WashOut::Dispatcher::ProgrammerError,
|
562
562
|
/SOAP response .*wyldness.*Array.*Hash.*stallion/
|
563
563
|
)
|
564
564
|
|
565
565
|
lambda { savon(:bad2) }.should raise_exception(
|
566
|
-
WashOut::ProgrammerError,
|
566
|
+
WashOut::Dispatcher::ProgrammerError,
|
567
567
|
/SOAP response .*oops.*String.*telephone_booths.*Array/
|
568
568
|
)
|
569
569
|
end
|
@@ -571,7 +571,7 @@ describe WashoutBuilder do
|
|
571
571
|
context "custom exceptions" do
|
572
572
|
let(:error_message) { "some message" }
|
573
573
|
let(:error_code) { 1001 }
|
574
|
-
let(:soap_exception) { SOAPError.new(error_message,error_code) }
|
574
|
+
let(:soap_exception) { WashOut::Dispatcher::SOAPError.new(error_message,error_code) }
|
575
575
|
|
576
576
|
before(:each) do
|
577
577
|
# Savon::Response.raise_errors = false
|
@@ -582,7 +582,7 @@ describe WashoutBuilder do
|
|
582
582
|
soap_action 'bad', :args => nil, :return => nil
|
583
583
|
|
584
584
|
def bad
|
585
|
-
raise SOAPError.new("some message", 1001)
|
585
|
+
raise WashOut::Dispatcher::SOAPError.new("some message", 1001)
|
586
586
|
end
|
587
587
|
end
|
588
588
|
|