sequel-annotate 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/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
|