ixtlan-guard 0.8.3 → 0.9.0
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 +4 -0
- data/lib/ixtlan/guard/guard.rb +12 -32
- data/lib/ixtlan/guard/guard_rails.rb +1 -1
- data/lib/ixtlan/guard/models.rb +22 -0
- data/lib/ixtlan/guard/models.rb~ +22 -0
- data/lib/ixtlan/guard/railtie.rb +1 -1
- data/spec/guard_export_spec.rb +14 -9
- data/spec/guard_with_associations_spec.rb +19 -14
- metadata +154 -145
data/README.md
CHANGED
@@ -1,5 +1,9 @@
|
|
1
1
|
# ixtlan guard #
|
2
2
|
|
3
|
+
* [](http://travis-ci.org/mkristian/ixtlan-guard)
|
4
|
+
* [](https://gemnasium.com/mkristian/ixtlan-guard)
|
5
|
+
* [](https://codeclimate.com/github/mkristian/ixtlan-guard)
|
6
|
+
|
3
7
|
it is an simple authorization framework for restful rails especially using rails as API server.
|
4
8
|
|
5
9
|
the idea is simple:
|
data/lib/ixtlan/guard/guard.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
require 'ixtlan/guard/guard_config'
|
2
|
-
|
2
|
+
require 'ixtlan/guard/models'
|
3
3
|
module Ixtlan
|
4
4
|
module Guard
|
5
5
|
class Guard
|
@@ -103,9 +103,9 @@ module Ixtlan
|
|
103
103
|
m = @config.map_of_all
|
104
104
|
m.each do |resource, actions|
|
105
105
|
nodes = []
|
106
|
-
perm = Node.new(:permission)
|
107
|
-
perm
|
108
|
-
perm
|
106
|
+
perm = Permission.new #Node.new(:permission)
|
107
|
+
perm.resource = resource
|
108
|
+
perm.actions = []#nodes
|
109
109
|
|
110
110
|
# setup default_groups
|
111
111
|
default_groups = actions.delete('defaults') || []
|
@@ -122,11 +122,11 @@ module Ixtlan
|
|
122
122
|
# deny = true : default_groups.member?('*')
|
123
123
|
default_groups.size != 0 || default_groups.member?('*')
|
124
124
|
end
|
125
|
-
perm
|
125
|
+
perm.deny = deny
|
126
126
|
|
127
127
|
actions.each do |action, groups|
|
128
128
|
group_names = groups.collect { |g| g.is_a?(Hash) ? g.keys : g }.flatten if groups
|
129
|
-
node = Node.new(:action)
|
129
|
+
node = Action.new #Node.new(:action)
|
130
130
|
allowed_groups =
|
131
131
|
if groups && group_names.member?('*')
|
132
132
|
group_map.values
|
@@ -134,53 +134,33 @@ module Ixtlan
|
|
134
134
|
names = group_map.keys & ((group_names || []) + @superuser)
|
135
135
|
names.collect { |name| group_map[name] }
|
136
136
|
end
|
137
|
-
|
138
137
|
if (deny && allowed_groups.size == 0) || (!deny && allowed_groups.size > 0)
|
139
|
-
node
|
138
|
+
node.name = action
|
140
139
|
if block
|
141
140
|
if allowed_groups.size > 0
|
142
141
|
assos = block.call(resource, allowed_groups)
|
143
|
-
node
|
142
|
+
node.associations = assos if assos && assos.size > 0
|
144
143
|
else
|
145
144
|
assos = block.call(resource, group_map.values)
|
146
|
-
perm
|
145
|
+
perm.associations = assos if assos && assos.size > 0
|
147
146
|
end
|
148
147
|
end
|
149
|
-
|
148
|
+
perm.actions << node
|
150
149
|
elsif deny && allowed_groups.size > 0 && block
|
151
150
|
assos = block.call(resource, group_map.values)
|
152
|
-
perm
|
151
|
+
perm.associations = assos if assos && assos.size > 0
|
153
152
|
end
|
154
153
|
end
|
155
154
|
# TODO is that right like this ?
|
156
155
|
# only default_groups, i.e. no actions !!!
|
157
156
|
if block && actions.size == 0 && deny
|
158
157
|
assos = block.call(resource, group_map.values)
|
159
|
-
perm
|
158
|
+
perm.associations = assos if assos && assos.size > 0
|
160
159
|
end
|
161
160
|
perms << perm
|
162
161
|
end
|
163
162
|
perms
|
164
163
|
end
|
165
164
|
end
|
166
|
-
class Node < Hash
|
167
|
-
|
168
|
-
attr_reader :content
|
169
|
-
|
170
|
-
def initialize(name)
|
171
|
-
map = super
|
172
|
-
@content = {}
|
173
|
-
merge!({ name => @content })
|
174
|
-
end
|
175
|
-
|
176
|
-
def []=(k,v)
|
177
|
-
@content[k] = v
|
178
|
-
end
|
179
|
-
def [](k)
|
180
|
-
@content[k]
|
181
|
-
end
|
182
|
-
end
|
183
|
-
class GuardException < Exception; end
|
184
|
-
class PermissionDenied < GuardException; end
|
185
165
|
end
|
186
166
|
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'virtus'
|
2
|
+
module Ixtlan
|
3
|
+
module Guard
|
4
|
+
class Action
|
5
|
+
include Virtus
|
6
|
+
|
7
|
+
attribute :name, String
|
8
|
+
attribute :associations, Array[String]
|
9
|
+
end
|
10
|
+
class Permission
|
11
|
+
include Virtus
|
12
|
+
|
13
|
+
attribute :resource, String
|
14
|
+
attribute :actions, Array[Action], :default => []
|
15
|
+
attribute :deny, Boolean, :default => false
|
16
|
+
attribute :associations, Array[String]
|
17
|
+
end
|
18
|
+
#TODO
|
19
|
+
class GuardException < Exception; end
|
20
|
+
class PermissionDenied < GuardException; end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'virtus'
|
2
|
+
module Ixtlan
|
3
|
+
module Guard
|
4
|
+
class Action
|
5
|
+
include Virtus
|
6
|
+
|
7
|
+
attribute :name, String
|
8
|
+
attribute :associations, Array[String]
|
9
|
+
end
|
10
|
+
class Permission
|
11
|
+
include Virtus
|
12
|
+
|
13
|
+
attribute :resource, String
|
14
|
+
attribute :actions, Array[Action], :default => []
|
15
|
+
attribute :deny, Boolean, :deafult => false
|
16
|
+
attribute :associations, Array[String]
|
17
|
+
end
|
18
|
+
#TODO
|
19
|
+
class GuardException < Exception; end
|
20
|
+
class PermissionDenied < GuardException; end
|
21
|
+
end
|
22
|
+
end
|
data/lib/ixtlan/guard/railtie.rb
CHANGED
data/spec/guard_export_spec.rb
CHANGED
@@ -7,16 +7,21 @@ describe Ixtlan::Guard::Guard do
|
|
7
7
|
def assert(expected, perms)
|
8
8
|
map = {}
|
9
9
|
expected.each do |e|
|
10
|
-
map[e[:permission][:resource]] = e
|
11
|
-
if e[:permission][:actions]
|
12
|
-
e[:permission][:actions].sort!{ |n,m| n[:action][:name] <=> m[:action][:name] }
|
10
|
+
map[(e[:permission] || e)[:resource]] = e
|
11
|
+
if (e[:permission] || e)[:actions]
|
12
|
+
(e[:permission] || e)[:actions].sort!{ |n,m| n[:action][:name] <=> m[:action][:name] }
|
13
13
|
end
|
14
14
|
end
|
15
15
|
perms.each do |perm|
|
16
|
-
|
17
|
-
|
16
|
+
attr = perm.attributes
|
17
|
+
attr[ :actions ] = perm.actions.collect do |a|
|
18
|
+
aa = a.attributes
|
19
|
+
aa.delete( :associations ) if aa[ :associations ].nil? || aa[ :associations ].empty?
|
20
|
+
{:action => aa}
|
18
21
|
end
|
19
|
-
|
22
|
+
attr[:actions].sort!{ |n,m| n[:action][:name] <=> m[:action][:name] }
|
23
|
+
attr.delete( :associations ) if attr[ :associations ].nil? || attr[ :associations ].empty?
|
24
|
+
map[perm[:resource]][:permission].should == attr
|
20
25
|
end
|
21
26
|
end
|
22
27
|
|
@@ -184,7 +189,7 @@ describe Ixtlan::Guard::Guard do
|
|
184
189
|
end
|
185
190
|
perm = subject.permissions([group])do |resource, groups|
|
186
191
|
if resource == 'regions'
|
187
|
-
[
|
192
|
+
["europe", "asia"]
|
188
193
|
end
|
189
194
|
end
|
190
195
|
expected = [
|
@@ -219,8 +224,8 @@ describe Ixtlan::Guard::Guard do
|
|
219
224
|
{:permission=>
|
220
225
|
{:resource=>"regions",
|
221
226
|
:actions=>
|
222
|
-
[{:action=>{:name=>"show", :associations=>[
|
223
|
-
{:action=>{:name=>"create", :associations=>[
|
227
|
+
[{:action=>{:name=>"show", :associations=>["europe", "asia"]}},
|
228
|
+
{:action=>{:name=>"create", :associations=>["europe", "asia"]}}],
|
224
229
|
:deny=>false}},
|
225
230
|
#allow nothing
|
226
231
|
{:permission=>{:resource=>"users", :actions=>[], :deny=>false}}]
|
@@ -47,7 +47,7 @@ describe Ixtlan::Guard::Guard do
|
|
47
47
|
end
|
48
48
|
|
49
49
|
it 'should add associations to node' do
|
50
|
-
perms = subject.permissions([Group.new('admin', [
|
50
|
+
perms = subject.permissions([Group.new('admin', ["german", "french"])]) do |resource, groups|
|
51
51
|
if groups && groups.first && groups.first.name == 'admin'
|
52
52
|
groups.first.domains
|
53
53
|
else
|
@@ -61,7 +61,7 @@ describe Ixtlan::Guard::Guard do
|
|
61
61
|
:resource=>"accounts",
|
62
62
|
:actions=>[{:action=>{
|
63
63
|
:name=>"destroy",
|
64
|
-
:associations=>[
|
64
|
+
:associations=>["german", "french"]}}],
|
65
65
|
:deny=>false}
|
66
66
|
}
|
67
67
|
expected[:allow_all_defaults] = {
|
@@ -69,14 +69,14 @@ describe Ixtlan::Guard::Guard do
|
|
69
69
|
:resource=>"allow_all_defaults",
|
70
70
|
:actions=>[{:action=>{:name=>"index"}}],
|
71
71
|
:deny=>true,
|
72
|
-
:associations=>[
|
72
|
+
:associations=>["german", "french"]}
|
73
73
|
}
|
74
74
|
expected[:defaults] = {
|
75
75
|
:permission=>{
|
76
76
|
:resource=>"defaults",
|
77
77
|
:actions=>[{:action=>{
|
78
78
|
:name=>"index",
|
79
|
-
:associations=>[
|
79
|
+
:associations=>["german", "french"]}}],
|
80
80
|
:deny=>false}
|
81
81
|
}
|
82
82
|
expected[:no_defaults] = {
|
@@ -84,14 +84,14 @@ describe Ixtlan::Guard::Guard do
|
|
84
84
|
:resource=>"no_defaults",
|
85
85
|
:actions=>[{:action=>{
|
86
86
|
:name=>"index",
|
87
|
-
:associations=>[
|
87
|
+
:associations=>["german", "french"]}}],
|
88
88
|
:deny=>false}
|
89
89
|
}
|
90
90
|
expected[:only_defaults] = {
|
91
91
|
:permission=>{
|
92
92
|
:resource=>"only_defaults",
|
93
93
|
:actions=>[],
|
94
|
-
:associations=>[
|
94
|
+
:associations=>["german", "french"],
|
95
95
|
:deny=>true}
|
96
96
|
}
|
97
97
|
expected[:person]= {
|
@@ -99,18 +99,18 @@ describe Ixtlan::Guard::Guard do
|
|
99
99
|
:resource=>"person",
|
100
100
|
:actions=> [{:action=>{
|
101
101
|
:name=>"destroy",
|
102
|
-
:associations=>[
|
102
|
+
:associations=>["german", "french"]}},
|
103
103
|
{:action=>{
|
104
104
|
:name=>"index",
|
105
|
-
:associations=>[
|
105
|
+
:associations=>["german", "french"]}}],
|
106
106
|
:deny=>false}
|
107
107
|
}
|
108
108
|
expected[:regions] = {
|
109
109
|
:permission=>{
|
110
110
|
:resource=>"regions",
|
111
111
|
:actions=>[
|
112
|
-
{:action=>{:name=>"create", :associations=>[
|
113
|
-
{:action=>{:name=>"show", :associations=>[
|
112
|
+
{:action=>{:name=>"create", :associations=>["german", "french"]}},
|
113
|
+
{:action=>{:name=>"show", :associations=>["german", "french"]}}
|
114
114
|
],
|
115
115
|
:deny=>false}
|
116
116
|
}
|
@@ -119,12 +119,17 @@ describe Ixtlan::Guard::Guard do
|
|
119
119
|
:resource=>"users",
|
120
120
|
:actions=>[],
|
121
121
|
:deny=>false}
|
122
|
-
}
|
122
|
+
}
|
123
123
|
perms.each do |perm|
|
124
|
-
|
125
|
-
|
124
|
+
attr = perm.attributes
|
125
|
+
attr[ :actions ] = perm.actions.collect do |a|
|
126
|
+
aa = a.attributes
|
127
|
+
aa.delete( :associations ) if aa[ :associations ].nil? || aa[ :associations ].empty?
|
128
|
+
{:action => aa}
|
126
129
|
end
|
127
|
-
|
130
|
+
attr[:actions].sort!{ |n,m| n[:action][:name] <=> m[:action][:name] }
|
131
|
+
attr.delete( :associations ) if attr[ :associations ].nil? || attr[ :associations ].empty?
|
132
|
+
expected[perm[:resource].to_sym][:permission].should == attr
|
128
133
|
end
|
129
134
|
end
|
130
135
|
end
|
metadata
CHANGED
@@ -1,86 +1,87 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ixtlan-guard
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
+
hash: 59
|
4
5
|
prerelease:
|
5
|
-
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 9
|
9
|
+
- 0
|
10
|
+
version: 0.9.0
|
6
11
|
platform: ruby
|
7
12
|
authors:
|
8
|
-
|
13
|
+
- mkristian
|
9
14
|
autorequire:
|
10
15
|
bindir: bin
|
11
16
|
cert_chain: []
|
12
17
|
|
13
|
-
date: 2012-
|
18
|
+
date: 2012-12-29 00:00:00 Z
|
14
19
|
dependencies:
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
- !ruby/object:Gem::Version
|
78
|
-
version: 3.0.4.0.29.0
|
79
|
-
type: :development
|
80
|
-
version_requirements: *id006
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
name: virtus
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
none: false
|
25
|
+
requirements:
|
26
|
+
- - ~>
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
hash: 1
|
29
|
+
segments:
|
30
|
+
- 0
|
31
|
+
- 5
|
32
|
+
version: "0.5"
|
33
|
+
type: :runtime
|
34
|
+
version_requirements: *id001
|
35
|
+
- !ruby/object:Gem::Dependency
|
36
|
+
name: railties
|
37
|
+
prerelease: false
|
38
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ~>
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
hash: 29
|
44
|
+
segments:
|
45
|
+
- 3
|
46
|
+
- 2
|
47
|
+
- 9
|
48
|
+
version: 3.2.9
|
49
|
+
type: :development
|
50
|
+
version_requirements: *id002
|
51
|
+
- !ruby/object:Gem::Dependency
|
52
|
+
name: rspec
|
53
|
+
prerelease: false
|
54
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
55
|
+
none: false
|
56
|
+
requirements:
|
57
|
+
- - ~>
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
hash: 13
|
60
|
+
segments:
|
61
|
+
- 2
|
62
|
+
- 7
|
63
|
+
version: "2.7"
|
64
|
+
type: :development
|
65
|
+
version_requirements: *id003
|
66
|
+
- !ruby/object:Gem::Dependency
|
67
|
+
name: rake
|
68
|
+
prerelease: false
|
69
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
70
|
+
none: false
|
71
|
+
requirements:
|
72
|
+
- - ~>
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
hash: 73
|
75
|
+
segments:
|
76
|
+
- 10
|
77
|
+
- 0
|
78
|
+
- 3
|
79
|
+
version: 10.0.3
|
80
|
+
type: :development
|
81
|
+
version_requirements: *id004
|
81
82
|
description: simple authorization framework for rails controllers
|
82
83
|
email:
|
83
|
-
|
84
|
+
- m.kristian@web.de
|
84
85
|
executables: []
|
85
86
|
|
86
87
|
extensions: []
|
@@ -88,97 +89,105 @@ extensions: []
|
|
88
89
|
extra_rdoc_files: []
|
89
90
|
|
90
91
|
files:
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
92
|
+
- MIT-LICENSE
|
93
|
+
- README.md
|
94
|
+
- lib/ixtlan-guard.rb
|
95
|
+
- lib/generators/guard/controller/USAGE
|
96
|
+
- lib/generators/guard/controller/controller_generator.rb
|
97
|
+
- lib/generators/guard/controller/controller_generator.rb~
|
98
|
+
- lib/generators/guard/scaffold/USAGE
|
99
|
+
- lib/generators/guard/scaffold/scaffold_generator.rb
|
100
|
+
- lib/generators/guard/templates/guard.yml
|
101
|
+
- lib/generators/guard/templates/guard.yml~
|
102
|
+
- lib/ixtlan/guard.rb
|
103
|
+
- lib/ixtlan/guard/abstract_session.rb
|
104
|
+
- lib/ixtlan/guard/abstract_session.rb~
|
105
|
+
- lib/ixtlan/guard/guard_rails.rb~
|
106
|
+
- lib/ixtlan/guard/guard.rb
|
107
|
+
- lib/ixtlan/guard/models.rb~
|
108
|
+
- lib/ixtlan/guard/permission_builder.rb~
|
109
|
+
- lib/ixtlan/guard/guard_ng.rb~
|
110
|
+
- lib/ixtlan/guard/guard_config.rb
|
111
|
+
- lib/ixtlan/guard/guard_rails.rb
|
112
|
+
- lib/ixtlan/guard/guard_config.rb~
|
113
|
+
- lib/ixtlan/guard/guard.rb~
|
114
|
+
- lib/ixtlan/guard/models.rb
|
115
|
+
- lib/ixtlan/guard/railtie.rb
|
116
|
+
- spec/guards/accounts1_guard.yml~
|
117
|
+
- spec/guards/users_guard.yml
|
118
|
+
- spec/guards/users2_guard.yml
|
119
|
+
- spec/guards/only_defaults_guard.yml
|
120
|
+
- spec/guards/allow_alldefaults.yml~
|
121
|
+
- spec/guards/accounts2_guard.yml~
|
122
|
+
- spec/guards/users2_guard.yml~
|
123
|
+
- spec/guards/only_defaults_guard.yml~
|
124
|
+
- spec/guards/users_guard.yml~
|
125
|
+
- spec/guards/users1_guard.yml~
|
126
|
+
- spec/guards/tools_guard.yml~
|
127
|
+
- spec/guards/re_users_guard.yaml~
|
128
|
+
- spec/guards/no_defaults_guard.yml
|
129
|
+
- spec/guards/regions_guard.yml~
|
130
|
+
- spec/guards/defaults_guard.yml
|
131
|
+
- spec/guards/users1_guard.yml
|
132
|
+
- spec/guards/person_guard.yml
|
133
|
+
- spec/guards/accounts_guard.yml
|
134
|
+
- spec/guards/no_defaults_guard.yml~
|
135
|
+
- spec/guards/regions_guard.yml
|
136
|
+
- spec/guards/allow_all_defaults_guard.yml
|
137
|
+
- spec/guards/allow_all_defaults_guard.yml~
|
138
|
+
- spec/guards/defaults_guard.yml~
|
139
|
+
- spec/guard_export_spec.rb~
|
140
|
+
- spec/guard_with_associations_spec.rb
|
141
|
+
- spec/guard_with_associations_spec.rb~
|
142
|
+
- spec/guard_export_spec.rb
|
143
|
+
- spec/spec_helper.rb
|
144
|
+
- spec/guard_cache_spec.rb
|
145
|
+
- spec/guard_rails_spec.rb~
|
146
|
+
- spec/guard_cache_spec.rb~
|
147
|
+
- spec/guard_spec.rb
|
148
|
+
- spec/railtie_spec.rb
|
149
|
+
- spec/guard_rails_spec.rb
|
150
|
+
- features/step_definitions/simple_steps.rb
|
151
|
+
- features/generators.feature
|
149
152
|
homepage: http://github.com/mkristian/ixtlan-guard
|
150
153
|
licenses:
|
151
|
-
|
154
|
+
- MIT-LICENSE
|
152
155
|
post_install_message:
|
153
156
|
rdoc_options: []
|
154
157
|
|
155
158
|
require_paths:
|
156
|
-
|
159
|
+
- lib
|
157
160
|
required_ruby_version: !ruby/object:Gem::Requirement
|
158
161
|
none: false
|
159
162
|
requirements:
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
+
- - ">="
|
164
|
+
- !ruby/object:Gem::Version
|
165
|
+
hash: 3
|
166
|
+
segments:
|
167
|
+
- 0
|
168
|
+
version: "0"
|
163
169
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
164
170
|
none: false
|
165
171
|
requirements:
|
166
|
-
|
167
|
-
|
168
|
-
|
172
|
+
- - ">="
|
173
|
+
- !ruby/object:Gem::Version
|
174
|
+
hash: 3
|
175
|
+
segments:
|
176
|
+
- 0
|
177
|
+
version: "0"
|
169
178
|
requirements: []
|
170
179
|
|
171
180
|
rubyforge_project:
|
172
|
-
rubygems_version: 1.8.
|
181
|
+
rubygems_version: 1.8.15
|
173
182
|
signing_key:
|
174
183
|
specification_version: 3
|
175
184
|
summary: guard your controller actions
|
176
185
|
test_files:
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
186
|
+
- spec/guard_with_associations_spec.rb
|
187
|
+
- spec/guard_export_spec.rb
|
188
|
+
- spec/guard_cache_spec.rb
|
189
|
+
- spec/guard_spec.rb
|
190
|
+
- spec/railtie_spec.rb
|
191
|
+
- spec/guard_rails_spec.rb
|
192
|
+
- features/generators.feature
|
193
|
+
- features/step_definitions/simple_steps.rb
|