sql_view 0.0.1 → 0.0.2

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: e0c483bd4b3381f12564e802d7e4169de63644dee304521156471397e5214e4e
4
- data.tar.gz: c720532cb86979da70f0bcade52e1e74e5240ebe42e82f21288781511aa73861
3
+ metadata.gz: 0a7a2e1de23dc9d9523bfc1d6f0dfe65348a085ba81a0c5fc762d6ce64d0236e
4
+ data.tar.gz: 32f417176adaa3a7f1c65ca7bfb405d63236d0979bafd0fd106562bac018f68f
5
5
  SHA512:
6
- metadata.gz: 0613cd3a590e6a163c4f035cc6ff8361f2432c155e536dff873f5f6d8d60a78eceb6f9a2946512291c06bbe6d603e0c8da4c4c548e41fbc26079544fe3a6cfb8
7
- data.tar.gz: e9c49cfcac2404cd093a88e280d6bb4f8968cb40662bd04aec6ed3893b5bc68aedb108f194f3545add3946a82eb7e5b2c9abf997b241d535519d95b7dae96a95
6
+ metadata.gz: 3b32c1f94077eba3876764860bc3bc87fdd3e49386747f668d0682ebd3a87fe0417e48c48618d8f0c46040fcf43d20e0d114f3c955b0abea82591e478f7b91d9
7
+ data.tar.gz: f4a3534cc2cd8ba5e52156ddedda64a5d9d7016018ff28fca8f107291febdb5456001d8bef82c6f25c70f2ef0c8255d391223db1f1803be1f96f38ace3772505
@@ -14,11 +14,13 @@ module SqlView
14
14
  class #{class_name}View < SqlView::Model
15
15
  #{top_code}
16
16
 
17
- schema -> {#{schema_code} }
17
+ schema -> #{schema_code}
18
18
 
19
19
  extend_model_with do
20
20
  # sample how you can extend it, similar to regular AR model
21
21
  #
22
+ # include SomeConcern
23
+ #
22
24
  # belongs_to :user
23
25
  # has_many :posts
24
26
  #
@@ -28,7 +30,7 @@ class #{class_name}View < SqlView::Model
28
30
  end
29
31
  FILE
30
32
 
31
- create_file "db/migrate/#{self.class.next_migration_number("db/migrate")}_create_#{file_name}s_view.rb", <<-FILE
33
+ create_file "db/migrate/#{self.class.next_migration_number("db/migrate")}_create_#{file_name}_view.rb", <<-FILE
32
34
  class #{migration_class_name} < #{activerecord_migration_class}
33
35
  def up
34
36
  #{class_name}View.sql_view.up
@@ -59,11 +61,15 @@ FILE
59
61
  end
60
62
 
61
63
  def schema_code
62
- " #{args[0].presence || "\n # ActiveRecord::Relation or SQL\n # for example: User.where(active: true)\n " }"
64
+ if args[0].present?
65
+ "{ #{args[0]} }"
66
+ else
67
+ " { #{ "\n # ActiveRecord::Relation or SQL\n # for example: User.where(active: true)\n }" }"
68
+ end
63
69
  end
64
70
 
65
71
  def migration_class_name
66
- "Create#{class_name.tr('.', '').pluralize}View"
72
+ "Create#{class_name.tr('.', '')}View"
67
73
  end
68
74
 
69
75
  def activerecord_migration_class
@@ -85,4 +91,4 @@ FILE
85
91
 
86
92
  end
87
93
  end
88
- end
94
+ end
@@ -6,7 +6,16 @@ module SqlView
6
6
  # @api private
7
7
  module SchemaDumper
8
8
  class DBView < OpenStruct
9
+ def to_schema
10
+ <<-DEFINITION
11
+ create_sql_view "#{self.viewname}", sql: <<-\SQL
12
+ CREATE #{materialized_or_not} VIEW "#{self.viewname}" AS
13
+ #{escaped_definition.indent(2)}
14
+ SQL\n
15
+ DEFINITION
16
+ end
9
17
 
18
+ private
10
19
  def materialized?
11
20
  self.kind == "m"
12
21
  end
@@ -15,15 +24,6 @@ module SqlView
15
24
  materialized? ? " MATERIALIZED " : nil
16
25
  end
17
26
 
18
- def to_schema
19
- <<-DEFINITION
20
- create_sql_view "#{self.viewname}", sql: <<-\SQL
21
- CREATE #{materialized_or_not} VIEW "#{self.viewname}" AS
22
- #{escaped_definition.indent(2)}
23
- SQL
24
- DEFINITION
25
- end
26
-
27
27
  def escaped_definition
28
28
  definition.gsub("\\", "\\\\\\")
29
29
  end
@@ -40,15 +40,23 @@ module SqlView
40
40
  end
41
41
 
42
42
  dumpable_views_in_database.each do |viewname|
43
+ next if already_indexed?(viewname)
43
44
  view = DBView.new(get_view_info(viewname))
44
- #puts view.to_schema
45
45
  stream.puts(view.to_schema)
46
- #indexes(view.name, stream)
46
+ indexes(viewname, stream)
47
47
  end
48
48
  end
49
49
 
50
50
  private
51
51
 
52
+ # make sure view was added one time, because somehow was adding views two times
53
+ def already_indexed?(viewname)
54
+ @already_indexed ||= []
55
+ return true if @already_indexed.include?(viewname)
56
+ @already_indexed << viewname
57
+ false
58
+ end
59
+
52
60
  def dumpable_views_in_database
53
61
  @dumpable_views_in_database ||= ActiveRecord::Base.connection.views.reject do |viewname|
54
62
  ignored?(viewname)
@@ -1,3 +1,3 @@
1
1
  module SqlView
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
data/lib/sql_view.rb CHANGED
@@ -64,6 +64,7 @@ module SqlView
64
64
 
65
65
  def up
66
66
  view_sql = parent.sql_view_options[:sql_or_proc].call
67
+ raise "Please configure schema for #{parent} (association or SQL) for the view" if view_sql.to_s == ""
67
68
  sql = <<-SQL
68
69
  CREATE #{materialized_or_not} VIEW #{parent.view_name} AS
69
70
  #{view_sql.respond_to?(:to_sql) ? view_sql.to_sql : view_sql };
@@ -103,6 +104,13 @@ module SqlView
103
104
  if parent.sql_view_options[:extend_model_with].present?
104
105
  klass.class_eval(&parent.sql_view_options[:extend_model_with])
105
106
  end
107
+ # to use e.associations.count for example
108
+ # because of the error undefined scan for nil class
109
+ klass.class_eval %Q{
110
+ def self.name
111
+ "#{parent.class}"
112
+ end
113
+ }
106
114
  klass
107
115
  end
108
116
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sql_view
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Igor Kasyanchuk
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-02-10 00:00:00.000000000 Z
11
+ date: 2022-02-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails