codus 0.0.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/README.md ADDED
@@ -0,0 +1,138 @@
1
+ Codus
2
+ =====
3
+
4
+ Tools to improve your life as Rails developer.
5
+
6
+
7
+
8
+ Javascript Organizer
9
+ --------------------
10
+
11
+ You can write your javascript functions using [yojs namespaces declaration](https://github.com/codus/yojs). Namespaces that matches your application name, current controller and current action will automatic be fired.
12
+
13
+ ### Setup
14
+
15
+
16
+
17
+ - Put in your Gemfile:
18
+
19
+ ```ruby
20
+ gem 'codus'
21
+ ```
22
+
23
+ - Install the gem with *bundle install*
24
+
25
+ - Put in your layout:
26
+
27
+ `<%= load_yojs(:app_name => 'yourappname') %>`
28
+
29
+ - Put in your application.js
30
+
31
+ ```javascript
32
+ //= require jquery
33
+ //= require yojs
34
+ ```
35
+
36
+ - Declare your functions using yojs and enjoy your life
37
+
38
+
39
+
40
+ **Options**
41
+
42
+
43
+
44
+ ***app_name***
45
+
46
+ The *load_yojs* helper method will print a javascript code, using query and yojs, that calls namespaces matching the app_name option, current controller name and current action name.
47
+
48
+
49
+
50
+ For instance, if you're in /posts/new it will call:
51
+
52
+
53
+
54
+ 1. yourappname
55
+
56
+ 2. yourappname.posts
57
+
58
+ 3. yourappname.posts.new
59
+
60
+
61
+
62
+ ***onload_method_name***
63
+
64
+ You can set the name of the last namespace to be called on the unload event with the *onload_method_name* option. For instance:
65
+
66
+
67
+ ```erb
68
+ <%= load_yojs(:app_name => 'yourappname', :onload_method_name => "myonloadmethod") %>
69
+ ```
70
+
71
+ If you're in /posts/new it will call:
72
+
73
+ 1. yourappname.<myonloadmethod>
74
+
75
+ 2. yourappname.posts.<myonloadmethod>
76
+
77
+ 3. yourappname.posts.new.<myonloadmethod>
78
+
79
+
80
+ ***method_names_mapper***
81
+
82
+ You can also configure equivalent namespaces using :<method_names_mapper. For instance:>
83
+
84
+
85
+
86
+ ```erb
87
+ <%= load_yojs(:app_name => 'yourappname',
88
+
89
+ :method_names_mapper => {
90
+
91
+ :create => :new,
92
+
93
+ :update => :edit
94
+
95
+ }
96
+
97
+ )%>
98
+ ```
99
+
100
+ If you're in /posts/create it will call:
101
+
102
+ 1. yourappname
103
+
104
+ 2. yourappname.posts
105
+
106
+ 3. yourappname.posts.create
107
+
108
+ 4. yourappname.posts.new
109
+
110
+
111
+ File structure
112
+ --------------------
113
+
114
+ We recomend you to structure your js files according your namespace hierarchy. Example
115
+
116
+ ```
117
+ - assets
118
+ |- javascripts
119
+ |- application.js
120
+ |- components (jquery, plugins, etc)
121
+ |- myapp
122
+ | |- myapp.js (global javascripts in "myapp" namespace)
123
+ | |- controller1
124
+ | | |- controller1.js (javascripts shared between "myapp.controller1" namespace)
125
+ | | |- action1.js (javascripts for "myapp.controller1.action1" namespace)
126
+ | | |- action2.js (javascripts for "myapp.controller1.action2" namespace)
127
+ | | |- actionN.js (javascripts for "myapp.controller1.actionN" namespace)
128
+ | |
129
+ | |- controller2
130
+ | | |- controller2.js (javascripts shared between "myapp.controller2" namespace)
131
+ | | |- action1.js (javascripts for "myapp.controller2.action1" namespace)
132
+ | | |- action2.js (javascripts for "myapp.controller2.action2" namespace)
133
+ | | |- actionN.js (javascripts for "myapp.controller2.actionN" namespace)
134
+ | |
135
+ | |- controllerN
136
+ | | |- controllerN.js (javascripts shared between "myapp.controllerN" namespace)
137
+ | | |- ...
138
+ ```
data/lib/README.md ADDED
@@ -0,0 +1,122 @@
1
+ Codus
2
+ =====
3
+
4
+ Tools to improve your life as Rails developer.
5
+
6
+
7
+
8
+ Javascript Organizer
9
+ --------------------
10
+
11
+ You can organize your javascript functions using yojs namespaces declaration and
12
+ the ones that matches your application name, current controller and current
13
+ action will automatic be fired.
14
+
15
+
16
+
17
+ ### Setup
18
+
19
+
20
+
21
+ 1. Put in your Gemfile:
22
+
23
+ gem 'codus'
24
+
25
+ 2. Install the gem with *bundle install*
26
+
27
+ 3. Put in your layout:
28
+
29
+ `<%= load_yojs(:app_name => 'yourappname') %>`
30
+
31
+ 4. Put in your application.js
32
+
33
+ `//= require jquery`
34
+
35
+ `//= require yojs`
36
+
37
+ 5. Declare your functions using yojs and enjoy your life
38
+
39
+
40
+
41
+ **Options**
42
+
43
+
44
+
45
+ **app_name**
46
+
47
+ The *load_yojs* helper method will print a javascript code, using query and
48
+ yojs, that calls namespaces matching the app_name option, current controller name
49
+ and current action name.
50
+
51
+
52
+
53
+ For instance, if you're in /posts/new it will call:
54
+
55
+
56
+
57
+ 1. yourappname
58
+
59
+ 2. yourappname.posts
60
+
61
+ 3. yourappname.posts.new
62
+
63
+
64
+
65
+ **onload_method_name**
66
+
67
+ You can set the name of the last namespace to be called on the unload event with
68
+ the
69
+
70
+ <onload_method_name option. >For instance:
71
+
72
+
73
+
74
+ `<%= load_yojs(:app_name => 'yourappname', :onload_method_name =>
75
+ "myonloadmethod") %>`
76
+
77
+
78
+
79
+ If you're in /posts/new it will call:
80
+
81
+
82
+
83
+ 1. yourappname.<myonloadmethod>
84
+
85
+ 2. yourappname.posts.<myonloadmethod>
86
+
87
+ 3. yourappname.posts.new.<myonloadmethod>
88
+
89
+
90
+
91
+ **method_names_mapper**
92
+
93
+ You can also configure equivalent namespaces using :<method_names_mapper. For
94
+ instance:>
95
+
96
+
97
+
98
+ `<%= load_yojs(:app_name => 'yourappname', `
99
+
100
+ ` :method_names_mapper => {`
101
+
102
+ ` :create => :new,`
103
+
104
+ ` :update => :edit`
105
+
106
+ ` }`
107
+
108
+ `)%>`
109
+
110
+
111
+
112
+ If you're in /posts/create it will call:
113
+
114
+
115
+
116
+ 1. yourappname
117
+
118
+ 2. yourappname.posts
119
+
120
+ 3. yourappname.posts.create
121
+
122
+ 4. yourappname.posts.new
data/lib/codus.rb ADDED
@@ -0,0 +1,11 @@
1
+ require 'rails/engine'
2
+ require "codus/version"
3
+ require "codus/view_helpers"
4
+
5
+ module Codus
6
+ class Engine < ::Rails::Engine
7
+ initializer "Codus.view_helpers" do |app|
8
+ ActionView::Base.send :include, Codus::ViewHelpers
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,3 @@
1
+ module Codus
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,12 @@
1
+ require "codus/view_helpers/yojs_helper"
2
+
3
+ module Codus
4
+ module ViewHelpers
5
+ include Codus::ViewHelpers::YojsHelper
6
+
7
+ def javascript_ready(&block)
8
+ javascript_tag("$(function(){\n" + capture(&block) + "});").html_safe
9
+ end
10
+
11
+ end
12
+ end
@@ -0,0 +1,12 @@
1
+ require "codus/view_helpers/yojs_helper/yojs_call_generator"
2
+
3
+ module Codus
4
+ module ViewHelpers
5
+ module YojsHelper
6
+ def load_yojs(options = {})
7
+ call_generator = YojsCallGenerator.new(params[:controller], params[:action], options)
8
+ javascript_ready { call_generator.generate_yojs_calls() }.html_safe
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,70 @@
1
+ module Codus
2
+ module ViewHelpers
3
+ module YojsHelper
4
+ class YojsCallGenerator
5
+ def initialize(controller, action, options = {})
6
+ @options = merge_options_with_defaults(options)
7
+ @parent_namespace = "#{@options[:app_name]}.#{controller.parameterize('.')}"
8
+ @last_namespace = action.parameterize(".")
9
+ @fullnamespace = "#{@parent_namespace}.#{@last_namespace}"
10
+
11
+ end
12
+
13
+ def merge_options_with_defaults(options)
14
+ default_options = { :app_name => "",
15
+ :onload_method_name => "",
16
+ :method_names_mapper => {
17
+ :create => :new,
18
+ :update => :edit
19
+ }
20
+ }
21
+ mapping_options = options.delete(:method_names_mapper)
22
+ default_options[:method_names_mapper].merge!(mapping_options) unless mapping_options.nil?
23
+ default_options.merge(options)
24
+ end
25
+
26
+ def generate_yojs_calls
27
+ namespaces_to_call_onload = get_all_namespaces_from_full_namespace
28
+ onload_calls_definitions = append_onload_method_to_namespaces(namespaces_to_call_onload)
29
+ conditional_callings = generate_conditional_function_calling_for_namespaces(onload_calls_definitions)
30
+ conditional_callings.join("\n").html_safe
31
+ end
32
+
33
+ def get_all_namespaces_from_full_namespace
34
+ namespaces = []
35
+ @fullnamespace.split(".").each do |actual_namespace|
36
+ if namespaces.empty?
37
+ namespaces << actual_namespace
38
+ else
39
+ namespaces << ("#{namespaces.last}.#{actual_namespace}")
40
+ end
41
+ end
42
+ if @options[:method_names_mapper].has_key?(@fullnamespace.split(".").last.to_sym)
43
+ namespaces << ("#{@parent_namespace}.#{@options[:method_names_mapper][@last_namespace.to_sym]}")
44
+ end
45
+ namespaces
46
+ end
47
+
48
+ def append_onload_method_to_namespaces(namespaces = [])
49
+ return namespaces if @options[:onload_method_name].nil? || @options[:onload_method_name] == ""
50
+ namespaces.map do |namespace_to_call_onload|
51
+ "#{namespace_to_call_onload}.#{@options[:onload_method_name]}"
52
+ end
53
+ end
54
+
55
+ def generate_conditional_function_calling_for_namespaces(namespaces = [])
56
+ namespaces.map do |call_definition|
57
+ "
58
+ if (yojs.isDefined(\"#{call_definition}\")) {
59
+ yojs.call(\"#{call_definition}\");
60
+ }
61
+ "
62
+ end
63
+ end
64
+
65
+
66
+ end
67
+
68
+ end
69
+ end
70
+ end
metadata ADDED
@@ -0,0 +1,86 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: codus
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Vinícius Oyama
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-06-03 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: bundler
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: '1.3'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: '1.3'
30
+ - !ruby/object:Gem::Dependency
31
+ name: railties
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ~>
36
+ - !ruby/object:Gem::Version
37
+ version: '3.1'
38
+ type: :development
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: '3.1'
46
+ description: Organize your javascript across namespaces matching your controllers
47
+ and actions. Get automatic executing functions for current controller and action.
48
+ email: vinicius.oyama@codus.com.br
49
+ executables: []
50
+ extensions: []
51
+ extra_rdoc_files: []
52
+ files:
53
+ - lib/codus/version.rb
54
+ - lib/codus/view_helpers/yojs_helper/yojs_call_generator.rb
55
+ - lib/codus/view_helpers/yojs_helper.rb
56
+ - lib/codus/view_helpers.rb
57
+ - lib/codus.rb
58
+ - lib/README.md
59
+ - README.md
60
+ homepage: https://github.com/codus/codus
61
+ licenses:
62
+ - MIT
63
+ post_install_message:
64
+ rdoc_options: []
65
+ require_paths:
66
+ - lib
67
+ required_ruby_version: !ruby/object:Gem::Requirement
68
+ none: false
69
+ requirements:
70
+ - - ! '>='
71
+ - !ruby/object:Gem::Version
72
+ version: '0'
73
+ required_rubygems_version: !ruby/object:Gem::Requirement
74
+ none: false
75
+ requirements:
76
+ - - ! '>='
77
+ - !ruby/object:Gem::Version
78
+ version: '0'
79
+ requirements: []
80
+ rubyforge_project:
81
+ rubygems_version: 1.8.25
82
+ signing_key:
83
+ specification_version: 3
84
+ summary: Organize your javascript across namespaces matching your controllers and
85
+ actions. Get automatic executing functions for current controller and action.
86
+ test_files: []