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 +4 -4
- data/ez.gemspec +1 -1
- data/lib/ez/domain_modeler.rb +6 -0
- data/lib/ez/schema_modifier.rb +26 -17
- data/lib/ez/version.rb +1 -1
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 46f68c1557debf7db379e3240a76ffad307d12f4
|
4
|
+
data.tar.gz: 3c88b18298f9e8c7d24bc0d6ce2e800b5c32f26c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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.
|
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'
|
data/lib/ez/domain_modeler.rb
CHANGED
@@ -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
|
|
data/lib/ez/schema_modifier.rb
CHANGED
@@ -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
|
-
|
69
|
+
db_columns = db.columns(table_name)
|
70
|
+
|
66
71
|
columns.each do |col_name, data|
|
67
|
-
col_type = data[:type]
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
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
|
-
|
82
|
-
|
83
|
-
|
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
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.
|
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
|
20
|
-
type: :
|
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
|
26
|
+
version: '0.7'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: bundler
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|