peto 0.2.5 → 0.2.6
Sign up to get free protection for your applications and to get access to all the features.
- 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
|