acts_as_previous_next 0.0.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.
Files changed (59) hide show
  1. data/.gitignore +7 -0
  2. data/.rspec +1 -0
  3. data/Gemfile +25 -0
  4. data/Gemfile.lock +145 -0
  5. data/Guardfile +19 -0
  6. data/MIT-LICENSE +20 -0
  7. data/README.rdoc +50 -0
  8. data/Rakefile +27 -0
  9. data/acts_as_previous_next.gemspec +31 -0
  10. data/lib/acts_as_previous_next/version.rb +3 -0
  11. data/lib/acts_as_previous_next.rb +46 -0
  12. data/lib/tasks/acts_as_previous_next_tasks.rake +4 -0
  13. data/spec/dummy/README.rdoc +261 -0
  14. data/spec/dummy/Rakefile +7 -0
  15. data/spec/dummy/app/assets/javascripts/application.js +15 -0
  16. data/spec/dummy/app/assets/stylesheets/application.css +13 -0
  17. data/spec/dummy/app/controllers/application_controller.rb +3 -0
  18. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  19. data/spec/dummy/app/mailers/.gitkeep +0 -0
  20. data/spec/dummy/app/models/.gitkeep +0 -0
  21. data/spec/dummy/app/models/ability.rb +12 -0
  22. data/spec/dummy/app/models/post.rb +3 -0
  23. data/spec/dummy/app/models/user.rb +2 -0
  24. data/spec/dummy/app/models/without_cancan.rb +3 -0
  25. data/spec/dummy/app/views/layouts/application.html.erb +14 -0
  26. data/spec/dummy/config/application.rb +62 -0
  27. data/spec/dummy/config/boot.rb +10 -0
  28. data/spec/dummy/config/database.yml +42 -0
  29. data/spec/dummy/config/environment.rb +5 -0
  30. data/spec/dummy/config/environments/development.rb +37 -0
  31. data/spec/dummy/config/environments/production.rb +67 -0
  32. data/spec/dummy/config/environments/test.rb +37 -0
  33. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  34. data/spec/dummy/config/initializers/inflections.rb +15 -0
  35. data/spec/dummy/config/initializers/mime_types.rb +5 -0
  36. data/spec/dummy/config/initializers/secret_token.rb +7 -0
  37. data/spec/dummy/config/initializers/session_store.rb +8 -0
  38. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  39. data/spec/dummy/config/locales/en.yml +5 -0
  40. data/spec/dummy/config/routes.rb +58 -0
  41. data/spec/dummy/config.ru +4 -0
  42. data/spec/dummy/db/migrate/20120104174603_create_posts.rb +9 -0
  43. data/spec/dummy/db/migrate/20120105104935_create_users.rb +9 -0
  44. data/spec/dummy/db/migrate/20120105110842_create_without_cancans.rb +9 -0
  45. data/spec/dummy/db/schema.rb +37 -0
  46. data/spec/dummy/lib/assets/.gitkeep +0 -0
  47. data/spec/dummy/log/.gitkeep +0 -0
  48. data/spec/dummy/public/404.html +26 -0
  49. data/spec/dummy/public/422.html +26 -0
  50. data/spec/dummy/public/500.html +25 -0
  51. data/spec/dummy/public/favicon.ico +0 -0
  52. data/spec/dummy/script/rails +6 -0
  53. data/spec/factories/post.rb +13 -0
  54. data/spec/factories/user.rb +11 -0
  55. data/spec/factories/without_cancan.rb +11 -0
  56. data/spec/models/post_spec.rb +97 -0
  57. data/spec/models/without_cancan_spec.rb +50 -0
  58. data/spec/spec_helper.rb +80 -0
  59. metadata +166 -0
@@ -0,0 +1,11 @@
1
+ FactoryGirl.define do
2
+ factory :admin, class: User do
3
+ name 'admin'
4
+ role 'admin'
5
+ end
6
+
7
+ factory :user, class: User do
8
+ name 'admin'
9
+ role 'user'
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ FactoryGirl.define do
2
+ factory :wc1, class: WithoutCancan do
3
+ name 'wc1'
4
+ position 2
5
+ end
6
+
7
+ factory :wc2, class: WithoutCancan do
8
+ name 'wc2'
9
+ position 3
10
+ end
11
+ end
@@ -0,0 +1,97 @@
1
+ require 'spec_helper'
2
+
3
+ describe Post do
4
+
5
+ let(:fp1) { FactoryGirl.build(:first_post) }
6
+ let(:fp2) { FactoryGirl.build(:second_post) }
7
+
8
+ context 'with current ability as admin' do
9
+
10
+ let(:admin) { FactoryGirl.build(:admin) }
11
+
12
+ before(:each) do
13
+ @current_ability = Ability.new(admin)
14
+ end
15
+
16
+ it 'should return nil on next if no objects exists' do
17
+ fp1.next(@current_ability).should be_nil
18
+ end
19
+
20
+ it 'should return nil on previous if no objects exists' do
21
+ fp1.previous(@current_ability).should be_nil
22
+ end
23
+
24
+ it 'should return self on next if one object exists' do
25
+ fp1.save
26
+ fp1.next(@current_ability).should eq(fp1)
27
+ end
28
+
29
+ it 'should return self on previous if one object exists' do
30
+ fp1.save
31
+ fp1.previous(@current_ability).should eq(fp1)
32
+ end
33
+
34
+ it 'should return valid next object ' do
35
+ fp1.save
36
+ fp2.save
37
+ fp1.next(@current_ability).should eq(fp2)
38
+ end
39
+
40
+ it 'should return valid previous object' do
41
+ fp1.save
42
+ fp2.save
43
+ fp2.previous(@current_ability).should eq(fp1)
44
+ end
45
+
46
+ it 'should return self if next is called on previous' do
47
+ fp1.save
48
+ fp2.save
49
+ fp1.previous(@current_ability).next(@current_ability).should eq(fp1)
50
+ end
51
+
52
+ it 'should return self if previous is called on next' do
53
+ fp1.save
54
+ fp2.save
55
+ fp1.next(@current_ability).previous(@current_ability).should eq(fp1)
56
+ end
57
+
58
+ end
59
+
60
+ context 'with current ability as user' do
61
+
62
+ let(:admin) { FactoryGirl.build(:admin) }
63
+ let(:user) { FactoryGirl.build(:user) }
64
+ let(:fp3) { FactoryGirl.build(:third_post) }
65
+
66
+ before(:each) do
67
+ admin.save
68
+ user.save
69
+ fp1.user_id = user.id
70
+ fp3.user_id = user.id
71
+ fp2.user_id = admin.id
72
+ fp1.save
73
+ fp2.save
74
+ fp3.save
75
+ @current_ability = Ability.new(user)
76
+ end
77
+
78
+ it 'should not reach invalid next object' do
79
+ fp1.next(@current_ability).should_not eq(fp2)
80
+ end
81
+
82
+ it 'should not reach invalid previous object' do
83
+ fp3.previous(@current_ability).should_not eq(fp2)
84
+ end
85
+
86
+ it 'should reach valid next object' do
87
+ fp1.next(@current_ability).should eq(fp3)
88
+ end
89
+
90
+ it 'should reach valid previous object' do
91
+ fp3.previous(@current_ability).should eq(fp1)
92
+ end
93
+
94
+ end
95
+
96
+
97
+ end
@@ -0,0 +1,50 @@
1
+ require 'spec_helper'
2
+
3
+ describe WithoutCancan do
4
+
5
+ let(:wc1) { FactoryGirl.build(:wc1) }
6
+ let(:wc2) { FactoryGirl.build(:wc2) }
7
+
8
+ it 'should return nil on next if no objects exists' do
9
+ wc1.next.should be_nil
10
+ end
11
+
12
+ it 'should return nil on previous if no objects exists' do
13
+ wc1.previous.should be_nil
14
+ end
15
+
16
+ it 'should return self on next if one object exists' do
17
+ wc1.save
18
+ wc1.next.should eq(wc1)
19
+ end
20
+
21
+ it 'should return self on previous if one object exists' do
22
+ wc1.save
23
+ wc1.previous.should eq(wc1)
24
+ end
25
+
26
+ it 'should return valid next object ' do
27
+ wc1.save
28
+ wc2.save
29
+ wc1.next.should eq(wc2)
30
+ end
31
+
32
+ it 'should return valid previous object' do
33
+ wc1.save
34
+ wc2.save
35
+ wc2.previous.should eq(wc1)
36
+ end
37
+
38
+ it 'should return self if next is called on previous' do
39
+ wc1.save
40
+ wc2.save
41
+ wc1.previous.next.should eq(wc1)
42
+ end
43
+
44
+ it 'should return self if previous is called on next' do
45
+ wc1.save
46
+ wc2.save
47
+ wc1.next.previous.should eq(wc1)
48
+ end
49
+
50
+ end
@@ -0,0 +1,80 @@
1
+ require 'rubygems'
2
+ require 'spork'
3
+ require 'factory_girl'
4
+ require 'database_cleaner'
5
+
6
+ Spork.prefork do
7
+ # Loading more in this block will cause your tests to run faster. However,
8
+ # if you change any configuration or code from libraries loaded here, you'll
9
+ # need to restart spork for it take effect.
10
+ ENV["RAILS_ENV"] ||= 'test'
11
+ require File.expand_path("../dummy/config/environment", __FILE__)
12
+
13
+ require 'rspec/rails'
14
+
15
+ # Requires supporting ruby files with custom matchers and macros, etc,
16
+ # in spec/support/ and its subdirectories.
17
+ Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f}
18
+
19
+ RSpec.configure do |config|
20
+ # == Mock Framework
21
+ #
22
+ # If you prefer to use mocha, flexmock or RR, uncomment the appropriate line:
23
+ #
24
+ # config.mock_with :mocha
25
+ # config.mock_with :flexmock
26
+ # config.mock_with :rr
27
+ config.mock_with :rspec
28
+
29
+ # If you're not using ActiveRecord, or you'd prefer not to run each of your
30
+ # examples within a transaction, remove the following line or assign false
31
+ # instead of true.
32
+ config.use_transactional_fixtures = false
33
+
34
+ # If true, the base class of anonymous controllers will be inferred
35
+ # automatically. This will be the default behavior in future versions of
36
+ # rspec-rails.
37
+ config.infer_base_class_for_anonymous_controllers = false
38
+
39
+ config.use_instantiated_fixtures = false
40
+
41
+ # Use DatabaseCleaner to enable js testing
42
+ config.before(:suite) do
43
+ DatabaseCleaner.strategy = :truncation
44
+ DatabaseCleaner.clean_with(:truncation)
45
+ end
46
+
47
+ config.before(:each) do
48
+ #Timecop.return
49
+ DatabaseCleaner.start
50
+ end
51
+
52
+ config.after(:each) do
53
+ DatabaseCleaner.clean
54
+ end
55
+
56
+ config.before(:all) do
57
+ #DeferredGarbageCollection.start
58
+ end
59
+
60
+ config.after(:all) do
61
+ #DeferredGarbageCollection.reconsider
62
+ end
63
+
64
+ # Add helpers for devise authentication
65
+ #config.include Devise::TestHelpers, type: :controller
66
+ #config.extend ControllerMacros, type: :controller
67
+
68
+ # Also include warden
69
+ #config.include Warden::Test::Helpers
70
+ #config.after(:each) { Warden.test_reset!}
71
+
72
+ # Include factory_girl's helpers
73
+ #config.include FactoryGirl::Syntax::Methods
74
+ end
75
+ end
76
+
77
+ Spork.each_run do
78
+ FactoryGirl.find_definitions
79
+ end
80
+
metadata ADDED
@@ -0,0 +1,166 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: acts_as_previous_next
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Giorgos Tsiftsis
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-01-05 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rails
16
+ requirement: &14179180 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: 3.2.0.rc2
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *14179180
25
+ - !ruby/object:Gem::Dependency
26
+ name: mysql2
27
+ requirement: &14178700 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :development
34
+ prerelease: false
35
+ version_requirements: *14178700
36
+ - !ruby/object:Gem::Dependency
37
+ name: factory_girl_rails
38
+ requirement: &14178040 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
44
+ type: :development
45
+ prerelease: false
46
+ version_requirements: *14178040
47
+ - !ruby/object:Gem::Dependency
48
+ name: spork
49
+ requirement: &14177240 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - =
53
+ - !ruby/object:Gem::Version
54
+ version: 0.9.0.rc9
55
+ type: :development
56
+ prerelease: false
57
+ version_requirements: *14177240
58
+ - !ruby/object:Gem::Dependency
59
+ name: guard-rspec
60
+ requirement: &14176500 !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - ! '>='
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
66
+ type: :development
67
+ prerelease: false
68
+ version_requirements: *14176500
69
+ description: ! "This 'acts_as' extension provides the capability for having previous
70
+ next methods for object.\n Previous & next are based on a specified column (default
71
+ is id)."
72
+ email:
73
+ - giorgos.tsiftsis@gmail.com
74
+ executables: []
75
+ extensions: []
76
+ extra_rdoc_files: []
77
+ files:
78
+ - .gitignore
79
+ - .rspec
80
+ - Gemfile
81
+ - Gemfile.lock
82
+ - Guardfile
83
+ - MIT-LICENSE
84
+ - README.rdoc
85
+ - Rakefile
86
+ - acts_as_previous_next.gemspec
87
+ - lib/acts_as_previous_next.rb
88
+ - lib/acts_as_previous_next/version.rb
89
+ - lib/tasks/acts_as_previous_next_tasks.rake
90
+ - spec/dummy/README.rdoc
91
+ - spec/dummy/Rakefile
92
+ - spec/dummy/app/assets/javascripts/application.js
93
+ - spec/dummy/app/assets/stylesheets/application.css
94
+ - spec/dummy/app/controllers/application_controller.rb
95
+ - spec/dummy/app/helpers/application_helper.rb
96
+ - spec/dummy/app/mailers/.gitkeep
97
+ - spec/dummy/app/models/.gitkeep
98
+ - spec/dummy/app/models/ability.rb
99
+ - spec/dummy/app/models/post.rb
100
+ - spec/dummy/app/models/user.rb
101
+ - spec/dummy/app/models/without_cancan.rb
102
+ - spec/dummy/app/views/layouts/application.html.erb
103
+ - spec/dummy/config.ru
104
+ - spec/dummy/config/application.rb
105
+ - spec/dummy/config/boot.rb
106
+ - spec/dummy/config/database.yml
107
+ - spec/dummy/config/environment.rb
108
+ - spec/dummy/config/environments/development.rb
109
+ - spec/dummy/config/environments/production.rb
110
+ - spec/dummy/config/environments/test.rb
111
+ - spec/dummy/config/initializers/backtrace_silencers.rb
112
+ - spec/dummy/config/initializers/inflections.rb
113
+ - spec/dummy/config/initializers/mime_types.rb
114
+ - spec/dummy/config/initializers/secret_token.rb
115
+ - spec/dummy/config/initializers/session_store.rb
116
+ - spec/dummy/config/initializers/wrap_parameters.rb
117
+ - spec/dummy/config/locales/en.yml
118
+ - spec/dummy/config/routes.rb
119
+ - spec/dummy/db/migrate/20120104174603_create_posts.rb
120
+ - spec/dummy/db/migrate/20120105104935_create_users.rb
121
+ - spec/dummy/db/migrate/20120105110842_create_without_cancans.rb
122
+ - spec/dummy/db/schema.rb
123
+ - spec/dummy/lib/assets/.gitkeep
124
+ - spec/dummy/log/.gitkeep
125
+ - spec/dummy/public/404.html
126
+ - spec/dummy/public/422.html
127
+ - spec/dummy/public/500.html
128
+ - spec/dummy/public/favicon.ico
129
+ - spec/dummy/script/rails
130
+ - spec/factories/post.rb
131
+ - spec/factories/user.rb
132
+ - spec/factories/without_cancan.rb
133
+ - spec/models/post_spec.rb
134
+ - spec/models/without_cancan_spec.rb
135
+ - spec/spec_helper.rb
136
+ homepage: ''
137
+ licenses: []
138
+ post_install_message:
139
+ rdoc_options: []
140
+ require_paths:
141
+ - lib
142
+ required_ruby_version: !ruby/object:Gem::Requirement
143
+ none: false
144
+ requirements:
145
+ - - ! '>='
146
+ - !ruby/object:Gem::Version
147
+ version: '0'
148
+ segments:
149
+ - 0
150
+ hash: 1614502978542647
151
+ required_rubygems_version: !ruby/object:Gem::Requirement
152
+ none: false
153
+ requirements:
154
+ - - ! '>='
155
+ - !ruby/object:Gem::Version
156
+ version: '0'
157
+ segments:
158
+ - 0
159
+ hash: 1614502978542647
160
+ requirements: []
161
+ rubyforge_project:
162
+ rubygems_version: 1.8.10
163
+ signing_key:
164
+ specification_version: 3
165
+ summary: A gem allowing an actire_record model to have previous, next based on a column.
166
+ test_files: []