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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 112ffb3483f88eacd72945f7890fac2d21b8cfa8f4559b13210eb76d80e36e53
4
- data.tar.gz: b2a580e9ddc239a8d2fb948ac5c571733915d9badf2c84385f3d21aaede7ab71
3
+ metadata.gz: 024d60493f6cff6f11e88759519c7bea3527e085d0bd888f8cc84ed74dba112c
4
+ data.tar.gz: 722da23fe55ebe66b84377ff62ac851d20417950173bb977f21bd7678710f279
5
5
  SHA512:
6
- metadata.gz: edcaf9424b611f0ec0b08fb511ef2f7f9d245756040e8adf829101264846c0768f24e4d52d143d64fed4e8a05d58aa820758023e6f1d49e83ed0b87e64c0aa70
7
- data.tar.gz: 267dbf8b5693e541abbe3d97154adddfd839d2ea0e3e88475146c0d4739b6f1b42cfd2d01959984d8d7a68851375875a0e11ec28fbf1d5ab8b5c942f2d9f9efd
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
@@ -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*<\s*Sequel::Model/)
15
- new(match[1].constantize).annotate(path, options)
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
@@ -1,4 +1,4 @@
1
- class Manufacturer < Sequel::Model
1
+ class Manufacturer < ABC
2
2
  end
3
3
 
4
4
  # Table: manufacturers
@@ -8,5 +8,5 @@
8
8
  # Referenced By:
9
9
  # items | items_manufacturer_name_fkey | (manufacturer_name, manufacturer_location) REFERENCES manufacturers(name, location)
10
10
 
11
- class Manufacturer < Sequel::Model
11
+ class Manufacturer < ABC
12
12
  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()
@@ -0,0 +1,3 @@
1
+ module ModelNamespace
2
+ class Itms < Model(:items); end
3
+ end
@@ -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
- pg_user = ENV['PGUSER'] || 'postgres'
7
- db_name = ENV['SEQUEL_ANNOTATE_DB'] || 'sequel-annotate_spec'
8
- system("dropdb", "-U", pg_user, db_name)
9
- system("createdb", "-U", pg_user, db_name)
10
- DB = Sequel.postgres(db_name, :user=>pg_user)
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 < Sequel::Model
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.2.0
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-04-02 00:00:00.000000000 Z
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