peto 0.2.6 → 0.2.7
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/README.rdoc +3 -4
- data/VERSION +1 -1
- data/lib/peto/generator.rb +34 -6
- data/lib/peto/master.rb +14 -3
- data/lib/templates/as_classes.erb +14 -14
- data/lib/templates/as_procedures.erb +12 -20
- metadata +3 -13
- data/examples/rails_app/contracts/generated/aho.rb +0 -27
- data/examples/rails_app/contracts/generated/animal.rb +0 -39
- data/examples/rails_app/contracts/generated/foo.rb +0 -93
- data/examples/rails_app/contracts/generated/iasdaho.rb +0 -27
- data/examples/rails_app/contracts/generated/user.rb +0 -53
data/README.rdoc
CHANGED
@@ -14,8 +14,8 @@ Contract file is simple YAML format.
|
|
14
14
|
errors: [human not found, invalid id]
|
15
15
|
|
16
16
|
peto generates some codes.
|
17
|
-
* human.rb : human's structure class
|
18
|
-
* foo.rb : procedure class. this has find_human, find_human_response, find_human_error_human_not_found, find_human_error_invalid_id
|
17
|
+
* human.rb(or human.as) : human's structure class
|
18
|
+
* foo.rb(or foo.as) : procedure class. this has find_human, find_human_response, find_human_error_human_not_found, find_human_error_invalid_id
|
19
19
|
|
20
20
|
Use Foo class methods to create hash and send it as JSON string for RPC.
|
21
21
|
|
@@ -41,8 +41,7 @@ contract file (foo.yml):
|
|
41
41
|
args: [user:user]
|
42
42
|
|
43
43
|
invoke command:
|
44
|
-
%
|
45
|
-
% peto foo.yml -o generated/
|
44
|
+
% peto foo.yml rb -o generated/
|
46
45
|
|
47
46
|
use foo.rb:
|
48
47
|
$: << "generated/"
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.2.
|
1
|
+
0.2.7
|
data/lib/peto/generator.rb
CHANGED
@@ -8,7 +8,7 @@ class String
|
|
8
8
|
def to_method_name
|
9
9
|
underscore.split(" ").join("_")
|
10
10
|
end
|
11
|
-
def
|
11
|
+
def to_rb_class_type
|
12
12
|
case self
|
13
13
|
when "integer"
|
14
14
|
"Fixnum"
|
@@ -16,6 +16,25 @@ class String
|
|
16
16
|
classify
|
17
17
|
end
|
18
18
|
end
|
19
|
+
def to_as_class_type
|
20
|
+
case self
|
21
|
+
when "integer"
|
22
|
+
"int"
|
23
|
+
when "Number"
|
24
|
+
"int"
|
25
|
+
when "Boolean"
|
26
|
+
"Boolean"
|
27
|
+
when "string"
|
28
|
+
"String"
|
29
|
+
when "array"
|
30
|
+
"Array"
|
31
|
+
else
|
32
|
+
self.capitalize
|
33
|
+
end
|
34
|
+
end
|
35
|
+
def to_class_type(language)
|
36
|
+
send(:"to_#{language}_class_type")
|
37
|
+
end
|
19
38
|
end
|
20
39
|
|
21
40
|
def rb_primitive_types
|
@@ -24,11 +43,20 @@ end
|
|
24
43
|
def as_primitive_types
|
25
44
|
["int", "String", "Number", "uint", "Boolean"]
|
26
45
|
end
|
46
|
+
def as_default_value(type)
|
47
|
+
case type
|
48
|
+
when "int"
|
49
|
+
"0"
|
50
|
+
else
|
51
|
+
"null"
|
52
|
+
end
|
53
|
+
end
|
27
54
|
|
28
55
|
module Peto
|
29
56
|
class Generator
|
30
|
-
def initialize(contract)
|
57
|
+
def initialize(contract, language)
|
31
58
|
@contract = contract
|
59
|
+
@language = language
|
32
60
|
end
|
33
61
|
attr_reader :contract
|
34
62
|
|
@@ -44,7 +72,7 @@ module Peto
|
|
44
72
|
end
|
45
73
|
|
46
74
|
def class_name
|
47
|
-
@contract["name"].to_class_type
|
75
|
+
@contract["name"].to_class_type(@language)
|
48
76
|
end
|
49
77
|
|
50
78
|
def args(string_args)
|
@@ -58,14 +86,14 @@ module Peto
|
|
58
86
|
array_type = options.delete(:array_type)
|
59
87
|
{
|
60
88
|
:name => name,
|
61
|
-
:type => type.to_class_type,
|
62
|
-
:array_type => array_type.nil? ? nil : array_type.to_class_type,
|
89
|
+
:type => type.to_class_type(@language),
|
90
|
+
:array_type => array_type.nil? ? nil : array_type.to_class_type(@language),
|
63
91
|
}
|
64
92
|
end
|
65
93
|
|
66
94
|
def each_types
|
67
95
|
@contract["types"].each do |name, args|
|
68
|
-
yield name.to_class_type, args(args)
|
96
|
+
yield name.to_class_type(@language), args(args)
|
69
97
|
end
|
70
98
|
end
|
71
99
|
|
data/lib/peto/master.rb
CHANGED
@@ -19,14 +19,25 @@ module Peto
|
|
19
19
|
|
20
20
|
def parse(language)
|
21
21
|
(@contract["types"]||{}).inject({}) {|result, type|
|
22
|
-
result.merge!(Generator.new(@contract).generate_class(TEMPLATE_DIR + "/#{language}_classes.erb", type))
|
23
|
-
}.merge!(Generator.new(@contract).generate_procedure(TEMPLATE_DIR + "/#{language}_procedures.erb"))
|
22
|
+
result.merge!(Generator.new(@contract, language).generate_class(TEMPLATE_DIR + "/#{language}_classes.erb", type))
|
23
|
+
}.merge!(Generator.new(@contract, language).generate_procedure(TEMPLATE_DIR + "/#{language}_procedures.erb"))
|
24
|
+
end
|
25
|
+
|
26
|
+
def class_filename(name, language)
|
27
|
+
case language
|
28
|
+
when "rb"
|
29
|
+
"#{name}.#{language}"
|
30
|
+
when "as"
|
31
|
+
"peto/#{name.capitalize}.#{language}"
|
32
|
+
else
|
33
|
+
raise "invalid language #{language.inspect}"
|
34
|
+
end
|
24
35
|
end
|
25
36
|
|
26
37
|
def generate(language, output_dir=nil)
|
27
38
|
raise "language is nil" if language.nil?
|
28
39
|
parse(language).each do |name, content|
|
29
|
-
filepath = File.join(output_dir||File::dirname(@filename), language,
|
40
|
+
filepath = File.join(output_dir||File::dirname(@filename), language, class_filename(name, language))
|
30
41
|
write(filepath, content)
|
31
42
|
end
|
32
43
|
end
|
@@ -1,16 +1,16 @@
|
|
1
1
|
<%- name = @target[:name].camelize -%>
|
2
2
|
<%- args = @target[:args] -%>
|
3
|
-
import peto.*;
|
4
|
-
|
5
3
|
package peto
|
6
4
|
{
|
7
|
-
|
5
|
+
import peto.*;
|
6
|
+
|
7
|
+
public class <%= name %>
|
8
8
|
{
|
9
|
-
public static function create(hash_args):<%=name%>
|
9
|
+
public static function create(hash_args:Object):<%=name%>
|
10
10
|
{
|
11
11
|
var instance:<%= name %> = new <%= name %>;
|
12
12
|
<%- args.each do |arg| -%>
|
13
|
-
<%- if
|
13
|
+
<%- if as_primitive_types.include?(arg[:type]) -%>
|
14
14
|
instance.<%=arg[:name]%> = hash_args.<%= arg[:name]%>;
|
15
15
|
<%- elsif arg[:array_type] -%>
|
16
16
|
for each ( var arg:Object in hash_args.<%= arg[:name]%>)
|
@@ -22,7 +22,7 @@ package peto
|
|
22
22
|
return instance;
|
23
23
|
}
|
24
24
|
|
25
|
-
public function <%=name%>(<%= args.map{|arg| "#{arg[:name]}:#{arg[:type]}"}.join(",") %>)
|
25
|
+
public function <%=name%>(<%= args.map{|arg| "#{arg[:name]}:#{arg[:type]}=#{as_default_value(arg[:type])}"}.join(",") %>)
|
26
26
|
{
|
27
27
|
<%- args.each do |arg| -%>
|
28
28
|
this.<%= arg[:name] %> = <%= arg[:name] %>;
|
@@ -30,14 +30,14 @@ package peto
|
|
30
30
|
}
|
31
31
|
|
32
32
|
<%- args.each do |arg| -%>
|
33
|
-
private var <%= arg[:name] %>:<%= arg[:type] %>;
|
33
|
+
private var m_<%= arg[:name] %>:<%= arg[:type] %>;
|
34
34
|
public function get <%= arg[:name] %>():<%= arg[:type] %>
|
35
35
|
{
|
36
|
-
return <%= arg[:name] %>;
|
36
|
+
return m_<%= arg[:name] %>;
|
37
37
|
}
|
38
|
-
public function set <%= arg[:name] %>(value:<%= arg[:type] %>)
|
38
|
+
public function set <%= arg[:name] %>(value:<%= arg[:type] %>):void
|
39
39
|
{
|
40
|
-
<%= arg[:name] %> = value;
|
40
|
+
m_<%= arg[:name] %> = value;
|
41
41
|
}
|
42
42
|
<%- end -%>
|
43
43
|
|
@@ -45,13 +45,13 @@ package peto
|
|
45
45
|
{
|
46
46
|
var hash:Object = new Object;
|
47
47
|
<%- args.each do |arg| -%>
|
48
|
-
<%- if
|
49
|
-
|
48
|
+
<%- if as_primitive_types.include?(arg[:type]) -%>
|
49
|
+
hash["<%= arg[:name]%>"] = <%=arg[:name]%>;
|
50
50
|
<%- elsif arg[:array_type] -%>
|
51
51
|
for each ( var arg:<%= arg[:array_type]%> in <%= arg[:name]%>)
|
52
|
-
|
52
|
+
hash["<%= arg[:name]%>"] = <%=arg[:name]%>.toHash();
|
53
53
|
<%- else -%>
|
54
|
-
|
54
|
+
hash["<%= arg[:name]%>"] = <%=arg[:name]%>.toHash();
|
55
55
|
<%- end -%>
|
56
56
|
<%- end -%>
|
57
57
|
return hash;
|
@@ -6,12 +6,11 @@
|
|
6
6
|
args.map{|arg| "#{arg[:name]}:#{arg[:type]}"}.join(",")
|
7
7
|
end
|
8
8
|
-%>
|
9
|
-
|
10
|
-
import peto.*;
|
11
|
-
|
12
9
|
package peto
|
13
10
|
{
|
14
|
-
|
11
|
+
import peto.*;
|
12
|
+
|
13
|
+
public class <%= class_name %>
|
15
14
|
{
|
16
15
|
<%- each_procedures do |name, args| -%>
|
17
16
|
// <%=name%> methods
|
@@ -21,9 +20,11 @@ package peto
|
|
21
20
|
return {
|
22
21
|
procedure : "<%=name%>",
|
23
22
|
args : {
|
24
|
-
|
25
|
-
|
26
|
-
|
23
|
+
<%= args.map {|arg|
|
24
|
+
as_primitive_types.include?(arg[:type]) ?
|
25
|
+
"#{arg[:name]} : #{arg[:name]}" :
|
26
|
+
"#{arg[:name]} : #{arg[:name]}.toHash()"
|
27
|
+
}.join(",")%>
|
27
28
|
}
|
28
29
|
}
|
29
30
|
}
|
@@ -32,24 +33,15 @@ package peto
|
|
32
33
|
{
|
33
34
|
var args:Array = new Array();
|
34
35
|
<%- args.each do |arg| -%>
|
36
|
+
<%- if as_primitive_types.include?(arg[:type])-%>
|
37
|
+
args.push(hash_args.<%=arg[:name]%>);
|
38
|
+
<%- else -%>
|
35
39
|
args.push(<%=arg[:type]%>.create(hash_args.<%=arg[:name]%>));
|
36
40
|
<%- end -%>
|
41
|
+
<%- end -%>
|
37
42
|
return args;
|
38
43
|
}
|
39
44
|
|
40
45
|
<%- end -%>
|
41
|
-
|
42
|
-
public static function hashize(var:Object):Object
|
43
|
-
{
|
44
|
-
if ( isPrimitiveType(typeof(var)) )
|
45
|
-
return var;
|
46
|
-
else
|
47
|
-
return var.toHash();
|
48
|
-
}
|
49
|
-
|
50
|
-
public static function isPrimitiveType(type):Boolean
|
51
|
-
{
|
52
|
-
[<%=as_primitive_types.join(",")%>].indexOf?(type) != -1;
|
53
|
-
}
|
54
46
|
}
|
55
47
|
}
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 2
|
8
|
-
-
|
9
|
-
version: 0.2.
|
8
|
+
- 7
|
9
|
+
version: 0.2.7
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Toshiyuki Hirooka
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-11-
|
17
|
+
date: 2010-11-04 00:00:00 +09:00
|
18
18
|
default_executable: peto
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -111,14 +111,9 @@ files:
|
|
111
111
|
- examples/rails_app/test/unit/helpers/foo_helper_test.rb
|
112
112
|
- examples/rails_app/test/test_helper.rb
|
113
113
|
- examples/rails_app/test/functional/foo_controller_test.rb
|
114
|
-
- examples/rails_app/contracts/generated/animal.rb
|
115
|
-
- examples/rails_app/contracts/generated/aho.rb
|
116
|
-
- examples/rails_app/contracts/generated/user.rb
|
117
114
|
- examples/rails_app/contracts/generated/rb/animal.rb
|
118
115
|
- examples/rails_app/contracts/generated/rb/user.rb
|
119
116
|
- examples/rails_app/contracts/generated/rb/foo.rb
|
120
|
-
- examples/rails_app/contracts/generated/foo.rb
|
121
|
-
- examples/rails_app/contracts/generated/iasdaho.rb
|
122
117
|
has_rdoc: true
|
123
118
|
homepage: http://github.com/tosik/peto
|
124
119
|
licenses: []
|
@@ -176,11 +171,6 @@ test_files:
|
|
176
171
|
- examples/rails_app/test/unit/helpers/foo_helper_test.rb
|
177
172
|
- examples/rails_app/test/test_helper.rb
|
178
173
|
- examples/rails_app/test/functional/foo_controller_test.rb
|
179
|
-
- examples/rails_app/contracts/generated/animal.rb
|
180
|
-
- examples/rails_app/contracts/generated/aho.rb
|
181
|
-
- examples/rails_app/contracts/generated/user.rb
|
182
174
|
- examples/rails_app/contracts/generated/rb/animal.rb
|
183
175
|
- examples/rails_app/contracts/generated/rb/user.rb
|
184
176
|
- examples/rails_app/contracts/generated/rb/foo.rb
|
185
|
-
- examples/rails_app/contracts/generated/foo.rb
|
186
|
-
- examples/rails_app/contracts/generated/iasdaho.rb
|
@@ -1,27 +0,0 @@
|
|
1
|
-
require "peto/mixin/peto_class"
|
2
|
-
|
3
|
-
module Peto
|
4
|
-
class Aho
|
5
|
-
include PetoClass
|
6
|
-
def initialize(args={})
|
7
|
-
@name = nil
|
8
|
-
|
9
|
-
set_by_hash(args)
|
10
|
-
raise_errors unless valid?
|
11
|
-
end
|
12
|
-
|
13
|
-
attr_reader :name
|
14
|
-
|
15
|
-
def members
|
16
|
-
[:name]
|
17
|
-
end
|
18
|
-
|
19
|
-
def types
|
20
|
-
{:name => String}
|
21
|
-
end
|
22
|
-
|
23
|
-
def arrays
|
24
|
-
{}
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
@@ -1,39 +0,0 @@
|
|
1
|
-
require "peto/mixin/peto_class"
|
2
|
-
|
3
|
-
module Peto
|
4
|
-
class Animal
|
5
|
-
include PetoClass
|
6
|
-
|
7
|
-
def self.create(hash_args)
|
8
|
-
instance = new
|
9
|
-
instance.name = hash_args["name"]
|
10
|
-
return instance
|
11
|
-
end
|
12
|
-
|
13
|
-
def initialize(args={})
|
14
|
-
@name = nil
|
15
|
-
|
16
|
-
set_args(args)
|
17
|
-
raise_errors unless valid?
|
18
|
-
end
|
19
|
-
|
20
|
-
attr_reader :name
|
21
|
-
|
22
|
-
def name=(value)
|
23
|
-
@name = value
|
24
|
-
raise_errors unless valid?
|
25
|
-
end
|
26
|
-
|
27
|
-
def members
|
28
|
-
[:name]
|
29
|
-
end
|
30
|
-
|
31
|
-
def types
|
32
|
-
{:name => String}
|
33
|
-
end
|
34
|
-
|
35
|
-
def arrays
|
36
|
-
{}
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
@@ -1,93 +0,0 @@
|
|
1
|
-
require "peto/mixin/peto_errorable"
|
2
|
-
|
3
|
-
|
4
|
-
module Peto
|
5
|
-
class Foo
|
6
|
-
extend PetoErrorable
|
7
|
-
|
8
|
-
# set_user methods
|
9
|
-
|
10
|
-
def self.set_user(user)
|
11
|
-
set_user_valid?(user)
|
12
|
-
return {
|
13
|
-
:procedure => "set_user",
|
14
|
-
:args => {
|
15
|
-
:user => hashize(user),
|
16
|
-
}
|
17
|
-
}
|
18
|
-
end
|
19
|
-
|
20
|
-
def self.set_user_valid?(user)
|
21
|
-
invalid_type("user", User, user) unless user.class == User
|
22
|
-
raise_errors unless errors.empty?
|
23
|
-
end
|
24
|
-
|
25
|
-
def self.set_user_hash_to_args(hash_args)
|
26
|
-
args = []
|
27
|
-
args.push(User.create(hash_args["user"]))
|
28
|
-
return args
|
29
|
-
end
|
30
|
-
|
31
|
-
|
32
|
-
# set_user_response methods
|
33
|
-
|
34
|
-
def self.set_user_response(a,b)
|
35
|
-
set_user_response_valid?(a,b)
|
36
|
-
return {
|
37
|
-
:procedure => "set_user_response",
|
38
|
-
:args => {
|
39
|
-
:a => hashize(a),
|
40
|
-
:b => hashize(b),
|
41
|
-
}
|
42
|
-
}
|
43
|
-
end
|
44
|
-
|
45
|
-
def self.set_user_response_valid?(a,b)
|
46
|
-
invalid_type("a", Fixnum, a) unless a.class == Fixnum
|
47
|
-
invalid_type("b", String, b) unless b.class == String
|
48
|
-
raise_errors unless errors.empty?
|
49
|
-
end
|
50
|
-
|
51
|
-
def self.set_user_response_hash_to_args(hash_args)
|
52
|
-
args = []
|
53
|
-
args.push(Fixnum.create(hash_args["a"]))
|
54
|
-
args.push(String.create(hash_args["b"]))
|
55
|
-
return args
|
56
|
-
end
|
57
|
-
|
58
|
-
|
59
|
-
# set_user_error_invalid_user methods
|
60
|
-
|
61
|
-
def self.set_user_error_invalid_user(message)
|
62
|
-
set_user_error_invalid_user_valid?(message)
|
63
|
-
return {
|
64
|
-
:procedure => "set_user_error_invalid_user",
|
65
|
-
:args => {
|
66
|
-
:message => hashize(message),
|
67
|
-
}
|
68
|
-
}
|
69
|
-
end
|
70
|
-
|
71
|
-
def self.set_user_error_invalid_user_valid?(message)
|
72
|
-
invalid_type("message", String, message) unless message.class == String
|
73
|
-
raise_errors unless errors.empty?
|
74
|
-
end
|
75
|
-
|
76
|
-
def self.set_user_error_invalid_user_hash_to_args(hash_args)
|
77
|
-
args = []
|
78
|
-
args.push(String.create(hash_args["message"]))
|
79
|
-
return args
|
80
|
-
end
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
def self.hashize(var)
|
85
|
-
return var if atomic_type?(var.class)
|
86
|
-
var.to_hash
|
87
|
-
end
|
88
|
-
|
89
|
-
def self.atomic_type?(type)
|
90
|
-
[Fixnum,String].include?(type)
|
91
|
-
end
|
92
|
-
end
|
93
|
-
end
|
@@ -1,27 +0,0 @@
|
|
1
|
-
require "peto/mixin/peto_class"
|
2
|
-
|
3
|
-
module Peto
|
4
|
-
class Iasdaho
|
5
|
-
include PetoClass
|
6
|
-
def initialize(args={})
|
7
|
-
@name = nil
|
8
|
-
|
9
|
-
set_by_hash(args)
|
10
|
-
raise_errors unless valid?
|
11
|
-
end
|
12
|
-
|
13
|
-
attr_reader :name
|
14
|
-
|
15
|
-
def members
|
16
|
-
[:name]
|
17
|
-
end
|
18
|
-
|
19
|
-
def types
|
20
|
-
{:name => String}
|
21
|
-
end
|
22
|
-
|
23
|
-
def arrays
|
24
|
-
{}
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
@@ -1,53 +0,0 @@
|
|
1
|
-
require "peto/mixin/peto_class"
|
2
|
-
|
3
|
-
module Peto
|
4
|
-
class User
|
5
|
-
include PetoClass
|
6
|
-
|
7
|
-
def self.create(hash_args)
|
8
|
-
instance = new
|
9
|
-
instance.name = hash_args["name"]
|
10
|
-
instance.age = hash_args["age"]
|
11
|
-
instance.animals = hash_args["animals"].map {|arg| Animal.create(arg) }
|
12
|
-
return instance
|
13
|
-
end
|
14
|
-
|
15
|
-
def initialize(args={})
|
16
|
-
@name = nil
|
17
|
-
@age = nil
|
18
|
-
@animals = [] # for Animal
|
19
|
-
|
20
|
-
set_args(args)
|
21
|
-
raise_errors unless valid?
|
22
|
-
end
|
23
|
-
|
24
|
-
attr_reader :name
|
25
|
-
attr_reader :age
|
26
|
-
attr_reader :animals
|
27
|
-
|
28
|
-
def name=(value)
|
29
|
-
@name = value
|
30
|
-
raise_errors unless valid?
|
31
|
-
end
|
32
|
-
def age=(value)
|
33
|
-
@age = value
|
34
|
-
raise_errors unless valid?
|
35
|
-
end
|
36
|
-
def animals=(value)
|
37
|
-
@animals = value
|
38
|
-
raise_errors unless valid?
|
39
|
-
end
|
40
|
-
|
41
|
-
def members
|
42
|
-
[:name,:age,:animals]
|
43
|
-
end
|
44
|
-
|
45
|
-
def types
|
46
|
-
{:name => String,:age => Fixnum,:animals => Array}
|
47
|
-
end
|
48
|
-
|
49
|
-
def arrays
|
50
|
-
{:animals => Animal}
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|