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