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.
- data/lib/rbind/generator_ruby.rb +44 -23
- data/lib/rbind/templates/c/CMakeLists.txt +4 -1
- data/rbind.gemspec +2 -2
- data/test/test_generator_ruby.rb +79 -0
- metadata +3 -2
data/lib/rbind/generator_ruby.rb
CHANGED
@@ -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
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
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
|
-
|
88
|
-
|
89
|
-
|
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
|
-
|
93
|
-
name.
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
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
|
-
|
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
|
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
@@ -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.
|
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-
|
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:
|