ballot_box 0.1.4 → 0.1.5

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile ADDED
@@ -0,0 +1,9 @@
1
+ source "http://rubygems.org"
2
+
3
+ gemspec
4
+
5
+ gem "rails", "3.0.10"
6
+ gem "mysql2", "0.2.7"
7
+
8
+ gem "rspec-rails", "~> 2.7.0"
9
+ gem "database_cleaner", "~> 0.6.7"
File without changes
@@ -10,9 +10,9 @@ The BallotBox gem enables visitors to vote for and against voteable objects
10
10
 
11
11
  == Usage
12
12
 
13
- Use middleware with options:
13
+ Use middleware with options: route and voteable_type
14
14
 
15
- # Initialize BallotBox and set its configurations.
15
+ # Initialize BallotBox request manager and set its configurations.
16
16
  config.app_middleware.use BallotBox::Manager do |config|
17
17
  config.routes = { "/posts/votes" => "Post" }
18
18
  end
@@ -20,7 +20,10 @@ Use middleware with options:
20
20
  Set voteable model:
21
21
 
22
22
  class Post < ActiveRecord::Base
23
- ballot_box :counter_cache => true
23
+ ballot_box :counter_cache => true,
24
+ :strategies => [:authenticated],
25
+ :place => :position,
26
+ :scope => :group_id
24
27
  end
25
28
 
26
29
  Set votes sum column:
@@ -48,9 +51,13 @@ or update votes sum only for one record:
48
51
 
49
52
  @post.ballot_box_update_votes!
50
53
 
51
- Update place directly:
54
+ Update place directly for all scopes:
52
55
 
53
56
  Post.ballot_box_update_place!
57
+
58
+ or update place only for one scope:
59
+
60
+ @post.ballot_box_update_place!
54
61
 
55
62
  View (just send post request to configure route):
56
63
 
@@ -122,3 +129,5 @@ ActiveRecord callbacks:
122
129
 
123
130
  end
124
131
  end
132
+
133
+ This project rocks and uses MIT-LICENSE.
data/Rakefile CHANGED
@@ -2,7 +2,6 @@
2
2
  require 'rake'
3
3
  require 'rake/testtask'
4
4
  require 'rake/rdoctask'
5
- require File.join(File.dirname(__FILE__), 'lib', 'ballot_box', 'version')
6
5
 
7
6
  desc 'Default: run unit tests.'
8
7
  task :default => :test
@@ -23,22 +22,3 @@ Rake::RDocTask.new(:rdoc) do |rdoc|
23
22
  rdoc.rdoc_files.include('README')
24
23
  rdoc.rdoc_files.include('lib/**/*.rb')
25
24
  end
26
-
27
- begin
28
- require 'jeweler'
29
- Jeweler::Tasks.new do |s|
30
- s.name = "ballot_box"
31
- s.version = BallotBox::VERSION.dup
32
- s.summary = "The BallotBox gem enables visitors to vote for and against voteable objects"
33
- s.description = "The BallotBox gem enables visitors to vote for and against voteable objects"
34
- s.email = "galeta.igor@gmail.com"
35
- s.homepage = "https://github.com/galetahub/ballot_box"
36
- s.authors = ["Igor Galeta", "Pavlo Galeta"]
37
- s.files = FileList["[A-Z]*", "{app,lib}/**/*"] - ["Gemfile"]
38
- #s.extra_rdoc_files = FileList["[A-Z]*"]
39
- end
40
-
41
- Jeweler::GemcutterTasks.new
42
- rescue LoadError
43
- puts "Jeweler not available. Install it with: gem install jeweler"
44
- end
@@ -23,4 +23,5 @@ module BallotBox
23
23
  end
24
24
  end
25
25
 
26
- require 'ballot_box/engine' if defined?(Rails)
26
+ require 'ballot_box/version'
27
+ require 'ballot_box/engine'
@@ -8,17 +8,23 @@ module BallotBox
8
8
  #
9
9
  # ballot_box :counter_cache => true,
10
10
  # :strategies => [:authenticated],
