goa_model_gen 0.6.1 → 0.7.0

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 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