nwrfc 0.0.3 → 0.0.4

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.
@@ -84,6 +84,11 @@ so that ["system2"] at the end points to whatever label you gave it in the YAML
84
84
 
85
85
  == Release Notes
86
86
 
87
+ === What's new in 0.0.4
88
+
89
+ * Add parameter activation/deactivation functionality
90
+ * Fix/add metadata retrieval for DataContainer
91
+
87
92
  === What's new in 0.0.3
88
93
 
89
94
  * Basic RFC server functionality
data/Rakefile CHANGED
@@ -4,5 +4,5 @@ require 'rake/clean'
4
4
  require 'rake/testtask'
5
5
 
6
6
  Rake::TestTask.new do |t|
7
- t.test_files = FileList['test/**/*.rb']
7
+ t.test_files = FileList['test/**/test*.rb']
8
8
  end
@@ -286,6 +286,31 @@ module NWRFC
286
286
  #@todo Handle function exceptions by checking for :RFC_ABAP_EXCEPTION (5)
287
287
  NWRFC.check_error(@error) if rc > 0
288
288
  end
289
+
290
+ # Returns whether or not a given parameter is active, i.e. whether it will be sent to the server during the RFC
291
+ # call with FunctionCall#invoke. This is helpful for functions that set default values on parameters or otherwise
292
+ # check whether parameters are passed in cases where this may have an impact on performance or otherwise
293
+ # @param[String, Symbol] parameter Name of the parameter
294
+ def active?(parameter)
295
+ is_active = FFI::MemoryPointer.new :int
296
+ rc = NWRFCLib.is_parameter_active(@handle, parameter.to_s.cU, is_active, @error)
297
+ NWRFC.check_error(@error) if rc > 0
298
+ is_active.read_int == 1
299
+ end
300
+
301
+ # Set a named parameter to active or inactive
302
+ def set_active(parameter, active=true)
303
+ (active ? active_flag = 1 : active_flag = 0)
304
+ rc = NWRFCLib.set_parameter_active(@handle, parameter.to_s.cU, active_flag, @error)
305
+ NWRFC.check_error(@error) if rc > 0
306
+ active
307
+ end
308
+
309
+ # Set a named parameter to inactive
310
+ def deactivate(parameter)
311
+ set_active(parameter, false)
312
+ end
313
+
289
314
  end
290
315
 
291
316
 
@@ -356,24 +381,7 @@ module NWRFC
356
381
  # access of a structure or a function
357
382
  class Structure < DataContainer
358
383
 
359
- # Return a list (array) of symbols representing the names of the fields
360
- # of this structure
361
- #---
362
- # FIXME: This is not working!
363
- def fields
364
- fc = FFI::MemoryPointer.new(:uint)
365
- rc = NWRFCLib.get_field_count(@handle, fc, @error)
366
- NWRFC.check_error(@error) if rc > 0
367
- fc = fc.read_uint
368
- fd = NWRFCLib::RFCFieldDesc.new
369
- fields = []
370
- debugger
371
- fc.times do |index|
372
- rc = NWRFCLib.get_field_desc_by_index(@handle, index, fd.to_ptr, @error.to_ptr)
373
- NWRFC.check_error(@error) if rc > 0
374
- fields << fd[:name].get_str.to_sym
375
- end
376
- end
384
+
377
385
 
378
386
  end # class Structure
379
387
 
@@ -253,6 +253,25 @@ module NWRFC
253
253
  value
254
254
  end
255
255
 
256
+ # Return a list (array) of symbols representing the names of the fields (or parameters, in the case of a function)
257
+ # of this data container
258
+ def fields
259
+ fc = FFI::MemoryPointer.new(:uint)
260
+ rc = NWRFCLib.get_field_count(@desc, fc, @error)
261
+ NWRFC.check_error(@error) if rc > 0
262
+ fc = fc.read_uint
263
+ fd = NWRFCLib::RFCFieldDesc.new
264
+ # Make a list of field names
265
+ fc.times.inject([]) {|array, index|
266
+ rc = NWRFCLib.get_field_desc_by_index(@desc, index, fd.to_ptr, @error.to_ptr)
267
+ NWRFC.check_error(@error) if rc > 0
268
+ #@todo WARNING! our get_str method did not handle getting the name of the RESPTEXT parameter in STFC_DEEP_TABLE correctly
269
+ # As a workaround, we use our read_string_dn method; do we need to use this elsewhere?
270
+ #array << fd[:name].get_str.to_sym #<-The code with good intentions
271
+ array << fd[:name].to_ptr.read_string_dn.uC.to_sym #<- Workaround; the way of the future?
272
+ }
273
+ end
274
+
256
275
  # Get the metadata of a member (function, structure or table)
257
276
  def member_metadata(member_name)
258
277
  # TODO: Cache metadata definitions; will it be quicker than making a hash of metadata for a given member each time?
@@ -270,6 +289,8 @@ module NWRFC
270
289
  end
271
290
  end
272
291
 
292
+
293
+
273
294
  private
274
295
  # Returns the subset of metadata values common to both a function parameter
275
296
  # and a type field
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nwrfc
3
3
  version: !ruby/object:Gem::Version
4
- hash: 25
4
+ hash: 23
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 3
10
- version: 0.0.3
9
+ - 4
10
+ version: 0.0.4
11
11
  platform: ruby
12
12
  authors:
13
13
  - Martin Ceronio
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2012-02-23 00:00:00 Z
18
+ date: 2012-02-28 00:00:00 Z
19
19
  dependencies: []
20
20
 
21
21
  description: SAP Netweaver RFC Library Wrapper using Ruby-FFI