hide_and_seek 0.0.4 → 0.0.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/controllers/hide_and_seek/items_controller.rb +9 -7
- data/app/models/hide_and_seek/item.rb +10 -12
- data/config/routes.rb +1 -1
- data/lib/hide_and_seek/engine.rb +1 -1
- data/lib/hide_and_seek/helpers.rb +22 -0
- data/lib/hide_and_seek/version.rb +1 -1
- data/spec/hide_and_seek/controllers/items_controller_spec.rb +39 -27
- data/spec/hide_and_seek/models/item_spec.rb +17 -23
- data/spec/internal/config/initializers/hide_and_seek.rb +3 -3
- data/spec/lib/hide_and_seek/helpers_spec.rb +30 -0
- data/spec/spec_helper.rb +1 -1
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e211ac4514e856978526436d162c72fb8a9f93ca
|
4
|
+
data.tar.gz: 8244ea52ff3ef1f62b3c1a751849deac3882dece
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5cc6990c1e8ba613dc1758c3778cc532a5ed41e96a303ea516dc6746a42204df3c8a53f3c8fa47a91a566152c068f6ce359cb2d0698bf0a226c1ef57fcc1f668
|
7
|
+
data.tar.gz: 2f409298c88886922477c68e0f3be84d196d34cec3ed11b425f09c0e6f6292e2e3571989414fda7988f763d2fed7d03b5777763bc70453f708ec016994f91b3c
|
@@ -2,12 +2,10 @@ require_dependency "hide_and_seek/application_controller"
|
|
2
2
|
|
3
3
|
module HideAndSeek
|
4
4
|
class ItemsController < ApplicationController
|
5
|
-
before_filter :determine_identifier
|
6
|
-
|
7
5
|
def show
|
8
6
|
respond_to do |format|
|
9
7
|
format.json {
|
10
|
-
render json: [display:
|
8
|
+
render json: [display: hide_and_seek.display?]
|
11
9
|
}
|
12
10
|
end
|
13
11
|
end
|
@@ -15,20 +13,24 @@ module HideAndSeek
|
|
15
13
|
def update
|
16
14
|
respond_to do |format|
|
17
15
|
format.json do
|
18
|
-
if
|
16
|
+
if hide_and_seek.hide
|
19
17
|
render status: 200, json: [true]
|
20
18
|
else
|
21
19
|
render status: 502, json: [false]
|
22
20
|
end
|
23
21
|
end
|
24
22
|
end
|
23
|
+
end
|
25
24
|
|
25
|
+
def hide_and_seek
|
26
|
+
@hide_and_seek ||= HideAndSeek::Item.new(params[:item_name], user_identifier)
|
26
27
|
end
|
28
|
+
hide_action :hide_and_seek
|
27
29
|
|
28
30
|
private
|
29
|
-
def determine_identifier
|
30
|
-
@id = params[:user_id] || current_user.id
|
31
|
-
end
|
32
31
|
|
32
|
+
def user_identifier
|
33
|
+
params[:user_id] || current_user.id
|
34
|
+
end
|
33
35
|
end
|
34
36
|
end
|
@@ -1,28 +1,26 @@
|
|
1
1
|
class HideAndSeek::Item
|
2
|
-
|
2
|
+
cattr_accessor :storage, instance_writer: false
|
3
|
+
attr_reader :item_name, :user_identifier
|
3
4
|
|
4
|
-
def initialize(
|
5
|
-
@storage = storage
|
6
|
-
end
|
7
|
-
|
8
|
-
def display?(item_name, user_identifier)
|
5
|
+
def initialize(item_name, user_identifier)
|
9
6
|
@item_name = item_name
|
10
7
|
@user_identifier = user_identifier
|
11
|
-
|
8
|
+
end
|
9
|
+
|
10
|
+
def display?
|
11
|
+
return false if storage.exists(key_name)
|
12
12
|
return true
|
13
13
|
end
|
14
14
|
|
15
|
-
def hide
|
16
|
-
|
17
|
-
@user_identifier = user_identifier
|
18
|
-
if $redis.set(key_name, Time.now) == "OK"
|
15
|
+
def hide
|
16
|
+
if storage.set(key_name, Time.current) == "OK"
|
19
17
|
return true
|
20
18
|
end
|
21
19
|
return false
|
22
20
|
end
|
23
21
|
|
24
22
|
def key_name
|
25
|
-
"#{
|
23
|
+
"#{item_name}-#{user_identifier}"
|
26
24
|
end
|
27
25
|
|
28
26
|
end
|
data/config/routes.rb
CHANGED
data/lib/hide_and_seek/engine.rb
CHANGED
@@ -0,0 +1,22 @@
|
|
1
|
+
module HideAndSeek
|
2
|
+
module Helpers
|
3
|
+
# Checks if an item should be displayed for a
|
4
|
+
# given user.
|
5
|
+
#
|
6
|
+
# @param item_name [String]
|
7
|
+
# @param user_identifier [Integer]
|
8
|
+
# @return [true, false]
|
9
|
+
def display?(item_name, user_identifier)
|
10
|
+
HideAndSeek::Item.new(item_name, user_identifier).display?
|
11
|
+
end
|
12
|
+
|
13
|
+
# Hides an item for a given user.
|
14
|
+
#
|
15
|
+
# @param item_name [String]
|
16
|
+
# @param user_identifier [Integer]
|
17
|
+
# @return [true, false]
|
18
|
+
def hide(item_name, user_identifier)
|
19
|
+
HideAndSeek::Item.new(item_name, user_identifier).hide
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -1,55 +1,67 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
describe HideAndSeek::ItemsController, :type => :controller do
|
1
|
+
RSpec.describe HideAndSeek::ItemsController, :type => :controller do
|
4
2
|
routes { HideAndSeek::Engine.routes }
|
5
3
|
|
6
|
-
let(:current_user){double("User", :id => 1)}
|
4
|
+
let(:current_user){ double("User", :id => 1) }
|
7
5
|
|
8
6
|
before do
|
9
7
|
allow(controller).to receive(:current_user).and_return(current_user)
|
10
8
|
end
|
11
9
|
|
10
|
+
describe '#hide_and_seek' do
|
11
|
+
before { controller.params.merge!(item_name: 'foo') }
|
12
|
+
|
13
|
+
context 'when a user_id parameter has not been provided' do
|
14
|
+
it "instantiates a HideAndSeek::Item for the current user" do
|
15
|
+
expect(HideAndSeek::Item).to receive(:new).with('foo', 1)
|
16
|
+
controller.hide_and_seek
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
context 'when a user_id parameter has been provided' do
|
21
|
+
before { controller.params.merge!(user_id: 9001) }
|
22
|
+
|
23
|
+
it "instantiates a HideAndSeek::Item for the requested user" do
|
24
|
+
expect(HideAndSeek::Item).to receive(:new).with('foo', 9001)
|
25
|
+
controller.hide_and_seek
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
12
29
|
|
13
|
-
|
30
|
+
describe "#show" do
|
14
31
|
it "should check hide_and_seek with the id and the current user" do
|
15
|
-
|
16
|
-
get :show,
|
32
|
+
expect_any_instance_of(HideAndSeek::Item).to receive(:display?).and_return(true)
|
33
|
+
get :show, item_name: "foo", format: :json
|
17
34
|
end
|
35
|
+
|
18
36
|
it "should render json display => true if successful" do
|
19
|
-
|
20
|
-
get :show,
|
37
|
+
allow_any_instance_of(HideAndSeek::Item).to receive(:display?).and_return true
|
38
|
+
get :show, item_name: "foo", format: :json
|
21
39
|
expect(response.body).to eq([display: true].to_json)
|
22
40
|
end
|
41
|
+
|
23
42
|
it "should render json display => false if unsuccessful" do
|
24
|
-
|
25
|
-
get :show,
|
43
|
+
allow_any_instance_of(HideAndSeek::Item).to receive(:display?).and_return false
|
44
|
+
get :show, item_name: "foo", format: :json
|
26
45
|
expect(response.body).to eq([display: false].to_json)
|
27
46
|
end
|
28
|
-
it "should params[:user_id] over current_user if sent" do
|
29
|
-
expect($hide_and_seek).to receive(:display?).with("foo", 9001).and_return(true)
|
30
|
-
get :show, id: "foo", format: :json, user_id: 9001
|
31
|
-
end
|
32
47
|
end
|
33
48
|
|
34
|
-
|
49
|
+
describe "#update" do
|
35
50
|
it "should hide the item for the current_user" do
|
36
|
-
|
37
|
-
patch :update,
|
51
|
+
expect_any_instance_of(HideAndSeek::Item).to receive(:hide)
|
52
|
+
patch :update, item_name: "foo", format: :json
|
38
53
|
end
|
54
|
+
|
39
55
|
it "should render 200" do
|
40
|
-
|
41
|
-
patch :update,
|
56
|
+
allow_any_instance_of(HideAndSeek::Item).to receive(:hide).and_return true
|
57
|
+
patch :update, item_name: "foo", format: :json
|
42
58
|
expect(response.status).to eq(200)
|
43
59
|
end
|
60
|
+
|
44
61
|
it "should respond with 502 if it can't be saved." do
|
45
|
-
|
46
|
-
patch :update,
|
62
|
+
allow_any_instance_of(HideAndSeek::Item).to receive(:hide).and_return false
|
63
|
+
patch :update, item_name: "foo", format: :json
|
47
64
|
expect(response.status).to eq(502)
|
48
65
|
end
|
49
|
-
it "should params[:user_id] over current_user if sent" do
|
50
|
-
expect($hide_and_seek).to receive(:hide).with("foo", 9001).and_return(true)
|
51
|
-
patch :update, id: "foo", format: :json, user_id: 9001
|
52
|
-
end
|
53
|
-
|
54
66
|
end
|
55
67
|
end
|
@@ -1,45 +1,39 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
end
|
7
|
-
|
8
|
-
subject{HideAndSeek::Item.new $redis}
|
1
|
+
RSpec.describe HideAndSeek::Item, :type => :model do
|
2
|
+
before { described_class.storage = storage }
|
3
|
+
after { described_class.storage = nil }
|
4
|
+
let(:storage) { double(:exists => true, :set => "OK") }
|
5
|
+
subject(:item) { described_class.new('foo', 1) }
|
9
6
|
|
10
7
|
describe "#display?" do
|
11
8
|
it "should return false if key exists" do
|
12
|
-
allow(
|
13
|
-
expect(
|
9
|
+
allow(storage).to receive(:exists).with("foo-1").and_return true
|
10
|
+
expect(item.display?).to be false
|
14
11
|
end
|
15
12
|
it "should return true if key doesn't exist" do
|
16
|
-
allow(
|
17
|
-
expect(
|
13
|
+
allow(storage).to receive(:exists).with("foo-1").and_return false
|
14
|
+
expect(item.display?).to be true
|
18
15
|
end
|
19
16
|
end
|
20
17
|
|
21
18
|
describe "#key_name" do
|
22
|
-
it "
|
23
|
-
|
24
|
-
subject.user_identifier = 1
|
25
|
-
expect(subject.key_name).to eql "foo-1"
|
19
|
+
it "joins the item_name and user_identifier." do
|
20
|
+
expect(described_class.new('foo', 1).key_name).to eq('foo-1')
|
26
21
|
end
|
27
|
-
|
28
22
|
end
|
29
23
|
|
30
24
|
describe "#hide" do
|
31
25
|
it "should receive a key with the current time" do
|
32
|
-
expect(
|
33
|
-
|
26
|
+
expect(storage).to receive(:set).with("foo-1", anything())
|
27
|
+
item.hide
|
34
28
|
end
|
35
29
|
it "should return true if successful" do
|
36
|
-
allow(
|
37
|
-
expect(
|
30
|
+
allow(storage).to receive(:set).with("foo-1", anything()).and_return "OK"
|
31
|
+
expect(item.hide).to be true
|
38
32
|
end
|
39
33
|
|
40
34
|
it "should return false if unsuccessful" do
|
41
|
-
allow(
|
42
|
-
expect(
|
35
|
+
allow(storage).to receive(:set).and_return "FALSE"
|
36
|
+
expect(item.hide).to be false
|
43
37
|
end
|
44
38
|
end
|
45
39
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'redis'
|
2
2
|
require 'redis-namespace'
|
3
3
|
|
4
|
-
|
5
|
-
|
6
|
-
|
4
|
+
redis = Redis.new(logger: Rails.logger)
|
5
|
+
ns = Redis::Namespace.new("hide-and-seek-#{Rails.env}", :redis => redis)
|
6
|
+
HideAndSeek::Item.storage = ns
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'hide_and_seek/helpers'
|
2
|
+
|
3
|
+
RSpec.describe HideAndSeek::Helpers, type: :helper do
|
4
|
+
let(:storage) { double(exists: true, set: 'OK') }
|
5
|
+
before { HideAndSeek::Item.storage = storage }
|
6
|
+
|
7
|
+
describe '#display?' do
|
8
|
+
it "instantiates a HideAndSeek::Item with the given item_name and user_identifier" do
|
9
|
+
expect(HideAndSeek::Item).to receive(:new).with('foo', 1).and_call_original
|
10
|
+
helper.display?('foo', 1)
|
11
|
+
end
|
12
|
+
|
13
|
+
it "calls #display? on the HideAndSee::Item instance" do
|
14
|
+
expect_any_instance_of(HideAndSeek::Item).to receive(:display?).once.and_call_original
|
15
|
+
helper.display?('foo', 1)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
describe '#hide' do
|
20
|
+
it "instantiates a HideAndSeek::Item with the given item_name and user_identifier" do
|
21
|
+
expect(HideAndSeek::Item).to receive(:new).with('foo', 1).and_call_original
|
22
|
+
helper.hide('foo', 1)
|
23
|
+
end
|
24
|
+
|
25
|
+
it "calls #hide on the HideAndSee::Item instance" do
|
26
|
+
expect_any_instance_of(HideAndSeek::Item).to receive(:hide).once.and_call_original
|
27
|
+
helper.hide('foo', 1)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -22,8 +22,8 @@ RSpec.configure do |config|
|
|
22
22
|
config.use_transactional_fixtures = true
|
23
23
|
config.infer_base_class_for_anonymous_controllers = false
|
24
24
|
config.order = "random"
|
25
|
+
config.disable_monkey_patching!
|
25
26
|
end
|
26
27
|
|
27
28
|
RSpec.configure do |config|
|
28
|
-
$redis = Redis.new
|
29
29
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hide_and_seek
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- BJ Clark
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-04-
|
11
|
+
date: 2015-04-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -115,6 +115,7 @@ files:
|
|
115
115
|
- config/routes.rb
|
116
116
|
- lib/hide_and_seek.rb
|
117
117
|
- lib/hide_and_seek/engine.rb
|
118
|
+
- lib/hide_and_seek/helpers.rb
|
118
119
|
- lib/hide_and_seek/version.rb
|
119
120
|
- lib/tasks/hide_and_seek_tasks.rake
|
120
121
|
- spec/hide_and_seek/controllers/items_controller_spec.rb
|
@@ -159,6 +160,7 @@ files:
|
|
159
160
|
- spec/internal/public/422.html
|
160
161
|
- spec/internal/public/500.html
|
161
162
|
- spec/internal/public/favicon.ico
|
163
|
+
- spec/lib/hide_and_seek/helpers_spec.rb
|
162
164
|
- spec/spec_helper.rb
|
163
165
|
homepage: http://www.github.com/goldstar/hide_and_seek
|
164
166
|
licenses:
|
@@ -227,5 +229,6 @@ test_files:
|
|
227
229
|
- spec/internal/public/favicon.ico
|
228
230
|
- spec/internal/Rakefile
|
229
231
|
- spec/internal/README.rdoc
|
232
|
+
- spec/lib/hide_and_seek/helpers_spec.rb
|
230
233
|
- spec/spec_helper.rb
|
231
234
|
has_rdoc:
|