goa_model_gen 0.6.1 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: fb100e41bfae1d78b4c222638a59945e42efa13af022c000d55efa3be6d71478
4
- data.tar.gz: 53d689f9969dda1338ef1d177e56f1da34d04c40e55433e8e1816f8b8fea74de
3
+ metadata.gz: 0cfb7caba6e01eee8a29002beafa8806c80c9b1acd47ac0d6d824a39b92f408b
4
+ data.tar.gz: e90a5a485bcc57521c408e3de2bc81a5d14e3fa62b2dea8695cf31efe858a2a6
5
5
  SHA512:
6
- metadata.gz: c93f6c04d0fd3f4a1b72856e19c9a8ad026c2253cd14e9632729c075d0e70277f62464d03532cf90a2bd88326d2a4f9df528c3cfce923a46d8a4bcb5d2d12882
7
- data.tar.gz: a163ecc4e61e8b03aa8de557a12c029b71a7e8253d910fe45df8c248c9caf4db457c1805a008c5d2bfa6bc870608f9833d047142aacccde45bdd6d9027fdc959
6
+ metadata.gz: cc42ddcd158483048bb69dd96b1e776dac7d11bbe4822bdfe5dc779d1c679c5d3f4feb65269a3053bce6cbf268defc560d547bc646a5c8cb217a5f67a8b97d4c
7
+ data.tar.gz: 5e606592d318569856b948d6d06f8927943e85ce6053337e18e880f47ddf1626fb8841ab7827247a4e510489fc96267be40681002cc2fc713fa6bcabb005d3d9
@@ -30,4 +30,6 @@ Gem::Specification.new do |spec|
30
30
  spec.add_development_dependency "rake", "~> 10.0"
31
31
  spec.add_development_dependency "rspec", "~> 3.0"
32
32
  spec.add_development_dependency "pry"
33
+ spec.add_development_dependency "pry-byebug"
34
+ spec.add_development_dependency "pry-stack_explorer"
33
35
  end
@@ -37,14 +37,26 @@ module GoaModelGen
37
37
  def model(*paths)
38
38
  setup
39
39
  new_generator.process({
40
- "templates/goon.go.erb" => File.join(cfg.model_dir, "goon.go"),
41
40
  'templates/validator.go.erb' => File.join(cfg.model_dir, 'validator.go'),
42
41
  })
43
42
  load_types_for(paths) do |source_file|
44
43
  new_generator.tap{|g| g.source_file = source_file }.process({
45
- 'templates/model.go.erb' => dest_path(cfg.model_dir, source_file, '.go'),
46
- 'templates/model_store.go.erb' => dest_path(cfg.model_dir, source_file, '_store.go'),
47
- 'templates/model_validation.go.erb' => dest_path(cfg.model_dir, source_file, '_validation.go'),
44
+ 'templates/model.go.erb' => File.join(cfg.model_dir, "#{source_file.basename}.go"),
45
+ 'templates/model_validation.go.erb' => File.join(cfg.model_dir, "#{source_file.basename}_validation.go"),
46
+ })
47
+ end
48
+ end
49
+
50
+ desc "store FILE1...", "Generate store files from definition files"
51
+ def store(*paths)
52
+ setup
53
+ new_generator.process({
54
+ "templates/goon.go.erb" => File.join(cfg.store_dir, "goon_store", "goon.go"),
55
+ })
56
+ load_types_for(paths) do |source_file|
57
+ new_generator.tap{|g| g.source_file = source_file }.process({
58
+ 'templates/store.go.erb' => File.join(cfg.store_dir, source_file.basename, "store.go"),
59
+ 'templates/store_validation.go.erb' => File.join(cfg.store_dir, source_file.basename, "validation.go"),
48
60
  })
49
61
  end
50
62
  end
@@ -53,12 +65,12 @@ module GoaModelGen
53
65
  def converter(*paths)
54
66
  setup
55
67
  new_generator.process({
56
- "templates/converter_base.go.erb" => File.join(cfg.controller_dir, "converter_base.go"),
68
+ "templates/converter_base.go.erb" => File.join(cfg.converter_dir, "converter_base.go"),
57
69
  })
