metamodel 0.1.8 → 0.1.9

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
  SHA1:
3
- metadata.gz: 150f0889587f6a3379d1dd291465dc4aea20c5c0
4
- data.tar.gz: 616832c86c039688d8c06fdcc59076aa8745704f
3
+ metadata.gz: f0d8ca3a3bfe2be2fff493e0a8a6ee19f56640df
4
+ data.tar.gz: 4b704b41431dcc15cf3d7851512de6ec637e973d
5
5
  SHA512:
6
- metadata.gz: f6a3cd5f7a04e4284887c52574cb50a7622f6aece76de076881176c1a803dffd785e5d9778d8d94aa7de6e4fcb2c0f038ad8acafa897e2be9adba9648b7b341e
7
- data.tar.gz: 8b2e17fc792955ce237d907e71024a1637fa70d414716c49ffe98419b10f7efa44bf3e0a8634edfe3fe0caa30e95476ce649de3df52f4769b0f9c7cfe4b112c9
6
+ metadata.gz: c37a823538cc4dc169e80a0aa1dae3839fb275a9e4d668081cbc80e7479b1936c93565249ab8cb572d7d17f35be408c03d5bf2226c9d17791217066dc67eb28b
7
+ data.tar.gz: e5ee4d3459de834213f65b80817130f7402076f7a86d93edbf22f2f25f51c494b0950c11da6124d9680db05cfa3bc33b8e9a0e3b7c4f6eaa1e1799f2c266781d
data/lib/metamodel.rb CHANGED
@@ -1,5 +1,3 @@
1
- require 'active_support/core_ext/string/strip'
2
-
3
1
  module MetaModel
4
2
 
5
3
  class PlainInformative < StandardError; end
@@ -14,9 +12,11 @@ module MetaModel
14
12
 
15
13
  require 'pathname'
16
14
  require 'active_support/inflector'
15
+ require 'active_support/core_ext/string'
17
16
 
18
17
  require 'metamodel/version'
19
18
  require 'metamodel/config'
19
+ require 'metamodel/erbal_template'
20
20
 
21
21
  # Loaded immediately after dependencies to ensure proper override of their
22
22
  # UI methods.
@@ -67,7 +67,7 @@ module MetaModel
67
67
  #
68
68
  def update_initialize_method
69
69
  template = File.read File.expand_path(File.join(File.dirname(__FILE__), "../template/metamodel.swift"))
70
- result = ErbalT::render_from_hash(template, { :models => @models })
70
+ result = Renderer::ErbalTemplate::render_from_hash(template, { :models => @models })
71
71
  model_path = Pathname.new("./metamodel/MetaModel/MetaModel.swift")
72
72
  File.write model_path, result
73
73
  end
@@ -120,16 +120,6 @@ module MetaModel
120
120
 
121
121
  private
122
122
 
123
- class ErbalT < OpenStruct
124
- def self.render_from_hash(t, h)
125
- ErbalT.new(h).render(t)
126
- end
127
-
128
- def render(template)
129
- ERB.new(template).result(binding)
130
- end
131
- end
132
-
133
123
  CURRENT_SUPPORTED_BUILT_IN_TYPES = %w[
134
124
  Int
135
125
  Double
@@ -1,21 +1,9 @@
1
- require 'erb'
2
- require 'ostruct'
3
1
  require 'xcodeproj'
4
2
 
5
3
  module MetaModel
6
4
  class Command
7
5
  class Build
8
6
  class Renderer
9
- class ErbalT < OpenStruct
10
- def self.render_from_hash(t, h)
11
- ErbalT.new(h).render(t)
12
- end
13
-
14
- def render(template)
15
- ERB.new(template).result(binding)
16
- end
17
- end
18
-
19
7
  class << self
20
8
 
21
9
  def templates
@@ -44,7 +32,7 @@ module MetaModel
44
32
  file_refs = []
45
33
  models.each do |model|
46
34
  result = templates.map { |template|
47
- ErbalT::render_from_hash(template, { :model => model })
35
+ ErbalTemplate::render_from_hash(template, { :model => model })
48
36
  }.join("\n")
49
37
  model_path = Pathname.new("./metamodel/MetaModel/#{model.name}.swift")
50
38
  File.write model_path, result
@@ -21,8 +21,10 @@ module MetaModel
21
21
  major_model.associations << association
22
22
  association.major_model = major_model
23
23
  association.secondary_model = name_model_hash[association.secondary_model]
24
+ size = association.through ? 3 : 2
25
+ association.through = name_model_hash[association.through]
24
26
  raise Informative, "Associations not satisfied in `Metafile`" \
25
- unless [association.major_model, association.secondary_model].compact.size == 2
27
+ unless [association.major_model, association.secondary_model, association.through].compact.size == size
26
28
  association
27
29
  end
28
30
 
@@ -35,21 +37,21 @@ module MetaModel
35
37
  end
36
38
  remain
37
39
  end
38
- raise Informative, "Unsatisfied constraints in #{satisfy_constraint.map { |x| x.major_model.name }}" \
39
- if satisfy_constraint.size > 0
40
+ raise Informative, "Unsatisfied constraints in #{satisfy_constraint.map \
41
+ { |x| x.debug_description }}" \
42
+ if satisfy_constraint.size > 0
40
43
 
