washout_builder 1.7.5 → 2.0.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 159e07561571b409357453527454de91fc1ed030b715b663467d5609fc171e90
4
- data.tar.gz: 763e07ae420b1897eb031e33cb0b5073cd534c6f262eb358b6e7d9a1c2f0a95e
3
+ metadata.gz: 07cbf72181269afe7c81be817b82027fc0353f4be0174b926b329c9963712d20
4
+ data.tar.gz: 6431a14a4a5e4fedc0c3682dbeec724678eaec360025eff7292a5c133d2cc421
5
5
  SHA512:
6
- metadata.gz: 7a7d90b7e0e07f2de6be67edeb1fa0957e966c26da4bb53b1c14a38d9e8e25fec19ef6da7fb043c9ff9d4ff4f3506351854766b1a2c3f1cd25b9d5e97e0ca7e9
7
- data.tar.gz: bc06865bdb9a5f2411cb84434659fb3a5c948107c69e41aee60893a5dc456f28945c4b0662f1bcd08a3966e900574024f529ca5f2f117356965592297437e01a
6
+ metadata.gz: '0220855ff5d6656482d2a23db14e6150330508d9d55ca8cdd89bd66605ae783afcf2c0416f188eeb4f58b0dc8ec69c5d2d20326d1cec0bad3cba6d1aac7dbd02'
7
+ data.tar.gz: 373c906bb927c4dc0e4a5610f811dccba8ff39adfa3dc5fa1e919dcdca23861d35ab605eca7d0b1b7457dfcd3fb3dc840b9bd55e078f0943323a61343fcab7a8
data/.travis.yml CHANGED
@@ -58,7 +58,7 @@ matrix:
58
58
  - rvm: 2.6.5
59
59
  gemfile: gemfiles/rails_4.1.1.gemfile
60
60
  - rvm: 2.6.5
61
- gemfile: gemfiles/rails_4.2.0.gemfile
61
+ gemfile: gemfiles/rails_4.2.0.gemfile
62
62
  rvm:
63
63
  - 2.2.5
64
64
  - 2.3.1
@@ -67,5 +67,7 @@ rvm:
67
67
  - 2.4.7
68
68
  - 2.5.6
69
69
  - 2.6.5
70
+ - 2.7.1
71
+ - 3.0.0
70
72
  notifications:
71
73
  email: false
data/Appraisals CHANGED
@@ -17,7 +17,7 @@ if RUBY_VERSION <= "2.4.0"
17
17
  gem 'actionpack' , '4.2.7.1'
18
18
  end
19
19
  end
20
- if RUBY_VERSION >= '2.2.0' && ENV['BUNDLER_VERSION'].to_s <= '2.0'
20
+ if RUBY_VERSION >= '2.2.0' && RUBY_VERSION < '3.0.0' && ENV['BUNDLER_VERSION'].to_s <= '2.0'
21
21
  appraise "rails-5.0.0" do
22
22
  gem "rails", "5.0.0"
23
23
  end
@@ -40,7 +40,7 @@ if RUBY_VERSION >= '2.2.0' && ENV['BUNDLER_VERSION'].to_s <= '2.0'
40
40
  end
41
41
  end
42
42
 
43
- if RUBY_VERSION >= '2.2.0' && ENV['BUNDLER_VERSION'].to_s >= '2.0'
43
+ if RUBY_VERSION >= '2.2.0' && RUBY_VERSION < '3.0.0' && ENV['BUNDLER_VERSION'].to_s >= '2.0'
44
44
  appraise "rails-5.2.0" do
45
45
  gem "rails", "5.2.0"
46
46
  end
@@ -57,3 +57,9 @@ if RUBY_VERSION >= '2.2.0' && ENV['BUNDLER_VERSION'].to_s >= '2.0'
57
57
  gem "rails", "6.0.1"
58
58
  end
59
59
  end
60
+
61
+ if RUBY_VERSION >= '3.0.0' && ENV['BUNDLER_VERSION'].to_s >= '2.0'
62
+ appraise "rails-6.1.3" do
63
+ gem "rails", "6.1.3"
64
+ end
65
+ end
data/Gemfile CHANGED
@@ -3,21 +3,3 @@ source 'http://rubygems.org'
3
3
  gemspec
4
4
 
5
5
  gem 'wash_out', git: 'https://github.com/inossidabile/wash_out.git'
