jelly 0.5.4 → 0.5.5

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.markdown CHANGED
@@ -1,61 +1,107 @@
1
1
  Jelly
2
2
  =====
3
3
 
4
- INSTALLATION
4
+ What is Jelly?
5
+ --------------
6
+ Jelly is an unobtrusive Javascript framework for [jQuery](http://jquery.com) and [Rails](http://rubyonrails.org).
7
+ It provides a set of conventions and tools that help you organize your AJAX and client-side code,
8
+ while keeping Javascript out of your views and markup. Jelly is the glue between your Rails controllers
9
+ and jQuery events.
10
+
11
+ Jelly encourages and enables unit testing your Javascript code. Using a Javascript testing framework such as [Jasmine](http://github.com/pivotal/jasmine)
12
+ or [Screw Unit](http://github.com/nathansobo/screw-unit), Jelly allows you to test AJAX and client-side
13
+ events independently from your Rails app.
14
+
15
+ What Jelly is NOT
16
+ -----------------
17
+ **Jelly is NOT a Javascript generator.** With Jelly, you're writing pure Javascript to define your AJAX browser events. Jelly simply
18
+ provides a set of Javascript functions to make interacting with Rails easier. It's nothing like RJS.
19
+
20
+ **Jelly is NOT a Javascript framework.** Jelly is designed to be used with jQuery and jQuery's event-based
21
+ AJAX framework. Jelly also supports the popular [jQuery ajaxForm](http://malsup.com/jquery/form/) plugin.
22
+
23
+ Requirements
5
24
  ------------
25
+ * Rails 2.3.x
26
+ * jQuery 1.3.x
6
27
 
7
- If you haven't already, add GitHub to your gem sources:
28
+ Installation
29
+ ------------
8
30
 
9
- gem sources -a http://gems.github.com
31
+ Jelly is now available as a gem on on [RubyForge](http://rubyforge.org/projects/pivotalrb/):
10
32
 
11
- Then run:
33
+ sudo gem install jelly
12
34
 
13
- sudo gem install pivotal-jelly
35
+ Then, install the required Javascript files to your <code>public/javascripts</code> directory by running the Jelly generator:
14
36
 
37
+ script/generate jelly
15
38
 
16
- GETTING STARTED
17
- ---------------
39
+ Getting Started
40
+ --------------------------------
18
41
 
19
- In your `environment.rb` in the `Rails::Initializer.run` block, be sure to require jelly:
42
+ Be sure to require <code>jelly</code> when your application loads. This can be done in your `environment.rb` in the `Rails::Initializer.run` block:
20
43
 
21
44
  config.gem "jelly"
22
45
 
23
- Then install the required JavaScript files by running this command in your Rails project:
24
-
25
- script/generate jelly
26
-
27
- Then, in your layout, add the following:
46
+ Then, in your layouts, add the following to the `<head>` section:
28
47
 
29
48
  <%= javascript_include_tag :jelly, *application_jelly_files %>
30
49
  <%= spread_jelly %>
31
50
 
32
- This will include the required JavaScripts for jelly and activate the current page. The `:jelly` javascript expansion
33
- includes jQuery. If you already have jQuery included in the page, use the `:only_jelly` expansion instead.
51
+ The `javascript_include_tag` line will include the required Javascript libraries for jelly. The `:jelly` javascript
52
+ expansion includes the latest version of jQuery. If you already have jQuery included in the page, use the `:only_jelly`
53
+ expansion instead
34
54
 
35
- EXAMPLE USAGE
55
+ The `spread_jelly` line activates the events that you have defined on the current page.
56
+
57
+ Usage
36
58
  -------------
37
59
 
38
- Assuming you have controller named `fun` with an action called `index` and that you have a layout called `fun.html.erb`
39
- that is already setup as described above. In your fun index view (`index.html.erb`), put:
60
+ Jelly maps page-specific Javascript functions to Rails Actions and Controllers. For example: FunController#index will
61
+ activate the `index` function in the `Fun` Jelly object. Jelly uses jQuery's `$(document).ready()` to execute the
62
+ page-specifc function when the page has loaded. Let's look at some code:
63
+
64
+ In `public/javascripts/pages/fun.js`, I write a simple Jelly file:
40
65
 
41
- <h1>Your page's 'index' function did not run. Jelly is not configured correctly.</h1>
42
- <span class="all">Your page's 'all' function did not run. Jelly is not configured correctly.</span>
66
+ Jelly.add("Fun", {
67
+
68
+ index: function() {
69
+ $('a.clickme').click(function() {
70
+ alert('Hello world!');
71
+ });
72
+ }
73
+
74
+ });
43
75
 
44
- Then, in `public/javascripts/pages/fun.js`, put:
76
+ Jelly will automatically execute the `index` function when the Rails app runs the `FunController#index` action. Lets
77
+ continue the example by adding more Javascript functions that map to the `new` and `show` Rails actions. We can also
78
+ specify an `all` function, which will be executed on all actions in the `FunController`.
45
79
 
46
80
  Jelly.add("Fun", {
47
- all: function() {
48
- $('span.all').text("I am displayed on every action in this controller.");
49
- },
81
+
50
82
  index: function() {
51
- $('h1').text("Welcome to the index page.");
83
+ $('a.clickme').click(function() {
84
+ alert('Hello world!');
85
+ });
86
+ },
87
+
88
+ 'new': function() {
89
+ $('#mydiv').html('<span>Hello World</span>');
90
+ },
91
+
92
+ show : function() {},
93
+
94
+ all: function() {
95
+ $('#hidden_stuff').show();
52
96
  }
97
+
53
98
  });
54
99
 
55
- Now goto `/fun/index` and see Jelly in action!
100
+ Notice the slightly different syntax for `new`. This is because `new` is a reserved word in Javascript.
101
+ Create a separate file in `public/javascripts/pages` for each of your controllers as you use Jelly throughout your application.
56
102
 
57
- AJAX CALLBACKS WITH JELLY
58
- -------------------------
103
+ AJAX With Jelly
104
+ ---------------
59
105
 
60
106
  You can trigger callbacks on the page object from Rails with the `jelly_callback` method.
61
107
  Adding to the `index.html.erb` file from above:
@@ -108,5 +154,8 @@ either one parameter, or an array of parameters.
108
154
  DEVELOPMENT
109
155
  -----------
110
156
 
157
+ Track Jelly's development roadmap on [Jelly's Pivotal Tracker project](http://www.pivotaltracker.com/projects/30454)
158
+
111
159
  To run ruby tests, run `rake spec`.
112
- To run JavaScript tests, open `jelly/spec/jasmine_runner.html` in a web browser.
160
+
161
+ To run Javascript tests, open `jelly/spec/jasmine_runner.html` in a web browser.
data/VERSION.yml CHANGED
@@ -1,4 +1,4 @@
1
1
  ---
2
- :patch: 4
3
2
  :major: 0
4
3
  :minor: 5
4
+ :patch: 5
@@ -1,4 +1,6 @@
1
- (defineAjaxWithJellyFunctions = function($) {
1
+ if(!window.Jelly) Jelly = new Object();
2
+
3
+ (Jelly.defineAjaxWithJellyFunctions = function($) {
2
4
  $.ajaxWithJelly = function(params) {
3
5
  $.ajax($.ajaxWithJelly.params(params));
4
6
  };
@@ -26,7 +28,15 @@
26
28
 
27
29
  $.ajaxWithJelly.onSuccess = function(json) {
28
30
  var context = json.on ? eval(json.on) : page;
29
- context[json.method].apply(context, json.arguments);
31
+ if(context[json.method]) {
32
+ context[json.method].apply(context, json.arguments);
33
+ }
34
+ $.protify(page.components).each(function(componentAndArgs) {
35
+ var component = componentAndArgs[0];
36
+ if(component[json.method]) {
37
+ component[json.method].apply(component, json.arguments);
38
+ }
39
+ });
30
40
  return true;
31
41
  };
32
42
  })(jQuery);
@@ -11,7 +11,7 @@
11
11
  *
12
12
  */
13
13
 
14
- var Jelly = new Object();
14
+ if(!window.Jelly) Jelly = new Object();
15
15
  Jelly.all = {};
16
16
 
17
17
  Jelly.add = function(name) {
@@ -26,31 +26,34 @@ var page;
26
26
  Jelly.activatePage = function(controllerName, actionName) {
27
27
  page = Jelly.all[controllerName] || new Jelly.Page(controllerName);
28
28
  $(document).ready(function(){
29
- Jelly._activatePage(actionName);
29
+ Jelly._activatePage(actionName);
30
30
  });
31
31
  };
32
32
 
33
33
  Jelly._activatePage = function(actionName){
34
34
  if(page.all) page.all();
35
35
  if(page[actionName]) page[actionName].call(page);
36
- Jelly.Page.all();
36
+ Jelly.initComponents();
37
37
  page.loaded = true;
38
38
  };
39
39
 
40
- Jelly.Page = function(name) {
41
- this.name = name;
42
- Jelly.all[name] = this;
43
- };
44
-
45
- Jelly.Page.all = function() {
46
- $.protify(Jelly.Page.components).each(function(componentAndArgs) {
40
+ Jelly.initComponents = function() {
41
+ $.protify(page.components).each(function(componentAndArgs) {
47
42
  var component = componentAndArgs[0];
48
43
  var args = componentAndArgs[1] || [];
49
44
  if(component.init) component.init.apply(component, args);
50
45
  });
51
46
  };
52
- Jelly.Page.components = [];
47
+
48
+ Jelly.Page = function(name) {
49
+ this.name = name;
50
+ this.components = [];
51
+ Jelly.all[name] = this;
52
+ };
53
+
53
54
  Jelly.Page.prototype.loaded = false;
55
+ Jelly.Page.prototype.all = function() {
56
+ };
54
57
  Jelly.Page.prototype.documentHref = function() {
55
58
  return document.location.href;
56
59
  };
@@ -60,12 +63,12 @@ Jelly.Page.prototype.on_redirect = function(location){
60
63
 
61
64
  Jelly.Page.prototype.attach = function(component, args) {
62
65
  var methodNames = [];
63
- // TODO: Figure out a better way to do this.
64
66
  for(var methodName in component.pageMixin) {
65
67
  methodNames.push(methodName);
66
68
  }
67
69
  var self = this;
68
70
  $.protify(methodNames).each(function(methodName) {
71
+ // TODO: is anybody using these before_/after_ hooks? if not, delete them and use components as observers
69
72
  self[methodName] = function() {
70
73
  if(this['before_' + methodName]) {
71
74
  this['before_' + methodName].apply(this, arguments);
@@ -77,5 +80,5 @@ Jelly.Page.prototype.attach = function(component, args) {
77
80
  return returnValue;
78
81
  };
79
82
  });
80
- Jelly.Page.components.push([component, args]);
83
+ page.components.push([component, args]);
81
84
  };
data/jelly.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{jelly}
8
- s.version = "0.5.4"
8
+ s.version = "0.5.5"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Pivotal Labs, Inc"]
12
- s.date = %q{2009-09-28}
12
+ s.date = %q{2009-10-01}
13
13
  s.description = %q{Jelly provides a set of tools and conventions for creating rich ajax/javascript web applications with jQuery and Ruby on Rails.}
14
14
  s.email = %q{opensource@pivotallabs.com}
15
15
  s.extra_rdoc_files = [
@@ -42,24 +42,24 @@ Gem::Specification.new do |s|
42
42
  s.rubygems_version = %q{1.3.5}
43
43
  s.summary = %q{a sweet unobtrusive javascript framework for jQuery and Rails}
44
44
  s.test_files = [
45
- "spec/controllers/jelly_controller_spec.rb",
46
- "spec/helpers/jelly_helper_spec.rb",
47
- "spec/rails_root/app/controllers/application_controller.rb",
45
+ "spec/helpers/jelly_helper_spec.rb",
46
+ "spec/controllers/jelly_controller_spec.rb",
47
+ "spec/spec_helper.rb",
48
+ "spec/rails_root/test/performance/browsing_test.rb",
49
+ "spec/rails_root/test/test_helper.rb",
48
50
  "spec/rails_root/app/helpers/application_helper.rb",
51
+ "spec/rails_root/app/controllers/application_controller.rb",
49
52
  "spec/rails_root/config/boot.rb",
50
53
  "spec/rails_root/config/environment.rb",
51
- "spec/rails_root/config/environments/development.rb",
52
- "spec/rails_root/config/environments/production.rb",
53
- "spec/rails_root/config/environments/test.rb",
54
- "spec/rails_root/config/initializers/backtrace_silencers.rb",
54
+ "spec/rails_root/config/initializers/session_store.rb",
55
55
  "spec/rails_root/config/initializers/inflections.rb",
56
- "spec/rails_root/config/initializers/mime_types.rb",
56
+ "spec/rails_root/config/initializers/backtrace_silencers.rb",
57
57
  "spec/rails_root/config/initializers/new_rails_defaults.rb",
58
- "spec/rails_root/config/initializers/session_store.rb",
58
+ "spec/rails_root/config/initializers/mime_types.rb",
59
59
  "spec/rails_root/config/routes.rb",
60
- "spec/rails_root/test/performance/browsing_test.rb",
61
- "spec/rails_root/test/test_helper.rb",
62
- "spec/spec_helper.rb"
60
+ "spec/rails_root/config/environments/production.rb",
61
+ "spec/rails_root/config/environments/test.rb",
62
+ "spec/rails_root/config/environments/development.rb"
63
63
  ]
64
64
 
65
65
  if s.respond_to? :specification_version then
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jelly
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.4
4
+ version: 0.5.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pivotal Labs, Inc
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-09-28 00:00:00 -07:00
12
+ date: 2009-10-01 00:00:00 -07:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -79,21 +79,21 @@ signing_key:
79
79
  specification_version: 3
80
80
  summary: a sweet unobtrusive javascript framework for jQuery and Rails
81
81
  test_files:
82
- - spec/controllers/jelly_controller_spec.rb
83
82
  - spec/helpers/jelly_helper_spec.rb
84
- - spec/rails_root/app/controllers/application_controller.rb
83
+ - spec/controllers/jelly_controller_spec.rb
84
+ - spec/spec_helper.rb
85
+ - spec/rails_root/test/performance/browsing_test.rb
86
+ - spec/rails_root/test/test_helper.rb
85
87
  - spec/rails_root/app/helpers/application_helper.rb
88
+ - spec/rails_root/app/controllers/application_controller.rb
86
89
  - spec/rails_root/config/boot.rb
87
90
  - spec/rails_root/config/environment.rb
88
- - spec/rails_root/config/environments/development.rb
89
- - spec/rails_root/config/environments/production.rb
90
- - spec/rails_root/config/environments/test.rb
91
- - spec/rails_root/config/initializers/backtrace_silencers.rb
91
+ - spec/rails_root/config/initializers/session_store.rb
92
92
  - spec/rails_root/config/initializers/inflections.rb
93
- - spec/rails_root/config/initializers/mime_types.rb
93
+ - spec/rails_root/config/initializers/backtrace_silencers.rb
94
94
  - spec/rails_root/config/initializers/new_rails_defaults.rb
95
- - spec/rails_root/config/initializers/session_store.rb
95
+ - spec/rails_root/config/initializers/mime_types.rb
96
96
  - spec/rails_root/config/routes.rb
97
- - spec/rails_root/test/performance/browsing_test.rb
98
- - spec/rails_root/test/test_helper.rb
99
- - spec/spec_helper.rb
97
+ - spec/rails_root/config/environments/production.rb
98
+ - spec/rails_root/config/environments/test.rb
99
+ - spec/rails_root/config/environments/development.rb