41
44
  @associations.each do |association|
42
45
  major_model = association.major_model
43
46
  secondary_model = association.secondary_model
44
47
  case association.relation
45
- when :has_one then
46
- property = Record::Property.new(major_model.foreign_id, :int, :foreign, :default => 0)
47
- secondary_model.properties << property
48
- when :has_many then
49
- property = Record::Property.new(major_model.foreign_id, :int, :foreign, :default => 0)
48
+ when :has_one, :has_many then
49
+ name = association.through ? association.through.foreign_id : major_model.foreign_id
50
+ property = Record::Property.new(name, :int, :foreign, :default => 0)
50
51
  secondary_model.properties << property
51
52
  when :belongs_to then
52
- property = Record::Property.new(secondary_model.foreign_id, :int, :foreign, :default => 0)
53
+ name = association.through ? association.through.foreign_id : secondary_model.foreign_id
54
+ property = Record::Property.new(name, :int, :foreign, :default => 0)
53
55
  major_model.properties << property
54
56
  end
55
57
  end
@@ -0,0 +1,14 @@
1
+ require 'erb'
2
+ require 'ostruct'
3
+
4
+ module MetaModel
5
+ class ErbalTemplate < OpenStruct
6
+ def self.render_from_hash(t, h)
7
+ ErbalTemplate.new(h).render(t)
8
+ end
9
+
10
+ def render(template)
11
+ ERB.new(template).result(binding)
12
+ end
13
+ end
14
+ end
@@ -4,10 +4,10 @@ module MetaModel
4
4
  attr_reader :name
5
5
  attr_reader :type
6
6
  attr_reader :relation
7
- attr_reader :through
8
7
  attr_reader :dependent
9
8
  attr_accessor :major_model
10
9
  attr_accessor :secondary_model
10
+ attr_accessor :through
11
11
 
12
12
  def initialize(name, major_model, secondary_model, relation, args)
13
13
  through = args[:through]
@@ -15,7 +15,7 @@ module MetaModel
15
15
 
16
16
  @name = name.to_s.camelize :lower
17
17
  @relation = relation
18
- @through = through
18
+ @through = through.to_s.camelize.singularize unless through.nil?
19
19
  @dependent = dependent
20
20
  @major_model = major_model
21
21
  @secondary_model = secondary_model
@@ -27,9 +27,18 @@ module MetaModel
27
27
  result = true
28
28
  result &= self.major_model == constraint.secondary_model
29
29
  result &= self.secondary_model == constraint.major_model
30
+ result &= self.through == constraint.through
31
+
30
32
  result &= case [self.relation, constraint.relation]
31
33
  when [:has_one, :belongs_to], [:belongs_to, :has_one] then true
32
- when [:belongs_to, :has_many], [:has_many, :belongs_to] then true
34
+ when [:belongs_to, :has_many] then
35
+ return false if self.dependent == :destroy
36
+ return true unless constraint.through
37
+ return false
38
+ when [:has_many, :belongs_to] then
39
+ return false if constraint.dependent == :destroy
40
+ return true unless self.through
41
+ return false
33
42
  when [:has_many, :has_many] then
34
43
  self.through == constraint.through
35
44
  else false
@@ -39,8 +48,8 @@ module MetaModel
39
48
 
