peto 0.2.5 → 0.2.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/README.rdoc +29 -8
- data/VERSION +1 -1
- data/bin/peto +4 -3
- data/examples/rails_app/config/application.rb +0 -1
- data/examples/rails_app/config/environment.rb +0 -4
- data/examples/rails_app/contracts/generated/rb/animal.rb +39 -0
- data/examples/rails_app/contracts/generated/rb/foo.rb +93 -0
- data/examples/rails_app/contracts/generated/rb/user.rb +53 -0
- data/lib/peto/generator.rb +4 -1
- data/lib/peto/master.rb +10 -7
- data/lib/peto/rake_task.rb +14 -8
- data/lib/templates/as_classes.erb +60 -0
- data/lib/templates/as_procedures.erb +55 -0
- data/lib/templates/rb_classes.erb +1 -1
- data/lib/templates/rb_procedures.erb +3 -3
- data/test/test_peto.rb +3 -3
- metadata +10 -2
data/README.rdoc
CHANGED
@@ -1,5 +1,29 @@
|
|
1
1
|
= peto
|
2
2
|
|
3
|
+
peto is a RPC code generator.
|
4
|
+
Defining types and procedures on RPC from contract files.
|
5
|
+
Contract file is simple YAML format.
|
6
|
+
|
7
|
+
name: foo
|
8
|
+
types:
|
9
|
+
human: [name:string, age:integer]
|
10
|
+
procedures:
|
11
|
+
find_human:
|
12
|
+
args: [id:integer]
|
13
|
+
returns: [found:human]
|
14
|
+
errors: [human not found, invalid id]
|
15
|
+
|
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
|
19
|
+
|
20
|
+
Use Foo class methods to create hash and send it as JSON string for RPC.
|
21
|
+
|
22
|
+
|
23
|
+
peto has a Rails helper module.
|
24
|
+
Look examples/rails_app and use it, if you want to create Rails RPC server.
|
25
|
+
|
26
|
+
|
3
27
|
== Usage
|
4
28
|
|
5
29
|
installing:
|
@@ -31,13 +55,7 @@ use foo.rb:
|
|
31
55
|
user = Peto::User.new(:name => "alice", :age => 23, :animals=>[cat, dog])
|
32
56
|
|
33
57
|
# generating procedure hash
|
34
|
-
|
35
|
-
:args=>{ :user=>{ :name=>"alice",
|
36
|
-
:age=>23,
|
37
|
-
:animals=>[
|
38
|
-
Peto::Animal({:name=>"cat"}),
|
39
|
-
Peto::Animal({:name=>"dog"})
|
40
|
-
]}}}
|
58
|
+
Peto::Foo.set_user(user)
|
41
59
|
|
42
60
|
== in Rails
|
43
61
|
|
@@ -96,7 +114,7 @@ run server
|
|
96
114
|
|
97
115
|
% rails server
|
98
116
|
|
99
|
-
post next
|
117
|
+
post next JSON to http://server/foo/
|
100
118
|
{
|
101
119
|
"procedure" : "set_user",
|
102
120
|
"args" : {
|
@@ -106,6 +124,9 @@ post next json to http://server/foo/
|
|
106
124
|
}
|
107
125
|
}
|
108
126
|
|
127
|
+
this JSON string is created by
|
128
|
+
ActiveSupport::JSON.encode(Peto::Foo.set_user(user))
|
129
|
+
|
109
130
|
|
110
131
|
== Note on Patches/Pull Requests
|
111
132
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.2.
|
1
|
+
0.2.6
|
data/bin/peto
CHANGED
@@ -12,10 +12,11 @@ OptionParser.new do |opt|
|
|
12
12
|
opt.on("-o output directory") {|value| options[:output] = value }
|
13
13
|
opt.parse!(ARGV)
|
14
14
|
end
|
15
|
-
input = ARGV.
|
15
|
+
input = ARGV.shift
|
16
|
+
language = ARGV.shift
|
16
17
|
|
17
18
|
if input.nil?
|
18
|
-
puts "usage:\n % peto contract.yml"
|
19
|
+
puts "usage:\n % peto contract.yml rb"
|
19
20
|
exit
|
20
21
|
end
|
21
22
|
|
@@ -23,5 +24,5 @@ options[:output] = File.dirname(input) if options[:output].nil?
|
|
23
24
|
|
24
25
|
peto = Peto::Master.new
|
25
26
|
peto.load(input)
|
26
|
-
peto.generate(options[:output])
|
27
|
+
peto.generate(language, options[:output])
|
27
28
|
|
@@ -17,7 +17,6 @@ module RailsApp
|
|
17
17
|
|
18
18
|
# generated files by peto
|
19
19
|
config.autoload_paths += %W(#{config.root}/contracts/generated)
|
20
|
-
config.autoload_paths += %W(#{config.root}/../../lib)
|
21
20
|
|
22
21
|
# Only load the plugins named here, in the order given (default is alphabetical).
|
23
22
|
# :all can be used as a placeholder for all plugins not explicitly named.
|
@@ -0,0 +1,39 @@
|
|
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
|
@@ -0,0 +1,93 @@
|
|
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 primitive_type?(var.class)
|
86
|
+
var.to_hash
|
87
|
+
end
|
88
|
+
|
89
|
+
def self.primitive_type?(type)
|
90
|
+
[Fixnum,String].include?(type)
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
@@ -0,0 +1,53 @@
|
|
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
|
data/lib/peto/generator.rb
CHANGED
data/lib/peto/master.rb
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
require "pathname"
|
2
2
|
require "yaml"
|
3
|
-
require "
|
3
|
+
require "fileutils"
|
4
4
|
require "term/ansicolor"
|
5
|
+
require "peto/generator"
|
5
6
|
|
6
7
|
class String
|
7
8
|
include Term::ANSIColor
|
@@ -16,15 +17,16 @@ module Peto
|
|
16
17
|
end
|
17
18
|
attr_reader :contract
|
18
19
|
|
19
|
-
def parse
|
20
|
+
def parse(language)
|
20
21
|
(@contract["types"]||{}).inject({}) {|result, type|
|
21
|
-
result.merge!(Generator.new(@contract).generate_class(TEMPLATE_DIR + "
|
22
|
-
}.merge!(Generator.new(@contract).generate_procedure(TEMPLATE_DIR + "
|
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"))
|
23
24
|
end
|
24
25
|
|
25
|
-
def generate(output_dir=nil)
|
26
|
-
|
27
|
-
|
26
|
+
def generate(language, output_dir=nil)
|
27
|
+
raise "language is nil" if language.nil?
|
28
|
+
parse(language).each do |name, content|
|
29
|
+
filepath = File.join(output_dir||File::dirname(@filename), language, "#{name}.#{language}")
|
28
30
|
write(filepath, content)
|
29
31
|
end
|
30
32
|
end
|
@@ -38,6 +40,7 @@ module Peto
|
|
38
40
|
print " update".white.bold
|
39
41
|
end
|
40
42
|
else
|
43
|
+
FileUtils.mkdir_p(File.dirname(filepath))
|
41
44
|
print " create".green.bold
|
42
45
|
end
|
43
46
|
print " "
|
data/lib/peto/rake_task.rb
CHANGED
@@ -6,6 +6,8 @@ module Peto
|
|
6
6
|
class RakeTask < ::Rake::TaskLib
|
7
7
|
attr_accessor :contracts
|
8
8
|
attr_accessor :output_dir
|
9
|
+
attr_accessor :languages
|
10
|
+
|
9
11
|
attr_accessor :name
|
10
12
|
attr_accessor :fail_on_error
|
11
13
|
attr_accessor :failure_message
|
@@ -13,6 +15,8 @@ module Peto
|
|
13
15
|
def initialize(*args)
|
14
16
|
@contracts ||= []
|
15
17
|
@output_dir ||= "./"
|
18
|
+
@languages ||= []
|
19
|
+
|
16
20
|
@name ||= :peto
|
17
21
|
@fail_on_error ||= true
|
18
22
|
|
@@ -26,15 +30,17 @@ module Peto
|
|
26
30
|
puts "No contracts"
|
27
31
|
else
|
28
32
|
begin
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
33
|
+
languages.each do |language|
|
34
|
+
self.contracts = [contracts] if contracts.class == String
|
35
|
+
contracts.each do |contract|
|
36
|
+
peto = Peto::Master.new
|
37
|
+
peto.load(contract)
|
38
|
+
peto.generate(language, output_dir)
|
39
|
+
end
|
34
40
|
end
|
35
|
-
rescue
|
36
|
-
|
37
|
-
|
41
|
+
#rescue
|
42
|
+
# puts failure_message if failure_message
|
43
|
+
# raise "peto failed" if fail_on_error
|
38
44
|
end
|
39
45
|
end
|
40
46
|
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
<%- name = @target[:name].camelize -%>
|
2
|
+
<%- args = @target[:args] -%>
|
3
|
+
import peto.*;
|
4
|
+
|
5
|
+
package peto
|
6
|
+
{
|
7
|
+
class <%= name %>
|
8
|
+
{
|
9
|
+
public static function create(hash_args):<%=name%>
|
10
|
+
{
|
11
|
+
var instance:<%= name %> = new <%= name %>;
|
12
|
+
<%- args.each do |arg| -%>
|
13
|
+
<%- if rb_primitive_types.include?(arg[:type].constantize) -%>
|
14
|
+
instance.<%=arg[:name]%> = hash_args.<%= arg[:name]%>;
|
15
|
+
<%- elsif arg[:array_type] -%>
|
16
|
+
for each ( var arg:Object in hash_args.<%= arg[:name]%>)
|
17
|
+
instance.<%=arg[:name]%>.push(<%=arg[:array_type]%>.create(arg));
|
18
|
+
<%- else -%>
|
19
|
+
instance.<%=arg[:name]%> = <%=arg[:type]%>.create(hash_args.<%= arg[:name]%>);
|
20
|
+
<%- end -%>
|
21
|
+
<%- end -%>
|
22
|
+
return instance;
|
23
|
+
}
|
24
|
+
|
25
|
+
public function <%=name%>(<%= args.map{|arg| "#{arg[:name]}:#{arg[:type]}"}.join(",") %>)
|
26
|
+
{
|
27
|
+
<%- args.each do |arg| -%>
|
28
|
+
this.<%= arg[:name] %> = <%= arg[:name] %>;
|
29
|
+
<%- end -%>
|
30
|
+
}
|
31
|
+
|
32
|
+
<%- args.each do |arg| -%>
|
33
|
+
private var <%= arg[:name] %>:<%= arg[:type] %>;
|
34
|
+
public function get <%= arg[:name] %>():<%= arg[:type] %>
|
35
|
+
{
|
36
|
+
return <%= arg[:name] %>;
|
37
|
+
}
|
38
|
+
public function set <%= arg[:name] %>(value:<%= arg[:type] %>)
|
39
|
+
{
|
40
|
+
<%= arg[:name] %> = value;
|
41
|
+
}
|
42
|
+
<%- end -%>
|
43
|
+
|
44
|
+
public function toHash():Object
|
45
|
+
{
|
46
|
+
var hash:Object = new Object;
|
47
|
+
<%- args.each do |arg| -%>
|
48
|
+
<%- if rb_primitive_types.include?(arg[:type].constantize) -%>
|
49
|
+
hash_args["<%= arg[:name]%>"] = <%=arg[:name]%>;
|
50
|
+
<%- elsif arg[:array_type] -%>
|
51
|
+
for each ( var arg:<%= arg[:array_type]%> in <%= arg[:name]%>)
|
52
|
+
hash_args["<%= arg[:name]%>"] = <%=arg[:name]%>.toHash():
|
53
|
+
<%- else -%>
|
54
|
+
hash_args["<%= arg[:name]%>"] = <%=arg[:name]%>.toHash():
|
55
|
+
<%- end -%>
|
56
|
+
<%- end -%>
|
57
|
+
return hash;
|
58
|
+
}
|
59
|
+
}
|
60
|
+
}
|
@@ -0,0 +1,55 @@
|
|
1
|
+
<%-
|
2
|
+
def comma_args(args)
|
3
|
+
args.map{|arg| arg[:name]}.join(",")
|
4
|
+
end
|
5
|
+
def comma_args_with_type(args)
|
6
|
+
args.map{|arg| "#{arg[:name]}:#{arg[:type]}"}.join(",")
|
7
|
+
end
|
8
|
+
-%>
|
9
|
+
|
10
|
+
import peto.*;
|
11
|
+
|
12
|
+
package peto
|
13
|
+
{
|
14
|
+
class <%= class_name %>
|
15
|
+
{
|
16
|
+
<%- each_procedures do |name, args| -%>
|
17
|
+
// <%=name%> methods
|
18
|
+
|
19
|
+
public static function <%= name %>(<%= comma_args_with_type(args) %>):Object
|
20
|
+
{
|
21
|
+
return {
|
22
|
+
procedure : "<%=name%>",
|
23
|
+
args : {
|
24
|
+
<%- args.each do |arg| -%>
|
25
|
+
<%=arg[:name]%> : hashize(<%=arg[:name]%>),
|
26
|
+
<%- end -%>
|
27
|
+
}
|
28
|
+
}
|
29
|
+
}
|
30
|
+
|
31
|
+
public static function <%= name %>_hash_to_args(hash_args:Object):Array
|
32
|
+
{
|
33
|
+
var args:Array = new Array();
|
34
|
+
<%- args.each do |arg| -%>
|
35
|
+
args.push(<%=arg[:type]%>.create(hash_args.<%=arg[:name]%>));
|
36
|
+
<%- end -%>
|
37
|
+
return args;
|
38
|
+
}
|
39
|
+
|
40
|
+
<%- 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
|
+
}
|
55
|
+
}
|
@@ -9,7 +9,7 @@ module Peto
|
|
9
9
|
def self.create(hash_args)
|
10
10
|
instance = new
|
11
11
|
<%- args.each do |arg| -%>
|
12
|
-
<%- if
|
12
|
+
<%- if rb_primitive_types.include?(arg[:type].constantize) -%>
|
13
13
|
instance.<%=arg[:name]%> = hash_args["<%= arg[:name]%>"]
|
14
14
|
<%- elsif arg[:array_type] -%>
|
15
15
|
instance.<%=arg[:name]%> = hash_args["<%= arg[:name]%>"].map {|arg| <%=arg[:array_type]%>.create(arg) }
|
@@ -44,12 +44,12 @@ module Peto
|
|
44
44
|
<%- end -%>
|
45
45
|
|
46
46
|
def self.hashize(var)
|
47
|
-
return var if
|
47
|
+
return var if primitive_type?(var.class)
|
48
48
|
var.to_hash
|
49
49
|
end
|
50
50
|
|
51
|
-
def self.
|
52
|
-
[<%=
|
51
|
+
def self.primitive_type?(type)
|
52
|
+
[<%=rb_primitive_types.join(",")%>].include?(type)
|
53
53
|
end
|
54
54
|
end
|
55
55
|
end
|
data/test/test_peto.rb
CHANGED
@@ -25,8 +25,8 @@ class TestPeto < Test::Unit::TestCase
|
|
25
25
|
@peto.load("test/contracts/generating.yml")
|
26
26
|
end
|
27
27
|
should "returns string by loaded contract" do
|
28
|
-
assert_equal Hash, @peto.parse.class
|
29
|
-
@peto.parse.each do |name, content|
|
28
|
+
assert_equal Hash, @peto.parse(:rb).class
|
29
|
+
@peto.parse(:rb).each do |name, content|
|
30
30
|
assert_equal String, name.class
|
31
31
|
assert_equal String, content.class
|
32
32
|
end
|
@@ -38,7 +38,7 @@ class TestPeto < Test::Unit::TestCase
|
|
38
38
|
setup do
|
39
39
|
@peto = Peto::Master.new
|
40
40
|
@peto.load("test/contracts/generating.yml")
|
41
|
-
@generated = @peto.parse
|
41
|
+
@generated = @peto.parse(:rb)
|
42
42
|
end
|
43
43
|
should "be readable as ruby" do
|
44
44
|
@generated.each do |filepath, content|
|
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
|
+
- 6
|
9
|
+
version: 0.2.6
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Toshiyuki Hirooka
|
@@ -81,6 +81,8 @@ files:
|
|
81
81
|
- lib/peto/rails/rails_controller_helper.rb
|
82
82
|
- lib/peto/rails/rails_controller_test_helper.rb
|
83
83
|
- lib/peto/rake_task.rb
|
84
|
+
- lib/templates/as_classes.erb
|
85
|
+
- lib/templates/as_procedures.erb
|
84
86
|
- lib/templates/rb_classes.erb
|
85
87
|
- lib/templates/rb_procedures.erb
|
86
88
|
- test/contracts/generating.yml
|
@@ -112,6 +114,9 @@ files:
|
|
112
114
|
- examples/rails_app/contracts/generated/animal.rb
|
113
115
|
- examples/rails_app/contracts/generated/aho.rb
|
114
116
|
- examples/rails_app/contracts/generated/user.rb
|
117
|
+
- examples/rails_app/contracts/generated/rb/animal.rb
|
118
|
+
- examples/rails_app/contracts/generated/rb/user.rb
|
119
|
+
- examples/rails_app/contracts/generated/rb/foo.rb
|
115
120
|
- examples/rails_app/contracts/generated/foo.rb
|
116
121
|
- examples/rails_app/contracts/generated/iasdaho.rb
|
117
122
|
has_rdoc: true
|
@@ -174,5 +179,8 @@ test_files:
|
|
174
179
|
- examples/rails_app/contracts/generated/animal.rb
|
175
180
|
- examples/rails_app/contracts/generated/aho.rb
|
176
181
|
- examples/rails_app/contracts/generated/user.rb
|
182
|
+
- examples/rails_app/contracts/generated/rb/animal.rb
|
183
|
+
- examples/rails_app/contracts/generated/rb/user.rb
|
184
|
+
- examples/rails_app/contracts/generated/rb/foo.rb
|
177
185
|
- examples/rails_app/contracts/generated/foo.rb
|
178
186
|
- examples/rails_app/contracts/generated/iasdaho.rb
|