declare_schema 0.1.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.
Files changed (53) hide show
  1. checksums.yaml +7 -0
  2. data/.dependabot/config.yml +10 -0
  3. data/.github/workflows/gem_release.yml +38 -0
  4. data/.gitignore +14 -0
  5. data/.jenkins/Jenkinsfile +72 -0
  6. data/.jenkins/ruby_build_pod.yml +19 -0
  7. data/.rspec +2 -0
  8. data/.rubocop.yml +189 -0
  9. data/.ruby-version +1 -0
  10. data/Appraisals +14 -0
  11. data/CHANGELOG.md +11 -0
  12. data/Gemfile +24 -0
  13. data/Gemfile.lock +203 -0
  14. data/LICENSE.txt +22 -0
  15. data/README.md +11 -0
  16. data/Rakefile +56 -0
  17. data/bin/declare_schema +11 -0
  18. data/declare_schema.gemspec +25 -0
  19. data/gemfiles/.bundle/config +2 -0
  20. data/gemfiles/rails_4.gemfile +25 -0
  21. data/gemfiles/rails_5.gemfile +25 -0
  22. data/gemfiles/rails_6.gemfile +25 -0
  23. data/lib/declare_schema.rb +44 -0
  24. data/lib/declare_schema/command.rb +65 -0
  25. data/lib/declare_schema/extensions/active_record/fields_declaration.rb +28 -0
  26. data/lib/declare_schema/extensions/module.rb +36 -0
  27. data/lib/declare_schema/field_declaration_dsl.rb +40 -0
  28. data/lib/declare_schema/model.rb +242 -0
  29. data/lib/declare_schema/model/field_spec.rb +162 -0
  30. data/lib/declare_schema/model/index_spec.rb +175 -0
  31. data/lib/declare_schema/railtie.rb +12 -0
  32. data/lib/declare_schema/version.rb +5 -0
  33. data/lib/generators/declare_schema/migration/USAGE +47 -0
  34. data/lib/generators/declare_schema/migration/migration_generator.rb +184 -0
  35. data/lib/generators/declare_schema/migration/migrator.rb +567 -0
  36. data/lib/generators/declare_schema/migration/templates/migration.rb.erb +9 -0
  37. data/lib/generators/declare_schema/model/USAGE +19 -0
  38. data/lib/generators/declare_schema/model/model_generator.rb +12 -0
  39. data/lib/generators/declare_schema/model/templates/model_injection.rb.erb +25 -0
  40. data/lib/generators/declare_schema/support/eval_template.rb +21 -0
  41. data/lib/generators/declare_schema/support/model.rb +64 -0
  42. data/lib/generators/declare_schema/support/thor_shell.rb +39 -0
  43. data/spec/lib/declare_schema/field_declaration_dsl_spec.rb +28 -0
  44. data/spec/spec_helper.rb +28 -0
  45. data/test/api.rdoctest +136 -0
  46. data/test/doc-only.rdoctest +76 -0
  47. data/test/generators.rdoctest +60 -0
  48. data/test/interactive_primary_key.rdoctest +56 -0
  49. data/test/migration_generator.rdoctest +846 -0
  50. data/test/migration_generator_comments.rdoctestDISABLED +74 -0
  51. data/test/prepare_testapp.rb +15 -0
  52. data/test_responses.txt +2 -0
  53. metadata +109 -0
