nobrainer 0.10.0 → 0.12.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.
Files changed (45) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +169 -0
  3. data/lib/no_brainer/criteria/after_find.rb +24 -0
  4. data/lib/no_brainer/criteria/{termination/cache.rb → cache.rb} +1 -1
  5. data/lib/no_brainer/criteria/{chainable/core.rb → core.rb} +1 -1
  6. data/lib/no_brainer/criteria/{termination/count.rb → count.rb} +1 -1
  7. data/lib/no_brainer/criteria/{termination/delete.rb → delete.rb} +1 -1
  8. data/lib/no_brainer/criteria/{termination/enumerable.rb → enumerable.rb} +1 -1
  9. data/lib/no_brainer/criteria/{termination/first.rb → first.rb} +1 -1
  10. data/lib/no_brainer/criteria/{termination/inc.rb → inc.rb} +1 -1
  11. data/lib/no_brainer/criteria/{chainable/limit.rb → limit.rb} +1 -1
  12. data/lib/no_brainer/criteria/{chainable/order_by.rb → order_by.rb} +1 -1
  13. data/lib/no_brainer/criteria/preload.rb +55 -0
  14. data/lib/no_brainer/criteria/raw.rb +25 -0
  15. data/lib/no_brainer/criteria/{chainable/scope.rb → scope.rb} +1 -1
  16. data/lib/no_brainer/criteria/{termination/update.rb → update.rb} +1 -1
  17. data/lib/no_brainer/criteria/{chainable/where.rb → where.rb} +61 -25
  18. data/lib/no_brainer/criteria.rb +4 -16
  19. data/lib/no_brainer/document/association/belongs_to.rb +9 -2
  20. data/lib/no_brainer/document/association/core.rb +2 -2
  21. data/lib/no_brainer/document/association/eager_loader.rb +7 -7
  22. data/lib/no_brainer/document/association/has_many.rb +1 -1
  23. data/lib/no_brainer/document/attributes.rb +9 -23
  24. data/lib/no_brainer/document/callbacks.rb +37 -0
  25. data/lib/no_brainer/document/core.rb +0 -2
  26. data/lib/no_brainer/document/criteria.rb +1 -1
  27. data/lib/no_brainer/document/dirty.rb +43 -46
  28. data/lib/no_brainer/document/dynamic_attributes.rb +11 -3
  29. data/lib/no_brainer/document/id.rb +1 -1
  30. data/lib/no_brainer/document/index.rb +0 -5
  31. data/lib/no_brainer/document/persistance.rb +39 -39
  32. data/lib/no_brainer/document/serialization.rb +0 -1
  33. data/lib/no_brainer/document/timestamps.rb +10 -9
  34. data/lib/no_brainer/document/types.rb +42 -39
  35. data/lib/no_brainer/document/validation.rb +5 -0
  36. data/lib/no_brainer/document.rb +3 -3
  37. data/lib/no_brainer/document_with_timestamps.rb +6 -0
  38. data/lib/no_brainer/error.rb +26 -9
  39. data/lib/no_brainer/query_runner/missing_index.rb +1 -1
  40. data/lib/no_brainer/railtie.rb +10 -0
  41. data/lib/nobrainer.rb +3 -3
  42. metadata +37 -34
  43. data/LICENSE.md +0 -7
  44. data/lib/no_brainer/criteria/chainable/raw.rb +0 -33
  45. data/lib/no_brainer/criteria/termination/eager_loading.rb +0 -50
@@ -7,12 +7,22 @@ class NoBrainer::Railtie < Rails::Railtie
7
7
  config.action_dispatch.rescue_responses.merge!(
8
8
  "NoBrainer::Errors::DocumentNotFound" => :not_found,
9
9
  "NoBrainer::Errors::DocumentInvalid" => :unprocessable_entity,
10
+ "NoBrainer::Errors::InvalidType" => :bad_request,
10
11
  )
11
12
 
12
13
  rake_tasks do
13
14
  load "no_brainer/railtie/database.rake"
14
15
  end
15
16
 
17
+ console do
18
+ # Send console messages to standard error like ActiveRecord.
19
+ # Not the cleanest behavior, but if ActiveRecord does it, why not.
20
+ unless defined?(ActiveRecord)
21
+ console = ActiveSupport::Logger.new(STDERR)
22
+ Rails.logger.extend ActiveSupport::Logger.broadcast(console)
23
+ end
24
+ end
25
+
16
26
  config.after_initialize do
17
27
  NoBrainer::Config.configure unless NoBrainer::Config.configured?
18
28
 
data/lib/nobrainer.rb CHANGED
@@ -3,8 +3,8 @@ if Gem::Version.new(RUBY_VERSION.dup) < Gem::Version.new('1.9')
3
3
  end
4
4
 
5
5
  require 'active_support'
6
- %w(module/delegation module/attribute_accessors class/attribute object/blank object/inclusion
7
- object/duplicable object/try hash/keys hash/reverse_merge array/extract_options)
6
+ %w(module/delegation module/attribute_accessors class/attribute object/blank object/inclusion object/deep_dup
7
+ object/try hash/keys hash/indifferent_access hash/reverse_merge hash/deep_merge array/extract_options)
8
8
  .each { |dep| require "active_support/core_ext/#{dep}" }
