aurora-data-api 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.
- checksums.yaml +7 -0
- data/.rake_tasks~ +10 -0
- data/.standard.yml +6 -0
- data/CHANGELOG.md +3 -0
- data/CODE_OF_CONDUCT.md +84 -0
- data/Gemfile +15 -0
- data/Gemfile.lock +103 -0
- data/LICENSE.txt +21 -0
- data/README.md +236 -0
- data/Rakefile +18 -0
- data/Steepfile +5 -0
- data/aurora-data-api.gemspec +34 -0
- data/example/.gitignore +58 -0
- data/example/.ruby-version +1 -0
- data/example/Dockerfile +26 -0
- data/example/Gemfile +9 -0
- data/example/Gemfile.lock +48 -0
- data/example/README.md +45 -0
- data/example/Rakefile +48 -0
- data/example/app/depots/comment_depot.rb +6 -0
- data/example/app/depots/entry_depot.rb +6 -0
- data/example/app/depots/user_depot.rb +6 -0
- data/example/app/handlers/main.rb +86 -0
- data/example/app/models/comment.rb +10 -0
- data/example/app/models/entry.rb +12 -0
- data/example/app/models/user.rb +13 -0
- data/example/compose.yml +43 -0
- data/example/db/.gitignore +2 -0
- data/example/db/.keep +0 -0
- data/example/package-lock.json +4740 -0
- data/example/package.json +17 -0
- data/example/serverless.yml +184 -0
- data/exe/aurora-data-api +161 -0
- data/lib/aurora-data-api/data_service.rb +42 -0
- data/lib/aurora-data-api/depot.rb +132 -0
- data/lib/aurora-data-api/environment.rb +41 -0
- data/lib/aurora-data-api/model.rb +152 -0
- data/lib/aurora-data-api/version.rb +5 -0
- data/lib/aurora-data-api.rb +14 -0
- data/sig/aurora-data-api.rbs +20 -0
- data/sig/data_service.rbs +7 -0
- data/sig/depot.rbs +23 -0
- data/sig/environment.rbs +13 -0
- data/sig/model.rbs +39 -0
- data/sig/version.rbs +3 -0
- metadata +120 -0
@@ -0,0 +1,152 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module AuroraDataApi
|
4
|
+
class Model
|
5
|
+
SCHEMA = {}
|
6
|
+
STRUCTS = {}
|
7
|
+
|
8
|
+
def self.model_name
|
9
|
+
to_s.to_sym
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.literal_id(lit)
|
13
|
+
SCHEMA[model_name] ||= {}
|
14
|
+
SCHEMA[model_name][:literal_id] = lit
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.table_name
|
18
|
+
SCHEMA.dig(model_name, :table_name)
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.table(name)
|
22
|
+
SCHEMA[model_name] ||= {}
|
23
|
+
SCHEMA[model_name][:table_name] = name
|
24
|
+
end
|
25
|
+
|
26
|
+
def self.schema(&block)
|
27
|
+
block.call
|
28
|
+
STRUCTS[model_name] = Struct.new(model_name.to_s, *SCHEMA[model_name][:cols].keys)
|
29
|
+
table("#{name.to_s.downcase}s".to_sym) if table_name.nil?
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.col(name, type, opt = {})
|
33
|
+
SCHEMA[model_name] ||= {}
|
34
|
+
SCHEMA[model_name][:cols] ||= {}
|
35
|
+
if type.is_a? Symbol
|
36
|
+
SCHEMA[model_name][:cols]["#{name}_#{SCHEMA[model_name][:literal_id] || :id}".to_sym] = {type: Integer}
|
37
|
+
end
|
38
|
+
SCHEMA[model_name][:cols][name] = {type: type, opt: opt}
|
39
|
+
end
|
40
|
+
|
41
|
+
def self.timestamp
|
42
|
+
col :created_at, Time, null: false
|
43
|
+
col :updated_at, Time, null: false
|
44
|
+
end
|
45
|
+
|
46
|
+
def self.relationship_by(table_sym)
|
47
|
+
result = Model::SCHEMA[name&.to_sym].select { |_k, v|
|
48
|
+
v.is_a? Hash
|
49
|
+
}.select { |_k, v|
|
50
|
+
v.dig(:opt, :table) == table_sym
|
51
|
+
}
|
52
|
+
result.count > 0 ? [result.keys[0], result.values[0][:type]] : nil
|
53
|
+
end
|
54
|
+
|
55
|
+
def initialize(**params)
|
56
|
+
@struct = STRUCTS[self.class.model_name].new
|
57
|
+
@timestamp = %i[created_at updated_at].all? { |m| members.include?(m) }
|
58
|
+
params.each do |col, val|
|
59
|
+
if col == literal_id
|
60
|
+
@id = val if val.is_a?(Integer)
|
61
|
+
else
|
62
|
+
@struct[col] = val
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
attr_reader :id, :timestamp
|
68
|
+
|
69
|
+
def set_timestamp(at:)
|
70
|
+
return false unless @timestamp
|
71
|
+
self.updated_at = Time.now
|
72
|
+
self.created_at = Time.now if at == :create
|
73
|
+
true
|
74
|
+
end
|
75
|
+
|
76
|
+
def members
|
77
|
+
[literal_id] + @struct.members
|
78
|
+
end
|
79
|
+
|
80
|
+
def respond_to_missing?(symbol, include_private)
|
81
|
+
# test-unit calls :encoding in assert_equal
|
82
|
+
!(%i[encoding].include? symbol)
|
83
|
+
end
|
84
|
+
|
85
|
+
def method_missing(method_name, *args, &block)
|
86
|
+
string_name = method_name.to_s
|
87
|
+
if string_name[-1] == "="
|
88
|
+
@struct[string_name.chop] = args[0]
|
89
|
+
elsif string_name[-3, 3] == "_#{literal_id}"
|
90
|
+
@struct[string_name.sub(/_#{literal_id}\z/, "")]&.id || @struct[method_name]
|
91
|
+
elsif method_name == literal_id
|
92
|
+
@id
|
93
|
+
elsif members.include?(method_name)
|
94
|
+
if @struct[method_name].nil?
|
95
|
+
col_id = "#{method_name}_#{literal_id}".to_sym
|
96
|
+
if members.include?(col_id) && @struct[col_id]
|
97
|
+
col_model = SCHEMA[self.class.name&.to_sym][:cols].dig(method_name, :type)
|
98
|
+
return nil unless col_model
|
99
|
+
@struct[method_name] = AuroraDataApi.const_get("#{col_model}Depot".to_sym).select(
|
100
|
+
%(where "#{literal_id}" = :id), id: @struct[col_id]
|
101
|
+
)[0]
|
102
|
+
end
|
103
|
+
else
|
104
|
+
@struct[method_name]
|
105
|
+
end
|
106
|
+
else
|
107
|
+
super
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
def table_name
|
112
|
+
SCHEMA[self.class.name&.to_sym][:table_name]
|
113
|
+
end
|
114
|
+
|
115
|
+
def literal_id
|
116
|
+
SCHEMA[self.class.model_name][:literal_id] || :id
|
117
|
+
end
|
118
|
+
|
119
|
+
def build_params(include_id: false)
|
120
|
+
{}.tap do |hash|
|
121
|
+
members.each do |member|
|
122
|
+
next if member == literal_id && !include_id
|
123
|
+
next if SCHEMA[self.class.name&.to_sym][:cols][member][:type].is_a? Symbol
|
124
|
+
send(member).then { |v| hash[member] = v }
|
125
|
+
end
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
def attributes
|
130
|
+
{}.tap do |hash|
|
131
|
+
members.each do |member|
|
132
|
+
next if member.to_s.match?(/_#{literal_id}\z/)
|
133
|
+
send(member).then do |v|
|
134
|
+
hash[member] = v.is_a?(Model) ? v.attributes : v
|
135
|
+
end
|
136
|
+
end
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
140
|
+
def _set_id(id)
|
141
|
+
@id = id
|
142
|
+
end
|
143
|
+
|
144
|
+
def _destroy
|
145
|
+
@id = nil
|
146
|
+
@struct.members.each do |member|
|
147
|
+
@struct[member] = nil unless member == literal_id
|
148
|
+
end
|
149
|
+
true
|
150
|
+
end
|
151
|
+
end
|
152
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "aurora-data-api/version"
|
4
|
+
require_relative "aurora-data-api/model"
|
5
|
+
require_relative "aurora-data-api/depot"
|
6
|
+
require_relative "aurora-data-api/data_service"
|
7
|
+
|
8
|
+
module AuroraDataApi
|
9
|
+
class Error < StandardError; end
|
10
|
+
# Your code goes here...
|
11
|
+
end
|
12
|
+
|
13
|
+
class Date
|
14
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module AuroraDataApi
|
2
|
+
Error: StandardError
|
3
|
+
end
|
4
|
+
|
5
|
+
class Date
|
6
|
+
end
|
7
|
+
|
8
|
+
module Aws
|
9
|
+
def self.config: -> Hash[Symbol, untyped]
|
10
|
+
|
11
|
+
class Credentials
|
12
|
+
def initialize: (String, String) -> untyped
|
13
|
+
end
|
14
|
+
|
15
|
+
module RDSDataService
|
16
|
+
class Client
|
17
|
+
def initialize: (Hash[Symbol, String]) -> void
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
data/sig/depot.rbs
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
# TypeProf 0.21.2
|
2
|
+
|
3
|
+
# Classes
|
4
|
+
module AuroraDataApi
|
5
|
+
class Depot
|
6
|
+
@model: untyped
|
7
|
+
@data_service: DataService
|
8
|
+
@table_name: String
|
9
|
+
@literal_id: Symbol
|
10
|
+
|
11
|
+
def self.[]: (singleton(Model) model) -> Depot
|
12
|
+
def initialize: (singleton(Model) model, Proc block) -> void
|
13
|
+
def table_name: -> String
|
14
|
+
def literal_id: -> Symbol
|
15
|
+
def insert: (Model obj) -> untyped
|
16
|
+
def update: (Model obj) -> true
|
17
|
+
def delete: (Model obj) -> true
|
18
|
+
def count: (?String str, **untyped) -> Integer
|
19
|
+
def select: (String str, **untyped) -> untyped
|
20
|
+
def column_data: (untyped meta, untyped col) -> untyped
|
21
|
+
def query: (String str, **untyped) -> untyped
|
22
|
+
end
|
23
|
+
end
|
data/sig/environment.rbs
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
# TypeProf 0.21.2
|
2
|
+
|
3
|
+
# Classes
|
4
|
+
module AuroraDataApi
|
5
|
+
class Environment
|
6
|
+
def self.offline?: -> bool
|
7
|
+
def self.offline_endpoint: -> String
|
8
|
+
def self.database_name: -> String?
|
9
|
+
def self.region: -> String
|
10
|
+
def self.secret_arn: -> String?
|
11
|
+
def self.resource_arn: -> String?
|
12
|
+
end
|
13
|
+
end
|
data/sig/model.rbs
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
# TypeProf 0.21.2
|
2
|
+
|
3
|
+
# Classes
|
4
|
+
module AuroraDataApi
|
5
|
+
class Model
|
6
|
+
SCHEMA: Hash[untyped, untyped]
|
7
|
+
STRUCTS: Hash[untyped, untyped]
|
8
|
+
@struct: untyped
|
9
|
+
|
10
|
+
def self.model_name: -> Symbol
|
11
|
+
def self.literal_id: (Symbol lit) -> Symbol
|
12
|
+
def self.table: (Symbol name) -> Symbol
|
13
|
+
def self.table_name: -> Symbol
|
14
|
+
def self.schema: () { () -> void } -> void
|
15
|
+
def self.col: (Symbol name, singleton(String) | singleton(Time) | singleton(Date) | singleton(Integer) | Symbol type, ?Hash[Symbol, Symbol | bool] opt) -> void
|
16
|
+
def self.timestamp: -> void
|
17
|
+
def self.relationship_by: (Symbol table_sym) -> [untyped, untyped]?
|
18
|
+
def initialize: (**Hash[Symbol, untyped]) -> void
|
19
|
+
|
20
|
+
attr_reader id: Integer?
|
21
|
+
attr_reader timestamp: bool
|
22
|
+
attr_accessor created_at: Time
|
23
|
+
attr_accessor updated_at: Time
|
24
|
+
|
25
|
+
def set_timestamp: (at: :update | :create) -> bool
|
26
|
+
def members: -> Array[Symbol]
|
27
|
+
def respond_to_missing?: (untyped symbol, untyped include_private) -> true
|
28
|
+
def method_missing: (untyped method_name, *untyped args) -> nil
|
29
|
+
def table_name: -> Symbol
|
30
|
+
def literal_id: -> Symbol
|
31
|
+
def build_params: (?include_id: bool) -> Hash[Symbol, untyped]
|
32
|
+
def attributes: -> Hash[Symbol, untyped]
|
33
|
+
def _set_id: (Integer? id) -> void
|
34
|
+
def _destroy: -> bool
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
class AnonymousStruct_generated_1 < Struct[untyped]
|
39
|
+
end
|
data/sig/version.rbs
ADDED
metadata
ADDED
@@ -0,0 +1,120 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: aurora-data-api
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- HASUMI Hitoshi
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2022-05-31 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: aws-sdk-rdsdataservice
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 1.35.0
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 1.35.0
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: thor
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
description: Assuming you are using AWS Lambda as a backend, Aurora Serverless v1
|
42
|
+
(NOT v2) as a database, and Data API as an adapter
|
43
|
+
email:
|
44
|
+
- hasumikin@gmail.com
|
45
|
+
executables:
|
46
|
+
- aurora-data-api
|
47
|
+
extensions: []
|
48
|
+
extra_rdoc_files: []
|
49
|
+
files:
|
50
|
+
- ".rake_tasks~"
|
51
|
+
- ".standard.yml"
|
52
|
+
- CHANGELOG.md
|
53
|
+
- CODE_OF_CONDUCT.md
|
54
|
+
- Gemfile
|
55
|
+
- Gemfile.lock
|
56
|
+
- LICENSE.txt
|
57
|
+
- README.md
|
58
|
+
- Rakefile
|
59
|
+
- Steepfile
|
60
|
+
- aurora-data-api.gemspec
|
61
|
+
- example/.gitignore
|
62
|
+
- example/.ruby-version
|
63
|
+
- example/Dockerfile
|
64
|
+
- example/Gemfile
|
65
|
+
- example/Gemfile.lock
|
66
|
+
- example/README.md
|
67
|
+
- example/Rakefile
|
68
|
+
- example/app/depots/comment_depot.rb
|
69
|
+
- example/app/depots/entry_depot.rb
|
70
|
+
- example/app/depots/user_depot.rb
|
71
|
+
- example/app/handlers/main.rb
|
72
|
+
- example/app/models/comment.rb
|
73
|
+
- example/app/models/entry.rb
|
74
|
+
- example/app/models/user.rb
|
75
|
+
- example/compose.yml
|
76
|
+
- example/db/.gitignore
|
77
|
+
- example/db/.keep
|
78
|
+
- example/package-lock.json
|
79
|
+
- example/package.json
|
80
|
+
- example/serverless.yml
|
81
|
+
- exe/aurora-data-api
|
82
|
+
- lib/aurora-data-api.rb
|
83
|
+
- lib/aurora-data-api/data_service.rb
|
84
|
+
- lib/aurora-data-api/depot.rb
|
85
|
+
- lib/aurora-data-api/environment.rb
|
86
|
+
- lib/aurora-data-api/model.rb
|
87
|
+
- lib/aurora-data-api/version.rb
|
88
|
+
- sig/aurora-data-api.rbs
|
89
|
+
- sig/data_service.rbs
|
90
|
+
- sig/depot.rbs
|
91
|
+
- sig/environment.rbs
|
92
|
+
- sig/model.rbs
|
93
|
+
- sig/version.rbs
|
94
|
+
homepage: https://github.com/hasumikin/aurora-data-api
|
95
|
+
licenses:
|
96
|
+
- MIT
|
97
|
+
metadata:
|
98
|
+
homepage_uri: https://github.com/hasumikin/aurora-data-api
|
99
|
+
source_code_uri: https://github.com/hasumikin/aurora-data-api
|
100
|
+
changelog_uri: https://github.com/hasumikin/aurora-data-api/blob/master/CHANGELOG.md
|
101
|
+
post_install_message:
|
102
|
+
rdoc_options: []
|
103
|
+
require_paths:
|
104
|
+
- lib
|
105
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
106
|
+
requirements:
|
107
|
+
- - ">="
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: 2.7.0
|
110
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
111
|
+
requirements:
|
112
|
+
- - ">="
|
113
|
+
- !ruby/object:Gem::Version
|
114
|
+
version: '0'
|
115
|
+
requirements: []
|
116
|
+
rubygems_version: 3.3.14
|
117
|
+
signing_key:
|
118
|
+
specification_version: 4
|
119
|
+
summary: A kind of ORM for Amazon Aurora Serverless v1
|
120
|
+
test_files: []
|