@@ -0,0 +1,74 @@
1
+ # DeclareSchema - Migration Generator Comments
2
+
3
+ Our test requires to prepare the testapp for a different environment:
4
+ {.hidden}
5
+
6
+ doctest_require: ENV["RAILS_ENV"] = 'mysql_test'; 'prepare_testapp'
7
+
8
+ >> system "cd #{TESTAPP_PATH} && rake --trace db:setup"
9
+ => true
10
+
11
+ >> p Rails.env
12
+ >>
13
+ def nuke_model_class(klass)
14
+ ActiveSupport::DescendantsTracker.instance_eval do
15
+ class_variable_get('@@direct_descendants')[ActiveRecord::Base].delete(klass)
16
+ end
17
+ Object.instance_eval { remove_const klass.name.to_sym }
18
+ end
19
+
20
+ {.hidden}
21
+
22
+
23
+ ## Comments
24
+
25
+ Comments can be added to tables and fields with DeclareSchema.
26
+
27
+ >>
28
+ class Product < ActiveRecord::Base
29
+ fields do
30
+ name :string, comment: "short name"
31
+ description :string
32
+ end
33
+ end
34
+ >> Rails.env
35
+ => "mysql_test"
36
+ >> Rails::Generators.invoke 'declare_schema:migration', %w(-n -m)
37
+
38
+ These comments will be saved to your schema if you have the [column_comments](http://github.com/bryanlarsen/column_comments) plugin installed. If you do not have this plugin installed, the comments will be available by querying `field_specs`:
39
+
40
+ >> Product.field_specs["name"].comment
41
+ => "short name"
42
+
43
+ The plugin [activerecord-comments](http://github.com/bryanlarsen/activerecord-comments) may be used to get the comments from the database directly. If the plugin is installed, use this instead:
44
+
45
+ Product.column("name").comment
46
+
47
+ Because it will be quite common for people not to have both [column_comments](http://github.com/bryanlarsen/column_comments) and [activerecord-comments](http://github.com/bryanlarsen/activerecord-comments) installed, it is impossible for DeclareSchema to determine the difference between no previous comment and a previously missing plugin. Therefore, DeclareSchema will not generate a migration if the only change was to add a comment. DeclareSchema will generate a migration for a comment change, but only if the plugin is installed.
48
+
49
+ >> require 'activerecord-comments'
50
+
51
+ >> # manually add comment as the column_comments plugin would
52
+ >> Product.connection.execute "alter table `products` modify `name` varchar(255) default null comment 'short name';"
53
+
54
+ >>
55
+ class Product < ActiveRecord::Base
56
+ fields do
57
+ name :string, comment: "Short namex"
58
+ description :string, comment: "Long name"
59
+ end
60
+ end
61
+ >> up, down = Generators::DeclareSchema::Migration::Migrator.run
62
+ >> up.split(',').slice(0,3).join(',')
63
+ => 'change_column :products, :name, :string'
64
+ >> up.split(',').slice(3,2).sort.join(',')
65
+ => " :comment => \"Short namex\", :limit => 255"
66
+
67
+
68
+ Cleanup
69
+ {.hidden}
70
+
71
+ >> nuke_model_class(Product)
72
+ >> ActiveRecord::Base.connection.execute "drop table `products`;"
73
+ >> system "cd #{TESTAPP_PATH} && rake db:drop RAILS_ENV=mysql_test"
74
+ {.hidden}
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'fileutils'
4
+ require 'tmpdir'
5
+
6
+ TESTAPP_PATH = ENV['TESTAPP_PATH'] || File.join(Dir.tmpdir, 'declare_schema_testapp')
7
+ system %(rake test:prepare_testapp TESTAPP_PATH=#{TESTAPP_PATH})
8
+ system %(echo "gem 'kramdown'" >> #{TESTAPP_PATH}/Gemfile)
9
+ system %(echo "gem 'RedCloth'" >> #{TESTAPP_PATH}/Gemfile)
10
+ FileUtils.chdir TESTAPP_PATH
11
+ system "mkdir -p #{TESTAPP_PATH}/app/assets/config"
12
+ system "echo '' >> #{TESTAPP_PATH}/app/assets/config/manifest.js"
13
+ require "#{TESTAPP_PATH}/config/environment"
14
+ require 'rails/generators'
15
+ Rails::Generators.configure!(Rails.application.config.generators)
@@ -0,0 +1,2 @@
1
+ id
2
+ drop id
metadata ADDED
@@ -0,0 +1,109 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: declare_schema
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Invoca Development adapted from hobo_fields by Tom Locke
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2020-09-23 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rails
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '4.2'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '4.2'
27
+ description: Declare your Rails/active_record model schemas and have database migrations
28
+ generated for you!
29
+ email: development@invoca.com
30
+ executables:
31
+ - declare_schema
32
+ extensions: []
33
+ extra_rdoc_files: []
34
+ files:
35
+ - ".dependabot/config.yml"
36
+ - ".github/workflows/gem_release.yml"
37
+ - ".gitignore"
38
+ - ".jenkins/Jenkinsfile"
39
+ - ".jenkins/ruby_build_pod.yml"
40
+ - ".rspec"
41
+ - ".rubocop.yml"
42
+ - ".ruby-version"
43
+ - Appraisals
44
+ - CHANGELOG.md
45
+ - Gemfile
46
+ - Gemfile.lock
47
+ - LICENSE.txt
48
+ - README.md
49
+ - Rakefile
50
+ - bin/declare_schema
51
+ - declare_schema.gemspec
52
+ - gemfiles/.bundle/config
53
+ - gemfiles/rails_4.gemfile
54
+ - gemfiles/rails_5.gemfile
55
+ - gemfiles/rails_6.gemfile
56
+ - lib/declare_schema.rb
57
+ - lib/declare_schema/command.rb
58
+ - lib/declare_schema/extensions/active_record/fields_declaration.rb
59
+ - lib/declare_schema/extensions/module.rb
60
+ - lib/declare_schema/field_declaration_dsl.rb
61
+ - lib/declare_schema/model.rb
62
+ - lib/declare_schema/model/field_spec.rb
63
+ - lib/declare_schema/model/index_spec.rb
64
+ - lib/declare_schema/railtie.rb
65
+ - lib/declare_schema/version.rb
66
+ - lib/generators/declare_schema/migration/USAGE
67
+ - lib/generators/declare_schema/migration/migration_generator.rb
68
+ - lib/generators/declare_schema/migration/migrator.rb
69
+ - lib/generators/declare_schema/migration/templates/migration.rb.erb
70
+ - lib/generators/declare_schema/model/USAGE
71
+ - lib/generators/declare_schema/model/model_generator.rb
72
+ - lib/generators/declare_schema/model/templates/model_injection.rb.erb
73
+ - lib/generators/declare_schema/support/eval_template.rb
74
+ - lib/generators/declare_schema/support/model.rb
75
+ - lib/generators/declare_schema/support/thor_shell.rb
76
+ - spec/lib/declare_schema/field_declaration_dsl_spec.rb
77
+ - spec/spec_helper.rb
78
+ - test/api.rdoctest
79
+ - test/doc-only.rdoctest
80
+ - test/generators.rdoctest
81
+ - test/interactive_primary_key.rdoctest
82
+ - test/migration_generator.rdoctest
83
+ - test/migration_generator_comments.rdoctestDISABLED
84
+ - test/prepare_testapp.rb
85
+ - test_responses.txt
86
+ homepage: https://github.com/Invoca/declare_schema
87
+ licenses: []
88
+ metadata:
89
+ allowed_push_host: https://rubygems.org
90
+ post_install_message:
91
+ rdoc_options: []
92
+ require_paths:
93
+ - lib
94
+ required_ruby_version: !ruby/object:Gem::Requirement
95
+ requirements:
96
+ - - ">="
97
+ - !ruby/object:Gem::Version
98
+ version: '0'
99
+ required_rubygems_version: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: 1.3.6
104
+ requirements: []
105
+ rubygems_version: 3.0.3
106
+ signing_key:
107
+ specification_version: 4
108
+ summary: Database migration generator for Rails
109
+ test_files: []