ahnnotate 0.4.0 → 0.5.0

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: d72eb34c9d755ad96bff225cb3a76df199af6a1620b2f07d4fb5abcd63c0cdd9
4
- data.tar.gz: cb087f502791daa1ef953876a9079baae139d8b86332547a32f9c4b2602ea176
3
+ metadata.gz: c932b95899f0bc90dfe57b0481f976ed98aeb4981e61bce5e03d4efaf3cb8c07
4
+ data.tar.gz: fcacaac6f5719affb613cd96028d77321bcc156fed75514c7414c5ba04002290
5
5
  SHA512:
6
- metadata.gz: b40e4182bf70ddc46900b7ed21c6ae00041d48d771dc714224e9211f1819fce2a508b021eb6c0d77bf1c96c0982109c80e6d05daacf470209838f211131330b6
7
- data.tar.gz: 2b24c5e2a2b4294c2014686b1a56198f4f8dc084f0a7d7fe557b4178301612193c543009148e5593566f35b280d5434ad1e8d98d776a7f8b962ee4fdfa42e0af
6
+ metadata.gz: 5f44bb30bf66d538f3e2416b4013354b8512f651cef5c07f3950aeae71063666a02a9638ba3e7b8edf01a2ef841e127dcca7dd7384acee81e7d2a81415043ef5
7
+ data.tar.gz: b81a860aa49609ee8942e3e9b17ede7891b75e5cbcb2938e64d231b3e8fb411acfb8d96f50109651f6c9123489d13354319024661efa2d16735ccf9ac7799fb2
@@ -0,0 +1,64 @@
1
+ name: Test
2
+
3
+ on: [push]
4
+
5
+ jobs:
6
+ build:
7
+ runs-on: ubuntu-latest
8
+
9
+ services:
10
+ postgres:
11
+ image: postgres:11.5
12
+ env:
13
+ POSTGRES_USER: postgres
14
+ POSTGRES_PASSWORD: postgres
15
+ POSTGRES_DB: ahnnotate_test
16
+ ports:
17
+ - 5432/tcp
18
+ options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5
19
+
20
+ strategy:
21
+ fail-fast: false
22
+ matrix:
23
+ gemfile:
24
+ - gemfiles/rails60.gemfile
25
+ - gemfiles/rails52.gemfile
26
+ - gemfiles/rails51.gemfile
27
+ - gemfiles/rails50.gemfile
28
+ - gemfiles/rails42.gemfile
29
+ - gemfiles/rails41.gemfile
30
+ include:
31
+ - gemfile: gemfiles/rails60.gemfile
32
+ ruby: 2.6.x
33
+ - gemfile: gemfiles/rails52.gemfile
34
+ ruby: 2.5.x
35
+ - gemfile: gemfiles/rails51.gemfile
36
+ ruby: 2.5.x
37
+ - gemfile: gemfiles/rails50.gemfile
38
+ ruby: 2.5.x
39
+ - gemfile: gemfiles/rails42.gemfile
40
+ ruby: 2.4.x
41
+ - gemfile: gemfiles/rails41.gemfile
42
+ ruby: 2.3.x
43
+
44
+ steps:
45
+ - uses: actions/checkout@v1
46
+ - name: Set up Ruby
47
+ uses: actions/setup-ruby@v1
48
+ with:
49
+ ruby-version: ${{ matrix.ruby }}
50
+ - name: Install build dependencies
51
+ run: |
52
+ sudo apt-get install -y sqlite3 libsqlite3-dev libpq-dev
53
+ - name: Install dependencies
54
+ env:
55
+ BUNDLE_GEMFILE: ${{ matrix.gemfile }}
56
+ run: |
57
+ gem install bundler -v 1.17.3
58
+ bundle install --jobs 4 --retry 3
59
+ - name: Test
60
+ env:
61
+ BUNDLE_GEMFILE: ${{ matrix.gemfile }}
62
+ AHNNOTATE_POSTGRES_DATABASE_URL: postgres://postgres:postgres@localhost:${{ job.services.postgres.ports[5432] }}/ahnnotate_test
63
+ run: |
64
+ bundle exec rake
data/.gitignore CHANGED
@@ -7,4 +7,4 @@
7
7
  /spec/reports/
8
8
  /tmp/