40
49
  def secondary_model_instance
41
50
  case relation
42
- when :has_many, :has_one then "#{secondary_model.name}.findBy(#{major_model.foreign_id}: id)"
43
- when :belongs_to then "#{secondary_model.name}.findBy(id: #{secondary_model.foreign_id})"
51
+ when :has_many, :has_one then "#{secondary_model.name}.find(privateId)"
52
+ when :belongs_to then "#{secondary_model.name}.find(#{secondary_model.foreign_id})"
44
53
  else ""
45
54
  end
46
55
  end
@@ -51,6 +60,7 @@ module MetaModel
51
60
 
52
61
  def validate_association
53
62
  validate_dependent(@dependent)
63
+ validate_through(@through)
54
64
  end
55
65
 
56
66
  def validate_dependent(dependent)
@@ -60,6 +70,11 @@ module MetaModel
60
70
  unless supported_dependent_options.include? dependent
61
71
  end
62
72
 
73
+ def validate_through(through)
74
+ raise Informative, "belongs_to can't coexist with through." \
75
+ if !!through && @relation == :belongs_to
76
+ end
77
+
63
78
 
64
79
  #-------------------------------------------------------------------------#
65
80
 
@@ -79,9 +94,15 @@ module MetaModel
79
94
 
80
95
  def type
81
96
  case @relation
82
- when :has_one then secondary_model.name
83
- when :has_many then secondary_model.name
84
- when :belongs_to then secondary_model.name
97
+ when :has_one, :has_many, :belongs_to then secondary_model.name
98
+ end
99
+ end
100
+
101
+ def debug_description
102
+ if through
103
+ "#{major_model.name}.#{relation}.#{secondary_model.name}.through.#{through.name}.#{dependent}"
104
+ else
105
+ "#{major_model.name}.#{relation}.#{secondary_model.name}.#{dependent}"
85
106
  end
86
107
  end
87
108
  end
@@ -9,20 +9,26 @@ module MetaModel
9
9
  @name = name.to_s.camelize
10
10
  @properties = []
11
11
  @associations = []
12
-
13
- validate
14
12
  end
15
13
 
16
14
  def contains?(property)
17
15
  @properties.select { |prop| prop.name == property }.size > 0
18
16
  end
19
17
 
18
+ def all_foreign_properties
19
+ @properties.select { |element| element.is_foreign? }
20
+ end
21
+
20
22
  def properties_exclude_id
21
- @properties.select { |property| property.name != "id" }
23
+ properties_exclude_property "id"
24
+ end
25
+
26
+ def properties_exclude_property(property)
27
+ @properties.select { |element| element.name != property }
22
28
  end
23
29
 
24
30
  def foreign_id
25
- "#{name}_id".camelize(:lower)
31
+ "#{name}Id".camelize(:lower)
26
32
  end
27
33
 
28
34
  def table_name
@@ -33,18 +39,6 @@ module MetaModel
33
39
  "#{name}Relation"
34
40
  end
35
41
 
36
- def all_properties
37
- all_properties = properties.clone
38
- all_properties.push Property.primary_id
39
- all_properties
40
- end
41
-
42
- def validate
43
- property_keys = @properties.map { |property| property.name }
44
-
45
- @properties << Property.new(:id, :int, :unique, :default => 0) unless property_keys.include? "id"
46
- end
47
-
48
42
  def hash_value
49
43
  self.hash.to_s(16)
50
44
  end
@@ -85,10 +79,10 @@ module MetaModel
85
79
  foreign_sql = @properties.map do |property|
86
80
  next unless property.is_foreign?
87
81
  reference_table_name = property.type.tableize
88
- "FOREIGN KEY(#{property.name}) REFERENCES #{reference_table_name}(_id)"
82
+ "FOREIGN KEY(#{property.name}) REFERENCES #{reference_table_name}(privateId)"
89
83
  end
90
84
 
91
- table + "(_id INTEGER PRIMARY KEY, #{(main_sql + foreign_sql).compact.join(", ")});"
85
+ table + "(privateId INTEGER PRIMARY KEY, #{(main_sql + foreign_sql).compact.join(", ")});"
92
86
  end
93
87
 
94
88
  private
@@ -20,8 +20,8 @@ module MetaModel
20
20
 
