aws-record-rails 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 (30) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +4 -0
  3. data/LICENSE +175 -0
  4. data/VERSION +1 -0
  5. data/lib/aws-record-rails.rb +28 -0
  6. data/lib/generators/aws_record/active_model.rb +68 -0
  7. data/lib/generators/aws_record/base.rb +212 -0
  8. data/lib/generators/aws_record/erb/erb_generator.rb +55 -0
  9. data/lib/generators/aws_record/erb/templates/_form.html.erb.tt +34 -0
  10. data/lib/generators/aws_record/erb/templates/edit.html.erb.tt +6 -0
  11. data/lib/generators/aws_record/erb/templates/index.html.erb.tt +31 -0
  12. data/lib/generators/aws_record/erb/templates/new.html.erb.tt +5 -0
  13. data/lib/generators/aws_record/erb/templates/show.html.erb.tt +11 -0
  14. data/lib/generators/aws_record/model/USAGE +24 -0
  15. data/lib/generators/aws_record/model/model_generator.rb +25 -0
  16. data/lib/generators/aws_record/model/templates/model.rb.tt +76 -0
  17. data/lib/generators/aws_record/model/templates/table_config.rb.tt +20 -0
  18. data/lib/generators/aws_record/resource/USAGE +23 -0
  19. data/lib/generators/aws_record/resource/resource_generator.rb +21 -0
  20. data/lib/generators/aws_record/scaffold/USAGE +31 -0
  21. data/lib/generators/aws_record/scaffold/scaffold_generator.rb +46 -0
  22. data/lib/generators/aws_record/scaffold/templates/scaffold.css +80 -0
  23. data/lib/generators/aws_record/scaffold_controller/USAGE +15 -0
  24. data/lib/generators/aws_record/scaffold_controller/scaffold_controller_generator.rb +51 -0
  25. data/lib/generators/aws_record/scaffold_controller/templates/api_controller.rb.tt +63 -0
  26. data/lib/generators/aws_record/scaffold_controller/templates/controller.rb.tt +70 -0
  27. data/lib/generators/generated_attribute.rb +139 -0
  28. data/lib/generators/secondary_index.rb +67 -0
  29. data/lib/tasks/aws_record/migrate.rake +14 -0
  30. metadata +99 -0
