diff --git a/Gemfile b/Gemfile index 2224b5d..abbf8a4 100644 --- a/Gemfile +++ b/Gemfile @@ -3,4 +3,4 @@ source "https://rubygems.org" gemspec gem 'sqlite3', :platforms => :ruby -gem 'rails', '5.1.4' +gem 'rails', '5.1.4' \ No newline at end of file diff --git a/aasm.gemspec b/aasm.gemspec index b29fa72..9645efa 100644 --- a/aasm.gemspec +++ b/aasm.gemspec @@ -23,10 +23,11 @@ Gem::Specification.new do |s| s.add_development_dependency 'rspec', ">= 3" s.add_development_dependency 'generator_spec' s.add_development_dependency 'appraisal' - + # debugging # s.add_development_dependency 'debugger' s.add_development_dependency 'pry' + s.add_development_dependency 'pry-nav' s.files = `git ls-files`.split("\n") s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n") diff --git a/lib/generators/aasm/orm_helpers.rb b/lib/generators/aasm/orm_helpers.rb index 8234927..d7a5b11 100644 --- a/lib/generators/aasm/orm_helpers.rb +++ b/lib/generators/aasm/orm_helpers.rb @@ -22,6 +22,12 @@ RUBY private + def column_exists? + table_name.singularize.humanize.constantize.column_names.include?(column_name.to_s) + rescue NameError + false + end + def model_exists? File.exists?(File.join(destination_root, model_path)) end diff --git a/lib/generators/active_record/aasm_generator.rb b/lib/generators/active_record/aasm_generator.rb index 8f163dc..b948182 100644 --- a/lib/generators/active_record/aasm_generator.rb +++ b/lib/generators/active_record/aasm_generator.rb @@ -11,7 +11,9 @@ module ActiveRecord source_root File.expand_path("../templates", __FILE__) def copy_aasm_migration - if model_exists? + if column_exists? + puts "Both model and column exists" + elsif model_exists? migration_template "migration_existing.rb", "db/migrate/add_#{column_name}_to_#{table_name}.rb" else migration_template "migration.rb", "db/migrate/aasm_create_#{table_name}.rb" diff --git a/spec/database.rb b/spec/database.rb index e92233d..5dc168d 100644 --- a/spec/database.rb +++ b/spec/database.rb @@ -20,6 +20,10 @@ ActiveRecord::Migration.suppress_messages do t.string "right" end + ActiveRecord::Migration.create_table "jobs", :force => true do |t| + t.string "state" + end + %w(validators multiple_validators workers invalid_persistors multiple_invalid_persistors silent_persistors multiple_silent_persistors).each do |table_name| ActiveRecord::Migration.create_table table_name, :force => true do |t| t.string "name" diff --git a/spec/generators/active_record_generator_spec.rb b/spec/generators/active_record_generator_spec.rb index 4294bc1..cdaa8ad 100644 --- a/spec/generators/active_record_generator_spec.rb +++ b/spec/generators/active_record_generator_spec.rb @@ -43,5 +43,11 @@ if defined?(ActiveRecord) assert_migration "db/migrate/add_state_to_jobs.rb" end + it "dont add column if column is already exists" do + require 'models/active_record/job.rb' + load_schema + run_generator %w(job state) + assert_no_migration "db/migrate/add_state_to_jobs.rb" + end end end diff --git a/spec/models/active_record/job.rb b/spec/models/active_record/job.rb new file mode 100644 index 0000000..9cd9e7b --- /dev/null +++ b/spec/models/active_record/job.rb @@ -0,0 +1,3 @@ +class Job < ActiveRecord::Base + include AASM +end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index a9aadf7..4dcc3c7 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -13,6 +13,7 @@ SEQUEL_DB = defined?(JRUBY_VERSION) ? 'jdbc:sqlite::memory:' : 'sqlite:/' def load_schema require 'logger' + require 'yaml' config = YAML::load(IO.read(File.dirname(__FILE__) + '/database.yml')) ActiveRecord::Base.logger = Logger.new(File.dirname(__FILE__) + "/debug.log") ActiveRecord::Base.establish_connection(config['sqlite3'])