mage 0.1.1 → 0.2.1
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.
- 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
|