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 CHANGED
@@ -1 +1 @@
1
- 1.0.11
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
- ActionController::Base.send(:include, Scintillation) if defined?(Rails)
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
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{scintillation}
8
- s.version = "1.0.11"
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-04-27}
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/scintillation_spec.rb",
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/scintillation_spec.rb",
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
- - 0
8
- - 11
9
- version: 1.0.11
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-04-27 00:00:00 -04:00
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/scintillation_spec.rb
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/scintillation_spec.rb
88
+ - spec/scintillation/controller_spec.rb
89
+ - spec/scintillation/message_queue_spec.rb
84
90
  - spec/spec_helper.rb
@@ -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