js_info 0.1.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.
data/.gitignore ADDED
@@ -0,0 +1,17 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in js_info.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2013 Chuyi Huang
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,96 @@
1
+ # JsInfo
2
+
3
+ JsInfo is a simple gem that trys to integrate javascript alert, confirm and prompt functions into Rails controller level. You can alert the users with a message without showing it in the view like the Flash of ActionDispatch does by using javascript functions.
4
+
5
+ The principles of JsInfo are:
6
+
7
+ 1. Easy to use
8
+ 2. Call from the controller
9
+ 3. No extra codes in View layer
10
+
11
+ ## Installation
12
+
13
+ Add this line to your application's Gemfile:
14
+
15
+ gem 'js_info'
16
+
17
+ And then execute:
18
+
19
+ $ bundle
20
+
21
+ Or install it yourself as:
22
+
23
+ $ gem install js_info
24
+
25
+ ## Usage
26
+
27
+ You can call JsInfo functions in the controllers:
28
+
29
+ js_alert("Your subscription is ok!")
30
+ js_confirm("Are you sure you want to visit google?", "http://www.google.com")
31
+ js_prompt("Please enter your name", "http://example.com")
32
+
33
+
34
+ ### js_alert
35
+
36
+ And here is a typical example in the users controller:
37
+
38
+ def create
39
+ @user = User.find(params[:id])
40
+ if @user.save
41
+ js_alert("Your profile created successfully!")
42
+ else
43
+ render :new
44
+ end
45
+ end
46
+
47
+ You can specify the target url as the second parameter:
48
+
49
+ js_alert("We are moving to github!", "https://github.com")
50
+
51
+
52
+ or more conventional way:
53
+
54
+ js_alert("Welcome Back!", root_path)
55
+
56
+
57
+ Please note that the default of the target url is *request.referer*
58
+
59
+ ### js_confirm
60
+
61
+ Sometimes a yes-no question is required:
62
+
63
+ js_confirm("Are you sure you want to sign up?", new_subscription_path)
64
+
65
+ As for js_confirm, the second parameter is necessary. If you want to redirect to another path when the user click **no** or **cancel**, it is possible to use the third parameter:
66
+
67
+ js_confirm("Are you sure you want sign up?", new_subscription_path, cancel_subscription_path)
68
+
69
+ Also note that the default value for third parameter is *request.referer*, so when the user click **cancel** will return to the previous page.
70
+
71
+ ### js_prompt
72
+
73
+ js_prompt is a method that will carry user's input to developer's target url with specified parameter name, here is an example:
74
+
75
+ js_prompt("what is your name?", new_user_path)
76
+
77
+
78
+ The typical javascript prompt will pop up with a dialog as you expected. As you can key in some values in the input box. When the user press the **Enter**, it will redirect to the new_user_path with a parameter named *params_name* with the value of user's input, say, *Chuyi* is the value of the input. it might look like **"http://example.com?params_name=Chuyi"** in the location bar.
79
+
80
+ Of course we can define the default value of the input or change the parameter to fit our needs:
81
+
82
+ js_prompt("Enter your email", new_user_path, "email", "yourname@example.com")
83
+
84
+ After pressing the confirm button the page will be redirected to **"http://example.com?email=yourname@example.com"**. As you can see, the third parameter is the parameter name and the forth one is the default value, simple as that.
85
+
86
+ ##What you need to know
87
+
88
+ I test it in the rails development environment, so please let me know if there is any improvement or bug I need to fix, thank you.
89
+
90
+ ## Contributing
91
+
92
+ 1. Fork it
93
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
94
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
95
+ 4. Push to the branch (`git push origin my-new-feature`)
96
+ 5. Create new Pull Request
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
data/js_info.gemspec ADDED
@@ -0,0 +1,23 @@
1
+ # -*- encoding: utf-8 -*-
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'js_info/version'
5
+
6
+ Gem::Specification.new do |gem|
7
+ gem.name = "js_info"
8
+ gem.version = JsInfo::VERSION
9
+ gem.authors = ["Chuyi Huang"]
10
+ gem.email = ["chuyihuang@gmail.com"]
11
+ gem.description = %q{Make javascript alert, confirm and prompt as controller level methods}
12
+ gem.summary = %q{Instead of using flash as the alert to the users, you can replace it with js_info which is simplier and code free in the view layers}
13
+ gem.homepage = "https://github.com/chuyihuang/js_info"
14
+
15
+ gem.files = `git ls-files`.split($/)
16
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
17
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
18
+ gem.require_paths = ["lib"]
19
+
20
+ #require rails
21
+ gem.add_dependency "actionpack", ">= 3.0.0"
22
+
23
+ end
data/lib/js_info.rb ADDED
@@ -0,0 +1,84 @@
1
+ require "js_info/version"
2
+
3
+ module JsInfo
4
+
5
+ protected
6
+
7
+ def js_alert(message, url = request.referer)
8
+ if message.blank?
9
+ raise "Unable to find any message for js_info!"
10
+ end
11
+
12
+ script = %Q{alert("#{message}");document.location.href="#{url}";}
13
+ html = html(script)
14
+ render text: html
15
+ return
16
+ end
17
+
18
+ def js_confirm(message, url, false_url = nil)
19
+ if message.blank? || url.blank?
20
+ raise "wrong parameter values for js_info!"
21
+ end
22
+
23
+ false_action = false_url.blank? ? "document.location.href=\"#{request.referer}\"" : "document.location.href=\"#{false_url}\""
24
+
25
+ script = %Q{
26
+ var r = confirm("#{message}");
27
+ if (r == true) {
28
+ document.location.href="#{url}";
29
+ }
30
+ else {
31
+ #{false_action}
32
+ }
33
+ }
34
+ html = html(script)
35
+ render text: html
36
+ return
37
+ end
38
+
39
+ def js_prompt(message, url, params_name = "prompt_name", params_value = nil)
40
+
41
+ if message.blank? || url.blank?
42
+ raise "wrong parameter values for js_info!"
43
+ end
44
+
45
+ script = %Q{
46
+ var url = "#{url}";
47
+ var params_name = "#{params_name}";
48
+ var params_value = prompt("#{message}", "#{params_value}");
49
+ var target_url = url + "?" + params_name + "=" + params_value;
50
+ //check is params_value is existed
51
+ if (params_value !== null) {
52
+ document.location.href=target_url;
53
+ }
54
+ else {
55
+ document.location.href="#{request.referer}";
56
+ }
57
+ }
58
+ html = html(script)
59
+ render text: html
60
+ return
61
+ end
62
+
63
+ private
64
+
65
+ def html(script)
66
+ %Q{
67
+ <!DOCTYPE html>
68
+ <head></head>
69
+ <body>
70
+ <script type="text/javascript">
71
+ <!--
72
+ #{script}
73
+ //-->
74
+ </script>
75
+ </body>
76
+ </html>
77
+ }
78
+ end
79
+
80
+ end
81
+
82
+ class ActionController::Base
83
+ include JsInfo
84
+ end
@@ -0,0 +1,3 @@
1
+ module JsInfo
2
+ VERSION = "0.1.1"
3
+ end
metadata ADDED
@@ -0,0 +1,70 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: js_info
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Chuyi Huang
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-04-06 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: actionpack
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: 3.0.0
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: 3.0.0
30
+ description: Make javascript alert, confirm and prompt as controller level methods
31
+ email:
32
+ - chuyihuang@gmail.com
33
+ executables: []
34
+ extensions: []
35
+ extra_rdoc_files: []
36
+ files:
37
+ - .gitignore
38
+ - Gemfile
39
+ - LICENSE.txt
40
+ - README.md
41
+ - Rakefile
42
+ - js_info.gemspec
43
+ - lib/js_info.rb
44
+ - lib/js_info/version.rb
45
+ homepage: https://github.com/chuyihuang/js_info
46
+ licenses: []
47
+ post_install_message:
48
+ rdoc_options: []
49
+ require_paths:
50
+ - lib
51
+ required_ruby_version: !ruby/object:Gem::Requirement
52
+ none: false
53
+ requirements:
54
+ - - ! '>='
55
+ - !ruby/object:Gem::Version
56
+ version: '0'
57
+ required_rubygems_version: !ruby/object:Gem::Requirement
58
+ none: false
59
+ requirements:
60
+ - - ! '>='
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ requirements: []
64
+ rubyforge_project:
65
+ rubygems_version: 1.8.23
66
+ signing_key:
67
+ specification_version: 3
68
+ summary: Instead of using flash as the alert to the users, you can replace it with
69
+ js_info which is simplier and code free in the view layers
70
+ test_files: []