9
9
 
10
10
  module NoBrainer
@@ -12,7 +12,7 @@ module NoBrainer
12
12
  extend NoBrainer::Autoload
13
13
 
14
14
  # We eager load things that could be loaded for the first time during the web request
15
- autoload :Document, :IndexManager, :Loader, :Fork, :DecoratedSymbol
15
+ autoload :Document, :DocumentWithTimestamps, :IndexManager, :Loader, :Fork, :DecoratedSymbol
16
16
  eager_autoload :Config, :Connection, :Error, :QueryRunner, :Criteria, :Util
17
17
 
18
18
  class << self
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.10.0
4
+ version: 0.12.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: 2014-01-07 00:00:00.000000000 Z
11
+ date: 2014-01-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rethinkdb
@@ -65,75 +65,78 @@ executables: []
65
65
  extensions: []
66
66
  extra_rdoc_files: []
67
67
  files:
68
- - lib/no_brainer/document/id.rb
69
- - lib/no_brainer/document/association/belongs_to.rb
70
- - lib/no_brainer/document/association/has_many.rb
71
68
  - lib/no_brainer/document/association/has_one.rb
72
69
  - lib/no_brainer/document/association/has_one_through.rb
73
70
  - lib/no_brainer/document/association/has_many_through.rb
71
+ - lib/no_brainer/document/association/has_many.rb
74
72
  - lib/no_brainer/document/association/eager_loader.rb
73
+ - lib/no_brainer/document/association/belongs_to.rb
75
74
  - lib/no_brainer/document/association/core.rb
76
- - lib/no_brainer/document/dynamic_attributes.rb
77
- - lib/no_brainer/document/criteria.rb
78
75
  - lib/no_brainer/document/polymorphic.rb
79
76
  - lib/no_brainer/document/store_in.rb
80
- - lib/no_brainer/document/core.rb
81
77
  - lib/no_brainer/document/injection_layer.rb
82
- - lib/no_brainer/document/index.rb
78
+ - lib/no_brainer/document/core.rb
79
+ - lib/no_brainer/document/criteria.rb
80
+ - lib/no_brainer/document/dynamic_attributes.rb
83
81
  - lib/no_brainer/document/serialization.rb
84
82
  - lib/no_brainer/document/association.rb
83
+ - lib/no_brainer/document/index.rb
85
84
  - lib/no_brainer/document/validation.rb
86
- - lib/no_brainer/document/timestamps.rb
85
+ - lib/no_brainer/document/callbacks.rb
87
86
  - lib/no_brainer/document/dirty.rb
88
87
  - lib/no_brainer/document/persistance.rb
88
+ - lib/no_brainer/document/timestamps.rb
89
89
  - lib/no_brainer/document/attributes.rb
90
+ - lib/no_brainer/document/id.rb
90
91
  - lib/no_brainer/document/types.rb
91
92
  - lib/no_brainer/query_runner/connection.rb
92
93
  - lib/no_brainer/query_runner/database_on_demand.rb
93
- - lib/no_brainer/query_runner/logger.rb
94
94
  - lib/no_brainer/query_runner/table_on_demand.rb
95
95
  - lib/no_brainer/query_runner/write_error.rb
96
96
  - lib/no_brainer/query_runner/driver.rb
97
- - lib/no_brainer/query_runner/missing_index.rb
98
97
  - lib/no_brainer/query_runner/run_options.rb
98
+ - lib/no_brainer/query_runner/logger.rb
99
+ - lib/no_brainer/query_runner/missing_index.rb
99
100
  - lib/no_brainer/railtie/database.rake
100
- - lib/no_brainer/criteria/chainable/limit.rb
101
- - lib/no_brainer/criteria/chainable/order_by.rb
102
- - lib/no_brainer/criteria/chainable/scope.rb
103
- - lib/no_brainer/criteria/chainable/raw.rb
104
- - lib/no_brainer/criteria/chainable/core.rb
105
- - lib/no_brainer/criteria/chainable/where.rb
106
- - lib/no_brainer/criteria/termination/inc.rb
107
- - lib/no_brainer/criteria/termination/count.rb
108
- - lib/no_brainer/criteria/termination/first.rb
109
- - lib/no_brainer/criteria/termination/enumerable.rb
110
- - lib/no_brainer/criteria/termination/update.rb
111
- - lib/no_brainer/criteria/termination/delete.rb
112
- - lib/no_brainer/criteria/termination/eager_loading.rb
113
- - lib/no_brainer/criteria/termination/cache.rb
114
- - lib/no_brainer/decorated_symbol.rb
115
101
  - lib/no_brainer/index_manager.rb
116
102
  - lib/no_brainer/loader.rb
117
103
  - lib/no_brainer/locale/en.yml
118
- - lib/no_brainer/util.rb
119
104
  - lib/no_brainer/fork.rb
