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
@@ -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
|