rbs_rails 0.3.0 → 0.4.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.
@@ -2,21 +2,26 @@
2
2
 
3
3
  # TODO: Expose me to user
4
4
 
5
+ require 'bundler/inline'
6
+
7
+ gemfile do
8
+ source 'https://rubygems.org'
9
+ gem 'rbs', '>= 0.16'
10
+ end
11
+
5
12
  require 'rbs'
6
13
  require 'rbs/cli'
7
14
  require 'optparse'
8
15
 
9
16
  def env(options:)
10
- loader = RBS::EnvironmentLoader.new()
11
- options.setup(loader)
17
+ loader = options.loader
12
18
  RBS::Environment.from_loader(loader).resolve_type_names
13
19
  end
14
20
 
15
21
  def parse_option(argv)
16
22
  opt = OptionParser.new
17
23
  options = RBS::CLI::LibraryOptions.new
18
- cli = RBS::CLI.new(stdout: nil, stderr: nil)
19
- cli.library_parse(opt, options: options)
24
+ options.setup_library_options(opt)
20
25
 
21
26
  return opt.parse(argv), options
22
27
  end
@@ -79,8 +84,10 @@ def may_eql_member?(a, b)
79
84
  a.name.to_s.split('::').last == b.name.to_s.split('::').last
80
85
  end
81
86
 
82
- def update!(update_targets:)
87
+ def update!(update_targets:, only:)
83
88
  update_targets.group_by { |decl, _concern| decl.location.name }.each do |fname, target_decls|
89
+ next unless only.match?(fname)
90
+
84
91
  tree = RBS::Parser.parse_signature(File.read(fname))
85
92
  target_decls.each do |target_decl, concern|
86
93
  catch(:break) do
@@ -109,6 +116,8 @@ def run(argv)
109
116
  builder = RBS::DefinitionBuilder.new(env: env)
110
117
  matcher = FileMatcher.new(targets: targets)
111
118
 
119
+ only = ENV['ONLY']&.then { Regexp.new(_1) } || //
120
+
112
121
  update_targets = []
113
122
 
114
123
  env.class_decls.each do |_name, entry|
@@ -122,7 +131,7 @@ def run(argv)
122
131
  end
123
132
  end
124
133
 
125
- update!(update_targets: update_targets)
134
+ update!(update_targets: update_targets, only: only)
126
135
  end
127
136
 
128
137
  run(ARGV)
data/bin/rbs CHANGED
@@ -1,3 +1,3 @@
1
1
  #!/bin/bash
2
2
 
3
- rbs -rlogger -rpathname -rmutex_m -Isig -Iassets/sig $@
3
+ rbs -rlogger -rpathname -rmutex_m -rdate -Isig -Iassets/sig $@
@@ -66,21 +66,45 @@ module RbsRails
66
66
 
67
67
  private def has_many
68
68
  klass.reflect_on_all_associations(:has_many).map do |a|
69
- "def #{a.name}: () -> #{a.klass.name}::ActiveRecord_Associations_CollectionProxy"
69
+ singular_name = a.name.to_s.singularize
70
+ type = a.klass.name
71
+ collection_type = "#{type}::ActiveRecord_Associations_CollectionProxy"
72
+ <<~RUBY.chomp
73
+ def #{a.name}: () -> #{collection_type}
74
+ def #{a.name}=: (#{collection_type} | Array[#{type}]) -> (#{collection_type} | Array[#{type}])
75
+ def #{singular_name}_ids: () -> Array[Integer]
76
+ def #{singular_name}_ids=: (Array[Integer]) -> Array[Integer]
77
+ RUBY
70
78
  end.join("\n")
71
79
  end
72
80
 
73
81
  private def has_one
74
82
  klass.reflect_on_all_associations(:has_one).map do |a|
75
83
  type = a.polymorphic? ? 'untyped' : a.klass.name
76
- "def #{a.name}: () -> #{type}"
84
+ type_optional = optional(type)
85
+ <<~RUBY.chomp
86
+ def #{a.name}: () -> #{type}
87
+ def #{a.name}=: (#{type_optional}) -> #{type_optional}
88
+ def build_#{a.name}: (untyped) -> #{type}
89
+ def create_#{a.name}: (untyped) -> #{type}
90
+ def create_#{a.name}!: (untyped) -> #{type}
91
+ def reload_#{a.name}: () -> #{type_optional}
92
+ RUBY
77
93
  end.join("\n")
78
94
  end
79
95
 
80
96
  private def belongs_to
81
97
  klass.reflect_on_all_associations(:belongs_to).map do |a|
82
98
  type = a.polymorphic? ? 'untyped' : a.klass.name
