partisan 0.4 → 0.4.1

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
2
  SHA1:
3
- metadata.gz: 5144131fd00599fe346d266846c160768aa821e2
4
- data.tar.gz: ab4d801d4cf2e632474efa1d8a1117d1b66b7a19
3
+ metadata.gz: 698e3eb571bbe3198a67365ef8be7beb1b37acf2
4
+ data.tar.gz: 40db91f5461e512580f03d9afcc93391fffcd66d
5
5
  SHA512:
6
- metadata.gz: e416ac5b694502c5d7f84442079987f5b3561a7b6cfe90c36f78517b6f9d791a16c78f20b9069d35d5e2874b425c4e5c236a9e2257c4e74fbfba8fa30f41791d
7
- data.tar.gz: e5fbe276053c550f4ecadb39df3c8933eade895eb435ee0d3558504da5592d1eb71d7fef076446aed41b56aa7a913c4bbe190393c3ab0fba644fffa4f3ca3eee
6
+ metadata.gz: 9c02a2514eeb7b5b4249370c57aff22f4a587aa30e628868858b08234dd6b4df2c85eadba4cf4c9afebe1645ab3bc3dbe07f89c1a9e596e303f62be79a280ad4
7
+ data.tar.gz: 8eeb187a25dcdf319342860348b41408abc85e8baeb5b292cf932d699cf9e7a855b895bd48b1732ed4158391b2e507c7ca77763fc1f49e41e2ea60797eb71d9c
@@ -5,7 +5,17 @@ rvm:
5
5
  - 1.9.3
6
6
 
7
7
  gemfile:
8
+ - gemfiles/Gemfile.activerecord-4.1
8
9
  - gemfiles/Gemfile.activerecord-4.0
9
10
  - gemfiles/Gemfile.activerecord-3.2.x
10
11
 
11
12
  script: "echo 'DO IT' && bundle exec rake spec"
13
+
14
+ notifications:
15
+ hipchat:
16
+ rooms:
17
+ secure: "DUZC6Q2b18pEp7W7qNnGRYDgqtZGeWh44ED+hF27OIxjdM6JRx/nOmpvY46/lR6KjiH7DDM+TGPbxAzXo3rECxUZqkMPjMkqfZyfyN4JhccI/dJf1EL0GDUMogPfFUOuLWTqA49Y9GvvXTghK/irlLBhInWcrPJcTIsDG2t4nN4="
18
+ template:
19
+ - '%{repository}#%{build_number} (%{branch} - %{commit} : %{author}): %{message} (<a href="%{build_url}">Build</a>/<a href="%{compare_url}">Changes</a>)'
20
+ format: 'html'
21
+
data/README.md CHANGED
@@ -5,9 +5,10 @@
5
5
  <br />
6
6
  Partisan is a Ruby library that allows ActiveRecord records to follow other records.
7
7
  <br /><br />
8
- <a href="https://rubygems.org/gems/partisan"><img src="https://badge.fury.io/rb/partisan.png" /></a>
9
- <a href="https://codeclimate.com/github/mirego/partisan"><img src="https://codeclimate.com/github/mirego/partisan.png" /></a>
10
- <a href="https://travis-ci.org/mirego/partisan"><img src="https://travis-ci.org/mirego/partisan.png?branch=master" /></a>
8
+ <a href="https://rubygems.org/gems/partisan"><img src="http://img.shields.io/gem/v/partisan.svg" /></a>
9
+ <a href="https://codeclimate.com/github/mirego/partisan"><img src="http://img.shields.io/codeclimate/github/mirego/partisan.svg" /></a>
10
+ <a href="https://gemnasium.com/mirego/partisan"><img src="http://img.shields.io/gemnasium/mirego/partisan.svg" /></a>
11
+ <a href="https://travis-ci.org/mirego/partisan"><img src="http://img.shields.io/travis/mirego/partisan.svg" /></a>
11
12
  </p>
12
13
 
13
14
  ---
@@ -145,6 +146,6 @@ The available callbacks are:
145
146
 
146
147
  ## About Mirego
147
148
 