21
21
  class << self
22
22
  def primary_id
23
- property = Property.new(:_id, :int, :primary)
24
- property.name = :_id
23
+ property = Property.new(:privateId, :int, :primary)
24
+ property.name = :privateId
25
25
  property
26
26
  end
27
27
  end
@@ -74,7 +74,7 @@ module MetaModel
74
74
  end
75
75
 
76
76
  def is_foreign?
77
- @modifiers.include? :foreign
77
+ @modifiers[:foreign]
78
78
  end
79
79
 
80
80
  def is_optional?
@@ -1,21 +1,11 @@
1
1
  // MARK: - Association
2
2
  <% model.associations.each do |association| %><% if association.has_many? %>
3
3
  <%= """public extension #{model.name} {
4
- func append#{association.type}(element: #{association.type}) {
5
- var element = element
6
- element.update(#{model.foreign_id}: id)
7
- }
8
-
9
- func create#{association.type}(#{association.secondary_model.property_key_type_pairs_without_property model.foreign_id}) -> #{association.type}? {
10
- return #{association.type}.create(#{association.secondary_model.property_key_value_pairs_without_property model.foreign_id}, #{model.foreign_id}: self.id)
11
- }
12
-
13
- func delete#{association.type}(id: Int) {
14
- #{association.type}.findBy(#{model.foreign_id}: id).first?.delete
15
- }
16
- var #{association.name}: [#{association.type}] {
4
+ var #{association.name}: #{association.secondary_model.relation_name} {
17
5
  get {
18
- return #{association.type}.filter(id: id).result
6
+ var result = #{association.type}.filter(#{model.foreign_id}: privateId)
7
+ result.#{model.foreign_id} = privateId
8
+ return result
19
9
  }
20
10
  set {
21
11
  #{association.name}.forEach { (element) in
@@ -24,19 +14,20 @@
24
14
  }
25
15
  newValue.forEach { (element) in
26
16
  var element = element
27
- element.update(#{model.foreign_id}: id)
17
+ element.update(#{model.foreign_id}: privateId)
28
18
  }
19
+ #{association.name}.#{model.foreign_id} = privateId
29
20
  }
30
21
  }
31
22
  }""" %><% elsif association.belongs_to? %>
32
23
  <%= """public extension #{model.name} {
33
24
  var #{association.name}: #{association.type}? {
34
25
  get {
35
- return #{association.secondary_model_instance}.first
26
+ return #{association.secondary_model_instance}
36
27
  }
37
28
  set {
38
29
  guard let newValue = newValue else { return }
39
- update(#{association.secondary_model.foreign_id}: newValue.id)
30
+ update(#{association.secondary_model.foreign_id}: newValue.privateId)
40
31
  }
41
32
  }
42
33
 
@@ -47,9 +38,9 @@
47
38
  return #{association.secondary_model_instance}.first
48
39
  }
49
40
  set {
50
- #{association.type}.findBy(#{model.foreign_id}: id).deleteAll
41
+ #{association.type}.findBy(#{model.foreign_id}: privateId).deleteAll
51
42
  guard var newValue = newValue else { return }
52
- newValue.update(#{model.foreign_id}: id)
43
+ newValue.update(#{model.foreign_id}: privateId)
53
44
  }
54
45
  }
55
46
  }"""%><% end %><% end %>
@@ -1,6 +1,8 @@
1
1
  // MAKR: - Helper
2
2
 
