rbind 0.0.5 → 0.0.6

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.
@@ -34,15 +34,30 @@ module Rbind
34
34
  normalize_type_name(parameter.default_value)
35
35
  end
36
36
  else
37
- if(parameter.default_value =~ /(\w*)\((.*)\)/)
37
+ if(parameter.default_value =~ /([\w:]*) *\((.*)\)/)
38
38
  t = parameter.owner.owner.type($1,false)
39
- if t
40
- "#{normalize_type_name(t.full_name)}.new(#{$2})"
41
- else
42
- ns = RBase.namespace($1)
43
- t = parameter.owner.owner.type(ns,false) if ns
44
- ops = Array(t.operation($1,false)) if t
45
- "#{normalize_method_name(ops.first.full_name)}(#{$2})" if ops && !ops.empy?
39
+ ops = Array(parameter.owner.owner.operation($1,false)) if !t
40
+ t,ops = if t || !ops.empty?
41
+ [t,ops]
42
+ else
43
+ ns = RBase.namespace($1)
44
+ name = RBase.basename($1)
45
+ if ns && name
46
+ t = parameter.owner.owner.type(ns,false)
47
+ ops = Array(t.operation(name,false)) if t
48
+ [t,ops]
49
+ else
50
+ [nil,nil]
51
+ end
52
+ end
53
+ if ops && !ops.empty?
54
+ if t
55
+ "#{normalize_type_name(t.full_name)}::#{normalize_method_name(ops.first.name)}(#{($2)})"
56
+ else
57
+ "#{normalize_method_name(ops.first.name)}(#{($2)})"
58
+ end
59
+ elsif t
60
+ "#{normalize_type_name(t.full_name)}.new(#{($2)})"
46
61
  end
47
62
  else
48
63
  parameter.default_value
@@ -84,21 +99,25 @@ module Rbind
84
99
  end
85
100
  end
86
101
 
