paloma 1.2.6 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (120) hide show
  1. data/.gitignore +2 -3
  2. data/Changelog.md +0 -4
  3. data/README.md +206 -67
  4. data/app/templates/_filters.js +14 -0
  5. data/app/templates/application/_locals.js +13 -0
  6. data/app/templates/controller/_locals.js +19 -0
  7. data/app/templates/controller/_manifest.js +3 -0
  8. data/app/templates/controller/action.js +23 -0
  9. data/app/templates/index.js +3 -1
  10. data/app/templates/namespace/_locals.js +16 -0
  11. data/app/templates/namespace/_manifest.js +3 -0
  12. data/app/views/paloma/_callback_hook.html.erb +31 -26
  13. data/lib/paloma.rb +3 -0
  14. data/lib/paloma/action_controller_extension.rb +18 -16
  15. data/lib/paloma/action_controller_filters.rb +4 -7
  16. data/lib/paloma/generators/add_generator.rb +81 -85
  17. data/lib/paloma/generators/setup_generator.rb +15 -5
  18. data/lib/paloma/rails/controller_generator.rb +11 -0
  19. data/lib/paloma/rails/engine.rb +6 -0
  20. data/paloma.gemspec +1 -3
  21. data/spec/test_app/.gitignore +15 -0
  22. data/spec/test_app/.rspec +1 -0
  23. data/spec/test_app/Gemfile +2 -0
  24. data/spec/test_app/README.rdoc +261 -0
  25. data/spec/test_app/Rakefile +16 -0
  26. data/spec/test_app/app/assets/javascripts/application.js +16 -0
  27. data/spec/test_app/app/assets/javascripts/paloma/_filters.js +130 -0
  28. data/spec/test_app/app/assets/javascripts/paloma/_locals.js +17 -0
  29. data/spec/test_app/app/assets/javascripts/paloma/bar/_filters.js +96 -0
  30. data/spec/test_app/app/assets/javascripts/paloma/bar/_locals.js +1 -0
  31. data/spec/test_app/app/assets/javascripts/paloma/bar/_manifest.js +3 -0
  32. data/spec/test_app/app/assets/javascripts/paloma/bar/another_basic_action.js +5 -0
  33. data/spec/test_app/app/assets/javascripts/paloma/bar/basic_action.js +5 -0
  34. data/spec/test_app/app/assets/javascripts/paloma/bar/different_params.js +4 -0
  35. data/spec/test_app/app/assets/javascripts/paloma/bar/yet_another_basic_action.js +5 -0
  36. data/spec/test_app/app/assets/javascripts/paloma/foo/_filters.js +24 -0
  37. data/spec/test_app/app/assets/javascripts/paloma/foo/_locals.js +21 -0
  38. data/spec/test_app/app/assets/javascripts/paloma/foo/_manifest.js +3 -0
  39. data/spec/test_app/app/assets/javascripts/paloma/foo/basic_action.js +21 -0
  40. data/spec/test_app/app/assets/javascripts/paloma/foo/skip_callback.js +6 -0
  41. data/spec/test_app/app/assets/javascripts/paloma/index.js +6 -0
  42. data/spec/test_app/app/assets/javascripts/paloma/sample_namespace/_filters.js +83 -0
  43. data/spec/test_app/app/assets/javascripts/paloma/sample_namespace/_manifest.js +2 -0
  44. data/spec/test_app/app/assets/javascripts/paloma/sample_namespace/baz/_filters.js +84 -0
  45. data/spec/test_app/app/assets/javascripts/paloma/sample_namespace/baz/_locals.js +1 -0
  46. data/spec/test_app/app/assets/javascripts/paloma/sample_namespace/baz/_manifest.js +2 -0
  47. data/spec/test_app/app/assets/javascripts/paloma/sample_namespace/baz/another_basic_action.js +5 -0
  48. data/spec/test_app/app/assets/javascripts/paloma/sample_namespace/baz/basic_action.js +5 -0
  49. data/spec/test_app/app/assets/javascripts/paloma/sample_namespace/baz/yet_another_basic_action.js +5 -0
  50. data/spec/test_app/app/controllers/application_controller.rb +3 -0
  51. data/spec/test_app/app/controllers/bar_controller.rb +28 -0
  52. data/spec/test_app/app/controllers/foo_controller.rb +25 -0
  53. data/spec/test_app/app/controllers/sample_namespace/baz_controller.rb +23 -0
  54. data/spec/{sample_app → test_app}/app/views/layouts/application.html.erb +0 -0
  55. data/spec/test_app/config.ru +4 -0
  56. data/spec/test_app/config/application.rb +74 -0
  57. data/spec/test_app/config/boot.rb +6 -0
  58. data/spec/test_app/config/environment.rb +5 -0
  59. data/spec/test_app/config/environments/development.rb +31 -0
  60. data/spec/test_app/config/environments/production.rb +64 -0
  61. data/spec/test_app/config/environments/test.rb +35 -0
  62. data/spec/test_app/config/initializers/backtrace_silencers.rb +7 -0
  63. data/spec/test_app/config/initializers/inflections.rb +15 -0
  64. data/spec/test_app/config/initializers/mime_types.rb +5 -0
  65. data/spec/test_app/config/initializers/secret_token.rb +7 -0
  66. data/spec/test_app/config/initializers/session_store.rb +8 -0
  67. data/spec/test_app/config/initializers/wrap_parameters.rb +10 -0
  68. data/spec/test_app/config/locales/en.yml +5 -0
  69. data/spec/test_app/config/routes.rb +33 -0
  70. data/spec/test_app/log/.gitkeep +0 -0
  71. data/spec/test_app/public/404.html +26 -0
  72. data/spec/test_app/public/422.html +26 -0
  73. data/spec/test_app/public/500.html +25 -0
  74. data/spec/test_app/public/favicon.ico +0 -0
  75. data/spec/test_app/public/robots.txt +5 -0
  76. data/spec/test_app/script/rails +6 -0
  77. data/spec/test_app/spec/generator_helper.rb +87 -0
  78. data/spec/test_app/spec/generators/paloma_generator_spec.rb +199 -0
  79. data/spec/test_app/spec/generators/rails_generator_spec.rb +54 -0
  80. data/spec/test_app/spec/javascripts/callback_spec.rb +64 -0
  81. data/spec/test_app/spec/javascripts/filters_spec.rb +187 -0
  82. data/spec/test_app/spec/javascripts/locals_spec.rb +27 -0
  83. data/spec/test_app/spec/javascripts/params_spec.rb +116 -0
  84. data/spec/test_app/spec/javascripts/skip_filters_spec.rb +58 -0
  85. data/spec/test_app/spec/javascripts/variable_container_spec.rb +21 -0
  86. data/spec/test_app/spec/spec_helper.rb +26 -0
  87. data/vendor/assets/javascripts/paloma_core.js +294 -0
  88. metadata +79 -68
  89. data/Rakefile +0 -28
  90. data/app/templates/_callbacks.js +0 -2
  91. data/app/templates/_local.js +0 -20
  92. data/app/templates/action.js +0 -5
  93. data/app/templates/paloma.js +0 -22
  94. data/spec/callback_spec.rb +0 -81
  95. data/spec/generator_spec.rb +0 -425
  96. data/spec/sample_app/app/assets/javascripts/application.js +0 -4
  97. data/spec/sample_app/app/assets/javascripts/paloma/articles/_callbacks.js +0 -1
  98. data/spec/sample_app/app/assets/javascripts/paloma/articles/create.js +0 -3
  99. data/spec/sample_app/app/assets/javascripts/paloma/articles/edit.js +0 -3
  100. data/spec/sample_app/app/assets/javascripts/paloma/articles/index.js +0 -3
  101. data/spec/sample_app/app/assets/javascripts/paloma/articles/new.js +0 -3
  102. data/spec/sample_app/app/assets/javascripts/paloma/articles/show.js +0 -3
  103. data/spec/sample_app/app/assets/javascripts/paloma/articles/update.js +0 -3
  104. data/spec/sample_app/app/assets/javascripts/paloma/index.js +0 -3
  105. data/spec/sample_app/app/assets/javascripts/paloma/paloma.js +0 -1
  106. data/spec/sample_app/app/assets/javascripts/paloma/sample_namespace/_callbacks.js +0 -1
  107. data/spec/sample_app/app/assets/javascripts/paloma/sample_namespace/categories/_callbacks.js +0 -1
  108. data/spec/sample_app/app/assets/javascripts/paloma/sample_namespace/categories/index.js +0 -3
  109. data/spec/sample_app/app/views/articles/index.html.erb +0 -5
  110. data/spec/sample_app/app/views/articles/new.html.erb +0 -9
  111. data/spec/sample_app/app/views/articles/show.html.erb +0 -2
  112. data/spec/sample_app/app/views/sample_namespace/categories/index.html.erb +0 -5
  113. data/spec/sample_app/app/views/sample_namespace/categories/new.html.erb +0 -5
  114. data/spec/sample_app/controllers.rb +0 -68
  115. data/spec/sample_app/init.rb +0 -37
  116. data/spec/sample_app/models.rb +0 -40
  117. data/spec/spec_helper.rb +0 -21
  118. data/spec/test_app/log/development.log +0 -4
  119. data/spec/test_app/tmp/cache/assets/CF0/DA0/sprockets%2Fd7d5b37686831d37c4dd75e645f5e016 +0 -0
  120. data/spec/test_app/tmp/cache/assets/E25/4C0/sprockets%2Fde2fd9fd11c04a582cdbbe3d84a35ae6 +0 -0
