tiny_dyno 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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
@@ -0,0 +1,3 @@
1
+ module TinyDyno
2
+ VERSION = "0.1.0"
3
+ 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: []