class FlagShihTzuPlugin
typed: false
Public Instance Methods
generate(root)
click to toggle source
# File lib/sorbet-rails/gem_plugins/flag_shih_tzu_plugin.rb, line 4 def generate(root) return unless @model_class.include?(::FlagShihTzu) obj_custom_module_name = self.model_module_name("GeneratedFlagShihTzuMethods") obj_custom_module_rbi = root.create_module(obj_custom_module_name) klass_custom_module_name = self.model_module_name("GeneratedFlagShihTzuClassMethods") klass_custom_module_rbi = root.create_module(klass_custom_module_name) # here we re-create the model class! model_class_rbi = root.create_class(self.model_class_name) model_class_rbi.create_include(obj_custom_module_name) model_class_rbi.create_extend(klass_custom_module_name) # then create custom methods, constants, etc. for this module. add_class_methods(klass_custom_module_rbi) if @model_class.flag_columns.present? @model_class .flag_columns .each do |column| add_methods_for_column(column, obj_custom_module_rbi) end end if @model_class.flag_mapping.present? @model_class .flag_mapping .each do |column, flags| flags.keys .select { |flag_key| really_has_the_flag?(flag_key) } .each do |flag_key| add_methods_for_flag(column, flag_key, obj_custom_module_rbi) end end end end
Private Instance Methods
add_class_methods(custom_module_rbi)
click to toggle source
# File lib/sorbet-rails/gem_plugins/flag_shih_tzu_plugin.rb, line 46 def add_class_methods(custom_module_rbi) # https://github.com/pboling/flag_shih_tzu/blob/6a3f1c5f62bd56aa932252eef935826c9674b096/lib/flag_shih_tzu.rb#L12 custom_module_rbi.create_method( 'flag_options', returns: 'T::Hash[String, T::Hash[Symbol, T.untyped]]' ) # https://github.com/pboling/flag_shih_tzu/blob/6a3f1c5f62bd56aa932252eef935826c9674b096/lib/flag_shih_tzu.rb#L13 custom_module_rbi.create_method( 'flag_mapping', returns: 'T::Hash[String, T::Hash[Symbol, Integer]]' ) # https://github.com/pboling/flag_shih_tzu/blob/6a3f1c5f62bd56aa932252eef935826c9674b096/lib/flag_shih_tzu.rb#L14 custom_module_rbi.create_method( 'flag_columns', returns: 'T::Array[Symbol]' ) # https://github.com/pboling/flag_shih_tzu#updating-flag-column-by-raw-sql custom_module_rbi.create_method( 'set_flag_sql', parameters: [ ::Parlour::RbiGenerator::Parameter.new( 'flag', type: 'Symbol' ), ::Parlour::RbiGenerator::Parameter.new( 'value', type: 'T::Boolean' ), ::Parlour::RbiGenerator::Parameter.new( 'colmn', type: 'T.nilable(String)' ), ::Parlour::RbiGenerator::Parameter.new( 'custom_table_name', type: 'T.any(String, Symbol)' ) ], returns: 'T::Hash[String, T::Hash[Symbol, T.untyped]]' ) if @model_class.flag_mapping.present? # https://github.com/pboling/flag_shih_tzu#support-for-manually-building-conditions @model_class .flag_mapping .flat_map { |_, flags| flags.keys } .each do |flag_key| next unless really_has_the_flag?(flag_key) custom_module_rbi.create_method( "#{flag_key}_condition", parameters: [ ::Parlour::RbiGenerator::Parameter.new( 'options', type: 'T.nilable(T::Hash[Symbol, T.untyped])' ) ], returns: 'String' ) custom_module_rbi.create_method( "not_#{flag_key}_condition", parameters: [ ::Parlour::RbiGenerator::Parameter.new( 'options', type: 'T.nilable(T::Hash[Symbol, T.untyped])' ) ], returns: 'String' ) end end end
add_methods_for_column(column, custom_module_rbi)
click to toggle source
# File lib/sorbet-rails/gem_plugins/flag_shih_tzu_plugin.rb, line 124 def add_methods_for_column(column, custom_module_rbi) custom_module_rbi.create_method( "all_#{column}", returns: 'T::Array[Symbol]' ) custom_module_rbi.create_method( "selected_#{column}", returns: 'T::Array[Symbol]' ) custom_module_rbi.create_method( "select_all_#{column}", returns: 'T::Array[Symbol]' ) custom_module_rbi.create_method( "unselect_all_#{column}", returns: 'T::Array[Symbol]' ) custom_module_rbi.create_method( "selected_#{column}=", parameters: [ ::Parlour::RbiGenerator::Parameter.new( 'chosen_flags', type: 'T.nilable(T::Array[Symbol])' ) ], returns: 'T::Array[Symbol]' ) end
add_methods_for_flag(column, flag_key, custom_module_rbi)
click to toggle source
# File lib/sorbet-rails/gem_plugins/flag_shih_tzu_plugin.rb, line 160 def add_methods_for_flag(column, flag_key, custom_module_rbi) custom_module_rbi.create_method(flag_key.to_s, returns: 'T::Boolean') custom_module_rbi.create_method("#{flag_key}?", returns: 'T::Boolean') custom_module_rbi.create_method( "#{flag_key}=", parameters: [ ::Parlour::RbiGenerator::Parameter.new( 'value', type: 'T::Boolean' ) ], returns: 'T::Boolean' ) custom_module_rbi.create_method("not_#{flag_key}", returns: 'T::Boolean') custom_module_rbi.create_method("not_#{flag_key}?", returns: 'T::Boolean') custom_module_rbi.create_method( "not_#{flag_key}=", parameters: [ ::Parlour::RbiGenerator::Parameter.new( 'value', type: 'T::Boolean' ) ], returns: 'T::Boolean' ) custom_module_rbi.create_method("#{flag_key}_changed?", returns: 'T::Boolean') custom_module_rbi.create_method("has_#{flag_key}?", returns: 'T::Boolean') if @model_class.flag_options[column][:bang_methods] custom_module_rbi.create_method("#{flag_key}!", returns: 'T::Boolean') custom_module_rbi.create_method("not_#{flag_key}!", returns: 'T::Boolean') end end
really_has_the_flag?(flag_name)
click to toggle source
# File lib/sorbet-rails/gem_plugins/flag_shih_tzu_plugin.rb, line 198 def really_has_the_flag?(flag_name) @model_class.respond_to?("#{flag_name}_condition") end