@@ -0,0 +1,13 @@
1
+ (function(){
2
+ // Initializes locals container for the global scope.
3
+ // All _locals.js file will inherit all locals here by default.
4
+ //
5
+ // Define a local by adding property to 'locals'.
6
+ //
7
+ // Example:
8
+ // locals.localMethod = function(){};
9
+ var locals = Paloma.locals['/'] = {};
10
+
11
+
12
+ // ~> Start local definitions here and remove this line.
13
+ })();
@@ -0,0 +1,19 @@
1
+ (function(){
2
+ // Initializes callbacks container for the this specific scope.
3
+ Paloma.callbacks[':controller_path'] = {};
4
+
5
+ // Initializes locals container for this specific scope.
6
+ // Define a local by adding property to 'locals'.
7
+ //
8
+ // Example:
9
+ // locals.localMethod = function(){};
10
+ var locals = Paloma.locals[':controller_path'] = {};
11
+
12
+
13
+ // ~> Start local definitions here and remove this line.
14
+
15
+
16
+ // Remove this line if you don't want to inherit locals defined
17
+ // on parent's _locals.js
18
+ Paloma.inheritLocals({from : ':parent', to : ':controller_path'});
19
+ })();
@@ -0,0 +1,3 @@
1
+ //= require ./_locals.js
2
+ //= require ./_filters.js
3
+ //= require_tree .
@@ -0,0 +1,23 @@
1
+ (function(){
2
+ // You access variables from before/around filters from _x object.
3
+ // You can also share variables to after/around filters through _x object.
4
+ var _x = Paloma.variableContainer;
5
+
6
+ // We are using _L as an alias for the locals container.
7
+ // Use either of the two to access locals from other scopes.
8
+ //
9
+ // Example:
10
+ // _L.otherController.localVariable = 100;
11
+ var _L = Paloma.locals;
12
+
13
+ // Access locals for the current scope through the _l object.
14
+ //
15
+ // Example:
16
+ // _l.localMethod();
17
+ var _l = _L[':controller_path'];
18
+
19
+
20
+ Paloma.callbacks[':controller_path'][':action'] = function(params){
21
+ // Do something here.
22
+ };
23
+ })();
@@ -1 +1,3 @@
1
- //= require ./paloma.js
1
+ //= require paloma_core.js
2
+ //= require ./_locals.js
3
+ //= require ./_filters.js
@@ -0,0 +1,16 @@
1
+ (function(){
2
+ // Initializes locals container for this specific scope.
3
+ // Define a local by adding property to 'locals'.
4
+ //
5
+ // Example:
6
+ // locals.localMethod = function(){};
7
+ var locals = Paloma.locals[':namespace'] = {};
8
+
9
+
10
+ // ~> Start local definitions here and remove this line.
11
+
12
+
13
+ // Remove this line if you don't want to inherit locals defined
14
+ // on parent's _locals.js
15
+ Paloma.inheritLocals({from : '/', to : ':namespace'});
16
+ })();
@@ -0,0 +1,3 @@
1
+ //= require ./_locals.js
2
+ //= require ./_filters.js
3
+ //= require ./:controller/_manifest.js
@@ -2,34 +2,39 @@
2
2
 
