talk 2.0.4 → 2.0.5
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.
- checksums.yaml +4 -4
- data/lib/languages/java/java.rb +85 -25
- data/lib/languages/java/templates/TalkProtocol.java.erb +10 -0
- data/lib/languages/java/templates/class.java.erb +2 -3
- data/lib/languages/java/templates/enumeration.java.erb +5 -5
- data/lib/languages/java/templates/glossary.java.erb +1 -1
- data/lib/languages/language.rb +29 -0
- data/lib/languages/objc/objc.rb +0 -20
- data/talk.gemspec +2 -2
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f1f1b965faec105c8139b2c31c25093ad3f7a07d
|
4
|
+
data.tar.gz: 65ad8dfa35eca34ccf71e9348760e42fb68cd639
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 09583344d986efe5ff4d06b71c54dabcbee808d27586dd623a79d5c1451ce3e4f4e967a7096286fdbc7f9df77fe47e6e718359b402509b11cadf7191a5df8831
|
7
|
+
data.tar.gz: e4501266f0041de42d2c9b4556a04a98645318b850b68d2c9cc031413d5f4fb0bc838ad1a749430d86c006c8bdafa387c81055fa1564c37dcdc273f48449ab1b
|
data/lib/languages/java/java.rb
CHANGED
@@ -9,6 +9,10 @@ def make_source
|
|
9
9
|
generate_template(filename_for_entity(@current), type.to_s+".java.erb")
|
10
10
|
end
|
11
11
|
end
|
12
|
+
@base[:protocol].each do |current|
|
13
|
+
@current = current
|
14
|
+
generate_template("com/acres4/common/protocol/#{current[:name]}.java", "TalkProtocol.java.erb")
|
15
|
+
end
|
12
16
|
end
|
13
17
|
|
14
18
|
def filename_for_entity(name)
|
@@ -43,13 +47,31 @@ def list_references_for_class(cls)
|
|
43
47
|
references = Set.new
|
44
48
|
cls[:field].each do |field|
|
45
49
|
unless is_primitive?(field[:type].first) then
|
46
|
-
references.add(field[:type])
|
50
|
+
references.add(class_named(field[:type][0], @base[:class])[:name])
|
47
51
|
end
|
48
52
|
end
|
49
53
|
|
54
|
+
references.add("java.math.BigDecimal") if class_has_bigdec(cls)
|
55
|
+
references.add("java.util.Map") if class_has_map(cls)
|
50
56
|
references.to_a
|
51
57
|
end
|
52
58
|
|
59
|
+
def class_has_bigdec(cls)
|
60
|
+
cls[:field].each do |f|
|
61
|
+
return true if f[:type][0] == "uint64"
|
62
|
+
end
|
63
|
+
|
64
|
+
false
|
65
|
+
end
|
66
|
+
|
67
|
+
def class_has_map(cls)
|
68
|
+
cls[:field].each do |f|
|
69
|
+
return true if f[:type].include? "{}"
|
70
|
+
end
|
71
|
+
|
72
|
+
false
|
73
|
+
end
|
74
|
+
|
53
75
|
def import_classes
|
54
76
|
(list_references_for_class(@current).map { |name| "import #{name};"}).join("\n")
|
55
77
|
end
|
@@ -57,7 +79,7 @@ end
|
|
57
79
|
def comment_block(tag, indent_level=0)
|
58
80
|
lines = []
|
59
81
|
indent = "\t" * indent_level
|
60
|
-
lines.push(indent + "
|
82
|
+
lines.push(indent + "/**")
|
61
83
|
lines.push(wrap_text_to_width(tag[:description], 80, indent + " * ")) unless tag[:description].nil?
|
62
84
|
lines.push(indent + " * ")
|
63
85
|
lines.push(indent + " * " + definition_reference(tag))
|
@@ -80,14 +102,31 @@ def field_datatype_rec(field, stack)
|
|
80
102
|
|
81
103
|
r = field_datatype_rec(field, stack[0 .. -2])
|
82
104
|
if is_array? t then
|
83
|
-
"[]"
|
105
|
+
"#{r}[]"
|
84
106
|
elsif is_dict? t then
|
85
|
-
"Map<String, #{r}>"
|
107
|
+
"Map<String, #{convert_field_for_map(r)}>"
|
86
108
|
else
|
87
109
|
nil
|
88
110
|
end
|
89
111
|
end
|
90
112
|
|
113
|
+
def convert_field_for_map(field)
|
114
|
+
case field
|
115
|
+
when "byte"
|
116
|
+
"Byte"
|
117
|
+
when "short"
|
118
|
+
"Short"
|
119
|
+
when "int"
|
120
|
+
"Integer"
|
121
|
+
when "long"
|
122
|
+
"Long"
|
123
|
+
when "double"
|
124
|
+
"Double"
|
125
|
+
else
|
126
|
+
field
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
91
130
|
def field_datatype_basic(field, type)
|
92
131
|
if is_primitive? type then
|
93
132
|
case type
|
@@ -100,22 +139,23 @@ def field_datatype_basic(field, type)
|
|
100
139
|
when "object"
|
101
140
|
"Object"
|
102
141
|
when "talkobject"
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
142
|
+
rootclass
|
143
|
+
when "int8"
|
144
|
+
"byte"
|
145
|
+
when "uint8"
|
146
|
+
"short"
|
147
|
+
when "int16"
|
148
|
+
"short"
|
149
|
+
when "uint16"
|
150
|
+
"int"
|
151
|
+
when "int32"
|
152
|
+
"int"
|
153
|
+
when "uint32"
|
154
|
+
"long"
|
155
|
+
when "int64"
|
156
|
+
"long"
|
157
|
+
when "uint64"
|
158
|
+
"BigDecimal"
|
119
159
|
end
|
120
160
|
else
|
121
161
|
truncated_name type
|
@@ -133,13 +173,33 @@ def field_variable(field)
|
|
133
173
|
lines.join("\n")
|
134
174
|
end
|
135
175
|
|
176
|
+
def setter_name(field)
|
177
|
+
"set#{field[:name].sub(/^(\w)/) {|s| s.capitalize}}"
|
178
|
+
end
|
179
|
+
|
180
|
+
def getter_name(field)
|
181
|
+
"get#{field[:name].sub(/^(\w)/) {|s| s.capitalize}}"
|
182
|
+
end
|
183
|
+
|
136
184
|
def field_accessors(field)
|
137
|
-
lines
|
138
|
-
lines.push
|
139
|
-
lines.push
|
140
|
-
lines.push "
|
185
|
+
lines = []
|
186
|
+
lines.push "\t/**"
|
187
|
+
lines.push "\t#{wrap_text_to_width(field[:description])}"
|
188
|
+
lines.push "\t#{field[:deprecated] if field.has_key? :deprecated}"
|
189
|
+
lines.push "\t#{definition_reference(field)}"
|
190
|
+
lines.push "\t@param #{field[:name]} #{field[:description]}"
|
191
|
+
lines.push "\t*/"
|
141
192
|
lines.push "\tpublic void #{setter_name(field)}(#{field_datatype(field)} #{field[:name]}) {"
|
142
|
-
lines.push "\t\tthis.#{field[:name]} = #{field[:name]}"
|
193
|
+
lines.push "\t\tthis.#{field[:name]} = #{field[:name]};"
|
194
|
+
lines.push "\t}"
|
195
|
+
lines.push "\t/**"
|
196
|
+
lines.push "\t#{wrap_text_to_width(field[:description])}"
|
197
|
+
lines.push "\t#{field[:deprecated] if field.has_key? :deprecated}"
|
198
|
+
lines.push "\t#{definition_reference(field)}"
|
199
|
+
lines.push "\t@return #{field[:name]} #{field[:description]}"
|
200
|
+
lines.push "\t*/"
|
201
|
+
lines.push "\tpublic #{field_datatype(field)} #{getter_name(field)}() {"
|
202
|
+
lines.push "\t\treturn this.#{field[:name]};"
|
143
203
|
lines.push "\t}"
|
144
204
|
lines.join "\n"
|
145
205
|
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
<%= autogenerated_warning %>
|
2
|
+
package com.acres4.common.protocol;
|
3
|
+
public class <%= truncated_name(@current[:name]) %> {
|
4
|
+
<% @current[:method].each do |method| %>
|
5
|
+
/**
|
6
|
+
<%= method[:description] %>
|
7
|
+
*/
|
8
|
+
public static final String <%= method[:name].sub(/^(\w)/) {|s| s.capitalize} %> = "<%= method[:name] %>";
|
9
|
+
<% end %>
|
10
|
+
}
|
@@ -5,17 +5,16 @@ package <%= class_package(@current) %>;
|
|
5
5
|
<%= comment_block(@current) %>
|
6
6
|
public class <%= truncated_name(@current) %> extends <%= superclass(@current) %>
|
7
7
|
{
|
8
|
-
<%= detail_comment_block(@current) %>
|
9
8
|
/**
|
10
9
|
* <%= truncated_name @current %> - Default Constructor
|
11
|
-
*
|
12
10
|
*/
|
13
11
|
public <%= truncated_name @current %>() {}
|
14
12
|
<%=
|
15
13
|
(@current[:field].map do |f|
|
16
14
|
field_variable(f)
|
17
15
|
end).join("\n")
|
18
|
-
|
16
|
+
%>
|
17
|
+
<%=
|
19
18
|
(@current[:field].map do |f|
|
20
19
|
field_accessors(f)
|
21
20
|
end).join("\n")
|
@@ -3,8 +3,8 @@ package <%= class_package(@current) %>;
|
|
3
3
|
|
4
4
|
<%= comment_block(@current) %>
|
5
5
|
public class <%= truncated_name(@current) %> extends <%= rootclass %>
|
6
|
-
{<% @current[:
|
7
|
-
|
8
|
-
@TalkDescription(description =
|
9
|
-
public final static int <%= field[:name] %> = <%= field[:value] %>;
|
10
|
-
|
6
|
+
{<% @current[:constant].each do |field| %>
|
7
|
+
/** <%= field[:description] %> */
|
8
|
+
@TalkDescription(description = <%= (field[:description] ? field[:description].inspect : "\"nil\"") %>)
|
9
|
+
public final static int <%= field[:name] %> = <%= field[:value].to_i %>;
|
10
|
+
<% end %>}
|
@@ -3,6 +3,6 @@ package <%= class_package(@current) %>;
|
|
3
3
|
|
4
4
|
<%= comment_block(@current) %>
|
5
5
|
public class <%= truncated_name(@current) %>
|
6
|
-
{
|
6
|
+
{<% @current[:term].each do |field| %>
|
7
7
|
public final static String <%= field[:name] %> = "<%= field[:value] %>";<% end %>
|
8
8
|
}
|
data/lib/languages/language.rb
CHANGED
@@ -13,6 +13,35 @@ def is_primitive?(type)
|
|
13
13
|
primitives.include? type
|
14
14
|
end
|
15
15
|
|
16
|
+
def rootclass
|
17
|
+
@target[:rootclass] || "TalkObject"
|
18
|
+
end
|
19
|
+
|
20
|
+
def superclass(cls)
|
21
|
+
cls[:inherits] || rootclass
|
22
|
+
end
|
23
|
+
|
24
|
+
def is_native?(type)
|
25
|
+
type != "talkobject" and is_primitive?(type)
|
26
|
+
end
|
27
|
+
|
28
|
+
def is_array?(type)
|
29
|
+
type == "[]"
|
30
|
+
end
|
31
|
+
|
32
|
+
def is_dict?(type)
|
33
|
+
type == "{}"
|
34
|
+
end
|
35
|
+
|
36
|
+
def class_named(name, classes)
|
37
|
+
name_elements = name.split(".")
|
38
|
+
classes.each do |defn|
|
39
|
+
return defn if defn[:name].end_with?(name)
|
40
|
+
end
|
41
|
+
|
42
|
+
nil
|
43
|
+
end
|
44
|
+
|
16
45
|
module Talk
|
17
46
|
class Language
|
18
47
|
attr_reader :supported_languages
|
data/lib/languages/objc/objc.rb
CHANGED
@@ -59,26 +59,6 @@ def definition_reference(tag)
|
|
59
59
|
"@talkFile #{tag[:__meta][:file]}:#{tag[:__meta][:line]}"
|
60
60
|
end
|
61
61
|
|
62
|
-
def rootclass
|
63
|
-
@target[:rootclass] || "TalkObject"
|
64
|
-
end
|
65
|
-
|
66
|
-
def superclass(cls)
|
67
|
-
cls[:inherits] || rootclass
|
68
|
-
end
|
69
|
-
|
70
|
-
def is_native?(type)
|
71
|
-
type != "talkobject" and is_primitive?(type)
|
72
|
-
end
|
73
|
-
|
74
|
-
def is_array?(type)
|
75
|
-
type == "[]"
|
76
|
-
end
|
77
|
-
|
78
|
-
def is_dict?(type)
|
79
|
-
type == "{}"
|
80
|
-
end
|
81
|
-
|
82
62
|
def mapped_name(container_name, object_name, type, name_key=:name)
|
83
63
|
object_name = object_name[:name] if object_name.is_a? Hash
|
84
64
|
container_name = container_name[:name] if container_name.is_a? Hash
|
data/talk.gemspec
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = 'talk'
|
3
3
|
s.executables << 'talk'
|
4
|
-
s.version = '2.0.
|
5
|
-
s.date = '2014-05-
|
4
|
+
s.version = '2.0.5'
|
5
|
+
s.date = '2014-05-30'
|
6
6
|
s.summary = "Compile-to-source protocol contract specification language"
|
7
7
|
s.description = "A lightweight language for specifying protocol contracts. Compiles to source in Java, Javascript, ObjC and Ruby."
|
8
8
|
s.authors = ["Jonas Acres"]
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: talk
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
4
|
+
version: 2.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jonas Acres
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-05-
|
11
|
+
date: 2014-05-30 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: A lightweight language for specifying protocol contracts. Compiles to
|
14
14
|
source in Java, Javascript, ObjC and Ruby.
|
@@ -58,6 +58,7 @@ files:
|
|
58
58
|
- lib/contexts/target.rb
|
59
59
|
- lib/contexts/term.rb
|
60
60
|
- lib/languages/java/java.rb
|
61
|
+
- lib/languages/java/templates/TalkProtocol.java.erb
|
61
62
|
- lib/languages/java/templates/class.java.erb
|
62
63
|
- lib/languages/java/templates/enumeration.java.erb
|
63
64
|
- lib/languages/java/templates/glossary.java.erb
|