scintillation 1.0.11 → 1.1.1
Sign up to get free protection for your applications and to get access to all the features.
- data/VERSION +1 -1
- data/lib/scintillation.rb +7 -96
- data/lib/scintillation/controller.rb +25 -0
- data/lib/scintillation/message_queue.rb +24 -0
- data/lib/scintillation/message_queue/message.rb +22 -0
- data/lib/scintillation/view.rb +16 -0
- data/scintillation.gemspec +10 -4
- data/spec/scintillation/controller_spec.rb +37 -0
- data/spec/scintillation/message_queue_spec.rb +70 -0
- metadata +12 -6
- data/spec/scintillation_spec.rb +0 -32
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.
|
1
|
+
1.1.1
|
data/lib/scintillation.rb
CHANGED
@@ -1,99 +1,10 @@
|
|
1
|
+
require 'active_support'
|
2
|
+
require 'scintillation/controller'
|
3
|
+
require 'scintillation/view'
|
4
|
+
|
1
5
|
module Scintillation
|
2
|
-
|
3
|
-
def self.included(base)
|
4
|
-
base.send(:include, Controller)
|
5
|
-
end
|
6
|
-
|
7
|
-
module Controller
|
8
|
-
def self.included(base)
|
9
|
-
base.extend(ClassMethods)
|
10
|
-
end
|
11
|
-
|
12
|
-
module ClassMethods
|
13
|
-
def scintillate(options = {})
|
14
|
-
include InstanceMethods
|
15
|
-
ActionView::Base.send(:include, Scintillation::View)
|
16
|
-
|
17
|
-
options.reverse_merge!(:scope => :messages)
|
18
|
-
|
19
|
-
# import flash messages
|
20
|
-
before_filter { |c| c.send(:flash).each { |t, m| c.messages.add(m, t) } }
|
21
|
-
|
22
|
-
helper_method :messages
|
23
|
-
|
24
|
-
define_method(:messages) do
|
25
|
-
@messages ||= Scintillation::SessionMessages.new(session, :scope => options[:scope])
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
module InstanceMethods
|
31
|
-
def method_missing(method, *args, &block)
|
32
|
-
case method.to_s
|
33
|
-
when /^((\w+)_)?msg(_for_(\w+))?$/ then messages.add(args[0], $2, $4)
|
34
|
-
when /^((\w+)_)?msgs$/ then messages.get($2)
|
35
|
-
else super
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
##################################################
|
42
|
-
|
43
|
-
module View
|
44
|
-
def self.included(base)
|
45
|
-
base.send(:include, InstanceMethods)
|
46
|
-
end
|
47
|
-
|
48
|
-
module InstanceMethods
|
49
|
-
def method_missing(method, *args, &block)
|
50
|
-
if method.to_s =~ /^((\w+)_)?msgs$/
|
51
|
-
messages.get($2)
|
52
|
-
else
|
53
|
-
super
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
|
-
def display_messages(msgs)
|
58
|
-
content_tag(:ul) { msgs.map { |m| content_tag(:li, m, :class => m.tone) } }
|
59
|
-
end
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
|
-
##################################################
|
64
|
-
|
65
|
-
class SessionMessages
|
66
|
-
def initialize(session, options = {})
|
67
|
-
options.reverse_merge!(:scope => :messages)
|
68
|
-
@session = session
|
69
|
-
@session_scope = options[:scope]
|
70
|
-
@temp_msgs = {}
|
71
|
-
end
|
72
|
-
|
73
|
-
def msgs
|
74
|
-
@session[@session_scope] ||= {}
|
75
|
-
end
|
76
|
-
|
77
|
-
def add(obj, tone = nil, scope = nil)
|
78
|
-
msgs[scope.to_s] ||= []
|
79
|
-
|
80
|
-
case obj
|
81
|
-
when ActiveModel::Errors then obj.full_messages
|
82
|
-
else Array(obj)
|
83
|
-
end.each do |m|
|
84
|
-
msgs[scope.to_s] << Scintillation::Message.new(m.to_s, tone)
|
85
|
-
end
|
86
|
-
end
|
87
|
-
|
88
|
-
def get(scope = nil)
|
89
|
-
@temp_msgs[scope.to_s] ||= (msgs.delete(scope.to_s) || [])
|
90
|
-
end
|
91
|
-
end
|
92
|
-
|
93
|
-
##################################################
|
94
|
-
|
95
|
-
Message = Struct.new(:to_s, :tone)
|
96
|
-
|
97
6
|
end
|
98
7
|
|
99
|
-
|
8
|
+
if defined?(Rails)
|
9
|
+
ActionController::Base.send(:extend, Scintillation::Controller)
|
10
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'scintillation/message_queue'
|
2
|
+
|
3
|
+
module Scintillation
|
4
|
+
module Controller
|
5
|
+
|
6
|
+
def scintillate(options = {})
|
7
|
+
include MessageQueue
|
8
|
+
include InstanceMethods
|
9
|
+
|
10
|
+
ActionView::Base.send(:include, Scintillation::View)
|
11
|
+
|
12
|
+
options.reverse_merge!(:scope => :messages)
|
13
|
+
|
14
|
+
helper_method :message_store
|
15
|
+
|
16
|
+
define_method(:scintillation_scope) { options[:scope] }
|
17
|
+
end
|
18
|
+
|
19
|
+
module InstanceMethods
|
20
|
+
def message_store
|
21
|
+
@message_store ||= (session[scintillation_scope] ||= {})
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'scintillation/message_queue/message'
|
2
|
+
|
3
|
+
module Scintillation
|
4
|
+
module MessageQueue
|
5
|
+
|
6
|
+
def message_store
|
7
|
+
@message_store ||= {}
|
8
|
+
end
|
9
|
+
|
10
|
+
def method_missing(method, *args, &block)
|
11
|
+
case method.to_s
|
12
|
+
when /^((\w+)_)?msg(_for_(\w+))?$/
|
13
|
+
(message_store[$4] ||= []) << Message.new(args[0], $2)
|
14
|
+
when /^has_((\w+)_)?msgs\?$/
|
15
|
+
!message_store[$2].empty?
|
16
|
+
when /^((\w+)_)?msgs$/
|
17
|
+
message_store.delete($2) || []
|
18
|
+
else
|
19
|
+
super
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Scintillation
|
2
|
+
module MessageQueue
|
3
|
+
class Message
|
4
|
+
def initialize(text, tone)
|
5
|
+
self.text, self.tone = text, tone
|
6
|
+
end
|
7
|
+
|
8
|
+
attr_accessor :tone
|
9
|
+
attr_reader :text
|
10
|
+
|
11
|
+
alias_method :to_s, :text
|
12
|
+
|
13
|
+
def text=(val)
|
14
|
+
@text = val.to_s
|
15
|
+
end
|
16
|
+
|
17
|
+
def ==(message)
|
18
|
+
text == message.text && tone == message.tone
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Scintillation
|
2
|
+
module View
|
3
|
+
|
4
|
+
def method_missing(method, *args, &block)
|
5
|
+
case method.to_s
|
6
|
+
when /^has_((\w+)_)?msgs\?$/
|
7
|
+
message_store[$2] && !message_store[$2].empty?
|
8
|
+
when /^((\w+)_)?msgs$/
|
9
|
+
message_store.delete($2) || []
|
10
|
+
else
|
11
|
+
super
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
end
|
data/scintillation.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{scintillation}
|
8
|
-
s.version = "1.
|
8
|
+
s.version = "1.1.1"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Austin Schneider"]
|
12
|
-
s.date = %q{2010-
|
12
|
+
s.date = %q{2010-06-27}
|
13
13
|
s.description = %q{A flash messages replacement}
|
14
14
|
s.email = %q{soccer022483@gmail.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -24,8 +24,13 @@ Gem::Specification.new do |s|
|
|
24
24
|
"Rakefile",
|
25
25
|
"VERSION",
|
26
26
|
"lib/scintillation.rb",
|
27
|
+
"lib/scintillation/controller.rb",
|
28
|
+
"lib/scintillation/message_queue.rb",
|
29
|
+
"lib/scintillation/message_queue/message.rb",
|
30
|
+
"lib/scintillation/view.rb",
|
27
31
|
"scintillation.gemspec",
|
28
|
-
"spec/
|
32
|
+
"spec/scintillation/controller_spec.rb",
|
33
|
+
"spec/scintillation/message_queue_spec.rb",
|
29
34
|
"spec/spec_helper.rb"
|
30
35
|
]
|
31
36
|
s.homepage = %q{http://github.com/soccer022483/scintillation}
|
@@ -34,7 +39,8 @@ Gem::Specification.new do |s|
|
|
34
39
|
s.rubygems_version = %q{1.3.6}
|
35
40
|
s.summary = %q{A flash messages replacement}
|
36
41
|
s.test_files = [
|
37
|
-
"spec/
|
42
|
+
"spec/scintillation/controller_spec.rb",
|
43
|
+
"spec/scintillation/message_queue_spec.rb",
|
38
44
|
"spec/spec_helper.rb"
|
39
45
|
]
|
40
46
|
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'action_controller'
|
3
|
+
|
4
|
+
class ControllerTest < ActionController::Base
|
5
|
+
extend Scintillation::Controller
|
6
|
+
|
7
|
+
def session
|
8
|
+
@session ||= {}
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
describe Scintillation::Controller do
|
13
|
+
describe "scintillate" do
|
14
|
+
before do
|
15
|
+
ControllerTest.scintillate(:scope => :messages)
|
16
|
+
end
|
17
|
+
|
18
|
+
describe "an instance" do
|
19
|
+
before do
|
20
|
+
@ct = ControllerTest.new
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should be a message queue" do
|
24
|
+
@ct.is_a?(Scintillation::MessageQueue).should be_true
|
25
|
+
end
|
26
|
+
|
27
|
+
it "should have a scintillation_scope" do
|
28
|
+
@ct.scintillation_scope.should == :messages
|
29
|
+
end
|
30
|
+
|
31
|
+
it "messages should setup the session" do
|
32
|
+
@ct.message_store.should == {}
|
33
|
+
@ct.session.should == {:messages => {}}
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
class MessageQueueTest
|
4
|
+
include Scintillation::MessageQueue
|
5
|
+
end
|
6
|
+
|
7
|
+
describe Scintillation::MessageQueue do
|
8
|
+
before do
|
9
|
+
@mqt = MessageQueueTest.new
|
10
|
+
end
|
11
|
+
|
12
|
+
def create_message(text, tone)
|
13
|
+
Scintillation::MessageQueue::Message.new(text, tone)
|
14
|
+
end
|
15
|
+
|
16
|
+
describe "adding messages" do
|
17
|
+
it "should be able to add messages with no tone or scope" do
|
18
|
+
args = ["msg", nil]
|
19
|
+
msg = create_message(*args)
|
20
|
+
Scintillation::MessageQueue::Message.stub!(:new).with(*args).and_return(msg)
|
21
|
+
@mqt.msg(args[0])
|
22
|
+
@mqt.message_store.should == {nil => [msg]}
|
23
|
+
end
|
24
|
+
|
25
|
+
it "should be able to add messages with a tone" do
|
26
|
+
args = ["msg", "cool"]
|
27
|
+
msg = create_message(*args)
|
28
|
+
Scintillation::MessageQueue::Message.stub!(:new).with(*args).and_return(msg)
|
29
|
+
@mqt.cool_msg(args[0])
|
30
|
+
@mqt.message_store.should == {nil => [msg]}
|
31
|
+
end
|
32
|
+
|
33
|
+
it "should be able to add messages with a scope" do
|
34
|
+
args = ["msg", nil]
|
35
|
+
msg = create_message(*args)
|
36
|
+
Scintillation::MessageQueue::Message.stub!(:new).with(*args).and_return(msg)
|
37
|
+
@mqt.msg_for_login(args[0])
|
38
|
+
@mqt.message_store.should == {'login' => [msg]}
|
39
|
+
end
|
40
|
+
|
41
|
+
it "should be able to add messages with a tone and scope" do
|
42
|
+
args = ["msg", "cool"]
|
43
|
+
msg = create_message(*args)
|
44
|
+
Scintillation::MessageQueue::Message.stub!(:new).with(*args).and_return(msg)
|
45
|
+
@mqt.cool_msg_for_login(args[0])
|
46
|
+
@mqt.message_store.should == {'login' => [msg]}
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
describe "with some messages added" do
|
51
|
+
before do
|
52
|
+
@mqt.msg("msg")
|
53
|
+
@mqt.cool_msg("cool msg")
|
54
|
+
@mqt.msg_for_login("msg for login")
|
55
|
+
@mqt.cool_msg_for_login("cool msg for login")
|
56
|
+
end
|
57
|
+
|
58
|
+
it "should retrieve messages by scope" do
|
59
|
+
@mqt.msgs.should == [
|
60
|
+
create_message("msg", nil),
|
61
|
+
create_message("cool msg", "cool"),
|
62
|
+
]
|
63
|
+
@mqt.login_msgs.should == [
|
64
|
+
create_message("msg for login", nil),
|
65
|
+
create_message("cool msg for login", "cool"),
|
66
|
+
]
|
67
|
+
@mqt.message_store.should be_empty
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
metadata
CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
|
|
4
4
|
prerelease: false
|
5
5
|
segments:
|
6
6
|
- 1
|
7
|
-
-
|
8
|
-
-
|
9
|
-
version: 1.
|
7
|
+
- 1
|
8
|
+
- 1
|
9
|
+
version: 1.1.1
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Austin Schneider
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-
|
17
|
+
date: 2010-06-27 00:00:00 -04:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -46,8 +46,13 @@ files:
|
|
46
46
|
- Rakefile
|
47
47
|
- VERSION
|
48
48
|
- lib/scintillation.rb
|
49
|
+
- lib/scintillation/controller.rb
|
50
|
+
- lib/scintillation/message_queue.rb
|
51
|
+
- lib/scintillation/message_queue/message.rb
|
52
|
+
- lib/scintillation/view.rb
|
49
53
|
- scintillation.gemspec
|
50
|
-
- spec/
|
54
|
+
- spec/scintillation/controller_spec.rb
|
55
|
+
- spec/scintillation/message_queue_spec.rb
|
51
56
|
- spec/spec_helper.rb
|
52
57
|
has_rdoc: true
|
53
58
|
homepage: http://github.com/soccer022483/scintillation
|
@@ -80,5 +85,6 @@ signing_key:
|
|
80
85
|
specification_version: 3
|
81
86
|
summary: A flash messages replacement
|
82
87
|
test_files:
|
83
|
-
- spec/
|
88
|
+
- spec/scintillation/controller_spec.rb
|
89
|
+
- spec/scintillation/message_queue_spec.rb
|
84
90
|
- spec/spec_helper.rb
|
data/spec/scintillation_spec.rb
DELETED
@@ -1,32 +0,0 @@
|
|
1
|
-
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
|
-
|
3
|
-
module ActiveRecord; Errors = Struct.new(nil); end
|
4
|
-
|
5
|
-
describe Scintillation::SessionMessages do
|
6
|
-
it "should add/get messages" do
|
7
|
-
sm = Scintillation::SessionMessages.new({})
|
8
|
-
|
9
|
-
sm.add("a")
|
10
|
-
sm.add("b", 'x')
|
11
|
-
sm.add("c", nil, 'y')
|
12
|
-
sm.add("d", 'x', 'y')
|
13
|
-
|
14
|
-
messages = sm.get
|
15
|
-
messages.size.should == 2
|
16
|
-
messages.map { |m| [m.to_s, m.tone] }.should == [['a', nil], ['b', 'x']]
|
17
|
-
|
18
|
-
messages = sm.get('z')
|
19
|
-
messages.size.should == 0
|
20
|
-
|
21
|
-
messages = sm.get('y')
|
22
|
-
messages.size.should == 2
|
23
|
-
messages.map { |m| [m.to_s, m.tone] }.should == [['c', nil], ['d', 'x']]
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
describe Scintillation::Message do
|
28
|
-
it "should create" do
|
29
|
-
m = Scintillation::Message.new("message", 'positive')
|
30
|
-
[m.to_s, m.tone].should == ['message', 'positive']
|
31
|
-
end
|
32
|
-
end
|