ez 1.2.0 → 1.3.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 +4 -4
- data/README.md +17 -16
- data/lib/ez/domain_modeler.rb +1 -0
- data/lib/ez/schema_modifier.rb +6 -2
- data/lib/ez/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 651da5699fe33ae98d63db37c12d5d75e30fdc68
|
4
|
+
data.tar.gz: 1b3d7f79c58140be5a7c1a9403b47d930b3837cb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d481867135942e93bd1deadca16ccb1c6400ebb5c03adaeedfac3341bcf2354e40a205c4b238fff6aa069454169712b0b74185cb3fc71fe6df5910ef1fa68f0f
|
7
|
+
data.tar.gz: 596950b0f26338731f1d02fc3284b03a397375567ae9dcf80a8a05834adf6ac6d72f47e8036bd38d47bfde73b86895af5a2c1c9b1186b5b239c9ca30de3ed7d8
|
data/README.md
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
# EZ
|
2
2
|
|
3
|
-
**Version 1.
|
3
|
+
**Version 1.3.0**
|
4
4
|
|
5
5
|
*For educational purposes only.*
|
6
6
|
|
7
|
-
|
7
|
+
Easy domain modeling in Rails without migrations. Applies instant schema changes based on a file named `db/models.yml`. Diffs are determined automatically and applied to the database. Embraces Rails column naming conventions by providing happy-path default types for most columns.
|
8
8
|
|
9
|
-
Also enhances the rails console.
|
9
|
+
Also, enhances the rails console and provides extra ActiveRecord helper methods.
|
10
10
|
|
11
11
|
|
12
12
|
## Usage
|
@@ -24,33 +24,31 @@ rake db:migrate
|
|
24
24
|
to generate a skeleton `db/models.yml` that you should edit.
|
25
25
|
|
26
26
|
|
27
|
-
##
|
27
|
+
## Get Started
|
28
28
|
|
29
29
|
1. Run `rake db:migrate` to initially generate a file named `db/models.yml`.
|
30
30
|
|
31
31
|
2. Use `db/models.yml` to define your schema. Database schema changes are applied directly and triggered automatically in development mode. (`rake db:migrate` will also trigger the changes). Foreign-key indexes will be generated automatically.
|
32
32
|
|
33
|
-
3. You can
|
33
|
+
3. You can still use traditional Rails migrations for any additional indexes, database constraints, etc.
|
34
34
|
|
35
|
-
4. Run `rake db:migrate:preview` to do a "dry run"
|
35
|
+
4. Run `rake db:migrate:preview` to do a "dry run" and see what would change based your `db/models.yml` file.
|
36
36
|
|
37
37
|
## Features
|
38
38
|
|
39
39
|
|
40
40
|
### 1. Domain Modeling Enhancements
|
41
41
|
|
42
|
-
* Enables **instant domain modeling without migrations** by using a file named `db/models.yml`.
|
43
42
|
* This gem enhances `db:migrate` to incorporate the `db/models.yml` file automatically.
|
44
43
|
* Run `rake db:migrate` to initially generate a file named `db/models.yml`. It will have some self-documenting comments inside of it.
|
45
|
-
*
|
46
|
-
*
|
47
|
-
* If you prefer, just run `rake db:migrate` whenever you modify `db/models.yml`.
|
44
|
+
* Just run `rake db:migrate` whenever you modify `db/models.yml`.
|
45
|
+
* Starting the rails console will automatically run any pending table updates, and `reload!` will also trigger table updates while inside the console.
|
48
46
|
* `rake db:migrate` will run any pending migrations *after* any table updates from the `db/models.yml` file.
|
49
47
|
|
50
48
|
|
51
49
|
**Syntax Guide for `db/models.yml`**
|
52
50
|
|
53
|
-
It's just
|
51
|
+
It's just YML and the syntax is very simple:
|
54
52
|
|
55
53
|
```
|
56
54
|
Book:
|
@@ -97,7 +95,8 @@ Author
|
|
97
95
|
book_count
|
98
96
|
```
|
99
97
|
|
100
|
-
|
98
|
+
**Default Values**
|
99
|
+
You can specify default values for columns in several ways. Suppose we want to make sure that `copies_on_hand` always has the value `0` for new rows. First, the fancy way:
|
101
100
|
|
102
101
|
```
|
103
102
|
Book
|
@@ -131,7 +130,7 @@ Author
|
|
131
130
|
book_count: integer default 0
|
132
131
|
```
|
133
132
|
|
134
|
-
And for the extra lazy like me, you can use parentheses:
|
133
|
+
And for the extra lazy, like me, you can just use parentheses:
|
135
134
|
|
136
135
|
```
|
137
136
|
Book
|
@@ -154,17 +153,19 @@ Author
|
|
154
153
|
### 2. More Model Enhancements
|
155
154
|
|
156
155
|
* Adds ActiveRecord::Base `.read` method so that models have complete *CRUD*: `.create`, `.read`, `.update`, and `.delete`. When given an integer, `.read` becomes a synonym for `.find`. When given a hash, it is a synonym for `.where`.
|
157
|
-
* Adds
|
158
|
-
* Adds
|
156
|
+
* Adds `.sample` method to choose a random row.
|
157
|
+
* Adds `.to_ez' to generate a snippet from legacy models that you can paste into models.yml.
|
158
|
+
|
159
159
|
|
160
160
|
|
161
161
|
### 3. Beginner-friendly "It Just Works" console
|
162
162
|
|
163
|
+
* Starting `rails console` will automatically apply any pending database changes, followed by any traditional migrations.
|
163
164
|
* Solves the "no connection" message in Rails >= 4.0.1 (if you try to inspect a model without making a query first) by establishing an initial connection to the development database.
|
164
165
|
* Shows helpful instructions when console starts, including the list of model classes found in the application.
|
165
166
|
* Uses Hirb for table-like display. (Requires Hirb ~> 0.7.1)
|
166
167
|
* Patches Hirb to allow nice table output for `ActiveRecord::Relation` lists (i.e. result of `.all`, `.where`) and hash-like output for single ActiveRecord objects, such as the result of `.find_by(:title => 'Apollo 13')`.
|
167
|
-
* `reload!` will
|
168
|
+
* `reload!` will also force a schema update from the console.
|
168
169
|
|
169
170
|
|
170
171
|
### 4. Controller and View Enhancements
|
data/lib/ez/domain_modeler.rb
CHANGED
@@ -150,6 +150,7 @@ module EZ
|
|
150
150
|
end
|
151
151
|
|
152
152
|
@spec[model][column_name] = { type: column_type, default: default_column_value}
|
153
|
+
@spec[model][column_name][:limit] = 1024 if column_type == 'binary'
|
153
154
|
@spec[model][column_name][:index] = true if column_name =~ /_id$/
|
154
155
|
end
|
155
156
|
end
|
data/lib/ez/schema_modifier.rb
CHANGED
@@ -86,7 +86,9 @@ module EZ
|
|
86
86
|
if !assume_missing
|
87
87
|
display_change "Adding new column '#{col_name}' as #{col_type} for model #{model_name}"
|
88
88
|
end
|
89
|
-
|
89
|
+
opts = { default: col_default }
|
90
|
+
opts[:limit] = data[:limit] if data[:limit]
|
91
|
+
db.add_column(table_name, col_name.to_sym, col_type.to_sym, opts) unless @dry_run
|
90
92
|
if data[:index]
|
91
93
|
display_change " (adding database index for '#{col_name}')"
|
92
94
|
db.add_index table_name, col_name.to_sym unless @dry_run
|
@@ -104,7 +106,9 @@ module EZ
|
|
104
106
|
end
|
105
107
|
|
106
108
|
if (db_col.type != col_type) || (db_col.default != col_default)
|
107
|
-
|
109
|
+
opts = { default: col_default }
|
110
|
+
opts[:limit] = data[:limit] if data[:limit]
|
111
|
+
db.change_column(table_name, col_name.to_sym, col_type.to_sym, opts) unless @dry_run
|
108
112
|
end
|
109
113
|
end
|
110
114
|
end
|
data/lib/ez/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ez
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jeff Cohen
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-02-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: hirb
|
@@ -133,7 +133,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
133
133
|
version: '0'
|
134
134
|
requirements: []
|
135
135
|
rubyforge_project:
|
136
|
-
rubygems_version: 2.4.
|
136
|
+
rubygems_version: 2.4.2
|
137
137
|
signing_key:
|
138
138
|
specification_version: 4
|
139
139
|
summary: For educational purposes only.
|