58
70
  load_types_for(paths) do |source_file|
59
71
  next if source_file.types.all?{|t| !t.payload && !t.media_type}
60
72
  new_generator.tap{|g| g.source_file = source_file }.process({
61
- 'templates/converter.go.erb' => dest_path(cfg.controller_dir, source_file, "_conv.go"),
73
+ 'templates/converter.go.erb' => File.join(cfg.converter_dir, source_file.basename, "conv.go"),
62
74
  })
63
75
  end
64
76
  end
@@ -98,10 +110,6 @@ module GoaModelGen
98
110
  yield(source_file)
99
111
  end
100
112
  end
101
-
102
- def dest_path(dir, source_file, suffix)
103
- File.join(dir, File.basename(source_file.yaml_path, ".*") + suffix)
104
- end
105
113
  end
106
114
 
107
115
  end
@@ -14,7 +14,8 @@ module GoaModelGen
14
14
  swagger_yaml
15
15
  gofmt_disabled
16
16
  model_dir
17
- controller_dir
17
+ store_dir
18
+ converter_dir
18
19
  validator_path
19
20
  ].freeze
20
21
 
@@ -25,7 +26,8 @@ module GoaModelGen
25
26
  @swagger_yaml ||= "./swagger/swagger.yaml"
26
27
  @gofmt_disabled ||= false
27
28
  @model_dir ||= "./model"
28
- @controller_dir ||= "./controller"
29
+ @store_dir ||= "./stores"
30
+ @converter_dir ||= "./converters"
29
31
  @validator_path ||= "gopkg.in/go-playground/validator.v9"
30
32
  self
31
33
  end
@@ -101,10 +101,7 @@ module GoaModelGen
101
101
  # https://tour.golang.org/basics/11
102
102
  # https://golang.org/pkg/go/types/#pkg-variables