9
9
  /gemfiles/*.lock
10
- /Gemfile.lock
10
+ /.env
data/.travis.yml CHANGED
@@ -6,6 +6,7 @@ rvm:
6
6
  - 2.5.3
7
7
  - 2.1.10
8
8
  gemfile:
9
+ - gemfiles/rails60.gemfile
9
10
  - gemfiles/rails52.gemfile
10
11
  - gemfiles/rails51.gemfile
11
12
  - gemfiles/rails50.gemfile
data/Appraisals CHANGED
@@ -1,3 +1,8 @@
1
+ appraise "rails60" do
2
+ gem "activerecord", "~> 6.0.0"
3
+ gem "sqlite3", ">= 1.4"
4
+ end
5
+
1
6
  appraise "rails52" do
2
7
  gem "activerecord", "~> 5.2.2"
3
8
  end
@@ -8,14 +13,19 @@ end
8
13
 
9
14
  appraise "rails50" do
10
15
  gem "activerecord", "~> 5.0.7"
16
+ gem "sqlite3", "< 1.4"
11
17
  end
12
18
 
13
19
  appraise "rails42" do
14
20
  gem "activerecord", "~> 4.2.11"
21
+ gem "pg", "~> 0.15"
22
+ gem "sqlite3", "< 1.4"
15
23
  end
16
24
 
17
25
  appraise "rails41" do
18
26
  gem "activerecord", "~> 4.1.16"
27
+ gem "pg", "~> 0.15"
28
+ gem "sqlite3", "< 1.4"
19
29
  end
20
30
 
21
31
  # vim: syntax=ruby
data/Gemfile.lock ADDED
@@ -0,0 +1,63 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ ahnnotate (0.5.0)
5
+ activerecord (>= 4.0.0)
6
+ parser
7
+
8
+ GEM
9
+ remote: https://rubygems.org/
10
+ specs:
11
+ activemodel (6.0.0)
12
+ activesupport (= 6.0.0)
13
+ activerecord (6.0.0)
14
+ activemodel (= 6.0.0)
15
+ activesupport (= 6.0.0)
16
+ activesupport (6.0.0)
17
+ concurrent-ruby (~> 1.0, >= 1.0.2)
18
+ i18n (>= 0.7, < 2)
19
+ minitest (~> 5.1)
20
+ tzinfo (~> 1.1)
21
+ zeitwerk (~> 2.1, >= 2.1.8)
22
+ appraisal (2.2.0)
23
+ bundler
24
+ rake
25
+ thor (>= 0.14.0)
26
+ ast (2.4.0)
27
+ coderay (1.1.2)
28
+ concurrent-ruby (1.1.5)
29
+ dotenv (2.7.1)
30
+ i18n (1.6.0)
31
+ concurrent-ruby (~> 1.0)
32
+ method_source (0.9.2)
33
+ minitest (5.11.3)
34
+ parser (2.6.5.0)
35
+ ast (~> 2.4.0)
36
+ pg (1.1.4)
37
+ pry (0.12.2)
38
+ coderay (~> 1.1.0)
39
+ method_source (~> 0.9.0)
40
+ rake (10.5.0)
41
+ sqlite3 (1.4.1)
42
+ thor (0.20.3)
43
+ thread_safe (0.3.6)
44
+ tzinfo (1.2.5)
45
+ thread_safe (~> 0.1)
46
+ zeitwerk (2.1.10)
47
+
48
+ PLATFORMS
49
+ ruby
50
+
51
+ DEPENDENCIES
52
+ ahnnotate!
53
+ appraisal
54
+ bundler (~> 1.17)
55
+ dotenv
56
+ minitest (~> 5.0)
57
+ pg
58
+ pry
59
+ rake (~> 10.0)
60
+ sqlite3
61
+
62
+ BUNDLED WITH
63
+ 1.17.3
data/ahnnotate.gemspec CHANGED
@@ -30,8 +30,8 @@ DESC
30
30
  spec.add_development_dependency "pg"
31
31
  spec.add_development_dependency "pry"
32
32
  spec.add_development_dependency "appraisal"
33
+ spec.add_development_dependency "dotenv"
33
34
 
34
- spec.add_runtime_dependency "activerecord", ">= 4.0.0", "< 6"
35
+ spec.add_runtime_dependency "activerecord", ">= 4.0.0"
35
36
  spec.add_runtime_dependency "parser"
36
- spec.add_runtime_dependency "proc_party"
37
37
  end
@@ -3,5 +3,7 @@
3
3
  source "https://rubygems.org"
4
4
 
5
5
  gem "activerecord", "~> 4.1.16"
6
+ gem "pg", "~> 0.15"
7
+ gem "sqlite3", "< 1.4"
6
8
 
7
9
  gemspec path: "../"
@@ -3,5 +3,7 @@
3
3
  source "https://rubygems.org"
4
4
 
5
5
  gem "activerecord", "~> 4.2.11"
6
+ gem "pg", "~> 0.15"
7
+ gem "sqlite3", "< 1.4"
6
8
 
7
9
  gemspec path: "../"
@@ -3,5 +3,6 @@
3
3
  source "https://rubygems.org"
4
4
 
5
5
  gem "activerecord", "~> 5.0.7"
6
+ gem "sqlite3", "< 1.4"
6
7
 
7
8
  gemspec path: "../"
@@ -0,0 +1,8 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "activerecord", "~> 6.0.0"
6
+ gem "sqlite3", ">= 1.4"
7
+
8
+ gemspec path: "../"
@@ -0,0 +1,20 @@
1
+ module Ahnnotate
2
+ class Abilities
3
+ def initialize(connection)
4
+ @connection = connection
5
+ @adapter_name = connection.adapter_name.downcase
6
+ end
7
+
8
+ def foreign_key?
9
+ if @adapter_name == "sqlite"
10
+ return false
11
+ end
12
+
13
+ if !@connection.respond_to?(:foreign_keys)
14
+ return false
15
+ end
16
+
17
+ true
18
+ end
19
+ end
20
+ end
@@ -1,16 +1,35 @@
1
1
  module Ahnnotate
2
2
  class Column
3
3
  attr_reader :name
4
- attr_reader :type
5
4
 
6
- def initialize(name:, type:, nullable:, primary_key:, default:)
5
+ def self.sql_type_map
6
+ @sql_type_map ||=
7
+ begin
8
+ map = Hash.new { |_self, k| k }
9
+ map["character varying"] = "varchar"
10
+ map["character"] = "char"
11
+ map["datetime"] = "timestamp"
12
+ map["double precision"] = "double"
13
+ map["time with time zone"] = "time"
14
+ map["time without time zone"] = "timetz"
15
+ map["timestamp with time zone"] = "timestamptz"
16
+ map["timestamp without time zone"] = "timestamp"
17
+ map
18
+ end
19
+ end
20
+
21
+ def initialize(name:, sql_type:, nullable:, primary_key:, default:)
7
22
  @name = name
8
- @type = type
23
+ @sql_type = sql_type.to_s.downcase.gsub(/\(.*?\)/, "")
9
24
  @nullable = nullable
10
25
  @primary_key = primary_key
11
26
  @default = default
12
27
  end
13
28
 
29
+ def type
30
+ self.class.sql_type_map[@sql_type]
31
+ end
32
+
14
33
  def details
15
34
  if @details
16
35
  return @details
@@ -15,7 +15,7 @@ module Ahnnotate
15
15
  # Named to fit the ModelSchema interface. This is basically `Class#name`
16
16
  attr_accessor :name
17
17
  # Named to fit the ModelSchema interface. This is the "outer class"
18
- attr_accessor :parent
18
+ attr_accessor :module_parent
19
19
  # Named to fit the ModelSchema interface. This is the class that the
20
20
  # current class inherits from. This is computed, whereas
21
21
  # `claimed_superclass` is what is parsed from the source
@@ -31,13 +31,13 @@ module Ahnnotate
31
31
  attr_accessor :path
32
32
 
33
33
  def initialize(name,
34
- parent: nil,
34
+ module_parent: nil,
35
35
  is_a_kind_of_activerecord_base: false,
36
36
  claimed_superclass: nil,
37
37
  explicit_table_name: nil,
38
38
  abstract_class: nil)
39
39
  self.name = name
40
- self.parent = parent
40
+ self.module_parent = parent
41
41
  self.is_a_kind_of_activerecord_base = is_a_kind_of_activerecord_base
42
42
  self.claimed_superclass = claimed_superclass
43
43
  self.explicit_table_name = explicit_table_name
@@ -80,11 +80,17 @@ module Ahnnotate
80
80
  superclass.base_class
81
81
  end
82
82
 
83
+ # Named to fit the ModelSchema interface. It was originally implemented
84
+ # in ActiveRecord::Inheritance in Rails 6.0.
85
+ def base_class?
86
+ base_class == self
87
+ end
88
+
83
89
  # Named to fit the ModelSchema interface. It was originally implemented
84
90
  # in ActiveSupport::Introspection
85
- def parents
86
- if parent
87
- [parent, *parent.parent]
91
+ def module_parents
92
+ if module_parent
93
+ [module_parent, *module_parent.module_parent]
88
94
  else
89
95
  []
90
96
  end
@@ -132,7 +138,26 @@ module Ahnnotate
132
138
  end
133
139
  end
134
140
 
141
+ module ActiveRecord4And5Compatibility
142
+ # Named to fit the ModelSchema interface. It was originally implemented
143
+ # in ActiveSupport::CoreExt::Module::Introspection in Rails 6.0.
144
+ def parent
145
+ module_parent
146
+ end
147
+
148
+ # def parent=(parent_)
149
+ # self.module_parent = parent_
150
+ # end
151
+
152
+ # Named to fit the ModelSchema interface. It was originally implemented
153
+ # in ActiveSupport::CoreExt::Module::Introspection in Rails 6.0.
154
+ def parents
155
+ module_parents
156
+ end
157
+ end
158
+
135
159
  include ActiveRecord4Compatibility
160
+ include ActiveRecord4And5Compatibility
136
161
  end
137
162
  end
138
163
  end
@@ -67,7 +67,7 @@ module Ahnnotate
67
67
 
68
68
  classlike = ModuleNode.new(class_name.to_s)
69
69
  classlike.claimed_superclass = superclass_name.to_s
70
- classlike.parent = parent
70
+ classlike.module_parent = parent
71
71
 
72
72
  classlike
73
73
  end
@@ -2,7 +2,9 @@ module Ahnnotate
2
2
  module Facet
3
3
  module Models
4
4
  class ResolveActiveRecordModels
5
- include ProcParty
5
+ def to_proc
6
+ method(:call).to_proc
7
+ end
6
8
 
7
9
  def call(object_space)
8
10
  tree = {}
@@ -2,7 +2,9 @@ module Ahnnotate
2
2
  module Facet
3
3
  module Models
4
4
  class ResolveClassRelationships
5
- include ProcParty
5
+ def to_proc
6
+ method(:call).to_proc
7
+ end
6
8
 
7
9
  def call(extracted_classes)
8
10
  object_space =
@@ -19,7 +21,7 @@ module Ahnnotate
19
21
  object_space["::ActiveRecord::Base"] =
20
22
  ModuleNode.new(
21
23
  "ActiveRecord::Base",
22
- parent: object_space[""],
24
+ module_parent: object_space[""],
23
25
  abstract_class: nil
24
26
  )
25
27
  object_space["::ActiveRecord::Base"].is_active_record_base = true
@@ -0,0 +1,22 @@
1
+ module Ahnnotate
2
+ class ForeignKey
3
+ attr_accessor :name
4
+ attr_accessor :from_column
5
+ attr_accessor :to_table
6
+ attr_accessor :to_column
7
+
8
+ def initialize(**args)
9
+ args.each do |key, value|
10
+ public_send("#{key}=", value)
11
+ end
12
+ end
13
+
14
+ def from
15
+ from_column
16
+ end
17
+
18
+ def to
19
+ "#{to_table}##{to_column}"
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,62 @@
1
+ require "ahnnotate"
2
+
3
+ # This RSpec matcher only works for Rails. Here's a quick usage example:
4
+ #
5
+ # require "rails_helper"
6
+ # require "ahnnotate/rspec"
7
+ #
8
+ # RSpec.describe Ahnnotate do
9
+ # it { is_expected.to be_up_to_date }
10
+ # end
11
+ class AhnnotateUpToDateMatcher
12
+ attr_reader :actual
13
+ attr_reader :expected
14
+
15
+ def diffable?
16
+ true
17
+ end
18
+
19
+ def matches?(_)
20
+ options = Ahnnotate::Options.new(fix: false)
21
+ config = Ahnnotate::Config.load(root: Rails.root)
22
+ main = Ahnnotate::Function::Main.new(Rails.root, options, config)
23
+
24
+ main.call
25
+
26
+ writes = main.vfs.instance_variable_get(:@driver).changes
27
+
28
+ format = proc do |vfs_hash|
29
+ vfs_hash
30
+ .map { |path, contents| "~~~ #{path} ~~~\n#{contents}" }
31
+ .join("\n")
32
+ end
33
+
34
+ expected = writes.map { |path, _content| [path, File.read(path)] }.to_h
35
+ @expected = format.call(expected)
36
+ @actual = format.call(writes)
37
+
38
+ @actual == @expected
39
+ end
40
+
41
+ def description
42
+ "be up to date (you may need to run `rails db:test:prepare`)"
43
+ end
44
+
45
+ def failure_message
46
+ "expected Ahnnotate to be up to date"
47
+ end
48
+
49
+ def failure_message_when_negated
50
+ "expected Ahnnotate not to be up to date"
51
+ end
52
+ end
53
+
54
+ module AhnnotateBeUpToDate
55
+ def be_up_to_date
56
+ AhnnotateUpToDateMatcher.new
57
+ end
58
+ end
59
+
60
+ RSpec.configure do |c|
61
+ c.include AhnnotateBeUpToDate
62
+ end
@@ -3,6 +3,7 @@ module Ahnnotate
3
3
  attr_accessor :name
4
4
  attr_accessor :columns
5
5
  attr_accessor :indexes
6
+ attr_accessor :foreign_keys
6
7
 
7
8
  def initialize(**args)
8
9
  args.each do |key, value|
@@ -32,6 +33,13 @@ module Ahnnotate
32
33
  output.puts comment
33
34
  end
34
35
 
36
+ if foreign_keys.any?
37
+ output.puts "#{comment} Foreign keys:"
38
+ output.puts comment
39
+ output.puts tabularizer.call(foreign_keys, [:from, :to, :name])
40
+ output.puts comment
41
+ end
42
+
35
43
  output.string
36
44
  end
37
45
 
@@ -4,6 +4,7 @@ module Ahnnotate
4
4
 
5
5
  def initialize(connection = ActiveRecord::Base.connection)
6
6
  @connection = connection
7
+ @abilities = Abilities.new(connection)
7
8
  end
8
9
 
9
10
  def to_h
@@ -28,7 +29,7 @@ module Ahnnotate
28
29
 
29
30
  Column.new(
30
31
  name: c.name,
31
- type: c.type.to_s,
32
+ sql_type: c.sql_type,
32
33
  nullable: c.null,
33
34
  primary_key: is_primary_key,
34
35
  default: c.default
@@ -49,10 +50,25 @@ module Ahnnotate
49
50
  )
50
51
  end
51
52
 
53
+ foreign_keys =
54
+ if @abilities.foreign_key?
55
+ @connection.foreign_keys(table_name).map do |fk|
56
+ ForeignKey.new(
57
+ name: fk.name,
58
+ from_column: fk.column,
59
+ to_table: fk.to_table,
60
+ to_column: fk.primary_key
61
+ )
62
+ end
63
+ else
64
+ []
65
+ end
66
+
52
67
  yield Table.new(
53
68
  name: table_name,
54
69
  columns: columns,
55
- indexes: indexes
70
+ indexes: indexes,
71
+ foreign_keys: foreign_keys,
56
72
  )
57
73
  end
58
74
  end
@@ -1,3 +1,3 @@
1
1
  module Ahnnotate
2
- VERSION = "0.4.0"
2
+ VERSION = "0.5.0"
3
3
  end
@@ -1,7 +1,16 @@
1
1
  module Ahnnotate
2
2
  module VfsDriver
3
3
  class ReadOnlyFilesystem < Filesystem
4
- def []=(_path, _content)
4
+ attr_reader :changes
5
+
6
+ def initialize(root:)
7
+ super
8
+ @changes = {}
9
+ end
10
+
11
+ def []=(path, content)
12
+ @changes[path] = content
13
+ nil
5
14
  end
6
15
  end
7
16
  end
data/lib/ahnnotate.rb CHANGED
@@ -1,13 +1,13 @@
1
1
  require "yaml"
2
2
  require "active_record"
3
3
  require "parser/current"
4
- require "proc_party"
5
4
  require "stringio"
6
5
 
7
6
  require "ahnnotate/refinement/dig"
8
7
  require "ahnnotate/refinement/pathname_glob"
9
8
  require "ahnnotate/refinement/yield_self"
10
9
 
10
+ require "ahnnotate/abilities"
11
11
  require "ahnnotate/active_record_version"
12
12
  require "ahnnotate/column"
13
13
  require "ahnnotate/command"
@@ -29,6 +29,7 @@ require "ahnnotate/facet/models/processor"
29
29
  require "ahnnotate/facet/models/resolve_active_record_models"
30
30
  require "ahnnotate/facet/models/resolve_class_relationships"
31
31
  require "ahnnotate/facet/models/standin"
32
+ require "ahnnotate/foreign_key"
32
33
  require "ahnnotate/index"
33
34
  require "ahnnotate/options"
34
35
  require "ahnnotate/table"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ahnnotate
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Zach Ahn
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-01-29 00:00:00.000000000 Z
11
+ date: 2019-10-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -109,41 +109,35 @@ dependencies:
109
109
  - !ruby/object:Gem::Version
110
110
  version: '0'
111
111
  - !ruby/object:Gem::Dependency
112
- name: activerecord
112
+ name: dotenv
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
115
  - - ">="
116
116
  - !ruby/object:Gem::Version
117
- version: 4.0.0
118
- - - "<"
119
- - !ruby/object:Gem::Version
120
- version: '6'
121
- type: :runtime
117
+ version: '0'
118
+ type: :development
122
119
  prerelease: false
123
120
  version_requirements: !ruby/object:Gem::Requirement
124
121
  requirements:
125
122
  - - ">="
126
123
  - !ruby/object:Gem::Version
127
- version: 4.0.0
128
- - - "<"
129
- - !ruby/object:Gem::Version
130
- version: '6'
124
+ version: '0'
131
125
  - !ruby/object:Gem::Dependency
132
- name: parser
126
+ name: activerecord
133
127
  requirement: !ruby/object:Gem::Requirement
134
128
  requirements:
135
129
  - - ">="
136
130
  - !ruby/object:Gem::Version
137
- version: '0'
131
+ version: 4.0.0
138
132
  type: :runtime
139
133
  prerelease: false
140
134
  version_requirements: !ruby/object:Gem::Requirement
141
135
  requirements:
142
136
  - - ">="
143
137
  - !ruby/object:Gem::Version
144
- version: '0'
138
+ version: 4.0.0
145
139
  - !ruby/object:Gem::Dependency
146
- name: proc_party
140
+ name: parser
147
141
  requirement: !ruby/object:Gem::Requirement
148
142
  requirements:
149
143
  - - ">="
@@ -159,7 +153,7 @@ dependencies:
159
153
  description: 'Ahnnotate comments on your ActiveRecord models with their respective
160
154
  schemas!
161
155
 
162
- '
156
+ '
163
157
  email:
164
158
  - engineering@zachahn.com
165
159
  executables:
@@ -167,10 +161,12 @@ executables:
167
161
  extensions: []
168
162
  extra_rdoc_files: []
169
163
  files:
164
+ - ".github/workflows/ruby.yml"
170
165
  - ".gitignore"
171
166
  - ".travis.yml"
172
167
  - Appraisals
173
168
  - Gemfile
169
+ - Gemfile.lock
174
170
  - LICENSE.txt
175
171
  - README.md
176
172
  - Rakefile
@@ -185,7 +181,9 @@ files:
185
181
  - gemfiles/rails50.gemfile
186
182
  - gemfiles/rails51.gemfile
187
183
  - gemfiles/rails52.gemfile
184
+ - gemfiles/rails60.gemfile
188
185
  - lib/ahnnotate.rb
186
+ - lib/ahnnotate/abilities.rb
189
187
  - lib/ahnnotate/active_record_version.rb
190
188
  - lib/ahnnotate/cli.rb
191
189
  - lib/ahnnotate/column.rb
@@ -199,6 +197,7 @@ files:
199
197
  - lib/ahnnotate/facet/models/resolve_active_record_models.rb
200
198
  - lib/ahnnotate/facet/models/resolve_class_relationships.rb
201
199
  - lib/ahnnotate/facet/models/standin.rb
200
+ - lib/ahnnotate/foreign_key.rb
202
201
  - lib/ahnnotate/function/format.rb
203
202
  - lib/ahnnotate/function/main.rb
204
203
  - lib/ahnnotate/function/niam.rb
@@ -211,6 +210,7 @@ files:
211
210
  - lib/ahnnotate/refinement/dig.rb
212
211
  - lib/ahnnotate/refinement/pathname_glob.rb
213
212
  - lib/ahnnotate/refinement/yield_self.rb
213
+ - lib/ahnnotate/rspec.rb
214
214
  - lib/ahnnotate/table.rb
215
215
  - lib/ahnnotate/tables.rb
216
216
  - lib/ahnnotate/version.rb
@@ -237,8 +237,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
237
237
  - !ruby/object:Gem::Version
238
238
  version: '0'
239
239
  requirements: []
240
- rubyforge_project:
241
- rubygems_version: 2.7.6
240
+ rubygems_version: 3.0.3
242
241
  signing_key:
243
242
  specification_version: 4
244
243
  summary: Ahnnotate comments on your ActiveRecord models with their respective schemas!