rails_artifactor 0.3.3
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/.document +5 -0
- data/.rspec +1 -0
- data/DESIGN_NOTES.textile +33 -0
- data/Gemfile +18 -0
- data/LICENSE +20 -0
- data/README.markdown +71 -0
- data/Rakefile +53 -0
- data/VERSION +1 -0
- data/lib/rails_artifactor/artifact/base.rb +59 -0
- data/lib/rails_artifactor/artifact/crud/create.rb +12 -0
- data/lib/rails_artifactor/artifact/crud/delete.rb +34 -0
- data/lib/rails_artifactor/artifact/crud/read.rb +47 -0
- data/lib/rails_artifactor/artifact/crud/update.rb +25 -0
- data/lib/rails_artifactor/artifact/crud.rb +32 -0
- data/lib/rails_artifactor/artifact/file_name/artifacts.rb +21 -0
- data/lib/rails_artifactor/artifact/file_name/migration.rb +54 -0
- data/lib/rails_artifactor/artifact/file_name/view.rb +172 -0
- data/lib/rails_artifactor/artifact/markers.rb +73 -0
- data/lib/rails_artifactor/artifact/migration.rb +11 -0
- data/lib/rails_artifactor/artifact/orm/active_record.rb +14 -0
- data/lib/rails_artifactor/artifact/orm/data_mapper.rb +22 -0
- data/lib/rails_artifactor/artifact/orm/mongo_mapper.rb +18 -0
- data/lib/rails_artifactor/artifact/orm/mongoid.rb +23 -0
- data/lib/rails_artifactor/artifact/orm/none.rb +16 -0
- data/lib/rails_artifactor/artifact/orm.rb +55 -0
- data/lib/rails_artifactor/artifact/view_artifact.rb +94 -0
- data/lib/rails_artifactor/artifact.rb +1 -0
- data/lib/rails_artifactor/base/crud/create.rb +62 -0
- data/lib/rails_artifactor/base/crud/delete.rb +35 -0
- data/lib/rails_artifactor/base/crud/read.rb +13 -0
- data/lib/rails_artifactor/base/crud/update.rb +66 -0
- data/lib/rails_artifactor/base/crud.rb +6 -0
- data/lib/rails_artifactor/base/file_name.rb +41 -0
- data/lib/rails_artifactor/base.rb +1 -0
- data/lib/rails_artifactor/macro.rb +2 -0
- data/lib/rails_artifactor/namespaces.rb +10 -0
- data/lib/rails_artifactor/rspec/configure.rb +7 -0
- data/lib/rails_artifactor/rspec.rb +1 -0
- data/lib/rails_artifactor/ruby_mutator.rb +11 -0
- data/lib/rails_artifactor/template_language/base.rb +14 -0
- data/lib/rails_artifactor/template_language/erb.rb +24 -0
- data/lib/rails_artifactor/template_language/haml.rb +32 -0
- data/lib/rails_artifactor/template_language/slim.rb +15 -0
- data/lib/rails_artifactor.rb +12 -0
- data/rails_artifactor.gemspec +163 -0
- data/spec/fixtures/app/views/account/edit.erb.html +3 -0
- data/spec/fixtures/app/views/account/edit.html.erb +3 -0
- data/spec/fixtures/app/views/layouts/application.erb.html +3 -0
- data/spec/fixtures/app/views/layouts/application.html.erb +16 -0
- data/spec/fixtures.rb +3 -0
- data/spec/rails_artifactor/artifact/base_spec.rb +17 -0
- data/spec/rails_artifactor/artifact/crud/controller_spec.rb +65 -0
- data/spec/rails_artifactor/artifact/crud/helper_spec.rb +64 -0
- data/spec/rails_artifactor/artifact/crud/mailer_spec.rb +62 -0
- data/spec/rails_artifactor/artifact/crud/migration_spec.rb +86 -0
- data/spec/rails_artifactor/artifact/crud/model_active_record_spec.rb +68 -0
- data/spec/rails_artifactor/artifact/crud/model_spec.rb +68 -0
- data/spec/rails_artifactor/artifact/crud/observer_spec.rb +65 -0
- data/spec/rails_artifactor/artifact/crud/permit_spec.rb +71 -0
- data/spec/rails_artifactor/artifact/crud/view_controller_action_spec.rb +92 -0
- data/spec/rails_artifactor/artifact/crud/view_file_spec.rb +31 -0
- data/spec/rails_artifactor/artifact/file_name/artifacts_spec.rb +33 -0
- data/spec/rails_artifactor/artifact/file_name/migration_spec.rb +32 -0
- data/spec/rails_artifactor/artifact/file_name/view_spec.rb +38 -0
- data/spec/rails_artifactor/artifact/markers_spec.rb +93 -0
- data/spec/rails_artifactor/artifact/migration_spec.rb +0 -0
- data/spec/rails_artifactor/artifact/orm/active_record_spec.rb +37 -0
- data/spec/rails_artifactor/artifact/orm/data_mapper_spec.rb +37 -0
- data/spec/rails_artifactor/artifact/orm/mongo_mapper_spec.rb +67 -0
- data/spec/rails_artifactor/artifact/orm/mongoid_spec.rb +67 -0
- data/spec/rails_artifactor/artifact/orm/none_spec.rb +36 -0
- data/spec/rails_artifactor/base/crud/create_spec.rb +31 -0
- data/spec/rails_artifactor/base/crud/delete_spec.rb +49 -0
- data/spec/rails_artifactor/base/crud/read_spec.rb +80 -0
- data/spec/rails_artifactor/base/crud/update_spec.rb +74 -0
- data/spec/rails_artifactor/base/file_name_spec.rb +23 -0
- data/spec/spec_helper.rb +9 -0
- metadata +234 -0
data/.document
ADDED
data/.rspec
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--format nested --color
|
@@ -0,0 +1,33 @@
|
|
1
|
+
h1. Version 2
|
2
|
+
|
3
|
+
h2. Orm
|
4
|
+
|
5
|
+
The macros should allow setting a default :orm, but always allow to specify the orm to use for a particular context.
|
6
|
+
|
7
|
+
h2. Template language
|
8
|
+
|
9
|
+
The macros should allow setting a default :template language (Tlang), but always allow to specify the Tlang to use for a particular context.
|
10
|
+
|
11
|
+
h2. Contexts
|
12
|
+
|
13
|
+
<pre>
|
14
|
+
with :orm => :mongoid, :template_lang => :erb do |app|
|
15
|
+
app.create_model 'User::Guest' do |model|
|
16
|
+
model.add_field :name, :type => :string, :required => true
|
17
|
+
model.add_method :get_stuff, :params => [:a, :b] do
|
18
|
+
'@a = a'
|
19
|
+
end
|
20
|
+
model.add_code do
|
21
|
+
%q{
|
22
|
+
def hello options = {}
|
23
|
+
puts "hi"
|
24
|
+
end
|
25
|
+
}
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
app.create_model 'User::Guest' do |model|
|
30
|
+
model.add_field :name, :type => :string, :required => true
|
31
|
+
end
|
32
|
+
end
|
33
|
+
</pre>
|
data/Gemfile
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
source :rubygems
|
2
|
+
source 'http://gems.github.com/'
|
3
|
+
|
4
|
+
# group :default do
|
5
|
+
# gem "require_all", "~> 1.2.0"
|
6
|
+
# gem "sugar-high", "~> 0.3.6"
|
7
|
+
# gem "activesupport", "~> 3.0.4"
|
8
|
+
# gem 'rails_assist', ">= 0.3.7"
|
9
|
+
# end
|
10
|
+
|
11
|
+
# Add dependencies to develop your gem here.
|
12
|
+
# Include everything needed to run rake, tests, features, etc.
|
13
|
+
group :development do
|
14
|
+
gem "rspec", ">= 2.3.0"
|
15
|
+
gem "bundler", "~> 1.0.0"
|
16
|
+
gem "jeweler", "~> 1.5.2"
|
17
|
+
gem "rcov", ">= 0"
|
18
|
+
end
|
data/LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2009 Kristian Mandrup
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.markdown
ADDED
@@ -0,0 +1,71 @@
|
|
1
|
+
# Rails3 Artifactor
|
2
|
+
|
3
|
+
DSL for operating on various types of Rails 3 application artifacts. The DSL mostly allows performing common CRUD operations etc.
|
4
|
+
This is particularly useful when creating Rails 3 generators, plugins etc. that perform code checks and mutations of the app.
|
5
|
+
The artifactor has in part been designed for use with the *please me* tool. (see my github account)
|
6
|
+
|
7
|
+
## Install
|
8
|
+
|
9
|
+
<code>gem install rails_artifactor</code>
|
10
|
+
|
11
|
+
## Status
|
12
|
+
|
13
|
+
* Specs pass
|
14
|
+
* Still needs some refactoring to tidy it up!
|
15
|
+
|
16
|
+
## Usage
|
17
|
+
|
18
|
+
Introduces the ability to easily load one or more artifact helper modules into your class or module of choice.
|
19
|
+
This will introduce various helper methods geared toward operating a that particular kind of artifact, such as CRUD operations etc.
|
20
|
+
|
21
|
+
<pre>
|
22
|
+
module MyCoolModule
|
23
|
+
use_helpers :model, :controller
|
24
|
+
use_orm :mongoid
|
25
|
+
|
26
|
+
def make_hello_model
|
27
|
+
# this is a method available after loading the :model artifact helper
|
28
|
+
# since orm used is set to :mongoid, it will create a mongoid model file
|
29
|
+
create_model :hello do
|
30
|
+
'# Hello'
|
31
|
+
end
|
32
|
+
|
33
|
+
remove_model :hello if has_model? :hello
|
34
|
+
|
35
|
+
create_controller :hello do
|
36
|
+
...
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
</pre>
|
41
|
+
|
42
|
+
## Update, Okt. 5 2010
|
43
|
+
|
44
|
+
Now includes a very flexible API for specifying view files etc. See *view_file_spec.rb* for usage examples.
|
45
|
+
|
46
|
+
## TODO
|
47
|
+
|
48
|
+
Make DSL even better, fx:
|
49
|
+
<pre>
|
50
|
+
with_model :account do |m|
|
51
|
+
m.create! do
|
52
|
+
'# hello'
|
53
|
+
end
|
54
|
+
|
55
|
+
m.remove!
|
56
|
+
end
|
57
|
+
</pre>
|
58
|
+
|
59
|
+
## Note on Patches/Pull Requests
|
60
|
+
|
61
|
+
* Fork the project.
|
62
|
+
* Make your feature addition or bug fix.
|
63
|
+
* Add tests for it. This is important so I don't break it in a
|
64
|
+
future version unintentionally.
|
65
|
+
* Commit, do not mess with rakefile, version, or history.
|
66
|
+
(if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
|
67
|
+
* Send me a pull request. Bonus points for topic branches.
|
68
|
+
|
69
|
+
## Copyright
|
70
|
+
|
71
|
+
Copyright (c) 2010 Kristian Mandrup. See LICENSE for details.
|
data/Rakefile
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'bundler'
|
3
|
+
begin
|
4
|
+
Bundler.setup(:default, :development)
|
5
|
+
rescue Bundler::BundlerError => e
|
6
|
+
$stderr.puts e.message
|
7
|
+
$stderr.puts "Run `bundle install` to install missing gems"
|
8
|
+
exit e.status_code
|
9
|
+
end
|
10
|
+
require 'rake'
|
11
|
+
|
12
|
+
require 'jeweler'
|
13
|
+
Jeweler::Tasks.new do |gem|
|
14
|
+
# gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
|
15
|
+
gem.name = "rails_artifactor"
|
16
|
+
gem.summary = %Q{Helpers for handling Rails 3 artifacts}
|
17
|
+
gem.description = %Q{Helpers for handling Rails 3 artifacts in general, such as CRUD operations etc.}
|
18
|
+
gem.email = "kmandrup@gmail.com"
|
19
|
+
gem.homepage = "http://github.com/kristianmandrup/rails_artifactor"
|
20
|
+
gem.authors = ["Kristian Mandrup"]
|
21
|
+
|
22
|
+
gem.add_development_dependency "generator-spec", '>= 0.7.3'
|
23
|
+
|
24
|
+
# gem.add_dependency 'migration_assist', "~> 0.1.7"
|
25
|
+
gem.add_dependency "sugar-high", "~> 0.4.0"
|
26
|
+
gem.add_dependency 'rails_assist', "~> 0.4.1"
|
27
|
+
end
|
28
|
+
Jeweler::RubygemsDotOrgTasks.new
|
29
|
+
|
30
|
+
require 'rspec/core'
|
31
|
+
require 'rspec/core/rake_task'
|
32
|
+
RSpec::Core::RakeTask.new(:spec) do |spec|
|
33
|
+
spec.pattern = FileList['spec/**/*_spec.rb']
|
34
|
+
end
|
35
|
+
|
36
|
+
RSpec::Core::RakeTask.new(:rcov) do |spec|
|
37
|
+
spec.pattern = 'spec/**/*_spec.rb'
|
38
|
+
spec.rcov = true
|
39
|
+
end
|
40
|
+
|
41
|
+
task :default => :spec
|
42
|
+
|
43
|
+
require 'rake/rdoctask'
|
44
|
+
Rake::RDocTask.new do |rdoc|
|
45
|
+
version = File.exist?('VERSION') ? File.read('VERSION') : ""
|
46
|
+
|
47
|
+
rdoc.rdoc_dir = 'rdoc'
|
48
|
+
rdoc.title = "rails_assist #{version}"
|
49
|
+
rdoc.rdoc_files.include('README*')
|
50
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
51
|
+
end
|
52
|
+
|
53
|
+
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.3.3
|
@@ -0,0 +1,59 @@
|
|
1
|
+
module RailsAssist
|
2
|
+
module BaseHelper
|
3
|
+
def self.included(base)
|
4
|
+
base.extend ClassMethods
|
5
|
+
base.class_eval do
|
6
|
+
include RailsAssist::App
|
7
|
+
# include ::Thor::Actions
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
module ClassMethods
|
12
|
+
def multi_aliases_for name
|
13
|
+
multi_alias :_after_ => name, :create => :new, :insert_into => [:inject_into, :update], :read => :X_content, :remove => :delete
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
protected
|
18
|
+
|
19
|
+
def get_type options = {}
|
20
|
+
case options
|
21
|
+
when Hash
|
22
|
+
raise ArgumentError, "No artifact type specified #{options}" if !options[:type]
|
23
|
+
options[:type].to_sym
|
24
|
+
when String, Symbol
|
25
|
+
options.to_sym
|
26
|
+
else
|
27
|
+
raise ArgumentError, "Bad artifact type specified #{options}"
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def debug?
|
32
|
+
RailsAssist.debug_on
|
33
|
+
end
|
34
|
+
|
35
|
+
def debug msg
|
36
|
+
puts msg if debug?
|
37
|
+
end
|
38
|
+
|
39
|
+
def set options, type
|
40
|
+
options.merge!(:type => type)
|
41
|
+
options
|
42
|
+
end
|
43
|
+
|
44
|
+
def orm_notify
|
45
|
+
''
|
46
|
+
end
|
47
|
+
|
48
|
+
def marker_option name, options={}
|
49
|
+
type = last_option(options)[:type]
|
50
|
+
marker_content = if type
|
51
|
+
method = :"#{type}_marker"
|
52
|
+
orm_marker = send method, name, options if respond_to? method
|
53
|
+
else
|
54
|
+
name.to_s.camelize
|
55
|
+
end
|
56
|
+
options[:before] ? {:before => marker_content} : {:after => marker_content}
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module RailsAssist::Artifact
|
2
|
+
RailsAssist.artifacts.each do |name|
|
3
|
+
plural_name = name.to_s.pluralize
|
4
|
+
class_eval %{
|
5
|
+
module #{name.to_s.camelize}
|
6
|
+
def create_#{name} name, options={}, &block
|
7
|
+
create_artifact(name, set(options, :#{name}), &block)
|
8
|
+
end
|
9
|
+
end
|
10
|
+
}
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
module RailsAssist::Artifact
|
2
|
+
RailsAssist.artifacts.each do |name|
|
3
|
+
plural_name = name.to_s.pluralize
|
4
|
+
class_eval %{
|
5
|
+
module #{name.to_s.camelize}
|
6
|
+
def remove_#{name} name
|
7
|
+
remove_artifact name, :#{name}
|
8
|
+
end
|
9
|
+
|
10
|
+
def remove_#{plural_name} *names
|
11
|
+
remove_artifacts :#{name}, *names
|
12
|
+
end
|
13
|
+
|
14
|
+
def remove_all_#{plural_name}
|
15
|
+
RailsAssist::Artifact::Files.#{name}_files.each do |file_name|
|
16
|
+
::File.delete_file! file_name if ::File.file?(file_name)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
alias_method :delete_all_#{plural_name}, :remove_all_#{plural_name}
|
20
|
+
|
21
|
+
def remove_#{plural_name} *names
|
22
|
+
return remove_all_#{plural_name} if names.empty?
|
23
|
+
names.to_strings.each do |name|
|
24
|
+
file_name = #{name}_file(name)
|
25
|
+
::File.delete!(file_name) if file_name && ::File.file?(file_name)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
alias_method :delete_#{plural_name}, :remove_#{plural_name}
|
29
|
+
alias_method :remove_#{name}, :remove_#{plural_name}
|
30
|
+
alias_method :delete_#{name}, :remove_#{plural_name}
|
31
|
+
end
|
32
|
+
}
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
module RailsAssist::Artifact
|
2
|
+
RailsAssist.artifacts.each do |name|
|
3
|
+
plural_name = name.to_s.pluralize
|
4
|
+
class_eval %{
|
5
|
+
module #{name.to_s.camelize}
|
6
|
+
def has_#{plural_name}? *names
|
7
|
+
names.to_strings.each do |name|
|
8
|
+
return false if !has_#{name}? name
|
9
|
+
end
|
10
|
+
true
|
11
|
+
end
|
12
|
+
alias_method :#{plural_name}_files?, :has_#{plural_name}?
|
13
|
+
|
14
|
+
def has_#{name}? name, &block
|
15
|
+
begin
|
16
|
+
found = existing_file_name(name, :#{name}).path.file?
|
17
|
+
rescue IOError
|
18
|
+
found = false
|
19
|
+
end
|
20
|
+
yield if block && found
|
21
|
+
found
|
22
|
+
end
|
23
|
+
alias_method :has_#{name}_file?, :has_#{name}?
|
24
|
+
alias_method :#{name}_file?, :has_#{name}?
|
25
|
+
|
26
|
+
|
27
|
+
def read_#{name}(name, options={}, &block)
|
28
|
+
begin
|
29
|
+
read_artifact(name, set(options, :#{name}), &block)
|
30
|
+
rescue
|
31
|
+
nil
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def #{name}_file name, &block
|
36
|
+
begin
|
37
|
+
found = existing_file_name(name, :#{name}).path
|
38
|
+
yield found if block && found
|
39
|
+
found
|
40
|
+
rescue
|
41
|
+
nil
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
}
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module RailsAssist::Artifact
|
2
|
+
RailsAssist.artifacts.each do |name|
|
3
|
+
plural_name = name.to_s.pluralize
|
4
|
+
class_eval %{
|
5
|
+
module #{name.to_s.camelize}
|
6
|
+
def replace_in_#{name} name, options={}, &block
|
7
|
+
replace_in_artifact(name, set(options, :#{name}), &block)
|
8
|
+
end
|
9
|
+
|
10
|
+
def replace_in_#{plural_name} *names, &block
|
11
|
+
replace_in_artifacts *names, &block
|
12
|
+
end
|
13
|
+
|
14
|
+
def insert_into_#{name}(name, options={}, &block)
|
15
|
+
begin
|
16
|
+
insert_into_artifact(name, set(options, :#{name}), &block)
|
17
|
+
true
|
18
|
+
rescue
|
19
|
+
nil
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
}
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'sugar-high/file'
|
2
|
+
require_all File.dirname(__FILE__) + '/crud'
|
3
|
+
|
4
|
+
module RailsAssist::Artifact
|
5
|
+
(RailsAssist.artifacts - [:model]).each do |name|
|
6
|
+
class_eval %{
|
7
|
+
module #{name.to_s.camelize}
|
8
|
+
def new_#{name}_content name, content=nil, options = {}, &block
|
9
|
+
options = options.merge(:type => :#{name}, :content => content)
|
10
|
+
new_artifact_content name, options, &block
|
11
|
+
end
|
12
|
+
end
|
13
|
+
}
|
14
|
+
end
|
15
|
+
|
16
|
+
RailsAssist.artifacts.each do |name|
|
17
|
+
plural_name = name.to_s.pluralize
|
18
|
+
class_eval %{
|
19
|
+
module #{name.to_s.camelize}
|
20
|
+
include RailsAssist::BaseHelper
|
21
|
+
|
22
|
+
def self.included base
|
23
|
+
base.class_eval do
|
24
|
+
include RailsAssist::Artifact::CRUD
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
multi_aliases_for :#{name}
|
29
|
+
end
|
30
|
+
}
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'migration_assist'
|
2
|
+
require 'rails_artifactor/base/file_name'
|
3
|
+
|
4
|
+
module RailsAssist::Artifact
|
5
|
+
(RailsAssist.artifacts - [:migration, :view]).each do |name|
|
6
|
+
class_eval %{
|
7
|
+
module #{name.to_s.camelize}
|
8
|
+
module FileName
|
9
|
+
include RailsAssist::Artifact::FileName
|
10
|
+
|
11
|
+
def #{name}_file_name name, options=nil
|
12
|
+
artifact_path name, :#{name}, options
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
extend FileName
|
17
|
+
include FileName
|
18
|
+
end
|
19
|
+
}
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
require 'migration_assist'
|
2
|
+
require 'sugar-high/regexp'
|
3
|
+
|
4
|
+
module RailsAssist::Artifact
|
5
|
+
module Migration
|
6
|
+
module FileName
|
7
|
+
include ::RailsAssist::Migration::ClassMethods
|
8
|
+
|
9
|
+
DIR = RailsAssist::Artifact::Directory
|
10
|
+
|
11
|
+
class FindError
|
12
|
+
attr_accessor :find_expr
|
13
|
+
|
14
|
+
def initialize find_expr
|
15
|
+
self.find_expr = find_expr
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def migration_file_name name, options={}
|
20
|
+
number = options[:number]
|
21
|
+
|
22
|
+
migration_dir_name = File.expand_path(DIR.migration_dir(options))
|
23
|
+
|
24
|
+
number = next_migration_number(migration_dir_name) if !number
|
25
|
+
File.join(migration_dir_name, "#{number}_#{name}.rb")
|
26
|
+
end
|
27
|
+
|
28
|
+
def find_migration name, options={}
|
29
|
+
root_path = options[:root_path]
|
30
|
+
|
31
|
+
migration_dir_name = File.expand_path(DIR.migration_dir options)
|
32
|
+
|
33
|
+
migration_find_expr = "#{migration_dir_name}/[0-9]*_*.rb"
|
34
|
+
migrations = Dir.glob(migration_find_expr)
|
35
|
+
|
36
|
+
find_err = FindError.new migration_find_expr
|
37
|
+
|
38
|
+
return find_err if migrations.empty?
|
39
|
+
|
40
|
+
migration_find_expr = /\d+_#{name}\.rb$/
|
41
|
+
find_err.find_expr = migration_find_expr
|
42
|
+
|
43
|
+
matching_migrations = migrations.grep_it(migration_find_expr)
|
44
|
+
|
45
|
+
return find_err if matching_migrations.empty?
|
46
|
+
|
47
|
+
migration_file = (options[:last]) ? matching_migrations.last : matching_migrations.first
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
include FileName
|
52
|
+
extend FileName
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,172 @@
|
|
1
|
+
module RailsAssist::Artifact
|
2
|
+
module View
|
3
|
+
module FileName
|
4
|
+
DIR = RailsAssist::Artifact::Directory
|
5
|
+
|
6
|
+
module Helper
|
7
|
+
def default_template_lang
|
8
|
+
get_type :erb
|
9
|
+
end
|
10
|
+
|
11
|
+
def get_type type
|
12
|
+
case type.to_s
|
13
|
+
when 'erb'
|
14
|
+
'html.erb'
|
15
|
+
when 'haml'
|
16
|
+
'html.haml'
|
17
|
+
else
|
18
|
+
type
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def get_view_type type
|
23
|
+
get_type(type.empty? ? default_template_lang : type)
|
24
|
+
end
|
25
|
+
|
26
|
+
def filename_type str
|
27
|
+
str.split('.')[1..-1].join('.')
|
28
|
+
end
|
29
|
+
|
30
|
+
def filename_name str
|
31
|
+
str.gsub /\.(.*)/, ''
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def view_file_name *args
|
36
|
+
folder, action, type = get_view_args(args)
|
37
|
+
options = last_option args
|
38
|
+
root_path = options[:root_path]
|
39
|
+
views_path = options[:views_path]
|
40
|
+
views_path ||= File.join(root_path, 'app/views') if root_path
|
41
|
+
# puts "views: #{views_path}"
|
42
|
+
File.expand_path File.join(views_path || DIR.view_dir, folder.to_s, "#{action}.#{type}")
|
43
|
+
end
|
44
|
+
|
45
|
+
def get_view_args *args
|
46
|
+
args = args.flatten
|
47
|
+
raise ArgumentError, "view_file_name must be called with one or more arguments to return a view file" if args.size == 0
|
48
|
+
case args.size
|
49
|
+
when 1
|
50
|
+
SingleArg.get_view_args *args
|
51
|
+
else
|
52
|
+
TwoArgs.get_view_args *args
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
module SingleArg
|
58
|
+
def self.get_view_args *args
|
59
|
+
args = args.flatten
|
60
|
+
arg = args.first
|
61
|
+
case arg
|
62
|
+
when Hash
|
63
|
+
# view_file(:person => :show).should == /views\/person\/show\.html\.erb/
|
64
|
+
return HashArg.get_view_args arg if arg.keys.size == 1
|
65
|
+
# view_file(:folder => 'person', :type => :show).should == /views\/person\/show\.html\.erb/
|
66
|
+
HashArgs.get_view_args *args
|
67
|
+
when Symbol, String
|
68
|
+
TwoArgs.get_view_args *args
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
module HashArg
|
73
|
+
extend RailsAssist::Artifact::View::FileName::Helper
|
74
|
+
|
75
|
+
# view_file(:person => :show).should == /views\/person\/show\.html\.erb/
|
76
|
+
def self.get_view_args one_hash
|
77
|
+
folder = one_hash.keys.first.to_s
|
78
|
+
filename = one_hash.values.first.to_s
|
79
|
+
action = filename_name filename
|
80
|
+
type = get_view_type(filename_type filename)
|
81
|
+
[folder, action, type]
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
module HashArgs
|
86
|
+
extend RailsAssist::Artifact::View::FileName::Helper
|
87
|
+
|
88
|
+
DIR = RailsAssist::Artifact::Directory
|
89
|
+
|
90
|
+
# view_file(:folder => 'person', :action => :show, :type => :erb).should == /views\/person\/show\.html\.erb/
|
91
|
+
def self.get_view_args hash
|
92
|
+
try_folder = hash.keys.first
|
93
|
+
try_view_folder = File.expand_path(File.join(DIR.view_dir, try_folder.to_s))
|
94
|
+
if File.directory? try_view_folder
|
95
|
+
folder = try_folder
|
96
|
+
action = hash.values.first
|
97
|
+
else
|
98
|
+
folder = hash[:folder]
|
99
|
+
action = hash[:action]
|
100
|
+
end
|
101
|
+
type = get_view_type(hash[:type])
|
102
|
+
[folder, action, type]
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
module StringArg
|
107
|
+
extend RailsAssist::Artifact::View::FileName::Helper
|
108
|
+
|
109
|
+
# view_file('person/show').should == /views\/person\/show\.html\.erb/
|
110
|
+
def self.get_view_args string
|
111
|
+
path_lvs = string.split('/')
|
112
|
+
raise ArgumentError, "view must be in a subfolder #{args}" if path_lvs.size < 2
|
113
|
+
folder = path_lvs[0..-2].join('/')
|
114
|
+
filename = path_lvs.last
|
115
|
+
action = filename_name filename
|
116
|
+
type = get_view_type(filename_type filename)
|
117
|
+
[folder, action, type]
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
module TwoArgs
|
123
|
+
def self.get_view_args *args
|
124
|
+
args = args.flatten
|
125
|
+
arg2 = args[1]
|
126
|
+
res = case arg2
|
127
|
+
when String, Symbol
|
128
|
+
# view_file(:person, :show).should == /views\/person\/show\.html\.erb/
|
129
|
+
# view_file('person/admin', :show, :type => :erb).should == /views\/person\/show\.html\.erb/
|
130
|
+
TwoLabels.get_view_args args
|
131
|
+
when Hash
|
132
|
+
# view_file(:show, :folder => 'person', :type => :erb).should == /views\/person\/show\.html\.erb/
|
133
|
+
ActionAndHash.get_view_args args
|
134
|
+
end
|
135
|
+
end
|
136
|
+
|
137
|
+
module TwoLabels
|
138
|
+
extend RailsAssist::Artifact::View::FileName::Helper
|
139
|
+
|
140
|
+
# view_file(:person, :show).should == /views\/person\/show\.html\.erb/
|
141
|
+
# view_file('person/admin', :show, :type => :erb).should == /views\/person\/show\.html\.erb/
|
142
|
+
def self.get_view_args *args
|
143
|
+
args = args.flatten
|
144
|
+
folder = args.first.to_s
|
145
|
+
action = args[1].to_s
|
146
|
+
hash = args[2] if args.size > 2
|
147
|
+
type = get_view_type(hash ? hash[:type] : nil)
|
148
|
+
[folder, action, type]
|
149
|
+
end
|
150
|
+
end
|
151
|
+
|
152
|
+
module ActionAndHash
|
153
|
+
extend RailsAssist::Artifact::View::FileName::Helper
|
154
|
+
|
155
|
+
# view_file(:show, :folder => 'person', :type => :erb).should == /views\/person\/show\.html\.erb/
|
156
|
+
def self.get_view_args *args
|
157
|
+
args = args.flatten
|
158
|
+
action = args.first.to_s
|
159
|
+
|
160
|
+
hash = args.last
|
161
|
+
folder = hash[:folder]
|
162
|
+
type = get_view_type(hash[:type])
|
163
|
+
|
164
|
+
[folder, action, type]
|
165
|
+
end
|
166
|
+
end
|
167
|
+
end
|
168
|
+
|
169
|
+
include FileName
|
170
|
+
extend FileName
|
171
|
+
end
|
172
|
+
end
|