commento 0.1.0
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 +7 -0
- data/README.md +64 -0
- data/Rakefile +12 -0
- data/lib/commento/adapters/active_record.rb +49 -0
- data/lib/commento/configuration.rb +11 -0
- data/lib/commento/dsl.rb +24 -0
- data/lib/commento/helpers.rb +25 -0
- data/lib/commento/version.rb +5 -0
- data/lib/commento.rb +42 -0
- metadata +110 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: f2558be497fdf71eca0c553371dc0fb09fdb348a04bc930289ad3696a571a4fa
|
4
|
+
data.tar.gz: c4e41098d7c6ffcff077d5c18545e7c0d03fcb33b3b1273bb4cfac0406cabf38
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: f93c37134940512adbe7fd03600d7aeb0f4af032b9196c55bc5d011a310138c5f2fbefc4b8962abd9aa7cbc88ab41156cff8121eb80142df91e057146c60f779
|
7
|
+
data.tar.gz: c66a4d0f5e6a626982a3842d743b712fe7023fd3303369426a9f911d4b4c3fbb7ebd00712b02de70f192857b4aa5adb0573bf7a782f4aa054ce3946c90e33da6
|
data/README.md
ADDED
@@ -0,0 +1,64 @@
|
|
1
|
+
# Commento
|
2
|
+
|
3
|
+
Commento provides DSL for Ruby on Rails application for working with database comments.
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
Add this line to your application's Gemfile:
|
8
|
+
```ruby
|
9
|
+
gem 'commento'
|
10
|
+
```
|
11
|
+
|
12
|
+
And then execute:
|
13
|
+
```bash
|
14
|
+
$ bundle install
|
15
|
+
```
|
16
|
+
|
17
|
+
## Gem configuration
|
18
|
+
|
19
|
+
### Initializer
|
20
|
+
|
21
|
+
Add configuration line to config/initializers/commento.rb:
|
22
|
+
|
23
|
+
#### ActiveRecord
|
24
|
+
|
25
|
+
```ruby
|
26
|
+
require 'commento/adapters/active_record'
|
27
|
+
|
28
|
+
Commento.configure do |config|
|
29
|
+
config.adapter = Commento::Adapters::ActiveRecord.new
|
30
|
+
end
|
31
|
+
```
|
32
|
+
|
33
|
+
### Models
|
34
|
+
|
35
|
+
Update you application model
|
36
|
+
```ruby
|
37
|
+
class ApplicationRecord < ActiveRecord::Base
|
38
|
+
include Commento::Helpers
|
39
|
+
end
|
40
|
+
```
|
41
|
+
|
42
|
+
## Usage
|
43
|
+
|
44
|
+
Commento provides helpers for models for setting and getting table's column comments.
|
45
|
+
|
46
|
+
### Set table's column comment
|
47
|
+
|
48
|
+
```ruby
|
49
|
+
User.set_column_comment(:email, 'Required field for user authentication')
|
50
|
+
```
|
51
|
+
|
52
|
+
or reset comment by skiping value
|
53
|
+
```ruby
|
54
|
+
User.set_column_comment(:email)
|
55
|
+
```
|
56
|
+
|
57
|
+
### Read table's column comment
|
58
|
+
|
59
|
+
```ruby
|
60
|
+
User.get_column_comment(:email)
|
61
|
+
```
|
62
|
+
|
63
|
+
## License
|
64
|
+
The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
|
data/Rakefile
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'active_record'
|
4
|
+
|
5
|
+
module Commento
|
6
|
+
module Adapters
|
7
|
+
class ActiveRecord
|
8
|
+
# Public: The name of the adapter.
|
9
|
+
attr_reader :name
|
10
|
+
|
11
|
+
# Public: Initialize a new ActiveRecord adapter instance.
|
12
|
+
#
|
13
|
+
# name - The Symbol name for this adapter. Optional (default :active_record)
|
14
|
+
def initialize(options={})
|
15
|
+
@name = options.fetch(:name, :active_record)
|
16
|
+
end
|
17
|
+
|
18
|
+
# Public: Sets comment for table's column.
|
19
|
+
def set_column_comment(table_name, column_name, value)
|
20
|
+
sql = "COMMENT ON COLUMN #{table_name}.#{column_name} IS "
|
21
|
+
sql += value ? "'#{value}'" : 'NULL'
|
22
|
+
execute(sql)
|
23
|
+
end
|
24
|
+
|
25
|
+
# Public: Returns comment for table's column.
|
26
|
+
def get_column_comment(table_name, column_name)
|
27
|
+
sql = <<-SQL.squish
|
28
|
+
SELECT
|
29
|
+
cols.column_name,
|
30
|
+
pg_catalog.col_description(c.oid, cols.ordinal_position::int)
|
31
|
+
FROM pg_catalog.pg_class c, information_schema.columns cols
|
32
|
+
WHERE
|
33
|
+
cols.table_catalog = '#{Rails.configuration.database_configuration[Rails.env]["database"]}' AND
|
34
|
+
cols.table_schema = 'public' AND
|
35
|
+
cols.table_name = '#{table_name}' AND
|
36
|
+
cols.table_name = c.relname
|
37
|
+
SQL
|
38
|
+
column_data = execute(sql).to_a.find { |column| column['column_name'].to_sym == column_name }
|
39
|
+
column_data.presence ? column_data['col_description'] : nil
|
40
|
+
end
|
41
|
+
|
42
|
+
private
|
43
|
+
|
44
|
+
def execute(sql)
|
45
|
+
::ActiveRecord::Base.connection.execute(sql)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
data/lib/commento/dsl.rb
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Commento
|
4
|
+
class DSL
|
5
|
+
attr_reader :adapter
|
6
|
+
|
7
|
+
# Public: Returns a new instance of the DSL.
|
8
|
+
#
|
9
|
+
# adapter - The adapter that this DSL instance should use.
|
10
|
+
def initialize(adapter)
|
11
|
+
@adapter = adapter
|
12
|
+
end
|
13
|
+
|
14
|
+
# Public: Sets comment for table's column.
|
15
|
+
def set_column_comment(table_name, column_name, value)
|
16
|
+
adapter.set_column_comment(table_name, column_name, value)
|
17
|
+
end
|
18
|
+
|
19
|
+
# Public: Returns comment for table's column.
|
20
|
+
def get_column_comment(table_name, column_name)
|
21
|
+
adapter.get_column_comment(table_name, column_name)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Commento
|
4
|
+
module Helpers
|
5
|
+
def self.included(base)
|
6
|
+
base.class_eval do
|
7
|
+
extend ClassMethods
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
module ClassMethods
|
12
|
+
def set_column_comment(column_name, value=nil)
|
13
|
+
instance.set_column_comment(table_name, column_name, value)
|
14
|
+
end
|
15
|
+
|
16
|
+
def get_column_comment(column_name)
|
17
|
+
instance.get_column_comment(table_name, column_name)
|
18
|
+
end
|
19
|
+
|
20
|
+
def instance
|
21
|
+
Commento.instance
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
data/lib/commento.rb
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'forwardable'
|
4
|
+
|
5
|
+
require 'commento/version'
|
6
|
+
require 'commento/configuration'
|
7
|
+
require 'commento/dsl'
|
8
|
+
require 'commento/helpers'
|
9
|
+
|
10
|
+
module Commento
|
11
|
+
extend self
|
12
|
+
extend Forwardable
|
13
|
+
|
14
|
+
# Public: Given an adapter returns a handy DSL to all the commentp goodness.
|
15
|
+
def new(adapter)
|
16
|
+
DSL.new(adapter)
|
17
|
+
end
|
18
|
+
|
19
|
+
# Public: Configure commentp.
|
20
|
+
#
|
21
|
+
# Commento.configure do |config|
|
22
|
+
# config.adapter = Commento::Adapters::ActiveRecord.new
|
23
|
+
# end
|
24
|
+
#
|
25
|
+
def configure
|
26
|
+
yield configuration
|
27
|
+
end
|
28
|
+
|
29
|
+
# Public: Returns Commento::Configuration instance.
|
30
|
+
def configuration
|
31
|
+
@configuration ||= Configuration.new
|
32
|
+
end
|
33
|
+
|
34
|
+
# Public: Default per thread commentp instance if configured.
|
35
|
+
# Returns Commento::DSL instance.
|
36
|
+
def instance
|
37
|
+
Thread.current[:commento_instance] ||= new(configuration.adapter)
|
38
|
+
end
|
39
|
+
|
40
|
+
# Public: All the methods delegated to instance. These should match the interface of Commento::DSL.
|
41
|
+
def_delegators :instance, :adapter
|
42
|
+
end
|
metadata
ADDED
@@ -0,0 +1,110 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: commento
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Bogdanov Anton
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2023-08-01 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rubocop
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.39'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.39'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rubocop-performance
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.8'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.8'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rubocop-rake
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0.6'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0.6'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rubocop-rspec
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '2.0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '2.0'
|
69
|
+
description: Commento allows to work with database comments.
|
70
|
+
email:
|
71
|
+
- kortirso@gmail.com
|
72
|
+
executables: []
|
73
|
+
extensions: []
|
74
|
+
extra_rdoc_files: []
|
75
|
+
files:
|
76
|
+
- README.md
|
77
|
+
- Rakefile
|
78
|
+
- lib/commento.rb
|
79
|
+
- lib/commento/adapters/active_record.rb
|
80
|
+
- lib/commento/configuration.rb
|
81
|
+
- lib/commento/dsl.rb
|
82
|
+
- lib/commento/helpers.rb
|
83
|
+
- lib/commento/version.rb
|
84
|
+
homepage: https://github.com/kortirso/commento
|
85
|
+
licenses:
|
86
|
+
- MIT
|
87
|
+
metadata:
|
88
|
+
homepage_uri: https://github.com/kortirso/commento
|
89
|
+
source_code_uri: https://github.com/kortirso/commento
|
90
|
+
changelog_uri: https://github.com/kortirso/commento/blob/master/CHANGELOG.md
|
91
|
+
post_install_message:
|
92
|
+
rdoc_options: []
|
93
|
+
require_paths:
|
94
|
+
- lib
|
95
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
96
|
+
requirements:
|
97
|
+
- - ">="
|
98
|
+
- !ruby/object:Gem::Version
|
99
|
+
version: 2.7.0
|
100
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
101
|
+
requirements:
|
102
|
+
- - ">="
|
103
|
+
- !ruby/object:Gem::Version
|
104
|
+
version: '0'
|
105
|
+
requirements: []
|
106
|
+
rubygems_version: 3.4.1
|
107
|
+
signing_key:
|
108
|
+
specification_version: 4
|
109
|
+
summary: Work with database comments.
|
110
|
+
test_files: []
|