growlyflash 0.5.0 → 0.6.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +2 -0
- data/Gemfile +9 -0
- data/README.md +17 -13
- data/Rakefile +16 -1
- data/app/assets/javascripts/growlyflash/alert.coffee +34 -13
- data/growlyflash.gemspec +12 -8
- data/lib/growlyflash.rb +0 -2
- data/lib/growlyflash/controller_additions.rb +20 -9
- data/test/integration/action_controller/growlyflash_test.rb +40 -0
- data/test/test_helper.rb +26 -0
- metadata +9 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ec72d3523240f5489bb3c5154b946f92aa3fb733
|
4
|
+
data.tar.gz: c3caedfa03cce596612d5cf032dfd814dd5c5bfe
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b5f5d3cc3783a4da9eecdd93c38a4fcc43a5ed3eaef1e01c4e12c49f2f737e7b53a19dabbc808dfb5f259ef60f47f6dc0553cd083796bd8b39c63c191c3f4a1d
|
7
|
+
data.tar.gz: 49b33df20b718fcc86533d117cd3e51e81b80f774d0eec85d68e1c0b4daa3280427b799a16458eae5d7eb10e67c85f4c5499b1eb6219108737ebd2654a5145e2
|
data/.gitignore
CHANGED
data/Gemfile
CHANGED
@@ -2,3 +2,12 @@ source 'https://rubygems.org'
|
|
2
2
|
|
3
3
|
# Specify your gem's dependencies in growlyflash.gemspec
|
4
4
|
gemspec
|
5
|
+
|
6
|
+
gem 'rails', '>= 3.2.0', '<= 5.0.0'
|
7
|
+
gem 'rake', require: false
|
8
|
+
|
9
|
+
group :test do
|
10
|
+
gem 'minitest'
|
11
|
+
gem 'minitest-reporters'
|
12
|
+
gem 'minitest-spec-rails'
|
13
|
+
end
|
data/README.md
CHANGED
@@ -18,18 +18,6 @@ Add this line to your application's Gemfile:
|
|
18
18
|
gem 'growlyflash', '~> 0.5.0'
|
19
19
|
```
|
20
20
|
|
21
|
-
To use text flash messages as growl notifications with XHR request, just add this `after_filter` to your controllers (usually `application_controller.rb`):
|
22
|
-
|
23
|
-
```ruby
|
24
|
-
after_filter :flash_to_headers, if: :is_xhr_request?
|
25
|
-
```
|
26
|
-
|
27
|
-
To make notifications also available with non-XHR requests, insert the following line into your layout template inside `<head>` tag before any other javascript:
|
28
|
-
|
29
|
-
```erb
|
30
|
-
<%= growlyflash_static_notices %>
|
31
|
-
```
|
32
|
-
|
33
21
|
Require one of the following Growlyflash javascripts depending on your Bootstrap version in `app/assets/javascripts/application.js`:
|
34
22
|
|
35
23
|
```js
|
@@ -40,12 +28,27 @@ Require one of the following Growlyflash javascripts depending on your Bootstrap
|
|
40
28
|
//= require growlyflash.bs2
|
41
29
|
```
|
42
30
|
|
43
|
-
|
31
|
+
Import Growlyflash style in `app/assets/stylesheets/application.css.scss` after importing Bootstrap styles:
|
44
32
|
|
45
33
|
```scss
|
46
34
|
@import "growlyflash";
|
47
35
|
```
|
48
36
|
|
37
|
+
To use text flash messages as growl notifications with XHR request, add `use_growlyflash` to your controllers (usually `application_controller.rb`). This is a shorthand for `append_after_filter :flash_to_header, if: :is_xhr_request?` and takes callback parameters like `only`, `except`, `if` or `unless`:
|
38
|
+
|
39
|
+
```ruby
|
40
|
+
use_growlyflash # except: %i[actions without growlyflash]
|
41
|
+
|
42
|
+
# Also there is another shorthand, to skip callbacks:
|
43
|
+
# skip_growlyflash only: %i[actions without growlyflash]
|
44
|
+
```
|
45
|
+
|
46
|
+
To make notifications also available with non-XHR requests, insert the following line into your layout template inside `<head>` tag before any other javascript:
|
47
|
+
|
48
|
+
```erb
|
49
|
+
<%= growlyflash_static_notices %>
|
50
|
+
```
|
51
|
+
|
49
52
|
## Customize
|
50
53
|
|
51
54
|
If you want to change default options, you can override them somewhere in your coffee/js:
|
@@ -57,6 +60,7 @@ Growlyflash.defaults = $.extend on, Growlyflash.defaults,
|
|
57
60
|
dismiss: yes # allow to show close button
|
58
61
|
spacing: 10 # spacing between alerts
|
59
62
|
target: 'body' # selector to target element where to place alerts
|
63
|
+
title: no # switch for adding a title
|
60
64
|
type: null # bootstrap alert class by default
|
61
65
|
class: ['alert', 'growlyflash', 'fade']
|
62
66
|
```
|
data/Rakefile
CHANGED
@@ -1 +1,16 @@
|
|
1
|
-
require
|
1
|
+
require 'bundler'
|
2
|
+
require 'rake'
|
3
|
+
|
4
|
+
Bundler.setup
|
5
|
+
Bundler::GemHelper.install_tasks
|
6
|
+
|
7
|
+
require "rake/testtask"
|
8
|
+
|
9
|
+
desc 'Run tests'
|
10
|
+
test_task = Rake::TestTask.new(:test) do |t|
|
11
|
+
t.libs << 'test'
|
12
|
+
t.pattern = 'test/**/*_test.rb'
|
13
|
+
t.verbose = true
|
14
|
+
end
|
15
|
+
|
16
|
+
task default: :test
|
@@ -3,12 +3,17 @@ window.Growlyflash ?= Growlyflash
|
|
3
3
|
|
4
4
|
Growlyflash.defaults =
|
5
5
|
align: 'right' # horizontal aligning (left, right or center)
|
6
|
-
delay: 4000 # auto-dismiss timeout (
|
6
|
+
delay: 4000 # auto-dismiss timeout (false to disable auto-dismiss)
|
7
7
|
dismiss: yes # allow to show close button
|
8
8
|
spacing: 10 # spacing between alerts
|
9
9
|
target: 'body' # selector to target element where to place alerts
|
10
|
+
title: no # switch for adding a title
|
10
11
|
type: null # bootstrap alert class by default
|
11
12
|
class: ['alert', 'growlyflash', 'fade']
|
13
|
+
|
14
|
+
# customizable callback to set notification position before it shows
|
15
|
+
before_show: (options) ->
|
16
|
+
@el.css @calc_css_position()
|
12
17
|
|
13
18
|
Growlyflash.KEY_MAPPING =
|
14
19
|
alert: 'warning'
|
@@ -25,11 +30,23 @@ class Growlyflash.FlashStruct
|
|
25
30
|
|
26
31
|
class Growlyflash.Alert
|
27
32
|
constructor: (@flash, options) ->
|
28
|
-
{@
|
33
|
+
{@title, @align, @dismiss, @msg, @spacing, @type, @class} = options
|
34
|
+
|
35
|
+
@el = ($ '<div>',
|
36
|
+
class: @_classes().join(' ')
|
37
|
+
html: "#{@_dismiss()}#{@_title()}#{@msg}"
|
38
|
+
).appendTo(options.target)
|
39
|
+
|
40
|
+
options.before_show.call(this, options)
|
41
|
+
@show()
|
29
42
|
|
30
|
-
|
31
|
-
|
32
|
-
|
43
|
+
return unless options.delay
|
44
|
+
setTimeout =>
|
45
|
+
@hide -> ($ @).remove()
|
46
|
+
, options.delay
|
47
|
+
|
48
|
+
show: -> @el.toggleClass 'in'
|
49
|
+
hide: (fn) -> @el.fadeOut(fn)
|
33
50
|
|
34
51
|
_classes: ->
|
35
52
|
@class.concat ("alert-#{type}" for type in [@type] when type?), ["growlyflash-#{@align}"]
|
@@ -38,19 +55,23 @@ class Growlyflash.Alert
|
|
38
55
|
return "" unless @dismiss?
|
39
56
|
"""<a class="close" data-dismiss="alert" href="#">×</a>"""
|
40
57
|
|
41
|
-
|
58
|
+
_title: ->
|
59
|
+
return "" unless @title?
|
60
|
+
"""<strong>#{@type.charAt(0).toUpperCase()}#{@type.substring(1)}!</strong>"""
|
61
|
+
|
62
|
+
calc_top_offset: ->
|
42
63
|
amount = parseInt(@el.css 'top')
|
43
64
|
(@el.siblings '.growlyflash').each (_, el) =>
|
44
65
|
amount = Math.max(amount, parseInt(($ el).css 'top') + ($ el).outerHeight() + @spacing)
|
45
66
|
amount
|
46
67
|
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
68
|
+
calc_css_position: ->
|
69
|
+
css = {}
|
70
|
+
css.top = "#{@calc_top_offset()}px"
|
71
|
+
css.marginLeft = "-#{@el.width() / 2}px" if @align is 'center'
|
72
|
+
css
|
52
73
|
|
53
74
|
$.growlyflash = (flash, options = {}) ->
|
54
|
-
settings = $.extend
|
75
|
+
settings = $.extend on, {}, Growlyflash.defaults, msg: flash.msg, type: flash.type, options
|
55
76
|
alert = new Growlyflash.Alert(flash, settings)
|
56
|
-
if flash instanceof Growlyflash.FlashStruct then flash else alert
|
77
|
+
if flash instanceof Growlyflash.FlashStruct then flash else alert
|
data/growlyflash.gemspec
CHANGED
@@ -1,20 +1,24 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
+
|
2
3
|
lib = File.expand_path('../lib', __FILE__)
|
3
4
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
5
|
|
5
6
|
Gem::Specification.new do |spec|
|
6
|
-
spec.name =
|
7
|
-
spec.version =
|
8
|
-
spec.authors = [
|
9
|
-
spec.email = [
|
10
|
-
spec.homepage =
|
7
|
+
spec.name = 'growlyflash'
|
8
|
+
spec.version = '0.6.1'
|
9
|
+
spec.authors = ['Tõnis Simo']
|
10
|
+
spec.email = ['anton.estum@gmail.com']
|
11
|
+
spec.homepage = 'https://github.com/estum/growlyflash'
|
11
12
|
spec.summary = %q{Tiny gem which provides growl-styled flash messages for Ruby on Rails with Bootstrap.}
|
12
13
|
spec.description = %q{Tiny gem which provides growl-styled flash messages for Ruby on Rails with Bootstrap. For XHR requests flash messages are transfering in 'X-Messages' headers, otherwise they are storing in js variables.}
|
13
|
-
spec.license =
|
14
|
+
spec.license = 'MIT'
|
14
15
|
|
15
16
|
spec.files = `git ls-files`.split($/)
|
16
17
|
spec.require_paths = %w[app lib]
|
18
|
+
spec.test_files = Dir['test/**/*']
|
19
|
+
|
20
|
+
spec.required_ruby_version = ">= 1.9.3"
|
17
21
|
|
18
|
-
spec.add_dependency
|
19
|
-
spec.add_dependency 'coffee-rails',
|
22
|
+
spec.add_dependency 'railties', '>= 3.2', '< 5.0'
|
23
|
+
spec.add_dependency 'coffee-rails', '>= 3.2.1'
|
20
24
|
end
|
data/lib/growlyflash.rb
CHANGED
@@ -5,29 +5,40 @@ module Growlyflash
|
|
5
5
|
extend ActiveSupport::Concern
|
6
6
|
|
7
7
|
included do
|
8
|
-
helper_method :growlyflash_static_notices
|
8
|
+
helper_method :growlyflash_static_notices, :growlyhash
|
9
9
|
end
|
10
10
|
|
11
|
-
|
11
|
+
module ClassMethods
|
12
|
+
private
|
13
|
+
def use_growlyflash(options = {})
|
14
|
+
append_after_filter :flash_to_headers, options.reverse_merge(if: :is_xhr_request?)
|
15
|
+
end
|
16
|
+
|
17
|
+
def skip_growlyflash(options = {})
|
18
|
+
skip_after_filter :flash_to_headers, options
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
12
23
|
def is_xhr_request?
|
13
24
|
request.xhr?
|
14
25
|
end
|
15
26
|
|
16
27
|
def flash_to_headers
|
17
|
-
|
18
|
-
response.headers['X-Message'] = URI.escape(_text_flashes.to_json)
|
28
|
+
response.headers['X-Message'] = URI.escape(growlyhash(true).to_json)
|
19
29
|
|
20
30
|
# discard flash to prevent it appear again after refreshing page
|
21
|
-
|
31
|
+
growlyhash.each_key {|k| flash.discard(k) }
|
22
32
|
end
|
23
33
|
|
24
|
-
def growlyflash_static_notices
|
34
|
+
def growlyflash_static_notices(js_var = 'window.flashes')
|
25
35
|
return nil unless flash.any?
|
26
|
-
view_context.javascript_tag "
|
36
|
+
view_context.javascript_tag "#{js_var} = #{growlyhash.to_json.html_safe};", defer: 'defer'
|
27
37
|
end
|
28
38
|
|
29
|
-
def
|
30
|
-
|
39
|
+
def growlyhash(force = false)
|
40
|
+
@growlyhash = nil if force
|
41
|
+
@growlyhash ||= flash.to_hash.select {|k, v| v.is_a? String }
|
31
42
|
end
|
32
43
|
end
|
33
44
|
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
module ActionController
|
4
|
+
module Growlyflash
|
5
|
+
class IntegrationTest < ActionController::TestCase
|
6
|
+
class MyController < ActionController::Base
|
7
|
+
use_growlyflash
|
8
|
+
skip_growlyflash only: [:xhr_skip_growlyflash]
|
9
|
+
|
10
|
+
def xhr_use_growlyflash
|
11
|
+
flash.notice = "Growlyflash!"
|
12
|
+
flash[:timedout] = true
|
13
|
+
render json: '{}'
|
14
|
+
end
|
15
|
+
|
16
|
+
def xhr_skip_growlyflash
|
17
|
+
flash.notice = "Growlyflash!"
|
18
|
+
render json: '{}'
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
tests MyController
|
23
|
+
|
24
|
+
def test_xhr_use_growlyflash
|
25
|
+
xhr :get, :xhr_use_growlyflash
|
26
|
+
|
27
|
+
assert_response 200
|
28
|
+
refute_nil @response.headers['X-Message']
|
29
|
+
assert_equal '{"notice":"Growlyflash!"}', URI.decode_www_form_component(@response.headers['X-Message'])
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_xhr_skip_growlyflash
|
33
|
+
xhr :get, :xhr_skip_growlyflash
|
34
|
+
|
35
|
+
assert_response 200
|
36
|
+
assert_nil @response.headers['X-Message']
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'bundler/setup'
|
2
|
+
require 'minitest/autorun'
|
3
|
+
require 'growlyflash'
|
4
|
+
require 'action_controller'
|
5
|
+
|
6
|
+
# Ensure backward compatibility with Minitest 4
|
7
|
+
Minitest::Test = MiniTest::Unit::TestCase unless defined?(Minitest::Test)
|
8
|
+
|
9
|
+
require "minitest/reporters"
|
10
|
+
Minitest::Reporters.use! Minitest::Reporters::DefaultReporter.new(:color => true)
|
11
|
+
|
12
|
+
module TestHelper
|
13
|
+
Routes = ActionDispatch::Routing::RouteSet.new
|
14
|
+
Routes.draw do
|
15
|
+
get ':controller(/:action(/:id))'
|
16
|
+
get ':controller(/:action)'
|
17
|
+
end
|
18
|
+
|
19
|
+
ActionController::Base.send :include, Routes.url_helpers
|
20
|
+
end
|
21
|
+
|
22
|
+
ActionController::TestCase.class_eval do
|
23
|
+
def setup
|
24
|
+
@routes = TestHelper::Routes
|
25
|
+
end
|
26
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: growlyflash
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tõnis Simo
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-01-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: railties
|
@@ -66,6 +66,8 @@ files:
|
|
66
66
|
- lib/growlyflash.rb
|
67
67
|
- lib/growlyflash/controller_additions.rb
|
68
68
|
- lib/growlyflash/engine.rb
|
69
|
+
- test/integration/action_controller/growlyflash_test.rb
|
70
|
+
- test/test_helper.rb
|
69
71
|
homepage: https://github.com/estum/growlyflash
|
70
72
|
licenses:
|
71
73
|
- MIT
|
@@ -79,7 +81,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
79
81
|
requirements:
|
80
82
|
- - ">="
|
81
83
|
- !ruby/object:Gem::Version
|
82
|
-
version:
|
84
|
+
version: 1.9.3
|
83
85
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
84
86
|
requirements:
|
85
87
|
- - ">="
|
@@ -87,9 +89,11 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
87
89
|
version: '0'
|
88
90
|
requirements: []
|
89
91
|
rubyforge_project:
|
90
|
-
rubygems_version: 2.
|
92
|
+
rubygems_version: 2.4.3
|
91
93
|
signing_key:
|
92
94
|
specification_version: 4
|
93
95
|
summary: Tiny gem which provides growl-styled flash messages for Ruby on Rails with
|
94
96
|
Bootstrap.
|
95
|
-
test_files:
|
97
|
+
test_files:
|
98
|
+
- test/integration/action_controller/growlyflash_test.rb
|
99
|
+
- test/test_helper.rb
|