paloma 0.0.5 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -1,19 +1,7 @@
1
- *.rbc
2
- *.sassc
3
- .sass-cache
4
- capybara-*.html
5
- .rspec
6
- /.bundle
7
- /vendor/bundle
8
- /log/*
9
- /tmp/*
10
- /db/*.sqlite3
11
- /public/system/*
12
- /coverage/
13
- /spec/tmp/*
1
+ Gemfile.lock
14
2
  *.gem
15
- /spec/sample_app/log
3
+ /tmp/*
4
+ /spec/tmp/
5
+ /spec/sample_app/tmp/
6
+ /spec/sample_app/log/
16
7
  /spec/sample_app/paloma_test
17
- **.orig
18
- rerun.txt
19
- pickle-email-*.html
data/Changelog.md ADDED
@@ -0,0 +1,10 @@
1
+ Changelog
2
+ =
3
+
4
+ Version 0.0.5
5
+ -
6
+ * Callbacks are executed after the DOM is ready
7
+
8
+ Version 0.0.4
9
+ -
10
+ * First release
data/Gemfile CHANGED
@@ -1,3 +1,2 @@
1
1
  source "http://rubygems.org"
2
-
3
2
  gemspec
File without changes
File without changes
File without changes
File without changes
File without changes
data/lib/paloma.rb CHANGED
@@ -1,6 +1,23 @@
1
1
  module Paloma
2
+ mattr_accessor :destination, :templates
3
+
2
4
  def self.root
3
- @paloma_root ||= File.dirname(__FILE__) + '/../'
5
+ @paloma_root ||= "#{File.dirname(__FILE__)}/../"
6
+ end
7
+
8
+
9
+ def self.index_js
10
+ @index_js ||= "#{Paloma.destination}/index.js"
11
+ end
12
+
13
+
14
+ def self.destination
15
+ @destination ||= 'app/assets/javascripts/paloma'
16
+ end
17
+
18
+
19
+ def self.templates
20
+ @templates ||= "#{Paloma.root}/app/templates"
4
21
  end
5
22
  end
6
23
 
@@ -9,6 +26,7 @@ require 'rails/generators'
9
26
 
10
27
  # TODO: Rails version checking
11
28
 
12
- require 'paloma/paloma_generator'
29
+ require 'paloma/generators/add_generator'
30
+ require 'paloma/generators/setup_generator'
13
31
  require 'paloma/action_controller_filters'
14
32
  require 'paloma/action_controller_extension'
@@ -0,0 +1,69 @@
1
+ module Paloma
2
+ #
3
+ # Usage:
4
+ # rails g paloma:add <controller_name>
5
+ # - Generates the following:
6
+ # - a folder under app/assets/javascripts/paloma named as <controller_name>
7
+ # - callbacks.js inside the folder just made
8
+ # - Updates index.js under the 'paloma' folder
9
+ # - adds a line in order to require the callbacks to be made under the recently made folder
10
+ #
11
+ #
12
+ # rails g paloma:add <controller_name>/<action_name>
13
+ # - Generates the following:
14
+ # - <action_name>.js file inside the <controller_name> folder
15
+ #
16
+ #
17
+ # Generated Files:
18
+ # <controller_name>/callbacks.js
19
+ # - contains code for requiring all callbacks under the same folder <controller_name>
20
+ #
21
+ # <controller_name>/<action_name>.js
22
+ # - actual code to be executed when callback is called
23
+ #
24
+
25
+ class AddGenerator < ::Rails::Generators::NamedBase
26
+ source_root Paloma.templates
27
+
28
+ def create_callback_file
29
+ arg = file_path.split('/')
30
+ @controller_name = arg[0]
31
+ action_name = arg[1]
32
+
33
+ controller_folder = "#{Paloma.destination}/#{@controller_name}/"
34
+ callbacks_js = "#{controller_folder}/_callbacks.js"
35
+ local_js = "#{controller_folder}/_local.js"
36
+ action_js = "#{controller_folder}/#{action_name}.js"
37
+
38
+ Dir.mkdir(controller_folder) unless Dir.exists?(controller_folder)
39
+
40
+ generate_from_template local_js unless File.exists?(local_js)
41
+ generate_from_template callbacks_js unless File.exists?(callbacks_js)
42
+
43
+ # Create a js file for action if there is an action argument
44
+ if action_name.present? && !File.exists?(action_js)
45
+ content = File.read("#{Paloma.templates}/action.js").gsub(
46
+ /controller\/action/,
47
+ "#{@controller_name}/#{action_name}")
48
+
49
+ File.open(action_js, 'w'){ |f| f.write(content) }
50
+ end
51
+
52
+ # Require controller's _callbacks.js to Paloma's main index.js file.
53
+ # Located on "#{Paloma.destination}/index.js" or by default on
54
+ # app/assets/javascripts/paloma/index.js
55
+ File.open(Paloma.index_js, 'a+'){ |f|
56
+ f << "\n//= require ./#{@controller_name}/_callbacks"
57
+ }
58
+ end
59
+
60
+
61
+ private
62
+
63
+ def generate_from_template destination_filename
64
+ filename = destination_filename.split('/').last
65
+ content = File.read("#{Paloma.templates}/_local.js").gsub(/controller/, @controller_name)
66
+ File.open(destination_filename, 'w'){ |f| f.write(content) }
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,28 @@
1
+ module Paloma
2
+ #
3
+ # rails g paloma:setup
4
+ # - Generates the following:
5
+ # - 'paloma' folder under app/assets/javascripts/
6
+ # - index.js and paloma.js under the 'paloma' folder
7
+ #
8
+ # Generated Files:
9
+ # index.js
10
+ # - contains code for requiring all callbacks of all folders
11
+ # - always updated when new folders and callback.js files are created
12
+ #
13
+ # paloma.js
14
+ # - declaration of namespace used in all callbacks
15
+ #
16
+
17
+ class SetupGenerator < ::Rails::Generators::Base
18
+ source_root Paloma.templates
19
+
20
+ def setup_paloma
21
+ index_js = "#{Paloma.destination}/index.js"
22
+ paloma_js = "#{Paloma.destination}/paloma.js"
23
+
24
+ copy_file 'index.js', index_js unless File.exists?(index_js)
25
+ copy_file 'paloma.js', paloma_js unless File.exists?(paloma_js)
26
+ end
27
+ end
28
+ end
data/paloma.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'paloma'
3
- s.version = '0.0.5'
3
+ s.version = '0.0.6'
4
4
  s.summary = "a sexy way to organize javascript files using Rails` asset pipeline"
5
5
  s.description = "a sexy way to organize javascript files using Rails` asset pipeline"
6
6
  s.authors = ["Karl Paragua", "Bia Esmero"]
@@ -11,12 +11,11 @@ Gem::Specification.new do |s|
11
11
  s.add_dependency 'jquery-rails'
12
12
 
13
13
  s.add_development_dependency 'rails', ['>= 3.1.0']
14
- s.add_development_dependency 'bundler', ['>= 1.0.0']
15
14
  s.add_development_dependency 'rake', ['>= 0']
16
15
  s.add_development_dependency 'sqlite3', ['>= 0']
17
16
  s.add_development_dependency 'rspec', ['>= 0']
18
17
  s.add_development_dependency 'rspec-rails', ['~> 2.0']
18
+ s.add_development_dependency 'generator_spec', ['~> 0.8.7']
19
19
  s.add_development_dependency 'capybara', ['>= 1.0']
20
20
  s.add_development_dependency 'database_cleaner', ['>= 0']
21
- s.add_development_dependency 'launchy', ['>= 0']
22
21
  end
@@ -1,5 +1,5 @@
1
1
  require 'spec_helper'
2
-
2
+ =begin
3
3
  feature 'Callbacks' do
4
4
 
5
5
  it 'should execute articles/new callback', :js => true do
@@ -15,8 +15,6 @@ feature 'Callbacks' do
15
15
  fill_in 'article[body]', :with => 'sexy paloma body'
16
16
  click_button 'Save'
17
17
 
18
- print page.html
19
-
20
18
  page.has_selector?('#from-articles-create-callback').should == true
21
19
  page.has_selector?('#from-articles-show-callback').should == true
22
20
  end
@@ -65,3 +63,4 @@ feature 'Callbacks' do
65
63
  page.has_selector?('#from-articles-edit-callback').should == true
66
64
  end
67
65
  end
66
+ =end
@@ -0,0 +1,113 @@
1
+ require 'spec_helper'
2
+ require 'generator_spec/test_case'
3
+ require 'fileutils'
4
+
5
+ TEMP = "#{File.dirname(__FILE__)}/tmp/"
6
+
7
+ feature Paloma::SetupGenerator do
8
+ include GeneratorSpec::TestCase
9
+ destination TEMP
10
+
11
+ before do
12
+ prepare_destination
13
+ run_generator
14
+ end
15
+
16
+ specify do
17
+ destination_root.should have_structure {
18
+ directory Paloma.destination do
19
+ file 'paloma.js'
20
+ file 'index.js'
21
+ end
22
+ }
23
+ end
24
+ end
25
+
26
+
27
+
28
+ def mimic_setup
29
+ # Mimic SetupGenerator results before running the AddGenerator
30
+ FileUtils.cd TEMP
31
+ FileUtils.mkpath Paloma.destination
32
+ File.open("#{Paloma.destination}/index.js", 'w') { |f| f.write('// test')}
33
+ end
34
+
35
+
36
+
37
+ feature Paloma::AddGenerator, 'creating controller folder only' do
38
+ include GeneratorSpec::TestCase
39
+ destination TEMP
40
+ arguments ['sexy_controller']
41
+
42
+ before do
43
+ prepare_destination
44
+ mimic_setup
45
+ run_generator
46
+ end
47
+
48
+ specify do
49
+ destination_root.should have_structure {
50
+ directory Paloma.destination do
51
+ directory 'sexy_controller'
52
+
53
+ file 'index.js' do
54
+ contains '//= require ./sexy_controller/_callbacks'
55
+ end
56
+ end
57
+ }
58
+ end
59
+ end
60
+
61
+
62
+
63
+ feature Paloma::AddGenerator, 'creating action with existing controller folder' do
64
+ include GeneratorSpec::TestCase
65
+ destination TEMP
66
+ arguments ['existing_controller_folder/new_action']
67
+
68
+ before do
69
+ prepare_destination
70
+ mimic_setup
71
+ Dir.mkdir "#{Paloma.destination}/existing_controller_folder"
72
+
73
+ run_generator
74
+ end
75
+
76
+ specify do
77
+ destination_root.should have_structure {
78
+ directory Paloma.destination do
79
+ directory 'existing_controller_folder' do
80
+ file 'new_action.js' do
81
+ contains "Paloma.callbacks['existing_controller_folder/new_action']"
82
+ end
83
+ end
84
+ end
85
+ }
86
+ end
87
+ end
88
+
89
+
90
+
91
+ feature Paloma::AddGenerator, 'creating both controller folder and action file' do
92
+ include GeneratorSpec::TestCase
93
+ destination TEMP
94
+ arguments ['new_controller_folder/new_action']
95
+
96
+ before do
97
+ prepare_destination
98
+ mimic_setup
99
+ run_generator
100
+ end
101
+
102
+ specify do
103
+ destination_root.should have_structure {
104
+ directory Paloma.destination do
105
+ directory 'new_controller_folder' do
106
+ file 'new_action.js' do
107
+ contains "Paloma.callbacks['new_controller_folder/new_action']"
108
+ end
109
+ end
110
+ end
111
+ }
112
+ end
113
+ end
@@ -52,3 +52,11 @@ class ArticlesController < ApplicationController
52
52
  end
53
53
 
54
54
  end
55
+
56
+ module SampleNamespace
57
+ class CategoriesController < ApplicationController
58
+ def index
59
+ raise controller_path.inspect
60
+ end
61
+ end
62
+ end
@@ -27,7 +27,8 @@ app.initialize!
27
27
  # Routes
28
28
  app.routes.draw do
29
29
  resources :articles, :controller => 'Articles'
30
+ resources :categories, :module => 'SampleNamespace'
30
31
  end
31
32
 
32
- require "#{Paloma.root}/spec/sample_app/model"
33
+ require "#{Paloma.root}/spec/sample_app/models"
33
34
  require "#{Paloma.root}/spec/sample_app/controllers"
@@ -5,24 +5,36 @@ ActiveRecord::Base.configurations = {'test' => {:adapter => 'sqlite3', :database
5
5
  ActiveRecord::Base.establish_connection('test')
6
6
 
7
7
 
8
- # Model
8
+ # Models
9
9
  class Article < ActiveRecord::Base
10
- attr_accessible :title, :body
11
-
10
+ attr_accessible :title, :body, :category, :category_id
11
+ belongs_to :category
12
12
  validates_presence_of :title
13
13
  end
14
14
 
15
15
 
16
+ class Category < ActiveRecord::Base
17
+ attr_accessible :name
18
+ has_many :articles, :dependent => :destroy
19
+ validates_presence_of :name
20
+ end
21
+
22
+
16
23
  # Migration
17
- class CreateArticles < ActiveRecord::Migration
24
+ class CreateTables < ActiveRecord::Migration
18
25
  def self.up
19
26
  create_table :articles, :force => true do |t|
20
27
  t.string :title
21
28
  t.string :body
29
+ t.references :category
30
+ end
31
+
32
+ create_table :categories, :force => true do |t|
33
+ t.string :name
22
34
  end
23
35
  end
24
36
  end
25
37
 
26
38
 
27
39
  ActiveRecord::Migration.verbose = false
28
- CreateArticles.up
40
+ CreateTables.up
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: paloma
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2012-12-20 00:00:00.000000000 Z
13
+ date: 2012-12-21 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: jquery-rails
@@ -44,22 +44,6 @@ dependencies:
44
44
  - - ! '>='
45
45
  - !ruby/object:Gem::Version
46
46
  version: 3.1.0
47
- - !ruby/object:Gem::Dependency
48
- name: bundler
49
- requirement: !ruby/object:Gem::Requirement
50
- none: false
51
- requirements:
52
- - - ! '>='
53
- - !ruby/object:Gem::Version
54
- version: 1.0.0
55
- type: :development
56
- prerelease: false
57
- version_requirements: !ruby/object:Gem::Requirement
58
- none: false
59
- requirements:
60
- - - ! '>='
61
- - !ruby/object:Gem::Version
62
- version: 1.0.0
63
47
  - !ruby/object:Gem::Dependency
64
48
  name: rake
65
49
  requirement: !ruby/object:Gem::Requirement
@@ -125,29 +109,29 @@ dependencies:
125
109
  - !ruby/object:Gem::Version
126
110
  version: '2.0'
127
111
  - !ruby/object:Gem::Dependency
128
- name: capybara
112
+ name: generator_spec
129
113
  requirement: !ruby/object:Gem::Requirement
130
114
  none: false
131
115
  requirements:
132
- - - ! '>='
116
+ - - ~>
133
117
  - !ruby/object:Gem::Version
134
- version: '1.0'
118
+ version: 0.8.7
135
119
  type: :development
136
120
  prerelease: false
137
121
  version_requirements: !ruby/object:Gem::Requirement
138
122
  none: false
139
123
  requirements:
140
- - - ! '>='
124
+ - - ~>
141
125
  - !ruby/object:Gem::Version
142
- version: '1.0'
126
+ version: 0.8.7
143
127
  - !ruby/object:Gem::Dependency
144
- name: database_cleaner
128
+ name: capybara
145
129
  requirement: !ruby/object:Gem::Requirement
146
130
  none: false
147
131
  requirements:
148
132
  - - ! '>='
149
133
  - !ruby/object:Gem::Version
150
- version: '0'
134
+ version: '1.0'
151
135
  type: :development
152
136
  prerelease: false
153
137
  version_requirements: !ruby/object:Gem::Requirement
@@ -155,9 +139,9 @@ dependencies:
155
139
  requirements:
156
140
  - - ! '>='
157
141
  - !ruby/object:Gem::Version
158
- version: '0'
142
+ version: '1.0'
159
143
  - !ruby/object:Gem::Dependency
160
- name: launchy
144
+ name: database_cleaner
161
145
  requirement: !ruby/object:Gem::Requirement
162
146
  none: false
163
147
  requirements:
@@ -179,23 +163,25 @@ extensions: []
179
163
  extra_rdoc_files: []
180
164
  files:
181
165
  - .gitignore
166
+ - Changelog.md
182
167
  - Gemfile
183
- - Gemfile.lock
184
168
  - License
185
169
  - README.md
186
170
  - Rakefile
171
+ - app/templates/_callbacks.js
172
+ - app/templates/_local.js
173
+ - app/templates/action.js
174
+ - app/templates/index.js
175
+ - app/templates/paloma.js
187
176
  - app/views/paloma/_callback_hook.html.erb
188
177
  - lib/paloma.rb
189
178
  - lib/paloma/action_controller_extension.rb
190
179
  - lib/paloma/action_controller_filters.rb
191
- - lib/paloma/paloma_generator.rb
192
- - lib/paloma/templates/_callbacks.js
193
- - lib/paloma/templates/_local.js
194
- - lib/paloma/templates/action.js
195
- - lib/paloma/templates/index.js
196
- - lib/paloma/templates/paloma.js
180
+ - lib/paloma/generators/add_generator.rb
181
+ - lib/paloma/generators/setup_generator.rb
197
182
  - paloma.gemspec
198
183
  - spec/callback_spec.rb
184
+ - spec/generator_spec.rb
199
185
  - spec/sample_app/app/assets/javascripts/application.js
200
186
  - spec/sample_app/app/assets/javascripts/paloma/articles/callbacks.js
201
187
  - spec/sample_app/app/assets/javascripts/paloma/articles/create.js
@@ -212,7 +198,7 @@ files:
212
198
  - spec/sample_app/app/views/layouts/application.html.erb
213
199
  - spec/sample_app/controllers.rb
214
200
  - spec/sample_app/init.rb
215
- - spec/sample_app/model.rb
201
+ - spec/sample_app/models.rb
216
202
  - spec/spec_helper.rb
217
203
  homepage: https://github.com/kbparagua/paloma
218
204
  licenses: []
@@ -234,7 +220,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
234
220
  version: '0'
235
221
  requirements: []
236
222
  rubyforge_project:
237
- rubygems_version: 1.8.21
223
+ rubygems_version: 1.8.24
238
224
  signing_key:
239
225
  specification_version: 3
240
226
  summary: a sexy way to organize javascript files using Rails` asset pipeline
data/Gemfile.lock DELETED
@@ -1,148 +0,0 @@
1
- PATH
2
- remote: .
3
- specs:
4
- paloma (0.0.4)
5
- jquery-rails
6
-
7
- GEM
8
- remote: http://rubygems.org/
9
- specs:
10
- actionmailer (3.2.9)
11
- actionpack (= 3.2.9)
12
- mail (~> 2.4.4)
13
- actionpack (3.2.9)
14
- activemodel (= 3.2.9)
15
- activesupport (= 3.2.9)
16
- builder (~> 3.0.0)
17
- erubis (~> 2.7.0)
18
- journey (~> 1.0.4)
19
- rack (~> 1.4.0)
20
- rack-cache (~> 1.2)
21
- rack-test (~> 0.6.1)
22
- sprockets (~> 2.2.1)
23
- activemodel (3.2.9)
24
- activesupport (= 3.2.9)
25
- builder (~> 3.0.0)
26
- activerecord (3.2.9)
27
- activemodel (= 3.2.9)
28
- activesupport (= 3.2.9)
29
- arel (~> 3.0.2)
30
- tzinfo (~> 0.3.29)
31
- activeresource (3.2.9)
32
- activemodel (= 3.2.9)
33
- activesupport (= 3.2.9)
34
- activesupport (3.2.9)
35
- i18n (~> 0.6)
36
- multi_json (~> 1.0)
37
- addressable (2.3.2)
38
- arel (3.0.2)
39
- builder (3.0.4)
40
- capybara (2.0.1)
41
- mime-types (>= 1.16)
42
- nokogiri (>= 1.3.3)
43
- rack (>= 1.0.0)
44
- rack-test (>= 0.5.4)
45
- selenium-webdriver (~> 2.0)
46
- xpath (~> 1.0.0)
47
- childprocess (0.3.6)
48
- ffi (~> 1.0, >= 1.0.6)
49
- database_cleaner (0.9.1)
50
- diff-lcs (1.1.3)
51
- erubis (2.7.0)
52
- ffi (1.2.0)
53
- hike (1.2.1)
54
- i18n (0.6.1)
55
- journey (1.0.4)
56
- jquery-rails (2.1.4)
57
- railties (>= 3.0, < 5.0)
58
- thor (>= 0.14, < 2.0)
59
- json (1.7.5)
60
- launchy (2.1.2)
61
- addressable (~> 2.3)
62
- libwebsocket (0.1.7.1)
63
- addressable
64
- websocket
65
- mail (2.4.4)
66
- i18n (>= 0.4.0)
67
- mime-types (~> 1.16)
68
- treetop (~> 1.4.8)
69
- mime-types (1.19)
70
- multi_json (1.5.0)
71
- nokogiri (1.5.5)
72
- polyglot (0.3.3)
73
- rack (1.4.1)
74
- rack-cache (1.2)
75
- rack (>= 0.4)
76
- rack-ssl (1.3.2)
77
- rack
78
- rack-test (0.6.2)
79
- rack (>= 1.0)
80
- rails (3.2.9)
81
- actionmailer (= 3.2.9)
82
- actionpack (= 3.2.9)
83
- activerecord (= 3.2.9)
84
- activeresource (= 3.2.9)
85
- activesupport (= 3.2.9)
86
- bundler (~> 1.0)
87
- railties (= 3.2.9)
88
- railties (3.2.9)
89
- actionpack (= 3.2.9)
90
- activesupport (= 3.2.9)
91
- rack-ssl (~> 1.3.2)
92
- rake (>= 0.8.7)
93
- rdoc (~> 3.4)
94
- thor (>= 0.14.6, < 2.0)
95
- rake (10.0.3)
96
- rdoc (3.12)
97
- json (~> 1.4)
98
- rspec (2.12.0)
99
- rspec-core (~> 2.12.0)
100
- rspec-expectations (~> 2.12.0)
101
- rspec-mocks (~> 2.12.0)
102
- rspec-core (2.12.2)
103
- rspec-expectations (2.12.1)
104
- diff-lcs (~> 1.1.3)
105
- rspec-mocks (2.12.0)
106
- rspec-rails (2.12.0)
107
- actionpack (>= 3.0)
108
- activesupport (>= 3.0)
109
- railties (>= 3.0)
110
- rspec-core (~> 2.12.0)
111
- rspec-expectations (~> 2.12.0)
112
- rspec-mocks (~> 2.12.0)
113
- rubyzip (0.9.9)
114
- selenium-webdriver (2.27.2)
115
- childprocess (>= 0.2.5)
116
- libwebsocket (~> 0.1.3)
117
- multi_json (~> 1.0)
118
- rubyzip
119
- sprockets (2.2.2)
120
- hike (~> 1.2)
121
- multi_json (~> 1.0)
122
- rack (~> 1.0)
123
- tilt (~> 1.1, != 1.3.0)
124
- sqlite3 (1.3.6)
125
- thor (0.16.0)
126
- tilt (1.3.3)
127
- treetop (1.4.12)
128
- polyglot
129
- polyglot (>= 0.3.1)
130
- tzinfo (0.3.35)
131
- websocket (1.0.4)
132
- xpath (1.0.0)
133
- nokogiri (~> 1.3)
134
-
135
- PLATFORMS
136
- ruby
137
-
138
- DEPENDENCIES
139
- bundler (>= 1.0.0)
140
- capybara (>= 1.0)
141
- database_cleaner
142
- launchy
143
- paloma!
144
- rails (>= 3.1.0)
145
- rake
146
- rspec
147
- rspec-rails (~> 2.0)
148
- sqlite3
@@ -1,95 +0,0 @@
1
- module Paloma
2
- #
3
- # Setup:
4
- # rails g paloma:setup
5
- # - Generates the following:
6
- # - 'paloma' folder under app/assets/javascripts/paloma
7
- # - index.js and paloma.js under the 'paloma' folder
8
- #
9
- #
10
- # Usage:
11
- # rails g paloma:add <controller_name>
12
- # - Generates the following:
13
- # - a folder under app/assets/javascripts/paloma named as <controller_name>
14
- # - callbacks.js inside the folder just made
15
- # - Updates index.js under the 'paloma' folder
16
- # - adds a line in order to require the callbacks to be made under the recently made folder
17
- #
18
- #
19
- # rails g paloma:add <controller_name>/<action_name>
20
- # - Generates the following:
21
- # - <action_name>.js file inside the <controller_name> folder
22
- #
23
- #
24
- # Generated Files:
25
- # index.js
26
- # - contains code for requiring all callbacks of all folders
27
- # - always updated when new folders and callback.js files are created
28
- #
29
- # paloma.js
30
- # - declaration of namespace used in all callbacks
31
- #
32
- # <controller_name>/callbacks.js
33
- # - contains code for requiring all callbacks under the same folder <controller_name>
34
- #
35
- # <controller_name>/<action_name>.js
36
- # - actual code to be executed when callback is called
37
- #
38
-
39
- PARENT = 'app/assets/javascripts/paloma/'
40
- INDEX = PARENT + 'index.js'
41
- PALOMA = PARENT + 'paloma.js'
42
-
43
- class SetupGenerator < ::Rails::Generators::Base
44
- source_root File.expand_path('../templates', __FILE__)
45
-
46
- def setup_paloma
47
- #index.js on callbacks folder
48
- has_index = File.exists? INDEX
49
- copy_file 'index.js', INDEX unless has_index
50
-
51
- has_paloma = File.exists? PALOMA
52
- copy_file 'paloma.js', PALOMA unless has_paloma
53
- end
54
-
55
- end
56
-
57
-
58
- class AddGenerator < ::Rails::Generators::NamedBase
59
- source_root File.expand_path('../templates', __FILE__)
60
-
61
- def create_callback_file
62
- file = file_path.split('/')
63
- controller = file[0]
64
- action = file[1]
65
-
66
- callbacks = PARENT + "#{controller}/_callbacks.js"
67
- templates = "#{Paloma.root}/lib/paloma/templates/"
68
- local = PARENT + "#{controller}/_local.js"
69
- action_file = PARENT + "#{controller}/#{action}.js"
70
-
71
- #_callbacks.js per folder(controller)
72
- has_callbacks = File.exists? callbacks
73
- unless has_callbacks
74
- Dir.mkdir(PARENT + "#{controller}")
75
- content = File.read(templates + '_callbacks.js').gsub('controller', "#{controller}")
76
- File.open(callbacks, 'w'){ |f| f.write(content) }
77
- File.open(INDEX, 'a+'){ |f| f << "\n//= require ./" + controller + '/_callbacks' }
78
- end
79
-
80
- #_local.js per folder(controller)
81
- has_local =File.exists? local
82
- unless has_local
83
- content = File.read(templates + '_local.js').gsub('controller', "#{controller}")
84
- File.open(local, 'w'){ |f| f.write(content) }
85
- end
86
-
87
- #<action>.js on folder(controller) - code for callback
88
- has_action = File.exists? action_file
89
- unless (action.nil? || has_action)
90
- content = File.read(templates + 'action.js').gsub('controller/action', "#{controller}/#{action}")
91
- File.open(action_file, 'w'){ |f| f.write(content) }
92
- end
93
- end
94
- end
95
- end