walruz 0.0.11 → 0.0.12

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile ADDED
@@ -0,0 +1,11 @@
1
+ source 'http://rubygems.org'
2
+ source 'http://gems.github.com'
3
+
4
+ gem 'jeweler'
5
+ gem 'yard'
6
+ gem 'rdoc', '~> 2.4.2'
7
+
8
+ group :test do
9
+ gem 'rspec', '= 1.3.2'
10
+ end
11
+
data/Gemfile.lock ADDED
@@ -0,0 +1,22 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ remote: http://gems.github.com/
4
+ specs:
5
+ git (1.2.5)
6
+ jeweler (1.6.4)
7
+ bundler (~> 1.0)
8
+ git (>= 1.2.5)
9
+ rake
10
+ rake (0.9.2)
11
+ rdoc (2.4.3)
12
+ rspec (1.3.2)
13
+ yard (0.7.2)
14
+
15
+ PLATFORMS
16
+ ruby
17
+
18
+ DEPENDENCIES
19
+ jeweler
20
+ rdoc (~> 2.4.2)
21
+ rspec (= 1.3.2)
22
+ yard
data/README.rdoc CHANGED
@@ -77,8 +77,6 @@ Actor classes can use several methods to check if the <em>actor</em> instance ca
77
77
 
78
78
  [<b><tt>satisfies?(policy_label, subject)</tt></b>] It behaves just like the <tt>can?</tt> method, but instead of giving an action to be executed to the <em>subject</em>, it receives a <em>policy label</em> (More on <em>policy labels</em> next).
79
79
 
80
- [<b><tt>satisfies(policy_label, subject)</tt></b>] It behaves just like the <tt>authorize</tt> method, but instead of giving an action to be executed to the <em>subject</em>, it receives a <em>policy label</em>
81
-
82
80
  In case the given action is not assigned to any <em>policy</em>, a default Policy will be executed (if given), if no default <em>policy</em> is given then a <tt>Walruz::ActionNotFound</tt> exception will be raised.
83
81
 
84
82
  Examples:
data/Rakefile CHANGED
@@ -1,14 +1,19 @@
1
1
  require 'rubygems'
2
- require 'rake'
2
+ require 'bundler/setup'
3
+
4
+ Bundler.require(:default, :test)
3
5
 
4
6
  begin
5
- require 'jeweler'
6
7
  Jeweler::Tasks.new do |gem|
7
8
  gem.name = "walruz"
8
- gem.summary = %Q{Walruz is a gem that provides an easy yet powerful way to implement authorization policies in a system, relying on the composition of simple policies to create more complex ones.}
9
+ gem.summary = %Q{Walruz is a gem that provides an easy yet powerful
10
+ way to implement authorization policies in a system,
11
+ relying on the composition of simple policies to create
12
+ more complex ones.}
9
13
  gem.description = %Q{
10
- Walruz provides an easy to use DSL to do composition of basic authorization policies to create
11
- more complex ones, and then register this composed policies on actions performed to the model begin accessed
14
+ Walruz provides an easy to use DSL to do composition of basic
15
+ authorization policies to create more complex ones, and then register
16
+ this composed policies on actions performed to the model begin accessed
12
17
  }
13
18
  gem.email = "roman@noomi.com"
14
19
  gem.homepage = "http://github.com/noomii/walruz"
@@ -19,14 +24,15 @@ begin
19
24
  gem.add_development_dependency("rspec")
20
25
  gem.add_development_dependency("yard")
21
26
 
22
- # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
27
+ # gem is a Gem::Specification...
28
+ # see http://www.rubygems.org/read/chapter/20 for additional settings
23
29
  end
24
30
 
25
31
  Jeweler::GemcutterTasks.new
26
- Jeweler::RubyforgeTasks.new
27
-
32
+
28
33
  rescue LoadError
29
- puts "Jeweler not available. Install it with: sudo gem install technicalpickles-jeweler -s http://gems.github.com"
34
+ puts "Jeweler not available. Install it with: sudo gem \
35
+ install technicalpickles-jeweler -s http://gems.github.com"
30
36
  end
31
37
 
32
38
  require 'spec/rake/spectask'
@@ -51,7 +57,7 @@ YARD::Rake::YardocTask.new do |t|
51
57
  end
52
58
 
53
59
 
54
- require 'rake/rdoctask'
60
+ require 'rdoc/task'
55
61
  Rake::RDocTask.new do |rdoc|
56
62
  if File.exist?('VERSION.yml')
57
63
  config = YAML.load(File.read('VERSION.yml'))
data/VERSION.yml CHANGED
@@ -2,4 +2,4 @@
2
2
  :build:
3
3
  :major: 0
4
4
  :minor: 0
5
- :patch: 11
5
+ :patch: 12
data/lib/walruz/config.rb CHANGED
@@ -1,19 +1,69 @@
1
1
  module Walruz
2
2
 
3
3
  class Config
4
-
4
+
5
+ # Given a list of classes, it will include the Actor module
6
+ # in each of them.
7
+ #
8
+ # @param [Class] actors The list of classes that will be Actors in the
9
+ # system
5
10
  def actors=(actors)
6
11
  Array(actors).each do |actor|
7
12
  actor.send(:include, Actor)
8
13
  end
9
14
  end
10
15
 
16
+ # Given a list of classes, it will include the Subject module
17
+ # in each of them.
18
+ #
19
+ # @param [Class] subjects The list of classes that will be Subject in the
20
+ # system
11
21
  def subjects=(subjects)
12
22
  Array(subjects).each do |subject|
13
23
  subject.send(:include, Subject)
14
24
  end
15
25
  end