3
3
  <div class="callback-details" id="callback-details-<%= callback_details_id %>">
4
4
  <script type="text/javascript">
5
- var id = "callback-details-<%= callback_details_id %>",
6
- callbacks = [];
5
+ (function(){
7
6
 
8
- // Remove any callback details if any
9
- $('.callback-details[id!=" + id + "]').remove();
10
-
11
-
12
- // Convert callbacks to javascript variable
13
- <% callbacks.each do |callback| %>
14
- callbacks.push({
15
- name: '<%= callback[:name] %>',
16
- params: eval($('<div/>').html("(<%= callback[:params].to_json %>)").text())
17
- });
18
- <% end %>
19
-
20
-
21
- // Run Callbacks
22
- $(document).ready(function(){
23
- for (var i = 0, len = callbacks.length; i < len; i++){
24
- var callback = callbacks[i],
25
- callbackFunction = Paloma.callbacks[callback.name];
7
+ // Do not continue if Paloma.js is not found.
8
+ if (window['Paloma'] === undefined && window['console'] !== undefined){
9
+ console.warn("Paloma.js not found. Require it in your application.js.");
10
+ return true;
11
+ }
12
+
13
+
14
+ var id = "callback-details-<%= callback_details_id %>",
15
+ callbacks = [];
26
16
 
27
- console.log("Paloma: Fetching [" + callback.name + "]");
28
- if (callbackFunction != undefined){
29
- console.log("Paloma: Calling [" + callback.name + "]");
30
- callbackFunction(callback.params);
17
+ // Remove any callback details if any
18
+ $('.callback-details[id!=" + id + "]').remove();
19
+
20
+
21
+ // Convert callbacks to javascript variable
22
+ <% callbacks.each do |callback| %>
23
+ callbacks.push({
24
+ controller: '<%= callback[:controller] %>',
25
+ action: '<%= callback[:action] %>',
26
+ params: eval($('<div/>').html("(<%= callback[:params].to_json %>)").text())
27
+ });
28
+ <% end %>
29
+
30
+
31
+ // Run Callbacks
32
+ $(document).ready(function(){
33
+ for (var i = 0, len = callbacks.length; i < len; i++){
34
+ var callback = callbacks[i];
35
+ Paloma.execute(callback.controller, callback.action, callback.params);
31
36
  }
32
- }
33
- });
37
+ });
38
+ })();
34
39
  </script>
35
40
  </div>
@@ -19,6 +19,7 @@ module Paloma
19
19
  def self.templates
20
20
  @templates ||= "#{Paloma.root}/app/templates"
21
21
  end
22
+
22
23
  end
23
24
 
24
25
  require 'action_controller/railtie'
@@ -30,3 +31,5 @@ require 'paloma/generators/add_generator'
30
31
  require 'paloma/generators/setup_generator'
31
32
  require 'paloma/action_controller_filters'
32
33
  require 'paloma/action_controller_extension'
34
+ require 'paloma/rails/controller_generator'
35
+ require 'paloma/rails/engine'
@@ -9,41 +9,43 @@ module Paloma
9
9
 
10
10
  module ActionControllerExtension
11
11
  def redirect_js_hook options = {}, response_status = {}
12
- add_to_callbacks @__callback__, @__js_params__
12
+ add_to_callbacks @__paloma_callback__
13
13
  original_redirect_to options, response_status
14
14
  end
15
15
  alias_method :redirect_to, :redirect_js_hook
16
16
 
17
17
 
18
18
  #
19
- # js_callback false
20
- # js_callback :new, :params => {}
21
- # js_callback :controller => '', :action => '', :params => {}
22
- # js_callback :params => {}
19
+ # js false
20
+ # js :new, :params => {}
21
+ # js :controller => '', :action => '', :params => {}
22
+ # js :params => {}
23
23
  #
24
- def js_callback options = {}, extras = {}
25
- default_callback = "#{controller_path}/#{action_name}"
24
+ def js options = {}, extras = {}
25
+ callback = {:controller => controller_path, :action => action_name}
26
26
  params = {}
27
27
 
28
28
  if options.is_a? Hash
29
29
  params = options[:params]
30
30
  callback = options[:controller].present? && options[:action].present? ?
31
- "#{options[:controller]}/#{options[:action]}" :
32
- default_callback
31
+ {:controller => options[:controller], :action => options[:action]} :
32
+ callback
33
33
 
34
34
  elsif options.is_a? Symbol
35
35
  params = extras[:params]
36
- callback = "#{controller_path}/#{options}"
36
+ callback[:action] = options
37
37
 
38
- elsif options.nil? || options.is_a?(TrueClass)
39
- callback = default_callback
40
-
41
- else # false
38
+ elsif options.is_a? FalseClass
42
39
  callback = nil
43
40
  end
44
41
 
45
- @__callback__ = callback
46
- @__js_params__ = params
42
+ params ||= {}
43
+
44
+ # Include request details
45
+ params[:controller_path] = controller_path
46
+ params[:action] = action_name
47
+
48
+ @__paloma_callback__ = callback.present? ? callback.merge({:params => params}) : nil
47
49
  end
48
50
  end
49
51
 
@@ -4,7 +4,7 @@ module Paloma
4
4
  def self.included base
5
5
  base.module_eval do
6
6
  prepend_view_path "#{Paloma.root}/app/views/"
7
- before_filter :js_callback
7
+ before_filter :js
8
8
  after_filter :update_callback, :if => :html_response_from_render?
9
9
  end
10
10
  end
@@ -18,9 +18,7 @@ module Paloma
18
18
 
19
19
 
20
20
  def update_callback
21
- return clear_callbacks if @__callback__.nil?
22
-
23
- add_to_callbacks @__callback__, @__js_params__
21
+ add_to_callbacks @__paloma_callback__
24
22
 
25
23
  paloma_txt = view_context.render(
26
24
  :partial => "paloma/callback_hook",
@@ -45,10 +43,9 @@ module Paloma
45
43
  end
46
44
 
47
45
 
48
- def add_to_callbacks name, params
49
- return true if name.nil?
46
+ def add_to_callbacks callback
50
47
  session[:callbacks] ||= []
51
- session[:callbacks].push({:name => name, :params => params})
48
+ session[:callbacks].push(callback) if callback.present?
52
49
  end
53
50
 
54
51
 
@@ -27,114 +27,110 @@ module Paloma
27
27
  argument :actions, :type => :array, :required => false
28
28
 
29
29
  def create_callback_file
30
- args = split_arguments(file_path)
30
+ initialize_arguments file_path
31
31
 
32
- @namespace_name = args[0]
33
- @namespace_folder = args[1]
34
- @controller_name = args[2]
35
- @controller_folder = args[3]
36
-
37
- generate_folder(@namespace_folder)
38
- generate_folder(@controller_folder)
39
-
40
- # Create a js file for action if there is an action argument
41
- if actions.present?
42
- generate_actions actions
43
- end
32
+ generate_namespace_folder if @namespace.present?
33
+ generate_controller_folder if @controller.present?
34
+ generate_action_files(actions) if actions.present?
44
35
  end
45
36
 
46
37
 
47
- private
48
38
 
49
- def split_arguments args
50
- #split controller from actions
39
+ private
40
+
41
+
42
+ def initialize_arguments args
43
+ # split controller from actions
51
44
  arg = args.split(' ')
45
+ @controller_path = arg[0]
52
46
 
53
- #Split namespace from controller
54
- namespace = arg[0].split('/')
55
- namespace_name = (namespace.length > 1) ? namespace[0] : nil
56
- namespace_folder = namespace_name.nil? ? nil : "#{Paloma.destination}/#{namespace_name}"
57
-
58
- controller_name = namespace_name.nil? ? namespace[0].split(' ')[0] : namespace[1].split(' ')[0]
59
- controller_folder = namespace_folder.nil? ?
60
- "#{Paloma.destination}/#{controller_name}" :
61
- "#{namespace_folder}/#{controller_name}"
62
-
63
- # [namespace_name, namespace_folder, controller_name, controller_folder]
64
- files = [namespace_name, namespace_folder, controller_name, controller_folder]
47
+ full_controller_path = @controller_path.split '/'
48
+ @controller = full_controller_path.pop
49
+ @namespace = full_controller_path.join '/'
50
+ @namespace_folder = "#{Paloma.destination}/#{@namespace}" if @namespace
51
+ @controller_folder = "#{Paloma.destination}/#{@controller_path}"
65
52
  end
66
53
 
67
54
 
68
- def generate_actions actions
69
- actions.each do |action|
70
- action_js = "#{@controller_folder}/#{action}.js"
71
- if action.present? && !File.exists?(action_js)
72
- controller_path = @namespace_name.nil? ? @controller_name : "#{@namespace_name}/#{@controller_name}"
73
-
74
- content = File.read("#{Paloma.templates}/action.js").gsub(
75
- /controller\/action/,
76
- "#{controller_path}/#{action}")
77
-
78
- File.open(action_js, 'w'){ |f| f.write(content) }
79
-
80
- puts "create #{action_js}"
81
- end
82
- end
55
+ def generate_namespace_folder
56
+ return true if @namespace_folder.nil? || Dir.exists?(@namespace_folder)
57
+
58
+ Dir.mkdir(@namespace_folder)
59
+
60
+ generate_from_template :template => '/namespace/_locals.js',
61
+ :filename => "#{@namespace_folder}/_locals.js",
62
+ :replace => {':namespace' => @namespace}
63
+
64
+ generate_from_template :template => '_filters.js',
65
+ :filename => "#{@namespace_folder}/_filters.js",
66
+ :replace => {':scope' => @namespace}
67
+
68
+ generate_from_template :template => '/namespace/_manifest.js',
69
+ :filename => "#{@namespace_folder}/_manifest.js",
70
+ :replace => {':controller' => @controller}
71
+
72
+ # Require _manifest.js to Paloma's main index file
73
+ File.open(Paloma.index_js, 'a+'){ |f|
74
+ f << "\n//= require ./#{@namespace}/_manifest.js"
75
+ }
83
76
  end
84
77
 
85
78
 
86
- def generate_folder folder
87
- unless (folder.nil? || Dir.exists?(folder))
88
- Dir.mkdir(folder)
89
-
90
- callbacks_js = "#{folder}/_callbacks.js"
91
- local_js = "#{folder}/_local.js"
92
-
93
- generate_from_template local_js unless File.exists?(local_js)
94
- generate_from_template callbacks_js unless File.exists?(callbacks_js)
95
-
96
- if folder == @namespace_folder
97
- content = File.read(callbacks_js).gsub('//= require_tree .', '')
98
- File.open(callbacks_js, 'w'){ |f| f.write(content) }
99
- end
100
-
101
- require_callbacks folder
79
+ def generate_controller_folder
80
+ return true if @controller_folder.nil? || Dir.exists?(@controller_folder)
81
+
82
+ Dir.mkdir(@controller_folder)
83
+
84
+ generate_from_template :template => '/controller/_locals.js',
85
+ :filename => "#{@controller_folder}/_locals.js",
86
+ :replace => {
87
+ ':controller_path' => @controller_path,
88
+ ':parent' => (@namespace.present? ? @namespace : '/')}
89
+
90
+ generate_from_template :template => '_filters.js',
91
+ :filename => "#{@controller_folder}/_filters.js",
92
+ :replace => {':scope' => @controller_path}
93
+
94
+ generate_from_template :template => '/controller/_manifest.js',
95
+ :filename => "#{@controller_folder}/_manifest.js"
96
+
97
+ if @namespace.present?
98
+ # Require _manifest.js to namespace's _manifest.js file
99
+ File.open("#{@namespace_folder}/_manifest.js", 'a+'){ |f|
100
+ f << "\n//= require ./#{@controller}/_manifest.js"}
101
+ else
102
+ # Require _manifest.js to Paloma's main index file
103
+ File.open(Paloma.index_js, 'a+'){ |f|
104
+ f << "\n//= require ./#{@controller}/_manifest.js" }
102
105
  end
103
106
  end
104
107
 
105
108
 
106
- def require_callbacks folder
107
- # Require controller's _callbacks.js to Paloma's main index.js file.
108
- # Located on "#{Paloma.destination}/index.js" or by default on
109
- # app/assets/javascripts/paloma/index.js
110
-
111
- if (@namespace_folder.present? && folder != @namespace_folder)
112
- File.open("#{@namespace_folder}/_callbacks.js", 'a+'){ |f|
113
- is_present = f.lines.grep("\n//= require ./#{@controller_name}/_callbacks.js").any?
114
- f << "\n//= require ./#{@controller_name}/_callbacks.js" unless is_present
115
- }
116
- end
117
-
118
- controller = @namespace_folder.present? ? @namespace_name : @controller_name
119
-
120
- unless (@namespace_folder.present? && folder != @namespace_folder)
121
- File.open(Paloma.index_js, 'a+'){ |f|
122
- f << "\n//= require ./#{controller}/_callbacks.js"
123
- }
109
+ def generate_action_files actions
110
+ actions.each do |action|
111
+ action_js = "#{@controller_folder}/#{action}.js"
112
+ next if action.nil? || File.exists?(action_js)
113
+
114
+ content = File.read("#{Paloma.templates}/controller/action.js").
115
+ gsub(':controller_path', @controller_path).
116
+ gsub(':action', action)
117
+
118
+ File.open(action_js, 'w'){ |f| f.write(content) }
119
+ puts "create #{action_js}"
124
120
  end
125
121
  end
126
122
 
127
123
 
128
- def generate_from_template destination_filename
129
- controller = destination_filename.gsub(/[\/|\w|_]+\/paloma\//, '')
124
+ def generate_from_template options = {:template => nil, :filename => nil, :replace => {}}
125
+ return true if File.exists?(options[:filename])
130
126
 
131
- filename = controller.split('/').last
132
- controller = controller.gsub('/' + filename, '')
133
- controller = controller.gsub('/', '.')
127
+ content = File.read("#{Paloma.templates}/#{options[:template]}")
128
+ options[:replace].each do |pattern, value|
129
+ content.gsub!(pattern, value)
130
+ end if options[:replace].present?
134
131
 
135
- content = File.read("#{Paloma.templates}/#{filename}").gsub(/controller/, controller)
136
- File.open(destination_filename, 'w'){ |f| f.write(content) }
137
- puts "create #{destination_filename}"
132
+ File.open(options[:filename], 'w'){ |f| f.write(content) }
133
+ puts "create #{options[:filename]}"
138
134
  end
139
135
  end
140
136
  end