103
103
  SWAGGER_TYPE_TO_GOLANG_TYPE = {
104
- "string" => Hash.new("string").update(
105
- "date" => "time.Time",
106
- "date-time" => "time.Time",
107
- ),
104
+ "string" => Hash.new("string"),
108
105
  "number" => Hash.new("float32").update(
109
106
  "double" => "float64",
110
107
  ),
@@ -118,8 +115,13 @@ module GoaModelGen
118
115
  return format2type[format]
119
116
  end
120
117
 
118
+ MODEL_FUNC_NAME_FILTERS = {
119
+ "TimeTime" => "Time",
120
+ }
121
+
121
122
  def conv_func_part_for_model
122
- conv_func_part_for(type, !!(/\A\*/ =~ type))
123
+ r = conv_func_part_for(type, !!(/\A\*/ =~ type))
124
+ MODEL_FUNC_NAME_FILTERS[r] || r
123
125
  end
124
126
 
125
127
  def conv_func_part_for_payload
@@ -35,17 +35,21 @@ module GoaModelGen
35
35
  end
36
36
 
37
37
  def dependencies
38
- @dependencies ||= []
38
+ @dependencies ||= {}
39
39
  end
40
40
 
41
41
  def clear_dependencies
42
42
  @dependencies = nil
43
43
  end
44
44
 
45
- def import(*packages)
46
- packages.each do |package|
47
- dependencies.push(package) unless dependencies.include?(package)
45
+ def import(alias_or_package, package_or_nil = nil)
46
+ package = package_or_nil || alias_or_package
47
+ new_alias = package_or_nil ? alias_or_package.to_s : nil
48
+ if dependencies.key?(package)
49
+ old_alias = dependencies[package]
50
+ raise "Conflict alias #{old_alias.inspect} and #{new_alias.inspect}" if old_alias != new_alias
48
51
  end
52
+ dependencies[package] ||= new_alias
49
53
  end
50
54
 
51
55
  def user_editable(value: true)
@@ -63,6 +67,7 @@ module GoaModelGen
63
67
 
64
68
  def generate(template_path)
65
69
  clear_dependencies
70
+ user_editable(value: false)
66
71
 
67
72
  abs_path = File.expand_path('../' + template_path, __FILE__)
68
73
  erb = ERB.new(File.read(abs_path), nil, "-")
@@ -8,5 +8,9 @@ module GoaModelGen
8
8
  def initialize(yaml_path, types)
9
9
  @yaml_path, @types = yaml_path, types
10
10
  end
11
+
12
+ def basename
13
+ File.basename(yaml_path, ".*")
14
+ end
11
15
  end
12
16
  end
@@ -9,7 +9,13 @@ package <%= package %>
9
9
 
10
10
  <%- unless dependencies.empty? -%>
11
11
  import (
12
- <%= golang_helper.partition(dependencies).map{|group| group.map{|path| "\t\"#{path}\"" }.join("\n") }.join("\n\n") %>
12
+ <%=
13
+ golang_helper.partition(dependencies.keys).map do |group|
14
+ group.map do |path|
15
+ ailas_name = dependencies[path]
16
+ ailas_name ? "\t#{ailas_name} \"#{path}\"" : "\t\"#{path}\""
17
+ end.join("\n")
18
+ end.join("\n\n") %>
13
19
  )
14
20
  <%- end -%>
15
21
 
@@ -7,15 +7,16 @@ def method_calling_exp(m, argument)
7
7
  end
8
8
  end
9
9
  -%>
10
- <%- package 'controller' -%>
10
+ <%- package source_file.basename -%>
11
11
 
12
12
  <%- source_file.types.select(&:gen_converter?).each do |type| -%>
13
13
  <%- if type.payload -%>
14
14
  <%-
15
- import "#{config.go_package}/app"
15
+ import "#{config.go_package}/converters"
16
+ import :gen, "#{config.go_package}/gen/#{type.name.underscore}"
16
17
  import "#{config.go_package}/model"
17
18
  -%>
18
- func <%= type.name %>PayloadToModel(payload *app.<%= type.payload_name %>) (*model.<%= type.name %>, error) {
19
+ func <%= type.name %>PayloadToModel(payload *gen.<%= type.payload_name %>) (*model.<%= type.name %>, error) {
19
20
  model := &model.<%= type.name %>{}
20
21
  if err := CopyFrom<%= type.name %>PayloadToModel(payload, model); err != nil {
21
22
  return nil, err
@@ -23,12 +24,12 @@ func <%= type.name %>PayloadToModel(payload *app.<%= type.payload_name %>) (*mod
23
24
  return model, nil
24
25
  }
25
26
 
26
- func CopyFrom<%= type.name %>PayloadToModel(payload *app.<%= type.payload_name %>, model *model.<%= type.name %>) error {
27
+ func CopyFrom<%= type.name %>PayloadToModel(payload *gen.<%= type.payload_name %>, model *model.<%= type.name %>) error {
27
28
  if payload == nil {
28
- return NoPayloadGiven
29
+ return converters.NoPayloadGiven
29
30
  }
30
31
  if model == nil {
31
- return NoModelGiven
32
+ return converters.NoModelGiven
32
33
  }
33
34
 
34
35
  <%-
@@ -44,9 +45,9 @@ func CopyFrom<%= type.name %>PayloadToModel(payload *app.<%= type.payload_name %
44
45
  <%- if simple -%>
45
46
  model.<%= f.name %> = payload.<%= f.goa_name %>
46
47
  <%- elsif !with_error -%>
47
- model.<%= f.name %> = <%= method_calling_exp(method_name, "payload.#{f.goa_name}") %>
48
+ model.<%= f.name %> = converters.<%= method_calling_exp(method_name, "payload.#{f.goa_name}") %>
48
49
  <%- else -%>
49
- if v, err := <%= method_calling_exp(method_name, "payload.#{f.goa_name}") %>; err != nil {
50
+ if v, err := converters.<%= method_calling_exp(method_name, "payload.#{f.goa_name}") %>; err != nil {
50
51
  return err
51
52
  } else {
52
53
  model.<%= f.name %> = v
@@ -62,11 +63,11 @@ func CopyFrom<%= type.name %>PayloadToModel(payload *app.<%= type.payload_name %
62
63
 
63
64
  <%- end -%>
64
65
  <%- if type.media_type -%>
65
- func <%= type.name %>ModelToMediaType(model *model.<%= type.name %>) (*app.<%= type.media_type_name_for_go %>, error) {
66
+ func <%= type.name %>ModelToMediaType(model *model.<%= type.name %>) (*gen.<%= type.media_type_name_for_go %>, error) {
66
67
  if model == nil {
67
- return nil, NoModelGiven
68
+ return nil, converters.NoModelGiven
68
69
  }
69
- r := &app.<%= type.media_type_name_for_go %>{}
70
+ r := &gen.<%= type.media_type_name_for_go %>{}
70
71
 
71
72
  <%-
72
73
  type.fields_including_id.each do |f|
@@ -81,9 +82,9 @@ func <%= type.name %>ModelToMediaType(model *model.<%= type.name %>) (*app.<%= t
81
82
  <%- if simple -%>
82
83
  r.<%= f.goa_name %> = model.<%= f.name %>
83
84
  <%- elsif !with_error -%>
84
- r.<%= f.goa_name %> = <%= method_calling_exp(method_name, "model.#{f.name}") %>
85
+ r.<%= f.goa_name %> = converters.<%= method_calling_exp(method_name, "model.#{f.name}") %>
85
86
  <%- else -%>
86
- if val, err := <%= method_calling_exp(method_name, "model.#{f.name}") %>; err != nil {
87
+ if val, err := converters.<%= method_calling_exp(method_name, "model.#{f.name}") %>; err != nil {
87
88
  return nil, err
88
89
  } else {
89
90
  r.<%= f.goa_name %> = val
@@ -1,11 +1,10 @@
1
- <%- package 'controller' -%>
1
+ <%- package 'converters' -%>
2
2
 
3
3
  <%-
4
- import(
5
- "fmt",
6
- "strconv",
7
- "google.golang.org/appengine/datastore",
8
- )
4
+ import "fmt"
5
+ import "strconv"
6
+ import "time"
7
+ import "google.golang.org/appengine/datastore"
9
8
  -%>
10
9
 
11
10
  var NoModelGiven = fmt.Errorf("No model given")
@@ -96,3 +95,23 @@ func DatastoreKeyPointerToStringPointer(key *datastore.Key) *string {
96
95
  s := DatastoreKeyPointerToString(key)
97
96
  return &s
98
97
  }
98
+
99
+ func StringToTime(v string) (time.Time, error) {
100
+ return time.Parse(time.RFC3339, v)
101
+ }
102
+
103
+ func StringPointerToTime(v *string) (time.Time, error) {
104
+ if v == nil {
105
+ return time.Time{}, nil
106
+ }
107
+ return StringToTime(*v)
108
+ }
109
+
110
+ func TimeToString(t time.Time) string {
111
+ return t.Format(time.RFC3339)
112
+ }
113
+
114
+ func TimeToStringPointer(t time.Time) *string {
115
+ s := TimeToString(t)
116
+ return &s
117
+ }
@@ -1,11 +1,9 @@
1
1
  <%- user_editable -%>
2
- <%- package 'model' -%>
2
+ <%- package 'goon_store' -%>
3
3
 
4
4
  <%-
5
- import(
6
- "golang.org/x/net/context",
7
- "github.com/mjibson/goon",
8
- )
5
+ import "golang.org/x/net/context"
6
+ import "github.com/mjibson/goon"
9
7
  -%>
10
8
 
11
9
  // // Use the following code if you want to change kind name from model struct name.
@@ -6,17 +6,6 @@
6
6
  import "context"
7
7
  import config.validator_path # "gopkg.in/go-playground/validator.v9"
8
8
  -%>
9
- <%- store_name = "#{model.name}Store" -%>
10
- func (s *<%= store_name %>) Validate(ctx context.Context, m *<%= model.name %>) error {
11
- if err := m.Validate(ctx); err != nil {
12
- return err
13
- }
14
- if err := s.ValidateUniqueness(ctx, m); err != nil {
15
- return err
16
- }
17
- return nil
18
- }
19
-
20
9
  func (m *<%= model.name %>) Validate(ctx context.Context) error {
21
10
  return WithValidator(ctx, func(validate *validator.Validate) error {
22
11
  return validate.Struct(m)
@@ -1,14 +1,16 @@
1
- <%- package "model" -%>
1
+ <%- package source_file.basename -%>
2
2
 
3
3
  <%- source_file.types.select(&:store?).each do |model| -%>
4
4
  <%- store_name = "#{model.name}Store" -%>
5
5
  <%-
6
- import(
7
- "context",
8
- "fmt",
9
- "google.golang.org/appengine/datastore",
10
- "google.golang.org/appengine/log",
11
- )
6
+ import "context"
7
+ import "fmt"
8
+ import "google.golang.org/appengine/datastore"
9
+ import "google.golang.org/appengine/log"
10
+ import "#{config.go_package}/model"
11
+ import :goon, "#{config.go_package}/stores/goon_store"
12
+
13
+ model_name = "model.#{model.name}"
12
14
  -%>
13
15
  type <%= store_name %> struct{
14
16
  <%- if model.parent -%>
@@ -16,44 +18,44 @@ type <%= store_name %> struct{
16
18
  <%- end -%>
17
19
  }
18
20
 
19
- func (s *<%= store_name %>) All(ctx context.Context) ([]*<%= model.name %>, error) {
21
+ func (s *<%= store_name %>) All(ctx context.Context) ([]*<%= model_name %>, error) {
20
22
  return s.Select(ctx, s.Query(ctx))
21
23
  }
22
24
 
23
- func (s *<%= store_name %>) Select(ctx context.Context, q *datastore.Query) ([]*<%= model.name %>, error) {
24
- g := GoonFromContext(ctx)
25
- r := []*<%= model.name %>{}
25
+ func (s *<%= store_name %>) Select(ctx context.Context, q *datastore.Query) ([]*<%= model_name %>, error) {
26
+ g := goon.FromContext(ctx)
27
+ r := []*<%= model_name %>{}
26
28
  log.Infof(ctx, "q is %v\n", q)
27
29
  _, err := g.GetAll(q.EventualConsistency(), &r)
28
30
  if err != nil {
29
- log.Errorf(ctx, "Failed to Select <%= model.name %> because of %v\n", err)
31
+ log.Errorf(ctx, "Failed to Select <%= model_name %> because of %v\n", err)
30
32
  return nil, err
31
33
  }
32
34
  return r, nil
33
35
  }
34
36
 
35
37
  func (s *<%= store_name %>) CountBy(ctx context.Context, q *datastore.Query) (int, error) {
36
- g := GoonFromContext(ctx)
38
+ g := goon.FromContext(ctx)
37
39
  c, err := g.Count(q)
38
40
  if err != nil {
39
- log.Errorf(ctx, "Failed to count <%= model.name %> with %v because of %v\n", q, err)
41
+ log.Errorf(ctx, "Failed to count <%= model_name %> with %v because of %v\n", q, err)
40
42
  return 0, err
41
43
  }
42
44
  return c, nil
43
45
  }
44
46
 
45
47
  func (s *<%= store_name %>) Query(ctx context.Context) *datastore.Query {
46
- g := GoonFromContext(ctx)
47
- k := g.Kind(new(<%= model.name %>))
48
- // log.Infof(ctx, "Kind for <%= model.name %> is %v\n", k)
48
+ g := goon.FromContext(ctx)
49
+ k := g.Kind(new(<%= model_name %>))
50
+ // log.Infof(ctx, "Kind for <%= model_name %> is %v\n", k)
49
51
  return datastore.NewQuery(k)
50
52
  }
51
53
 
52
- func (s *<%= store_name %>) ByID(ctx context.Context, <%= model.id_name_var %> <%= model.id_golang_type %>) (*<%= model.name %>, error) {
54
+ func (s *<%= store_name %>) ByID(ctx context.Context, <%= model.id_name_var %> <%= model.id_golang_type %>) (*<%= model_name %>, error) {
53
55
  <%- if model.parent -%>
54
- r := <%= model.name %>{ParentKey: s.ParentKey, <%= model.id_name %>: <%= model.id_name_var %>}
56
+ r := <%= model_name %>{ParentKey: s.ParentKey, <%= model.id_name %>: <%= model.id_name_var %>}
55
57
  <%- else -%>
56
- r := <%= model.name %>{<%= model.id_name %>: <%= model.id_name_var %>}
58
+ r := <%= model_name %>{<%= model.id_name %>: <%= model.id_name_var %>}
57
59
  <%- end -%>
58
60
  err := s.Get(ctx, &r)
59
61
  if err != nil {
@@ -62,16 +64,16 @@ func (s *<%= store_name %>) ByID(ctx context.Context, <%= model.id_name_var %> <
62
64
  return &r, nil
63
65
  }
64
66
 
65
- func (s *<%= store_name %>) ByKey(ctx context.Context, key *datastore.Key) (*<%= model.name %>, error) {
67
+ func (s *<%= store_name %>) ByKey(ctx context.Context, key *datastore.Key) (*<%= model_name %>, error) {
66
68
  if err := s.IsValidKey(ctx, key); err != nil {
67
69
  log.Errorf(ctx, "<%= store_name %>.ByKey got Invalid key: %v because of %v\n", key, err)
68
70
  return nil, err
69
71
  }
70
72
 
71
73
  <%- if model.parent -%>
72
- r := <%= model.name %>{ParentKey: key.Parent(), <%= model.id_name %>: key.<%= model.key_id_method %>()}
74
+ r := <%= model_name %>{ParentKey: key.Parent(), <%= model.id_name %>: key.<%= model.key_id_method %>()}
73
75
  <%- else -%>
74
- r := <%= model.name %>{<%= model.id_name %>: key.<%= model.key_id_method %>()}
76
+ r := <%= model_name %>{<%= model.id_name %>: key.<%= model.key_id_method %>()}
75
77
  <%- end -%>
76
78
  err := s.Get(ctx, &r)
77
79
  if err != nil {
@@ -80,16 +82,16 @@ func (s *<%= store_name %>) ByKey(ctx context.Context, key *datastore.Key) (*<%=
80
82
  return &r, nil
81
83
  }
82
84
 
83
- func (s *<%= store_name %>) Get(ctx context.Context, m *<%= model.name %>) error {
84
- g := GoonFromContext(ctx)
85
+ func (s *<%= store_name %>) Get(ctx context.Context, m *<%= model_name %>) error {
86
+ g := goon.FromContext(ctx)
85
87
  err := g.Get(m)
86
88
  if err != nil {
87
- log.Errorf(ctx, "Failed to Get <%= model.name %> because of %v\n", err)
89
+ log.Errorf(ctx, "Failed to Get <%= model_name %> because of %v\n", err)
88
90
  return err
89
91
  }
90
92
  <%- if model.parent -%>
91
93
  if err := s.ValidateParent(m); err != nil {
92
- log.Errorf(ctx, "Invalid parent key for <%= model.name %> because of %v\n", err)
94
+ log.Errorf(ctx, "Invalid parent key for <%= model_name %> because of %v\n", err)
93
95
  return err
94
96
  }
95
97
  <%- end -%>
@@ -101,8 +103,8 @@ func (s *<%= store_name %>) IsValidKey(ctx context.Context, key *datastore.Key)
101
103
  if key == nil {
102
104
  return fmt.Errorf("key is nil")
103
105
  }
104
- g := GoonFromContext(ctx)
105
- expected := g.Kind(&<%= model.name %>{})
106
+ g := goon.FromContext(ctx)
107
+ expected := g.Kind(&<%= model_name %>{})
106
108
  if key.Kind() != expected {
107
109
  return fmt.Errorf("key kind must be %s but was %s", expected, key.Kind())
108
110
  }
@@ -114,11 +116,11 @@ func (s *<%= store_name %>) IsValidKey(ctx context.Context, key *datastore.Key)
114
116
  return nil
115
117
  }
116
118
 
117
- func (s *<%= store_name %>) Exist(ctx context.Context, m *<%= model.name %>) (bool, error) {
119
+ func (s *<%= store_name %>) Exist(ctx context.Context, m *<%= model_name %>) (bool, error) {
118
120
  if m.ID == <%= model.id_field.zero_value_expression %> {
119
121
  return false, nil
120
122
  }
121
- g := GoonFromContext(ctx)
123
+ g := goon.FromContext(ctx)
122
124
  key, err := g.KeyError(m)
123
125
  if err != nil {
124
126
  log.Errorf(ctx, "Failed to Get Key of %v because of %v\n", m, err)
@@ -135,7 +137,7 @@ func (s *<%= store_name %>) Exist(ctx context.Context, m *<%= model.name %>) (bo
135
137
  }
136
138
  }
137
139
 
138
- func (s *<%= store_name %>) Create(ctx context.Context, m *<%= model.name %>) (*datastore.Key, error) {
140
+ func (s *<%= store_name %>) Create(ctx context.Context, m *<%= model_name %>) (*datastore.Key, error) {
139
141
  if err := m.PrepareToCreate(); err != nil {
140
142
  return nil, err
141
143
  }
@@ -152,7 +154,7 @@ func (s *<%= store_name %>) Create(ctx context.Context, m *<%= model.name %>) (*
152
154
  })
153
155
  }
154
156
 
155
- func (s *<%= store_name %>) Update(ctx context.Context, m *<%= model.name %>) (*datastore.Key, error) {
157
+ func (s *<%= store_name %>) Update(ctx context.Context, m *<%= model_name %>) (*datastore.Key, error) {
156
158
  if err := m.PrepareToUpdate(); err != nil {
157
159
  return nil, err
158
160
  }
@@ -169,7 +171,7 @@ func (s *<%= store_name %>) Update(ctx context.Context, m *<%= model.name %>) (*
169
171
  })
170
172
  }
171
173
 
172
- func (s *<%= store_name %>) PutWith(ctx context.Context, m *<%= model.name %>, f func() error) (*datastore.Key, error) {
174
+ func (s *<%= store_name %>) PutWith(ctx context.Context, m *<%= model_name %>, f func() error) (*datastore.Key, error) {
173
175
  if err := s.Validate(ctx, m); err != nil {
174
176
  return nil, err
175
177
  }
@@ -182,7 +184,7 @@ func (s *<%= store_name %>) PutWith(ctx context.Context, m *<%= model.name %>, f
182
184
  return s.Put(ctx, m)
183
185
  }
184
186
 
185
- func (s *<%= store_name %>) Put(ctx context.Context, m *<%= model.name %>) (*datastore.Key, error) {
187
+ func (s *<%= store_name %>) Put(ctx context.Context, m *<%= model_name %>) (*datastore.Key, error) {
186
188
  <%- if model.goon['id_type'] == 'UUID' -%>
187
189
  <%- import "github.com/goadesign/goa/uuid" -%>
188
190
  if m.Id == "" {
@@ -191,11 +193,11 @@ func (s *<%= store_name %>) Put(ctx context.Context, m *<%= model.name %>) (*dat
191
193
  <%- end -%>
192
194
  <%- if model.parent -%>
193
195
  if err := s.ValidateParent(m); err != nil {
194
- log.Errorf(ctx, "Invalid parent key for <%= model.name %> because of %v\n", err)
196
+ log.Errorf(ctx, "Invalid parent key for <%= model_name %> because of %v\n", err)
195
197
  return nil, err
196
198
  }
197
199
  <%- end -%>
198
- g := GoonFromContext(ctx)
200
+ g := goon.FromContext(ctx)
199
201
  key, err := g.Put(m)
200
202
  if err != nil {
201
203
  log.Errorf(ctx, "Failed to Put %v because of %v\n", m, err)
@@ -205,7 +207,7 @@ func (s *<%= store_name %>) Put(ctx context.Context, m *<%= model.name %>) (*dat
205
207
  }
206
208
 
207
209
  <%- if model.parent -%>
208
- func (s *<%= store_name %>) ValidateParent(m *<%= model.name %>) error {
210
+ func (s *<%= store_name %>) ValidateParent(m *<%= model_name %>) error {
209
211
  if s.ParentKey == nil {
210
212
  return nil
211
213
  }
@@ -219,8 +221,8 @@ func (s *<%= store_name %>) ValidateParent(m *<%= model.name %>) error {
219
221
  }
220
222
 
221
223
  <%- end -%>
222
- func (s *<%= store_name %>) Delete(ctx context.Context, m *<%= model.name %>) error {
223
- g := GoonFromContext(ctx)
224
+ func (s *<%= store_name %>) Delete(ctx context.Context, m *<%= model_name %>) error {
225
+ g := goon.FromContext(ctx)
224
226
  key, err := g.KeyError(m)
225
227
  if err != nil {
226
228
  log.Errorf(ctx, "Failed to Get key of %v because of %v\n", m, err)
@@ -233,7 +235,7 @@ func (s *<%= store_name %>) Delete(ctx context.Context, m *<%= model.name %>) er
233
235
  return nil
234
236
  }
235
237
 
236
- func (s *<%= store_name %>) ValidateUniqueness(ctx context.Context, m *<%= model.name %>) error {
238
+ func (s *<%= store_name %>) ValidateUniqueness(ctx context.Context, m *<%= model_name %>) error {
237
239
  conditions := map[string]interface{}{
238
240
  <%- model.fields.select(&:unique?).each do |field| -%>
239
241
  "<%= field.name %>": m.<%= field.name %>,
@@ -250,7 +252,7 @@ func (s *<%= store_name %>) ValidateUniqueness(ctx context.Context, m *<%= model
250
252
  b = 1
251
253
  }
252
254
  if c > b {
253
- return &ValidationError{
255
+ return &model.ValidationError{
254
256
  Field: field,
255
257
  Message: fmt.Sprintf("%v has already been taken", value),
256
258
  }
@@ -0,0 +1,20 @@
1
+ <%- user_editable -%>
2
+ <%- package source_file.basename -%>
3
+
4
+ <%- source_file.types.select(&:store?).each do |model| -%>
5
+ <%-
6
+ import "context"
7
+ import "#{config.go_package}/model"
8
+ -%>
9
+ <%- store_name = "#{model.name}Store" -%>
10
+ func (s *<%= store_name %>) Validate(ctx context.Context, m *model.<%= model.name %>) error {
11
+ if err := m.Validate(ctx); err != nil {
12
+ return err
13
+ }
14
+ if err := s.ValidateUniqueness(ctx, m); err != nil {
15
+ return err
16
+ }
17
+ return nil
18
+ }
19
+
20
+ <%- end -%>
@@ -1,11 +1,9 @@
1
1
  <%- user_editable -%>
2
2
  <%- package "model" -%>
3
3
  <%-
4
- import(
5
- "context",
6
- config.validator_path,
7
- # ja_translations "github.com/akm/validator/translations/ja",
8
- )
4
+ import "context"
5
+ import config.validator_path
6
+ # import ja_translations "github.com/akm/validator/translations/ja"
9
7
  -%>
10
8
 
11
9
  func NewValidator(ctx context.Context) (*validator.Validate, error) {
@@ -1,3 +1,3 @@
1
1
  module GoaModelGen
2
- VERSION = "0.6.1"
2
+ VERSION = "0.7.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: goa_model_gen
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.1
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - akm
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-12-12 00:00:00.000000000 Z
11
+ date: 2018-12-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -94,6 +94,34 @@ dependencies:
94
94
  - - ">="
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: pry-byebug
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: pry-stack_explorer
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
97
125
  description: Generate model files for goa in golang
98
126
  email:
99
127
  - akm2000@gmail.com
@@ -129,8 +157,9 @@ files:
129
157
  - lib/goa_model_gen/templates/converter_base.go.erb
130
158
  - lib/goa_model_gen/templates/goon.go.erb
131
159
  - lib/goa_model_gen/templates/model.go.erb
132
- - lib/goa_model_gen/templates/model_store.go.erb
133
160
  - lib/goa_model_gen/templates/model_validation.go.erb
161
+ - lib/goa_model_gen/templates/store.go.erb
162
+ - lib/goa_model_gen/templates/store_validation.go.erb
134
163
  - lib/goa_model_gen/templates/validator.go.erb
135
164
  - lib/goa_model_gen/type.rb
136
165
  - lib/goa_model_gen/version.rb
@@ -154,7 +183,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
154
183
  version: '0'
155
184
  requirements: []
156
185
  rubyforge_project:
157
- rubygems_version: 2.7.3
186
+ rubygems_version: 2.7.6
158
187
  signing_key:
159
188
  specification_version: 4
160
189
  summary: Generate model files for goa in golang