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 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