11
- # :place => { :column => "place", :order => "votes_count DESC" }
11
+ # :place => :position,
12
+ # :scope => :group_id
12
13
  #
13
14
  def ballot_box(options = {})
14
15
  extend ClassMethods
15
16
  include InstanceMethods
16
17
 
17
- options = {
18
- :strategies => [:authenticated],
18
+ default_options = {
19
+ :strategies => [:authenticated],
20
+ :counter_cache => false,
19
21
  :place => false,
20
- :refresh => true
21
- }.merge(options)
22
+ :refresh => true,
23
+ :scope => nil
24
+ }
25
+
26
+ options.assert_valid_keys(default_options.keys)
27
+ options = default_options.merge(options)
22
28
 
23
29
  class_attribute :ballot_box_options, :instance_writer => false
24
30
  self.ballot_box_options = options
@@ -92,14 +98,37 @@ module BallotBox
92
98
  unscoped.order("#{quoted_table_name}.#{ballot_box_cached_column} DESC")
93
99
  end
94
100
 
95
- def ballot_box_update_place!(scope = nil)
101
+ def ballot_box_update_place!(record = nil)
102
+ relation = ballot_box_place_scope
103
+
104
+ if ballot_box_options[:scope]
105
+ scope_columns = Array.wrap(ballot_box_options[:scope])
106
+
107
+ unless record.nil?
108
+ scope_columns.each do |scope_item|
109
+ scope_value = record.send(scope_item)
110
+ relation = relation.where(scope_item => scope_value)
111
+ end
112
+ else
113
+ unscoped.select(scope_columns).group(scope_columns).each do |record|
114
+ ballot_box_update_place!(record)
115
+ end
116
+
117
+ return
118
+ end
119
+ end
120
+
121
+ ballot_box_update_place_by_relation(relation)
122
+ end
123
+
124
+ def ballot_box_update_place_by_relation(relation)
96
125
  table = quoted_table_name
97
- subquery = ballot_box_place_scope.select("@row := @row + 1 AS row, #{table}.id").from("#{table}, (SELECT @row := 0) r")
98
- subquery = subquery.where(scope) if scope
126
+
127
+ relation = relation.select("@row := @row + 1 AS row, #{table}.id").from("#{table}, (SELECT @row := 0) r")
99
128
 
