bigrecord 0.0.5 → 0.0.6
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/{MIT-LICENSE → LICENSE} +0 -0
- data/README.rdoc +3 -3
- data/Rakefile +1 -2
- data/VERSION +1 -1
- data/doc/bigrecord_specs.rdoc +0 -0
- data/doc/getting_started.rdoc +4 -0
- data/examples/bigrecord.yml +0 -0
- data/generators/bigrecord/bigrecord_generator.rb +0 -0
- data/generators/bigrecord/templates/bigrecord.rake +0 -0
- data/generators/bigrecord_migration/bigrecord_migration_generator.rb +0 -0
- data/generators/bigrecord_migration/templates/migration.rb +0 -0
- data/generators/bigrecord_model/bigrecord_model_generator.rb +0 -0
- data/generators/bigrecord_model/templates/migration.rb +0 -0
- data/generators/bigrecord_model/templates/model.rb +0 -0
- data/generators/bigrecord_model/templates/model_spec.rb +0 -0
- data/init.rb +1 -9
- data/install.rb +0 -0
- data/lib/big_record/abstract_base.rb +0 -1
- data/lib/big_record/action_view_extensions.rb +0 -0
- data/lib/big_record/ar_associations/association_collection.rb +0 -0
- data/lib/big_record/ar_associations/association_proxy.rb +0 -0
- data/lib/big_record/ar_associations/belongs_to_association.rb +0 -0
- data/lib/big_record/ar_associations/belongs_to_many_association.rb +0 -0
- data/lib/big_record/ar_associations/has_and_belongs_to_many_association.rb +0 -0
- data/lib/big_record/ar_associations/has_many_association.rb +0 -0
- data/lib/big_record/ar_associations/has_one_association.rb +0 -0
- data/lib/big_record/ar_associations.rb +8 -6
- data/lib/big_record/ar_reflection.rb +1 -1
- data/lib/big_record/attribute_methods.rb +1 -1
- data/lib/big_record/base.rb +35 -24
- data/lib/big_record/br_associations/association_collection.rb +0 -0
- data/lib/big_record/br_associations/association_proxy.rb +0 -0
- data/lib/big_record/br_associations/belongs_to_association.rb +0 -0
- data/lib/big_record/br_associations/belongs_to_many_association.rb +0 -0
- data/lib/big_record/br_associations/cached_item_proxy.rb +0 -0
- data/lib/big_record/br_associations/cached_item_proxy_factory.rb +0 -0
- data/lib/big_record/br_associations/has_and_belongs_to_many_association.rb +0 -0
- data/lib/big_record/br_associations/has_one_association.rb +0 -0
- data/lib/big_record/br_associations.rb +8 -6
- data/lib/big_record/br_reflection.rb +0 -0
- data/lib/big_record/callbacks.rb +0 -0
- data/lib/big_record/connection_adapters/abstract/connection_specification.rb +0 -0
- data/lib/big_record/connection_adapters/abstract/database_statements.rb +0 -0
- data/lib/big_record/connection_adapters/abstract/quoting.rb +0 -0
- data/lib/big_record/connection_adapters/abstract_adapter.rb +0 -0
- data/lib/big_record/connection_adapters/column.rb +0 -0
- data/lib/big_record/connection_adapters/hbase_adapter.rb +0 -0
- data/lib/big_record/connection_adapters/view.rb +13 -1
- data/lib/big_record/connection_adapters.rb +0 -0
- data/lib/big_record/deletion.rb +0 -0
- data/lib/big_record/dynamic_schema.rb +3 -6
- data/lib/big_record/embedded.rb +0 -0
- data/lib/big_record/embedded_associations/association_proxy.rb +0 -0
- data/lib/big_record/family_span_columns.rb +0 -0
- data/lib/big_record/fixtures.rb +0 -0
- data/lib/big_record/migration.rb +1 -16
- data/lib/big_record/routing_ext.rb +1 -27
- data/lib/big_record/timestamp.rb +3 -3
- data/lib/big_record/validations.rb +1 -1
- data/lib/big_record.rb +35 -47
- data/lib/bigrecord.rb +0 -0
- data/rails/init.rb +8 -2
- data/spec/connections/bigrecord.yml +0 -0
- data/spec/connections/cassandra/connection.rb +0 -0
- data/spec/connections/hbase/connection.rb +0 -0
- data/spec/debug.log +40722 -246
- data/spec/integration/br_associations_spec.rb +0 -0
- data/spec/lib/animal.rb +10 -5
- data/spec/lib/book.rb +0 -0
- data/spec/lib/broken_migrations/duplicate_name/20090706182535_add_animals_table.rb +0 -0
- data/spec/lib/broken_migrations/duplicate_name/20090706193019_add_animals_table.rb +0 -0
- data/spec/lib/broken_migrations/duplicate_version/20090706190623_add_books_table.rb +0 -0
- data/spec/lib/broken_migrations/duplicate_version/20090706190623_add_companies_table.rb +0 -0
- data/spec/lib/company.rb +0 -0
- data/spec/lib/embedded/web_link.rb +0 -0
- data/spec/lib/employee.rb +0 -0
- data/spec/lib/migrations/20090706182535_add_animals_table.rb +0 -0
- data/spec/lib/migrations/20090706190623_add_books_table.rb +0 -0
- data/spec/lib/migrations/20090706193019_add_companies_table.rb +0 -0
- data/spec/lib/migrations/20090706194512_add_employees_table.rb +0 -0
- data/spec/lib/migrations/20090706195741_add_zoos_table.rb +0 -0
- data/spec/lib/novel.rb +0 -0
- data/spec/lib/zoo.rb +0 -0
- data/spec/spec.opts +0 -0
- data/spec/spec_helper.rb +0 -0
- data/spec/unit/abstract_base_spec.rb +0 -56
- data/spec/unit/adapters/abstract_adapter_spec.rb +0 -0
- data/spec/unit/adapters/adapter_shared_spec.rb +0 -0
- data/spec/unit/adapters/hbase_adapter_spec.rb +0 -0
- data/spec/unit/ar_associations_spec.rb +0 -0
- data/spec/unit/base_spec.rb +101 -0
- data/spec/unit/br_associations_spec.rb +0 -0
- data/spec/unit/embedded_spec.rb +0 -0
- data/spec/unit/find_spec.rb +0 -0
- data/spec/unit/hash_helper_spec.rb +0 -0
- data/spec/unit/migration_spec.rb +0 -0
- data/spec/unit/model_spec.rb +0 -0
- data/spec/unit/validations_spec.rb +0 -0
- data/tasks/bigrecord_tasks.rake +0 -0
- data/tasks/data_store.rb +0 -0
- data/tasks/gem.rb +4 -3
- data/tasks/rdoc.rb +0 -0
- data/tasks/spec.rb +1 -1
- metadata +24 -4
data/{MIT-LICENSE → LICENSE}
RENAMED
|
File without changes
|
data/README.rdoc
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
= Big Record
|
|
2
2
|
|
|
3
|
-
A Ruby Object/Data Mapper for distributed column-oriented data stores (inspired by BigTable) such as HBase. Intended to work as a drop-in for Rails applications.
|
|
3
|
+
A Ruby Object/Data Mapper for distributed column-oriented data stores (inspired by BigTable) such as HBase. Intended to work as a drop-in for Rails applications.
|
|
4
4
|
|
|
5
5
|
== Features
|
|
6
6
|
* Dynamic schemas (due to the schema-less design of BigTable).
|
|
@@ -10,9 +10,9 @@ A Ruby Object/Data Mapper for distributed column-oriented data stores (inspired
|
|
|
10
10
|
* Automatic versioning.
|
|
11
11
|
* Scalability (depending on the data store used).
|
|
12
12
|
|
|
13
|
-
==
|
|
13
|
+
== Motivations
|
|
14
14
|
|
|
15
|
-
BigTable, and by extension,
|
|
15
|
+
BigTable, and by extension, Bigrecord isn't right for everyone. A great introductory article discussing this topic can be found at http://blog.rapleaf.com/dev/?p=26 explaining why you would or wouldn't use BigTable. The rule of thumb, however, is that if your data model is simple or can fit into a standard RDBMS, then you probably don't need it.
|
|
16
16
|
|
|
17
17
|
Beyond this though, there are two basic motivations that almost immediately demand a BigTable model database:
|
|
18
18
|
1. Your data is highly dynamic in nature and would not fit in a schema bound model, or you cannot define a schema ahead of time.
|
data/Rakefile
CHANGED
|
@@ -4,12 +4,11 @@ require 'rubygems'
|
|
|
4
4
|
require 'rake'
|
|
5
5
|
require 'rake/rdoctask'
|
|
6
6
|
require 'rake/gempackagetask'
|
|
7
|
-
require 'pathname'
|
|
8
7
|
require 'spec/rake/spectask'
|
|
9
8
|
|
|
10
9
|
|
|
11
10
|
DATA_STORES = ["hbase", "cassandra"]
|
|
12
|
-
ROOT =
|
|
11
|
+
ROOT = File.expand_path(File.dirname(__FILE__)) + '/'
|
|
13
12
|
|
|
14
13
|
require ROOT + 'tasks/gem'
|
|
15
14
|
require ROOT + 'tasks/rdoc'
|
data/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
0.0.
|
|
1
|
+
0.0.6
|
data/doc/bigrecord_specs.rdoc
CHANGED
|
File without changes
|
data/doc/getting_started.rdoc
CHANGED
|
@@ -18,6 +18,10 @@
|
|
|
18
18
|
|
|
19
19
|
config.gem "bigrecord", :source => "http://gemcutter.org"
|
|
20
20
|
|
|
21
|
+
and run the following command to install all the gems listed for your Rails app:
|
|
22
|
+
|
|
23
|
+
[sudo] rake gems:install
|
|
24
|
+
|
|
21
25
|
(3) Bootstrap Bigrecord into your project:
|
|
22
26
|
|
|
23
27
|
script/generate bigrecord
|
data/examples/bigrecord.yml
CHANGED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
data/init.rb
CHANGED
|
@@ -1,9 +1 @@
|
|
|
1
|
-
require
|
|
2
|
-
|
|
3
|
-
# Use the same logger as ActiveRecord to make sure that the access to the log file is properly handled
|
|
4
|
-
BigRecord::Base.logger = ActiveRecord::Base.logger
|
|
5
|
-
BigRecord::Embedded.logger = ActiveRecord::Base.logger
|
|
6
|
-
|
|
7
|
-
# Establish the connection with the database
|
|
8
|
-
BigRecord::Base.configurations = YAML::load(File.open("#{RAILS_ROOT}/config/bigrecord.yml"))
|
|
9
|
-
BigRecord::Base.establish_connection
|
|
1
|
+
require File.join(File.dirname(__FILE__), "rails", "init")
|
data/install.rb
CHANGED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -1,9 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
require '
|
|
4
|
-
require '
|
|
5
|
-
require '
|
|
6
|
-
require '
|
|
1
|
+
dir = File.expand_path(File.join(File.dirname(__FILE__), "ar_associations"))
|
|
2
|
+
|
|
3
|
+
require dir + '/association_proxy'
|
|
4
|
+
require dir + '/association_collection'
|
|
5
|
+
require dir + '/belongs_to_association'
|
|
6
|
+
require dir + '/has_one_association'
|
|
7
|
+
require dir + '/has_many_association'
|
|
8
|
+
require dir + '/has_and_belongs_to_many_association'
|
|
7
9
|
|
|
8
10
|
module BigRecord
|
|
9
11
|
class HasManyThroughAssociationNotFoundError < BigRecordError #:nodoc:
|
|
@@ -4,7 +4,7 @@ module BigRecord
|
|
|
4
4
|
base.extend(ClassMethods)
|
|
5
5
|
end
|
|
6
6
|
|
|
7
|
-
# Reflection allows you to interrogate
|
|
7
|
+
# Reflection allows you to interrogate Big Record classes and objects about their associations and aggregations.
|
|
8
8
|
# This information can, for example, be used in a form builder that took an Active Record object and created input
|
|
9
9
|
# fields for all of the attributes depending on their type and displayed the associations to other objects.
|
|
10
10
|
#
|
data/lib/big_record/base.rb
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
## The sub-classes of this class must implement the abstract method 'column_names' of this class.
|
|
2
1
|
module BigRecord
|
|
3
2
|
|
|
4
3
|
class Base < AbstractBase
|
|
@@ -411,14 +410,14 @@ module BigRecord
|
|
|
411
410
|
(superclass == BigRecord::Base) ? self : superclass.base_class
|
|
412
411
|
end
|
|
413
412
|
|
|
414
|
-
def view(name, columns)
|
|
413
|
+
def view(name, *columns)
|
|
415
414
|
name = name.to_sym
|
|
416
415
|
@views_hash ||= default_views
|
|
417
416
|
|
|
418
417
|
# The other variables that are cached and depend on @views_hash need to be reloaded
|
|
419
418
|
invalidate_views
|
|
420
419
|
|
|
421
|
-
@views_hash[name] = ConnectionAdapters::View.new(name, columns, self)
|
|
420
|
+
@views_hash[name] = ConnectionAdapters::View.new(name, columns.flatten, self)
|
|
422
421
|
end
|
|
423
422
|
|
|
424
423
|
def views
|
|
@@ -471,6 +470,39 @@ module BigRecord
|
|
|
471
470
|
end
|
|
472
471
|
end
|
|
473
472
|
|
|
473
|
+
# return the list of columns to get from hbase
|
|
474
|
+
def columns_to_find(options={})
|
|
475
|
+
c =
|
|
476
|
+
if options[:columns]
|
|
477
|
+
column_list = []
|
|
478
|
+
options[:columns].each do |column_name|
|
|
479
|
+
# If the column name provided is a full name, i.e. includes column family and qualifier,
|
|
480
|
+
# then add it to the list.
|
|
481
|
+
if column_name.to_s =~ /:/
|
|
482
|
+
column_list << column_name
|
|
483
|
+
|
|
484
|
+
# Otherwise, it's probably an alias and we need to check that.
|
|
485
|
+
else
|
|
486
|
+
columns.select{|column| column_list << column.name if column.alias == column_name.to_s}
|
|
487
|
+
end
|
|
488
|
+
end
|
|
489
|
+
column_list
|
|
490
|
+
elsif options[:view]
|
|
491
|
+
raise ArgumentError, "Unknown view: #{options[:view]}" unless views_hash[options[:view]]
|
|
492
|
+
if options[:view] == :all
|
|
493
|
+
["#{default_family}:"]
|
|
494
|
+
else
|
|
495
|
+
views_hash[options[:view]].column_names
|
|
496
|
+
end
|
|
497
|
+
elsif views_hash[:default]
|
|
498
|
+
views_hash[:default].column_names
|
|
499
|
+
else
|
|
500
|
+
["#{default_family}:"]
|
|
501
|
+
end
|
|
502
|
+
c += [options[:include]] if options[:include]
|
|
503
|
+
c.flatten.reject{|x| x == "id"}
|
|
504
|
+
end
|
|
505
|
+
|
|
474
506
|
protected
|
|
475
507
|
def invalidate_views
|
|
476
508
|
@views = nil
|
|
@@ -567,27 +599,6 @@ module BigRecord
|
|
|
567
599
|
end
|
|
568
600
|
end
|
|
569
601
|
|
|
570
|
-
# return the list of columns to get from hbase
|
|
571
|
-
def columns_to_find(options={})
|
|
572
|
-
c =
|
|
573
|
-
if options[:columns]
|
|
574
|
-
options[:columns]
|
|
575
|
-
elsif options[:view]
|
|
576
|
-
raise ArgumentError, "Unknown view: #{options[:view]}" unless views_hash[options[:view]]
|
|
577
|
-
if options[:view] == :all
|
|
578
|
-
["#{default_family}:"]
|
|
579
|
-
else
|
|
580
|
-
views_hash[options[:view]].column_names
|
|
581
|
-
end
|
|
582
|
-
elsif views_hash[:default]
|
|
583
|
-
views_hash[:default].column_names
|
|
584
|
-
else
|
|
585
|
-
["#{default_family}:"]
|
|
586
|
-
end
|
|
587
|
-
c += [options[:include]] if options[:include]
|
|
588
|
-
c.flatten.reject{|x| x == "id"}
|
|
589
|
-
end
|
|
590
|
-
|
|
591
602
|
# Add the missing cells to the raw record and set them to nil. We know that it's
|
|
592
603
|
# nil because else we would have received those cells. That way, when the value of
|
|
593
604
|
# one of these cells will be requested by the client we won't try to lazy load it.
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -1,9 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
require '
|
|
4
|
-
require '
|
|
5
|
-
require '
|
|
6
|
-
require '
|
|
1
|
+
dir = File.expand_path(File.join(File.dirname(__FILE__), "br_associations"))
|
|
2
|
+
|
|
3
|
+
require dir + '/association_proxy'
|
|
4
|
+
require dir + '/association_collection'
|
|
5
|
+
require dir + '/belongs_to_association'
|
|
6
|
+
require dir + '/belongs_to_many_association'
|
|
7
|
+
require dir + '/has_one_association'
|
|
8
|
+
require dir + '/has_and_belongs_to_many_association'
|
|
7
9
|
|
|
8
10
|
module BigRecord
|
|
9
11
|
module BrAssociations # :nodoc:
|
|
File without changes
|
data/lib/big_record/callbacks.rb
CHANGED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -12,7 +12,19 @@ module BigRecord
|
|
|
12
12
|
# Return the column objects associated with this view. By default the views 'all' and 'default' return every column.
|
|
13
13
|
def columns
|
|
14
14
|
if @column_names
|
|
15
|
-
|
|
15
|
+
columns = []
|
|
16
|
+
|
|
17
|
+
# First match against fully named columns, e.g. 'attribute:name'
|
|
18
|
+
@column_names.each{|cn| columns << owner.columns_hash[cn] if owner.columns_hash.has_key?(cn)}
|
|
19
|
+
|
|
20
|
+
# Now match against aliases if the number of columns found previously do not
|
|
21
|
+
# match the expected @columns_names size, i.e. there's still some missing.
|
|
22
|
+
if columns.size != @column_names.size
|
|
23
|
+
columns_left = @column_names - columns.map{|column| column.name}
|
|
24
|
+
owner.columns_hash.each { |name,column| columns << column if columns_left.include?(column.alias) }
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
columns
|
|
16
28
|
else
|
|
17
29
|
owner.columns
|
|
18
30
|
end
|
|
File without changes
|
data/lib/big_record/deletion.rb
CHANGED
|
File without changes
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
# Replace the anonymous classes
|
|
2
1
|
module BigRecord
|
|
3
2
|
module DynamicSchema
|
|
4
3
|
|
|
@@ -9,12 +8,10 @@ module BigRecord
|
|
|
9
8
|
base.alias_method_chain :attributes_from_column_definition, :dynamic_schema
|
|
10
9
|
base.alias_method_chain :inspect, :dynamic_schema
|
|
11
10
|
base.alias_method_chain :define_read_methods, :dynamic_schema
|
|
12
|
-
|
|
13
11
|
end
|
|
14
12
|
|
|
15
13
|
# Stub of the callback for setting the dynamic columns. Override this to add dynamic columns
|
|
16
14
|
def initialize_columns(options={})
|
|
17
|
-
|
|
18
15
|
end
|
|
19
16
|
|
|
20
17
|
# Create and add a dynamic column to this record
|
|
@@ -23,10 +20,10 @@ module BigRecord
|
|
|
23
20
|
end
|
|
24
21
|
|
|
25
22
|
# Add an existing dynamic column to this record
|
|
26
|
-
def add_dynamic_column(
|
|
27
|
-
columns_hash[c.name] =
|
|
23
|
+
def add_dynamic_column(col)
|
|
24
|
+
columns_hash[c.name] = col
|
|
28
25
|
@columns_name= nil; @columns= nil #reset
|
|
29
|
-
|
|
26
|
+
col
|
|
30
27
|
end
|
|
31
28
|
|
|
32
29
|
def columns_hash
|
data/lib/big_record/embedded.rb
CHANGED
|
File without changes
|
|
File without changes
|
|
File without changes
|
data/lib/big_record/fixtures.rb
CHANGED
|
File without changes
|
data/lib/big_record/migration.rb
CHANGED
|
@@ -1,19 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
# Instead of requiring the activesupport class (metaclass)
|
|
4
|
-
class Object
|
|
5
|
-
# Get object's meta (ghost, eigenclass, singleton) class
|
|
6
|
-
def metaclass
|
|
7
|
-
class << self
|
|
8
|
-
self
|
|
9
|
-
end
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
# If class_eval is called on an object, add those methods to its metaclass
|
|
13
|
-
def class_eval(*args, &block)
|
|
14
|
-
metaclass.class_eval(*args, &block)
|
|
15
|
-
end
|
|
16
|
-
end
|
|
1
|
+
require 'active_support/core_ext/object/metaclass'
|
|
17
2
|
|
|
18
3
|
module BigRecord
|
|
19
4
|
class IrreversibleMigration < BigRecordError#:nodoc:
|
|
@@ -35,31 +35,5 @@ module ActionController
|
|
|
35
35
|
end
|
|
36
36
|
end
|
|
37
37
|
end
|
|
38
|
-
|
|
39
|
-
# TODO: Remove this monkey patch once we migrate to rails 2.3. This patch
|
|
40
|
-
# add support for the :as option in map.resources.
|
|
41
|
-
module Resources
|
|
42
|
-
class Resource
|
|
43
|
-
|
|
44
|
-
attr_reader :path_segment
|
|
45
|
-
|
|
46
|
-
def initialize(entities, options)
|
|
47
|
-
@plural ||= entities
|
|
48
|
-
@singular ||= options[:singular] || plural.to_s.singularize
|
|
49
|
-
@path_segment = options.delete(:as) || @plural
|
|
50
|
-
|
|
51
|
-
@options = options
|
|
52
|
-
|
|
53
|
-
arrange_actions
|
|
54
|
-
add_default_actions
|
|
55
|
-
set_prefixes
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
def path
|
|
59
|
-
@path ||= "#{path_prefix}/#{path_segment}"
|
|
60
|
-
end
|
|
61
|
-
|
|
62
|
-
end
|
|
63
|
-
end
|
|
64
|
-
|
|
38
|
+
|
|
65
39
|
end
|
data/lib/big_record/timestamp.rb
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
module BigRecord
|
|
2
|
-
#
|
|
2
|
+
# Big Record automatically timestamps create and update if the table has fields
|
|
3
3
|
# created_at/created_on or updated_at/updated_on.
|
|
4
4
|
#
|
|
5
5
|
# Timestamping can be turned off by setting
|
|
6
|
-
# <tt>
|
|
6
|
+
# <tt>BigRecord::Base.record_timestamps = false</tt>
|
|
7
7
|
#
|
|
8
8
|
# Keep in mind that, via inheritance, you can turn off timestamps on a per
|
|
9
9
|
# model basis by setting <tt>record_timestamps</tt> to false in the desired
|
|
10
10
|
# models.
|
|
11
11
|
#
|
|
12
|
-
# class Feed <
|
|
12
|
+
# class Feed < BigRecord::Base
|
|
13
13
|
# self.record_timestamps = false
|
|
14
14
|
# # ...
|
|
15
15
|
# end
|
|
@@ -3,7 +3,7 @@ module BigRecord
|
|
|
3
3
|
# record method to retrieve the record which did not validate.
|
|
4
4
|
# begin
|
|
5
5
|
# complex_operation_that_calls_save!_internally
|
|
6
|
-
# rescue
|
|
6
|
+
# rescue BigRecord::RecordInvalid => invalid
|
|
7
7
|
# puts invalid.record.errors
|
|
8
8
|
# end
|
|
9
9
|
class RecordInvalid < BigRecordError #:nodoc:
|
data/lib/big_record.rb
CHANGED
|
@@ -21,56 +21,42 @@
|
|
|
21
21
|
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
22
22
|
#++
|
|
23
23
|
|
|
24
|
-
|
|
25
|
-
$:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
|
|
24
|
+
dir = File.expand_path(File.join(File.dirname(__FILE__), "big_record"))
|
|
26
25
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
rescue LoadError
|
|
32
|
-
require 'rubygems'
|
|
33
|
-
gem 'activesupport'
|
|
34
|
-
require 'active_support'
|
|
35
|
-
end
|
|
26
|
+
begin
|
|
27
|
+
require 'active_support'
|
|
28
|
+
rescue LoadError
|
|
29
|
+
raise LoadError, "Bigrecord depends on ActiveSupport. Install it with: gem install activesupport"
|
|
36
30
|
end
|
|
37
31
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
rescue LoadError
|
|
43
|
-
require 'rubygems'
|
|
44
|
-
gem 'activerecord'
|
|
45
|
-
require 'active_record'
|
|
46
|
-
end
|
|
32
|
+
begin
|
|
33
|
+
require 'active_record'
|
|
34
|
+
rescue LoadError
|
|
35
|
+
puts "[Bigrecord] ActiveRecord could not be loaded. Bigrecord associations with AR models disabled."
|
|
47
36
|
end
|
|
48
37
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
require '
|
|
53
|
-
require '
|
|
54
|
-
require '
|
|
55
|
-
require '
|
|
56
|
-
require '
|
|
57
|
-
require '
|
|
58
|
-
require '
|
|
59
|
-
require '
|
|
60
|
-
require '
|
|
61
|
-
require '
|
|
62
|
-
require '
|
|
63
|
-
require '
|
|
64
|
-
require '
|
|
65
|
-
require '
|
|
66
|
-
require '
|
|
67
|
-
require '
|
|
68
|
-
require 'big_record/migration'
|
|
69
|
-
require 'big_record/connection_adapters'
|
|
70
|
-
require 'big_record/fixtures'
|
|
38
|
+
require dir + '/routing_ext'
|
|
39
|
+
require dir + '/abstract_base'
|
|
40
|
+
require dir + '/base'
|
|
41
|
+
require dir + '/embedded'
|
|
42
|
+
require dir + '/validations'
|
|
43
|
+
require dir + '/callbacks'
|
|
44
|
+
require dir + '/ar_reflection'
|
|
45
|
+
require dir + '/br_reflection'
|
|
46
|
+
require dir + '/ar_associations'
|
|
47
|
+
require dir + '/br_associations'
|
|
48
|
+
require dir + '/timestamp'
|
|
49
|
+
require dir + '/attribute_methods'
|
|
50
|
+
require dir + '/embedded_associations/association_proxy'
|
|
51
|
+
require dir + '/dynamic_schema'
|
|
52
|
+
require dir + '/deletion'
|
|
53
|
+
require dir + '/family_span_columns'
|
|
54
|
+
require dir + '/migration'
|
|
55
|
+
require dir + '/connection_adapters'
|
|
56
|
+
require dir + '/fixtures'
|
|
71
57
|
|
|
72
58
|
# Add support for collections to tag builders
|
|
73
|
-
require '
|
|
59
|
+
require dir + '/action_view_extensions'
|
|
74
60
|
|
|
75
61
|
BigRecord::Base.class_eval do
|
|
76
62
|
include BigRecord::Validations
|
|
@@ -99,12 +85,14 @@ BigRecord::Embedded.class_eval do
|
|
|
99
85
|
end
|
|
100
86
|
|
|
101
87
|
# Mixin the BigRecord associations with ActiveRecord
|
|
102
|
-
ActiveRecord
|
|
103
|
-
|
|
104
|
-
|
|
88
|
+
if defined?(ActiveRecord)
|
|
89
|
+
ActiveRecord::Base.class_eval do
|
|
90
|
+
include BigRecord::BrAssociations
|
|
91
|
+
include BigRecord::BrReflection
|
|
92
|
+
end
|
|
105
93
|
end
|
|
106
94
|
|
|
107
|
-
# Patch to call the validation of the embedded objects to
|
|
95
|
+
# Patch to call the validation of the embedded objects to BigRecord::Base instances.
|
|
108
96
|
BigRecord::Base.class_eval do
|
|
109
97
|
validate :validate_embeddeds
|
|
110
98
|
|
data/lib/bigrecord.rb
CHANGED
|
File without changes
|
data/rails/init.rb
CHANGED
|
@@ -4,6 +4,12 @@ require 'big_record'
|
|
|
4
4
|
BigRecord::Base.logger = ActiveRecord::Base.logger
|
|
5
5
|
BigRecord::Embedded.logger = ActiveRecord::Base.logger
|
|
6
6
|
|
|
7
|
-
#
|
|
8
|
-
|
|
7
|
+
# Load in the config from the RAILS_ROOT/config folder
|
|
8
|
+
begin
|
|
9
|
+
BigRecord::Base.configurations = YAML::load(File.open("#{RAILS_ROOT}/config/bigrecord.yml"))
|
|
10
|
+
rescue
|
|
11
|
+
puts "[Bigrecord] Couldn't load the config/bigrecord.yml config file. Please bootstrap it into your application with: script/generate bigrecord"
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
# Try establishing the connection
|
|
9
15
|
BigRecord::Base.establish_connection
|
|
File without changes
|
|
File without changes
|
|
File without changes
|