mongoid_listable 0.0.6 → 0.0.8

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ ZGRjNjdkNDcwYWI2YjJhNzY1OTY1ZGQ4ODZkMWE3ZTlmYWJlMDkzYQ==
5
+ data.tar.gz: !binary |-
6
+ NTZkOWZhNTFjYmYxMDQ4MjI3NTczZTdhMGQwYjlhYmMwN2I0Nzc1OA==
7
+ !binary "U0hBNTEy":
8
+ metadata.gz: !binary |-
9
+ NjZlY2E4MGVhMGI1OWFjMTQ5NGU2MTQ3NjQ0Y2U1NDJmMzhkMmVlMTkxZGUy
10
+ Y2QyMDFlZGJlMWVhNjU4NmI5NWMwMTFhYmYwY2RlYWQ2MjBhM2UyNDZjOTVi
11
+ ZjAxYTRmOTg2YmFmYjU3MzQwZjRmNDFiY2IzMTUwMjBhNDllMWQ=
12
+ data.tar.gz: !binary |-
13
+ NDc1M2YwYzlkZDFjODhhZDQ0ODVmYWUxOGU2MTA2ZGM3M2NmYjg4ZmIyNzdl
14
+ N2I5ZGE0MjNjYzJhNWEwY2FhOGQ1YmQ4M2ZlMmQ3MWMxOWNjNzIwMGMyMGIz
15
+ MmM5NjljODU4ZDBiM2QzODEyMTRiNjk2Y2ZmYmY4OWQ0OTdmODM=
data/.coveralls.yml ADDED
@@ -0,0 +1 @@
1
+ service_name: travis-ci
data/.travis.yml ADDED
@@ -0,0 +1,14 @@
1
+ language: ruby
2
+ services: mongodb
3
+ bundler_args: --without development
4
+ rvm:
5
+ - 1.9.3
6
+ - 2.0.0
7
+ deploy:
8
+ provider: rubygems
9
+ api_key:
10
+ secure: hWkNBQ4LbxAsErQZ8X46SKvCQ2tRwMU/SX2cWPlE0izXPvlpRie7HQvqlcCdmaYhxljxVEOdThMS9UW8rm4e+ykuWic0SD04iod7c9uvQQIxLra49lawOwaRkARRJJXcU5vIs+DXPEODsnRUita2llCf6WNyKbU+4mPacrC+AH4=
11
+ gem: mongoid_listable
12
+ on:
13
+ tags: true
14
+ repo: richardcalahan/mongoid_listable
data/Gemfile CHANGED
@@ -1,4 +1,6 @@
1
1
  source 'https://rubygems.org'
2
-
3
- # Specify your gem's dependencies in mongoid_listable.gemspec
4
2
  gemspec
3
+
4
+ gem 'rake'
5
+ gem 'rspec'
6
+ gem 'coveralls', require: false
data/README.md CHANGED
@@ -1,4 +1,8 @@
1
1
  # Mongoid Listable
2
+ [![Code Climate](https://codeclimate.com/repos/527c1e427e00a44bc100c7e3/badges/344ff1980ca523c67291/gpa.png)](https://codeclimate.com/repos/527c1e427e00a44bc100c7e3/feed)
3
+ [![Build Status](https://travis-ci.org/richardcalahan/mongoid_listable.png?branch=master)](https://travis-ci.org/richardcalahan/mongoid_listable)
4
+ [![Coverage Status](https://coveralls.io/repos/richardcalahan/mongoid_listable/badge.png?branch=master)](https://coveralls.io/r/richardcalahan/mongoid_listable?branch=master)
5
+ [![Gem Version](https://badge.fury.io/rb/mongoid_listable.png)](http://badge.fury.io/rb/mongoid_listable)
2
6
 
3
7
  Mongoid Listable will eventually be a full replacement library for Mongoid List or Mongoid Orderable. Both
4
8
  libraries fail to accomplish the simple task this library handles: separate position scopes for each
@@ -8,7 +12,7 @@ defined `has_many` / `belongs_to` relation.
8
12
 
9
13
  class User
10
14
  include Mongoid::Document
11
- include Mongoid:Lists
15
+ include Mongoid:Listable
12
16
 
13
17
  has_many :photos
14
18
  lists :photos
@@ -22,11 +26,11 @@ defined `has_many` / `belongs_to` relation.
22
26
  ...
23
27
  end
24
28
 
25
- In this example photos that are assigned to a user via by the method `user.photo_ids=[ids]` will maintain position based on the index
29
+ In this example photos that are assigned to a user will maintain position based on the index
26
30
  of the id in the array argument.
27
31
 
28
32
  Each photo that belongs to the user will automatically obtain a field called `user_position`. The position field
29
- is derived from the foreign key of the relation, replacing "_id" with "_position".
33
+ is derived from the foreign key of the relation, replacing "\_id" with "_position".
30
34
 
31
35
  The 1-n relation of a user to their photos will automatically be ordered by `user_position` unless otherwise specified
32
36
  via the standard `order` option to the `has_many` macro.
@@ -37,7 +41,7 @@ via the standard `order` option to the `has_many` macro.
37
41
 
38
42
  class User
39
43
  include Mongoid::Document
40
- include Mongoid:Lists
44
+ include Mongoid:Listable
41
45
 
42
46
  has_many :featured_photos,
43
47
  class_name: 'Photo',
@@ -79,7 +83,7 @@ You can optionally override the name of the position column:
79
83
 
80
84
  ## Todo
81
85
 
82
- There's a lot more to add to the library! At this point, it conveniently handles standard rails-based multiselect form fields.
86
+ There's a lot more to add to the library! At this point, it conveniently handles has many relationships.
83
87
 
84
88
  ## Installation
85
89
 
data/Rakefile CHANGED
@@ -1 +1,12 @@
1
- require "bundler/gem_tasks"
1
+ require 'bundler/gem_tasks'
2
+ require 'rspec/core/rake_task'
3
+
4
+ task :gem => :build
5
+
6
+ task :build do
7
+ system 'gem build mongoid_listable.gemspec'
8
+ end
9
+
10
+ RSpec::Core::RakeTask.new :spec
11
+
12
+ task :default => :spec
@@ -0,0 +1,54 @@
1
+ module Mongoid
2
+ module Listable
3
+
4
+ module Accessors
5
+ extend ActiveSupport::Concern
6
+
7
+ module ClassMethods
8
+
9
+ # Redefines the default ids setter, ensuring that the order of
10
+ # objects sent to the relation setter corresponds to the order
11
+ # of the array of ids
12
+ #
13
+ # @param [ Symbol ] name The name of the has_many relation
14
+ # @param [ MetaData ] meta The MetaData class
15
+ #
16
+ # @return [ Object ] self
17
+ #
18
+ # @since 0.0.6
19
+ def _ids_setter name, meta
20
+ ids_method = "#{name.to_s.singularize}_ids="
21
+ redefine_method ids_method do |ids|
22
+ send meta.setter, meta.klass.find(ids).sort_by_attr(:id, ids)
23
+ end
24
+ self
25
+ end
26
+
27
+ # Prepends to the default setter a block that sets the position
28
+ # attribute on each object according to its index in the array
29
+ #
30
+ # @param [ Symbol ] name The name of the has_many relation
31
+ # @param [ MetaData ] meta The MetaData class
32
+ #
33
+ # @return [ Object ] self
34
+ #
35
+ # @since 0.0.6
36
+ def _setter name, meta
37
+ before_method "#{name}=" do |objects|
38
+ objects.each_with_index do |object, index|
39
+ object.update_attribute field_name(meta), index + 1
40
+ end
41
+
42
+ (send(name).to_a - objects).each do |object|
43
+ object.unset field_name(meta)
44
+ end
45
+ end
46
+ self
47
+ end
48
+
49
+ end
50
+
51
+ end
52
+
53
+ end
54
+ end
@@ -0,0 +1,58 @@
1
+ module Mongoid
2
+ module Listable
3
+
4
+ module Callbacks
5
+ extend ActiveSupport::Concern
6
+
7
+ module ClassMethods
8
+
9
+ # Defines a mongoid relation after_add callback.
10
+ # Sets the position attribute to current relations length + 1
11
+ #
12
+ # @param [ Symbol ] name The name of the has_many relation
13
+ # @param [ MetaData ] meta The MetaData class
14
+ #
15
+ # @return [ Object ] self
16
+ #
17
+ # @since 0.0.6
18
+ def added name, meta
19
+ callback = "#{name.to_s.singularize}_added"
20
+ define_method callback do |object|
21
+ object.update_attribute field_name(meta), has_many_count(name)
22
+ end
23
+ meta[:after_add] = callback
24
+ self
25
+ end
26
+
27
+ # Defines a mongoid relation before_remove callback.
28
+ # Resets the position index on all objects that came after
29
+ #
30
+ # @param [ Symbol ] name The name of the has_many relation
31
+ # @param [ MetaData ] meta The MetaData class
32
+ #
33
+ # @return [ Object ] self
34
+ #
35
+ # @since 0.0.6
36
+ def removed name, meta
37
+ field_name = field_name meta
38
+ callback = "#{name.to_s.singularize}_removed"
39
+
40
+ define_method callback do |object|
41
+ position = object.send field_name
42
+ send(name).where(field_name.gt => position)
43
+ .each_with_index do |object, index|
44
+ object.update_attribute field_name, position + index
45
+ end
46
+ object.unset field_name
47
+ end
48
+
49
+ meta[:before_remove] = callback
50
+ self
51
+ end
52
+
53
+ end
54
+
55
+ end
56
+
57
+ end
58
+ end
@@ -0,0 +1,33 @@
1
+ module Mongoid
2
+ module Listable
3
+ module Extensions
4
+
5
+ module Array
6
+
7
+ # Sorts an array of objects on the specified key, sorted
8
+ # by the order of the key in an array. Example:
9
+ #
10
+ # [{name: 'Richard'},
11
+ # {name: 'Ashley'},
12
+ # {name: 'Chris'}].sort_by_attr(:name, ['Chris', 'Richard', 'Ashley'])
13
+ #
14
+ # => [{name: 'Chris'}, {name: 'Richard'}, {name: 'Ashley'}]
15
+ #
16
+ # @param [String|Symbol] key The object attribute to sort by
17
+ # @param [Array] values An array of object attributes
18
+ #
19
+ # @return Array
20
+ #
21
+ # @since 0.0.6
22
+ def sort_by_attr k, v
23
+ v.reject! &:blank?
24
+ sort { |a, b| v.index(a.send(k)) <=> v.index(b.send(k)) }
25
+ end
26
+
27
+ end
28
+
29
+ end
30
+ end
31
+ end
32
+
33
+ ::Array.__send__ :include, Mongoid::Listable::Extensions::Array
@@ -0,0 +1,73 @@
1
+ module Mongoid
2
+ module Listable
3
+ module Extensions
4
+
5
+ module Object
6
+
7
+ # Redefine the method. Will undef the method if it exists or simply
8
+ # just define it.
9
+ #
10
+ # @example Redefine the method.
11
+ # Object.re_define_method("exists?") do
12
+ # self
13
+ # end
14
+ #
15
+ # @param [ String, Symbol ] name The name of the method.
16
+ # @param [ Proc ] block The method body.
17
+ #
18
+ # @return [ Method ] The new method.
19
+ #
20
+ # # @since 0.0.7
21
+ def _redefine_method name, &block
22
+ undef_method(name) if method_defined?(name)
23
+ define_method(name, &block)
24
+ end
25
+
26
+ # Redefines a method on owner to first execute &block, then
27
+ # continue executing original method.
28
+ #
29
+ # @param [ Object ] owner The owner of the method
30
+ # @param [ String ] method The name of the method to override
31
+ # @param [ Proc ] &block The block to execute before original method
32
+ #
33
+ # @since 0.0.3
34
+ def before_method name, &block
35
+ original_method = instance_method name
36
+ _redefine_method name do |*args|
37
+ instance_exec *args, &block
38
+ original_method.bind(self).call *args
39
+ end
40
+ end
41
+
42
+ # Redefines a method on owner to execute &block,
43
+ # passing to it as arguments the original method and its arguments.
44
+ # It's the callers' responsibility at that point to run whatever code
45
+ # and return the results of the original method by calling it.
46
+ #
47
+ # Use as an alternative to before_method if your override depends on
48
+ # the results of the original method. around_method will avoid the
49
+ # inevitable stack overflow that occurs in before_method
50
+ # if you call itself.
51
+ #
52
+ # @param [ Object ] owner The owner of the method
53
+ # @param [ String ] method The name of the method to override
54
+ # @param [ Proc ] &block The block to execute before original method
55
+ #
56
+ # @since 0.0.6
57
+ def around_method name, &block
58
+ original_method = instance_method name
59
+ _redefine_method name do |*args|
60
+ instance_exec original_method, *args, &block
61
+ end
62
+ end
63
+
64
+ end
65
+
66
+ end
67
+ end
68
+ end
69
+
70
+ ::Object.__send__ :include, Mongoid::Listable::Extensions::Object
71
+
72
+
73
+
@@ -0,0 +1,2 @@
1
+ require 'mongoid/listable/extensions/array'
2
+ require 'mongoid/listable/extensions/object'
@@ -1,55 +1,33 @@
1
1
  module Mongoid
2
2
  module Listable
3
3
 
4
- # This module contains the core macro for defining listable has_many relationships
4
+ # This module contains the core macro for defining listable
5
+ # has_many relationships
5
6
  module Macros
7
+ extend ActiveSupport::Concern
6
8
 
7
- # Macro to set relation on which to make a list
8
- #
9
- # @param [ Symbol ] relation The name of the has_many relation
10
- # @param [ Hash ] options The options hash
11
- #
12
- # @return [ Mongoid:Relations:Metadata ] Instance of metadata for the relation
13
- #
14
- # @since 0.0.1
15
- def lists name, options={}
16
- meta = reflect_on_association name
17
- field_name = options[:column] ||
18
- (meta.foreign_key.to_s.gsub(/_?id$/, '_position')).to_sym
19
-
9
+ module ClassMethods
20
10
 
21
- # Override the default ids setter, first setting the correct position
22
- # on each relation based on the index of its id in the given array.
11
+ # Macro to set relation on which to make a list
23
12
  #
24
- # @override model#{name}_ids=
25
- before_method self, "#{name.to_s.singularize}_ids=" do |ids|
26
- ids.each_with_index do |id, index|
27
- meta.klass.find(id).update_attribute field_name, index + 1
28
- end
13
+ # @param [ Symbol ] name The name of the has_many relation
14
+ # @param [ Hash ] options The options hash
15
+ #
16
+ # @return [ Mongoid:Relations:Metadata ] Instance of metadata
17
+ #
18
+ # @since 0.0.1
19
+ def lists name, options={}
20
+ meta = reflect_on_association name
21
+ meta.klass.send :field, field_name(meta), type: Integer
22
+ _ids_setter(name, meta)
23
+ ._setter(name, meta)
24
+ .added(name, meta)
25
+ .removed(name, meta)
26
+ meta[:order] ||= "#{field_name(meta)} asc"
29
27
  end
30
28
 
31
- meta[:order] ||= "#{field_name} asc"
32
29
  end
33
30
 
34
- private
35
-
36
- # Redefines a method on owner to first execute &block, then
37
- # continue executing original method.
38
- #
39
- # @param [ Object ] owner The owner of the method
40
- # @param [ String ] method The name of the method to override
41
- # @param [ Proc ] &block The block to execute before original method
42
- #
43
- # @private
44
- # @since 0.0.3
45
- def before_method owner, method, &block
46
- original_method = instance_method method
47
- owner.re_define_method method do |*args|
48
- block.call *args
49
- original_method.bind(self).call *args
50
- end
51
- end
52
-
53
31
  end
54
32
  end
55
33
  end
@@ -0,0 +1,5 @@
1
+ module Mongoid
2
+ module Listable
3
+ VERSION = '0.0.8'
4
+ end
5
+ end
@@ -1,15 +1,50 @@
1
+ require 'mongoid/listable/accessors'
2
+ require 'mongoid/listable/callbacks'
3
+ require 'mongoid/listable/extensions'
1
4
  require 'mongoid/listable/macros'
2
5
 
3
6
  module Mongoid
4
-
5
7
  module Listable
6
-
7
8
  extend ActiveSupport::Concern
8
9
 
9
- included do
10
- extend Mongoid::Listable::Macros
10
+ included do
11
+ include Mongoid::Listable::Accessors
12
+ include Mongoid::Listable::Callbacks
13
+ include Mongoid::Listable::Macros
11
14
  end
12
15
 
13
- end
16
+ module ClassMethods
17
+
18
+ # Generates the position field name using the MetaData class
19
+ #
20
+ # @param [ MetaData ] meta The MetaData class
21
+ #
22
+ # @return Symbol
23
+ #
24
+ # @since 0.0.6
25
+ def field_name meta
26
+ (meta.foreign_key.to_s.gsub(/_?id$/, '_position')).to_sym
27
+ end
28
+
29
+ end
14
30
 
31
+ # Proxies to the class level version
32
+ #
33
+ # @see Class.field_name
34
+ #
35
+ # @since 0.0.6
36
+ def field_name meta
37
+ self.class.field_name meta
38
+ end
39
+
40
+ # Counts unique children of object
41
+ # Needed because the mongoid callbacks dont update
42
+ # has_many relations until after invoked.
43
+ #
44
+ # @since 0.0.7
45
+ def has_many_count name
46
+ send(name).uniq(&:id).count
47
+ end
48
+
49
+ end
15
50
  end
@@ -2,9 +2,11 @@
2
2
  lib = File.expand_path('../lib', __FILE__)
3
3
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
 
5
+ require "mongoid/listable/version"
6
+
5
7
  Gem::Specification.new do |spec|
6
8
  spec.name = 'mongoid_listable'
7
- spec.version = '0.0.6'
9
+ spec.version = Mongoid::Listable::VERSION
8
10
  spec.authors = [ 'richardcalahan' ]
9
11
  spec.email = [ 'richard@calahan.me' ]
10
12
  spec.description = ''
@@ -18,7 +20,6 @@ Gem::Specification.new do |spec|
18
20
  spec.require_paths = [ 'lib' ]
19
21
 
20
22
  spec.add_dependency 'mongoid', '>= 3.1.0'
21
- spec.add_dependency 'mongoid-list'
22
23
 
23
24
  spec.add_development_dependency 'bundler', '~> 1.3'
24
25
  spec.add_development_dependency 'rake'
@@ -0,0 +1,10 @@
1
+ class Photo
2
+
3
+ include Mongoid::Document
4
+ include Mongoid::Listable
5
+
6
+ field :caption, type: String
7
+
8
+ belongs_to :user
9
+
10
+ end
@@ -0,0 +1,13 @@
1
+ class User
2
+
3
+ include Mongoid::Document
4
+ include Mongoid::Listable
5
+
6
+ field :first_name, type: String, default: 'Richard'
7
+ field :last_name, type: String, default: 'Calahan'
8
+
9
+ has_many :photos
10
+
11
+ lists :photos
12
+
13
+ end
@@ -0,0 +1,41 @@
1
+ require 'spec_helper'
2
+
3
+ describe Mongoid::Listable::Extensions::Object do
4
+
5
+ before :each do
6
+
7
+ class Object
8
+ @@foo = 1
9
+ def foo
10
+ @@foo
11
+ end
12
+ def foo= foo
13
+ @@foo = foo
14
+ end
15
+ end
16
+
17
+ end
18
+
19
+ it 'allows a block to be executed before a method' do
20
+ Object.before_method "foo" do
21
+ self.foo = 2
22
+ end
23
+
24
+ expect(Object.new.foo).to eq(2)
25
+ end
26
+
27
+ it 'allows a block to be executed around a method' do
28
+ original_method = nil
29
+ original_return_value = nil
30
+ Object.around_method "foo" do |method, *args|
31
+ original_method = method
32
+ original_return_value = method.bind(self).call *args
33
+ end
34
+
35
+ Object.new.foo
36
+
37
+ expect(original_method).to be_a_kind_of(UnboundMethod)
38
+ expect(original_return_value).to eq(1)
39
+ end
40
+
41
+ end
@@ -0,0 +1,46 @@
1
+ require 'spec_helper'
2
+
3
+ describe Mongoid::Listable do
4
+
5
+ before :all do
6
+ @user = User.create!
7
+ @photos = []
8
+ 10.times { @photos << Photo.create }
9
+ end
10
+
11
+ it 'created a user' do
12
+ expect(@user).to be_true
13
+ end
14
+
15
+ it 'created 10 photos' do
16
+ expect(@photos.count).to eq(10)
17
+ end
18
+
19
+ it 'assigns all photos to a user with the default setter' do
20
+ @user.photos = @photos
21
+ expect(@user.photos.count).to eq(@photos.count)
22
+ end
23
+
24
+ it 'assigns all photos to a user with the default ids setter' do
25
+ ids = @photos.collect(&:id)
26
+ @user.photo_ids = ids
27
+ expect(@user.photos.count).to eq(@photos.count)
28
+ end
29
+
30
+ it 'removes a photo from a user using the delete method' do
31
+ @user.photos.delete @photos[0]
32
+ expect(@user.photos.count).to eq(@photos.count - 1)
33
+ end
34
+
35
+ it 'removes a photo from a user using the default setter' do
36
+ @user.photos = @photos[0..4]
37
+ expect(@user.photos.count).to eq(@photos.count - 5)
38
+ end
39
+
40
+ it 'updated the position field for all the photos' do
41
+ User.first.photos.each_with_index do |photo, index|
42
+ expect(photo.user_position).to eq(index + 1)
43
+ end
44
+ end
45
+
46
+ end
@@ -0,0 +1,24 @@
1
+ require 'mongoid'
2
+ require 'rspec'
3
+
4
+ if ENV['CI']
5
+ require 'coveralls'
6
+ Coveralls.wear!
7
+ end
8
+
9
+ require File.expand_path '../../lib/mongoid_listable', __FILE__
10
+ require File.expand_path '../../spec/models/photo', __FILE__
11
+ require File.expand_path '../../spec/models/user', __FILE__
12
+
13
+ Mongoid.configure do |config|
14
+ config.connect_to 'mongoid_listable_test'
15
+ Moped.logger = Logger.new $stdout
16
+ Moped.logger.level = Logger::INFO
17
+ end
18
+
19
+ RSpec.configure do |config|
20
+ config.before :suite do
21
+ Mongoid.purge!
22
+ Mongoid::IdentityMap.clear
23
+ end
24
+ end
metadata CHANGED
@@ -1,20 +1,18 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mongoid_listable
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
5
- prerelease:
4
+ version: 0.0.8
6
5
  platform: ruby
7
6
  authors:
8
7
  - richardcalahan
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-11-06 00:00:00.000000000 Z
11
+ date: 2013-11-09 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: mongoid
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
17
  - - ! '>='
20
18
  - !ruby/object:Gem::Version
@@ -22,31 +20,13 @@ dependencies:
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
24
  - - ! '>='
28
25
  - !ruby/object:Gem::Version
29
26
  version: 3.1.0
30
- - !ruby/object:Gem::Dependency
31
- name: mongoid-list
32
- requirement: !ruby/object:Gem::Requirement
33
- none: false
34
- requirements:
35
- - - ! '>='
36
- - !ruby/object:Gem::Version
37
- version: '0'
38
- type: :runtime
39
- prerelease: false
40
- version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
- requirements:
43
- - - ! '>='
44
- - !ruby/object:Gem::Version
45
- version: '0'
46
27
  - !ruby/object:Gem::Dependency
47
28
  name: bundler
48
29
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
30
  requirements:
51
31
  - - ~>
52
32
  - !ruby/object:Gem::Version
@@ -54,7 +34,6 @@ dependencies:
54
34
  type: :development
55
35
  prerelease: false
56
36
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
37
  requirements:
59
38
  - - ~>
60
39
  - !ruby/object:Gem::Version
@@ -62,7 +41,6 @@ dependencies:
62
41
  - !ruby/object:Gem::Dependency
63
42
  name: rake
64
43
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
44
  requirements:
67
45
  - - ! '>='
68
46
  - !ruby/object:Gem::Version
@@ -70,7 +48,6 @@ dependencies:
70
48
  type: :development
71
49
  prerelease: false
72
50
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
51
  requirements:
75
52
  - - ! '>='
76
53
  - !ruby/object:Gem::Version
@@ -82,38 +59,55 @@ executables: []
82
59
  extensions: []
83
60
  extra_rdoc_files: []
84
61
  files:
62
+ - .coveralls.yml
85
63
  - .gitignore
64
+ - .travis.yml
86
65
  - Gemfile
87
66
  - LICENSE.txt
88
67
  - README.md
89
68
  - Rakefile
90
69
  - lib/mongoid/listable.rb
70
+ - lib/mongoid/listable/accessors.rb
71
+ - lib/mongoid/listable/callbacks.rb
72
+ - lib/mongoid/listable/extensions.rb
73
+ - lib/mongoid/listable/extensions/array.rb
74
+ - lib/mongoid/listable/extensions/object.rb
91
75
  - lib/mongoid/listable/macros.rb
76
+ - lib/mongoid/listable/version.rb
92
77
  - lib/mongoid_listable.rb
93
78
  - mongoid_listable.gemspec
79
+ - spec/models/photo.rb
80
+ - spec/models/user.rb
81
+ - spec/mongoid/listable/extensions/object_spec.rb
82
+ - spec/mongoid_listable_spec.rb
83
+ - spec/spec_helper.rb
94
84
  homepage: ''
95
85
  licenses:
96
86
  - MIT
87
+ metadata: {}
97
88
  post_install_message:
98
89
  rdoc_options: []
99
90
  require_paths:
100
91
  - lib
101
92
  required_ruby_version: !ruby/object:Gem::Requirement
102
- none: false
103
93
  requirements:
104
94
  - - ! '>='
105
95
  - !ruby/object:Gem::Version
106
96
  version: '0'
107
97
  required_rubygems_version: !ruby/object:Gem::Requirement
108
- none: false
109
98
  requirements:
110
99
  - - ! '>='
111
100
  - !ruby/object:Gem::Version
112
101
  version: '0'
113
102
  requirements: []
114
103
  rubyforge_project:
115
- rubygems_version: 1.8.24
104
+ rubygems_version: 2.0.3
116
105
  signing_key:
117
- specification_version: 3
106
+ specification_version: 4
118
107
  summary: ''
119
- test_files: []
108
+ test_files:
109
+ - spec/models/photo.rb
110
+ - spec/models/user.rb
111
+ - spec/mongoid/listable/extensions/object_spec.rb
112
+ - spec/mongoid_listable_spec.rb
113
+ - spec/spec_helper.rb