poke_js 0.1.3 → 0.1.4

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/README.md CHANGED
@@ -1,10 +1,42 @@
1
1
  # PokeJs
2
+ Auto-magical scaffolding for the [Garber-Irish Implementation](http://viget.com/inspire/extending-paul-irishs-comprehensive-dom-ready-execution) way of organizing your javascript.
2
3
 
3
- Moves all javascript into assets js files using the [Garber-Irish Implementation](http://viget.com/inspire/extending-paul-irishs-comprehensive-dom-ready-execution).
4
+ ## Purpose
5
+ Javascript is hard to organize and debugging ajax is a mess. This is one method to organizing your javascript neatly by mirroring the controllers and having all the JS outside of your HTML views.
4
6
 
5
- ## Installation
7
+ ## How it works
8
+ ### Setup your namespace
9
+ ```javascript
10
+ APP = {
11
+ all: {
12
+ html: {
13
+ init: function() {
14
+ }
15
+ }
16
+ },
17
+ demos: {
18
+ html: {
19
+ init: function() {
20
+ },
21
+ demo_action: function() {
22
+ }
23
+ }
24
+ }
25
+ }
26
+ ```
27
+ ### What happens
28
+ After, requests to `demos#demo_action` with format `html` will call the following functions (if they exist):
29
+ * `APP.all.html.init`
30
+ * `APP.demos.html.init`
31
+ * `APP.demos.html.demo_action` (with parameters if given)
32
+
33
+ `js` format is also supported, i.e.:
34
+ * `APP.all.js.init`
35
+ * `APP.demos.js.init`
36
+ * `APP.demos.js.demo_action` (with parameters if given)
6
37
 
7
- Add this line to your application's Gemfile:
38
+ ## Installation
39
+ Add this line to your application's `Gemfile`:
8
40
 
9
41
  gem 'poke_js'
10
42
 
@@ -12,10 +44,79 @@ And then execute:
12
44
 
13
45
  $ bundle
14
46
 
15
- Or install it yourself as:
47
+ Add this to your `app/assets/javascripts/application.js`
48
+
49
+ //= require poke_js
50
+
51
+ Make sure your `app/views/layouts/application.html.erb` (and all your other layouts) looks like this:
52
+ ```erb
53
+ <html>
54
+ <head>… <%= poke %> …</head>
55
+ <body data-controller="<%= poke_js_template.first %>" data-action="<%= poke_js_template.last %>">
56
+
57
+ </body>
58
+ </html>
59
+ ```
60
+
61
+ ## Basic Use
62
+ I like to have a JS file for every controller in `app/assets/javascripts/controllers`. Like so:
63
+
64
+ `app/assets/javascripts/controllers/demos.js`:
65
+ ```javascript
66
+ (function() {
67
+ var demos = APP.define('demos', {
68
+ html: {
69
+ edit: function(params) {
70
+ alert(params.alert_message);
71
+ }
72
+ },
73
+
74
+ js: {
75
+ new: function(params) {
76
+ console.log(params.log_message);
77
+ }
78
+ }
79
+ });
80
+ })();
81
+ ```
82
+
83
+ `APP.define()` extends or creates the namespace `APP.demos`
84
+ and returns it. This allows me to access `APP.demos` through
85
+ the `demos` variable.
86
+
87
+ You can also use the traditional hash
88
+ namespacing shown in the [Setup your namespace](https://github.com/s12chung/poke_js#setup-your-namespace) section.
89
+
90
+ ### HTML
91
+ So if a `html` request is sent to `demos#edit`, `APP.demos.html.edit` is called with the HTML view rendering.
92
+
93
+ ### Javascript
94
+ For a `js` request sent to `demos#new`, `APP.demos.js.new` is called and nothing else happens.
95
+
96
+ ### Passing parameters
97
+ __Optional__ Parameters are passed from a JSON DSL (such as [jbuilder](https://github.com/rails/jbuilder/)) and is passed as the `params` object to the function. You can pass any JSON object.
16
98
 
17
- $ gem install poke_js
99
+ #### HTML
100
+ `app/views/demos/edit_params.js.jbuilder`:
101
+ ```ruby
102
+ json.alert_message "ploop"
103
+ ```
104
+ so
105
+ ```javascript
106
+ APP.demos.html.edit({ alert_message: "ploop" });
107
+ ```
108
+ is called automatically.
18
109
 
19
- ## Usage
110
+ #### Javascript
111
+ `app/views/demos/new.js.jbuilder`:
112
+ ```ruby
113
+ json.log_message "loggggggggggggg"
114
+ ```
115
+ so
116
+ ```javascript
117
+ APP.demos.js.new({ log_message: "loggggggggggggg" });
118
+ ```
119
+ is called automatically.
20
120
 
21
- To be written
121
+ ## Advanced Use
122
+ To be written...
@@ -18,6 +18,20 @@ POKE = {
18
18
  return $.extend(found_namespace, definition);
19
19
  },
20
20
 
21
+ get_action_namespace: function(controller, format) {
22
+ var levels = controller.split('/');
23
+ levels.push(format);
24
+
25
+ var current_namespace = APP;
26
+
27
+ for (var i=0;i<levels.length;i++) {
28
+ var level = levels[i];
29
+ if (POKE.blank(current_namespace[level]))
30
+ return false;
31
+ current_namespace = current_namespace[level];
32
+ }
33
+ return current_namespace;
34
+ },
21
35
 
22
36
  exec_all: function(controller, format, action) {
23
37
  POKE.exec("all", format);
@@ -25,13 +39,12 @@ POKE = {
25
39
  POKE.exec(controller, format, action);
26
40
  },
27
41
  exec: function(controller, format, action) {
28
- var ns = APP,
29
- action = (action === undefined) ? "init" : action;
42
+ var action_namespace = POKE.get_action_namespace(controller, format)
30
43
 
31
- if (controller !== "" && ns[controller] &&
32
- format !== "" && ns[controller][format]) {
33
- var funct = ns[controller][format][action],
34
- params = ns[controller][format][action + "_params"];
44
+ if ($.type(action_namespace) === "object") {
45
+ action = (action === undefined) ? "init" : action;
46
+ var funct = action_namespace[action],
47
+ params = action_namespace[action + "_params"];
35
48
 
36
49
  if ($.isFunction(funct))
37
50
  funct(params);
@@ -43,7 +56,7 @@ POKE = {
43
56
  }
44
57
  };
45
58
 
46
- if (POKE.blank(window["APP"]))
59
+ if (POKE.blank(window["APP"])) {
47
60
  APP = {
48
61
  namespace_string: function(namespace_string) {
49
62
  return "APP." + namespace_string;
@@ -55,4 +68,6 @@ if (POKE.blank(window["APP"]))
55
68
  return POKE.define(APP.namespace_string(namespace_string), definition);
56
69
  }
57
70
  };
58
- $(POKE.init);
71
+ }
72
+ $(POKE.init);
73
+ $(document).on('page:change', POKE.init);
@@ -1,7 +1,5 @@
1
1
  (function() {
2
- var format = 'js',
3
- controller = '<%= poke_js_template[0] %>',
4
- action = '<%= poke_js_template[1] %>';
5
- APP[controller][format][action + '_params'] = <%= yield %>;
6
- POKE.exec_all(controller, format, action);
2
+ <% controller, action = poke_js_template %>
3
+ APP.<%= controller.gsub("/", ".") %>.js.<%= action %>_params = <%= yield %>;
4
+ POKE.exec_all('<%= poke_js_template[0] %>', 'js', '<%= poke_js_template[1] %>');
7
5
  })();
@@ -1,3 +1,3 @@
1
1
  module PokeJs
2
- VERSION = "0.1.3"
2
+ VERSION = "0.1.4"
3
3
  end
@@ -28,15 +28,15 @@ module PokeJs
28
28
  if lookup_context.template_exists? "#{controller}/#{action}_params"
29
29
  javascript_tag do
30
30
  raw %Q/
31
- APP.#{controller}.html.#{action}_params = #{ render :template => "#{controller}/#{action}_params" };
32
- /
31
+ APP.#{controller.gsub("/", ".")}.html.#{action}_params = #{ render :template => "#{controller}/#{action}_params" };
32
+ /
33
33
  end
34
34
  end
35
35
  end
36
36
  elsif format == :js
37
37
  content_for :head do
38
38
  javascript_tag do
39
- render :template => "#{controller}/#{action}", :formats => [:js], :layout => "layouts/application"
39
+ "$(function(){#{render :template => "#{controller}/#{action}", :formats => [:js], :layout => "layouts/application"}});".html_safe
40
40
  end
41
41
  end
42
42
  end
@@ -51,9 +51,18 @@ module PokeJs
51
51
 
52
52
  private
53
53
  def extract_template(template)
54
- extracted_template = [controller_name, action_name]
54
+ extracted_template = [controller_path, action_name]
55
55
  if template
56
- array = template.class == Array ? template : template.to_s.split('/')
56
+ array = if template.class == Array
57
+ template
58
+ else
59
+ split = template.to_s.split('/')
60
+ template_controller = split[0..-2]
61
+ unless template_controller.empty?
62
+ template_controller = [template_controller.join('/')]
63
+ end
64
+ template_controller + [split.last]
65
+ end
57
66
  if array.size == 1
58
67
  extracted_template[1] = array.first
59
68
  else
@@ -8,8 +8,8 @@ Gem::Specification.new do |gem|
8
8
  gem.version = PokeJs::VERSION
9
9
  gem.authors = ["s12chung"]
10
10
  gem.email = ["steve@placemarklist.com"]
11
- gem.description = %q{ Moves all javascript into assets js files using the Garber-Irish Implementation }
12
- gem.summary = %q{ Moves all javascript into assets js files using the Garber-Irish Implementation }
11
+ gem.description = %q{ Auto-magical scaffolding for the Garber-Irish Implementation way of organizing your javascript. }
12
+ gem.summary = %q{ Auto-magical scaffolding for the Garber-Irish Implementation way of organizing your javascript. }
13
13
  gem.homepage = ""
14
14
 
15
15
  gem.files = `git ls-files`.split($/)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: poke_js
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-12-12 00:00:00.000000000 Z
12
+ date: 2013-01-01 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
@@ -43,8 +43,8 @@ dependencies:
43
43
  - - ! '>='
44
44
  - !ruby/object:Gem::Version
45
45
  version: '0'
46
- description: ! ' Moves all javascript into assets js files using the Garber-Irish
47
- Implementation '
46
+ description: ! ' Auto-magical scaffolding for the Garber-Irish Implementation way
47
+ of organizing your javascript. '
48
48
  email:
49
49
  - steve@placemarklist.com
50
50
  executables: []
@@ -85,6 +85,7 @@ rubyforge_project:
85
85
  rubygems_version: 1.8.24
86
86
  signing_key:
87
87
  specification_version: 3
88
- summary: Moves all javascript into assets js files using the Garber-Irish Implementation
88
+ summary: Auto-magical scaffolding for the Garber-Irish Implementation way of organizing
89
+ your javascript.
89
90
  test_files: []
90
91
  has_rdoc: