paloma 0.0.5 → 0.0.6

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/.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