ripple 0.6.1 → 0.7.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Rakefile +61 -48
- data/lib/ripple.rb +5 -1
- data/lib/ripple/core_ext/casting.rb +3 -0
- data/lib/ripple/document.rb +6 -2
- data/lib/ripple/document/associations.rb +154 -0
- data/lib/ripple/document/{persistence/callbacks.rb → associations/embedded.rb} +20 -24
- data/lib/ripple/document/associations/instantiators.rb +41 -0
- data/lib/{riak/util/translation.rb → ripple/document/associations/linked.rb} +14 -11
- data/lib/ripple/document/associations/many.rb +52 -0
- data/lib/ripple/document/associations/many_embedded_proxy.rb +49 -0
- data/lib/{riak/i18n.rb → ripple/document/associations/one.rb} +18 -2
- data/lib/ripple/document/associations/one_embedded_proxy.rb +41 -0
- data/lib/ripple/document/associations/proxy.rb +125 -0
- data/lib/ripple/document/attribute_methods.rb +8 -1
- data/lib/ripple/document/attribute_methods/read.rb +4 -0
- data/lib/ripple/document/attribute_methods/write.rb +4 -0
- data/lib/ripple/document/bucket_access.rb +1 -1
- data/lib/ripple/document/callbacks.rb +75 -0
- data/lib/ripple/document/finders.rb +50 -3
- data/lib/ripple/document/persistence.rb +14 -6
- data/lib/ripple/document/validations.rb +35 -7
- data/lib/ripple/document/validations/associated_validator.rb +37 -0
- data/lib/ripple/embedded_document.rb +8 -2
- data/lib/{riak/map_reduce_error.rb → ripple/embedded_document/conversion.rb} +19 -5
- data/lib/{riak/invalid_response.rb → ripple/embedded_document/finders.rb} +17 -8
- data/lib/ripple/embedded_document/persistence.rb +75 -13
- data/lib/ripple/locale/en.yml +7 -1
- data/{spec/riak/net_http_backend_spec.rb → lib/ripple/railtie.rb} +17 -13
- data/spec/fixtures/config.yml +3 -0
- data/spec/integration/ripple/associations_spec.rb +81 -0
- data/spec/integration/ripple/persistence_spec.rb +54 -0
- data/spec/ripple/associations/many_embedded_proxy_spec.rb +124 -0
- data/spec/ripple/associations/one_embedded_proxy_spec.rb +130 -0
- data/spec/ripple/associations/proxy_spec.rb +78 -0
- data/spec/ripple/associations_spec.rb +111 -0
- data/spec/ripple/attribute_methods_spec.rb +37 -16
- data/spec/ripple/bucket_access_spec.rb +3 -14
- data/spec/ripple/callbacks_spec.rb +53 -9
- data/spec/ripple/document_spec.rb +22 -6
- data/spec/ripple/embedded_document/conversion_spec.rb +35 -0
- data/spec/{riak/headers_spec.rb → ripple/embedded_document/finders_spec.rb} +17 -14
- data/spec/ripple/embedded_document/persistence_spec.rb +86 -0
- data/spec/ripple/embedded_document_spec.rb +1 -26
- data/spec/ripple/finders_spec.rb +66 -30
- data/spec/ripple/persistence_spec.rb +33 -21
- data/spec/ripple/properties_spec.rb +1 -7
- data/spec/ripple/ripple_spec.rb +10 -0
- data/spec/ripple/timestamps_spec.rb +12 -19
- data/spec/ripple/validations_spec.rb +48 -6
- data/spec/spec_helper.rb +4 -10
- data/spec/support/associations/proxies.rb +16 -0
- data/spec/support/integration.rb +4 -0
- data/spec/support/mocks.rb +3 -0
- data/spec/support/models/address.rb +8 -0
- data/spec/support/models/box.rb +6 -0
- data/spec/support/models/cardboard_box.rb +3 -0
- data/spec/support/models/clock.rb +6 -0
- data/spec/support/models/customer.rb +4 -0
- data/spec/support/models/email.rb +4 -0
- data/spec/support/models/family.rb +14 -0
- data/spec/support/models/favorite.rb +4 -0
- data/spec/support/models/invoice.rb +6 -0
- data/spec/support/models/late_invoice.rb +3 -0
- data/spec/support/models/note.rb +4 -0
- data/spec/support/models/page.rb +4 -0
- data/spec/support/models/paid_invoice.rb +4 -0
- data/spec/support/models/tree.rb +3 -0
- data/spec/support/models/user.rb +6 -0
- data/spec/support/models/widget.rb +6 -0
- metadata +111 -138
- data/.document +0 -5
- data/.gitignore +0 -26
- data/CONTRIBUTORS.textile +0 -5
- data/LICENSE +0 -13
- data/README.textile +0 -128
- data/RELEASE_NOTES.textile +0 -68
- data/VERSION +0 -1
- data/lib/riak.rb +0 -46
- data/lib/riak/bucket.rb +0 -157
- data/lib/riak/client.rb +0 -139
- data/lib/riak/client/curb_backend.rb +0 -82
- data/lib/riak/client/http_backend.rb +0 -209
- data/lib/riak/client/net_http_backend.rb +0 -49
- data/lib/riak/failed_request.rb +0 -37
- data/lib/riak/link.rb +0 -73
- data/lib/riak/locale/en.yml +0 -37
- data/lib/riak/map_reduce.rb +0 -248
- data/lib/riak/robject.rb +0 -258
- data/lib/riak/util/escape.rb +0 -12
- data/lib/riak/util/fiber1.8.rb +0 -48
- data/lib/riak/util/headers.rb +0 -44
- data/lib/riak/util/multipart.rb +0 -52
- data/lib/riak/walk_spec.rb +0 -117
- data/ripple.gemspec +0 -169
- data/spec/fixtures/cat.jpg +0 -0
- data/spec/fixtures/multipart-blank.txt +0 -7
- data/spec/fixtures/multipart-with-body.txt +0 -16
- data/spec/riak/bucket_spec.rb +0 -230
- data/spec/riak/client_spec.rb +0 -174
- data/spec/riak/curb_backend_spec.rb +0 -50
- data/spec/riak/escape_spec.rb +0 -17
- data/spec/riak/http_backend_spec.rb +0 -131
- data/spec/riak/link_spec.rb +0 -82
- data/spec/riak/map_reduce_spec.rb +0 -352
- data/spec/riak/multipart_spec.rb +0 -36
- data/spec/riak/object_spec.rb +0 -532
- data/spec/riak/walk_spec_spec.rb +0 -208
- data/spec/spec.opts +0 -1
- data/spec/support/http_backend_implementation_examples.rb +0 -215
- data/spec/support/mock_server.rb +0 -58
@@ -14,6 +14,27 @@
|
|
14
14
|
require 'ripple'
|
15
15
|
|
16
16
|
module Ripple
|
17
|
+
|
18
|
+
# Raised by <tt>find!</tt> when a document cannot be found with the given key.
|
19
|
+
# begin
|
20
|
+
# Example.find!('badkey')
|
21
|
+
# rescue Ripple::DocumentNotFound
|
22
|
+
# puts 'No Document here!'
|
23
|
+
# end
|
24
|
+
class DocumentNotFound < StandardError
|
25
|
+
include Translation
|
26
|
+
def initialize(keys, found)
|
27
|
+
if keys.empty?
|
28
|
+
super(t("document_not_found.no_key"))
|
29
|
+
elsif keys.one?
|
30
|
+
super(t("document_not_found.one_key", :key => keys.first))
|
31
|
+
else
|
32
|
+
missing = keys - found.compact.map(&:key)
|
33
|
+
super(t("document_not_found.many_keys", :keys => missing.join(', ')))
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
17
38
|
module Document
|
18
39
|
module Finders
|
19
40
|
extend ActiveSupport::Concern
|
@@ -35,10 +56,33 @@ module Ripple
|
|
35
56
|
# @return [Array<Document>] a list of found documents, including nil for missing documents
|
36
57
|
def find(*args)
|
37
58
|
args.flatten!
|
38
|
-
return
|
39
|
-
return find_one(args.first) if args.
|
59
|
+
return nil if args.empty?
|
60
|
+
return find_one(args.first) if args.one?
|
40
61
|
args.map {|key| find_one(key) }
|
41
62
|
end
|
63
|
+
|
64
|
+
# Retrieve single or multiple documents from Riak
|
65
|
+
# but raise Ripple::DocumentNotFound if a key can
|
66
|
+
# not be found in the bucket.
|
67
|
+
def find!(*args)
|
68
|
+
found = find(*args)
|
69
|
+
raise DocumentNotFound.new(args, found) if !found || Array(found).include?(nil)
|
70
|
+
found
|
71
|
+
end
|
72
|
+
|
73
|
+
# Find the first object using the first key in the
|
74
|
+
# bucket's keys using find. You should not expect to
|
75
|
+
# actually get the first object you added to the bucket.
|
76
|
+
# This is just a convenience method.
|
77
|
+
def first
|
78
|
+
find(bucket.keys.first)
|
79
|
+
end
|
80
|
+
|
81
|
+
# Find the first object using the first key in the
|
82
|
+
# bucket's keys using find!
|
83
|
+
def first!
|
84
|
+
find!(bucket.keys.first)
|
85
|
+
end
|
42
86
|
|
43
87
|
# Find all documents in the Document's bucket and return them.
|
44
88
|
# @overload all()
|
@@ -74,7 +118,10 @@ module Ripple
|
|
74
118
|
|
75
119
|
def instantiate(robject)
|
76
120
|
klass = robject.data['_type'].constantize rescue self
|
77
|
-
|
121
|
+
data = {'key' => robject.key}
|
122
|
+
data.reverse_merge!(robject.data) rescue data
|
123
|
+
klass.new(data).tap do |doc|
|
124
|
+
doc.key = data['key']
|
78
125
|
doc.instance_variable_set(:@new, false)
|
79
126
|
doc.instance_variable_set(:@robject, robject)
|
80
127
|
end
|
@@ -18,11 +18,20 @@ module Ripple
|
|
18
18
|
module Persistence
|
19
19
|
extend ActiveSupport::Concern
|
20
20
|
extend ActiveSupport::Autoload
|
21
|
+
|
22
|
+
module ClassMethods
|
23
|
+
|
24
|
+
# Instantiates a new record, applies attributes from a block, and saves it
|
25
|
+
def create(attrs={}, &block)
|
26
|
+
new(attrs, &block).tap {|s| s.save}
|
27
|
+
end
|
21
28
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
29
|
+
# Destroys all records one at a time.
|
30
|
+
# Place holder while :delete to bucket is being developed.
|
31
|
+
def destroy_all
|
32
|
+
all(&:destroy)
|
33
|
+
end
|
34
|
+
|
26
35
|
end
|
27
36
|
|
28
37
|
module InstanceMethods
|
@@ -36,7 +45,6 @@ module Ripple
|
|
36
45
|
def new?
|
37
46
|
@new || false
|
38
47
|
end
|
39
|
-
alias :new_record? :new?
|
40
48
|
|
41
49
|
# Saves the document in Riak.
|
42
50
|
# @return [true,false] whether the document succeeded in saving
|
@@ -73,7 +81,7 @@ module Ripple
|
|
73
81
|
def freeze
|
74
82
|
@attributes.freeze; super
|
75
83
|
end
|
76
|
-
|
84
|
+
|
77
85
|
protected
|
78
86
|
attr_writer :robject
|
79
87
|
|
@@ -14,10 +14,31 @@
|
|
14
14
|
require 'ripple'
|
15
15
|
|
16
16
|
module Ripple
|
17
|
+
|
18
|
+
# Raised by <tt>save!</tt> when the document is invalid. Use the
|
19
|
+
# +document+ method to retrieve the document which did not validate.
|
20
|
+
# begin
|
21
|
+
# invalid_document.save!
|
22
|
+
# rescue Ripple::DocumentInvalid => invalid
|
23
|
+
# puts invalid.document.errors
|
24
|
+
# end
|
25
|
+
class DocumentInvalid < StandardError
|
26
|
+
include Translation
|
27
|
+
attr_reader :document
|
28
|
+
def initialize(document)
|
29
|
+
@document = document
|
30
|
+
errors = @document.errors.full_messages.join(", ")
|
31
|
+
super(t("document_invalid", :errors => errors))
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
17
35
|
module Document
|
18
36
|
module Validations
|
19
37
|
extend ActiveSupport::Concern
|
38
|
+
extend ActiveSupport::Autoload
|
20
39
|
include ActiveModel::Validations
|
40
|
+
|
41
|
+
autoload :AssociatedValidator
|
21
42
|
|
22
43
|
module ClassMethods
|
23
44
|
# @private
|
@@ -25,19 +46,26 @@ module Ripple
|
|
25
46
|
prop = super
|
26
47
|
validates key, prop.validation_options unless prop.validation_options.blank?
|
27
48
|
end
|
49
|
+
|
50
|
+
# Instantiates a new record, applies attributes from a block, and saves it
|
51
|
+
# Raises Ripple::DocumentInvalid if the record did not save
|
52
|
+
def create!(attrs={}, &block)
|
53
|
+
obj = create(attrs, &block)
|
54
|
+
(raise Ripple::DocumentInvalid.new(obj) if obj.new?) || obj
|
55
|
+
end
|
28
56
|
end
|
29
57
|
|
30
58
|
module InstanceMethods
|
31
59
|
# @private
|
32
|
-
def save
|
33
|
-
|
60
|
+
def save(options={:validate => true})
|
61
|
+
return false if options[:validate] && !valid?
|
62
|
+
super()
|
34
63
|
end
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
@_on_validate = new? ? :create : :update
|
39
|
-
super
|
64
|
+
|
65
|
+
def save!
|
66
|
+
(raise Ripple::DocumentInvalid.new(self) unless save) || true
|
40
67
|
end
|
68
|
+
|
41
69
|
end
|
42
70
|
end
|
43
71
|
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# Copyright 2010 Sean Cribbs, Sonian Inc., and Basho Technologies, Inc.
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
#
|
15
|
+
# Taken from ActiveRecord::Validations::AssociatedValidators
|
16
|
+
#
|
17
|
+
|
18
|
+
require 'ripple'
|
19
|
+
|
20
|
+
module Ripple
|
21
|
+
module Document
|
22
|
+
module Validations
|
23
|
+
class AssociatedValidator < ActiveModel::EachValidator
|
24
|
+
def validate_each(record, attribute, value)
|
25
|
+
return if (value.is_a?(Array) ? value : [value]).collect{ |r| r.nil? || r.valid? }.all?
|
26
|
+
record.errors.add(attribute, :invalid, :default => options[:message], :value => value)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
module ClassMethods
|
31
|
+
def validates_associated(*attr_names)
|
32
|
+
validates_with AssociatedValidator, _merge_attributes(attr_names)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -18,16 +18,22 @@ module Ripple
|
|
18
18
|
extend ActiveSupport::Concern
|
19
19
|
extend ActiveSupport::Autoload
|
20
20
|
|
21
|
+
autoload :Conversion
|
22
|
+
autoload :Finders
|
21
23
|
autoload :Persistence
|
22
24
|
include Translation
|
23
25
|
|
24
26
|
included do
|
25
27
|
extend ActiveModel::Naming
|
26
28
|
extend Ripple::Document::Properties
|
27
|
-
include Persistence
|
28
29
|
include Ripple::Document::AttributeMethods
|
29
30
|
include Ripple::Document::Timestamps
|
30
31
|
include Ripple::Document::Validations
|
32
|
+
include Ripple::Document::Associations
|
33
|
+
include Ripple::Document::Callbacks
|
34
|
+
include Conversion
|
35
|
+
include Finders
|
36
|
+
include Persistence
|
31
37
|
end
|
32
38
|
|
33
39
|
module ClassMethods
|
@@ -36,4 +42,4 @@ module Ripple
|
|
36
42
|
end
|
37
43
|
end
|
38
44
|
end
|
39
|
-
end
|
45
|
+
end
|
@@ -11,10 +11,24 @@
|
|
11
11
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
12
|
# See the License for the specific language governing permissions and
|
13
13
|
# limitations under the License.
|
14
|
-
require '
|
14
|
+
require 'ripple'
|
15
15
|
|
16
|
-
module
|
17
|
-
|
18
|
-
|
19
|
-
|
16
|
+
module Ripple
|
17
|
+
module EmbeddedDocument
|
18
|
+
module Conversion
|
19
|
+
extend ActiveSupport::Concern
|
20
|
+
|
21
|
+
module InstanceMethods
|
22
|
+
include ActiveModel::Conversion
|
23
|
+
|
24
|
+
def to_key
|
25
|
+
new? ? nil : [key]
|
26
|
+
end
|
27
|
+
|
28
|
+
def to_param
|
29
|
+
key
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
20
34
|
end
|
@@ -11,15 +11,24 @@
|
|
11
11
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
12
|
# See the License for the specific language governing permissions and
|
13
13
|
# limitations under the License.
|
14
|
-
require '
|
14
|
+
require 'ripple'
|
15
15
|
|
16
|
-
module
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
16
|
+
module Ripple
|
17
|
+
module EmbeddedDocument
|
18
|
+
module Finders
|
19
|
+
extend ActiveSupport::Concern
|
20
|
+
|
21
|
+
module ClassMethods
|
22
|
+
def instantiate(attrs)
|
23
|
+
begin
|
24
|
+
klass = attrs['_type'].present? ? attrs['_type'].constantize : self
|
25
|
+
klass.new(attrs)
|
26
|
+
rescue NameError
|
27
|
+
new(attrs)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
23
32
|
end
|
24
33
|
end
|
25
34
|
end
|
@@ -14,32 +14,94 @@
|
|
14
14
|
require 'ripple'
|
15
15
|
|
16
16
|
module Ripple
|
17
|
+
class NoRootDocument < StandardError
|
18
|
+
include Translation
|
19
|
+
def initialize(doc, method)
|
20
|
+
super(t("no_root_document", :doc => doc.inspect, :method => method))
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
17
24
|
module EmbeddedDocument
|
18
25
|
module Persistence
|
19
26
|
extend ActiveSupport::Concern
|
20
|
-
|
21
|
-
|
22
|
-
|
27
|
+
|
28
|
+
module ClassMethods
|
29
|
+
def embedded_in(parent)
|
30
|
+
define_method(parent) { @_parent_document }
|
31
|
+
end
|
23
32
|
end
|
24
|
-
|
33
|
+
|
25
34
|
module InstanceMethods
|
26
|
-
|
35
|
+
|
36
|
+
attr_reader :_parent_document
|
37
|
+
|
38
|
+
def embeddable?
|
39
|
+
self.class.embeddable?
|
40
|
+
end
|
41
|
+
|
27
42
|
def new?
|
28
|
-
if
|
29
|
-
@_root_document.new?
|
30
|
-
else
|
43
|
+
if _root_document?
|
31
44
|
super
|
45
|
+
elsif @_root_document
|
46
|
+
_root_document.new?
|
47
|
+
else
|
48
|
+
true
|
32
49
|
end
|
33
50
|
end
|
34
|
-
|
35
|
-
#
|
36
|
-
def
|
37
|
-
|
38
|
-
|
51
|
+
|
52
|
+
# because alias_method doesn't like super
|
53
|
+
def new_record?; new?; end
|
54
|
+
|
55
|
+
# for ActiveModel::Conversion
|
56
|
+
def persisted?; !new?; end
|
57
|
+
|
58
|
+
def save(*args)
|
59
|
+
if _root_document?
|
60
|
+
super
|
61
|
+
elsif @_root_document
|
62
|
+
_root_document.save(*args)
|
39
63
|
else
|
64
|
+
raise NoRootDocument.new(self, :save)
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
def save!(*args)
|
69
|
+
if _root_document?
|
40
70
|
super
|
71
|
+
elsif @_root_document
|
72
|
+
_root_document.save!(*args)
|
73
|
+
else
|
74
|
+
raise NoRootDocument.new(self, :save!)
|
41
75
|
end
|
42
76
|
end
|
77
|
+
|
78
|
+
def _root_document
|
79
|
+
embeddable? ? @_root_document : self
|
80
|
+
end
|
81
|
+
|
82
|
+
def _root_document?
|
83
|
+
_root_document === self
|
84
|
+
end
|
85
|
+
|
86
|
+
def attributes_for_persistence
|
87
|
+
attributes.merge("_type" => self.class.name).merge(embedded_attributes_for_persistence)
|
88
|
+
end
|
89
|
+
|
90
|
+
def _parent_document=(value)
|
91
|
+
@_root_document = value._root_document
|
92
|
+
@_parent_document = value
|
93
|
+
end
|
94
|
+
|
95
|
+
protected
|
96
|
+
|
97
|
+
def embedded_attributes_for_persistence
|
98
|
+
embedded_associations.inject({}) do |attrs, association|
|
99
|
+
if documents = instance_variable_get(association.ivar)
|
100
|
+
attrs[association.name] = documents.is_a?(Array) ? documents.map(&:attributes_for_persistence) : documents.attributes_for_persistence
|
101
|
+
end
|
102
|
+
attrs
|
103
|
+
end
|
104
|
+
end
|
43
105
|
end
|
44
106
|
end
|
45
107
|
end
|
data/lib/ripple/locale/en.yml
CHANGED
@@ -14,4 +14,10 @@
|
|
14
14
|
en:
|
15
15
|
ripple:
|
16
16
|
property_type_mismatch: "Cannot cast {{value}} into a {{class}}"
|
17
|
-
attribute_hash: "value of attributes must be a Hash"
|
17
|
+
attribute_hash: "value of attributes must be a Hash"
|
18
|
+
document_invalid: "Validation failed: {{errors}}"
|
19
|
+
document_not_found:
|
20
|
+
no_key: "Couldn't find document without a key"
|
21
|
+
one_key: "Couldn't find document with key: {{key}}"
|
22
|
+
many_keys: "Couldn't find documents with keys: {{keys}}"
|
23
|
+
no_root_document: "You cannot call {{method}} on {{doc}} without a root document"
|
@@ -11,18 +11,22 @@
|
|
11
11
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
12
|
# See the License for the specific language governing permissions and
|
13
13
|
# limitations under the License.
|
14
|
-
require
|
15
|
-
|
16
|
-
describe Riak::Client::NetHTTPBackend do
|
17
|
-
before :each do
|
18
|
-
@client = Riak::Client.new
|
19
|
-
@backend = Riak::Client::NetHTTPBackend.new(@client)
|
20
|
-
FakeWeb.allow_net_connect = false
|
21
|
-
end
|
14
|
+
require 'ripple'
|
15
|
+
require 'rails'
|
22
16
|
|
23
|
-
|
24
|
-
|
17
|
+
# require in gemfile using
|
18
|
+
# <tt>gem "ripple", :require_as => ["ripple", "ripple/railtie"]</tt>
|
19
|
+
module Ripple
|
20
|
+
class Railtie < Rails::Railtie
|
21
|
+
railtie_name :ripple
|
22
|
+
|
23
|
+
initializer "ripple.configure_rails_initialization" do
|
24
|
+
Ripple.load_configuration
|
25
|
+
end
|
25
26
|
end
|
26
|
-
|
27
|
-
|
28
|
-
|
27
|
+
|
28
|
+
def self.load_configuration
|
29
|
+
config_file = Rails.root.join('config', 'database.yml')
|
30
|
+
self.config = YAML.load_file(File.expand_path config_file).with_indifferent_access[:ripple][Rails.env]
|
31
|
+
end
|
32
|
+
end
|