rbs_rails 0.10.0 → 0.10.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: 4daa0714f5e127bc21e33e9737983999459a2dbb690202c6dc86408a68ef82b0
4
- data.tar.gz: 54f9a8c04ca0f22c1a391a4d5a47c0294c54f50741843226655ae9e8175b0a51
3
+ metadata.gz: 16dd1379f4621410d78e352c8fdc8750d3fb469d8c395aee77de85d2f8570279
4
+ data.tar.gz: e50b75cc1e64a8630c1508805d146d2cf5edad065cdcab502f910fcb84bc51ef
5
5
  SHA512:
6
- metadata.gz: f85bdbf2f59f5accdd54a062f5d5412f432b9d91b62b6f4ced371fbcc0d565ad661a1015d9193e4ee9add64ef69cf7243dd5603dc22b05182b59f3a122ecad2e
7
- data.tar.gz: f75cc735df8961b0714af8bf4f38771f01542ed4162e69fb8adc677dcbfec0885fe15296bc84006b955d9370004dfcd6070fbd761c0b220f02d16f062fadcbba
6
+ metadata.gz: 12136882eeebf0e2219af85c6393f6b8a74c4bc6f268b57d5b9c931a99fa42ee81ed9deb9885d4209f28dbf43d9d57563641379031c199397cf520a7dc417f10
7
+ data.tar.gz: 40ffd8a1525501f736f759769a95183e3933da0c1063e5e939b6c4ccf23ae9d98731ef782c23f6c7eb6b7280b2c39f535379886edeb3abeb423810cf2ead58ac
data/CHANGELOG.md CHANGED
@@ -2,6 +2,24 @@
2
2
 
3
3
  ## master (unreleased)
4
4
 
