nobrainer 0.27.0 → 0.28.0
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 +4 -4
- data/lib/no_brainer/config.rb +36 -8
- data/lib/no_brainer/connection.rb +16 -19
- data/lib/no_brainer/connection_manager.rb +10 -10
- data/lib/no_brainer/criteria.rb +1 -1
- data/lib/no_brainer/criteria/eager_load.rb +1 -1
- data/lib/no_brainer/criteria/find.rb +1 -1
- data/lib/no_brainer/criteria/first.rb +2 -2
- data/lib/no_brainer/criteria/first_or_create.rb +32 -19
- data/lib/no_brainer/criteria/join.rb +62 -0
- data/lib/no_brainer/criteria/where.rb +25 -14
- data/lib/no_brainer/document.rb +1 -1
- data/lib/no_brainer/document/association/belongs_to.rb +4 -3
- data/lib/no_brainer/document/association/eager_loader.rb +26 -25
- data/lib/no_brainer/document/association/has_many.rb +3 -2
- data/lib/no_brainer/document/association/has_many_through.rb +1 -2
- data/lib/no_brainer/document/association/has_one.rb +4 -0
- data/lib/no_brainer/document/atomic_ops.rb +31 -4
- data/lib/no_brainer/document/attributes.rb +12 -9
- data/lib/no_brainer/document/core.rb +18 -18
- data/lib/no_brainer/document/criteria.rb +3 -2
- data/lib/no_brainer/document/dirty.rb +3 -3
- data/lib/no_brainer/document/index.rb +3 -3
- data/lib/no_brainer/document/index/index.rb +5 -5
- data/lib/no_brainer/document/index/meta_store.rb +1 -1
- data/lib/no_brainer/document/index/synchronizer.rb +5 -17
- data/lib/no_brainer/document/missing_attributes.rb +7 -2
- data/lib/no_brainer/document/primary_key.rb +14 -8
- data/lib/no_brainer/document/table_config.rb +118 -0
- data/lib/no_brainer/document/table_config/synchronizer.rb +21 -0
- data/lib/no_brainer/document/timestamps.rb +4 -0
- data/lib/no_brainer/document/validation/core.rb +1 -1
- data/lib/no_brainer/document/validation/uniqueness.rb +1 -1
- data/lib/no_brainer/lock.rb +4 -4
- data/lib/no_brainer/profiler/logger.rb +1 -1
- data/lib/no_brainer/query_runner/database_on_demand.rb +1 -1
- data/lib/no_brainer/query_runner/reconnect.rb +37 -21
- data/lib/no_brainer/query_runner/table_on_demand.rb +12 -5
- data/lib/no_brainer/railtie/database.rake +14 -4
- data/lib/no_brainer/rql.rb +3 -2
- data/lib/no_brainer/symbol_decoration.rb +1 -1
- data/lib/no_brainer/system.rb +17 -0
- data/lib/no_brainer/system/cluster_config.rb +5 -0
- data/lib/no_brainer/system/db_config.rb +5 -0
- data/lib/no_brainer/system/document.rb +24 -0
- data/lib/no_brainer/system/issue.rb +10 -0
- data/lib/no_brainer/system/job.rb +10 -0
- data/lib/no_brainer/system/log.rb +11 -0
- data/lib/no_brainer/system/server_config.rb +7 -0
- data/lib/no_brainer/system/server_status.rb +9 -0
- data/lib/no_brainer/system/stat.rb +11 -0
- data/lib/no_brainer/system/table_config.rb +10 -0
- data/lib/no_brainer/system/table_status.rb +8 -0
- data/lib/nobrainer.rb +7 -6
- data/lib/rails/generators/templates/nobrainer.rb +11 -2
- metadata +17 -3
- data/lib/no_brainer/document/store_in.rb +0 -33
@@ -1,5 +1,5 @@
|
|
1
1
|
module NoBrainer::SymbolDecoration
|
2
|
-
NON_CHAINABLE_OPERATORS = %w(in eq gt ge gte lt le lte defined near intersects).map(&:to_sym)
|
2
|
+
NON_CHAINABLE_OPERATORS = %w(in eq gt ge gte lt le lte defined undefined near intersects include).map(&:to_sym)
|
3
3
|
CHAINABLE_OPERATORS = %w(not any all).map(&:to_sym)
|
4
4
|
OPERATORS = CHAINABLE_OPERATORS + NON_CHAINABLE_OPERATORS
|
5
5
|
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module NoBrainer::System
|
2
|
+
extend NoBrainer::Autoload
|
3
|
+
autoload :Document, :ClusterConfig, :DBConfig,
|
4
|
+
:Issue, :Job, :Log, :ServerConfig, :ServerStatus,
|
5
|
+
:Stat, :TableConfig, :TableStatus
|
6
|
+
|
7
|
+
# A few shortcuts to make user's life easier
|
8
|
+
def self.const_missing(const_name)
|
9
|
+
mapping = {:CurrentIssues => :Issue,
|
10
|
+
:CurrentIssue => :Issue,
|
11
|
+
:Issues => :Issue,
|
12
|
+
:Jobs => :Job,
|
13
|
+
:Logs => :Log,
|
14
|
+
:Stats => :Stat}
|
15
|
+
const_get(mapping[const_name] || const_name)
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module NoBrainer::System::Document
|
2
|
+
extend ActiveSupport::Concern
|
3
|
+
|
4
|
+
include NoBrainer::Document
|
5
|
+
include NoBrainer::Document::DynamicAttributes
|
6
|
+
|
7
|
+
included do
|
8
|
+
disable_perf_warnings
|
9
|
+
|
10
|
+
field :id, :type => Object, :default => nil, :primary_key => true
|
11
|
+
|
12
|
+
default_scope { without_ordering }
|
13
|
+
end
|
14
|
+
|
15
|
+
module ClassMethods
|
16
|
+
def table_name
|
17
|
+
table_config_options[:name] || name.split('::').last.underscore
|
18
|
+
end
|
19
|
+
|
20
|
+
def rql_table
|
21
|
+
RethinkDB::RQL.new.db('rethinkdb').table(table_name)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
data/lib/nobrainer.rb
CHANGED
@@ -5,7 +5,7 @@ require 'thread'
|
|
5
5
|
%w(module/delegation module/attribute_accessors module/introspection
|
6
6
|
class/attribute object/blank object/inclusion object/deep_dup
|
7
7
|
object/try hash/keys hash/indifferent_access hash/reverse_merge
|
8
|
-
hash/deep_merge array/extract_options)
|
8
|
+
hash/deep_merge hash/slice array/extract_options)
|
9
9
|
.each { |dep| require "active_support/core_ext/#{dep}" }
|
10
10
|
|
11
11
|
module NoBrainer
|
@@ -16,22 +16,23 @@ module NoBrainer
|
|
16
16
|
# Code that is loaded through the DSL of NoBrainer should not be eager loaded.
|
17
17
|
autoload :Document, :IndexManager, :Loader, :Fork, :Geo, :SymbolDecoration
|
18
18
|
eager_autoload :Config, :Connection, :ConnectionManager, :Error,
|
19
|
-
:QueryRunner, :Criteria, :RQL, :Lock, :Profiler
|
19
|
+
:QueryRunner, :Criteria, :RQL, :Lock, :Profiler, :System
|
20
20
|
|
21
21
|
class << self
|
22
22
|
delegate :connection, :disconnect, :to => 'NoBrainer::ConnectionManager'
|
23
23
|
|
24
|
-
delegate :
|
25
|
-
:table_create, :table_drop, :table_list,
|
26
|
-
:drop!, :purge!, :default_db, :current_db, :to => :connection
|
24
|
+
delegate :drop!, :purge!, :default_db, :current_db, :to => :connection
|
27
25
|
|
28
26
|
delegate :configure, :logger, :to => 'NoBrainer::Config'
|
29
27
|
delegate :run, :to => 'NoBrainer::QueryRunner'
|
30
|
-
delegate :sync_indexes, :to => 'NoBrainer::Document::Index::Synchronizer'
|
31
28
|
delegate :current_run_options, :run_with, :to => 'NoBrainer::QueryRunner::RunOptions'
|
32
29
|
|
33
30
|
delegate :with, :with_database, :to => 'NoBrainer::QueryRunner::RunOptions' # deprecated
|
34
31
|
|
32
|
+
delegate :sync_indexes, :sync_table_config, :sync_schema, :rebalance, :to => 'NoBrainer::Document::TableConfig'
|
33
|
+
|
34
|
+
delegate :eager_load, :to => 'NoBrainer::Document::Association::EagerLoader'
|
35
|
+
|
35
36
|
def jruby?
|
36
37
|
RUBY_PLATFORM == 'java'
|
37
38
|
end
|
@@ -7,7 +7,8 @@ NoBrainer.configure do |config|
|
|
7
7
|
# variables RUBY_ENV, RAILS_ENV, RACK_ENV, or :production.
|
8
8
|
# config.environment = config.default_environment
|
9
9
|
|
10
|
-
#
|
10
|
+
# rethinkdb_urls specifies the RethinkDB database connection urls.
|
11
|
+
# You may specify multiple urls to provide fault tolerance capabilities.
|
11
12
|
# When left unspecified, NoBrainer picks a database connection by default.
|
12
13
|
# The default is to use localhost, with a database name matching the
|
13
14
|
# application name and the environment.
|
@@ -15,7 +16,11 @@ NoBrainer.configure do |config|
|
|
15
16
|
# * RETHINKDB_URL, RDB_URL
|
16
17
|
# * RETHINKDB_HOST, RETHINKDB_PORT, RETHINKDB_DB, RETHINKDB_AUTH
|
17
18
|
# * RDB_HOST, RDB_PORT, RDB_DB, RDB_AUTH
|
18
|
-
# config.
|
19
|
+
# config.rethinkdb_urls = [config.default_rethinkdb_url]
|
20
|
+
|
21
|
+
# ssl_options may be set to {:ca_certs => '/path/to/ca.crt'} to establish
|
22
|
+
# an SSL connection to the RethinkDB servers.
|
23
|
+
# config.ssl_options = nil
|
19
24
|
|
20
25
|
# NoBrainer uses logger to emit debugging information.
|
21
26
|
# The default logger is the Rails logger if run with Rails,
|
@@ -46,6 +51,10 @@ NoBrainer.configure do |config|
|
|
46
51
|
# The default is :soft for development or test environment, otherwise :hard.
|
47
52
|
# config.durability = config.default_durability
|
48
53
|
|
54
|
+
# Configures the default table configuration options. These values are
|
55
|
+
# reflected to the database when running `rake nobrainer:sync_schema'.
|
56
|
+
# config.table_options = { :shards => 1, :replicas => 1, :write_acks => :majority }
|
57
|
+
|
49
58
|
# Persisted Strings have a configurable maximum length. To get rid of the
|
50
59
|
# length validation, you may use the Text type instead.
|
51
60
|
# config.max_string_length = 255
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nobrainer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.28.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nicolas Viennot
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-08-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rethinkdb
|
@@ -108,6 +108,7 @@ files:
|
|
108
108
|
- lib/no_brainer/criteria/first.rb
|
109
109
|
- lib/no_brainer/criteria/first_or_create.rb
|
110
110
|
- lib/no_brainer/criteria/index.rb
|
111
|
+
- lib/no_brainer/criteria/join.rb
|
111
112
|
- lib/no_brainer/criteria/limit.rb
|
112
113
|
- lib/no_brainer/criteria/order_by.rb
|
113
114
|
- lib/no_brainer/criteria/pluck.rb
|
@@ -146,7 +147,8 @@ files:
|
|
146
147
|
- lib/no_brainer/document/primary_key/generator.rb
|
147
148
|
- lib/no_brainer/document/readonly.rb
|
148
149
|
- lib/no_brainer/document/serialization.rb
|
149
|
-
- lib/no_brainer/document/
|
150
|
+
- lib/no_brainer/document/table_config.rb
|
151
|
+
- lib/no_brainer/document/table_config/synchronizer.rb
|
150
152
|
- lib/no_brainer/document/timestamps.rb
|
151
153
|
- lib/no_brainer/document/types.rb
|
152
154
|
- lib/no_brainer/document/types/binary.rb
|
@@ -192,6 +194,18 @@ files:
|
|
192
194
|
- lib/no_brainer/railtie/database.rake
|
193
195
|
- lib/no_brainer/rql.rb
|
194
196
|
- lib/no_brainer/symbol_decoration.rb
|
197
|
+
- lib/no_brainer/system.rb
|
198
|
+
- lib/no_brainer/system/cluster_config.rb
|
199
|
+
- lib/no_brainer/system/db_config.rb
|
200
|
+
- lib/no_brainer/system/document.rb
|
201
|
+
- lib/no_brainer/system/issue.rb
|
202
|
+
- lib/no_brainer/system/job.rb
|
203
|
+
- lib/no_brainer/system/log.rb
|
204
|
+
- lib/no_brainer/system/server_config.rb
|
205
|
+
- lib/no_brainer/system/server_status.rb
|
206
|
+
- lib/no_brainer/system/stat.rb
|
207
|
+
- lib/no_brainer/system/table_config.rb
|
208
|
+
- lib/no_brainer/system/table_status.rb
|
195
209
|
- lib/nobrainer.rb
|
196
210
|
- lib/rails/generators/nobrainer/install_generator.rb
|
197
211
|
- lib/rails/generators/nobrainer/model_generator.rb
|
@@ -1,33 +0,0 @@
|
|
1
|
-
require 'rethinkdb'
|
2
|
-
|
3
|
-
module NoBrainer::Document::StoreIn
|
4
|
-
extend ActiveSupport::Concern
|
5
|
-
|
6
|
-
included do
|
7
|
-
cattr_accessor :store_in_options, :instance_accessor => false
|
8
|
-
self.store_in_options = {}
|
9
|
-
end
|
10
|
-
|
11
|
-
module ClassMethods
|
12
|
-
def store_in(options)
|
13
|
-
raise "store_in() must be called on the parent class" unless is_root_class?
|
14
|
-
|
15
|
-
if options[:database] || options[:db]
|
16
|
-
STDERR.puts "[NoBrainer] `store_in(db: ...)' has been removed. Use `run_with(db: ...)' instead. Sorry."
|
17
|
-
end
|
18
|
-
|
19
|
-
options.assert_valid_keys(:table)
|
20
|
-
self.store_in_options.merge!(options)
|
21
|
-
end
|
22
|
-
|
23
|
-
def table_name
|
24
|
-
table = store_in_options[:table]
|
25
|
-
table_name = table.is_a?(Proc) ? table.call : table
|
26
|
-
table_name.try(:to_s) || root_class.name.tableize.gsub('/', '__')
|
27
|
-
end
|
28
|
-
|
29
|
-
def rql_table
|
30
|
-
RethinkDB::RQL.new.table(table_name)
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|