shapewear 0.1.4 → 0.1.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,5 +1,10 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.1.5
4
+ * #camelize in parameters and complex types is only called if they are declared as symbols.
5
+ This allows usage of custom character casing when writing the SOAP services.
6
+ * Parameters are now camelized with first letter as lowercase.
7
+
3
8
  ## 0.1.4
4
9
  * Parameters are now read in the correct order, as specified in the metadata;
5
10
  * Complex return types are now working correctly;
@@ -24,11 +24,37 @@ module Shapewear
24
24
  end
25
25
  end
26
26
 
27
- # defines String.camelize if it is not defined by, e.g. Rails
28
- unless ''.respond_to? :camelize
29
- class String
30
- def camelize
31
- self.split('_').map(&:capitalize).join
27
+ # defines String.camelize and String.underscore, if it is not defined by, e.g. Rails
28
+ class String
29
+ unless ''.respond_to? :camelize
30
+ def camelize(first_letter_in_uppercase = true)
31
+ if first_letter_in_uppercase
32
+ self.to_s.gsub(/\/(.?)/) { "::#{$1.upcase}" }.gsub(/(?:^|_)(.)/) { $1.upcase }
33
+ else
34
+ self.to_s[0].chr.downcase + self.camelize[1..-1]
35
+ end
36
+ end
37
+ end
38
+
39
+ unless ''.respond_to? :underscore
40
+ def underscore
41
+ word = self.to_s.dup
42
+ word.gsub!(/::/, '/')
43
+ word.gsub!(/([A-Z]+)([A-Z][a-z])/, '\1_\2')
44
+ word.gsub!(/([a-z\d])([A-Z])/, '\1_\2')
45
+ word.tr!("-", "_")
46
+ word.downcase!
47
+ word
48
+ end
49
+ end
50
+ end
51
+
52
+ class Object
53
+ def camelize_if_symbol(first_letter_in_uppercase = true)
54
+ if is_a?(Symbol) then
55
+ to_s.camelize(first_letter_in_uppercase)
56
+ else
57
+ to_s
32
58
  end
33
59
  end
34
60
  end
@@ -71,8 +71,8 @@ module Shapewear::Request
71
71
  logger.debug "Operation node: #{node.inspect}"
72
72
  r = []
73
73
  op_options[:parameters].each do |p|
74
- logger.debug " Looking for: tns:#{p.first.to_s.camelize}"
75
- v = node.xpath("tns:#{p.first.to_s.camelize}", namespaces).first
74
+ logger.debug " Looking for: tns:#{p.first.camelize_if_symbol(false)}"
75
+ v = node.xpath("tns:#{p.first.camelize_if_symbol(false)}", namespaces).first
76
76
  if v.nil?
77
77
  # does nothing
78
78
  elsif p.last == Fixnum
@@ -124,14 +124,16 @@ module Shapewear::Request
124
124
  obj[field]
125
125
  elsif obj.respond_to?(field)
126
126
  obj.send(field)
127
+ elsif obj.respond_to?(field.underscore)
128
+ obj.send(field.underscore)
127
129
  else
128
130
  raise "Could not extract #{field.inspect} from object: #{obj.inspect}"
129
131
  end
130
132
 
131
133
  if v.nil?
132
- builder.tag! field.to_s.camelize, 'xsi:nil' => 'true'
134
+ builder.tag! field.camelize_if_symbol, 'xsi:nil' => 'true'
133
135
  else
134
- builder.tag! field.to_s.camelize, v
136
+ builder.tag! field.camelize_if_symbol, v
135
137
  end
136
138
  end
137
139
 
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Shapewear
4
4
 
5
- Version = "0.1.4"
5
+ Version = "0.1.5"
6
6
 
7
7
  end
@@ -92,7 +92,7 @@ module Shapewear::WSDL
92
92
  params.each do |p|
93
93
  t = p.last
94
94
  param_name = p.first
95
- param_name = param_name.to_s.camelize if param_name.is_a?(Symbol)
95
+ param_name = param_name.camelize_if_symbol(false)
96
96
  if t.nil?
97
97
  xseq.element :name => param_name, :minOccurs => 0, :maxOccurs => 1, :type => 'xsd:any'
98
98
  elsif t.is_a?(Class)
@@ -135,7 +135,7 @@ module Shapewear::WSDL
135
135
  xschema.complexType :name => "#{op_options[:public_name]}Struct" do |xctr|
136
136
  xctr.sequence do |xseqr|
137
137
  ret.each do |name, type|
138
- name = name.to_s.camelize if name.is_a?(Symbol)
138
+ name = name.camelize_if_symbol
139
139
  xseqr.element :name => name, :minOccurs => 0, :maxOccurs => 1, :type => to_xsd_type(type)
140
140
  end
141
141
  end
@@ -16,7 +16,7 @@ describe Shapewear do
16
16
  it "should work for simple requests" do
17
17
  client = Savon::Client.new 'http://services.example.com/complete/soap/wsdl'
18
18
  response = client.request :echo_in_uppercase, :xmlns => 'http://services.example.com/v1' do
19
- soap.body = { 'Text' => 'uppercase text' }
19
+ soap.body = { :text => 'uppercase text' }
20
20
  end
21
21
 
22
22
  puts response.inspect
@@ -28,7 +28,7 @@ describe Shapewear do
28
28
  it "should work for structured responses from objects" do
29
29
  client = Savon::Client.new 'http://services.example.com/complete/soap/wsdl'
30
30
  response = client.request :get_structured_data, :xmlns => 'http://services.example.com/v1' do
31
- soap.body = { 'Id' => 0 }
31
+ soap.body = { 'ID' => 0 }
32
32
  end
33
33
 
34
34
  r = response.body[:get_structured_data_response][:get_structured_data_result]
@@ -39,7 +39,7 @@ describe Shapewear do
39
39
  it "should work for structured responses from hashes" do
40
40
  client = Savon::Client.new 'http://services.example.com/complete/soap/wsdl'
41
41
  response = client.request :get_structured_data, :xmlns => 'http://services.example.com/v1' do
42
- soap.body = { 'Id' => 1 }
42
+ soap.body = { 'ID' => 1 }
43
43
  end
44
44
 
45
45
  r = response.body[:get_structured_data_response][:get_structured_data_result]
@@ -52,7 +52,7 @@ describe Shapewear do
52
52
 
53
53
  expect {
54
54
  client.request :get_structured_data, :xmlns => 'http://services.example.com/v1' do
55
- soap.body = { 'Id' => 55 }
55
+ soap.body = { 'ID' => 55 }
56
56
  end
57
57
  }.to raise_error Savon::SOAP::Fault, "(e:Server.RuntimeError) ID must be 0 or 1"
58
58
  end
@@ -63,7 +63,7 @@ describe Shapewear do
63
63
  expect {
64
64
  client.request :get_structured_data, :xmlns => 'http://services.example.com/v1' do
65
65
  soap.version = 2
66
- soap.body = { 'Id' => 55 }
66
+ soap.body = { 'ID' => 55 }
67
67
  end
68
68
  }.to raise_error Savon::SOAP::Fault, "(e:Server.RuntimeError) ID must be 0 or 1"
69
69
  end
@@ -17,8 +17,8 @@ class CompleteService
17
17
  :returns => Fixnum
18
18
 
19
19
  operation :get_structured_data, :documentation => 'Returns structured data. 0 uses a Hash, 1 uses a struct, any other value raises a fault',
20
- :parameters => [[:id, Fixnum]],
21
- :returns => {:text => String, :random_value => Fixnum, :created_at => DateTime}
20
+ :parameters => [['ID', Fixnum]],
21
+ :returns => { :text => String, :random_value => Fixnum, :created_at => DateTime, 'XYZ' => String }
22
22
 
23
23
  def echo_in_uppercase(text)
24
24
  text.upcase unless text.nil?
@@ -33,19 +33,20 @@ class CompleteService
33
33
  when 0 then
34
34
  Structured.new('text from the struct')
35
35
  when 1 then
36
- {:text => 'text from a hash', :random_value => rand(999), @created_at => DateTime.now}
36
+ { :text => 'text from a hash', :random_value => rand(999), :created_at => DateTime.now }
37
37
  else
38
38
  raise "ID must be 0 or 1"
39
39
  end
40
40
  end
41
41
 
42
42
  class Structured
43
- attr_reader :text, :random_value, :created_at
43
+ attr_reader :text, :random_value, :created_at, :xyz
44
44
 
45
45
  def initialize(text)
46
46
  @text = text
47
47
  @random_value = rand(999)
48
48
  @created_at = DateTime.now
49
+ @xyz = 'xyz'
49
50
  end
50
51
  end
51
52
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: shapewear
3
3
  version: !ruby/object:Gem::Version
4
- hash: 19
4
+ hash: 17
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 4
10
- version: 0.1.4
9
+ - 5
10
+ version: 0.1.5
11
11
  platform: ruby
12
12
  authors:
13
13
  - "F\xC3\xA1bio Batista"