effective_developer 0.4.1 → 0.4.2

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 40d2df5dba437c7112b719f129fb5304d88fd3b5
4
- data.tar.gz: f485802d6fbf8ae8ae1375478650b20d56e381aa
3
+ metadata.gz: 987dc444541f73d96d4ef8639822910e52cfb47c
4
+ data.tar.gz: 7ab798c262fbcf37680b5333d8bb5c856a9a933e
5
5
  SHA512:
6
- metadata.gz: 0ceb56e3450b4ea6a447294289f3d9f9e8825dc2ac2cd569b3748278798fc1ff83b90da973776f5196b452a78235423f167c9318c9602e29b028779f390f5b7d
7
- data.tar.gz: 187897199ea333c4d9423a724e74a5b39d0697b4e55f8321fea23a30f0ba8ec4bb003151880a015b715249901525b9c8074d3b7e1616c6a464f96e8b49d0588a
6
+ metadata.gz: 4df59039d6e5728ce6c92165b682bb3894ea6e314612e05c91bd1f23b8aaf98d6f19953542874ddcac6d71b47067dc5c5829447cba278348ef5ce2561a47cc59
7
+ data.tar.gz: 98ee05f7b84c9f894c27ac52f58fa853b76c1253d4e6e2b12ef2fc95750b3876f5ac40957e6f2825d568f8df42547b81bb0349dfcb61dc8f99b6480faf724cab
@@ -1,5 +1,7 @@
1
+ require 'rails/generators/active_record/migration/migration_generator'
2
+
1
3
  module Effective
2
- class Migrator
4
+ class LiveGenerator
3
5
  attr_accessor :resource # The class level effective_resource do ... end object
4
6
 
5
7
  def initialize(obj)
@@ -8,10 +10,12 @@ module Effective
8
10
  unless @resource.respond_to?(:model) && @resource.model.present?
9
11
  raise 'expected effective_resource or klass to have an effective_resource do ... end block defined'
10
12
  end
13
+
14
+ true
11
15
  end
12
16
 
13
17
  # Writes database migrations automatically based on effective_resources do ... end block
14
- def migrate!
18
+ def generate!
15
19
  table_attributes = resource.table_attributes
16
20
  model_attributes = resource.model_attributes
17
21
 
@@ -27,31 +31,34 @@ module Effective
27
31
  # Fields are not in database, but present in model.rb
28
32
  if(add_keys = (model_keys - table_keys)).present?
29
33
  Rails.logger.info "effective_developer migrate #{resource.plural_name}: add #{add_keys.to_sentence}"
30
- rails_migrate("add_fields_to_#{resource.plural_name}", model_attributes.slice(*add_keys))
34
+ rails_migrate("add_ATTRIBUTES_to_#{resource.plural_name}", model_attributes.slice(*add_keys))
31
35
  end
32
36
 
33
37
  # Fields are in database, but no longer in our effective_resource do block
34
38
  if (remove_keys = (table_keys - model_keys)).present?
35
39
  Rails.logger.info "effective_developer migrate #{resource.plural_name}: remove #{remove_keys.to_sentence}"
36
- rails_migrate("remove_fields_from_#{resource.plural_name}", table_attributes.slice(*remove_keys))
40
+ rails_migrate("remove_ATTRIBUTES_from_#{resource.plural_name}", table_attributes.slice(*remove_keys))
37
41
  end
38
42
  end
39
43
 
40
44
  private
41
45
 
42
46
  def rails_migrate(filename, attributes)
43
- invokable = attributes.map { |name, (type, _)| "#{name}:#{type}" }
47
+ # The filename needs to be unique, but it shouldn't be annoyingly long
48
+ name = (attributes.keys.first(2) + [("and_#{attributes.length - 2}_more" if attributes.length > 2)]).compact.join('_')
49
+ filename.sub!('ATTRIBUTES', name)
44
50
 
45
- pending = (ActiveRecord::Migration.check_pending! rescue true)
46
- ActiveRecord::Tasks::DatabaseTasks.migrate if pending
51
+ # I don't need to check pending. But if I did:
52
+ #pending = (ActiveRecord::Migration.check_pending! rescue true)
53
+ #ActiveRecord::Tasks::DatabaseTasks.migrate if pending
47
54
 
48
- # Can't get this to work
49
- # Rails.logger.info "INVOKING!!!!!"
50
- # binding.pry
51
- # Rails::Generators.invoke('migration', [filename] + invokable, behavior: :invoke, destination_root: Rails.root, migration_paths: ['db/migrate'])
55
+ args = [filename] + attributes.map { |name, (type, _)| "#{name}:#{type}" }
56
+ options = {}
57
+ config = { destination_root: Rails.root }
52
58
 
53
- system("rails generate migration #{filename} #{invokable.join(' ')}")
59
+ ActiveRecord::Generators::MigrationGenerator.new(args, options, config).invoke_all
54
60
  ActiveRecord::Tasks::DatabaseTasks.migrate
61
+ resource.klass.reset_column_information
55
62
 
56
63
  true
57
64
  end
@@ -1,5 +1,5 @@
1
1
  EffectiveDeveloper.setup do |config|
2
-
3
- # This doesn't do anything. Yet.
4
- config.live = true
2
+ # Tracks changes to the effective_resource do .. end block
3
+ # And automatically writes database migration changes
4
+ config.live = false
5
5
  end
@@ -8,10 +8,10 @@ module EffectiveDeveloper
8
8
  eval File.read("#{config.root}/config/effective_developer.rb")
9
9
  end
10
10
 
11
- # Include acts_as_addressable concern and allow any ActiveRecord object to call it
11
+ # Whenever the effective_resource do block is evaluated, check for changes
12
12
  initializer 'effective_developer.effective_resources' do |app|
13
13
  ActiveSupport.on_load :effective_resource do
14
- #Effective::Migrator.new(self).migrate!
14
+ Effective::LiveGenerator.new(self).generate! if EffectiveDeveloper.live
15
15
  end
16
16
  end
17
17
 
@@ -1,3 +1,3 @@
1
1
  module EffectiveDeveloper
2
- VERSION = '0.4.1'.freeze
2
+ VERSION = '0.4.2'.freeze
3
3
  end
@@ -1,4 +1,4 @@
1
- # bundle exec rake rename_class[account, team]
1
+ # bundle exec rake rename_class[account,team]
2
2
 
3
3
  desc 'Rename a rails class to another'
4
4
  task :rename_class, [:source, :target, :db] => :environment do |t, args|
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: effective_developer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ version: 0.4.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Code and Effect
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-09-15 00:00:00.000000000 Z
11
+ date: 2018-10-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -50,7 +50,7 @@ files:
50
50
  - Rakefile
51
51
  - app/models/effective/code_writer.rb
52
52
  - app/models/effective/csv_importer.rb
53
- - app/models/effective/migrator.rb
53
+ - app/models/effective/live_generator.rb
54
54
  - config/effective_developer.rb
55
55
  - lib/effective_developer.rb
56
56
  - lib/effective_developer/engine.rb