100
129
  query = %(UPDATE #{table} AS a
101
130
  INNER JOIN (
102
- #{subquery.to_sql}
131
+ #{relation.to_sql}
103
132
  ) AS b ON a.id = b.id
104
133
  SET a.#{ballot_box_place_column} = b.row;)
105
134
 
@@ -131,6 +160,12 @@ module BallotBox
131
160
  self.class.update_all("#{ballot_box_cached_column} = (#{count.to_sql})", ["id = ?", id])
132
161
  end
133
162
  end
163
+
164
+ def ballot_box_update_place!
165
+ if persisted? && ballot_box_place_column
166
+ self.class.ballot_box_update_place!(self)
167
+ end
168
+ end
134
169
  end
135
170
  end
136
171
  end
@@ -1,4 +1,4 @@
1
1
  # encoding: utf-8
2
2
  module BallotBox
3
- VERSION = "0.1.4".freeze
3
+ VERSION = "0.1.5".freeze
4
4
  end
metadata CHANGED
@@ -1,25 +1,26 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ballot_box
3
3
  version: !ruby/object:Gem::Version
4
- hash: 19
4
+ hash: 17
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 4
10
- version: 0.1.4
9
+ - 5
10
+ version: 0.1.5
11
11
  platform: ruby
12
12
  authors:
13
13
  - Igor Galeta
14
- - Pavlo Galeta
15
14
  autorequire:
16
15
  bindir: bin
17
16
  cert_chain: []
18
17
 
19
- date: 2011-10-10 00:00:00 Z
18
+ date: 2011-10-17 00:00:00 Z
20
19
  dependencies:
21
20
  - !ruby/object:Gem::Dependency
22
- version_requirements: &id001 !ruby/object:Gem::Requirement
21
+ name: browser
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
23
24
  none: false
24
25
  requirements:
25
26
  - - ~>
@@ -30,12 +31,12 @@ dependencies:
30
31
  - 1
31
32
  - 2
32
33
  version: 0.1.2
33
- name: browser
34
- prerelease: false
35
34
  type: :runtime
36
- requirement: *id001
35
+ version_requirements: *id001
37
36
  - !ruby/object:Gem::Dependency
38
- version_requirements: &id002 !ruby/object:Gem::Requirement
37
+ name: activemodel
38
+ prerelease: false
39
+ requirement: &id002 !ruby/object:Gem::Requirement
39
40
  none: false
40
41
  requirements:
41
42
  - - ">="
@@ -44,10 +45,8 @@ dependencies:
44
45
  segments:
45
46
  - 0
46
47
  version: "0"
47
- name: activemodel
48
- prerelease: false
49
48
  type: :runtime
50
- requirement: *id002
49
+ version_requirements: *id002
51
50
  description: The BallotBox gem enables visitors to vote for and against voteable objects
52
51
  email: galeta.igor@gmail.com
53
52
  executables: []
@@ -55,27 +54,26 @@ executables: []
55
54
  extensions: []
56
55
 
57
56
  extra_rdoc_files:
58
- - LICENSE
59
57
  - README.rdoc
60
58
  files:
61
- - Gemfile.lock
62
- - LICENSE
63
- - README.rdoc
64
- - Rakefile
65
59
  - app/models/ballot_box/vote.rb
66
- - lib/ballot_box.rb
60
+ - lib/generators/ballot_box/install_generator.rb
61
+ - lib/generators/ballot_box/USAGE
62
+ - lib/generators/ballot_box/templates/migrate/create_votes.rb
67
63
  - lib/ballot_box/base.rb
68
- - lib/ballot_box/callbacks.rb
69
64
  - lib/ballot_box/config.rb
70
- - lib/ballot_box/engine.rb
65
+ - lib/ballot_box/callbacks.rb
71
66
  - lib/ballot_box/manager.rb
72
- - lib/ballot_box/strategies/authenticated.rb
73
- - lib/ballot_box/strategies/base.rb
74
67
  - lib/ballot_box/version.rb
68
+ - lib/ballot_box/engine.rb
75
69
  - lib/ballot_box/voting.rb
76
- - lib/generators/ballot_box/USAGE
77
- - lib/generators/ballot_box/install_generator.rb
78
- - lib/generators/ballot_box/templates/migrate/create_votes.rb
70
+ - lib/ballot_box/strategies/base.rb
71
+ - lib/ballot_box/strategies/authenticated.rb
72
+ - lib/ballot_box.rb
73
+ - MIT-LICENSE
74
+ - Rakefile
75
+ - Gemfile
76
+ - README.rdoc
79
77
  homepage: https://github.com/galetahub/ballot_box
80
78
  licenses: []
81
79
 
@@ -104,8 +102,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
104
102
  version: "0"
105
103
  requirements: []
106
104
 
107
- rubyforge_project:
108
- rubygems_version: 1.8.10
105
+ rubyforge_project: ballot_box
106
+ rubygems_version: 1.8.11
109
107
  signing_key:
110
108
  specification_version: 3
111
109
  summary: The BallotBox gem enables visitors to vote for and against voteable objects
@@ -1,20 +0,0 @@
1
- GEM
2
- remote: http://rubygems.org/
3
- specs:
4
- activemodel (3.1.1)
5
- activesupport (= 3.1.1)
6
- builder (~> 3.0.0)
7
- i18n (~> 0.6)
8
- activesupport (3.1.1)
9
- multi_json (~> 1.0)
10
- browser (0.1.3)
11
- builder (3.0.0)
12
- i18n (0.6.0)
13
- multi_json (1.0.3)
14
-
15
- PLATFORMS
16
- ruby
17
-
18
- DEPENDENCIES
19
- activemodel
20
- browser (~> 0.1.2)