120
- - lib/no_brainer/criteria.rb
121
105
  - lib/no_brainer/connection.rb
122
106
  - lib/no_brainer/query_runner.rb
123
- - lib/no_brainer/error.rb
124
- - lib/no_brainer/railtie.rb
125
107
  - lib/no_brainer/config.rb
126
108
  - lib/no_brainer/autoload.rb
109
+ - lib/no_brainer/util.rb
127
110
  - lib/no_brainer/document.rb
111
+ - lib/no_brainer/document_with_timestamps.rb
112
+ - lib/no_brainer/decorated_symbol.rb
113
+ - lib/no_brainer/criteria/update.rb
114
+ - lib/no_brainer/criteria/scope.rb
115
+ - lib/no_brainer/criteria/raw.rb
116
+ - lib/no_brainer/criteria/preload.rb
117
+ - lib/no_brainer/criteria/order_by.rb
118
+ - lib/no_brainer/criteria/limit.rb
119
+ - lib/no_brainer/criteria/inc.rb
120
+ - lib/no_brainer/criteria/first.rb
121
+ - lib/no_brainer/criteria/enumerable.rb
122
+ - lib/no_brainer/criteria/delete.rb
123
+ - lib/no_brainer/criteria/count.rb
124
+ - lib/no_brainer/criteria/core.rb
125
+ - lib/no_brainer/criteria/cache.rb
126
+ - lib/no_brainer/criteria/after_find.rb
127
+ - lib/no_brainer/criteria/where.rb
128
+ - lib/no_brainer/criteria.rb
129
+ - lib/no_brainer/error.rb
130
+ - lib/no_brainer/railtie.rb
128
131
  - lib/rails/generators/nobrainer.rb
129
132
  - lib/rails/generators/nobrainer/model/model_generator.rb
130
133
  - lib/rails/generators/nobrainer/model/templates/model.rb.tt
131
134
  - lib/nobrainer.rb
132
135
  - README.md
133
- - LICENSE.md
134
- homepage: http://github.com/nviennot/nobrainer
136
+ - LICENSE
137
+ homepage: http://nobrainer.io
135
138
  licenses:
136
- - MIT
139
+ - LGPLv3
137
140
  metadata: {}
138
141
  post_install_message:
139
142
  rdoc_options: []
data/LICENSE.md DELETED
@@ -1,7 +0,0 @@
1
- Copyright (C) 2012 Nicolas Viennot
2
-
3
- Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
4
-
5
- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
6
-
7
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -1,33 +0,0 @@
1
- module NoBrainer::Criteria::Chainable::Raw
2
- extend ActiveSupport::Concern
3
-
4
- included { attr_accessor :_raw, :__after_instantiate }
5
-
6
- def raw
7
- chain { |criteria| criteria._raw = true }
8
- end
9
-
10
- def _after_instantiate(block)
11
- # Just some helper for the has_many association to set the inverses on the
12
- # related belongs_to. A bit hackish.
13
- chain { |criteria| criteria.__after_instantiate = block }
14
- end
15
-
16
- def merge!(criteria, options={})
17
- super
18
- self._raw = criteria._raw unless criteria._raw.nil?
19
- self.__after_instantiate ||= criteria.__after_instantiate
20
- self
21
- end
22
-
23
- private
24
-
25
- def raw?
26
- !!_raw
27
- end
28
-
29
- def instantiate_doc(attrs)
30
- (raw? ? attrs : klass.new_from_db(attrs))
31
- .tap { |doc| __after_instantiate.call(doc) if __after_instantiate }
32
- end
33
- end
@@ -1,50 +0,0 @@
1
- module NoBrainer::Criteria::Termination::EagerLoading
2
- extend ActiveSupport::Concern
3
-
4
- included { attr_accessor :_includes }
5
-
6
- def initialize(options={})
7
- super
8
- self._includes = []
9
- end
10
-
11
- def includes(*values)
12
- chain(:keep_cache => true) { |criteria| criteria._includes = values }
13
- end
14
-
15
- def merge!(criteria, options={})
16
- super
17
- self._includes = self._includes + criteria._includes
18
-
19
- # XXX Not pretty hack
20
- if criteria._includes.present? && cached?
21
- perform_eager_loading(@cache)
22
- end
23
- end
24
-
25
- def each(options={}, &block)
26
- return super unless should_eager_load? && !options[:no_eager_loading] && block
27
-
28
- docs = []
29
- super(options.merge(:no_eager_loading => true)) { |doc| docs << doc }
30
- perform_eager_loading(docs)
31
- docs.each(&block)
32
- self
33
- end
34
-
35
- private
36
-
37
- def should_eager_load?
38
- self._includes.present? && !raw?
39
- end
40
-
41
- def get_one(criteria)
42
- super.tap { |doc| perform_eager_loading([doc]) }
43
- end
44
-
45
- def perform_eager_loading(docs)
46
- if should_eager_load? && docs.present?
47
- NoBrainer::Document::Association::EagerLoader.new.eager_load(docs, self._includes)
48
- end
49
- end
50
- end