87
- def self.normalize_method_name(name)
88
- #replaced _X with _x
89
- name = name.to_s.gsub(/\A#{RBase.cprefix}/, "").gsub(/_(?<!\A)\p{Lu}/u, '\0')
102
+ # normalize c method to meet ruby conventions
103
+ # see unit tests
104
+ def self.normalize_method_name(orig_name)
105
+ #remove cprefix and replaced _X with #X
106
+ name = orig_name.to_s.gsub(/\A#{RBase.cprefix}/, "") .gsub(/_((?<!\A)\p{Lu})/u, '#\1')
90
107
  #replaced X with _x
91
- name = name.gsub(/(?<!\A)\p{Lu}/u, '_\0').downcase
92
- str = ""
93
- name.split("_").each_with_index do |n,i|
94
- if n.size == 1 && i > 0
95
- str += n
96
- else
97
- str += "_#{n}"
98
- end
99
- end
100
- str = str[1..-1] #remove leading "_"
101
- str = if str =~/^operator(.*)/
108
+ name = name.gsub(/(?<!\A)[\p{Lu}\d]/u, '_\0').downcase
109
+ #replaced _x_ with #x#
110
+ name = name.to_s.gsub(/[_#]([a-zA-Z\d])[_#]/u, '#\1#')
111
+ #replaced _x$ with #x
112
+ name = name.to_s.gsub(/[_#]([a-zA-Z\d])$/u, '#\1')
113
+ #replaced ## with _
114
+ name = name.gsub(/##/, '_')
115
+ #replace #xx with _xx
116
+ name = name.gsub(/#([a-zA-Z\d]{2})/, '_\1')
117
+ #remove all remaining #
118
+ name = name.gsub(/#/, '')
119
+ #replace operatorX with the correct ruby operator
120
+ name = if name =~/^operator(.*)/
102
121
  n = $1
103
122
  if n =~ /\(\)/
104
123
  raise "forbbiden method name #{name}"
@@ -120,8 +139,10 @@ module Rbind
120
139
  n
121
140
  end
122
141
  else
123
- str
142
+ name
124
143
  end
144
+ raise "generated empty name for #{orig_name}" if name.empty?
145
+ name
125
146
  end
126
147
 
127
148
  class HelperBase
@@ -4,7 +4,10 @@ PROJECT(<%= library_name %> CXX)
4
4
  include(FindPkgConfig)
5
5
  <%= find_packages %>
6
6
 
7
- SET(RBIND_SRC types.cc operations.cc conversions.cc)
7
+ SET(RBIND_SRC
8
+ "${CMAKE_CURRENT_SOURCE_DIR}/types.cc"
9
+ "${CMAKE_CURRENT_SOURCE_DIR}/operations.cc"
10
+ "${CMAKE_CURRENT_SOURCE_DIR}/conversions.cc")
8
11
  ADD_LIBRARY(<%= library_name %> SHARED ${RBIND_SRC})
9
12
 
10
13
  TARGET_LINK_LIBRARIES(<%= library_name %> <%= libs %>)
data/rbind.gemspec CHANGED
@@ -1,7 +1,7 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'rbind'
3
- s.version = '0.0.5'
4
- s.date = '2013-06-20'
3
+ s.version = '0.0.6'
4
+ s.date = '2013-06-22'
5
5
  s.platform = Gem::Platform::RUBY
6
6
  s.authors = ['Alexander Duda']
7
7
  s.email = ['Alexander.Duda@dfki.de']
@@ -0,0 +1,79 @@
1
+ require 'minitest/spec'
2
+ require 'rbind'
3
+
4
+ MiniTest::Unit.autorun
5
+ describe Rbind::GeneratorRuby do
6
+ before do
7
+ end
8
+
9
+ after do
10
+ end
11
+
12
+ describe "normalize_method_name" do
13
+ it "must remove the cprefix" do
14
+ result = Rbind::GeneratorRuby.normalize_method_name("rbind__test123")
15
+ assert_equal("_test123",result)
16
+ end
17
+
18
+ it "must change upper case letters to lower case and add a _ if there is none" do
19
+ result = Rbind::GeneratorRuby.normalize_method_name("rbind_Cv")
20
+ assert_equal("cv",result)
21
+ result = Rbind::GeneratorRuby.normalize_method_name("rbind_cv")
22
+ assert_equal("cv",result)
23
+ result = Rbind::GeneratorRuby.normalize_method_name("rbind_cv_FeatureDetector")
24
+ assert_equal("cv_feature_detector",result)
25
+ result = Rbind::GeneratorRuby.normalize_method_name("rbind_cv_FeatureDetector__create")
26
+ assert_equal("cv_feature_detector__create",result)
27
+ end
28
+
29
+ it "must preserve __ in a method name" do
30
+ result = Rbind::GeneratorRuby.normalize_method_name("rbind_cv_FeatureDetector__create")
31
+ assert_equal("cv_feature_detector__create",result)
32
+ end
33
+
34
+ it "must regard upper case letters in a sequence as block " do
35
+ result = Rbind::GeneratorRuby.normalize_method_name("rbind_CV_TEST")
36
+ assert_equal("cv_test",result)
37
+ result = Rbind::GeneratorRuby.normalize_method_name("rbind_CV_TEST_get_Test")
38
+ assert_equal("cv_test_get_test",result)
39
+ result = Rbind::GeneratorRuby.normalize_method_name("rbind_cv_RNG")
40
+ assert_equal("cv_rng",result)
41
+ result = Rbind::GeneratorRuby.normalize_method_name("rbind_cv_RNG_gaussian")
42
+ assert_equal("cv_rng_gaussian",result)
43
+ result = Rbind::GeneratorRuby.normalize_method_name("rbind_cv_KDTree")
44
+ assert_equal("cv_kd_tree",result)
45
+ result = Rbind::GeneratorRuby.normalize_method_name("rbind_cv_RNG2")
46
+ assert_equal("cv_rng2",result)
47
+ end
48
+
49
+ it "must regard upper case letters in a sequence as block " do
50
+ result = Rbind::GeneratorRuby.normalize_method_name("rbind_CV_TEST")
51
+ assert_equal("cv_test",result)
52
+ end
53
+ end
54
+
55
+ describe "normalize_default_value" do
56
+ it "must remove f from float values" do
57
+ p = Rbind::RParameter.new("p1",Rbind::RDataType.new("float"),"1.0f")
58
+ result = Rbind::GeneratorRuby.normalize_default_value(p)
59
+ assert_equal("1.0",result)
60
+ end
61
+
62
+ it "must add zero to double values if missing" do
63
+ p = Rbind::RParameter.new("p1",Rbind::RDataType.new("double"),"1.")
64
+ result = Rbind::GeneratorRuby.normalize_default_value(p)
65
+ assert_equal("1.0",result)
66
+ end
67
+
68
+ it "must add zero to double values if missing" do
69
+ p = Rbind::RParameter.new("p1",Rbind::RDataType.new("double"),"1.")
70
+ result = Rbind::GeneratorRuby.normalize_default_value(p)
71
+ assert_equal("1.0",result)
72
+ end
73
+ end
74
+ end
75
+ #assert(@service.names.include?("Local/dummy"))
76
+ #assert_equal(@task,@service.get("dummy"))
77
+ #assert_raises(Orocos::NotFound) do
78
+ # @service.get("foo")
79
+ #end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rbind
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-06-20 00:00:00.000000000 Z
12
+ date: 2013-06-22 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: ''
15
15
  email:
@@ -64,6 +64,7 @@ files:
64
64
  - lib/rbind/templates/ruby/rtype_constructor.rb
65
65
  - lib/rbind/tools/hdr_parser.py
66
66
  - rbind.gemspec
67
+ - test/test_generator_ruby.rb
67
68
  homepage: http://github.com/
68
69
  licenses: []
69
70
  post_install_message: