sequel-annotate 1.2.0 → 1.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG +6 -0
- data/README.rdoc +23 -0
- data/lib/sequel/annotate.rb +11 -2
- data/spec/annotated_after/manufacturer.rb +1 -1
- data/spec/annotated_before/manufacturer.rb +1 -1
- data/spec/namespaced/itm_annotated.rb +24 -0
- data/spec/namespaced/itm_unannotated.rb +3 -0
- data/spec/sequel-annotate_spec.rb +32 -6
- data/spec/unannotated/manufacturer.rb +1 -1
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 024d60493f6cff6f11e88759519c7bea3527e085d0bd888f8cc84ed74dba112c
|
4
|
+
data.tar.gz: 722da23fe55ebe66b84377ff62ac851d20417950173bb977f21bd7678710f279
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1340b7bc98e1650fc91075a5cdd34d4e5f56c21a6c58b8b9c460b68d0bb8fb0997b82f7294d04d9f90b377b2b236057901f711c16a0233ff951948f1f48f39da
|
7
|
+
data.tar.gz: e64ebdcbe577333c76b94fbd45ea795eb918193e46493dd8dba76789214250faba6ab97b5c765d4143be68ecf28d7f29cc7bc76b52750b0ad1ff96e445b4a211
|
data/CHANGELOG
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
=== 1.3.0 (2018-07-17)
|
2
|
+
|
3
|
+
* Support :namespace option to specify namespace to add for models nested in namespaces (jeremyevans)
|
4
|
+
|
5
|
+
* Make Sequel::Annotate.annotate support STI classes and custom abstract base classes (a0s) (#7)
|
6
|
+
|
1
7
|
=== 1.2.0 (2018-04-02)
|
2
8
|
|
3
9
|
* Handle PostgreSQL 10+ identity columns when running on Sequel 5.7+ (jeremyevans)
|
data/README.rdoc
CHANGED
@@ -72,16 +72,39 @@ or
|
|
72
72
|
sa = Sequel::Annotate.new(Item)
|
73
73
|
sa.annotate('models/item.rb', position: :before)
|
74
74
|
|
75
|
+
If your models are nested in a namespace:
|
76
|
+
|
77
|
+
module ModelNamespace
|
78
|
+
class Item < Sequel::Model
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
Then you can use the +:namespace+ option to set the namespace to use:
|
83
|
+
|
84
|
+
Sequel::Annotate.annotate(Dir['models/*.rb'], namespace: 'ModelNamespace')
|
85
|
+
|
75
86
|
=== Rake Task
|
76
87
|
|
77
88
|
Here's an example rake task for sequel-annotate:
|
78
89
|
|
79
90
|
desc "Update model annotations"
|
80
91
|
task :annotate do
|
92
|
+
# Load the models first
|
93
|
+
Dir['models/*.rb'].each{|f| require_relative f}
|
94
|
+
|
81
95
|
require 'sequel/annotate'
|
82
96
|
Sequel::Annotate.annotate(Dir['models/*.rb'])
|
83
97
|
end
|
84
98
|
|
99
|
+
== Running Tests
|
100
|
+
|
101
|
+
Tests of sequel-annotate itself can be run with rake:
|
102
|
+
|
103
|
+
rake
|
104
|
+
|
105
|
+
Set the SEQUEL_ANNOTATE_SPEC_POSTGRES_URL environment variable or appropriate
|
106
|
+
libpq environment variables to specify which PostgreSQL database to connect to.
|
107
|
+
|
85
108
|
== License
|
86
109
|
|
87
110
|
MIT
|
data/lib/sequel/annotate.rb
CHANGED
@@ -10,9 +10,18 @@ module Sequel
|
|
10
10
|
# Sequel::Annotate.annotate(Dir['models/*.rb'])
|
11
11
|
def self.annotate(paths, options = {})
|
12
12
|
Sequel.extension :inflector
|
13
|
+
namespace = options[:namespace]
|
14
|
+
|
13
15
|
paths.each do |path|
|
14
|
-
if match = File.read(path).match(/class (\S+)\s
|
15
|
-
|
16
|
+
if match = File.read(path).match(/class (\S+)\s*</)
|
17
|
+
name = match[1]
|
18
|
+
if namespace
|
19
|
+
name = "#{namespace}::#{name}"
|
20
|
+
end
|
21
|
+
klass = name.constantize
|
22
|
+
if klass.ancestors.include?(Sequel::Model)
|
23
|
+
new(klass).annotate(path, options)
|
24
|
+
end
|
16
25
|
end
|
17
26
|
end
|
18
27
|
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module ModelNamespace
|
2
|
+
class Itms < Model(:items); end
|
3
|
+
end
|
4
|
+
|
5
|
+
# Table: items
|
6
|
+
# Columns:
|
7
|
+
# id | integer | PRIMARY KEY DEFAULT nextval('items_id_seq'::regclass)
|
8
|
+
# category_id | integer | NOT NULL
|
9
|
+
# manufacturer_name | character varying(50) |
|
10
|
+
# manufacturer_location | text |
|
11
|
+
# in_stock | boolean | DEFAULT false
|
12
|
+
# name | text | DEFAULT 'John'::text
|
13
|
+
# price | double precision | DEFAULT 0
|
14
|
+
# Indexes:
|
15
|
+
# items_pkey | PRIMARY KEY btree (id)
|
16
|
+
# name | UNIQUE btree (manufacturer_name, manufacturer_location)
|
17
|
+
# manufacturer_name | btree (manufacturer_name)
|
18
|
+
# Check constraints:
|
19
|
+
# pos_id | (id > 0)
|
20
|
+
# Foreign key constraints:
|
21
|
+
# items_category_id_fkey | (category_id) REFERENCES categories(id)
|
22
|
+
# items_manufacturer_name_fkey | (manufacturer_name, manufacturer_location) REFERENCES manufacturers(name, location)
|
23
|
+
# Triggers:
|
24
|
+
# valid_price | BEFORE INSERT OR UPDATE ON items FOR EACH ROW EXECUTE PROCEDURE valid_price()
|
@@ -1,16 +1,23 @@
|
|
1
1
|
require 'rubygems'
|
2
2
|
require 'fileutils'
|
3
3
|
require File.join(File.dirname(File.expand_path(__FILE__)), '../lib/sequel/annotate')
|
4
|
+
|
5
|
+
ENV['MT_NO_PLUGINS'] = '1' # Work around stupid autoloading of plugins
|
6
|
+
gem 'minitest'
|
4
7
|
require 'minitest/autorun'
|
5
8
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
SDB = Sequel.sqlite
|
9
|
+
DB = Sequel.connect(ENV['SEQUEL_ANNOTATE_SPEC_POSTGRES_URL'] || 'postgres:///sequel_annotate_test?user=sequel_annotate&password=sequel_annotate')
|
10
|
+
raise "test database name doesn't end with test" unless DB.get{current_database.function} =~ /test\z/
|
11
|
+
if defined?(JRUBY_VERSION)
|
12
|
+
SDB = Sequel.connect('jdbc:sqlite::memory:')
|
13
|
+
else
|
14
|
+
SDB = Sequel.sqlite
|
15
|
+
end
|
12
16
|
|
17
|
+
DB.drop_function(:valid_price) rescue nil
|
13
18
|
[DB, SDB].each do |db|
|
19
|
+
db.drop_table?(:items, :manufacturers, :categories)
|
20
|
+
|
14
21
|
db.create_table :categories do
|
15
22
|
primary_key :id
|
16
23
|
String :name, :index=>{:unique=>true, :name=>'categories_name_key'}, :null=>false
|
@@ -57,6 +64,11 @@ CREATE TRIGGER valid_price BEFORE INSERT OR UPDATE ON items
|
|
57
64
|
FOR EACH ROW EXECUTE PROCEDURE valid_price();
|
58
65
|
SQL
|
59
66
|
|
67
|
+
Minitest.after_run do
|
68
|
+
DB.drop_table(:items, :manufacturers, :categories)
|
69
|
+
DB.drop_function(:valid_price)
|
70
|
+
end
|
71
|
+
|
60
72
|
class ::Item < Sequel::Model; end
|
61
73
|
class ::Category < Sequel::Model; end
|
62
74
|
class ::Manufacturer < Sequel::Model; end
|
@@ -64,6 +76,14 @@ class ::SItem < Sequel::Model(SDB[:items]); end
|
|
64
76
|
class ::SCategory < Sequel::Model(SDB[:categories]); end
|
65
77
|
class ::SManufacturer < Sequel::Model(SDB[:manufacturers]); end
|
66
78
|
|
79
|
+
# Abstract Base Class
|
80
|
+
ABC = Class.new(Sequel::Model)
|
81
|
+
|
82
|
+
module ModelNamespace
|
83
|
+
Model = Class.new(Sequel::Model)
|
84
|
+
Model.def_Model(self)
|
85
|
+
class Itms < Model(:items); end
|
86
|
+
end
|
67
87
|
|
68
88
|
describe Sequel::Annotate do
|
69
89
|
def fix_pg_comment(comment)
|
@@ -193,4 +213,10 @@ OUTPUT
|
|
193
213
|
end
|
194
214
|
end
|
195
215
|
end
|
216
|
+
|
217
|
+
it ".annotate #{desc} should handle :namespace option" do
|
218
|
+
FileUtils.cp('spec/namespaced/itm_unannotated.rb', 'spec/tmp/')
|
219
|
+
Sequel::Annotate.annotate(["spec/tmp/itm_unannotated.rb"], :namespace=>'ModelNamespace')
|
220
|
+
File.read("spec/tmp/itm_unannotated.rb").must_equal fix_pg_comment(File.read('spec/namespaced/itm_annotated.rb'))
|
221
|
+
end
|
196
222
|
end
|
@@ -1,2 +1,2 @@
|
|
1
|
-
class Manufacturer <
|
1
|
+
class Manufacturer < ABC
|
2
2
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sequel-annotate
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jeremy Evans
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-07-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: sequel
|
@@ -99,6 +99,8 @@ files:
|
|
99
99
|
- spec/annotated_before/scategory.rb
|
100
100
|
- spec/annotated_before/sitem.rb
|
101
101
|
- spec/annotated_before/smanufacturer.rb
|
102
|
+
- spec/namespaced/itm_annotated.rb
|
103
|
+
- spec/namespaced/itm_unannotated.rb
|
102
104
|
- spec/sequel-annotate_spec.rb
|
103
105
|
- spec/unannotated/category.rb
|
104
106
|
- spec/unannotated/item.rb
|