83
- "def #{a.name}: () -> #{type}"
99
+ type_optional = optional(type)
100
+ <<~RUBY.chomp
101
+ def #{a.name}: () -> #{type}
102
+ def #{a.name}=: (#{type_optional}) -> #{type_optional}
103
+ def build_#{a.name}: (untyped) -> #{type}
104
+ def create_#{a.name}: (untyped) -> #{type}
105
+ def create_#{a.name}!: (untyped) -> #{type}
106
+ def reload_#{a.name}: () -> #{type_optional}
107
+ RUBY
84
108
  end.join("\n")
85
109
  end
86
110
 
@@ -238,7 +262,11 @@ module RbsRails
238
262
 
239
263
  private def columns
240
264
  klass.columns.map do |col|
241
- class_name = sql_type_to_class(col.type)
265
+ class_name = if enum_definitions.any? { |hash| hash.key?(col.name) || hash.key?(col.name.to_sym) }
266
+ 'String'
267
+ else
268
+ sql_type_to_class(col.type)
269
+ end
242
270
  class_name_opt = optional(class_name)
243
271
  column_type = col.null ? class_name_opt : class_name
244
272
  sig = <<~EOS
@@ -265,15 +293,17 @@ module RbsRails
265
293
  private def sql_type_to_class(t)
266
294
  case t
267
295
  when :integer
268
- Integer.name
296
+ 'Integer'
269
297
  when :float
270
- Float.name
271
- when :string, :text, :uuid, :binary
272
- String.name
298
+ 'Float'
299
+ when :decimal
300
+ 'BigDecimal'
301
+ when :string, :text, :citext, :uuid, :binary
302
+ 'String'
273
303
  when :datetime
274
304
  # TODO
275
305
  # ActiveSupport::TimeWithZone.name
276
- Time.name
306
+ 'Time'
277
307
  when :boolean
278
308
  "TrueClass | FalseClass"
279
309
  when :jsonb, :json
@@ -283,7 +313,7 @@ module RbsRails
283
313
  # Date.name
284
314
  'untyped'
285
315
  when :time
286
- Time.name
316
+ 'Time'
287
317
  when :inet
288
318
  "IPAddr"
289
319
  else
@@ -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.3.0"
5
+ VERSION = "0.4.0"
6
6
  end
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.3.0
4
+ version: 0.4.0
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: 2020-08-01 00:00:00.000000000 Z
11
+ date: 2020-11-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: parser
@@ -48,6 +48,7 @@ files:
48
48
  - assets/sig/erubi.rbs
49
49
  - assets/sig/generated/actionpack.rbs
50
50
  - assets/sig/generated/actionview.rbs
51
+ - assets/sig/generated/activejob.rbs
51
52
  - assets/sig/generated/activemodel.rbs
52
53
  - assets/sig/generated/activerecord-meta-programming.rbs
53
54
  - assets/sig/generated/activerecord.rbs
@@ -57,16 +58,30 @@ files:
57
58
  - assets/sig/libxml.rbs
58
59
  - assets/sig/minitest.rbs
59
60
  - assets/sig/nokogiri.rbs
61
+ - assets/sig/patches/README.md
62
+ - assets/sig/patches/for_actionpack.rbs
63
+ - assets/sig/patches/for_actionview.rbs
64
+ - assets/sig/patches/for_activemodel.rbs
65
+ - assets/sig/patches/for_activerecord.rbs
66
+ - assets/sig/patches/for_activesupport.rbs
67
+ - assets/sig/patches/for_railties.rbs
68
+ - assets/sig/pg.rbs
69
+ - assets/sig/que.rbs
70
+ - assets/sig/queue_classic.rbs
60
71
  - assets/sig/racc.rbs
61
72
  - assets/sig/rack-test.rbs
62
73
  - assets/sig/rack.rbs
63
74
  - assets/sig/rails.rbs
64
75
  - assets/sig/rdoc.rbs
76
+ - assets/sig/sidekiq.rbs
77
+ - assets/sig/sneakers.rbs
65
78
  - assets/sig/stdlib.rbs
79
+ - assets/sig/sucker_punch.rbs
66
80
  - assets/sig/thor.rbs
67
81
  - assets/sig/tzinfo.rbs
68
82
  - bin/add-type-params.rb
69
83
  - bin/console
84
+ - bin/generate_rbs_from_rails_source_code.rb
70
85
  - bin/postprocess.rb
71
86
  - bin/rbs
72
87
  - bin/rbs-prototype-rb.rb
@@ -104,7 +119,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
104
119
  - !ruby/object:Gem::Version
105
120
  version: '0'
106
121
  requirements: []
107
- rubygems_version: 3.2.0.rc.1
122
+ rubygems_version: 3.2.0.rc.2
108
123
  signing_key:
109
124
  specification_version: 4
110
125
  summary: A RBS files generator for Rails application