@@ -0,0 +1,67 @@
1
+ # frozen_string_literal: true
2
+
3
+ module AwsRecord
4
+ module Generators
5
+ # @api private
6
+ class SecondaryIndex
7
+ PROJ_TYPES = %w[ALL KEYS_ONLY INCLUDE].freeze
8
+ attr_reader :name, :hash_key, :range_key, :projection_type
9
+
10
+ class << self
11
+ def parse(key_definition)
12
+ name, index_options = key_definition.split(':')
13
+ index_options = index_options.split(',') if index_options
14
+ opts = parse_raw_options(index_options)
15
+
16
+ new(name, opts)
17
+ end
18
+
19
+ private
20
+
21
+ def parse_raw_options(raw_opts)
22
+ raw_opts ||= []
23
+ raw_opts.to_h { |opt| get_option_value(opt) }
24
+ end
25
+
26
+ def get_option_value(raw_option)
27
+ case raw_option
28
+
29
+ when /hkey\{(\w+)\}/
30
+ [:hash_key, ::Regexp.last_match(1)]
31
+ when /rkey\{(\w+)\}/
32
+ [:range_key, ::Regexp.last_match(1)]
33
+ when /proj_type\{(\w+)\}/
34
+ [:projection_type, ::Regexp.last_match(1)]
35
+ else
36
+ raise ArgumentError, "Invalid option for secondary index #{raw_option}"
37
+ end
38
+ end
39
+ end
40
+
41
+ def initialize(name, opts)
42
+ raise ArgumentError, 'You must provide a name' unless name
43
+ raise ArgumentError, 'You must provide a hash key' unless opts[:hash_key]
44
+
45
+ if opts.key? :projection_type
46
+ unless PROJ_TYPES.include? opts[:projection_type]
47
+ raise ArgumentError, "Invalid projection type #{opts[:projection_type]}"
48
+ end
49
+ if opts[:projection_type] != 'ALL'
50
+ raise NotImplementedError, 'ALL is the only projection type currently supported'
51
+ end
52
+ else
53
+ opts[:projection_type] = 'ALL'
54
+ end
55
+
56
+ if opts[:hash_key] == opts[:range_key]
57
+ raise ArgumentError, "#{opts[:hash_key]} cannot be both the rkey and hkey for gsi #{name}"
58
+ end
59
+
60
+ @name = name
61
+ @hash_key = opts[:hash_key]
62
+ @range_key = opts[:range_key]
63
+ @projection_type = "\"#{opts[:projection_type]}\""
64
+ end
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ desc 'Run all table configs in db/table_config folder'
4
+ namespace :aws_record do
5
+ task migrate: :environment do
6
+ Dir[File.join('db', 'table_config', '**/*.rb')].each do |filename|
7
+ puts "running #{filename}.rb"
8
+ require(File.expand_path(filename))
9
+
10
+ table_config = ModelTableConfig.config
11
+ table_config.migrate! unless table_config.compatible?
12
+ end
13
+ end
14
+ end
metadata ADDED
@@ -0,0 +1,99 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: aws-record-rails
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Amazon Web Services
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2024-11-16 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: aws-record
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '2'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '2'
27
+ - !ruby/object:Gem::Dependency
28
+ name: railties
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 7.1.0
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: 7.1.0
41
+ description: Includes Aws::Record scaffold generators for Rails
42
+ email:
43
+ - aws-dr-rubygems@amazon.com
44
+ executables: []
45
+ extensions: []
46
+ extra_rdoc_files: []
47
+ files:
48
+ - CHANGELOG.md
49
+ - LICENSE
50
+ - VERSION
51
+ - lib/aws-record-rails.rb
52
+ - lib/generators/aws_record/active_model.rb
53
+ - lib/generators/aws_record/base.rb
54
+ - lib/generators/aws_record/erb/erb_generator.rb
55
+ - lib/generators/aws_record/erb/templates/_form.html.erb.tt
56
+ - lib/generators/aws_record/erb/templates/edit.html.erb.tt
57
+ - lib/generators/aws_record/erb/templates/index.html.erb.tt
58
+ - lib/generators/aws_record/erb/templates/new.html.erb.tt
59
+ - lib/generators/aws_record/erb/templates/show.html.erb.tt
60
+ - lib/generators/aws_record/model/USAGE
61
+ - lib/generators/aws_record/model/model_generator.rb
62
+ - lib/generators/aws_record/model/templates/model.rb.tt
63
+ - lib/generators/aws_record/model/templates/table_config.rb.tt
64
+ - lib/generators/aws_record/resource/USAGE
65
+ - lib/generators/aws_record/resource/resource_generator.rb
66
+ - lib/generators/aws_record/scaffold/USAGE
67
+ - lib/generators/aws_record/scaffold/scaffold_generator.rb
68
+ - lib/generators/aws_record/scaffold/templates/scaffold.css
69
+ - lib/generators/aws_record/scaffold_controller/USAGE
70
+ - lib/generators/aws_record/scaffold_controller/scaffold_controller_generator.rb
71
+ - lib/generators/aws_record/scaffold_controller/templates/api_controller.rb.tt
72
+ - lib/generators/aws_record/scaffold_controller/templates/controller.rb.tt
73
+ - lib/generators/generated_attribute.rb
74
+ - lib/generators/secondary_index.rb
75
+ - lib/tasks/aws_record/migrate.rake
76
+ homepage: https://github.com/aws/aws-record-rails
77
+ licenses:
78
+ - Apache-2.0
79
+ metadata: {}
80
+ post_install_message:
81
+ rdoc_options: []
82
+ require_paths:
83
+ - lib
84
+ required_ruby_version: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: '2.7'
89
+ required_rubygems_version: !ruby/object:Gem::Requirement
90
+ requirements:
91
+ - - ">="
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
94
+ requirements: []
95
+ rubygems_version: 3.5.11
96
+ signing_key:
97
+ specification_version: 4
98
+ summary: Aws::Record integration for Rails
99
+ test_files: []