5
+ ## 0.10.1 (2022-03-23)
6
+
7
+ ### Bug Fixes
8
+
9
+ * Generate dependency types of relations. [#216](https://github.com/pocke/rbs_rails/pull/216)
10
+
11
+ ## 0.10.0 (2022-03-18)
12
+
13
+ ### New Features
14
+
15
+ * Support `has_secure_password`. [#193](https://github.com/pocke/rbs_rails/pull/193)
16
+ * Support Active Storage. [#195](https://github.com/pocke/rbs_rails/pull/195)
17
+
18
+ ### Bug Fixes
19
+
20
+ * Use absolute path for class names to avoid using incorrect class. [#201](https://github.com/pocke/rbs_rails/pull/201)
21
+ * Fix NoMethodError on enum with `_default` option. [#208](https://github.com/pocke/rbs_rails/pull/208)
22
+
5
23
  ## 0.9.0 (2021-09-18)
6
24
 
7
25
  ### New Features
data/DESIGN.md ADDED
@@ -0,0 +1,36 @@
1
+ # RBS Generator for Active Record models
2
+
3
+ The RBS generator for Active Record models focus on generating methods that are generated by Active Record.
4
+ For example, it generates the following things.
5
+
6
+ * Classes which inherit `ActiveRecord::Base`
7
+ * Generated methods by Active Record
8
+ * Column methods. e.g. `name` and `name=` methods for `name` column.
9
+ * Relation methods. e.g. `users` and `users=` methods for `has_many :users`.
10
+ * And so on.
11
+
12
+ I designed it generates "valid" RBSs. "valid" means the generated RBSs pass `rbs validate` only with `rbs collection`.
13
+ So if you need to do something to pass `rbs validate`, it's a bug. For example, if you see `RBS::NoSuperclassFoundError` for the generated RBS, it is a bug.
14
+
15
+ RBS Rails focuses on generating "generated" methods. It means it doesn't generate methods that are defined by the user.
16
+ For example:
17
+
18
+ ```ruby
19
+ class User < ApplicationRecord
20
+ # RBS Rails generates articles methods and so on
21
+ # becasue they are generated by Active Record.
22
+ has_many :articles
23
+
24
+ # RBS Rails does NOT generate full_name method
25
+ # because the user defines it.
26
+ def full_name
27
+ first_name + last_name
28
+ end
29
+ end
30
+ ```
31
+
32
+ You can use `rbs prototype rb`, `rbs prototype runtime` and `typeprof` commands to generate them.
33
+
34
+ # RBS Generator for the path helper
35
+
36
+ TODO
data/Gemfile CHANGED
@@ -6,7 +6,7 @@ git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
6
6
  gemspec
7
7
 
8
8
  gem "rake", "~> 13.0"
9
- gem 'rails', '< 6.1', '>= 6.0'
9
+ gem 'rails', '< 7', '>= 6.0'
10
10
  gem 'rbs', '>= 2'
11
11
  gem 'steep'
12
12
  gem 'minitest'
data/Gemfile.lock CHANGED
@@ -1,68 +1,72 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rbs_rails (0.10.0)
4
+ rbs_rails (0.10.1)
5
5
  parser
6
6
  rbs (>= 1)
7
7
 
8
8
  GEM
9
9
  remote: https://rubygems.org/
10
10
  specs:
11
- actioncable (6.0.4.7)
12
- actionpack (= 6.0.4.7)
11
+ actioncable (6.1.5)
12
+ actionpack (= 6.1.5)
13
+ activesupport (= 6.1.5)
13
14
  nio4r (~> 2.0)
14
15
  websocket-driver (>= 0.6.1)
15
- actionmailbox (6.0.4.7)
16
- actionpack (= 6.0.4.7)
17
- activejob (= 6.0.4.7)
18
- activerecord (= 6.0.4.7)
19
- activestorage (= 6.0.4.7)
20
- activesupport (= 6.0.4.7)
16
+ actionmailbox (6.1.5)
17
+ actionpack (= 6.1.5)
18
+ activejob (= 6.1.5)
19
+ activerecord (= 6.1.5)
20
+ activestorage (= 6.1.5)
21
+ activesupport (= 6.1.5)
21
22
  mail (>= 2.7.1)
22
- actionmailer (6.0.4.7)
23
- actionpack (= 6.0.4.7)
24
- actionview (= 6.0.4.7)
25
- activejob (= 6.0.4.7)
23
+ actionmailer (6.1.5)
24
+ actionpack (= 6.1.5)
25
+ actionview (= 6.1.5)
26
+ activejob (= 6.1.5)
27
+ activesupport (= 6.1.5)
26
28
  mail (~> 2.5, >= 2.5.4)
27
29
  rails-dom-testing (~> 2.0)
28
- actionpack (6.0.4.7)
29
- actionview (= 6.0.4.7)
30
- activesupport (= 6.0.4.7)
31
- rack (~> 2.0, >= 2.0.8)
30
+ actionpack (6.1.5)
31
+ actionview (= 6.1.5)
32
+ activesupport (= 6.1.5)
33
+ rack (~> 2.0, >= 2.0.9)
32
34
  rack-test (>= 0.6.3)
33
35
  rails-dom-testing (~> 2.0)
34
36
  rails-html-sanitizer (~> 1.0, >= 1.2.0)
35
- actiontext (6.0.4.7)
36
- actionpack (= 6.0.4.7)
37
- activerecord (= 6.0.4.7)
38
- activestorage (= 6.0.4.7)
39
- activesupport (= 6.0.4.7)
37
+ actiontext (6.1.5)
38
+ actionpack (= 6.1.5)
39
+ activerecord (= 6.1.5)
40
+ activestorage (= 6.1.5)
41
+ activesupport (= 6.1.5)
40
42
  nokogiri (>= 1.8.5)
41
- actionview (6.0.4.7)
42
- activesupport (= 6.0.4.7)
43
+ actionview (6.1.5)
44
+ activesupport (= 6.1.5)
43
45
  builder (~> 3.1)
44
46
  erubi (~> 1.4)
45
47
  rails-dom-testing (~> 2.0)
46
48
  rails-html-sanitizer (~> 1.1, >= 1.2.0)
47
- activejob (6.0.4.7)
48
- activesupport (= 6.0.4.7)
49
+ activejob (6.1.5)
50
+ activesupport (= 6.1.5)
49
51
  globalid (>= 0.3.6)
50
- activemodel (6.0.4.7)
51
- activesupport (= 6.0.4.7)
52
- activerecord (6.0.4.7)
53
- activemodel (= 6.0.4.7)
54
- activesupport (= 6.0.4.7)
55
- activestorage (6.0.4.7)
56
- actionpack (= 6.0.4.7)
57
- activejob (= 6.0.4.7)
58
- activerecord (= 6.0.4.7)
59
- marcel (~> 1.0.0)
60
- activesupport (6.0.4.7)
52
+ activemodel (6.1.5)
53
+ activesupport (= 6.1.5)
54
+ activerecord (6.1.5)
55
+ activemodel (= 6.1.5)
56
+ activesupport (= 6.1.5)
57
+ activestorage (6.1.5)
58
+ actionpack (= 6.1.5)
59
+ activejob (= 6.1.5)
60
+ activerecord (= 6.1.5)
61
+ activesupport (= 6.1.5)
62
+ marcel (~> 1.0)
63
+ mini_mime (>= 1.1.0)
64
+ activesupport (6.1.5)
61
65
  concurrent-ruby (~> 1.0, >= 1.0.2)
62
- i18n (>= 0.7, < 2)
63
- minitest (~> 5.1)
64
- tzinfo (~> 1.1)
65
- zeitwerk (~> 2.2, >= 2.2.2)
66
+ i18n (>= 1.6, < 2)
67
+ minitest (>= 5.1)
68
+ tzinfo (~> 2.0)
69
+ zeitwerk (~> 2.3)
66
70
  ast (2.4.2)
67
71
  builder (3.2.4)
68
72
  concurrent-ruby (1.1.9)
@@ -98,32 +102,32 @@ GEM
98
102
  rack (2.2.3)
99
103
  rack-test (1.1.0)
100
104
  rack (>= 1.0, < 3)
101
- rails (6.0.4.7)
102
- actioncable (= 6.0.4.7)
103
- actionmailbox (= 6.0.4.7)
104
- actionmailer (= 6.0.4.7)
105
- actionpack (= 6.0.4.7)
106
- actiontext (= 6.0.4.7)
107
- actionview (= 6.0.4.7)
108
- activejob (= 6.0.4.7)
109
- activemodel (= 6.0.4.7)
110
- activerecord (= 6.0.4.7)
111
- activestorage (= 6.0.4.7)
112
- activesupport (= 6.0.4.7)
113
- bundler (>= 1.3.0)
114
- railties (= 6.0.4.7)
105
+ rails (6.1.5)
106
+ actioncable (= 6.1.5)
107
+ actionmailbox (= 6.1.5)
108
+ actionmailer (= 6.1.5)
109
+ actionpack (= 6.1.5)
110
+ actiontext (= 6.1.5)
111
+ actionview (= 6.1.5)
112
+ activejob (= 6.1.5)
113
+ activemodel (= 6.1.5)
114
+ activerecord (= 6.1.5)
115
+ activestorage (= 6.1.5)
116
+ activesupport (= 6.1.5)
117
+ bundler (>= 1.15.0)
118
+ railties (= 6.1.5)
115
119
  sprockets-rails (>= 2.0.0)
116
120
  rails-dom-testing (2.0.3)
117
121
  activesupport (>= 4.2.0)
118
122
  nokogiri (>= 1.6)
119
123
  rails-html-sanitizer (1.4.2)
120
124
  loofah (~> 2.3)
121
- railties (6.0.4.7)
122
- actionpack (= 6.0.4.7)
123
- activesupport (= 6.0.4.7)
125
+ railties (6.1.5)
126
+ actionpack (= 6.1.5)
127
+ activesupport (= 6.1.5)
124
128
  method_source
125
- rake (>= 0.8.7)
126
- thor (>= 0.20.3, < 2.0)
129
+ rake (>= 12.2)
130
+ thor (~> 1.0)
127
131
  rainbow (3.1.1)
128
132
  rake (13.0.6)
129
133
  rb-fsevent (0.11.1)
@@ -149,9 +153,8 @@ GEM
149
153
  terminal-table (3.0.2)
150
154
  unicode-display_width (>= 1.1.1, < 3)
151
155
  thor (1.2.1)
152
- thread_safe (0.3.6)
153
- tzinfo (1.2.9)
154
- thread_safe (~> 0.1)
156
+ tzinfo (2.0.4)
157
+ concurrent-ruby (~> 1.0)
155
158
  unicode-display_width (2.1.0)
156
159
  websocket-driver (0.7.5)
157
160
  websocket-extensions (>= 0.1.0)
@@ -164,11 +167,11 @@ PLATFORMS
164
167
 
165
168
  DEPENDENCIES
166
169
  minitest
167
- rails (>= 6.0, < 6.1)
170
+ rails (>= 6.0, < 7)
168
171
  rake (~> 13.0)
169
172
  rbs (>= 2)
170
173
  rbs_rails!
171
174
  steep
172
175
 
173
176
  BUNDLED WITH
174
- 2.2.27
177
+ 2.3.9
data/README.md CHANGED
@@ -35,44 +35,30 @@ Then, the following three tasks are available.
35
35
  * `rbs_rails:all`: Execute all tasks of RBS Rails
36
36
 
37
37
 
38
+ ### Install RBS for `rails` gem
38
39
 
40
+ You need to install `rails` gem's RBS files. I highly recommend using `rbs collection`.
41
+
42
+ 1. Add `gem 'rails'` to your `Gemfile`.
43
+ 1. Then execute the following commands
44
+ ```console
45
+ $ bundle install
46
+ $ bundle exec rbs collection install
47
+ ```
39
48
 
40
49
  ### Steep integration
41
50
 
42
- You need to specify the following libraries by `Steepfile`.
51
+ Put the following code as `Steepfile`.
43
52
 
44
53
  ```ruby
45
- # Steepfile
46
-
47
54
  target :app do
48
55
  signature 'sig'
49
56
 
50
57
  check 'app'
51
-
52
- repo_path "path/to/rbs_repo"
53
-
54
- library 'pathname'
55
- library 'logger'
56
- library 'mutex_m'
57
- library 'date'
58
- library 'monitor'
59
- library 'singleton'
60
- library 'tsort'
61
- library 'time'
62
-
63
- library 'rack'
64
-
65
- library 'activesupport'
66
- library 'actionpack'
67
- library 'activejob'
68
- library 'activemodel'
69
- library 'actionview'
70
- library 'activerecord'
71
- library 'railties'
72
58
  end
73
59
  ```
74
60
 
75
- You need to put RBS repo to `path/to/rbs_repo`. See https://github.com/ruby/gem_rbs_collection
61
+ That's all! Now you can check your Rails app statically with `steep check` command.
76
62
 
77
63
  ## Development
78
64
 
@@ -122,9 +122,13 @@ module RbsRails
122
122
 
123
123
  private def has_many
124
124
  klass.reflect_on_all_associations(:has_many).map do |a|
125
+ @dependencies << a.klass.name
126
+
125
127
  singular_name = a.name.to_s.singularize
126
128
  type = Util.module_name(a.klass)
127
129
  collection_type = "#{type}::ActiveRecord_Associations_CollectionProxy"
130
+ @dependencies << collection_type
131
+
128
132
  <<~RUBY.chomp
129
133
  def #{a.name}: () -> #{collection_type}
130
134
  def #{a.name}=: (#{collection_type} | Array[#{type}]) -> (#{collection_type} | Array[#{type}])
@@ -136,6 +140,8 @@ module RbsRails
136
140
 
137
141
  private def has_one
138
142
  klass.reflect_on_all_associations(:has_one).map do |a|
143
+ @dependencies << a.klass.name unless a.polymorphic?
144
+
139
145
  type = a.polymorphic? ? 'untyped' : Util.module_name(a.klass)
140
146
  type_optional = optional(type)
141
147
  <<~RUBY.chomp
@@ -151,6 +157,8 @@ module RbsRails
151
157
 
152
158
  private def belongs_to
153
159
  klass.reflect_on_all_associations(:belongs_to).map do |a|
160
+ @dependencies << a.klass.name unless a.polymorphic?
161
+
154
162
  type = a.polymorphic? ? 'untyped' : Util.module_name(a.klass)
155
163
  type_optional = optional(type)
156
164
  # @type var methods: Array[String]
@@ -1,14 +1,14 @@
1
1
  module RbsRails
2
2
  class DependencyBuilder
3
- attr_reader :deps
3
+ attr_reader :deps, :done
4
4
 
5
5
  def initialize
6
6
  @deps = []
7
+ @done = Set.new(['ActiveRecord::Base', 'ActiveRecord', 'Object'])
7
8
  end
8
9
 
9
10
  def build
10
11
  dep_rbs = +""
11
- done = Set.new(['ActiveRecord::Base', 'ActiveRecord', 'Object'])
12
12
  deps.uniq!
13
13
  while dep = deps.shift
14
14
  next unless done.add?(dep)
@@ -44,6 +44,7 @@ module RbsRails
44
44
 
45
45
  sig = RbsRails::ActiveRecord.class_to_rbs(klass, dependencies: dep_builder.deps)
46
46
  path.write sig
47
+ dep_builder.done << klass.name
47
48
  end
48
49
 
49
50
  if dep_rbs = dep_builder.build
@@ -2,5 +2,5 @@ module RbsRails
2
2
  # Because of copy_signatures is defined by lib/rbs_rails.rb
3
3
  # @dynamic self.copy_signatures
4
4
 
5
- VERSION = "0.10.0"
5
+ VERSION = "0.10.1"
6
6
  end
@@ -67,7 +67,7 @@ gems:
67
67
  remote: https://github.com/ruby/gem_rbs_collection.git
68
68
  repo_dir: gems
69
69
  - name: activerecord
70
- version: '6.0'
70
+ version: '6.1'
71
71
  source:
72
72
  type: git
73
73
  name: ruby/gem_rbs_collection
@@ -75,7 +75,7 @@ gems:
75
75
  remote: https://github.com/ruby/gem_rbs_collection.git
76
76
  repo_dir: gems
77
77
  - name: activestorage
78
- version: '6.0'
78
+ version: '6.1'
79
79
  source:
80
80
  type: git
81
81
  name: ruby/gem_rbs_collection
@@ -5,6 +5,7 @@ end
5
5
 
6
6
  class RbsRails::ActiveRecord::Generator
7
7
  @parse_model_file: nil | Parser::AST::Node
8
+ @dependencies: Array[String]
8
9
 
9
10
  def initialize: (singleton(ActiveRecord::Base) klass, dependencies: Array[String]) -> untyped
10
11
 
@@ -1,6 +1,7 @@
1
1
  module RbsRails
2
2
  class DependencyBuilder
3
3
  attr_reader deps: Array[String]
4
+ attr_reader done: Set[String]
4
5
 
5
6
  def initialize: () -> void
6
7
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rbs_rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.10.0
4
+ version: 0.10.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Masataka Pocke Kuwabara
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-03-18 00:00:00.000000000 Z
11
+ date: 2022-03-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: parser
@@ -50,6 +50,7 @@ files:
50
50
  - ".gitignore"
51
51
  - ".gitmodules"
52
52
  - CHANGELOG.md
53
+ - DESIGN.md
53
54
  - Gemfile
54
55
  - Gemfile.lock
55
56
  - LICENSE