ez 0.9.6 → 0.9.7

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: d449963f12ea32f503884e2724536171d3a60406
4
- data.tar.gz: d9ec82e7a73e827c5f515f32f63fb2a9203ad434
3
+ metadata.gz: 46f68c1557debf7db379e3240a76ffad307d12f4
4
+ data.tar.gz: 3c88b18298f9e8c7d24bc0d6ce2e800b5c32f26c
5
5
  SHA512:
6
- metadata.gz: e396c4c062e446c78c3883da24fe501aed94b0c80e9996c49550bac0e5bfc581397d75307bcc5ad86e4a8b9c4ef2ea0de493509d76ab6968a6564581036a88fe
7
- data.tar.gz: ab3b3e4f867a8f4b55621886c8269e3d88fad5bf7c56b0c5939d3fa0ee0e9fe016e79722f7b298c38b53dbac4c122c5280a1307e0dafb8c8555923c0e8754915
6
+ metadata.gz: 43c5759b7b0236b82bc8c063dcc84176cad6249d11156b18b42b466a1e8e3f18a666a9273112880aacb5917e79cc784ba88b9dfe08e5ae32fa8a47026cfc77da
7
+ data.tar.gz: f60d613d29cb36d4cf12ac59c7d53003f9634aa8ce26fc20edbaf8e97e2d081381228ebfd83144daab73491001f854757fddae672a1735f8f85f45593b0c434c
data/ez.gemspec CHANGED
@@ -18,7 +18,7 @@ Gem::Specification.new do |spec|
18
18
  spec.test_files = []
19
19
  spec.require_paths = ["lib"]
20
20
 
21
- spec.add_development_dependency 'hirb', '~> 0.7.1'
21
+ spec.add_runtime_dependency 'hirb', '~> 0.7'
22
22
 
23
23
  spec.add_development_dependency "bundler", "~> 1.3"
24
24
  spec.add_development_dependency "rake", '~> 10.0', '>= 10.0.0'
@@ -1,10 +1,15 @@
1
1
  require_relative 'schema_modifier'
2
2
 
3
3
  module EZ
4
+ # The DomainModeler class implements the db/models.yml file syntax
5
+ # and provides a hash of the domain model specification.
6
+
4
7
  class DomainModeler
5
8
 
9
+ # Valid formats for default values
6
10
  DEFAULT_VALUE_REGEXES = [/\s*\((.+)?\)/, /\s+(.+)?\s*/, /,\s*default:\s*(.+)?\s*/]
7
11
 
12
+ # Get the domain model as a hash
8
13
  attr_reader :spec
9
14
 
10
15
  def initialize
@@ -113,6 +118,7 @@ module EZ
113
118
  default_column_value = default_column_value.to_f if column_type == 'float'
114
119
 
115
120
  @spec[model][column_name] = { type: column_type, default: default_column_value}
121
+ @spec[model][column_name][:index] = true if column_name =~ /_id$/
116
122
  end
117
123
  end
118
124
 
@@ -1,4 +1,7 @@
1
1
  module EZ
2
+
3
+ # The SchemaModifier class receives a DomainModeler specification
4
+ # and applies any necessary db schema changes.
2
5
  class SchemaModifier
3
6
 
4
7
  attr_reader :db, :spec
@@ -29,6 +32,7 @@ module EZ
29
32
 
30
33
  rescue => e
31
34
  puts e.message
35
+ puts e.backtrace.first
32
36
  false
33
37
  end
34
38
 
@@ -62,29 +66,34 @@ module EZ
62
66
 
63
67
  def add_missing_columns(model_name, columns, assume_missing = false)
64
68
  table_name = model_name.tableize
65
- # {"nickname"=>{:type=>"string", :default=>nil}, "password_digest"=>{:type=>"string", :default=>nil}, "created_at"=>{:type=>"datetime", :default=>nil}, "updated_at"=>{:type=>"datetime", :default=>nil}, "course_id"=>{:type=>"integer", :default=>"(0)"}, "email"=>{:type=>"string", :default=>nil}, "full_name"=>{:type=>"string", :default=>nil}, "admin"=>{:type=>"boolean", :default=>true}}
69
+ db_columns = db.columns(table_name)
70
+
66
71
  columns.each do |col_name, data|
67
- col_type = data[:type]
68
- if !assume_missing && db.column_exists?(table_name, col_name.to_sym)
69
- unless db.column_exists?(table_name, col_name.to_sym, col_type.to_sym)
70
- display_change "Changing column type for '#{col_name}' to #{col_type}"
71
- db.change_column(table_name, col_name.to_sym, col_type.to_sym)
72
- if col_name.to_s =~ /_id$/
73
- display_change " (adding foreign_key index for '#{col_name}')"
74
- db.add_index table_name, col_name.to_sym
75
- end
76
- end
77
- else
72
+ col_type = data[:type].to_sym
73
+ col_default = data[:default]
74
+ db_col = !assume_missing && (db_columns.detect { |dbc| dbc.name == col_name })
75
+
76
+ if !db_col
78
77
  if !assume_missing
79
78
  display_change "Adding new column '#{col_name}' as #{col_type} for model #{model_name}"
80
79
  end
81
- options = {}
82
- options[:default] = false if col_type.to_sym == :boolean
83
- db.add_column(table_name, col_name.to_sym, col_type.to_sym, options)
84
- if col_name.to_s =~ /_id$/
85
- display_change " (adding foreign_key index for '#{col_name}')"
80
+ db.add_column(table_name, col_name.to_sym, col_type.to_sym, default: col_default)
81
+ if data[:index]
82
+ display_change " (adding database index for '#{col_name}')"
86
83
  db.add_index table_name, col_name.to_sym
87
84
  end
85
+ else
86
+ if db_col.type != col_type
87
+ display_change "Changing column type for #{col_name} to #{col_type} for model #{model_name}"
88
+ end
89
+
90
+ if db_col.default != col_default
91
+ display_change "Applying new default value #{col_default} for #{col_name} for model #{model_name}"
92
+ end
93
+
94
+ if (db_col.type != col_type) || (db_col.default != col_default)
95
+ db.change_column(table_name, col_name.to_sym, col_type.to_sym, default: col_default)
96
+ end
88
97
  end
89
98
  end
90
99
  end
data/lib/ez/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module EZ
2
- VERSION = "0.9.6"
2
+ VERSION = "0.9.7"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ez
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.6
4
+ version: 0.9.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jeff Cohen
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 0.7.1
20
- type: :development
19
+ version: '0.7'
20
+ type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 0.7.1
26
+ version: '0.7'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement