metka 0.1.0 → 0.1.1

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