ez 0.9.6 → 0.9.7

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