aboutsummaryrefslogtreecommitdiffstats
path: root/actionwebservice/lib/action_web_service/struct.rb
diff options
context:
space:
mode:
Diffstat (limited to 'actionwebservice/lib/action_web_service/struct.rb')
-rw-r--r--actionwebservice/lib/action_web_service/struct.rb15
1 files changed, 14 insertions, 1 deletions
diff --git a/actionwebservice/lib/action_web_service/struct.rb b/actionwebservice/lib/action_web_service/struct.rb
index d4e2ba9ce6..c5e6346bfa 100644
--- a/actionwebservice/lib/action_web_service/struct.rb
+++ b/actionwebservice/lib/action_web_service/struct.rb
@@ -33,11 +33,20 @@ module ActionWebService
send(name.to_s)
end
+ # Iterates through each member
+ def each_pair(&block)
+ self.class.members.each do |name, type|
+ yield name, type
+ end
+ end
+
class << self
# Creates a structure member with the specified +name+ and +type+. Generates
# accessor methods for reading and writing the member value.
def member(name, type)
- write_inheritable_hash("struct_members", name => WS::BaseTypes.canonical_param_type_class(type))
+ name = name.to_sym
+ type = ActionWebService::SignatureTypes.canonical_signature_entry({ name => type }, 0)
+ write_inheritable_hash("struct_members", name => type)
class_eval <<-END
def #{name}; @#{name}; end
def #{name}=(value); @#{name} = value; end
@@ -47,6 +56,10 @@ module ActionWebService
def members # :nodoc:
read_inheritable_attribute("struct_members") || {}
end
+
+ def member_type(name) # :nodoc:
+ members[name.to_sym]
+ end
end
end
end