dynamoid 0.0.2 → 0.0.3
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.
- data/Dynamoid.gemspec +2 -1
- data/VERSION +1 -1
- data/lib/dynamoid.rb +5 -1
- data/lib/dynamoid/adapter.rb +6 -1
- data/lib/dynamoid/associations.rb +3 -1
- data/lib/dynamoid/associations/association.rb +6 -0
- data/lib/dynamoid/associations/has_and_belongs_to_many.rb +1 -1
- data/lib/dynamoid/config.rb +19 -1
- data/lib/dynamoid/config/options.rb +5 -9
- data/lib/dynamoid/finders.rb +2 -2
- data/spec/dynamoid/associations/association_spec.rb +11 -0
- data/spec/dynamoid/associations/has_and_belongs_to_many_spec.rb +10 -0
- data/spec/dynamoid/config_spec.rb +27 -0
- data/spec/spec_helper.rb +2 -0
- metadata +21 -20
data/Dynamoid.gemspec
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "dynamoid"
|
8
|
-
s.version = "0.0.
|
8
|
+
s.version = "0.0.3"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Josh Symonds"]
|
@@ -62,6 +62,7 @@ Gem::Specification.new do |s|
|
|
62
62
|
"spec/dynamoid/associations/has_one_spec.rb",
|
63
63
|
"spec/dynamoid/associations_spec.rb",
|
64
64
|
"spec/dynamoid/attributes_spec.rb",
|
65
|
+
"spec/dynamoid/config_spec.rb",
|
65
66
|
"spec/dynamoid/document_spec.rb",
|
66
67
|
"spec/dynamoid/fields_spec.rb",
|
67
68
|
"spec/dynamoid/finders_spec.rb",
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.3
|
data/lib/dynamoid.rb
CHANGED
@@ -24,9 +24,13 @@ module Dynamoid
|
|
24
24
|
extend self
|
25
25
|
|
26
26
|
def configure
|
27
|
-
block_given? ? yield(Config) : Config
|
27
|
+
block_given? ? yield(Dynamoid::Config) : Dynamoid::Config
|
28
28
|
Dynamoid::Adapter.reconnect!
|
29
29
|
end
|
30
30
|
alias :config :configure
|
31
31
|
|
32
|
+
def logger
|
33
|
+
Dynamoid::Config.logger
|
34
|
+
end
|
35
|
+
|
32
36
|
end
|
data/lib/dynamoid/adapter.rb
CHANGED
@@ -16,7 +16,12 @@ module Dynamoid #:nodoc:
|
|
16
16
|
end
|
17
17
|
|
18
18
|
def method_missing(method, *args)
|
19
|
-
|
19
|
+
if @adapter.respond_to?(method)
|
20
|
+
start = Time.now
|
21
|
+
result = @adapter.send(method, *args)
|
22
|
+
Dynamoid.logger.info "((#{((Time.now - start) * 1000.0).round(2)} ms) #{method.to_s.split('_').collect(&:upcase).join(' ')}#{ " - #{args.join(',')}" unless args.empty? }"
|
23
|
+
return result
|
24
|
+
end
|
20
25
|
super
|
21
26
|
end
|
22
27
|
end
|
@@ -44,7 +44,9 @@ module Dynamoid #:nodoc:
|
|
44
44
|
@associations[name] ||= Dynamoid::Associations.const_get(type.to_s.camelcase).new(self, name, options)
|
45
45
|
end
|
46
46
|
define_method("#{name}=".to_sym) do |objects|
|
47
|
-
|
47
|
+
@associations ||= {}
|
48
|
+
@associations[name] ||= Dynamoid::Associations.const_get(type.to_s.camelcase).new(self, name, options)
|
49
|
+
@associations[name].setter(objects)
|
48
50
|
end
|
49
51
|
end
|
50
52
|
end
|
@@ -38,6 +38,12 @@ module Dynamoid #:nodoc:
|
|
38
38
|
object
|
39
39
|
end
|
40
40
|
|
41
|
+
def setter(object)
|
42
|
+
source.update_attribute(source_attribute, Array(object).collect(&:id))
|
43
|
+
Array(object).collect{|o| self.send(:associate_target, o)} if target_association
|
44
|
+
object
|
45
|
+
end
|
46
|
+
|
41
47
|
def create(attributes = {})
|
42
48
|
object = target_class.create(attributes)
|
43
49
|
self << object
|
@@ -26,7 +26,7 @@ module Dynamoid #:nodoc:
|
|
26
26
|
|
27
27
|
def disassociate_target(object)
|
28
28
|
ids = object.send(target_attribute) || Set.new
|
29
|
-
|
29
|
+
object.update_attribute(target_attribute, ids - Array(source.id))
|
30
30
|
end
|
31
31
|
end
|
32
32
|
end
|
data/lib/dynamoid/config.rb
CHANGED
@@ -10,10 +10,28 @@ module Dynamoid #:nodoc
|
|
10
10
|
include ActiveModel::Observing
|
11
11
|
|
12
12
|
option :adapter, :default => 'local'
|
13
|
-
option :namespace, :default =>
|
13
|
+
option :namespace, :default => defined?(Rails) ? "dynamoid_#{Rails.application.class.parent_name}_#{Rails.env}" : "dynamoid"
|
14
|
+
option :logger, :default => defined?(Rails)
|
14
15
|
option :access_key
|
15
16
|
option :secret_key
|
16
17
|
option :warn_on_scan, :default => true
|
18
|
+
|
19
|
+
def default_logger
|
20
|
+
defined?(Rails) && Rails.respond_to?(:logger) ? Rails.logger : ::Logger.new($stdout)
|
21
|
+
end
|
22
|
+
|
23
|
+
def logger
|
24
|
+
@logger ||= default_logger
|
25
|
+
end
|
26
|
+
|
27
|
+
def logger=(logger)
|
28
|
+
case logger
|
29
|
+
when false, nil then @logger = nil
|
30
|
+
when true then @logger = default_logger
|
31
|
+
else
|
32
|
+
@logger = logger if logger.respond_to?(:info)
|
33
|
+
end
|
34
|
+
end
|
17
35
|
|
18
36
|
end
|
19
37
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
#
|
1
|
+
# Shamelessly stolen from Mongoid!
|
2
2
|
module Dynamoid #:nodoc
|
3
3
|
module Config
|
4
4
|
|
@@ -11,8 +11,6 @@ module Dynamoid #:nodoc
|
|
11
11
|
# options.defaults
|
12
12
|
#
|
13
13
|
# @return [ Hash ] The default options.
|
14
|
-
#
|
15
|
-
# @since 2.3.0
|
16
14
|
def defaults
|
17
15
|
@defaults ||= {}
|
18
16
|
end
|
@@ -26,8 +24,6 @@ module Dynamoid #:nodoc
|
|
26
24
|
# @param [ Hash ] options Extras for the option.
|
27
25
|
#
|
28
26
|
# @option options [ Object ] :default The default value.
|
29
|
-
#
|
30
|
-
# @since 2.0.0.rc.1
|
31
27
|
def option(name, options = {})
|
32
28
|
defaults[name] = settings[name] = options[:default]
|
33
29
|
|
@@ -43,6 +39,10 @@ module Dynamoid #:nodoc
|
|
43
39
|
def #{name}?
|
44
40
|
#{name}
|
45
41
|
end
|
42
|
+
|
43
|
+
def reset_#{name}
|
44
|
+
settings[#{name.inspect}] = defaults[#{name.inspect}]
|
45
|
+
end
|
46
46
|
RUBY
|
47
47
|
end
|
48
48
|
|
@@ -52,8 +52,6 @@ module Dynamoid #:nodoc
|
|
52
52
|
# config.reset
|
53
53
|
#
|
54
54
|
# @return [ Hash ] The defaults.
|
55
|
-
#
|
56
|
-
# @since 2.3.0
|
57
55
|
def reset
|
58
56
|
settings.replace(defaults)
|
59
57
|
end
|
@@ -64,8 +62,6 @@ module Dynamoid #:nodoc
|
|
64
62
|
# options.settings
|
65
63
|
#
|
66
64
|
# @return [ Hash ] The setting options.
|
67
|
-
#
|
68
|
-
# @since 2.3.0
|
69
65
|
def settings
|
70
66
|
@settings ||= {}
|
71
67
|
end
|
data/lib/dynamoid/finders.rb
CHANGED
@@ -41,8 +41,8 @@ module Dynamoid #:nodoc:
|
|
41
41
|
end
|
42
42
|
else
|
43
43
|
if Dynamoid::Config.warn_on_scan
|
44
|
-
|
45
|
-
|
44
|
+
Dynamoid.logger.warn 'Queries without an index are forced to use scan and are generally much slower than indexed queries!'
|
45
|
+
Dynamoid.logger.warn "You can index this query by adding this to #{self.to_s.downcase}.rb: index [#{attributes.sort.collect{|attr| ":#{attr}"}.join(', ')}]"
|
46
46
|
end
|
47
47
|
scan_hash = {}
|
48
48
|
attributes.each_with_index {|attr, index| scan_hash[attr.to_sym] = args[index]}
|
@@ -67,5 +67,16 @@ describe "Dynamoid::Associations::Association" do
|
|
67
67
|
@subscription.should_not respond_to :sponsors_ids
|
68
68
|
@subscription.should_not respond_to :sponsor_ids
|
69
69
|
end
|
70
|
+
|
71
|
+
it 'deletes all items from the association' do
|
72
|
+
@magazine.subscriptions << Subscription.create
|
73
|
+
@magazine.subscriptions << Subscription.create
|
74
|
+
@magazine.subscriptions << Subscription.create
|
75
|
+
|
76
|
+
@magazine.subscriptions.size.should == 3
|
77
|
+
|
78
|
+
@magazine.subscriptions = nil
|
79
|
+
@magazine.subscriptions.size.should == 0
|
80
|
+
end
|
70
81
|
|
71
82
|
end
|
@@ -26,5 +26,15 @@ describe "Dynamoid::Associations::HasAndBelongsToMany" do
|
|
26
26
|
|
27
27
|
@user.subscriptions.size.should == 1
|
28
28
|
@user.subscriptions.should include @subscription
|
29
|
+
@subscription.users.size.should == 1
|
30
|
+
@subscription.users.should include @user
|
31
|
+
end
|
32
|
+
|
33
|
+
it 'disassociates has_and_belongs_to_many automatically' do
|
34
|
+
@user = @subscription.users.create
|
35
|
+
|
36
|
+
@subscription.users.delete(@user)
|
37
|
+
@subscription.users.size.should == 0
|
38
|
+
@user.subscriptions.size.should == 0
|
29
39
|
end
|
30
40
|
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
|
+
|
3
|
+
describe "Dynamoid::Config" do
|
4
|
+
|
5
|
+
before(:each) do
|
6
|
+
Dynamoid::Config.reset_namespace
|
7
|
+
end
|
8
|
+
|
9
|
+
after(:each) do
|
10
|
+
Dynamoid.config {|config| config.namespace = 'dynamoid_tests'}
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'returns a namespace for non-Rails apps' do
|
14
|
+
Dynamoid::Config.namespace.should == 'dynamoid'
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'returns a namespace for Rails apps' do
|
18
|
+
class Rails; end
|
19
|
+
Rails.stubs(:application => stubs(:class => stubs(:parent_name => 'TestApp')))
|
20
|
+
Rails.stubs(:env => 'development')
|
21
|
+
Dynamoid::Config.send(:option, :namespace, :default => defined?(Rails) ? "dynamoid_#{Rails.application.class.parent_name}_#{Rails.env}" : "dynamoid")
|
22
|
+
|
23
|
+
# TODO Make this return what we actually expect
|
24
|
+
Dynamoid::Config.namespace.should == "dynamoid_Mocha_development"
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -19,6 +19,8 @@ Dynamoid.configure do |config|
|
|
19
19
|
config.warn_on_scan = false
|
20
20
|
end
|
21
21
|
|
22
|
+
Dynamoid.logger.level = Logger::FATAL
|
23
|
+
|
22
24
|
# Requires supporting files with custom matchers and macros, etc,
|
23
25
|
# in ./support/ and its subdirectories.
|
24
26
|
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dynamoid
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -13,7 +13,7 @@ date: 2012-02-26 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activemodel
|
16
|
-
requirement: &
|
16
|
+
requirement: &70135836907680 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70135836907680
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: tzinfo
|
27
|
-
requirement: &
|
27
|
+
requirement: &70135836906980 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70135836906980
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: aws-sdk
|
38
|
-
requirement: &
|
38
|
+
requirement: &70135836906300 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :runtime
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *70135836906300
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: mocha
|
49
|
-
requirement: &
|
49
|
+
requirement: &70135836905060 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: '0'
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *70135836905060
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: rake
|
60
|
-
requirement: &
|
60
|
+
requirement: &70135836904480 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ! '>='
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: '0'
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *70135836904480
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: rspec
|
71
|
-
requirement: &
|
71
|
+
requirement: &70135836903920 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ! '>='
|
@@ -76,10 +76,10 @@ dependencies:
|
|
76
76
|
version: '0'
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *70135836903920
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: bundler
|
82
|
-
requirement: &
|
82
|
+
requirement: &70135836072500 !ruby/object:Gem::Requirement
|
83
83
|
none: false
|
84
84
|
requirements:
|
85
85
|
- - ! '>='
|
@@ -87,10 +87,10 @@ dependencies:
|
|
87
87
|
version: '0'
|
88
88
|
type: :development
|
89
89
|
prerelease: false
|
90
|
-
version_requirements: *
|
90
|
+
version_requirements: *70135836072500
|
91
91
|
- !ruby/object:Gem::Dependency
|
92
92
|
name: jeweler
|
93
|
-
requirement: &
|
93
|
+
requirement: &70135836071700 !ruby/object:Gem::Requirement
|
94
94
|
none: false
|
95
95
|
requirements:
|
96
96
|
- - ! '>='
|
@@ -98,10 +98,10 @@ dependencies:
|
|
98
98
|
version: '0'
|
99
99
|
type: :development
|
100
100
|
prerelease: false
|
101
|
-
version_requirements: *
|
101
|
+
version_requirements: *70135836071700
|
102
102
|
- !ruby/object:Gem::Dependency
|
103
103
|
name: rcov
|
104
|
-
requirement: &
|
104
|
+
requirement: &70135836071100 !ruby/object:Gem::Requirement
|
105
105
|
none: false
|
106
106
|
requirements:
|
107
107
|
- - ! '>='
|
@@ -109,7 +109,7 @@ dependencies:
|
|
109
109
|
version: '0'
|
110
110
|
type: :development
|
111
111
|
prerelease: false
|
112
|
-
version_requirements: *
|
112
|
+
version_requirements: *70135836071100
|
113
113
|
description: Dynamoid is an ORM for Amazon's DynamoDB that supports offline development,
|
114
114
|
associations, querying, and everything else you'd expect from an ActiveRecord-style
|
115
115
|
replacement.
|
@@ -165,6 +165,7 @@ files:
|
|
165
165
|
- spec/dynamoid/associations/has_one_spec.rb
|
166
166
|
- spec/dynamoid/associations_spec.rb
|
167
167
|
- spec/dynamoid/attributes_spec.rb
|
168
|
+
- spec/dynamoid/config_spec.rb
|
168
169
|
- spec/dynamoid/document_spec.rb
|
169
170
|
- spec/dynamoid/fields_spec.rb
|
170
171
|
- spec/dynamoid/finders_spec.rb
|
@@ -188,7 +189,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
188
189
|
version: '0'
|
189
190
|
segments:
|
190
191
|
- 0
|
191
|
-
hash:
|
192
|
+
hash: -1286880132188396224
|
192
193
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
193
194
|
none: false
|
194
195
|
requirements:
|