3
3
  public class <%= model.relation_name %>: Relation<<%= model.name %>> {
4
+ <% model.all_foreign_properties.each do |foreign_property| %><%= """var #{foreign_property.name} = 0
5
+ """%><% end %>
4
6
  override init() {
5
7
  super.init()
6
8
  self.select = "SELECT \(<%= model.name %>.tableName.unwrapped).* FROM \(<%= model.name %>.tableName.unwrapped)"
@@ -27,9 +29,23 @@ extension <%= model.name %> {
27
29
  <% model.properties.each_with_index do |property, index| %><%= """let #{property.name}: #{property.real_type} = values[#{index+1}] as! #{property.real_type}""" %>
28
30
  <% end %>
29
31
  self.init(<%= model.property_key_value_pairs true %>)
32
+
33
+ let privateId: Int64 = values[0] as! Int64
34
+ self.privateId = Int(privateId)
30
35
  }
31
36
  }
32
37
 
33
38
  extension <%= model.name %> {
34
- var itself: String { get { return "WHERE \(Article.tableName.unwrapped).\("id".unwrapped) = \(id)" } }
39
+ var itself: String { get { return "WHERE \(<%= model.name %>.tableName.unwrapped).\("privateId".unwrapped) = \(privateId)" } }
40
+ }
41
+
42
+ extension <%= model.relation_name %> {
43
+ func find(privateId: Int) -> Self {
44
+ return filter(privateId)
45
+ }
46
+
47
+ func filter(privateId: Int) -> Self {
48
+ self.filter.append("\"privateId\" = \(privateId)")
49
+ return self
50
+ }
35
51
  }
@@ -5,8 +5,8 @@ public extension <%= model.name %> {
5
5
  get {
6
6
  let deleteSQL = "DELETE FROM \(<%= model.name %>.tableName.unwrapped) \(itself)"
7
7
  executeSQL(deleteSQL)<% model.associations.each do |association| %>
8
- <%= association.secondary_model_instance + ".delete" if association.dependent == :destroy %>
9
- <%= association.secondary_model_instance + ".update(#{model.foreign_id}: 0)" if association.dependent == :nullify && model.contains?(model.foreign_id) %>
8
+ <%= association.secondary_model_instance + "?.delete" if association.dependent == :destroy %>
9
+ <%= association.secondary_model_instance + "?.update(#{model.foreign_id}: 0)" if association.dependent == :nullify && model.contains?(model.foreign_id) %>
10
10
  <% end %>
11
11
  return true
12
12
  }
@@ -1,4 +1,5 @@
1
1
  public struct <%= model.name %> {
2
+ var privateId: Int = 0
2
3
  <% model.properties.each do |property| %><%= """public var #{property.name}: #{property.type}""" %>
3
4
  <% end %>
4
5
  static let tableName = "<%= model.table_name %>"
@@ -6,6 +7,7 @@ public struct <%= model.name %> {
6
7
  public enum Column: String, Unwrapped {
7
8
  <% model.properties.each do |property| %><%= """case #{property.name} = \"#{property.name}\"""" %>
8
9
  <% end %>
10
+ case privateId = "privateId"
9
11
  var unwrapped: String { get { return self.rawValue.unwrapped } }
10
12
  }
11
13
 
@@ -19,14 +21,12 @@ public struct <%= model.name %> {
19
21
  }
20
22
 
21
23
  static public func create(<%= model.property_key_type_pairs %>) -> <%= model.name %>? {
22
- if <%= model.properties.select { |p| p.name.downcase.end_with? "id" }.map { |p| "#{p.name} == 0" }.join(" || ") %> { return nil }
24
+ //if <%= model.properties.select { |p| p.name.downcase.end_with? "id" }.map { |p| "#{p.name} == 0" }.push("false == true").join(" || ") %> { return nil }
23
25
 
24
26
  var columnsSQL: [<%= model.name %>.Column] = []
25
27
  var valuesSQL: [Unwrapped] = []
26
28
 
27
- columnsSQL.append(.id)
28
- valuesSQL.append(id)
29
- <% model.properties_exclude_id.each do |property| %><% if property.is_optional? %>
29
+ <% model.properties.each do |property| %><% if property.is_optional? %>
30
30
  <%= """if let #{property.name} = #{property.name} {
31
31
  columnsSQL.append(.#{property.name})
32
32
  valuesSQL.append(#{property.name})
@@ -35,7 +35,23 @@ public struct <%= model.name %> {
35
35
  valuesSQL.append(#{property.name})
36
36
  """ %><% end %><% end %>
37
37
  let insertSQL = "INSERT INTO \(tableName.unwrapped) (\(columnsSQL.map { $0.rawValue }.joinWithSeparator(", "))) VALUES (\(valuesSQL.map { $0.unwrapped }.joinWithSeparator(", ")))"
38
- guard let _ = executeSQL(insertSQL) else { return nil }
39
- return <%= model.name %>(<%= model.property_key_value_pairs %>)
38
+ guard let _ = executeSQL(insertSQL),
39
+ let lastInsertRowId = executeScalarSQL("SELECT last_insert_rowid();") as? Int64 else { return nil }
40
+ var result = <%= model.name %>(<%= model.property_key_value_pairs %>)
41
+ result.privateId = Int(lastInsertRowId)
42
+ return result
43
+ }
44
+ }
45
+
46
+ public extension <%= model.relation_name %> {
47
+ <% model.all_foreign_properties.each do |property| %>
48
+ func create(<%= model.property_key_type_pairs_without_property property.name %>) -> <%= model.name %>? {
49
+ return <%= model.name %>.create(<% if model.properties_exclude_property(property).count == 0 %><%= "#{property}: property" %><% else %><%= model.property_key_value_pairs %><% end %>)
40
50
  }
51
+
52
+ func append(element: <%= model.name %>) {
53
+ var element = element
54
+ element.<%= property.name %> = <%= property.name %>
55
+ }
56
+ <% end %>
41
57
  }
@@ -7,22 +7,22 @@ public extension <%= model.name %> {
7
7
 
8
8
  static var first: <%= model.name %>? {
9
9
  get {
10
- return <%= model.relation_name %>().orderBy(.id, asc: true).first
10
+ return <%= model.relation_name %>().orderBy(.privateId, asc: true).first
11
11
  }
12
12
  }
13
13
 
14
14
  static var last: <%= model.name %>? {
15
15
  get {
16
- return <%= model.relation_name %>().orderBy(.id, asc: false).first
16
+ return <%= model.relation_name %>().orderBy(.privateId, asc: false).first
17
17
  }
18
18
  }
19
19
 
20
20
  static func first(length: UInt) -> <%= model.relation_name %> {
21
- return <%= model.relation_name %>().orderBy(.id, asc: true).limit(length)
21
+ return <%= model.relation_name %>().orderBy(.privateId, asc: true).limit(length)
22
22
  }
23
23
 
24
24
  static func last(length: UInt) -> <%= model.relation_name %> {
25
- return <%= model.relation_name %>().orderBy(.id, asc: false).limit(length)
25
+ return <%= model.relation_name %>().orderBy(.privateId, asc: false).limit(length)
26
26
  }
27
27
 
28
28
  static func find(id: Int) -> <%= model.name %>? {
@@ -69,10 +69,6 @@ public extension <%= model.name %> {
69
69
  }
70
70
 
71
71
  public extension <%= model.relation_name %> {
72
- func find(id: Int) -> Self {
73
- return findBy(id: id)
74
- }
75
-
76
72
  func findBy(<%= model.property_key_type_pairs(true, true) %>) -> Self {
77
73
  var attributes: [<%= model.name %>.Column: Any] = [:]
78
74
  <% model.properties.each do |property| %><%= "if (#{property.name} != #{property.type_without_optional}DefaultValue) { attributes[.#{property.name}] = #{property.name} }" %>
@@ -31,7 +31,7 @@ public extension <%= model.name %> {
31
31
 
32
32
  var save: <%= model.name %> {
33
33
  mutating get {
34
- if let _ = <%= model.name %>.find(id) {
34
+ if let _ = <%= model.name %>.find(privateId) {
35
35
  update([<% column_values = model.properties.map do |property| %><% ".#{property.name}: #{property.name}" %><% end %><%= column_values.join(", ") %>])
36
36
  } else {
37
37
  <%= model.name %>.create(<%= model.property_key_value_pairs %>)
@@ -1,5 +1,5 @@
1
1
  module MetaModel
2
2
  # The version of the MetaModel command line tool.
3
3
  #
4
- VERSION = '0.1.8' unless defined? MetaModel::VERSION
4
+ VERSION = '0.1.9' unless defined? MetaModel::VERSION
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: metamodel
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.8
4
+ version: 0.1.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Draveness Zuo
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-09-12 00:00:00.000000000 Z
11
+ date: 2016-09-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: claide
@@ -155,6 +155,7 @@ files:
155
155
  - lib/metamodel/command/generate.rb
156
156
  - lib/metamodel/command/init.rb
157
157
  - lib/metamodel/config.rb
158
+ - lib/metamodel/erbal_template.rb
158
159
  - lib/metamodel/record/association.rb
159
160
  - lib/metamodel/record/model.rb
160
161
  - lib/metamodel/record/property.rb