nobrainer 0.34.0 → 0.40.0

Sign up to get free protection for your applications and to get access to all the features.
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: []