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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ee6cc104ead51cc80be0ce731c7df0abdb4fea50
4
- data.tar.gz: a4c5d78f2cd94d0dbf668084b6c2ff63ab89a4e1
3
+ metadata.gz: ecf49becdb6d43257e9b308f7ee53114662c39f1
4
+ data.tar.gz: 0ed26162e3e5e53a9d604cf3bfd9919873744178
5
5
  SHA512:
6
- metadata.gz: 37b60906f794dc7b1ced6b405ee565d9c4ab8c53db5b228b3a32f8ec6ec87f20a3f6f5347a1f7957bc2cf145eef3cde07da7dfd87e507f028d31180983115041
7
- data.tar.gz: a9d8ef8f5ce5f7195fb22b576d6abc43b22ced8127f24aa952c9ec3e5cc545510ff51e6688c33c59d79ab5d91e1ad93d5cc6c9a1df595cc2e42d3a6101fef401
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 migrate your database:
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
@@ -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
@@ -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
@@ -0,0 +1,5 @@
1
+ module Mage
2
+ class MageStep < ActiveRecord::Base
3
+ belongs_to :object, polymorphic: true
4
+ end
5
+ end
@@ -1,3 +1,3 @@
1
1
  module Mage
2
- VERSION = '0.1.1'
2
+ VERSION = '0.2.1'
3
3
  end
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.1.1
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
- - db/migrate/20160407080915_create_mage_steps.rb
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