tiny_dyno 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/.gitignore +10 -0
- data/.rspec +3 -0
- data/.ruby-version +1 -0
- data/.simplecov +2 -0
- data/.travis.yml +4 -0
- data/Gemfile +4 -0
- data/Guardfile +70 -0
- data/LICENSE +41 -0
- data/README.md +121 -0
- data/Rakefile +6 -0
- data/bin/console +8 -0
- data/bin/fastcheck +25 -0
- data/bin/setup +7 -0
- data/bin/tracer +19 -0
- data/ci/tests.sh +52 -0
- data/lib/config/locales/en.yml +168 -0
- data/lib/tiny_dyno.rb +44 -0
- data/lib/tiny_dyno/adapter.rb +48 -0
- data/lib/tiny_dyno/adapter/items.rb +27 -0
- data/lib/tiny_dyno/adapter/tables.rb +103 -0
- data/lib/tiny_dyno/attributes.rb +157 -0
- data/lib/tiny_dyno/attributes/readonly.rb +56 -0
- data/lib/tiny_dyno/changeable.rb +68 -0
- data/lib/tiny_dyno/document.rb +100 -0
- data/lib/tiny_dyno/document_composition.rb +49 -0
- data/lib/tiny_dyno/errors.rb +4 -0
- data/lib/tiny_dyno/errors/attribute_errors.rb +25 -0
- data/lib/tiny_dyno/errors/hash_key_errors.rb +78 -0
- data/lib/tiny_dyno/errors/tiny_dyno_error.rb +85 -0
- data/lib/tiny_dyno/extensions.rb +1 -0
- data/lib/tiny_dyno/extensions/module.rb +28 -0
- data/lib/tiny_dyno/fields.rb +299 -0
- data/lib/tiny_dyno/fields/standard.rb +64 -0
- data/lib/tiny_dyno/hash_keys.rb +134 -0
- data/lib/tiny_dyno/loggable.rb +69 -0
- data/lib/tiny_dyno/persistable.rb +88 -0
- data/lib/tiny_dyno/range_attributes.rb +15 -0
- data/lib/tiny_dyno/stateful.rb +95 -0
- data/lib/tiny_dyno/tables.rb +98 -0
- data/lib/tiny_dyno/version.rb +3 -0
- data/tiny_dyno.gemspec +41 -0
- metadata +226 -0
@@ -0,0 +1,98 @@
|
|
1
|
+
|
2
|
+
module TinyDyno
|
3
|
+
module Tables
|
4
|
+
extend ActiveSupport::Concern
|
5
|
+
|
6
|
+
included do
|
7
|
+
class_attribute :table_name, :provisioned_throughput
|
8
|
+
|
9
|
+
self.table_name = self.name.to_s.downcase
|
10
|
+
self.provisioned_throughput ||= {
|
11
|
+
read_capacity_units: 100,
|
12
|
+
write_capacity_units: 100,
|
13
|
+
}
|
14
|
+
|
15
|
+
end
|
16
|
+
|
17
|
+
module ClassMethods
|
18
|
+
|
19
|
+
class << self
|
20
|
+
|
21
|
+
# Stores the provided block to be run when the option name specified is
|
22
|
+
# defined on a field.
|
23
|
+
#
|
24
|
+
# No assumptions are made about what sort of work the handler might
|
25
|
+
# perform, so it will always be called if the `option_name` key is
|
26
|
+
# provided in the field definition -- even if it is false or nil.
|
27
|
+
#
|
28
|
+
# @example
|
29
|
+
# TinyDyno::Tables.option :required do |model, field, value|
|
30
|
+
# model.validates_presence_of field if value
|
31
|
+
# end
|
32
|
+
#
|
33
|
+
# @param [ Symbol ] option_name the option name to match against
|
34
|
+
# @param [ Proc ] block the handler to execute when the option is
|
35
|
+
# provided.
|
36
|
+
#
|
37
|
+
# @since 2.1.0
|
38
|
+
def option(option_name, &block)
|
39
|
+
options[option_name] = block
|
40
|
+
end
|
41
|
+
|
42
|
+
# Return a map of custom option names to their handlers.
|
43
|
+
#
|
44
|
+
# @example
|
45
|
+
# TinyDyno::Tables.options
|
46
|
+
# # => { :required => #<Proc:0x00000100976b38> }
|
47
|
+
#
|
48
|
+
# @return [ Hash ] the option map
|
49
|
+
#
|
50
|
+
# @since 2.1.0
|
51
|
+
def options
|
52
|
+
@options ||= {}
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
# Send the actual table creation to the DynamoDB API
|
57
|
+
# @example Create the table for the class
|
58
|
+
# Person.create_table
|
59
|
+
# @return [ true ] If the operation succeeded
|
60
|
+
def create_table
|
61
|
+
raise InvalidTableDefinition.new "#{ self.name } has invalid table configuration" unless model_table_config_is_valid?
|
62
|
+
TinyDyno::Adapter.create_table(create_table_request)
|
63
|
+
end
|
64
|
+
|
65
|
+
# Request the table to be deleted
|
66
|
+
# @example Delete the table for the class
|
67
|
+
# Person.delete_table
|
68
|
+
# @return [ true ] If the operation succeeded
|
69
|
+
|
70
|
+
def delete_table
|
71
|
+
TinyDyno::Adapter.delete_table(table_name: self.table_name)
|
72
|
+
end
|
73
|
+
|
74
|
+
# Return the actual table name that represents the model in the DynamoDB store
|
75
|
+
# @example Return the table name for the class
|
76
|
+
# Person.table_name
|
77
|
+
#
|
78
|
+
# @return [ String ] The name of the table
|
79
|
+
|
80
|
+
def model_table_config_is_valid?
|
81
|
+
return (attribute_definitions_meet_spec? and not self.table_name.nil?)
|
82
|
+
end
|
83
|
+
|
84
|
+
private
|
85
|
+
|
86
|
+
# build create_table_request, as expected by aws-sdk v2 #create_table
|
87
|
+
# http://docs.aws.amazon.com/sdkforruby/api/Aws/DynamoDB/Client.html#create_table-instance_method
|
88
|
+
def create_table_request
|
89
|
+
{
|
90
|
+
table_name: self.table_name.to_s,
|
91
|
+
attribute_definitions: self.attribute_definitions,
|
92
|
+
key_schema: self.key_schema,
|
93
|
+
provisioned_throughput: self.provisioned_throughput
|
94
|
+
}
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
data/tiny_dyno.gemspec
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'tiny_dyno/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = 'tiny_dyno'
|
8
|
+
spec.version = TinyDyno::VERSION
|
9
|
+
spec.authors = ['Tobias Gerschner']
|
10
|
+
spec.email = ['tobias.gerschner@rataworks.com']
|
11
|
+
spec.license = 'MIT'
|
12
|
+
spec.summary = %q{Minimum Interface to Amazon DynamoDB}
|
13
|
+
spec.description = %q{Minimum Interface to Amazon DynamoDB, heavily inspired by Mongoid.}
|
14
|
+
spec.homepage = 'https://github.com/rataworks/tiny_dyno'
|
15
|
+
|
16
|
+
# Prevent pushing this gem to RubyGems.org by setting 'allowed_push_host', or
|
17
|
+
# delete this section to allow pushing this gem to any host.
|
18
|
+
if spec.respond_to?(:metadata)
|
19
|
+
spec.metadata['allowed_push_host'] = 'https://rubygems.org'
|
20
|
+
else
|
21
|
+
raise 'RubyGems 2.0 or newer is required to protect against public gem pushes.'
|
22
|
+
end
|
23
|
+
|
24
|
+
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
25
|
+
spec.bindir = 'bin'
|
26
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
27
|
+
spec.require_paths = ['lib']
|
28
|
+
|
29
|
+
spec.add_development_dependency 'bundler', '~> 1.10'
|
30
|
+
spec.add_development_dependency 'rake', '~> 10.0'
|
31
|
+
spec.add_development_dependency 'rspec', '~> 3.3'
|
32
|
+
spec.add_development_dependency 'simplecov', '~> 0.10'
|
33
|
+
spec.add_development_dependency 'rubocop', '~> 0.32'
|
34
|
+
spec.add_development_dependency 'guard-rspec', '~> 4.5'
|
35
|
+
spec.add_development_dependency 'fabrication', '~> 2.13'
|
36
|
+
spec.add_development_dependency 'faker', '~> 1.4'
|
37
|
+
|
38
|
+
spec.add_dependency 'aws-sdk', '~> 2.1'
|
39
|
+
spec.add_dependency 'activemodel', '~> 4.2'
|
40
|
+
|
41
|
+
end
|
metadata
ADDED
@@ -0,0 +1,226 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: tiny_dyno
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Tobias Gerschner
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-06-22 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.10'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.10'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '10.0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '10.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '3.3'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '3.3'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: simplecov
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0.10'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0.10'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rubocop
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0.32'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0.32'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: guard-rspec
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '4.5'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '4.5'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: fabrication
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '2.13'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '2.13'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: faker
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - "~>"
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '1.4'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - "~>"
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '1.4'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: aws-sdk
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - "~>"
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '2.1'
|
132
|
+
type: :runtime
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - "~>"
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '2.1'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: activemodel
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - "~>"
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '4.2'
|
146
|
+
type: :runtime
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - "~>"
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '4.2'
|
153
|
+
description: Minimum Interface to Amazon DynamoDB, heavily inspired by Mongoid.
|
154
|
+
email:
|
155
|
+
- tobias.gerschner@rataworks.com
|
156
|
+
executables: []
|
157
|
+
extensions: []
|
158
|
+
extra_rdoc_files: []
|
159
|
+
files:
|
160
|
+
- ".gitignore"
|
161
|
+
- ".rspec"
|
162
|
+
- ".ruby-version"
|
163
|
+
- ".simplecov"
|
164
|
+
- ".travis.yml"
|
165
|
+
- Gemfile
|
166
|
+
- Guardfile
|
167
|
+
- LICENSE
|
168
|
+
- README.md
|
169
|
+
- Rakefile
|
170
|
+
- bin/console
|
171
|
+
- bin/fastcheck
|
172
|
+
- bin/setup
|
173
|
+
- bin/tracer
|
174
|
+
- ci/tests.sh
|
175
|
+
- lib/config/locales/en.yml
|
176
|
+
- lib/tiny_dyno.rb
|
177
|
+
- lib/tiny_dyno/adapter.rb
|
178
|
+
- lib/tiny_dyno/adapter/items.rb
|
179
|
+
- lib/tiny_dyno/adapter/tables.rb
|
180
|
+
- lib/tiny_dyno/attributes.rb
|
181
|
+
- lib/tiny_dyno/attributes/readonly.rb
|
182
|
+
- lib/tiny_dyno/changeable.rb
|
183
|
+
- lib/tiny_dyno/document.rb
|
184
|
+
- lib/tiny_dyno/document_composition.rb
|
185
|
+
- lib/tiny_dyno/errors.rb
|
186
|
+
- lib/tiny_dyno/errors/attribute_errors.rb
|
187
|
+
- lib/tiny_dyno/errors/hash_key_errors.rb
|
188
|
+
- lib/tiny_dyno/errors/tiny_dyno_error.rb
|
189
|
+
- lib/tiny_dyno/extensions.rb
|
190
|
+
- lib/tiny_dyno/extensions/module.rb
|
191
|
+
- lib/tiny_dyno/fields.rb
|
192
|
+
- lib/tiny_dyno/fields/standard.rb
|
193
|
+
- lib/tiny_dyno/hash_keys.rb
|
194
|
+
- lib/tiny_dyno/loggable.rb
|
195
|
+
- lib/tiny_dyno/persistable.rb
|
196
|
+
- lib/tiny_dyno/range_attributes.rb
|
197
|
+
- lib/tiny_dyno/stateful.rb
|
198
|
+
- lib/tiny_dyno/tables.rb
|
199
|
+
- lib/tiny_dyno/version.rb
|
200
|
+
- tiny_dyno.gemspec
|
201
|
+
homepage: https://github.com/rataworks/tiny_dyno
|
202
|
+
licenses:
|
203
|
+
- MIT
|
204
|
+
metadata:
|
205
|
+
allowed_push_host: https://rubygems.org
|
206
|
+
post_install_message:
|
207
|
+
rdoc_options: []
|
208
|
+
require_paths:
|
209
|
+
- lib
|
210
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
211
|
+
requirements:
|
212
|
+
- - ">="
|
213
|
+
- !ruby/object:Gem::Version
|
214
|
+
version: '0'
|
215
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
216
|
+
requirements:
|
217
|
+
- - ">="
|
218
|
+
- !ruby/object:Gem::Version
|
219
|
+
version: '0'
|
220
|
+
requirements: []
|
221
|
+
rubyforge_project:
|
222
|
+
rubygems_version: 2.4.5
|
223
|
+
signing_key:
|
224
|
+
specification_version: 4
|
225
|
+
summary: Minimum Interface to Amazon DynamoDB
|
226
|
+
test_files: []
|