rails_artifactor 0.3.3
Sign up to get free protection for your applications and to get access to all the features.
- 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
@@ -0,0 +1,73 @@
|
|
1
|
+
module RailsAssist::Artifact
|
2
|
+
module Marker
|
3
|
+
def marker name, type, options=nil
|
4
|
+
method = "#{type}_marker"
|
5
|
+
raise "No such marker method in this context: #{self}, ##{method}" if !respond_to? method
|
6
|
+
send method, name, options
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
module Controller
|
11
|
+
def controller_marker name, options=nil
|
12
|
+
"#{name.to_s.camelize}Controller < ActionController::Base"
|
13
|
+
end
|
14
|
+
|
15
|
+
extend self
|
16
|
+
end
|
17
|
+
|
18
|
+
module Helper
|
19
|
+
def helper_marker name, options=nil
|
20
|
+
"#{name.to_s.camelize}Helper"
|
21
|
+
end
|
22
|
+
|
23
|
+
extend self
|
24
|
+
end
|
25
|
+
|
26
|
+
module Permit
|
27
|
+
def permit_marker name, options=nil
|
28
|
+
"#{name.to_s.camelize}Permit < Permit::Base"
|
29
|
+
end
|
30
|
+
|
31
|
+
extend self
|
32
|
+
end
|
33
|
+
|
34
|
+
module Mailer
|
35
|
+
def mailer_marker name, options=nil
|
36
|
+
"#{name.to_s.camelize}Mailer < ActionMailer::Base"
|
37
|
+
end
|
38
|
+
|
39
|
+
extend self
|
40
|
+
end
|
41
|
+
|
42
|
+
module Observer
|
43
|
+
def observer_marker name, options=nil
|
44
|
+
"#{name.to_s.camelize}Observer < ActiveRecord::Observer"
|
45
|
+
end
|
46
|
+
|
47
|
+
extend self
|
48
|
+
end
|
49
|
+
|
50
|
+
module Migration
|
51
|
+
def migration_marker name, options=nil
|
52
|
+
"#{name.to_s.camelize} < ActiveRecord::Migration"
|
53
|
+
end
|
54
|
+
|
55
|
+
extend self
|
56
|
+
end
|
57
|
+
|
58
|
+
module Model
|
59
|
+
include RailsAssist::BaseHelper
|
60
|
+
|
61
|
+
def model_marker name, options={}
|
62
|
+
return send :orm_marker_name, name, options if respond_to?(:orm_marker_name)
|
63
|
+
name.to_s.camelize
|
64
|
+
end
|
65
|
+
|
66
|
+
def orm_notify
|
67
|
+
". You must specify an ORM with the macro use_orm, f.ex -- use_orm :active_record"
|
68
|
+
end
|
69
|
+
|
70
|
+
extend self
|
71
|
+
end
|
72
|
+
|
73
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
require 'migration_assist'
|
2
|
+
|
3
|
+
RailsAssist::Migration.rails_root_dir = RailsAssist::Directory.rails_root
|
4
|
+
|
5
|
+
module RailsAssist::Artifact
|
6
|
+
module Migration
|
7
|
+
include RailsAssist::BaseHelper
|
8
|
+
include RailsAssist::Migration::ClassMethods
|
9
|
+
include RailsAssist::Artifact::FileName
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module RailsAssist::Orm
|
2
|
+
module ActiveRecord
|
3
|
+
include RailsAssist::Orm::Base
|
4
|
+
|
5
|
+
def orm_marker_name name, options=nil
|
6
|
+
'ActiveRecord::Base'
|
7
|
+
end
|
8
|
+
|
9
|
+
def new_model_content name, options={}, &block
|
10
|
+
content = block ? yield : options[:content]
|
11
|
+
file_w_inherit(name, orm_marker_name(name, options)) { content }
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module RailsAssist::Orm
|
2
|
+
module DataMapper
|
3
|
+
include RailsAssist::Orm::Base
|
4
|
+
|
5
|
+
def orm_name
|
6
|
+
'DataMapper'
|
7
|
+
end
|
8
|
+
|
9
|
+
def orm_marker_name name, options=nil
|
10
|
+
"#{orm_name}::Resource"
|
11
|
+
end
|
12
|
+
|
13
|
+
def new_model_content name, options={}, &block
|
14
|
+
content = block ? yield : options[:content]
|
15
|
+
file_w_include(name, orm_marker_name(name, options)) { content }
|
16
|
+
end
|
17
|
+
|
18
|
+
def field_name
|
19
|
+
'property'
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module RailsAssist::Orm
|
2
|
+
module MongoMapper
|
3
|
+
include RailsAssist::Orm::Base
|
4
|
+
|
5
|
+
def orm_name
|
6
|
+
'MongoMapper'
|
7
|
+
end
|
8
|
+
|
9
|
+
def new_model_content name, options={}, &block
|
10
|
+
content = block ? yield : options[:content]
|
11
|
+
file_w_include(name, orm_marker_name(name, options)) { content }
|
12
|
+
end
|
13
|
+
|
14
|
+
def field_name
|
15
|
+
'key'
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module RailsAssist::Orm
|
2
|
+
module Mongoid
|
3
|
+
include RailsAssist::Orm::Base
|
4
|
+
|
5
|
+
def orm_name
|
6
|
+
'Mongoid'
|
7
|
+
end
|
8
|
+
|
9
|
+
def field_name
|
10
|
+
'field'
|
11
|
+
end
|
12
|
+
|
13
|
+
def new_model_content name, options={}, &block
|
14
|
+
content = block ? yield : options[:content]
|
15
|
+
file_w_include(name, orm_marker_name(name, options)) { content }
|
16
|
+
end
|
17
|
+
|
18
|
+
def field name, type = nil
|
19
|
+
return "#{field_name} :#{name}, :type => #{type}" if type
|
20
|
+
"#{field_name} :#{name}"
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'active_support/inflector'
|
2
|
+
|
3
|
+
module RailsAssist::Orm
|
4
|
+
module None
|
5
|
+
include RailsAssist::Orm::Base
|
6
|
+
|
7
|
+
def orm_marker_name name, options=nil
|
8
|
+
name.to_s.camelize
|
9
|
+
end
|
10
|
+
|
11
|
+
def new_model_content name, options={}, &block
|
12
|
+
content = block ? yield : options[:content]
|
13
|
+
simple_file(name, orm_marker_name(name, options)) { content }
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
module RailsAssist
|
2
|
+
module Orm
|
3
|
+
module Base
|
4
|
+
def self.included base
|
5
|
+
base.class_eval do
|
6
|
+
include RailsAssist::Artifact::Model
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
protected
|
11
|
+
|
12
|
+
def orm_marker_name name, options = {:model_type => :document}
|
13
|
+
document_name options
|
14
|
+
end
|
15
|
+
|
16
|
+
def document_name options = {:model_type => :document}
|
17
|
+
type_content = options[:model_type] == :embedded ? "#{orm_name}::EmbeddedDocument" : "#{orm_name}::Document"
|
18
|
+
end
|
19
|
+
|
20
|
+
def clazz name
|
21
|
+
"class #{name.to_s.camelize}"
|
22
|
+
end
|
23
|
+
|
24
|
+
def file name, include_stmt, &block
|
25
|
+
%Q{#{clazz name}
|
26
|
+
#{include_stmt}
|
27
|
+
#{yield if block}
|
28
|
+
end}
|
29
|
+
end
|
30
|
+
|
31
|
+
def file_w_include name, module_name, &block
|
32
|
+
file name, "include #{module_name}", &block
|
33
|
+
end
|
34
|
+
|
35
|
+
def simple_file name, module_name, &block
|
36
|
+
%Q{#{clazz name}
|
37
|
+
#{yield if block}
|
38
|
+
end}
|
39
|
+
end
|
40
|
+
|
41
|
+
def file_w_inherit name, module_name, &block
|
42
|
+
%Q{#{clazz name} < #{module_name}
|
43
|
+
#{yield if block}
|
44
|
+
end}
|
45
|
+
end
|
46
|
+
|
47
|
+
def field name, type = nil
|
48
|
+
return "#{field_name} :#{name}, #{type}" if type
|
49
|
+
"#{field_name} :#{name}"
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
require_all File.dirname(__FILE__) + '/orm'
|
@@ -0,0 +1,94 @@
|
|
1
|
+
module RailsAssist::Artifact
|
2
|
+
module View
|
3
|
+
include RailsAssist::BaseHelper
|
4
|
+
include RailsAssist::Artifact::CRUD
|
5
|
+
|
6
|
+
def has_view? name, *args, &block
|
7
|
+
file_name = view_file_name(name, args)
|
8
|
+
file_name.path.file?
|
9
|
+
end
|
10
|
+
|
11
|
+
def has_views? *args, &block
|
12
|
+
options = last_option args
|
13
|
+
args.to_strings.each do |name|
|
14
|
+
return false if !has_view? name, options
|
15
|
+
end
|
16
|
+
true
|
17
|
+
end
|
18
|
+
|
19
|
+
def view_file *args
|
20
|
+
view_file_name(args)
|
21
|
+
end
|
22
|
+
|
23
|
+
# CREATE
|
24
|
+
def create_view *args, &block
|
25
|
+
file_name = view_file_name(args)
|
26
|
+
dir = File.dirname(file_name)
|
27
|
+
FileUtils.mkdir_p dir if !File.directory?(dir)
|
28
|
+
|
29
|
+
content = get_view_content(args) || yield if block
|
30
|
+
|
31
|
+
# abort if no content given
|
32
|
+
debug "Warning: Content must be passed in either as a :content hash or a block" if !content
|
33
|
+
return nil if !content
|
34
|
+
|
35
|
+
debug "Writing view file: #{file_name}"
|
36
|
+
# write file content of view
|
37
|
+
File.open(file_name, 'w') do |f|
|
38
|
+
f.puts content
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
# READ
|
43
|
+
def read_view *args, &block
|
44
|
+
file_name = view_file_name(args)
|
45
|
+
debug "reading from: #{file_name}"
|
46
|
+
begin
|
47
|
+
file = File.new(file_name)
|
48
|
+
content = file.read
|
49
|
+
debug "read content: #{content}"
|
50
|
+
yield content if block
|
51
|
+
content
|
52
|
+
rescue
|
53
|
+
nil
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
# UPDATE
|
58
|
+
def insert_into_view *args, &block
|
59
|
+
begin
|
60
|
+
file_name = view_file_name(args)
|
61
|
+
debug "file insertion (view): #{file_name}"
|
62
|
+
options = last_option args
|
63
|
+
raise ArgumentError, ":before or :after option must be specified for insertion" if !(options[:before] || options[:after])
|
64
|
+
File.insert_into file_name, options, &block
|
65
|
+
true
|
66
|
+
rescue
|
67
|
+
nil
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
# DELETE
|
72
|
+
def remove_view *args
|
73
|
+
file = view_file_name(args)
|
74
|
+
FileUtils.rm_f(file) if File.exist?(file)
|
75
|
+
end
|
76
|
+
|
77
|
+
# remove_views :edit, :show, :folder => :person
|
78
|
+
def remove_views *args
|
79
|
+
options = last_option args
|
80
|
+
raise ArgumentError, "Missing :folder option in the last argument which must be a Hash" if !options && !options[:folder]
|
81
|
+
args.to_symbols.each{|name| remove_view name, options}
|
82
|
+
end
|
83
|
+
|
84
|
+
def get_view_content args
|
85
|
+
args = args.flatten
|
86
|
+
case args.first
|
87
|
+
when Hash
|
88
|
+
args.first[:content]
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
multi_aliases_for :view
|
93
|
+
end
|
94
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
require_all File.dirname(__FILE__) + '/artifact'
|
@@ -0,0 +1,62 @@
|
|
1
|
+
require 'rails_artifactor/ruby_mutator'
|
2
|
+
|
3
|
+
module RailsAssist::Artifact::CRUD
|
4
|
+
module Create
|
5
|
+
include RailsAssist::Artifact::Marker
|
6
|
+
|
7
|
+
def create_artifact name, options={}, &block
|
8
|
+
type = get_type(options)
|
9
|
+
file = make_file_name(name, type)
|
10
|
+
return nil if File.exist?(file) && options[:no_overwrite]
|
11
|
+
|
12
|
+
create_artifact_dir(file)
|
13
|
+
content = get_content(name, type, options, &block)
|
14
|
+
|
15
|
+
superclass = options[:superclass] if options[:superclass]
|
16
|
+
|
17
|
+
if superclass
|
18
|
+
content.extend(RailsAssist::RubyMutator)
|
19
|
+
content.remove_superclass
|
20
|
+
content.inherit_from "#{superclass}_permit"
|
21
|
+
end
|
22
|
+
|
23
|
+
return if content.blank?
|
24
|
+
|
25
|
+
File.overwrite file, content
|
26
|
+
end
|
27
|
+
|
28
|
+
protected
|
29
|
+
|
30
|
+
def new_artifact_content name, options = {}, &block
|
31
|
+
type = get_type(options)
|
32
|
+
content = extract_content type, options, &block
|
33
|
+
%Q{class #{marker(name, type)}
|
34
|
+
#{content}
|
35
|
+
end}
|
36
|
+
end
|
37
|
+
|
38
|
+
def create_artifact_dir file
|
39
|
+
# make dir
|
40
|
+
dir = File.dirname(file)
|
41
|
+
FileUtils.mkdir_p dir if !File.directory?(dir)
|
42
|
+
end
|
43
|
+
|
44
|
+
def content_method type
|
45
|
+
method = :"new_#{type}_content"
|
46
|
+
raise "Content method #{content_method} not found #{orm_notify}" if !respond_to?(method)
|
47
|
+
method
|
48
|
+
end
|
49
|
+
|
50
|
+
def extract_content type, options, &block
|
51
|
+
content = block ? yield : options[:content]
|
52
|
+
content = type == :model ? options.merge(:content => content) : content
|
53
|
+
end
|
54
|
+
|
55
|
+
def get_content name, type, options = {}, &block
|
56
|
+
content = extract_content type, options, &block
|
57
|
+
method = content_method(type)
|
58
|
+
options[:content] = content
|
59
|
+
send method, name, options, &block
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'sugar-high/array'
|
2
|
+
|
3
|
+
require 'rails_artifactor/artifact/file_name/view'
|
4
|
+
|
5
|
+
module RailsAssist::Artifact::CRUD
|
6
|
+
module Delete
|
7
|
+
class ViewHelper
|
8
|
+
extend RailsAssist::Artifact::View::FileName
|
9
|
+
end
|
10
|
+
|
11
|
+
def remove_artifact name, *args
|
12
|
+
file = ViewHelper.view_file_name(name, args)
|
13
|
+
return FileUtils.rm_f(file) if File.exist?(file)
|
14
|
+
|
15
|
+
type = args.first
|
16
|
+
type = type[:type] if type.kind_of? Hash
|
17
|
+
begin
|
18
|
+
file = existing_file_name name, type
|
19
|
+
FileUtils.rm_f(file)
|
20
|
+
debug "removed artifact: #{name}"
|
21
|
+
true
|
22
|
+
rescue
|
23
|
+
debug "artifact to remove not found: #{name}"
|
24
|
+
nil
|
25
|
+
end
|
26
|
+
end
|
27
|
+
alias_method :delete_artifact, :remove_artifact
|
28
|
+
|
29
|
+
def remove_artifacts *names
|
30
|
+
type = last_option(names)[:type]
|
31
|
+
names.flatten.select_labels.each{|name| remove_artifact(name, type) }
|
32
|
+
end
|
33
|
+
alias_method :delete_artifacts, :remove_artifacts
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'sugar-high/file'
|
2
|
+
|
3
|
+
module RailsAssist::Artifact::CRUD
|
4
|
+
module Read
|
5
|
+
# TODO: Support :before and :after hash options!
|
6
|
+
def read_artifact(name, options = {}, &block)
|
7
|
+
type = get_type(options)
|
8
|
+
file_name = existing_file_name(name, type)
|
9
|
+
debug "reading from: #{file_name}"
|
10
|
+
File.read_from file_name, options, &block
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
require 'sugar-high/arguments'
|
2
|
+
|
3
|
+
module RailsAssist::Artifact::CRUD
|
4
|
+
module Update
|
5
|
+
def insert_into_artifact name, options={}, &block
|
6
|
+
type = get_type(options)
|
7
|
+
file = existing_file_name(name, type)
|
8
|
+
|
9
|
+
raise "No file could be determined: #{file} from name: #{name} of type: #{type}" if !file
|
10
|
+
raise "File to insert in not found: #{file} for #{type}" if !File.file?(file)
|
11
|
+
|
12
|
+
marker = marker_option(name, options)
|
13
|
+
|
14
|
+
blip = send :"#{type}_marker", name, options
|
15
|
+
options1 = options.merge marker
|
16
|
+
|
17
|
+
before_last = options[:before_last]
|
18
|
+
|
19
|
+
res = File.insert_into file, options1, &block
|
20
|
+
if !res
|
21
|
+
# try with :embedded option if default doesn't work
|
22
|
+
mrk_opt = marker_option name, options.merge(:model_type => :embedded)
|
23
|
+
options.merge! mrk_opt
|
24
|
+
|
25
|
+
File.insert_into file, options, &block
|
26
|
+
end
|
27
|
+
end
|
28
|
+
alias_method :update_artifact, :insert_into_artifact
|
29
|
+
|
30
|
+
def remove_from_artifact name, options={}, &block
|
31
|
+
type = options[:type]
|
32
|
+
file = existing_file_name(name, type)
|
33
|
+
File.remove_content_from file, options, &block
|
34
|
+
end
|
35
|
+
|
36
|
+
def remove_from_artifacts *names, &block
|
37
|
+
options = last_option(names)
|
38
|
+
type = options[:type]
|
39
|
+
artifacts = names.flatten.select_labels
|
40
|
+
|
41
|
+
artifacts.each do |name|
|
42
|
+
file = existing_file_name(name, type)
|
43
|
+
File.remove_content_from file, options, &block
|
44
|
+
end
|
45
|
+
end
|
46
|
+
alias_hash :remove_from_artifact => :delete_from_artifact, :pluralize => true
|
47
|
+
|
48
|
+
def replace_in_artifact name, options={}, &block
|
49
|
+
type = options[:type]
|
50
|
+
file = existing_file_name(name, type)
|
51
|
+
File.replace_content_from file, options, &block
|
52
|
+
end
|
53
|
+
|
54
|
+
def replace_in_artifacts *names, &block
|
55
|
+
options = last_option(names)
|
56
|
+
type = options[:type]
|
57
|
+
artifacts = names.flatten.select_labels
|
58
|
+
|
59
|
+
artifacts.each do |name|
|
60
|
+
file = existing_file_name(name, type)
|
61
|
+
File.replace_content_from file, options, &block
|
62
|
+
end
|
63
|
+
end
|
64
|
+
alias_hash :replace_in_artifact => :update_artifact, :pluralize => true
|
65
|
+
end
|
66
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'rails_assist/artifact'
|
2
|
+
|
3
|
+
module RailsAssist::Artifact
|
4
|
+
module FileName
|
5
|
+
include RailsAssist::Artifact::Directory
|
6
|
+
include RailsAssist::Artifact::Path
|
7
|
+
|
8
|
+
def make_file_name name, type, options={}
|
9
|
+
send :"#{type}_file_name", name, options
|
10
|
+
end
|
11
|
+
|
12
|
+
def existing_file_name name, type=nil, options = {}
|
13
|
+
# first try finder method
|
14
|
+
finder_method = :"find_#{type}"
|
15
|
+
if respond_to?(finder_method)
|
16
|
+
result = send finder_method, name, options
|
17
|
+
if !result.kind_of? String
|
18
|
+
raise IOError, "The call to #find_#{type}(#{name}) didn't find an existing #{type} file. Error in find expression: #{result.find_expr}"
|
19
|
+
end
|
20
|
+
return result
|
21
|
+
elsif type == :migration
|
22
|
+
raise StandardError, "The method #find_#{type} to find the migration is not available!"
|
23
|
+
end
|
24
|
+
|
25
|
+
# default for non-migration
|
26
|
+
file_name = make_file_name name, type, options
|
27
|
+
raise IOError, "No file for :#{type} found at location: #{file_name}" if !File.file?(file_name)
|
28
|
+
file_name
|
29
|
+
end
|
30
|
+
|
31
|
+
RailsAssist.artifacts.each do |name|
|
32
|
+
class_eval %{
|
33
|
+
def existing_#{name}_file name, type=nil, options = {}
|
34
|
+
existing_file_name name, type, options
|
35
|
+
end
|
36
|
+
}
|
37
|
+
end
|
38
|
+
end # file_name
|
39
|
+
|
40
|
+
include FileName
|
41
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
require_all File.dirname(__FILE__) + '/base'
|
@@ -0,0 +1 @@
|
|
1
|
+
require_all File.dirname(__FILE__) + '/rspec'
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module RailsAssist
|
2
|
+
module TemplateLanguage
|
3
|
+
class Base
|
4
|
+
def insert_ruby_statement statement, options = {}, &block
|
5
|
+
end
|
6
|
+
|
7
|
+
def insert_ruby_block statement, options = {}, &block
|
8
|
+
end
|
9
|
+
|
10
|
+
def insert_tag tag, css, options= {}, &block
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module RailsAssist
|
2
|
+
module TemplateLanguage
|
3
|
+
class Erb < Base
|
4
|
+
def insert_ruby_statement statement, options = {}
|
5
|
+
"<%= #{statement} %>"
|
6
|
+
end
|
7
|
+
|
8
|
+
def insert_ruby_block statement, options = {}, &block
|
9
|
+
%Q{"<%= #{statement} %>"
|
10
|
+
#{yield}
|
11
|
+
<% end %>
|
12
|
+
}
|
13
|
+
# insert_content options
|
14
|
+
end
|
15
|
+
|
16
|
+
def insert_tag tag, attributes, options= {}, &block
|
17
|
+
%Q{"<#{tag} #{attributes}>"
|
18
|
+
#{yield}
|
19
|
+
<#{tag}/>
|
20
|
+
}
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module RailsAssist
|
2
|
+
module TemplateLanguage
|
3
|
+
class Haml < Base
|
4
|
+
def insert_ruby_statement statement, options = {}
|
5
|
+
"\n= #{statement}"
|
6
|
+
end
|
7
|
+
|
8
|
+
def insert_ruby_block statement, options = {}, &block
|
9
|
+
# get indentation of previous line
|
10
|
+
%Q{"<%= #{statement} %>"
|
11
|
+
#{yield}
|
12
|
+
<% end %>
|
13
|
+
}
|
14
|
+
end
|
15
|
+
|
16
|
+
def insert_tag tag, options= {}, &block
|
17
|
+
attributes = options[:attributes]
|
18
|
+
atr_atr = "{#{format attributes}}" if attributes
|
19
|
+
%Q{"%#{tag}#{atr_atr}"
|
20
|
+
#{yield}
|
21
|
+
<#{tag}/>
|
22
|
+
}
|
23
|
+
end
|
24
|
+
|
25
|
+
protected
|
26
|
+
|
27
|
+
def format attributes
|
28
|
+
attributes.map{|key, value| ":#{key} => \"#{value}\""}
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|