nobrainer 0.34.0 → 0.40.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 6aeddbfcb32d5cd100bb92a6c05b6c6f5c45a15e
4
- data.tar.gz: a6e70c12de29fe7154b19254220d52b7ad803e26
2
+ SHA256:
3
+ metadata.gz: 2be88d279ca6fb8c9c8698d25efe539c635949fa5d328034f9a30430e084d396
4
+ data.tar.gz: 4c5d8c072503e15d84198c9e1c33c293efdf3d4789784bbfe8420c7755cbc968
5
5
  SHA512:
6
- metadata.gz: 997850d56ff98737d2f1c0feb498fe2c4377ee90e33eee54aeb9d574fd11c289faae0e348906b0df1d11d9f03088c5fb51a7fce4a762811b8e8323acca1ddd0c
7
- data.tar.gz: acb35bf857b08452f31618bd80b304d69f195dd94a3b42d066ce6e9957d87e5ceffd7988a272de406156a0c343c9a85ee99e094182b1705f38560b2efae71392
6
+ metadata.gz: 552bc01e727596b8060026e28dcd825cdce2152e3fbf7aa6ec128379bea7dc38b945938bfa79d82917e186d22477fded04127d6c565e4d2bc6e569b775bafc88
7
+ data.tar.gz: 9e52d7ffea00b58b0f80102e8d31b43c32d397082e30ccf3bb82e140565c0aec9ce853bf84d2ba204241076cd2e14523ac48670d9b55a8b12b918a08422f8072
data/CHANGELOG.md ADDED
@@ -0,0 +1,147 @@
1
+ # Changelog
2
+ All notable changes to this project will be documented in this file.
3
+
4
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
5
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
+
7
+ ## [Unreleased]
8
+
9
+ ## [0.40.0] - 2021-10-16
10
+ ### Fixed
11
+ - Ruby 3 compatibility
12
+ - Test Ruby 3 + Rails 7 alpha2 on Travis CI
13
+
14
+ ## [0.36.0] - 2021-08-08
15
+ ### Added
16
+ - Array and TypedArray types for validation and serialization
17
+
18
+ ## [0.35.0] - 2021-08-08
19
+ ### Added
20
+ - Dockerfile, docker-compose and Earthfile
21
+ - Test Ruby 3 + Rails 6 on Travis CI
22
+ - Implements the ReQL `during` command
23
+
24
+ ## [0.34.1] - 2021-02-18
25
+ ### Fixed
26
+ - Defining attributes at class level (Rails 6.1 compatibity)
27
+ - Ruby 2.7 support
28
+
29
+ ## [0.34.0] - 2019-10-15
30
+ ### Added
31
+ - Rails 6 support
32
+ - Support for the nonvoting_replica_tags table option
33
+
34
+ ## [0.33.0] - 2016-11-27
35
+ ### Added
36
+ - Allow a run_options to be configured globally
37
+ - Support for username and password authentication
38
+
39
+ ### Changed
40
+ - Use URI.decode() for user and password in the RethinkDB URL
41
+ - Also comment active_record lines in the config/initializers/*.rb on gem installation
42
+ - Removed .unscoped when fetching belongs_to associations
43
+ - update_all() operates without ordering
44
+ - has_many dependent refactoring
45
+ - Default logger should be STDERR if the rails logger is not initialized
46
+ - Locking: changes lock key type from string to text in order to support more than 255 characters keys by default, the key type needs to be Text.
47
+ - field type for rql_function to :text
48
+
49
+ ### Fixed
50
+ - Model reloading with Rails5
51
+ - Rails 5 Strong Parameters: Strong parameters are not a Hash anymore in Rails 5, but support transforming into a hash
52
+
53
+ ## [0.32.0] - 2016-06-05
54
+ ### Added
55
+ - Compatiblity with Rails5
56
+ - order() as an alias of order_by()
57
+ - Provide attribute_will_change!() for compatibility
58
+
59
+ ### Changed
60
+ - Comments more active_record related configs during install
61
+
62
+ ### Fixed
63
+ - Rails 5 deprecation: Using ActiveSupport::Reloader instead of ActionDispatch::Reloader to be ready when Rails 5 hits
64
+ - config syntax
65
+
66
+ ### Removed
67
+ - JRuby and Rbx in travis-ci
68
+
69
+ ## [0.31.0] - 2016-02-07
70
+ ### Added
71
+ - Allow belongs_to association names to be used in upsert params
72
+ - `uniq` shorthand for the belongs_to association
73
+ - Allow self-referential belongs_to
74
+ - Prevent double loading of the same model
75
+ - Use index for where(XXX.defined => true)
76
+ - Guard against bad virtual attribute expressions
77
+ - Allow non existing attributes to be lazy fetched
78
+ - Added back update_attributes()
79
+
80
+ ### Fixed
81
+ - Fix join on keys that are undefined
82
+
83
+ ### Changed
84
+ - where() leverages the association translation abstraction
85
+ - Primary keys time offset should operate on fixed timezone
86
+
87
+ ### Removed
88
+ - Removing locking around sync_table_config
89
+
90
+ ## [0.30.0] - 2015-10-03
91
+ ### Added
92
+ - Add rbx-2 to .travis.yml
93
+ - Add the virtual attribute feature
94
+ - Lock: Allow find() to get locks by key
95
+ - Locks: Allow default expire/timeout values to be passed in new()
96
+ - NoBrainer::ReentrantLock implementation
97
+ - Allow compound indexes to be declared with an implicit name
98
+ - Allow polymorphic queries with first_or_create under certain conditions
99
+
100
+ ### Changed
101
+ - Prevent first_or_create() to accept block with arguments
102
+
103
+ ### Fixed
104
+ - Fix rails issue with tests and profiler
105
+ - Fix where() .include modifier with type checking
106
+ - Virtual attribute option fix
107
+ - Discard documents when join() encounter a nil join key
108
+ - Locks: bug fix: allow small timeouts in lock()
109
+ - Fix reentrant lock counter on steals
110
+
111
+ [Unreleased]: https://github.com/nobrainerorm/nobrainer/compare/v0.40.0...HEAD
112
+ [0.40.0]: https://github.com/nobrainerorm/nobrainer/compare/v0.36.0...v0.40.0
113
+ [0.36.0]: https://github.com/nobrainerorm/nobrainer/compare/v0.35.0...v0.36.0
114
+ [0.35.0]: https://github.com/nobrainerorm/nobrainer/compare/v0.34.1...v0.35.0
115
+ [0.34.1]: https://github.com/nobrainerorm/nobrainer/compare/v0.34.0...v0.34.1
116
+ [0.34.0]: https://github.com/nobrainerorm/nobrainer/compare/v0.33.0...v0.34.0
117
+ [0.33.0]: https://github.com/nobrainerorm/nobrainer/compare/v0.32.0...v0.33.0
118
+ [0.32.0]: https://github.com/nobrainerorm/nobrainer/compare/v0.31.0...v0.32.0
119
+ [0.31.0]: https://github.com/nobrainerorm/nobrainer/compare/v0.30.0...v0.31.0
120
+ [0.30.0]: https://github.com/nobrainerorm/nobrainer/compare/v0.29.0...v0.30.0
121
+ [0.29.0]: https://github.com/nobrainerorm/nobrainer/compare/0.28.0...0.29.0
122
+ [0.28.0]: https://github.com/nobrainerorm/nobrainer/compare/0.27.0...0.28.0
123
+ [0.27.0]: https://github.com/nobrainerorm/nobrainer/compare/0.26.0...0.27.0
124
+ [0.26.0]: https://github.com/nobrainerorm/nobrainer/compare/0.25.1...0.26.0
125
+ [0.25.1]: https://github.com/nobrainerorm/nobrainer/compare/0.25.0...0.25.1
126
+ [0.25.0]: https://github.com/nobrainerorm/nobrainer/compare/0.24.0...0.25.0
127
+ [0.24.0]: https://github.com/nobrainerorm/nobrainer/compare/0.23.0...0.24.0
128
+ [0.23.0]: https://github.com/nobrainerorm/nobrainer/compare/0.22.0...0.23.0
129
+ [0.22.0]: https://github.com/nobrainerorm/nobrainer/compare/0.21.0...0.22.0
130
+ [0.21.0]: https://github.com/nobrainerorm/nobrainer/compare/0.20.0...0.21.0
131
+ [0.20.0]: https://github.com/nobrainerorm/nobrainer/compare/0.19.0...0.20.0
132
+ [0.19.0]: https://github.com/nobrainerorm/nobrainer/compare/0.18.1...0.19.0
133
+ [0.18.1]: https://github.com/nobrainerorm/nobrainer/compare/0.18.0...0.18.1
134
+ [0.18.0]: https://github.com/nobrainerorm/nobrainer/compare/0.17.0...0.18.0
135
+ [0.17.0]: https://github.com/nobrainerorm/nobrainer/compare/0.16.0...0.17.0
136
+ [0.16.0]: https://github.com/nobrainerorm/nobrainer/compare/0.15.0...0.16.0
137
+ [0.15.0]: https://github.com/nobrainerorm/nobrainer/compare/0.14.0...0.15.0
138
+ [0.15.0]: https://github.com/nobrainerorm/nobrainer/compare/0.14.0...0.15.0
139
+ [0.14.0]: https://github.com/nobrainerorm/nobrainer/compare/0.13.1...0.14.0
140
+ [0.13.1]: https://github.com/nobrainerorm/nobrainer/compare/0.13.0...0.13.1
141
+ [0.13.0]: https://github.com/nobrainerorm/nobrainer/compare/0.12.0...0.13.0
142
+ [0.12.0]: https://github.com/nobrainerorm/nobrainer/compare/0.11.0...0.12.0
143
+ [0.11.0]: https://github.com/nobrainerorm/nobrainer/compare/0.10.0...0.11.0
144
+ [0.10.0]: https://github.com/nobrainerorm/nobrainer/compare/0.9.1...0.10.0
145
+ [0.9.1]: https://github.com/nobrainerorm/nobrainer/compare/0.9.0...0.9.1
146
+ [0.9.0]: https://github.com/nobrainerorm/nobrainer/compare/0.8.0...0.9.0
147
+ [0.8.0]: https://github.com/nobrainerorm/nobrainer/releases/tag/0.8.0
@@ -19,8 +19,8 @@ class NoBrainer::Connection
19
19
  end
20
20
 
21
21
  {
22
- :user => uri.user && URI.decode(uri.user),
23
- :password => uri.password && URI.decode(uri.password),
22
+ :user => uri.user && CGI.unescape(uri.user),
23
+ :password => uri.password && CGI.unescape(uri.password),
24
24
  :host => uri.host,
25
25
  :port => uri.port || 28015,
26
26
  :db => uri.path.gsub(/^\//, ''),
@@ -104,6 +104,7 @@ module NoBrainer::Criteria::Where
104
104
  when :between then [key_modifier, op, (cast_value(value.min)..cast_value(value.max))]
105
105
  when :include then ensure_scalar_for(op); [:any, :eq, cast_value(value)]
106
106
  when :defined, :undefined then ensure_scalar_for(op); [key_modifier, op, cast_value(value)]
107
+ when :during then [key_modifier, op, [cast_value(value.first), cast_value(value.last)]]
107
108
  else [key_modifier, op, cast_value(value)]
108
109
  end
109
110
  BinaryOperator.new(new_key_path, new_key_modifier, new_op, new_value, model, true)
@@ -132,6 +133,7 @@ module NoBrainer::Criteria::Where
132
133
  when :between then (lvalue >= value.min) & (lvalue <= value.max)
133
134
  when :in then RethinkDB::RQL.new.expr(value).contains(lvalue)
134
135
  when :intersects then lvalue.intersects(value.to_rql)
136
+ when :during then lvalue.during(value.first, value.last)
135
137
  when :near
136
138
  # XXX options[:max_results] is not used, seems to be a workaround of rethinkdb index implementation.
137
139
  circle = value[:circle]
@@ -244,6 +246,7 @@ module NoBrainer::Criteria::Where
244
246
  when Symbol::Decoration
245
247
  case clause.args.size
246
248
  when 1 then parse_clause_stub(clause, clause.args.first, options)
249
+ when 2 then parse_clause_stub(clause, clause.args, options)
247
250
  else raise "Invalid argument: #{clause}"
248
251
  end
249
252
  else raise "Invalid clause: #{clause}"
@@ -263,6 +266,11 @@ module NoBrainer::Criteria::Where
263
266
  else instantiate_binary_op(key.to_sym, :eq, value, options)
264
267
  end
265
268
  when Symbol::Decoration then
269
+ # The :eq operator can have only one arg
270
+ if key.decorator == :eq && value.is_a?(Array) && value.size > 1
271
+ raise "Invalid key: #{key}"
272
+ end
273
+
266
274
  case key.decorator
267
275
  when :any, :all, :not then instantiate_binary_op(key, :eq, value, options)
268
276
  when :gte then instantiate_binary_op(key.symbol, :ge, value, options)
@@ -33,8 +33,12 @@ module NoBrainer::Document::Association::EagerLoader
33
33
  def eager_load_association(docs, association_name, criteria=nil)
34
34
  docs = docs.compact
35
35
  return [] if docs.empty?
36
- meta = docs.first.root_class.association_metadata
37
- association = meta[association_name.to_sym] || meta[association_name.to_s.singularize.to_sym]
36
+
37
+ meta = docs.first.class.association_metadata
38
+ root_meta = docs.first.root_class.association_metadata
39
+ association = meta[association_name.to_sym] || root_meta[association_name.to_sym] ||
40
+ meta[association_name.to_s.singularize.to_sym] || root_meta[association_name.to_s.singularize.to_sym]
41
+
38
42
  raise "Unknown association #{association_name}" unless association
39
43
  association.eager_load(docs, criteria)
40
44
  end
@@ -0,0 +1,90 @@
1
+ require 'active_support/core_ext/array/wrap'
2
+
3
+ module NoBrainer
4
+ class Array < ::Array
5
+ # delegate cast to each array element
6
+ def self.nobrainer_cast_user_to_model(values)
7
+ ::Array.wrap(values).map do |value|
8
+ if value.class.respond_to?(:nobrainer_cast_user_to_model)
9
+ value.class.nobrainer_cast_user_to_model(value)
10
+ else
11
+ value
12
+ end
13
+ end
14
+ end
15
+
16
+ # delegate cast to each array element
17
+ def self.nobrainer_cast_model_to_db(values)
18
+ ::Array.wrap(values).map do |value|
19
+ if value.class.respond_to?(:nobrainer_cast_model_to_db)
20
+ value.class.nobrainer_cast_model_to_db(value)
21
+ else
22
+ value
23
+ end
24
+ end
25
+ end
26
+
27
+ # delegate cast to each array element
28
+ def self.nobrainer_cast_db_to_model(values)
29
+ ::Array.wrap(values).map do |value|
30
+ if value.class.respond_to?(:nobrainer_cast_db_to_model)
31
+ value.class.nobrainer_cast_db_to_model(method, value)
32
+ else
33
+ value
34
+ end
35
+ end
36
+ end
37
+
38
+ # convenience method to create a TypedArray
39
+ def self.of(object_type = nil, **options)
40
+ NoBrainer::TypedArray.of(object_type, **options)
41
+ end
42
+ end
43
+
44
+ class TypedArray < Array
45
+ def self.of(object_type, allow_nil: false)
46
+ NoBrainer::Document::Types.load_type_extensions(object_type)
47
+ ::Class.new(TypedArray) do
48
+ define_singleton_method(:object_type) { object_type }
49
+ define_singleton_method(:allow_nil?) { allow_nil }
50
+ end
51
+ end
52
+
53
+ def self.name
54
+ str = String.new "Array"
55
+ str += "(#{object_type.name})" if respond_to?(:object_type)
56
+ str
57
+ end
58
+
59
+ # delegate cast methods to object_type cast methods, if defined
60
+ def self.nobrainer_cast_user_to_model(values)
61
+ cast_type = object_type.respond_to?(:nobrainer_cast_user_to_model) && object_type
62
+ values = ::Array.wrap(values).map do |value|
63
+ value = cast_type.nobrainer_cast_user_to_model(value) if cast_type
64
+ unless (value.nil? && allow_nil?) || value.is_a?(object_type)
65
+ raise NoBrainer::Error::InvalidType, type: object_type.name, value: value
66
+ end
67
+ value
68
+ end
69
+ new(values)
70
+ end
71
+
72
+ def self.nobrainer_cast_model_to_db(values)
73
+ values = ::Array.wrap(values)
74
+ if object_type.respond_to?(:nobrainer_cast_model_to_db)
75
+ values.map { |value| object_type.nobrainer_cast_model_to_db(value) }
76
+ else
77
+ values
78
+ end
79
+ end
80
+
81
+ def self.nobrainer_cast_db_to_model(values)
82
+ values = ::Array.wrap(values)
83
+ if object_type.respond_to?(:nobrainer_cast_db_to_model)
84
+ values.map { |value| object_type.nobrainer_cast_db_to_model(value) }
85
+ else
86
+ values
87
+ end
88
+ end
89
+ end
90
+ end
@@ -1,12 +1,15 @@
1
1
  module NoBrainer::Document::Types
2
2
  extend ActiveSupport::Concern
3
3
 
4
+ mattr_accessor :loaded_extensions
5
+ self.loaded_extensions = Set.new
6
+
4
7
  included { before_validation :add_type_errors }
5
8
 
6
9
  def add_type_errors
7
10
  return unless @pending_type_errors
8
11
  @pending_type_errors.each do |name, error|
9
- errors.add(name, :invalid_type, error.error)
12
+ errors.add(name, :invalid_type, **error.error)
10
13
  end
11
14
  end
12
15
 
@@ -59,6 +62,11 @@ module NoBrainer::Document::Types
59
62
  end
60
63
 
61
64
  def field(attr, options={})
65
+ if (type = options[:type]).is_a?(::Array)
66
+ raise ArgumentError, "Expected Array type to have single element, got #{types.inspect}" unless type.length == 1
67
+ options[:type] = NoBrainer::TypedArray.of(type.first)
68
+ end
69
+
62
70
  super
63
71
 
64
72
  type = options[:type]
@@ -105,14 +113,12 @@ module NoBrainer::Document::Types
105
113
  end
106
114
  end
107
115
 
108
- %w(binary boolean text geo enum).each do |type|
116
+ %w(array binary boolean text geo enum).each do |type|
109
117
  require File.join(File.dirname(__FILE__), 'types', type)
110
118
  const_set(type.camelize, NoBrainer.const_get(type.camelize))
111
119
  end
112
120
 
113
121
  class << self
114
- mattr_accessor :loaded_extensions
115
- self.loaded_extensions = Set.new
116
122
  def load_type_extensions(model)
117
123
  unless loaded_extensions.include?(model)
118
124
  begin
@@ -9,7 +9,7 @@ module NoBrainer::Document::Validation::NotNull
9
9
 
10
10
  class NotNullValidator < ActiveModel::EachValidator
11
11
  def validate_each(doc, attr, value)
12
- doc.errors.add(attr, :undefined, options) if value.nil?
12
+ doc.errors.add(attr, :undefined, **options) if value.nil?
13
13
  end
14
14
  end
15
15
  end
@@ -74,7 +74,7 @@ module NoBrainer::Document::Validation::Uniqueness
74
74
  criteria = self.model.unscoped.where(attr => value)
75
75
  criteria = apply_scopes(criteria, doc)
76
76
  criteria = exclude_doc(criteria, doc) if doc.persisted?
77
- doc.errors.add(attr, :taken, options.except(:scope).merge(:value => value)) unless criteria.empty?
77
+ doc.errors.add(attr, :taken, **options.except(:scope).merge(:value => value)) unless criteria.empty?
78
78
  rescue NoBrainer::Error::InvalidType
79
79
  # We can't run the uniqueness validator: where() won't accept bad types
80
80
  # and we have some values that don't have the right type.
@@ -51,7 +51,7 @@ module NoBrainer::Error
51
51
  value = self.value
52
52
  mock = model.allocate
53
53
  mock.singleton_class.send(:define_method, :read_attribute_for_validation) { |_| value }
54
- mock.errors.add(attr_name, :invalid_type, error)
54
+ mock.errors.add(attr_name, :invalid_type, **error)
55
55
  mock.errors.full_messages.first
56
56
  end
57
57
  end
@@ -34,6 +34,16 @@ class NoBrainer::QueryRunner::TableOnDemand < NoBrainer::QueryRunner::Middleware
34
34
  r.table_create(table_name, create_options.reject { |k,_| k.in? [:name, :write_acks] })
35
35
  end
36
36
 
37
+ # Prevent duplicate table errors on a cluster.
38
+ # Workaround from https://github.com/rethinkdb/rethinkdb/issues/4898#issuecomment-270267740
39
+ NoBrainer.run(:db => 'rethinkdb') do |r|
40
+ r.table('table_config')
41
+ .filter({db: db_name, name: table_name})
42
+ .order_by('id')
43
+ .slice(1)
44
+ .delete
45
+ end
46
+
37
47
  if create_options[:write_acks] && create_options[:write_acks] != 'single'
38
48
  NoBrainer.run(:db => db_name) do |r|
39
49
  r.table(table_name).config().update(:write_acks => create_options[:write_acks])
@@ -1,5 +1,5 @@
1
1
  module NoBrainer::SymbolDecoration
2
- NON_CHAINABLE_OPERATORS = %w(in eq gt ge gte lt le lte defined undefined near intersects include).map(&:to_sym)
2
+ NON_CHAINABLE_OPERATORS = %w(in eq gt ge gte lt le lte defined undefined near intersects include during).map(&:to_sym)
3
3
  CHAINABLE_OPERATORS = %w(not any all).map(&:to_sym)
4
4
  OPERATORS = CHAINABLE_OPERATORS + NON_CHAINABLE_OPERATORS
5
5
 
metadata CHANGED
@@ -1,29 +1,35 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nobrainer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.34.0
4
+ version: 0.40.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: 2019-10-16 00:00:00.000000000 Z
11
+ date: 2021-10-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: rethinkdb
14
+ name: activemodel
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 2.3.0
19
+ version: 4.1.0
20
+ - - "<"
21
+ - !ruby/object:Gem::Version
22
+ version: '6.2'
20
23
  type: :runtime
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
23
26
  requirements:
24
27
  - - ">="
25
28
  - !ruby/object:Gem::Version
26
- version: 2.3.0
29
+ version: 4.1.0
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: '6.2'
27
33
  - !ruby/object:Gem::Dependency
28
34
  name: activesupport
29
35
  requirement: !ruby/object:Gem::Requirement
@@ -31,6 +37,9 @@ dependencies:
31
37
  - - ">="
32
38
  - !ruby/object:Gem::Version
33
39
  version: 4.1.0
40
+ - - "<"
41
+ - !ruby/object:Gem::Version
42
+ version: '6.2'
34
43
  type: :runtime
35
44
  prerelease: false
36
45
  version_requirements: !ruby/object:Gem::Requirement
@@ -38,34 +47,43 @@ dependencies:
38
47
  - - ">="
39
48
  - !ruby/object:Gem::Version
40
49
  version: 4.1.0
50
+ - - "<"
51
+ - !ruby/object:Gem::Version
52
+ version: '6.2'
41
53
  - !ruby/object:Gem::Dependency
42
- name: activemodel
54
+ name: middleware
43
55
  requirement: !ruby/object:Gem::Requirement
44
56
  requirements:
45
- - - ">="
57
+ - - "~>"
46
58
  - !ruby/object:Gem::Version
47
- version: 4.1.0
59
+ version: 0.1.0
48
60
  type: :runtime
49
61
  prerelease: false
50
62
  version_requirements: !ruby/object:Gem::Requirement
51
63
  requirements:
52
- - - ">="
64
+ - - "~>"
53
65
  - !ruby/object:Gem::Version
54
- version: 4.1.0
66
+ version: 0.1.0
55
67
  - !ruby/object:Gem::Dependency
56
- name: middleware
68
+ name: rethinkdb
57
69
  requirement: !ruby/object:Gem::Requirement
58
70
  requirements:
59
- - - "~>"
71
+ - - ">="
60
72
  - !ruby/object:Gem::Version
61
- version: 0.1.0
73
+ version: 2.3.0
74
+ - - "<"
75
+ - !ruby/object:Gem::Version
76
+ version: '2.5'
62
77
  type: :runtime
63
78
  prerelease: false
64
79
  version_requirements: !ruby/object:Gem::Requirement
65
80
  requirements:
66
- - - "~>"
81
+ - - ">="
67
82
  - !ruby/object:Gem::Version
68
- version: 0.1.0
83
+ version: 2.3.0
84
+ - - "<"
85
+ - !ruby/object:Gem::Version
86
+ version: '2.5'
69
87
  - !ruby/object:Gem::Dependency
70
88
  name: symbol_decoration
71
89
  requirement: !ruby/object:Gem::Requirement
@@ -80,13 +98,15 @@ dependencies:
80
98
  - - "~>"
81
99
  - !ruby/object:Gem::Version
82
100
  version: '1.1'
83
- description: ORM for RethinkDB
101
+ description: The goal of NoBrainer is to provide a similar interface compared to ActiveRecord
102
+ and Mongoid to build data models on top of RethinkDB while providing precise semantics.
84
103
  email:
85
104
  - nicolas@viennot.biz
86
105
  executables: []
87
106
  extensions: []
88
107
  extra_rdoc_files: []
89
108
  files:
109
+ - CHANGELOG.md
90
110
  - LICENSE
91
111
  - README.md
92
112
  - lib/no_brainer/autoload.rb
@@ -152,6 +172,7 @@ files:
152
172
  - lib/no_brainer/document/table_config/synchronizer.rb
153
173
  - lib/no_brainer/document/timestamps.rb
154
174
  - lib/no_brainer/document/types.rb
175
+ - lib/no_brainer/document/types/array.rb
155
176
  - lib/no_brainer/document/types/binary.rb
156
177
  - lib/no_brainer/document/types/boolean.rb
157
178
  - lib/no_brainer/document/types/date.rb
@@ -219,7 +240,7 @@ files:
219
240
  - lib/rails/generators/templates/nobrainer.rb
220
241
  homepage: http://nobrainer.io
221
242
  licenses:
222
- - LGPLv3
243
+ - LGPL-3.0-only
223
244
  metadata: {}
224
245
  post_install_message:
225
246
  rdoc_options: []
@@ -236,9 +257,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
236
257
  - !ruby/object:Gem::Version
237
258
  version: '0'
238
259
  requirements: []
239
- rubyforge_project:
240
- rubygems_version: 2.5.2.3
260
+ rubygems_version: 3.1.6
241
261
  signing_key:
242
262
  specification_version: 4
243
- summary: ORM for RethinkDB
263
+ summary: A Ruby ORM for RethinkDB
244
264
  test_files: []