vim-rails icon indicating copy to clipboard operation
vim-rails copied to clipboard

Create files via affinity

Open Peeja opened this issue 11 years ago • 6 comments
trafficstars

I'd really appreciate a way to edit files by affinity even if they don't exist yet. So, for instance, if I'm in a model which doesn't have a controller yet, I want to be able to create it. I know you don't like the idea of using bangs on edit methods when it doesn't mean "discard changes", but what about this:

" from app/models/post.rb
:Econtroller !
" now in app/controllers/posts_controller.rb [New File]
:Ehelper !
" now in app/helpers/posts_helper.rb  [New File]

It's not a bang command, it's just the "make it for me" version of the :E* command without the name part.

Thoughts?

Peeja avatar Mar 25 '14 21:03 Peeja

:+1:

jondkinney avatar Mar 26 '14 22:03 jondkinney

Not keen on it just because it's hard to explain, but I think I would tolerate it working if it remained undocumented.

tpope avatar Mar 26 '14 23:03 tpope

I would love this, mainly for :Espec !

sj26 avatar Aug 27 '14 04:08 sj26

:+1:

I would really love a :A!

Pleeeaase :heart_eyes:

Otherwise, I'll have to try to make it myself, and I assure you that you don't want to unleash my monstrous vimscript skills to the world. It is not ready yet.

bankair avatar Sep 16 '14 09:09 bankair

Would love to see :A! method to generate missing specs especially, unless there's already a way to do this baked in? Still pretty new around here.

anhari avatar Apr 11 '16 17:04 anhari

I actually built out a bunch of these via projectionist... But A! would still be sweet :)

let g:rails_projections = {
\ "config/projections.json": {
\   "command": "projections"
\ },
\ "app/serializers/*_serializer.rb": {
\   "command": "serializer",
\   "affinity": "model",
\   "test": "spec/serializers/%s_spec.rb",
\   "related": "app/models/%s.rb",
\   "template": "class %SSerializer < ActiveModel::Serializer\nend"
\ },
\ "app/services/*.rb": {
\   "command": "service",
\   "affinity": "model",
\   "alternate": ["spec/services/%s_spec.rb", "unit/services/%s_spec.rb"],
\   "template": "class %S\n\n  def perform\n  end\nend"
\ },
\ "app/presenters/*_presenter.rb": {
\   "command": "presenter",
\   "affinity": "model",
\   "alternate": ["spec/presenters/%s_presenter_spec.rb", "unit/presenters/%s_presenter_spec.rb"],
\   "related": "app/models/%s.rb",
\   "template": "class %SPresenter < SimpleDelegator\n  def self.wrap(collection)\n    collection.map{open} |object| new object {close}\n  end\n\nend"
\ },
\ "spec/presenters/*_presenter.rb": {
\   "command": "specpresenter",
\   "affinity": "presenter",
\   "alternate": ["app/presenters/%s_presenter.rb"],
\   "related": "app/models/%s.rb",
\   "template": "require 'rails_helper'\n\nRSpec.describe %SPresenter, type: :presenter do\n\nend"
\ },
\ "features/cukes/*.feature": {
\   "alternate": ["features/step_definitions/%s_steps.rb", "features/steps/%s_steps.rb"],
\ },
\ "spec/factories/*s.rb": {
\   "command": "factory",
\   "affinity": "model",
\   "related": "app/models/%s.rb",
\   "template": "FactoryGirl.define do\n  factory :%s do\n  end\nend"
\ },
\ "spec/controllers/*_controller_spec.rb": {
\   "command": "speccontroller",
\   "affinity": "controller",
\   "related": "app/controllers/%s.rb",
\   "template": "require 'rails_helper'\n\nRSpec.describe %SController, type: :controller do\n\nend"
\ },
\ "spec/serializers/*_serializer_spec.rb": {
\   "command": "specserializer",
\   "affinity": "serializer",
\   "related": "app/serializers/%s.rb",
\   "template": "require 'rails_helper'\n\nRSpec.describe %SSerializer, type: :serializer do\n\nend"
\ },
\ "spec/models/*_spec.rb": {
\   "command": "spec",
\   "affinity": "model",
\   "related": "app/models/%s.rb",
\   "template": "require 'rails_helper'\n\nRSpec.describe %S, type: :model do\n\nend"
\ },
\ "spec/services/*_spec.rb": {
\   "command": "specservice",
\   "affinity": "service",
\   "related": "app/services/%s.rb",
\   "template": "require 'rails_helper'\n\nRSpec.describe %S do\n\nend"
\ },
\ "spec/workers/*_spec.rb": {
\   "command": "specworker",
\   "affinity": "worker",
\   "related": "app/workers/%s.rb",
\   "template": "require 'rails_helper'\n\nRSpec.describe %S, type: :worker do\n\nend"
\ },
\ "spec/features/*_spec.rb": {
\   "command": "specfeature",
\   "template": "require 'rails_helper'\n\nRSpec.feature '%S', type: :feature do\n\nend"
\ },
\ "spec/helpers/*_helper_spec.rb": {
\   "command": "spechelper",
\   "related": "app/helpers/%_helper.rb",
\   "affinity": "helper",
\   "template": "require 'rails_helper'\n\nRSpec.describe ApplicationHelper, type: :helper do\n\nend"
\ },
\ "lib/tasks/*.rake": {
\   "command": "rake",
\   "template": ["namespace :%s do\n  desc '%s'\n  task %s: :environment do\n\n  end\nend"],
\ },
\ "config/*.rb": { "command": "config"  },
\ "spec/support/*.rb": { "command": "support" },
\ }

let g:rails_gem_projections = {
\ "carrierwave": {
\   "app/uploaders/*_uploader.rb": {
\   "command": "uploader",
\   "template": "class %SUploader < CarrierWave::Uploader::Base\nend"
\   }
\ },
\ "resque": {
\   "app/workers/*_job.rb": {
\   "command": "worker",
\   "template": "class %SJob\n\n  \n@queue = :main\ndef self.perform\n  end\nend"
\   }
\ },
\ }

jondkinney avatar Apr 11 '16 18:04 jondkinney