metka 0.1.0 → 0.1.1

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: 39ab36dcfd96ca5a0773e6c51f6746df34516397f73d225e2eb2777ed33c2874
4
- data.tar.gz: 614c80c9f813166657f33db212284b98fd7f85fd0d1cb872150c4f6a3608d559
3
+ metadata.gz: cf64e63f73da3ffb7c87e5d3806a13e4c7d09356e63b8d52ffefd27bf7dda8df
4
+ data.tar.gz: 98c5808ea5d3426a15b9eb7084b6b07f7c3242ee8f6b96ca53f20cb5f9987208
5
5
  SHA512:
6
- metadata.gz: cb6ad90572fcae32a8208cad5181c7c8f1f0bdca0522c8ee0a25768089bd6eaf1e2d9903c704e72510943c0a1483267277b09466358bacc6ee98154e9209ecdb
7
- data.tar.gz: ee0ef24ceb8d6b39fe771fa588072572803293c9f1307f5df08d4e424ea158848c12aa65fad0936364dfb3f7e27a8991d2325bc75af879d297e6532f74effcea
6
+ metadata.gz: 24ac1c6bc72b5a98a879897f7cdddd721df052cb84841a0e3adaefff003d9414a0adf1c40cc663a5ed468f5e320a83af09ea76461fb66ce7625cfe7c2f8b376a
7
+ data.tar.gz: cf3750a9f2dccedd27afac2f967187e6e5655483fc7bd696b0da9d63308bc79279cb90c141db0e25d333dde79ce54235b674f2495f4fe904fccdeb6591419927
data/README.md CHANGED
@@ -57,18 +57,78 @@ There are several strategies to get tag statistics
57
57
 
58
58
  ### View Strategy
59
59
 
60
- The easiest way to implement but the most slow on SELECT.
60
+ Data about taggings will be agregated in SQL View. The easiest way to implement but the most slow on SELECT.
61
61
 
62
62
  ```bash
63
63
  rails g metka:strategies:view --source-table-name=NAME_OF_TABLE_WITH_TAGS
64
64
  ```
65
65
 
66
+ The code above will generate a migration that creates view to store aggregated data about tag in `NAME_OF_TABLE_WITH_TAGS` table.
67
+
68
+ Lets take a look at real example. We have a `notes` table with `tags` column.
69
+
70
+ | Column | Type | Default |
71
+ |--------|---------------------|-----------------------------------|
72
+ | id | integer | nextval('notes_id_seq'::regclass) |
73
+ | body | text | |
74
+ | tags | character varying[] | '{}'::character varying[] |
75
+
76
+ Now lets generate a migration.
77
+
78
+ ```bash
79
+ RAILS_ENV=test rails g metka:strategies:view --source-table-name=notes
80
+ ```
81
+
82
+ The result would be:
83
+
84
+ ```ruby
85
+ # frozen_string_literal: true
86
+
87
+ class CreateTaggedNotesView < ActiveRecord::Migration[5.0]
88
+ def up
89
+ execute <<-SQL
90
+ CREATE OR REPLACE VIEW tagged_notes AS
91
+
92
+ SELECT UNNEST
93
+ ( tags ) AS tag_name,
94
+ COUNT ( * ) AS taggings_count
95
+ FROM
96
+ notes
97
+ GROUP BY
98
+ name;
99
+ SQL
100
+ end
101
+
102
+ def down
103
+ execute <<-SQL
104
+ DROP VIEW tagged_notes;
105
+ SQL
106
+ end
107
+ end
108
+ ```
109
+
110
+ Now lets take a look at `tagged_notes` view.
111
+
112
+ | tag_name | taggings_count |
113
+ |----------|----------------|
114
+ | Ruby | 124056 |
115
+ | React | 30632 |
116
+ | Rails | 28696 |
117
+ | Crystal | 6566 |
118
+ | Elixir | 3475 |
119
+
120
+ Now you can create `TaggedNote` model and work with the view like you usually do with Rails models.
121
+
66
122
  ### Materialized View Strategy
67
123
 
124
+ Similar to the strategy above, but the view will be Materialized and refreshed with the trigger
125
+
68
126
  TBD
69
127
 
70
128
  ### Table Strategy with Triggers
71
129
 
130
+
131
+
72
132
  TBD
73
133
 
74
134
  ## Development
@@ -6,7 +6,7 @@ class <%= @migration_class_name %> < ActiveRecord::Migration<%= ActiveRecord::VE
6
6
  CREATE OR REPLACE VIEW <%= view_name %> AS
7
7
 
8
8
  SELECT UNNEST
9
- ( <%= source_column_name %> ) AS name,
9
+ ( <%= source_column_name %> ) AS <%= source_column_name.singularize %>_name,
10
10
  COUNT ( * ) AS taggings_count
11
11
  FROM
12
12
  <%= source_table_name %>
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Metka
4
- VERSION = "0.1.0"
4
+ VERSION = "0.1.1"
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: metka
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Igor Alexandrov