sql_view 0.0.1 → 0.0.2

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