148
- Mirego is a team of passionate people who believe that work is a place where you can innovate and have fun. We proudly build mobile applications for [iPhone](http://mirego.com/en/iphone-app-development/ "iPhone application development"), [iPad](http://mirego.com/en/ipad-app-development/ "iPad application development"), [Android](http://mirego.com/en/android-app-development/ "Android application development"), [Blackberry](http://mirego.com/en/blackberry-app-development/ "Blackberry application development"), [Windows Phone](http://mirego.com/en/windows-phone-app-development/ "Windows Phone application development") and [Windows 8](http://mirego.com/en/windows-8-app-development/ "Windows 8 application development") in beautiful Quebec City.
149
+ [Mirego](http://mirego.com) is a team of passionate people who believe that work is a place where you can innovate and have fun. We're a team of [talented people](http://life.mirego.com) who imagine and build beautiful Web and mobile applications. We come together to share ideas and [change the world](http://mirego.org).
149
150
 
150
- We also love [open-source software](http://open.mirego.com/) and we try to extract as much code as possible from our projects to give back to the community.
151
+ We also [love open-source software](http://open.mirego.com) and we try to give back to the community as much as we can.
@@ -0,0 +1,5 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec path: '../'
4
+
5
+ gem 'activerecord', '~> 4.1.0'
@@ -2,14 +2,12 @@ require "partisan/version"
2
2
 
3
3
  require "active_record"
4
4
 
5
+ require "partisan/helper"
5
6
  require "partisan/follow"
6
- require "partisan/follow_helper"
7
7
  require "partisan/follower"
8
8
  require "partisan/followable"
9
9
 
10
10
  module Partisan
11
- include Partisan::FollowHelper
12
-
13
11
  def self.inject_into_active_record
14
12
  @inject_into_active_record ||= Proc.new do
15
13
  def self.acts_as_follower
@@ -3,8 +3,6 @@ module Partisan
3
3
  extend ActiveSupport::Concern
4
4
  extend ActiveModel::Callbacks
5
5
 
6
- include Partisan::FollowHelper
7
-
8
6
  included do
9
7
  has_many :followings, as: :followable, class_name: 'Follow', dependent: :destroy
10
8
  define_model_callbacks :being_followed
@@ -34,7 +32,7 @@ module Partisan
34
32
  def followers_by_type(follower_type)
35
33
  opts = {
36
34
  'follows.followable_id' => self.id,
37
- 'follows.followable_type' => parent_class_name(self)
35
+ 'follows.followable_type' => Partisan::Helper.parent_class_name(self)
38
36
  }
39
37
 
40
38
  follower_type.constantize.joins(:follows).where(opts)
@@ -2,7 +2,6 @@ module Partisan
2
2
  module Follower
3
3
  extend ActiveSupport::Concern
4
4
  extend ActiveModel::Callbacks
5
- include Partisan::FollowHelper
6
5
 
7
6
  included do
8
7
  has_many :follows, as: :follower, class_name: 'Follow', dependent: :destroy
@@ -63,7 +62,7 @@ module Partisan
63
62
  #
64
63
  # @return [Follow, ...]
65
64
  def fetch_follows(resource)
66
- follows.where followable_id: resource.id, followable_type: parent_class_name(resource)
65
+ follows.where followable_id: resource.id, followable_type: Partisan::Helper.parent_class_name(resource)
67
66
  end
68
67
 
69
68
  # Get resource records for a specific type, used by #method_missing
@@ -77,7 +76,7 @@ module Partisan
77
76
  def following_by_type(followable_type)
78
77
  opts = {
79
78
  'follows.follower_id' => self.id,
80
- 'follows.follower_type' => parent_class_name(self)
79
+ 'follows.follower_type' => Partisan::Helper.parent_class_name(self)
81
80
  }
82
81
 
83
82
  followable_type.constantize.joins(:followings).where(opts)
@@ -0,0 +1,17 @@
1
+ module Partisan
2
+ class Helper
3
+ # Retrieves the parent class name
4
+ def self.parent_class_name(obj)
5
+ # If the object is an ActiveRecord record
6
+ klass = obj.class if obj.class < ActiveRecord::Base
7
+
8
+ # If the object respond to `object` and the value is an ActiveRecord record
9
+ klass ||= obj.object.class if obj.respond_to?(:object) && obj.object.class < ActiveRecord::Base
10
+
11
+ # In case we’re using STI, loop back until we find the top-level ActiveRecord model
12
+ klass = klass.superclass while klass.superclass != ActiveRecord::Base
13
+
14
+ klass.name
15
+ end
16
+ end
17
+ end
@@ -1,3 +1,3 @@
1
1
  module Partisan
2
- VERSION = '0.4'
2
+ VERSION = '0.4.1'
3
3
  end
@@ -8,7 +8,7 @@ Gem::Specification.new do |spec|
8
8
  spec.version = Partisan::VERSION
9
9
  spec.authors = ['Simon Prévost', 'Rémi Prévost']
10
10
  spec.email = ['sprevost@mirego.com', 'Rémi Prévost']
11
- spec.description = 'Partisan is a Ruby library that allows ActiveRecord records to be follower and followable, just like on popular social networks. It’s heavily inspired by acts_as_follower which is no longer maintened.'
11
+ spec.description = 'Partisan is a Ruby library that allows ActiveRecord records to be follower and followable, just like on popular social networks. It’s heavily inspired by acts_as_follower which is no longer maintained.'
12
12
  spec.summary = 'Partisan is a Ruby library that allows ActiveRecord records to be follower and followable'
13
13
  spec.homepage = 'https://github.com/mirego/partisan'
14
14
  spec.license = 'BSD 3-Clause'
@@ -22,6 +22,6 @@ Gem::Specification.new do |spec|
22
22
 
23
23
  spec.add_development_dependency 'bundler', '~> 1.3'
24
24
  spec.add_development_dependency 'rake'
25
- spec.add_development_dependency 'rspec'
25
+ spec.add_development_dependency 'rspec', '~> 3.1'
26
26
  spec.add_development_dependency 'sqlite3'
27
27
  end
@@ -31,8 +31,8 @@ describe Partisan::Followable do
31
31
  end
32
32
 
33
33
  describe :followed_by? do
34
- it { expect(band.followed_by? user).to be_true }
35
- it { expect(concert.followed_by? user).to be_false }
34
+ it { expect(band.followed_by? user).to be_truthy }
35
+ it { expect(concert.followed_by? user).to be_falsey }
36
36
  end
37
37
 
38
38
  describe :followers_by_type do
@@ -62,8 +62,8 @@ describe Partisan::Followable do
62
62
  end
63
63
 
64
64
  describe :respond_to? do
65
- it { expect(band.respond_to?(:user_followers)).to be_true }
66
- it { expect(band.respond_to?(:users_follower_ids)).to be_true }
65
+ it { expect(band.respond_to?(:user_followers)).to be_truthy }
66
+ it { expect(band.respond_to?(:users_follower_ids)).to be_truthy }
67
67
  end
68
68
 
69
69
  describe :update_follow_counter do
@@ -52,8 +52,8 @@ describe Partisan::Follower do
52
52
  describe :follows? do
53
53
  let(:band2) { Band.create }
54
54
 
55
- it { expect(user.follows? band).to be_true }
56
- it { expect(user.follows? band2).to be_false }
55
+ it { expect(user.follows? band).to be_truthy }
56
+ it { expect(user.follows? band2).to be_falsey }
57
57
  end
58
58
 
59
59
  describe :following_by_type do
@@ -89,8 +89,8 @@ describe Partisan::Follower do
89
89
  end
90
90
 
91
91
  describe :respond_to? do
92
- it { expect(user.respond_to?(:following_bands)).to be_true }
93
- it { expect(user.respond_to?(:following_band_ids)).to be_true }
92
+ it { expect(user.respond_to?(:following_bands)).to be_truthy }
93
+ it { expect(user.respond_to?(:following_band_ids)).to be_truthy }
94
94
  end
95
95
  end
96
96
 
@@ -0,0 +1,43 @@
1
+ require 'spec_helper'
2
+
3
+ describe Partisan::Helper do
4
+ describe :ClassMethods do
5
+ describe :parent_class_name do
6
+ let(:parent_class_name) { Partisan::Helper.send(:parent_class_name, object) }
7
+
8
+ before do
9
+ run_migration { create_table 'articles' }
10
+ end
11
+
12
+ context 'with regular record object' do
13
+ let(:object) { spawn_model('Article', ActiveRecord::Base).new }
14
+
15
+ it { expect(parent_class_name).to eql 'Article' }
16
+ end
17
+
18
+ context 'with STI-model record object' do
19
+ let(:object) do
20
+ spawn_model('Article', ActiveRecord::Base)
21
+ spawn_model('BlogPost', Article).new
22
+ end
23
+
24
+ it { expect(parent_class_name).to eql 'Article' }
25
+ end
26
+
27
+ context 'with a presented record object' do
28
+ let(:presenter_class) do
29
+ Class.new(::SimpleDelegator) do
30
+ alias_method :object, :__getobj__
31
+ end
32
+ end
33
+
34
+ let(:object) do
35
+ spawn_model('Article', ActiveRecord::Base)
36
+ presenter_class.new(Article.new)
37
+ end
38
+
39
+ it { expect(parent_class_name).to eql 'Article' }
40
+ end
41
+ end
42
+ end
43
+ end
@@ -29,7 +29,8 @@ module ModelMacros
29
29
  # Create a new model class
30
30
  def spawn_model(klass_name, parent_klass, &block)
31
31
  Object.instance_eval { remove_const klass_name } if Object.const_defined?(klass_name)
32
- Object.const_set(klass_name, Class.new(parent_klass))
32
+ klass = Object.const_set(klass_name, Class.new(parent_klass))
33
33
  Object.const_get(klass_name).class_eval(&block) if block_given?
34
+ klass
34
35
  end
35
36
  end
@@ -1,9 +1,13 @@
1
1
  module RailsMacros
2
+ # NOTE: This method is not fun to maintain but we need it to make sure
3
+ # Partisan methods return *real* not-loaded ActiveRecord relations
2
4
  def relation_class(klass)
3
5
  if ActiveRecord::VERSION::MAJOR == 3
4
6
  ActiveRecord::Relation
5
- else
7
+ elsif [ActiveRecord::VERSION::MAJOR, ActiveRecord::VERSION::MINOR] == [4, 0]
6
8
  "ActiveRecord::Relation::ActiveRecord_Relation_#{klass.name}".constantize
9
+ else
10
+ "#{klass.name}::ActiveRecord_Relation".constantize
7
11
  end
8
12
  end
9
13
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: partisan
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.4'
4
+ version: 0.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Simon Prévost
@@ -9,81 +9,81 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-09-16 00:00:00.000000000 Z
12
+ date: 2014-12-10 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activerecord
16
16
  requirement: !ruby/object:Gem::Requirement
17
17
  requirements:
18
- - - '>='
18
+ - - ">="
19
19
  - !ruby/object:Gem::Version
20
20
  version: 3.0.0
21
21
  type: :runtime
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
- - - '>='
25
+ - - ">="
26
26
  - !ruby/object:Gem::Version
27
27
  version: 3.0.0
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: bundler
30
30
  requirement: !ruby/object:Gem::Requirement
31
31
  requirements:
32
- - - ~>
32
+ - - "~>"
33
33
  - !ruby/object:Gem::Version
34
34
  version: '1.3'
35
35
  type: :development
36
36
  prerelease: false
37
37
  version_requirements: !ruby/object:Gem::Requirement
38
38
  requirements:
39
- - - ~>
39
+ - - "~>"
40
40
  - !ruby/object:Gem::Version
41
41
  version: '1.3'
42
42
  - !ruby/object:Gem::Dependency
43
43
  name: rake
44
44
  requirement: !ruby/object:Gem::Requirement
45
45
  requirements:
46
- - - '>='
46
+ - - ">="
47
47
  - !ruby/object:Gem::Version
48
48
  version: '0'
49
49
  type: :development
50
50
  prerelease: false
51
51
  version_requirements: !ruby/object:Gem::Requirement
52
52
  requirements:
53
- - - '>='
53
+ - - ">="
54
54
  - !ruby/object:Gem::Version
55
55
  version: '0'
56
56
  - !ruby/object:Gem::Dependency
57
57
  name: rspec
58
58
  requirement: !ruby/object:Gem::Requirement
59
59
  requirements:
60
- - - '>='
60
+ - - "~>"
61
61
  - !ruby/object:Gem::Version
62
- version: '0'
62
+ version: '3.1'
63
63
  type: :development
64
64
  prerelease: false
65
65
  version_requirements: !ruby/object:Gem::Requirement
66
66
  requirements:
67
- - - '>='
67
+ - - "~>"
68
68
  - !ruby/object:Gem::Version
69
- version: '0'
69
+ version: '3.1'
70
70
  - !ruby/object:Gem::Dependency
71
71
  name: sqlite3
72
72
  requirement: !ruby/object:Gem::Requirement
73
73
  requirements:
74
- - - '>='
74
+ - - ">="
75
75
  - !ruby/object:Gem::Version
76
76
  version: '0'
77
77
  type: :development
78
78
  prerelease: false
79
79
  version_requirements: !ruby/object:Gem::Requirement
80
80
  requirements:
81
- - - '>='
81
+ - - ">="
82
82
  - !ruby/object:Gem::Version
83
83
  version: '0'
84
84
  description: Partisan is a Ruby library that allows ActiveRecord records to be follower
85
85
  and followable, just like on popular social networks. It’s heavily inspired by acts_as_follower
86
- which is no longer maintened.
86
+ which is no longer maintained.
87
87
  email:
88
88
  - sprevost@mirego.com
89
89
  - Rémi Prévost
@@ -91,28 +91,30 @@ executables: []
91
91
  extensions: []
92
92
  extra_rdoc_files: []
93
93
  files:
94
- - .gitignore
95
- - .rspec
96
- - .travis.yml
94
+ - ".gitignore"
95
+ - ".rspec"
96
+ - ".travis.yml"
97
97
  - Gemfile
98
98
  - LICENSE.md
99
99
  - README.md
100
100
  - Rakefile
101
101
  - gemfiles/Gemfile.activerecord-3.2.x
102
102
  - gemfiles/Gemfile.activerecord-4.0
103
+ - gemfiles/Gemfile.activerecord-4.1
103
104
  - lib/generators/partisan/USAGE
104
105
  - lib/generators/partisan/install_generator.rb
105
106
  - lib/generators/partisan/templates/migration.rb
106
107
  - lib/generators/partisan/templates/model.rb
107
108
  - lib/partisan.rb
108
109
  - lib/partisan/follow.rb
109
- - lib/partisan/follow_helper.rb
110
110
  - lib/partisan/followable.rb
111
111
  - lib/partisan/follower.rb
112
+ - lib/partisan/helper.rb
112
113
  - lib/partisan/version.rb
113
114
  - partisan.gemspec
114
115
  - spec/partisan/followable_spec.rb
115
116
  - spec/partisan/follower_spec.rb
117
+ - spec/partisan/helper_spec.rb
116
118
  - spec/spec_helper.rb
117
119
  - spec/support/macros/database_macros.rb
118
120
  - spec/support/macros/model_macros.rb
@@ -127,17 +129,17 @@ require_paths:
127
129
  - lib
128
130
  required_ruby_version: !ruby/object:Gem::Requirement
129
131
  requirements:
130
- - - '>='
132
+ - - ">="
131
133
  - !ruby/object:Gem::Version
132
134
  version: '0'
133
135
  required_rubygems_version: !ruby/object:Gem::Requirement
134
136
  requirements:
135
- - - '>='
137
+ - - ">="
136
138
  - !ruby/object:Gem::Version
137
139
  version: '0'
138
140
  requirements: []
139
141
  rubyforge_project:
140
- rubygems_version: 2.1.0
142
+ rubygems_version: 2.2.2
141
143
  signing_key:
142
144
  specification_version: 4
143
145
  summary: Partisan is a Ruby library that allows ActiveRecord records to be follower
@@ -145,6 +147,7 @@ summary: Partisan is a Ruby library that allows ActiveRecord records to be follo
145
147
  test_files:
146
148
  - spec/partisan/followable_spec.rb
147
149
  - spec/partisan/follower_spec.rb
150
+ - spec/partisan/helper_spec.rb
148
151
  - spec/spec_helper.rb
149
152
  - spec/support/macros/database_macros.rb
150
153
  - spec/support/macros/model_macros.rb
@@ -1,15 +0,0 @@
1
- module Partisan
2
- module FollowHelper
3
-
4
- private
5
-
6
- # Retrieves the parent class name if using STI.
7
- def parent_class_name(obj)
8
- klass = obj.class
9
- klass = klass.superclass while klass.superclass != ActiveRecord::Base
10
-
11
- klass.name
12
- end
13
-
14
- end
15
- end