16
-
26
+
27
+ def enable_will_paginate_extension(options = {})
28
+ options = { :include_rails => false }.merge!(options)
29
+ gem 'mislav-will_paginate'
30
+ require 'will_paginate'
31
+ require File.expand_path(
32
+ File.join(File.dirname(__FILE__), 'more', 'pagination')
33
+ )
34
+
35
+ safe_include(WillPaginate::Collection,
36
+ Walruz::More::Pagination::WillPaginateCollection)
37
+ safe_include(Array, Walruz::More::Pagination::Base)
38
+
39
+ if options[:include_rails]
40
+ raise LoadError.new("You ask to enable Walruz extensions on \
41
+ ActiveRecord::Base, but it was not found. Maybe you should require \
42
+ 'active_record' first?") unless defined?("ActiveRecord::Base")
43
+ safe_include(::ActiveRecord::Base, Walruz::More::Pagination::Base)
44
+ end
45
+ rescue Gem::LoadError
46
+ raise LoadError.new("You ask to enable Walruz extensions on \
47
+ WillPaginate, but it was not found, Maybe you should \
48
+ require 'will_paginate' first")
49
+ end
50
+
51
+ # Will include the Walruz:CoreExt:Array module
52
+ # to the Array class
53
+ def enable_array_extension
54
+ require File.expand_path(
55
+ File.join(File.dirname(__FILE__), 'core_ext', 'array')
56
+ )
57
+ safe_include(Array, Walruz::CoreExt::Array)
58
+ end
59
+
60
+ protected
61
+
62
+ def safe_include(base, module_to_include)
63
+ return if base.included_modules.include?(module_to_include)
64
+ base.send(:include, module_to_include)
65
+ end
66
+
17
67
  end
18
68
 
19
69
  end
@@ -0,0 +1,25 @@
1
+ module Walruz
2
+ module More
3
+
4
+ # This module can be included into association like objects
5
+ module Pagination
6
+
7
+ base_path = File.dirname(__FILE__)
8
+ autoload :Base, base_path + '/pagination/base'
9
+ autoload :WillPaginateCollection, base_path + '/pagination/will_paginate_collection'
10
+ autoload :ViewHelper, base_path + '/pagination/view_helper'
11
+
12
+
13
+ def self.included(base)
14
+ if base.instance_methods.include?('paginate')
15
+ # We are talking about an already paginated element, we use WillPaginate extension instead
16
+ base.send(:include, Base)
17
+ else
18
+ raise RuntimeError.new("Walruz::More::Paginate needs WillPaginate in order to work")
19
+ end
20
+ end
21
+
22
+ end # Pagination
23
+
24
+ end
25
+ end
@@ -0,0 +1,53 @@
1
+ module Walruz
2
+ module More
3
+ module Pagination
4
+
5
+ module Base
6
+
7
+ def authorized_paginate(actor, action, *args)
8
+ # All the args are forwarded to WillPaginate, he knows best what to do
9
+ options = args.last if Hash === args.last
10
+
11
+ options[:page] ||= 1
12
+ options[:page] = options[:page].to_i
13
+ offset = options.delete(:offset).to_i # defaults to 0
14
+
15
+ acum = []
16
+ while true
17
+ paginated_collection = self.paginate(*args)
18
+ filter_authorized_items_in_collection(actor, action, acum, paginated_collection, offset)
19
+ if complete_authorized_items_page?(acum, paginated_collection)
20
+ break
21
+ else
22
+ offset = 0
23
+ options[:page] += 1
24
+ end
25
+ end
26
+ paginated_collection.replace(acum)
27
+ end
28
+
29
+ protected
30
+
31
+ def complete_authorized_items_page?(items, pcollection)
32
+ items.size == pcollection.per_page ||
33
+ pcollection.next_page.nil?
34
+ end
35
+
36
+ def filter_authorized_items_in_collection(actor, action, acum, pcollection, offset = 0)
37
+ return if offset > pcollection.size
38
+ pcollection[offset, pcollection.size].each_with_index do |item, i|
39
+ if Walruz.can?(actor, action, item)
40
+ acum << item
41
+ unless acum.size < pcollection.per_page
42
+ pcollection.walruz_offset = i + 1
43
+ break
44
+ end # unless
45
+ end # if
46
+ end # each_with_index
47
+ end # filter
48
+
49
+ end
50
+
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,11 @@
1
+ module Walruz
2
+ module More
3
+ module Paginate
4
+
5
+ module ViewHelper
6
+
7
+ end
8
+
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,27 @@
1
+ module Walruz
2
+ module More
3
+ module Pagination
4
+
5
+ module WillPaginateCollection
6
+
7
+ def self.included(base)
8
+ base.class_eval do
9
+ attr_accessor :walruz_offset
10
+ alias_method :next_page_without_walruz, :next_page
11
+ alias_method :next_page, :next_page_with_walruz
12
+ end
13
+ end
14
+
15
+ def next_page_with_walruz
16
+ if self.walruz_offset.nil? || self.walruz_offset == 0
17
+ next_page_without_walruz
18
+ else
19
+ self.current_page
20
+ end
21
+ end
22
+
23
+ end
24
+
25
+ end
26
+ end
27
+ end
data/spec/spec_helper.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  require 'rubygems'
2
- require 'spec'
3
- require 'pp'
2
+ require 'bundler/setup'
3
+
4
+ Bundler.require(:test)
4
5
 
5
6
  $LOAD_PATH.unshift(File.dirname(__FILE__))
6
7
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
data/walruz.gemspec CHANGED
@@ -1,87 +1,87 @@
1
1
  # Generated by jeweler
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
- # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{walruz}
8
- s.version = "0.0.11"
8
+ s.version = "0.0.12"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Roman Gonzalez"]
12
- s.date = %q{2010-11-15}
12
+ s.date = %q{2011-07-12}
13
13
  s.description = %q{
14
- Walruz provides an easy to use DSL to do composition of basic authorization policies to create
15
- more complex ones, and then register this composed policies on actions performed to the model begin accessed
14
+ Walruz provides an easy to use DSL to do composition of basic
15
+ authorization policies to create more complex ones, and then register
16
+ this composed policies on actions performed to the model begin accessed
16
17
  }
17
18
  s.email = %q{roman@noomi.com}
18
19
  s.extra_rdoc_files = [
19
20
  "LICENSE",
20
- "README.rdoc"
21
+ "README.rdoc"
21
22
  ]
22
23
  s.files = [
23
24
  ".document",
24
- ".gitignore",
25
- "CHANGELOG",
26
- "LICENSE",
27
- "README.rdoc",
28
- "Rakefile",
29
- "VERSION.yml",
30
- "lib/walruz.rb",
31
- "lib/walruz/actor.rb",
32
- "lib/walruz/config.rb",
33
- "lib/walruz/core_ext/array.rb",
34
- "lib/walruz/core_ext/memoization.rb",
35
- "lib/walruz/exceptions.rb",
36
- "lib/walruz/manager.rb",
37
- "lib/walruz/policy.rb",
38
- "lib/walruz/subject.rb",
39
- "lib/walruz/utils.rb",
40
- "spec/scenario.rb",
41
- "spec/spec.opts",
42
- "spec/spec_helper.rb",
43
- "spec/walruz/actor_spec.rb",
44
- "spec/walruz/core_ext/array_spec.rb",
45
- "spec/walruz/core_ext/memoization_spec.rb",
46
- "spec/walruz/manager_spec.rb",
47
- "spec/walruz/policy_spec.rb",
48
- "spec/walruz/subject_spec.rb",
49
- "spec/walruz/utils_spec.rb",
50
- "spec/walruz/walruz_spec.rb",
51
- "walruz.gemspec"
25
+ "CHANGELOG",
26
+ "Gemfile",
27
+ "Gemfile.lock",
28
+ "LICENSE",
29
+ "README.rdoc",
30
+ "Rakefile",
31
+ "VERSION.yml",
32
+ "lib/walruz.rb",
33
+ "lib/walruz/actor.rb",
34
+ "lib/walruz/config.rb",
35
+ "lib/walruz/core_ext/array.rb",
36
+ "lib/walruz/core_ext/memoization.rb",
37
+ "lib/walruz/exceptions.rb",
38
+ "lib/walruz/manager.rb",
39
+ "lib/walruz/more/pagination.rb",
40
+ "lib/walruz/more/pagination/base.rb",
41
+ "lib/walruz/more/pagination/view_helper.rb",
42
+ "lib/walruz/more/pagination/will_paginate_collection.rb",
43
+ "lib/walruz/policy.rb",
44
+ "lib/walruz/subject.rb",
45
+ "lib/walruz/utils.rb",
46
+ "spec/scenario.rb",
47
+ "spec/spec.opts",
48
+ "spec/spec_helper.rb",
49
+ "spec/walruz/actor_spec.rb",
50
+ "spec/walruz/core_ext/array_spec.rb",
51
+ "spec/walruz/core_ext/memoization_spec.rb",
52
+ "spec/walruz/manager_spec.rb",
53
+ "spec/walruz/policy_spec.rb",
54
+ "spec/walruz/subject_spec.rb",
55
+ "spec/walruz/utils_spec.rb",
56
+ "spec/walruz/walruz_spec.rb",
57
+ "walruz.gemspec"
52
58
  ]
53
- s.has_rdoc = %q{yard}
54
59
  s.homepage = %q{http://github.com/noomii/walruz}
55
- s.rdoc_options = ["--charset=UTF-8"]
56
60
  s.require_paths = ["lib"]
57
61
  s.rubyforge_project = %q{walruz}
58
- s.rubygems_version = %q{1.3.7}
59
- s.summary = %q{Walruz is a gem that provides an easy yet powerful way to implement authorization policies in a system, relying on the composition of simple policies to create more complex ones.}
60
- s.test_files = [
61
- "spec/scenario.rb",
62
- "spec/spec_helper.rb",
63
- "spec/walruz/actor_spec.rb",
64
- "spec/walruz/core_ext/array_spec.rb",
65
- "spec/walruz/core_ext/memoization_spec.rb",
66
- "spec/walruz/manager_spec.rb",
67
- "spec/walruz/policy_spec.rb",
68
- "spec/walruz/subject_spec.rb",
69
- "spec/walruz/utils_spec.rb",
70
- "spec/walruz/walruz_spec.rb"
71
- ]
62
+ s.rubygems_version = %q{1.6.2}
63
+ s.summary = %q{Walruz is a gem that provides an easy yet powerful way to implement authorization policies in a system, relying on the composition of simple policies to create more complex ones.}
72
64
 
73
65
  if s.respond_to? :specification_version then
74
- current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
75
66
  s.specification_version = 3
76
67
 
77
68
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
69
+ s.add_runtime_dependency(%q<jeweler>, [">= 0"])
70
+ s.add_runtime_dependency(%q<yard>, [">= 0"])
71
+ s.add_runtime_dependency(%q<rdoc>, ["~> 2.4.2"])
78
72
  s.add_development_dependency(%q<rspec>, [">= 0"])
79
73
  s.add_development_dependency(%q<yard>, [">= 0"])
80
74
  else
75
+ s.add_dependency(%q<jeweler>, [">= 0"])
76
+ s.add_dependency(%q<yard>, [">= 0"])
77
+ s.add_dependency(%q<rdoc>, ["~> 2.4.2"])
81
78
  s.add_dependency(%q<rspec>, [">= 0"])
82
79
  s.add_dependency(%q<yard>, [">= 0"])
83
80
  end
84
81
  else
82
+ s.add_dependency(%q<jeweler>, [">= 0"])
83
+ s.add_dependency(%q<yard>, [">= 0"])
84
+ s.add_dependency(%q<rdoc>, ["~> 2.4.2"])
85
85
  s.add_dependency(%q<rspec>, [">= 0"])
86
86
  s.add_dependency(%q<yard>, [">= 0"])
87
87
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: walruz
3
3
  version: !ruby/object:Gem::Version
4
- hash: 9
5
- prerelease: false
4
+ hash: 7
5
+ prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 11
10
- version: 0.0.11
9
+ - 12
10
+ version: 0.0.12
11
11
  platform: ruby
12
12
  authors:
13
13
  - Roman Gonzalez
@@ -15,12 +15,11 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-11-15 00:00:00 -08:00
18
+ date: 2011-07-12 00:00:00 -07:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
22
- name: rspec
23
- prerelease: false
22
+ type: :runtime
24
23
  requirement: &id001 !ruby/object:Gem::Requirement
25
24
  none: false
26
25
  requirements:
@@ -30,12 +29,42 @@ dependencies:
30
29
  segments:
31
30
  - 0
32
31
  version: "0"
33
- type: :development
32
+ name: jeweler
34
33
  version_requirements: *id001
34
+ prerelease: false
35
35
  - !ruby/object:Gem::Dependency
36
+ type: :runtime
37
+ requirement: &id002 !ruby/object:Gem::Requirement
38
+ none: false
39
+ requirements:
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ hash: 3
43
+ segments:
44
+ - 0
45
+ version: "0"
36
46
  name: yard
47
+ version_requirements: *id002
37
48
  prerelease: false
38
- requirement: &id002 !ruby/object:Gem::Requirement
49
+ - !ruby/object:Gem::Dependency
50
+ type: :runtime
51
+ requirement: &id003 !ruby/object:Gem::Requirement
52
+ none: false
53
+ requirements:
54
+ - - ~>
55
+ - !ruby/object:Gem::Version
56
+ hash: 27
57
+ segments:
58
+ - 2
59
+ - 4
60
+ - 2
61
+ version: 2.4.2
62
+ name: rdoc
63
+ version_requirements: *id003
64
+ prerelease: false
65
+ - !ruby/object:Gem::Dependency
66
+ type: :development
67
+ requirement: &id004 !ruby/object:Gem::Requirement
39
68
  none: false
40
69
  requirements:
41
70
  - - ">="
@@ -44,9 +73,24 @@ dependencies:
44
73
  segments:
45
74
  - 0
46
75
  version: "0"
76
+ name: rspec
77
+ version_requirements: *id004
78
+ prerelease: false
79
+ - !ruby/object:Gem::Dependency
47
80
  type: :development
48
- version_requirements: *id002
49
- description: "\n Walruz provides an easy to use DSL to do composition of basic authorization policies to create\n more complex ones, and then register this composed policies on actions performed to the model begin accessed\n "
81
+ requirement: &id005 !ruby/object:Gem::Requirement
82
+ none: false
83
+ requirements:
84
+ - - ">="
85
+ - !ruby/object:Gem::Version
86
+ hash: 3
87
+ segments:
88
+ - 0
89
+ version: "0"
90
+ name: yard
91
+ version_requirements: *id005
92
+ prerelease: false
93
+ description: "\n Walruz provides an easy to use DSL to do composition of basic \n authorization policies to create more complex ones, and then register \n this composed policies on actions performed to the model begin accessed\n "
50
94
  email: roman@noomi.com
51
95
  executables: []
52
96
 
@@ -57,8 +101,9 @@ extra_rdoc_files:
57
101
  - README.rdoc
58
102
  files:
59
103
  - .document
60
- - .gitignore
61
104
  - CHANGELOG
105
+ - Gemfile
106
+ - Gemfile.lock
62
107
  - LICENSE
63
108
  - README.rdoc
64
109
  - Rakefile
@@ -70,6 +115,10 @@ files:
70
115
  - lib/walruz/core_ext/memoization.rb
71
116
  - lib/walruz/exceptions.rb
72
117
  - lib/walruz/manager.rb
118
+ - lib/walruz/more/pagination.rb
119
+ - lib/walruz/more/pagination/base.rb
120
+ - lib/walruz/more/pagination/view_helper.rb
121
+ - lib/walruz/more/pagination/will_paginate_collection.rb
73
122
  - lib/walruz/policy.rb
74
123
  - lib/walruz/subject.rb
75
124
  - lib/walruz/utils.rb
@@ -85,13 +134,13 @@ files:
85
134
  - spec/walruz/utils_spec.rb
86
135
  - spec/walruz/walruz_spec.rb
87
136
  - walruz.gemspec
88
- has_rdoc: yard
137
+ has_rdoc: true
89
138
  homepage: http://github.com/noomii/walruz
90
139
  licenses: []
91
140
 
92
141
  post_install_message:
93
- rdoc_options:
94
- - --charset=UTF-8
142
+ rdoc_options: []
143
+
95
144
  require_paths:
96
145
  - lib
97
146
  required_ruby_version: !ruby/object:Gem::Requirement
@@ -115,18 +164,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
115
164
  requirements: []
116
165
 
117
166
  rubyforge_project: walruz
118
- rubygems_version: 1.3.7
167
+ rubygems_version: 1.6.2
119
168
  signing_key:
120
169
  specification_version: 3
121
- summary: Walruz is a gem that provides an easy yet powerful way to implement authorization policies in a system, relying on the composition of simple policies to create more complex ones.
122
- test_files:
123
- - spec/scenario.rb
124
- - spec/spec_helper.rb
125
- - spec/walruz/actor_spec.rb
126
- - spec/walruz/core_ext/array_spec.rb
127
- - spec/walruz/core_ext/memoization_spec.rb
128
- - spec/walruz/manager_spec.rb
129
- - spec/walruz/policy_spec.rb
130
- - spec/walruz/subject_spec.rb
131
- - spec/walruz/utils_spec.rb
132
- - spec/walruz/walruz_spec.rb
170
+ summary: Walruz is a gem that provides an easy yet powerful way to implement authorization policies in a system, relying on the composition of simple policies to create more complex ones.
171
+ test_files: []
172
+
data/.gitignore DELETED
@@ -1,14 +0,0 @@
1
- *.sw?
2
- .DS_Store
3
- .yardoc
4
- coverage
5
- rdoc
6
- doc
7
- pkg
8
- tmp
9
- examples/rails/tmp/*
10
- examples/rails/log/*
11
- examples/rails/db/schema.rb
12
- examples/rails/db/*.sqlite3
13
- tags
14
- *.swp