6
-
7
- gem 'wasabi'
8
- gem 'savon', '>= 2.11'
9
- gem 'httpi', '>= 2.4'
10
- gem 'nokogiri', '>= 1.7'
11
-
12
- gem 'rspec-rails','4.0.0.beta3'
13
- gem 'appraisal', '>= 2.1'
14
- gem 'simplecov', '>= 0.12'
15
- gem 'simplecov-summary', '>= 0.0.5'
16
- gem 'mocha', '>= 1.2'
17
- gem 'coveralls', '>= 0.8'
18
-
19
- gem "yard", '>= 0.9.20'
20
- gem 'yard-rspec', '>= 0.1'
21
- gem 'redcarpet', '>= 3.4'
22
- gem 'github-markup', '>= 1.4'
23
- gem 'inch', '>= 0.7'
data/README.md CHANGED
@@ -10,6 +10,27 @@ WashOutBuilder is a Soap Service Documentation generator (extends [WashOut](http
10
10
 
11
11
  The way [WashOut](https://github.com/inossidabile/wash_out) is used is not modified, it just extends its functionality by generating html documentation to your services that you write
12
12
 
13
+ NEW Improvements in version 2.0.1
14
+ ---------------------------------
15
+ - Fix issue when trying to re-use same complex type (with same structure) multiple times inside same controller
16
+
17
+ NEW Improvements in version 2.0.0
18
+ ---------------------------------
19
+
20
+ This release tries to fix some major bugs and introduces backward incompatible changes.
21
+ - The complex type list will contain now exactly same types used when doing an actual SOAP request
22
+ - Same for when listing the soap actions ( the return type and parameters ).
23
+
24
+ Initially the way the complex types were shown on the page was not correct, because it was not reflecting
25
+ the actual way the SOAP action receives its arguments when doing an actual SOAP request to that controller
26
+
27
+ The main issue was not handling correctly the classes that are inheriting from WashOut::Type.
28
+
29
+ This release tries to fix those issues.
30
+
31
+ Note: Only internal methods have been changed. The configuration has not changed.
32
+ So in order to upgrade to this new version, just update the version in your Gemfile/gemspec file
33
+
13
34
  NEW Improvements in version 1.5.1
14
35
  ---------------------------------
15
36
 
@@ -1,5 +1,6 @@
1
1
  # module that is used for constructing complex types in HTML-Documentation
2
2
  module WashoutBuilderComplexTypeHelper
3
+ include WashoutBuilderSharedHelper
3
4
  # this method is for printing the attributes of a complex type
4
5
  # if the attributes are primitives this will show the attributes with blue color
5
6
  # otherwise will call another method for printing the complex attribute
@@ -49,8 +50,9 @@ module WashoutBuilderComplexTypeHelper
49
50
  def create_complex_element_type_html(pre, element, element_description)
50
51
  complex_class = element.find_complex_class_name
51
52
  return if complex_class.nil?
52
- complex_class_content = element.multiplied ? "Array of #{complex_class}" : "#{complex_class}"
53
- pre << "<a href='##{complex_class}'><span class='lightBlue'>#{complex_class_content}</span></a>&nbsp;<span class='bold'>#{element.name}</span>"
53
+ real_class = find_correct_complex_type(complex_class)
54
+ complex_class_content = element.multiplied ? "Array of #{real_class}" : "#{real_class}"
55
+ pre << "<a href='##{real_class}'><span class='lightBlue'>#{complex_class_content}</span></a>&nbsp;<span class='bold'>#{element.name}</span>"
54
56
  pre << "&#8194;<span>#{html_safe(element_description)}</span>" unless element_description.blank?
55
57
  pre
56
58
  end
@@ -1,5 +1,6 @@
1
1
  # helper that is used to show the arguments of a method with their types in HTML documentation
2
2
  module WashoutBuilderMethodArgumentsHelper
3
+ include WashoutBuilderSharedHelper
3
4
  # displays the parameter of a method as argument and determines if the parameter is basic type or complex type
4
5
  #
5
6
  # @see WashoutBuilder::Document::ComplexType#find_complex_class_name
@@ -37,8 +38,9 @@ module WashoutBuilderMethodArgumentsHelper
37
38
  # @api public
38
39
  def create_method_argument_complex_element(pre, param, use_spacer, spacer, complex_class)
39
40
  return if complex_class.nil?
40
- argument_content = param.multiplied ? "Array of #{complex_class}" : "#{complex_class}"
41
- pre << "#{use_spacer ? spacer : ''}<a href='##{complex_class}'><span class='lightBlue'>#{argument_content}</span></a>&nbsp;<span class='bold'>#{param.name}</span>"
41
+ real_class = find_correct_complex_type(complex_class)
42
+ argument_content = param.multiplied ? "Array of #{real_class}" : "#{real_class}"
43
+ pre << "#{use_spacer ? spacer : ''}<a href='##{real_class}'><span class='lightBlue'>#{argument_content}</span></a>&nbsp;<span class='bold'>#{param.name}</span>"
42
44
  end
43
45
 
44
46
  # this method will check if the current index of the argument is not last, will insert a comma then a break if the argument is followed by other arguments,
@@ -1,5 +1,6 @@
1
1
  # helper that is used to list the method's return tyep as a LI element in HTML documentation
2
2
  module WashoutBuilderMethodListHelper
3
+ include WashoutBuilderSharedHelper
3
4
  # this method will create the return type of the method and check if the type is basic or complex type or array of types
4
5
  #
5
6
  # @param [Builder::XmlMarkup] xml the markup builder that is used to insert HTML line breaks or span elements
@@ -10,9 +11,10 @@ module WashoutBuilderMethodListHelper
10
11
  #
11
12
  # @api public
12
13
  def create_return_complex_type_list_html(xml, complex_class, builder_out)
13
- return_content = builder_out[0].multiplied ? "Array of #{complex_class}" : "#{complex_class}"
14
+ real_class = find_correct_complex_type(complex_class)
15
+ return_content = builder_out[0].multiplied ? "Array of #{real_class}" : "#{real_class}"
14
16
  xml.span('class' => 'pre') do
15
- xml.a('href' => "##{complex_class}") do |inner_xml|
17
+ xml.a('href' => "##{real_class}") do |inner_xml|
16
18
  inner_xml.span('class' => 'lightBlue') do |y|
17
19
  y << "#{return_content}"
18
20
  end
@@ -1,5 +1,6 @@
1
1
  # helper that is used to create the return types of methods in HTML documentation
2
2
  module WashoutBuilderMethodReturnTypeHelper
3
+ include WashoutBuilderSharedHelper
3
4
  # this method will print the return type next to the method name
4
5
  # @see WashoutBuilder::Document::ComplexType#find_complex_class_name
5
6
  # @see WashoutBuilder::Type::BASIC_TYPES
@@ -37,11 +38,12 @@ module WashoutBuilderMethodReturnTypeHelper
37
38
  # @api public
38
39
  def html_public_method_complex_type(pre, output, complex_class)
39
40
  return if complex_class.nil?
41
+ real_class = find_correct_complex_type(complex_class)
40
42
  if output[0].multiplied
41
- complex_return_type = "Array of #{complex_class}"
43
+ complex_return_type = "Array of #{real_class}"
42
44
  else
43
- complex_return_type = "#{complex_class}"
45
+ complex_return_type = "#{real_class}"
44
46
  end
45
- pre << "<a href='##{complex_class}'><span class='lightBlue'>#{complex_return_type}</span></a>"
47
+ pre << "<a href='##{real_class}'><span class='lightBlue'>#{complex_return_type}</span></a>"
46
48
  end
47
49
  end
@@ -0,0 +1,29 @@
1
+ module WashoutBuilderSharedHelper
2
+ # When displaying a complex type that inherits from WashOut::Type
3
+ # we must use its descendant name to properly show the correct Type
4
+ # that can we used to make the actual request to the action
5
+ #
6
+ # @param [Class, String] complex_class the name of the complex type either as a string or a class
7
+ # @return [Class, String]
8
+ # @api public
9
+ def find_correct_complex_type(complex_class)
10
+ real_class = find_class_from_string(complex_class)
11
+ if real_class.present? && real_class.ancestors.include?( WashoutBuilder::Type.base_type_class)
12
+ descendant = WashoutBuilder::Type.base_param_class.parse_def(config, real_class.wash_out_param_map)[0]
13
+ descendant.find_complex_class_name
14
+ else
15
+ complex_class
16
+ end
17
+ end
18
+
19
+ # Tries to constantize a string or a class to return the class
20
+ #
21
+ # @param [String] complex_class A string that contains the name of a class
22
+ # @return [Class, nil] returns the class if it is classes_defined otherwise nil
23
+ # @api public
24
+ def find_class_from_string(complex_class)
25
+ complex_class.is_a?(Class) ? complex_class : complex_class.constantize
26
+ rescue
27
+ nil
28
+ end
29
+ end
@@ -0,0 +1,8 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "http://rubygems.org"
4
+
5
+ gem "wash_out", git: "https://github.com/inossidabile/wash_out.git"
6
+ gem "rails", "6.1.3"
7
+
8
+ gemspec path: "../"
@@ -11,8 +11,8 @@ echo "Trying to compare rails ${rails_version:="1"} with 5.2"
11
11
  if (( $(echo "${rails_version%.*} >= 5.2" |bc -l) )); then
12
12
  echo "Installing Bundler v2"
13
13
  gem uninstall -v '< 2.0' -i "$(rvm gemdir)"@global -ax bundler --force || true
14
- gem install bundler -v '2.0.1'
15
- export MY_BUNDLER_VERSION="_2.0.1_"
14
+ gem install bundler -v '2.2.11'
15
+ export MY_BUNDLER_VERSION="_2.2.11_"
16
16
  else
17
17
  echo "Installing Bundler v1"
18
18
  gem uninstall -v '>= 2' -i "$(rvm gemdir)"@global -ax bundler --force || true
@@ -52,7 +52,6 @@ end
52
52
  base_param_class = WashoutBuilder::Type.base_param_class
53
53
  if base_param_class.present?
54
54
  base_param_class.class_eval do
55
- extend WashoutBuilder::Param
56
55
  include WashoutBuilder::Document::ComplexType
57
56
  end
58
57
  end
@@ -30,7 +30,7 @@ module WashoutBuilder
30
30
  # @raise [RuntimeError] Raises a runtime error if is detected a duplicate use of the complex type
31
31
  # @api public
32
32
  def check_duplicate_complex_class(classes_defined, complex_class)
33
- complex_obj_found = classes_defined.find { |hash| hash[:class] == complex_class }
33
+ complex_obj_found = classes_defined.find { |hash| hash if hash[:class] == complex_class && hash[:obj].find_param_structure.keys != self.find_param_structure.keys }
34
34
  raise "Duplicate use of `#{basic_type}` type name. Consider using classified types." if !complex_obj_found.nil? && struct? && !classified?
35
35
  end
36
36
 
@@ -71,25 +71,6 @@ module WashoutBuilder
71
71
  self.map = map.delete_if { |element| keys.include?(element.name) }
72
72
  end
73
73
 
74
- # Dirty hack to fix the first washout param type.
75
- # This only applies if the first complex type is inheriting WashOutType
76
- # its name should be set to its descendant and the map of the current object will be set to its descendant
77
- # @see WashOut::Param#parse_builder_def
78
- #
79
- # @param [WashOut::SoapConfig] config an object that holds the soap configuration
80
- # @param [Class, String] complex_class the name of the complex type either as a string or a class
81
- # @return [void]
82
- # @api public
83
- def fix_descendant_wash_out_type(config, complex_class)
84
- param_class = find_class_from_string(complex_class)
85
- base_param_class = WashoutBuilder::Type.base_param_class
86
- base_type_class = WashoutBuilder::Type.base_type_class
87
- return if base_param_class.blank? || base_type_class.blank?
88
- return unless param_class.present? && param_class.ancestors.include?(base_type_class) && map[0].present?
89
- descendant = base_param_class.parse_builder_def(config, param_class.wash_out_param_map)[0]
90
- self.name = descendant.name
91
- self.map = descendant.map
92
- end
93
74
 
94
75
  # Description of method
95
76
  #
@@ -172,8 +153,8 @@ module WashoutBuilder
172
153
  def get_nested_complex_types(config, classes_defined)
173
154
  classes_defined = [] if classes_defined.blank?
174
155
  complex_class = find_complex_class_name(classes_defined)
175
- fix_descendant_wash_out_type(config, complex_class)
176
- unless complex_class.nil?
156
+ real_class = find_class_from_string(complex_class)
157
+ if complex_class.present? && (real_class.blank? || (real_class.present? && !real_class.ancestors.include?( WashoutBuilder::Type.base_type_class)))
177
158
  classes_defined << complex_type_hash(complex_class, self, complex_type_ancestors(config, complex_class, classes_defined))
178
159
  end
179
160
  classes_defined = complex_type_descendants(config, classes_defined)
@@ -216,7 +197,7 @@ module WashoutBuilder
216
197
  # @param [Array<Hash>] classes_defined An Array with all the complex types that have been detected so far
217
198
  # @return [Array<Class>] An Array of classes from which the class that is sent as parameter inherits from
218
199
  # @api public
219
- def get_class_ancestors(config, class_name, classes_defined)
200
+ def get_class_ancestors(config, class_name, classes_defined)
220
201
  ancestors = get_ancestors(class_name)
221
202
  return if ancestors.blank?
222
203
  base_param_class = WashoutBuilder::Type.base_param_class
@@ -8,7 +8,11 @@ module WashoutBuilder
8
8
  # @param [Array<Class>] array The array of classes that should be fitered from the ancestors if they are present
9
9
  # @return [Array<Class>] The classes from which the class given as first argument inherits from but filtering the classes passed as second argument
10
10
  def get_complex_type_ancestors(class_name, array)
11
- (class_name.ancestors - class_name.included_modules).delete_if { |x| x.to_s.downcase == class_name.to_s.downcase || array.include?(x.to_s) }
11
+ (class_name.ancestors - class_name.included_modules).delete_if do |x|
12
+ x.to_s.downcase == class_name.to_s.downcase ||
13
+ array.include?(x.to_s) ||
14
+ (x.respond_to?(:abstract_class) && x.abstract_class)
15
+ end
12
16
  end
13
17
  end
14
18
  end
@@ -37,8 +37,8 @@ module WashoutBuilder
37
37
  current_action = soap_actions[action]
38
38
  base_param_class = WashoutBuilder::Type.base_param_class
39
39
  return if base_param_class.blank?
40
- current_action[:builder_in] = base_param_class.parse_builder_def(soap_config, options[:args])
41
- current_action[:builder_out] = base_param_class.parse_builder_def(soap_config, options[:return])
40
+ current_action[:builder_in] = base_param_class.parse_def(soap_config, options[:args])
41
+ current_action[:builder_out] = base_param_class.parse_def(soap_config, options[:return])
42
42
  current_action[:args_description] = options[:args_description].present? && options[:args_description].is_a?(Hash) ? options[:args_description].stringify_keys : {}
43
43
  current_action
44
44
  end
@@ -8,9 +8,9 @@ module WashoutBuilder
8
8
  # the module that is used to generate the gem version
9
9
  module VERSION
10
10
  # the major version of the gem
11
- MAJOR = 1
11
+ MAJOR = 2
12
12
  # the minor version of the gem
13
- MINOR = 7
13
+ MINOR = 0
14
14
  # the tiny version of the gem
15
15
  TINY = 5
16
16
  # if the version should be a prerelease
@@ -14,29 +14,29 @@ describe WashoutBuilder::Document::ComplexType do
14
14
  let(:namespaced_object) { get_wash_out_param(Api::TestType) }
15
15
 
16
16
  it 'returns the complex class name' do
17
- expect(subject.find_complex_class_name).to eq('ProjectType')
17
+ expect(subject.find_complex_class_name).to eq('Project')
18
18
  end
19
19
 
20
20
  it 'returns the complex class with namespace' do
21
- expect(namespaced_object.find_complex_class_name).to eq('Api::TestType')
21
+ expect(namespaced_object.find_complex_class_name).to eq('Project')
22
22
  end
23
23
 
24
- it 'returns error if classname already detected (only used for hashes)' do
24
+ it 'does not return error if classname already detected (only used for hashes) and same structure' do
25
25
  subject.stubs(:classified?).returns(false)
26
26
  subject.stubs(:basic_type).returns('ProjectType')
27
- defined = [{ class: 'ProjectType' }]
28
- expect { subject.find_complex_class_name(defined) }.to raise_error(RuntimeError, 'Duplicate use of `ProjectType` type name. Consider using classified types.')
27
+ classes_defined = [{ class: 'ProjectType', obj: get_wash_out_param(ProjectType), ancestors: [] }]
28
+ expect { subject.find_complex_class_name(classes_defined) }.to_not raise_error(RuntimeError, 'Duplicate use of `ProjectType` type name. Consider using classified types.')
29
29
  end
30
30
 
31
- it 'returns the param structure' do
32
- expect(subject.find_param_structure).to eq("project"=>"struct")
31
+ it 'returns error if classname already detected (only used for hashes)' do
32
+ subject.stubs(:classified?).returns(false)
33
+ subject.stubs(:basic_type).returns('ProjectType')
34
+ classes_defined = [{ class: 'ProjectType', obj: get_wash_out_param(Api::TestType), ancestors: [] }]
35
+ expect { subject.find_complex_class_name(classes_defined) }.to raise_error(RuntimeError, 'Duplicate use of `ProjectType` type name. Consider using classified types.')
33
36
  end
34
37
 
35
- it 'fixes the first descendant ' do
36
- descendant = get_wash_out_param(ProjectType.wash_out_param_map)
37
- subject.fix_descendant_wash_out_type(soap_config, ProjectType)
38
- expect(subject.name).to eq(descendant.name)
39
- expect(subject.map[0].find_param_structure).to eq(descendant.map[0].find_param_structure)
38
+ it 'returns the param structure' do
39
+ expect(subject.find_param_structure).to eq("description"=>"string", "name"=>"string", "users"=>"struct")
40
40
  end
41
41
 
42
42
  it 'same as ancestor' do
@@ -75,18 +75,18 @@ describe WashoutBuilder::Document::ComplexType do
75
75
 
76
76
  describe '#complex_type_descendants' do
77
77
  it 'returns empty array if not struct?' do
78
- defined = []
78
+ classes_defined = []
79
79
  subject.stubs(:struct?).returns(false)
80
- expect(subject.complex_type_descendants(soap_config, defined)).to eq(defined)
80
+ expect(subject.complex_type_descendants(soap_config, classes_defined)).to eq(classes_defined)
81
81
  end
82
82
 
83
83
  it 'returns the descendants if struct?' do
84
- defined = []
84
+ classes_defined = []
85
85
  subject.map.each do |obj|
86
- obj.expects(:get_nested_complex_types).with(soap_config, defined).returns([obj.name])
86
+ obj.expects(:get_nested_complex_types).with(soap_config, classes_defined).returns([obj.name])
87
87
  end
88
88
  subject.stubs(:struct?).returns(true)
89
- expect(subject.complex_type_descendants(soap_config, defined)).to eq(subject.map.map(&:name))
89
+ expect(subject.complex_type_descendants(soap_config, classes_defined)).to eq(subject.map.map(&:name))
90
90
  end
91
91
  end
92
92
 
@@ -97,21 +97,20 @@ describe WashoutBuilder::Document::ComplexType do
97
97
  let(:expected) { [complex_type_hash] }
98
98
 
99
99
  it 'returns the complex class ancestors' do
100
- defined = []
101
- subject.expects(:find_complex_class_name).with(defined).returns(complex_class)
102
- subject.expects(:fix_descendant_wash_out_type).with(soap_config, complex_class).returns(true)
103
- subject.expects(:complex_type_ancestors).with(soap_config, complex_class, defined).returns(ancestors)
100
+ classes_defined = []
101
+ subject.expects(:find_complex_class_name).with(classes_defined).returns(complex_class)
102
+ subject.expects(:find_class_from_string).with(complex_class).returns(nil)
103
+ subject.expects(:complex_type_ancestors).with(soap_config, complex_class, classes_defined).returns(ancestors)
104
104
  subject.expects(:complex_type_hash).with(complex_class, subject, ancestors).returns(complex_type_hash)
105
105
  subject.expects(:complex_type_descendants).with(soap_config, [complex_type_hash]).returns(expected)
106
- expect(subject.get_nested_complex_types(soap_config, defined)).to eq(expected)
106
+ expect(subject.get_nested_complex_types(soap_config, classes_defined)).to eq(expected)
107
107
  end
108
108
 
109
109
  it 'returns the the descendants' do
110
- defined = nil
110
+ classes_defined = nil
111
111
  subject.expects(:find_complex_class_name).with([]).returns(nil)
112
- subject.expects(:fix_descendant_wash_out_type).with(soap_config, nil).returns(true)
113
112
  subject.expects(:complex_type_descendants).with(soap_config, []).returns(expected)
114
- expect(subject.get_nested_complex_types(soap_config, defined)).to eq(expected)
113
+ expect(subject.get_nested_complex_types(soap_config, classes_defined)).to eq(expected)
115
114
  end
116
115
  end
117
116
 
@@ -135,7 +134,7 @@ describe WashoutBuilder::Document::ComplexType do
135
134
 
136
135
  describe '#get_class_ancestors' do
137
136
  let(:class_name) { 'ProjectType' }
138
- let(:defined) { [] }
137
+ let(:classes_defined) { [] }
139
138
  let(:ancestors) { ['SomeInexistentClass'] }
140
139
  let(:ancestor_structure) { { ancestors[0].to_s.downcase => 'bla' } }
141
140
  let(:top_ancestors) {}
@@ -143,7 +142,7 @@ describe WashoutBuilder::Document::ComplexType do
143
142
 
144
143
  it 'returns nil if no ancestors' do
145
144
  subject.expects(:get_ancestors).with(class_name).returns(nil)
146
- expect(subject.get_class_ancestors(soap_config, class_name, defined)).to eq(nil)
145
+ expect(subject.get_class_ancestors(soap_config, class_name, classes_defined)).to eq(nil)
147
146
  end
148
147
 
149
148
  it 'returns the ancestors and the top ones' do
@@ -153,15 +152,16 @@ describe WashoutBuilder::Document::ComplexType do
153
152
  WashOut::Param.stubs(:parse_def).returns([namespaced_object])
154
153
  subject.expects(:same_structure_as_ancestor?).with(namespaced_object).returns(false)
155
154
  subject.expects(:complex_type_hash).returns(complex_type_hash)
156
- expect(subject.get_class_ancestors(soap_config, class_name, defined)).to eq([complex_type_hash])
155
+ expect(subject.get_class_ancestors(soap_config, class_name, classes_defined)).to eq([complex_type_hash])
157
156
  end
158
157
 
159
158
  it 'returns nil if same structure as ancestor' do
159
+ namespaced_object
160
160
  subject.expects(:get_ancestors).with(class_name).returns(ancestors)
161
161
  subject.expects(:ancestor_structure).with(ancestors).returns(ancestor_structure)
162
- WashOut::Param.stubs(:parse_def).returns([namespaced_object])
162
+ WashOut::Param.stubs(:parse_def).with(soap_config, ancestor_structure).returns([namespaced_object])
163
163
  subject.expects(:same_structure_as_ancestor?).with(namespaced_object).returns(true)
164
- expect(subject.get_class_ancestors(soap_config, class_name, defined)).to eq(nil)
164
+ expect(subject.get_class_ancestors(soap_config, class_name, classes_defined)).to eq(nil)
165
165
  end
166
166
  end
167
167
  end
data/spec/spec_helper.rb CHANGED
@@ -102,7 +102,7 @@ def get_wash_out_param(class_or_struct, soap_config = OpenStruct.new(
102
102
  camelize_wsdl: false,
103
103
  namespace: '/api/wsdl'
104
104
  ))
105
- WashOut::Param.parse_builder_def(soap_config, class_or_struct)[0]
105
+ WashOut::Param.parse_def(soap_config, class_or_struct)[0]
106
106
  end
107
107
 
108
108
  class Hash
@@ -154,3 +154,28 @@ unless defined?(silence_stream) # Rails 5
154
154
  old_stream.close
155
155
  end
156
156
  end
157
+
158
+ # TODO: remove this when wasabi will update their code
159
+ require 'uri'
160
+ if !defined?(::URI.unescape)
161
+ ::URI.class_eval do
162
+ # this was removed in this commit
163
+ # https://github.com/ruby/uri/commit/61c6a47ebf1f2726b60a2bbd70964d64e14b1f98
164
+ # so we are adding it back because we need to be compatible with wasabi on ruby 3.0.0
165
+ module UriEscapeBackport
166
+
167
+ def escape(*arg)
168
+ ::URI::DEFAULT_PARSER.escape(*arg)
169
+ end
170
+
171
+ alias encode escape
172
+
173
+ def unescape(*arg)
174
+ ::URI::DEFAULT_PARSER.unescape(*arg)
175
+ end
176
+
177
+ alias decode unescape
178
+ end
179
+ extend UriEscapeBackport
180
+ end
181
+ end
@@ -2,9 +2,8 @@ module Api
2
2
  class TestType < WashOut::Type
3
3
  map project: {
4
4
  name: :string,
5
- description: :string,
5
+ title: :string,
6
6
  users: [{ mail: :string }],
7
- # 'dada' => [Project]
8
7
  }
9
8
  end
10
9
  end
@@ -21,4 +21,23 @@ Gem::Specification.new do |s|
21
21
 
22
22
  s.add_runtime_dependency 'wash_out', '>= 0.9.1', '>= 0.9.1'
23
23
  s.add_runtime_dependency 'activesupport', '>= 4.0', '>= 4.0'
24
+
25
+ # wasabi >= 3.6.0 does not work well with savon
26
+ s.add_development_dependency 'wasabi', '< 3.6.0'
27
+ s.add_development_dependency 'savon', '~> 2.11', '>= 2.11'
28
+ s.add_development_dependency 'httpi', '~> 2.4', '>= 2.4'
29
+ s.add_development_dependency 'nokogiri', '~> 1.7', '>= 1.7'
30
+
31
+ s.add_development_dependency 'rspec-rails','4.0.2'
32
+ s.add_development_dependency 'appraisal', '~> 2.1', '>= 2.1'
33
+ s.add_development_dependency 'simplecov', '~> 0.12', '>= 0.12'
34
+ s.add_development_dependency 'simplecov-summary', '~> 0.0.5', '>= 0.0.5'
35
+ s.add_development_dependency 'mocha','~> 1.2', '>= 1.2'
36
+ s.add_development_dependency 'coveralls','~> 0.8', '>= 0.8'
37
+
38
+ s.add_development_dependency "yard", '~> 0.9', '>= 0.9.20'
39
+ s.add_development_dependency 'yard-rspec', '~> 0.1', '>= 0.1'
40
+ s.add_development_dependency 'redcarpet', '~> 3.4', '>= 3.4'
41
+ s.add_development_dependency 'github-markup', '~> 1.4', '>= 1.4'
42
+ s.add_development_dependency 'inch', '~> 0.7'
24
43
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: washout_builder
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.7.5
4
+ version: 2.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - bogdanRada
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-02-29 00:00:00.000000000 Z
11
+ date: 2021-02-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: wash_out
@@ -38,6 +38,288 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '4.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: wasabi
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "<"
46
+ - !ruby/object:Gem::Version
47
+ version: 3.6.0
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "<"
53
+ - !ruby/object:Gem::Version
54
+ version: 3.6.0
55
+ - !ruby/object:Gem::Dependency
56
+ name: savon
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '2.11'
62
+ - - ">="
63
+ - !ruby/object:Gem::Version
64
+ version: '2.11'
65
+ type: :development
66
+ prerelease: false
67
+ version_requirements: !ruby/object:Gem::Requirement
68
+ requirements:
69
+ - - "~>"
70
+ - !ruby/object:Gem::Version
71
+ version: '2.11'
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: '2.11'
75
+ - !ruby/object:Gem::Dependency
76
+ name: httpi
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - "~>"
80
+ - !ruby/object:Gem::Version
81
+ version: '2.4'
82
+ - - ">="
83
+ - !ruby/object:Gem::Version
84
+ version: '2.4'
85
+ type: :development
86
+ prerelease: false
87
+ version_requirements: !ruby/object:Gem::Requirement
88
+ requirements:
89
+ - - "~>"
90
+ - !ruby/object:Gem::Version
91
+ version: '2.4'
92
+ - - ">="
93
+ - !ruby/object:Gem::Version
94
+ version: '2.4'
95
+ - !ruby/object:Gem::Dependency
96
+ name: nokogiri
97
+ requirement: !ruby/object:Gem::Requirement
98
+ requirements:
99
+ - - "~>"
100
+ - !ruby/object:Gem::Version
101
+ version: '1.7'
102
+ - - ">="
103
+ - !ruby/object:Gem::Version
104
+ version: '1.7'
105
+ type: :development
106
+ prerelease: false
107
+ version_requirements: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - "~>"
110
+ - !ruby/object:Gem::Version
111
+ version: '1.7'
112
+ - - ">="
113
+ - !ruby/object:Gem::Version
114
+ version: '1.7'
115
+ - !ruby/object:Gem::Dependency
116
+ name: rspec-rails
117
+ requirement: !ruby/object:Gem::Requirement
118
+ requirements:
119
+ - - '='
120
+ - !ruby/object:Gem::Version
121
+ version: 4.0.2
122
+ type: :development
123
+ prerelease: false
124
+ version_requirements: !ruby/object:Gem::Requirement
125
+ requirements:
126
+ - - '='
127
+ - !ruby/object:Gem::Version
128
+ version: 4.0.2
129
+ - !ruby/object:Gem::Dependency
130
+ name: appraisal
131
+ requirement: !ruby/object:Gem::Requirement
132
+ requirements:
133
+ - - "~>"
134
+ - !ruby/object:Gem::Version
135
+ version: '2.1'
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '2.1'
139
+ type: :development
140
+ prerelease: false
141
+ version_requirements: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - "~>"
144
+ - !ruby/object:Gem::Version
145
+ version: '2.1'
146
+ - - ">="
147
+ - !ruby/object:Gem::Version
148
+ version: '2.1'
149
+ - !ruby/object:Gem::Dependency
150
+ name: simplecov
151
+ requirement: !ruby/object:Gem::Requirement
152
+ requirements:
153
+ - - "~>"
154
+ - !ruby/object:Gem::Version
155
+ version: '0.12'
156
+ - - ">="
157
+ - !ruby/object:Gem::Version
158
+ version: '0.12'
159
+ type: :development
160
+ prerelease: false
161
+ version_requirements: !ruby/object:Gem::Requirement
162
+ requirements:
163
+ - - "~>"
164
+ - !ruby/object:Gem::Version
165
+ version: '0.12'
166
+ - - ">="
167
+ - !ruby/object:Gem::Version
168
+ version: '0.12'
169
+ - !ruby/object:Gem::Dependency
170
+ name: simplecov-summary
171
+ requirement: !ruby/object:Gem::Requirement
172
+ requirements:
173
+ - - "~>"
174
+ - !ruby/object:Gem::Version
175
+ version: 0.0.5
176
+ - - ">="
177
+ - !ruby/object:Gem::Version
178
+ version: 0.0.5
179
+ type: :development
180
+ prerelease: false
181
+ version_requirements: !ruby/object:Gem::Requirement
182
+ requirements:
183
+ - - "~>"
184
+ - !ruby/object:Gem::Version
185
+ version: 0.0.5
186
+ - - ">="
187
+ - !ruby/object:Gem::Version
188
+ version: 0.0.5
189
+ - !ruby/object:Gem::Dependency
190
+ name: mocha
191
+ requirement: !ruby/object:Gem::Requirement
192
+ requirements:
193
+ - - "~>"
194
+ - !ruby/object:Gem::Version
195
+ version: '1.2'
196
+ - - ">="
197
+ - !ruby/object:Gem::Version
198
+ version: '1.2'
199
+ type: :development
200
+ prerelease: false
201
+ version_requirements: !ruby/object:Gem::Requirement
202
+ requirements:
203
+ - - "~>"
204
+ - !ruby/object:Gem::Version
205
+ version: '1.2'
206
+ - - ">="
207
+ - !ruby/object:Gem::Version
208
+ version: '1.2'
209
+ - !ruby/object:Gem::Dependency
210
+ name: coveralls
211
+ requirement: !ruby/object:Gem::Requirement
212
+ requirements:
213
+ - - "~>"
214
+ - !ruby/object:Gem::Version
215
+ version: '0.8'
216
+ - - ">="
217
+ - !ruby/object:Gem::Version
218
+ version: '0.8'
219
+ type: :development
220
+ prerelease: false
221
+ version_requirements: !ruby/object:Gem::Requirement
222
+ requirements:
223
+ - - "~>"
224
+ - !ruby/object:Gem::Version
225
+ version: '0.8'
226
+ - - ">="
227
+ - !ruby/object:Gem::Version
228
+ version: '0.8'
229
+ - !ruby/object:Gem::Dependency
230
+ name: yard
231
+ requirement: !ruby/object:Gem::Requirement
232
+ requirements:
233
+ - - "~>"
234
+ - !ruby/object:Gem::Version
235
+ version: '0.9'
236
+ - - ">="
237
+ - !ruby/object:Gem::Version
238
+ version: 0.9.20
239
+ type: :development
240
+ prerelease: false
241
+ version_requirements: !ruby/object:Gem::Requirement
242
+ requirements:
243
+ - - "~>"
244
+ - !ruby/object:Gem::Version
245
+ version: '0.9'
246
+ - - ">="
247
+ - !ruby/object:Gem::Version
248
+ version: 0.9.20
249
+ - !ruby/object:Gem::Dependency
250
+ name: yard-rspec
251
+ requirement: !ruby/object:Gem::Requirement
252
+ requirements:
253
+ - - "~>"
254
+ - !ruby/object:Gem::Version
255
+ version: '0.1'
256
+ - - ">="
257
+ - !ruby/object:Gem::Version
258
+ version: '0.1'
259
+ type: :development
260
+ prerelease: false
261
+ version_requirements: !ruby/object:Gem::Requirement
262
+ requirements:
263
+ - - "~>"
264
+ - !ruby/object:Gem::Version
265
+ version: '0.1'
266
+ - - ">="
267
+ - !ruby/object:Gem::Version
268
+ version: '0.1'
269
+ - !ruby/object:Gem::Dependency
270
+ name: redcarpet
271
+ requirement: !ruby/object:Gem::Requirement
272
+ requirements:
273
+ - - "~>"
274
+ - !ruby/object:Gem::Version
275
+ version: '3.4'
276
+ - - ">="
277
+ - !ruby/object:Gem::Version
278
+ version: '3.4'
279
+ type: :development
280
+ prerelease: false
281
+ version_requirements: !ruby/object:Gem::Requirement
282
+ requirements:
283
+ - - "~>"
284
+ - !ruby/object:Gem::Version
285
+ version: '3.4'
286
+ - - ">="
287
+ - !ruby/object:Gem::Version
288
+ version: '3.4'
289
+ - !ruby/object:Gem::Dependency
290
+ name: github-markup
291
+ requirement: !ruby/object:Gem::Requirement
292
+ requirements:
293
+ - - "~>"
294
+ - !ruby/object:Gem::Version
295
+ version: '1.4'
296
+ - - ">="
297
+ - !ruby/object:Gem::Version
298
+ version: '1.4'
299
+ type: :development
300
+ prerelease: false
301
+ version_requirements: !ruby/object:Gem::Requirement
302
+ requirements:
303
+ - - "~>"
304
+ - !ruby/object:Gem::Version
305
+ version: '1.4'
306
+ - - ">="
307
+ - !ruby/object:Gem::Version
308
+ version: '1.4'
309
+ - !ruby/object:Gem::Dependency
310
+ name: inch
311
+ requirement: !ruby/object:Gem::Requirement
312
+ requirements:
313
+ - - "~>"
314
+ - !ruby/object:Gem::Version
315
+ version: '0.7'
316
+ type: :development
317
+ prerelease: false
318
+ version_requirements: !ruby/object:Gem::Requirement
319
+ requirements:
320
+ - - "~>"
321
+ - !ruby/object:Gem::Version
322
+ version: '0.7'
41
323
  description: 'WashOut Soap Service HTML-Documentation generator (extends WashOut https://github.com/inossidabile/wash_out/) '
42
324
  email: raoul_ice@yahoo.com
43
325
  executables: []
@@ -62,6 +344,7 @@ files:
62
344
  - app/helpers/washout_builder_method_arguments_helper.rb
63
345
  - app/helpers/washout_builder_method_list_helper.rb
64
346
  - app/helpers/washout_builder_method_return_type_helper.rb
347
+ - app/helpers/washout_builder_shared_helper.rb
65
348
  - app/views/wash_with_html/_complex_type.builder
66
349
  - app/views/wash_with_html/_fault_type.builder
67
350
  - app/views/wash_with_html/_public_method.builder
@@ -82,6 +365,7 @@ files:
82
365
  - gemfiles/rails_5.2.4.gemfile
83
366
  - gemfiles/rails_6.0.0.gemfile
84
367
  - gemfiles/rails_6.0.1.gemfile
368
+ - gemfiles/rails_6.1.3.gemfile
85
369
  - gemfiles/rails_api_4.2.7.gemfile
86
370
  - init.rb
87
371
  - install-travis-bundler.sh
@@ -92,7 +376,6 @@ files:
92
376
  - lib/washout_builder/document/shared_complex_type.rb
93
377
  - lib/washout_builder/engine.rb
94
378
  - lib/washout_builder/env_checker.rb
95
- - lib/washout_builder/param.rb
96
379
  - lib/washout_builder/router.rb
97
380
  - lib/washout_builder/soap.rb
98
381
  - lib/washout_builder/type.rb
@@ -158,7 +441,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
158
441
  - !ruby/object:Gem::Version
159
442
  version: '0'
160
443
  requirements: []
161
- rubygems_version: 3.1.2
444
+ rubygems_version: 3.2.3
162
445
  signing_key:
163
446
  specification_version: 4
164
447
  summary: WashOut Soap Service HTML-Documentation generator (extends WashOut https://github.com/inossidabile/wash_out/)
@@ -1,50 +0,0 @@
1
- module WashoutBuilder
2
- # module that extends the base WashoutParam to allow parsing of definitions for building documentation
3
- module Param
4
- extend ActiveSupport::Concern
5
-
6
- # Method that receives the arguments for a soap action (input or output) and tries to parse the definition (@see WashOutParam#parse_def)
7
- #
8
- # the following lines was removed from original method because when generating the documentation
9
- # the "source_class" attrtibute of the object was not the name of the class of the complex tyoe
10
- # but instead was the name given in the hash
11
- #
12
- # if definition.is_a?(Class) && definition.ancestors.include?(WashOut::Type)
13
- # definition = definition.wash_out_param_map
14
- # end
15
- #
16
- # @example Given the class ProjectType as a "definition" argument, the complex type name should be ProjectType and not "project"
17
- # class ProjectType < WashOut::Type
18
- # map :project => {
19
- # :name => :string,
20
- # :description => :string,
21
- # :users => [{:mail => :string }],
22
- # }
23
- # end
24
- #
25
- #
26
- # @see WashoutBuilder::SOAP#soap_action
27
- # @see WashOutParam#initialize
28
- #
29
- # @param [WasOut::SoapConfig] soap_config Holds the soap configuration for the entire web service
30
- # @param [Object] definition Any type of object ( this is passed from the soap action)
31
- #
32
- # @return [Type] description of returned object
33
- def parse_builder_def(soap_config, definition)
34
- raise '[] should not be used in your params. Use nil if you want to mark empty set.' if definition == []
35
- return [] if definition.blank?
36
-
37
- definition = { value: definition } unless definition.is_a?(Hash) # for arrays and symbols
38
-
39
- definition.map do |name, opt|
40
- if opt.is_a? self
41
- opt
42
- elsif opt.is_a? Array
43
- new(soap_config, name, opt[0], true)
44
- else
45
- new(soap_config, name, opt)
46
- end
47
- end
48
- end
49
- end
50
- end