imperator-ext 0.2.0 → 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.
data/README.md CHANGED
@@ -139,14 +139,27 @@ end
139
139
  ```
140
140
  ## Command Method Factory
141
141
 
142
- By including the `Imperator::Command::MethodFactory` you get access to the `#command_method` macro, which lets you easily define Imperator Command methods.
143
- This is typically used in a Controller.
142
+ By including the `Imperator::Command::MethodFactory` you get access to the `#command_method`and `#command_methods` macros, which let you easily define Imperator Command methods.
143
+ These macros are typically used in a Controller like in the example below.
144
+ Note: The options passed in will be used to initialize the command
144
145
 
145
146
  ```ruby
146
147
  class ServicesController
147
148
  include Imperator::Command::MethodFactory
148
149
 
149
- command_method :sign_in
150
+ command_method :pay, service: 'paypal'
151
+
152
+ command_method (:ship_product, service: 'fedex') do
153
+ {id: get_id } # late evaled option args (Hash) for command constructor!
154
+ end
155
+
156
+ command_methods :sign_in, :sign_out
157
+
158
+ protected
159
+
160
+ def get_id
161
+ params[:id]
162
+ end
150
163
  end
151
164
  ```
152
165
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.0
1
+ 0.2.1
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "imperator-ext"
8
- s.version = "0.2.0"
8
+ s.version = "0.2.1"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Kristian Mandrup"]
12
- s.date = "2012-08-14"
12
+ s.date = "2012-08-15"
13
13
  s.description = "Factories, Macros, REST helpers and Mongoid integration"
14
14
  s.email = "kmandrup@gmail.com"
15
15
  s.extra_rdoc_files = [
@@ -1,17 +1,25 @@
1
1
  class Imperator::Command
2
2
  module MethodFactory
3
- def command_method command, options = {}
3
+ def command_method command, options = {}, &block
4
4
  namespace = (options[:ns] || '').to_s
5
5
  namespace.sub! /Controller$/, ''
6
6
  define_method "#{command}_command" do
7
7
  instance_var = "@#{command}_command"
8
8
  unless instance_variable_get(instance_var)
9
9
  clazz = [namespace, "#{command.to_s.camelize}Command"].join('::').constantize
10
- instance_variable_set instance_var, clazz.new(options.merge initiator: self)
10
+ opts = options.merge(initiator: self)
11
+ opts.merge!(instance_eval &block) if block_given?
12
+ clazz_inst = clazz.new(opts)
13
+ instance_variable_set instance_var, clazz_inst
11
14
  end
12
15
  end
13
16
  end
14
17
 
18
+ def command_methods *args, &block
19
+ options = args.extract_options!
20
+ args.flatten.each { |meth| command_method meth, options, &block }
21
+ end
22
+
15
23
  extend self
16
24
  end
17
25
  end
@@ -7,6 +7,9 @@ end
7
7
  class UpdateCommand < Imperator::Command
8
8
  end
9
9
 
10
+ class ShowCommand < Imperator::Command
11
+ end
12
+
10
13
  module Landlord
11
14
  module Account
12
15
  class PayCommand < Imperator::Command
@@ -22,7 +25,13 @@ module Landlord
22
25
  class Pay < Action # imperator action
23
26
  extend Imperator::Command::MethodFactory
24
27
 
25
- command_method :pay, object: 'hello', ns: self.parent
28
+ command_method :pay, object: 'hello', ns: self.parent do
29
+ {id: id}
30
+ end
31
+
32
+ def id
33
+ 'my id'
34
+ end
26
35
  end
27
36
  end
28
37
  end
@@ -48,6 +57,26 @@ describe Imperator::Command::MethodFactory do
48
57
  its(:update_command) { should be_a(Imperator::Command) }
49
58
  end
50
59
 
60
+ describe '.command_methods' do
61
+ describe 'with name args' do
62
+ before do
63
+ clazz.command_methods :update, :show
64
+ end
65
+
66
+ its(:update_command) { should be_a(Imperator::Command) }
67
+ its(:show_command) { should be_a(Imperator::Command) }
68
+ end
69
+
70
+ describe 'with names and options' do
71
+ before do
72
+ clazz.command_methods :update, :show, id: 7
73
+ end
74
+
75
+ its(:update_command) { should be_a(Imperator::Command) }
76
+ its(:show_command) { should be_a(Imperator::Command) }
77
+ end
78
+ end
79
+
51
80
  describe 'with namespace :ns option' do
52
81
  before do
53
82
  clazz.command_method :pay, object: 'hello', ns: Landlord::Account
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: imperator-ext
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-08-14 00:00:00.000000000 Z
12
+ date: 2012-08-15 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: virtus
@@ -179,7 +179,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
179
179
  version: '0'
180
180
  segments:
181
181
  - 0
182
- hash: -3288576765044501661
182
+ hash: 4197596095852566251
183
183
  required_rubygems_version: !ruby/object:Gem::Requirement
184
184
  none: false
185
185
  requirements: