mage 0.1.1 → 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +6 -2
- data/{db/migrate/20160407080915_create_mage_steps.rb → lib/generators/mage/active_record_migration.rb} +0 -0
- data/lib/generators/mage/mage_generator.rb +22 -0
- data/lib/mage.rb +3 -79
- data/lib/mage/action_controller_patch.rb +40 -0
- data/lib/mage/active_record_patch.rb +35 -0
- data/lib/mage/mage_step.rb +5 -0
- data/lib/mage/version.rb +1 -1
- metadata +6 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ecf49becdb6d43257e9b308f7ee53114662c39f1
|
4
|
+
data.tar.gz: 0ed26162e3e5e53a9d604cf3bfd9919873744178
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 74c083341de4cf56d0c6249e65cf8e3a87dcc5ebec566c84a0b3e80f1e81c2da0d42c03356aeb5a1d714b7d493d68bbb3f2b9421cd2f06499e1949ee25665f38
|
7
|
+
data.tar.gz: 8b85ab4347022b0ad8754d58ca9421cb265244cc60d764de51271510d5b17ff5ab670c1c288db514cd9f20b0b4e36f7b3035f6eeeb03cff15ac697cbd31faaf8
|
data/README.md
CHANGED
@@ -14,7 +14,11 @@ And then execute:
|
|
14
14
|
|
15
15
|
$ bundle install
|
16
16
|
|
17
|
-
After that
|
17
|
+
After that generate migration:
|
18
|
+
|
19
|
+
$ rails g mage
|
20
|
+
|
21
|
+
And migrate your database:
|
18
22
|
|
19
23
|
$ rake db:migrate
|
20
24
|
|
@@ -103,7 +107,7 @@ Bug reports and pull requests are welcome on GitHub at https://github.com/effect
|
|
103
107
|
|
104
108
|
I think there's a lot of stuff to do. Here's just examples:
|
105
109
|
* ~~Keep flash messages if showing step~~
|
106
|
-
* Generator
|
110
|
+
* ~~Generator~~
|
107
111
|
* Tests
|
108
112
|
|
109
113
|
## License
|
File without changes
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'rails/generators'
|
2
|
+
require 'rails/generators/migration'
|
3
|
+
|
4
|
+
class MageGenerator < Rails::Generators::Base
|
5
|
+
include Rails::Generators::Migration
|
6
|
+
|
7
|
+
def self.source_root
|
8
|
+
@source_root ||= File.dirname(__FILE__)
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.next_migration_number(dirname)
|
12
|
+
if ActiveRecord::Base.timestamped_migrations
|
13
|
+
Time.new.utc.strftime("%Y%m%d%H%M%S")
|
14
|
+
else
|
15
|
+
"%.3d" % (current_migration_number(dirname) + 1)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def create_migration_file
|
20
|
+
migration_template 'active_record_migration.rb', 'db/migrate/create_mage_steps.rb'
|
21
|
+
end
|
22
|
+
end
|
data/lib/mage.rb
CHANGED
@@ -1,83 +1,7 @@
|
|
1
1
|
require 'mage/version'
|
2
|
+
require 'mage/mage_step'
|
3
|
+
require 'mage/active_record_patch'
|
4
|
+
require 'mage/action_controller_patch'
|
2
5
|
|
3
|
-
module Mage
|
4
|
-
class WizardRendered < Exception
|
5
|
-
end
|
6
6
|
|
7
|
-
class MageStep < ActiveRecord::Base
|
8
|
-
belongs_to :object, polymorphic: true
|
9
|
-
end
|
10
|
-
end
|
11
|
-
|
12
|
-
class ActiveRecord::Base
|
13
|
-
def self.has_mage_steps(*steps)
|
14
|
-
@@mage_steps = steps
|
15
|
-
after_save :mage_after_save
|
16
|
-
after_destroy { Mage::MageStep.where(object_id: self.id, object_type: self.model_name.name).try(:take).try(:destroy) }
|
17
|
-
|
18
|
-
define_method :mage_steps do
|
19
|
-
@@mage_steps
|
20
|
-
end
|
21
|
-
|
22
|
-
instance_eval do
|
23
|
-
define_method :mage_step do
|
24
|
-
Mage::MageStep.where(object_id: self.id, object_type: self.model_name.name)
|
25
|
-
.try(:take).try(:step).try(:to_sym) || @@mage_steps.first
|
26
|
-
end
|
27
|
-
|
28
|
-
steps.each_with_index do |step, index|
|
29
|
-
define_method "mage_step_#{step}?" do
|
30
|
-
index <= (@@mage_steps.find_index(mage_step) || @@mage_steps.count)
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
define_method :mage_after_save do
|
35
|
-
if mage_step != :done
|
36
|
-
mage_model = Mage::MageStep.where(object_id: id, object_type: model_name.name).try(:take) ||
|
37
|
-
Mage::MageStep.create(object_id: id, object_type: model_name.name, step: mage_step)
|
38
|
-
mage_model.update(step: (@@mage_steps[@@mage_steps.find_index(mage_step) + 1] || :done))
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
private :mage_after_save
|
43
|
-
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
class ActionController::Base
|
49
|
-
rescue_from Mage::WizardRendered, with: :mage_return
|
50
|
-
|
51
|
-
def render_mage(object, options = {})
|
52
|
-
puts "#{object}"
|
53
|
-
unless object.mage_step == :done
|
54
|
-
if request.method == 'GET'
|
55
|
-
if options[:show_step] && params[:step].blank?
|
56
|
-
mage_redirect(object, options[:show_step])
|
57
|
-
else
|
58
|
-
if flash["#{object.model_name.name.downcase}_errors"]
|
59
|
-
flash["#{object.model_name.name.downcase}_errors"].each do |attribute, errors|
|
60
|
-
errors.each { |error| object.errors[attribute] << error }
|
61
|
-
end
|
62
|
-
end
|
63
|
-
render "#{params[:controller]}/steps/#{object.mage_step}"
|
64
|
-
end
|
65
|
-
else
|
66
|
-
mage_redirect(object, options[:show_step])
|
67
|
-
end
|
68
|
-
raise Mage::WizardRendered.new
|
69
|
-
end
|
70
|
-
end
|
71
|
-
|
72
|
-
def mage_redirect(object, show_step = false)
|
73
|
-
flash["#{object.model_name.name.downcase}_errors"] = object.errors.messages
|
74
|
-
path = object.new_record? ? :new_polymorphic_path : :edit_polymorphic_path
|
75
|
-
redirect_to send(path, object, step: (object.mage_step if show_step))
|
76
|
-
end
|
77
|
-
|
78
|
-
def mage_return
|
79
|
-
end
|
80
|
-
|
81
|
-
private :mage_return, :mage_redirect
|
82
|
-
end
|
83
7
|
|
@@ -0,0 +1,40 @@
|
|
1
|
+
module Mage
|
2
|
+
class WizardRendered < Exception
|
3
|
+
end
|
4
|
+
end
|
5
|
+
|
6
|
+
class ActionController::Base
|
7
|
+
rescue_from Mage::WizardRendered, with: :mage_return
|
8
|
+
|
9
|
+
def render_mage(object, options = {})
|
10
|
+
puts "#{object}"
|
11
|
+
unless object.mage_step == :done
|
12
|
+
if request.method == 'GET'
|
13
|
+
if options[:show_step] && params[:step].blank?
|
14
|
+
mage_redirect(object, options[:show_step])
|
15
|
+
else
|
16
|
+
if flash["#{object.model_name.name.downcase}_errors"]
|
17
|
+
flash["#{object.model_name.name.downcase}_errors"].each do |attribute, errors|
|
18
|
+
errors.each { |error| object.errors[attribute] << error }
|
19
|
+
end
|
20
|
+
end
|
21
|
+
render "#{params[:controller]}/steps/#{object.mage_step}"
|
22
|
+
end
|
23
|
+
else
|
24
|
+
mage_redirect(object, options[:show_step])
|
25
|
+
end
|
26
|
+
raise Mage::WizardRendered.new
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def mage_redirect(object, show_step = false)
|
31
|
+
flash["#{object.model_name.name.downcase}_errors"] = object.errors.messages
|
32
|
+
path = object.new_record? ? :new_polymorphic_path : :edit_polymorphic_path
|
33
|
+
redirect_to send(path, object, step: (object.mage_step if show_step))
|
34
|
+
end
|
35
|
+
|
36
|
+
def mage_return
|
37
|
+
end
|
38
|
+
|
39
|
+
private :mage_return, :mage_redirect
|
40
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
class ActiveRecord::Base
|
2
|
+
def self.has_mage_steps(*steps)
|
3
|
+
@@mage_steps = steps
|
4
|
+
after_save :mage_after_save
|
5
|
+
after_destroy { Mage::MageStep.where(object_id: self.id, object_type: self.model_name.name).try(:take).try(:destroy) }
|
6
|
+
|
7
|
+
define_method :mage_steps do
|
8
|
+
@@mage_steps
|
9
|
+
end
|
10
|
+
|
11
|
+
instance_eval do
|
12
|
+
define_method :mage_step do
|
13
|
+
Mage::MageStep.where(object_id: self.id, object_type: self.model_name.name)
|
14
|
+
.try(:take).try(:step).try(:to_sym) || @@mage_steps.first
|
15
|
+
end
|
16
|
+
|
17
|
+
steps.each_with_index do |step, index|
|
18
|
+
define_method "mage_step_#{step}?" do
|
19
|
+
index <= (@@mage_steps.find_index(mage_step) || @@mage_steps.count)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
define_method :mage_after_save do
|
24
|
+
if mage_step != :done
|
25
|
+
mage_model = Mage::MageStep.where(object_id: id, object_type: model_name.name).try(:take) ||
|
26
|
+
Mage::MageStep.create(object_id: id, object_type: model_name.name, step: mage_step)
|
27
|
+
mage_model.update(step: (@@mage_steps[@@mage_steps.find_index(mage_step) + 1] || :done))
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
private :mage_after_save
|
32
|
+
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
data/lib/mage/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mage
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Viacheslav Mefodin
|
@@ -70,8 +70,12 @@ files:
|
|
70
70
|
- Rakefile
|
71
71
|
- bin/console
|
72
72
|
- bin/setup
|
73
|
-
-
|
73
|
+
- lib/generators/mage/active_record_migration.rb
|
74
|
+
- lib/generators/mage/mage_generator.rb
|
74
75
|
- lib/mage.rb
|
76
|
+
- lib/mage/action_controller_patch.rb
|
77
|
+
- lib/mage/active_record_patch.rb
|
78
|
+
- lib/mage/mage_step.rb
|
75
79
|
- lib/mage/version.rb
|
76
80
|
- mage.gemspec
|
77
81
|
homepage: https://github.com/effect305/mage
|