tiny_dyno 0.1.12 → 0.1.13

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 042ea3b53fd10c8a3a6b8ab228d568e501b1b843
4
- data.tar.gz: 5222389a219e25dc9a40b88a6ed748e54fb381d3
3
+ metadata.gz: f25a0b7a5a279763fa26f9086fb37804bb105e46
4
+ data.tar.gz: 0cd3addc209d7de1782c736aee2334a9070ef785
5
5
  SHA512:
6
- metadata.gz: 051dabb980854bc99bcb736ea43bea31df12c0eecdbf5e848c5e40f1a20e5bc6b8338e4239b218552597fb0929bfd1c1e427850e6ca1495d9315e45f77df47e5
7
- data.tar.gz: 7df845254448752c5eb6c16ea6d1ed7fa954adc55b2dbe69e11fba1b5f47f024d01508cf6b5277b2fc1a871c297cb9ddeb240462be3d06de5b94ec7b64c74ad7
6
+ metadata.gz: 9206f02ceb2088dd6d95c8a7539adbbd0541f668ccf4b40f06097aff3238cdb95e265efa4755d224f9cb19f0efbe63784f5e3c869958c0ea8fa846d8fd4f6471
7
+ data.tar.gz: 595bb39ad21dbd37ac20e8e883320dfde768bb75443b889a0323a5dcbaa24f760a2c070a2cfab48093b0d23d1a265e5247287a103886823d7d802c7bb8562da6
data/CHANGES.md CHANGED
@@ -1,3 +1,8 @@
1
+ 0.1.13 (2015-07-06)
2
+ -------------------
3
+
4
+ * Fix - return nil (not false), when a .where lookup does not match a document
5
+
1
6
  0.1.12 (2015-07-04)
2
7
  -------------------
3
8
 
@@ -59,7 +59,7 @@ module TinyDyno
59
59
  get_query = build_where_query(options)
60
60
  attributes = TinyDyno::Adapter.get_item(get_item_request: get_query)
61
61
  if attributes.nil?
62
- return false
62
+ return nil
63
63
  else
64
64
  record = self.new(attributes)
65
65
  record.instance_variable_set(:@new_record, false)
@@ -1,3 +1,3 @@
1
1
  module TinyDyno
2
- VERSION = '0.1.12'
2
+ VERSION = '0.1.13'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tiny_dyno
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.12
4
+ version: 0.1.13
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tobias Gerschner
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-07-05 00:00:00.000000000 Z
11
+ date: 2015-07-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -193,7 +193,6 @@ files:
193
193
  - lib/tiny_dyno/fields/range_key.rb
194
194
  - lib/tiny_dyno/fields/standard.rb
195
195
  - lib/tiny_dyno/hash_key.rb
196
- - lib/tiny_dyno/hash_keys.rb
197
196
  - lib/tiny_dyno/loggable.rb
198
197
  - lib/tiny_dyno/persistable.rb
199
198
  - lib/tiny_dyno/stateful.rb
@@ -1,134 +0,0 @@
1
- module TinyDyno
2
- module HashKeys
3
- extend ActiveSupport::Concern
4
-
5
- included do
6
- class_attribute :attribute_definitions, :key_schema, :hash_keys
7
-
8
- # TODO :local_secondary_indexes, :global_secondary_indexes
9
- self.attribute_definitions = []
10
- self.key_schema = []
11
- self.hash_keys = []
12
- @hash_key_fields = []
13
-
14
- end
15
-
16
- # return all defined hash keys on an instantiated object
17
- # for further use in DynamoDB queries
18
- #
19
- def hash_key_as_selector
20
- selector = {}
21
- self.class.hash_keys.each { |hk| selector[hk[:attr]] = attributes[hk[:attr]] }
22
- selector
23
- end
24
-
25
- module ClassMethods
26
-
27
- # Return true/false, depending on whether the provided argument
28
- # matches a defined hash key for this document model
29
- # @example Hash key is defined?
30
- # Person.hash_key_is_defined?(:id)
31
- #
32
- # @param [ String ] name, the name of the hash key
33
- # @return [ Boolean ] True, False
34
- def hash_key_is_defined?(arg = nil)
35
- @hash_key_fields.include?(arg)
36
- end
37
-
38
- # return the attribute_type as stored in the attribute_definitions
39
- def lookup_attribute_type(attribute_name)
40
- type = attribute_definitions.collect {|a| a[:attribute_type] if a[:attribute_name] == attribute_name }
41
- type.first
42
- end
43
-
44
- # Defines all the fields that are accessible on the Document
45
- # For each field that is defined, a getter and setter will be
46
- # added as an instance method to the Document.
47
- #
48
- # @example Define a field.
49
- # field :score, :type => Integer, :default => 0
50
- #
51
- # @param [ Symbol ] name The name of the field.
52
- # @param [ Hash ] options The options to pass to the field.
53
- #
54
- # @option options [ Class ] :type The type of the field.
55
- # @option options [ String ] :label The label for the field.
56
- # @option options [ Object, Proc ] :default The field's default
57
- #
58
- # @return [ Field ] The generated field
59
- def hash_key(name, options = {})
60
- named = name.to_s
61
- attribute_definition = build_attribute_definition(named,options[:type])
62
- key_schema = build_key_schema(named)
63
- unless attribute_definition_meets_spec?(attribute_definition)
64
- raise TinyDyno::Errors::InvalidHashKey.new(klass: self.class, name: name)
65
- end
66
- # we need the accessors as well
67
- add_field(named, options)
68
- self.attribute_definitions << attribute_definition
69
- self.key_schema << key_schema
70
- # TODO
71
- # should separate that out
72
- self.hash_keys << {
73
- attr: attribute_definition[:attribute_name],
74
- attr_type: attribute_definition[:attribute_type],
75
- key_type: key_schema[:key_type],
76
- }
77
- @hash_key_fields << attribute_definition[:attribute_name]
78
- end
79
-
80
- # convert a hash key into a format as expected by
81
- # put_item and update_item request
82
- def as_item_entry(hash_key)
83
-
84
- end
85
-
86
- private
87
-
88
- # Return true or false, depending on whether the attribute_definitions on the model
89
- # meet the specification of the Aws Sdk
90
- # This is a syntax, not a logic check
91
- def attribute_definitions_meet_spec?
92
- attribute_definitions.each do |definition|
93
- return false unless attribute_definition_meets_spec?(definition)
94
- end
95
- end
96
-
97
- def attribute_definition_meets_spec?(definition)
98
- return (definition.has_key?(:attribute_name) && \
99
- definition.has_key?(:attribute_type) && \
100
- definition[:attribute_name].class == String && \
101
- definition[:attribute_type].class == String && \
102
- ['S','N', 'B'].include?(definition[:attribute_type]))
103
- end
104
-
105
- def build_attribute_definition(name, key_type)
106
- {
107
- attribute_name: name,
108
- attribute_type: hash_key_type(key_type)
109
- }
110
- end
111
-
112
- def hash_key_type(key_type = nil)
113
- return 'S' if key_type == String
114
- return 'N' if key_type == Fixnum or key_type == Integer
115
- return nil
116
- end
117
-
118
- def build_key_schema(name)
119
- {
120
- attribute_name: name,
121
- key_type: 'HASH'
122
- }
123
- end
124
-
125
- # convert values in queries to DynamoDB
126
- # into types as expected by DynamoDB
127
- def dyno_typed_key(key:, val:)
128
- typed_class = self.fields[key].options[:type]
129
- return (document_typed(klass: typed_class, value: val))
130
- end
131
-
132
- end
133
- end
134
- end