vimjar 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (51) hide show
  1. data/.gitignore +8 -0
  2. data/.rspec +2 -0
  3. data/.rvmrc +1 -0
  4. data/.travis.yml +11 -0
  5. data/Gemfile +4 -0
  6. data/Gemfile.lock +85 -0
  7. data/Guardfile +21 -0
  8. data/LICENSE +21 -0
  9. data/README.md +89 -0
  10. data/Rakefile +2 -0
  11. data/bin/vimjar +10 -0
  12. data/cucumber.yml +6 -0
  13. data/features/init.feature +37 -0
  14. data/features/install.feature +8 -0
  15. data/features/list.feature +7 -0
  16. data/features/step_definitions/command_steps.rb +21 -0
  17. data/features/step_definitions/environment_steps.rb +34 -0
  18. data/features/step_definitions/file_check_steps.rb +20 -0
  19. data/features/step_definitions/message_steps.rb +23 -0
  20. data/features/step_definitions/plugin_steps.rb +4 -0
  21. data/features/support/env.rb +22 -0
  22. data/features/support/hook.rb +8 -0
  23. data/features/support/stubs.rb +0 -0
  24. data/features/uninstall.feature +12 -0
  25. data/features/update.feature +7 -0
  26. data/lib/templates/BundleFile +1 -0
  27. data/lib/vim-jar/cli.rb +91 -0
  28. data/lib/vim-jar/config.rb +126 -0
  29. data/lib/vim-jar/installer/base.rb +9 -0
  30. data/lib/vim-jar/installer/git.rb +66 -0
  31. data/lib/vim-jar/installer.rb +7 -0
  32. data/lib/vim-jar/loader.rb +32 -0
  33. data/lib/vim-jar/pathogen/pathogen_v1.2.vim +139 -0
  34. data/lib/vim-jar/plugin/git.rb +41 -0
  35. data/lib/vim-jar/plugin.rb +23 -0
  36. data/lib/vim-jar/version.rb +5 -0
  37. data/lib/vim-jar.rb +24 -0
  38. data/script/github_crawler.rb +76 -0
  39. data/spec/spec_helper.rb +24 -0
  40. data/spec/vim-jar/config_spec.rb +126 -0
  41. data/spec/vim-jar/git-config +16 -0
  42. data/spec/vim-jar/gitmodules +6 -0
  43. data/spec/vim-jar/installer/git_spec.rb +51 -0
  44. data/spec/vim-jar/loader_spec.rb +43 -0
  45. data/spec/vim-jar/plugin/git-config +1 -0
  46. data/spec/vim-jar/plugin/git_spec.rb +41 -0
  47. data/spec/vim-jar/plugin/gitmodules +1 -0
  48. data/spec/vim-jar/plugin_spec.rb +11 -0
  49. data/spec/vim-jar_test.rb +17 -0
  50. data/vimjar.gemspec +33 -0
  51. metadata +302 -0
data/.gitignore ADDED
@@ -0,0 +1,8 @@
1
+ pkg/*
2
+ *.gem
3
+ .bundle
4
+ *.sw*
5
+ FILES.txt
6
+ .idea
7
+ /tmp/
8
+ /bundle
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+
data/.rvmrc ADDED
@@ -0,0 +1 @@
1
+ rvm 1.9.3@vim-jar --create
data/.travis.yml ADDED
@@ -0,0 +1,11 @@
1
+ rvm:
2
+ - 1.9.3
3
+ # whitelist
4
+ branches:
5
+ only:
6
+ - master
7
+
8
+ notifications:
9
+ email:
10
+ - digruby@gmail.com
11
+
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in vim-jar.gemspec
4
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,85 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ vimjar (0.3.0)
5
+ thor
6
+
7
+ GEM
8
+ remote: http://rubygems.org/
9
+ specs:
10
+ aruba (0.4.11)
11
+ childprocess (>= 0.2.3)
12
+ cucumber (>= 1.1.1)
13
+ ffi (>= 1.0.11)
14
+ rspec (>= 2.7.0)
15
+ builder (3.0.0)
16
+ childprocess (0.3.4)
17
+ ffi (~> 1.0, >= 1.0.6)
18
+ columnize (0.3.6)
19
+ cucumber (1.2.1)
20
+ builder (>= 2.1.2)
21
+ diff-lcs (>= 1.1.3)
22
+ gherkin (~> 2.11.0)
23
+ json (>= 1.4.6)
24
+ debugger (1.2.0)
25
+ columnize (>= 0.3.1)
26
+ debugger-linecache (~> 1.1.1)
27
+ debugger-ruby_core_source (~> 1.1.3)
28
+ debugger-linecache (1.1.2)
29
+ debugger-ruby_core_source (>= 1.1.1)
30
+ debugger-ruby_core_source (1.1.3)
31
+ diff-lcs (1.1.3)
32
+ ffi (1.1.0)
33
+ fuubar (1.0.0)
34
+ rspec (~> 2.0)
35
+ rspec-instafail (~> 0.2.0)
36
+ ruby-progressbar (~> 0.0.10)
37
+ gherkin (2.11.1)
38
+ json (>= 1.4.6)
39
+ growl (1.0.3)
40
+ guard (1.2.3)
41
+ listen (>= 0.4.2)
42
+ thor (>= 0.14.6)
43
+ guard-cucumber (1.2.0)
44
+ cucumber (>= 1.2.0)
45
+ guard (>= 1.1.0)
46
+ guard-rspec (1.2.0)
47
+ guard (>= 1.1)
48
+ json (1.7.3)
49
+ listen (0.4.7)
50
+ rb-fchange (~> 0.0.5)
51
+ rb-fsevent (~> 0.9.1)
52
+ rb-inotify (~> 0.8.8)
53
+ rake (0.9.2.2)
54
+ rb-fchange (0.0.5)
55
+ ffi
56
+ rb-fsevent (0.9.1)
57
+ rb-inotify (0.8.8)
58
+ ffi (>= 0.5.0)
59
+ rspec (2.11.0)
60
+ rspec-core (~> 2.11.0)
61
+ rspec-expectations (~> 2.11.0)
62
+ rspec-mocks (~> 2.11.0)
63
+ rspec-core (2.11.1)
64
+ rspec-expectations (2.11.1)
65
+ diff-lcs (~> 1.1.3)
66
+ rspec-instafail (0.2.4)
67
+ rspec-mocks (2.11.1)
68
+ ruby-progressbar (0.0.10)
69
+ thor (0.15.4)
70
+
71
+ PLATFORMS
72
+ ruby
73
+
74
+ DEPENDENCIES
75
+ aruba
76
+ cucumber
77
+ debugger
78
+ fuubar
79
+ growl
80
+ guard-cucumber (~> 1.2.0)
81
+ guard-rspec (~> 1.2.0)
82
+ rake
83
+ rb-fsevent
84
+ rspec
85
+ vimjar!
data/Guardfile ADDED
@@ -0,0 +1,21 @@
1
+ # A sample Guardfile
2
+ # More info at http://github.com/guard/guard#readme
3
+
4
+ notification :growl
5
+
6
+ guard 'rspec', :version => 2, :all_on_start => false, :all_after_pass => false, :cli => "--color --format nested", :bundler => true do
7
+ watch(%r{^spec/.*_spec\.rb$})
8
+ watch(%r{^lib/(.*)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
9
+ watch(%r{^controllers/(.+)\.rb$}) { |m| "spec/integration/#{m[1]}_spec.rb" }
10
+ watch(%r{^models/(.+)\.rb$}) { |m| "spec/models/#{m[1]}_spec.rb" }
11
+ watch(%r{^spec/factories.rb$}) { |m| "spec/factories_spec.rb" }
12
+ watch(%r{^spec/factories/*.rb$}) { |m| "spec/factories_spec.rb" }
13
+ watch('spec/spec_helper.rb') { "spec" }
14
+ end
15
+
16
+
17
+ guard 'cucumber', :all_on_start => false, :notification => false do
18
+ watch(%r{features/.+\.feature})
19
+ #watch(%r{features/support/.+}) { 'features' }
20
+ #watch(%r{features/step_definitions/(.+)_steps\.rb}) { |m| Dir[File.join("**/#{m[1]}.feature")][0] || 'features' }
21
+ end
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ Copyright (c) 2012 Allen Wei
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21
+
data/README.md ADDED
@@ -0,0 +1,89 @@
1
+ [![Build Status](https://secure.travis-ci.org/allenwei/vimjar.png)](http://travis-ci.org/allenwei/vimjar)
2
+
3
+ Features
4
+ =============
5
+
6
+ * Provide a easy way to manage your plugin use vim plugin pathogen.
7
+ * Leverage git submodule, so you can keep your plugin up to date.
8
+ * Github submodule will make your dotfiles backup easy and fast.
9
+
10
+ Get more detail reading my blog post: [use git submodule keep your plugin up to date](http://www.allenwei.cn/tips-using-git-submodule-keep-your-plugin-up-to-date)
11
+
12
+ Installation
13
+ -----------
14
+
15
+ `gem install vimjar`
16
+
17
+ Usage
18
+ -----
19
+
20
+ ### Init your environment
21
+
22
+ `vimjar init`
23
+
24
+ It will check your whether your .vim path is git repo and install pathogen
25
+
26
+ ### Open BundleFile in Editor
27
+
28
+ `vimjar edit`
29
+
30
+
31
+ ### Install plugins by modify .vim/BundleFile
32
+
33
+ plugin "git://github.com/tpope/vim-fugitive.git"
34
+ plugin "git://github.com/tpope/vim-rails.git"
35
+
36
+ ### Install plugins
37
+
38
+ `vimjar install` or just `vimjar`
39
+
40
+
41
+ ### Update all plugins
42
+
43
+ `vimjar update`
44
+
45
+ ### List installed plugin
46
+
47
+ `vimjar installed`
48
+
49
+ ### Uninstall plugin
50
+
51
+ `vimjar uninstall PLUGIN_NAME`
52
+
53
+ ### Get help
54
+
55
+ `vimjar -h`
56
+
57
+ Roadmap
58
+ =============
59
+
60
+ * Update installed plugins
61
+ * Install from vim.org, autodetect vga, compressed plugin and folds.
62
+ * Install theme
63
+ * Preivew theme screeshot
64
+ * Everyone contribute plugin source
65
+ * Rank popular plugins
66
+ * Category plugins
67
+
68
+ Troubleshooting
69
+ =============
70
+ * Git submodule error - I suggest re-install these plugins
71
+ Like these
72
+
73
+ `Unable to checkout 'e53a8582a4b1fcb664779bf598de9830cc8d4613' in submodule path 'bundle/vim-ruby'
74
+ error: More than one value for the key submodule.bundle/rails.url: git://github.com/ujihisa/quickrun.git
75
+ `
76
+
77
+ ## Note on Patches/Pull Requests
78
+
79
+ * Fork the project.
80
+ * Make your feature addition or bug fix.
81
+ * Add tests for it. This is important so I don't break it in a
82
+ future version unintentionally. Note: the existing tests may fail
83
+ * Commit, do not mess with Rakefile, gemspec or History.
84
+ (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
85
+ * Send me a pull request. Bonus points for topic branches.
86
+
87
+ ## Copyright
88
+
89
+ Copyright (c) 2012 Allen Wei. See LICENSE for details.
data/Rakefile ADDED
@@ -0,0 +1,2 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
data/bin/vimjar ADDED
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ if ENV['VIM_JAR_TEST']
4
+ $:.unshift File.expand_path("./../lib", File.dirname(__FILE__)) #TODO remove me before release
5
+ require 'rubygems'
6
+ end
7
+
8
+ require 'vim-jar/cli'
9
+
10
+ Vim::Jar::Cli.start
data/cucumber.yml ADDED
@@ -0,0 +1,6 @@
1
+ default: --format progress features
2
+ html_report: --format progress --format html --out=features_report.html features
3
+ wip: --tags @wip:1 --wip
4
+ autotest: --color --format progress
5
+ autotest-all: --color --format progress
6
+
@@ -0,0 +1,37 @@
1
+ Feature: Init environment
2
+
3
+ Scenario: There is no .vim folder
4
+ Given There is not .vim folder in user home.
5
+ When I run command "init"
6
+ Then I should get there is no .vim folder error
7
+
8
+ Scenario: There is no .vimrc
9
+ Given There is not .vimrc file in .vim
10
+ When I run command "init"
11
+ Then I should get there is no .vimrc file error
12
+
13
+ Scenario: .vim folder is not a git repo
14
+ Given .vim and .vimrc
15
+ Given .vim is not git repo
16
+ When I run command "init"
17
+ Then I should get .vim is not a git repo warning
18
+
19
+ Scenario: .vim folder is not a git repo
20
+ Given .vim and .vimrc
21
+ Given .vim is not git repo
22
+ When I run command "init"
23
+ Then I should get .vim is not a git repo warning
24
+
25
+ Scenario: there is not pathogen.vim in .vim/autoload
26
+ Given .vim and .vimrc
27
+ And .vim is git repo
28
+ When I run command "init"
29
+ Then I should get install pathogen notice
30
+ And It should install pathogen for me
31
+
32
+ Scenario: init BundleFile
33
+ Given .vim and .vimrc
34
+ And .vim is git repo
35
+ When I run command "init"
36
+ Then I should have initial BundleFile
37
+ And It should get get BundleFile notice
@@ -0,0 +1,8 @@
1
+ Feature: Install
2
+ Background:
3
+ Given .vim and .vimrc
4
+
5
+ Scenario: there is not pathogen.vim in .vim/autoload
6
+ When I successfully run command "init"
7
+ When I run command "install"
8
+ Then I should see "vim-fugitive" in installed list
@@ -0,0 +1,7 @@
1
+ Feature: Listing
2
+
3
+ Scenario: list all posible plugin
4
+ Given a full environment
5
+ And a installed plugin "vim-fugitive"
6
+ Then I should see "vim-fugitive" in installed list
7
+
@@ -0,0 +1,21 @@
1
+ When /^I run command "([^"]*)"$/ do |command|
2
+ @aruba_io_wait_seconds = 20
3
+ step "I run `bundle exec #{bin_path} #{command}`"
4
+ end
5
+
6
+ When /^I successfully run command "([^"]*)"$/ do |command|
7
+ step "I successfully run `bundle exec #{bin_path} #{command}`"
8
+ end
9
+
10
+
11
+
12
+ Then /^I should see "([^"]*)" in installed list$/ do |plugin_name|
13
+ step "I run command \"installed\""
14
+ step %Q{the stdout should contain "#{plugin_name}"}
15
+ end
16
+
17
+
18
+ Then /^I should see update success message$/ do |plugin_name|
19
+ step %Q{the stdout should contain "All your plugin is up to date."}
20
+ end
21
+
@@ -0,0 +1,34 @@
1
+ Given /^There is not \.vim folder in user home\.$/ do
2
+ FileUtils.rm_rf config.vim_home
3
+ end
4
+
5
+ Given /^There is not \.vimrc file in \.vim$/ do
6
+ FileUtils.rm_rf config.vimrc_path
7
+ end
8
+
9
+ Given /^\.vim and \.vimrc$/ do
10
+ FileUtils.mkdir_p config.vim_home
11
+ FileUtils.touch config.vimrc_path
12
+ end
13
+
14
+
15
+ Given /^\.vim is not git repo$/ do
16
+ FileUtils.rm_rf config.vim_home.join(".git")
17
+ end
18
+
19
+ Given /^\.vim is git repo$/ do
20
+ FileUtils.mkdir_p config.vim_home
21
+ Dir.chdir(config.vim_home) do
22
+ `git init > /dev/null`
23
+ end
24
+ end
25
+
26
+ Given /^a full environment$/ do
27
+ step ".vim and .vimrc"
28
+ config.check
29
+ end
30
+
31
+
32
+ Given /^a installed plugin "(.*?)"$/ do |plugin|
33
+ FileUtils.mkdir_p(config.bundle_home.join(plugin))
34
+ end
@@ -0,0 +1,20 @@
1
+ Then /^It should install pathogen for me$/ do
2
+ File.exist?(config.pathogen_path).should be_true
3
+ end
4
+
5
+ Then /^I should not see plugin "([^"]*)" in bundle home$/ do |plugin_name|
6
+ File.exist?(config.bundle_home.join(plugin_name)).should be false
7
+ end
8
+
9
+ Then /^I should not see plugin "([^"]*)" in \.git\/config$/ do |plugin_name|
10
+ File.read(config.gitmodules_file_path).should_not match /#{plugin_name}/
11
+ end
12
+
13
+ Then /^I should not see plugin "([^"]*)" in \.gitmodules$/ do |plugin_name|
14
+ File.read(config.gitconfig_file_path).should_not match /#{plugin_name}/
15
+ end
16
+
17
+ Then /^I should have initial BundleFile$/ do
18
+ File.exists?(config.bundle_file_path).should eq true
19
+ end
20
+
@@ -0,0 +1,23 @@
1
+ Then /^I should get there is no \.vim folder error$/ do
2
+ step "the stderr should contain \"doesn't exist\""
3
+ end
4
+
5
+ Then /^I should get there is no \.vimrc file error$/ do
6
+ step "the stderr should contain \"doesn't exist\""
7
+ end
8
+
9
+ Then /^I should get \.vim is not a git repo warning$/ do
10
+ step "the stdout should contain \"your .vim folder is not a git repository\""
11
+ end
12
+
13
+ Then /^I should get install pathogen notice$/ do
14
+ step "the stdout should contain \"Pathogen is installed into\""
15
+ end
16
+
17
+ Then /^I should see more than one plugin$/ do
18
+ step %Q{the stdout should contain "vim-rails"}
19
+ end
20
+
21
+ Then /^It should get get BundleFile notice$/ do
22
+ step %Q{the stdout should contain "You add more plugins by modify this file"}
23
+ end
@@ -0,0 +1,4 @@
1
+ Then /^It should install "([^"]*)"$/ do |plugin_name|
2
+ File.exist?(config.bundle_home.join(plugin_name)).should be true
3
+ end
4
+
@@ -0,0 +1,22 @@
1
+
2
+ ENV['VIM_JAR_USER_HOME'] = File.expand_path("../../tmp",File.dirname(__FILE__))
3
+
4
+ ENV['VIM_JAR_TEST'] = "true"
5
+
6
+ require 'fileutils'
7
+ require 'aruba/cucumber'
8
+ require File.expand_path('../../lib/vim-jar', File.dirname(__FILE__))
9
+ require File.expand_path('../../lib/vim-jar/cli', File.dirname(__FILE__))
10
+
11
+ FileUtils.mkdir_p ENV['VIM_JAR_USER_HOME']
12
+ module Vim::Jar::World
13
+ def config
14
+ ::Vim::Jar::Config.instance
15
+ end
16
+
17
+ def bin_path
18
+ File.expand_path('../../bin/vim-jar', File.dirname(__FILE__))
19
+ end
20
+ end
21
+
22
+ World(Vim::Jar::World)
@@ -0,0 +1,8 @@
1
+ After do
2
+ FileUtils.rm_rf(File.expand_path("../../tmp",File.dirname(__FILE__)))
3
+ end
4
+
5
+ at_exit do
6
+ FileUtils.rm_rf(File.expand_path("../../tmp",File.dirname(__FILE__)))
7
+ end
8
+
File without changes
@@ -0,0 +1,12 @@
1
+ Feature: Install
2
+
3
+ Scenario: install an existing plugin correctly
4
+ Given a full environment
5
+ When I run command "install"
6
+ Then I should see "vim-fugitive" in installed list
7
+ When I run command "uninstall vim-rails"
8
+ Then I should not see plugin "vim-rails" in bundle home
9
+ Then I should not see plugin "vim-rails" in .git/config
10
+ Then I should not see plugin "vim-rails" in .gitmodules
11
+
12
+
@@ -0,0 +1,7 @@
1
+ Feature: Update
2
+
3
+ Scenario: Update plugins
4
+ Given a full environment
5
+ When I run command "update"
6
+ Then I should see update success message
7
+
@@ -0,0 +1 @@
1
+ plugin "git://github.com/tpope/vim-fugitive.git"
@@ -0,0 +1,91 @@
1
+ require 'vim-jar'
2
+
3
+ module Vim
4
+ module Jar
5
+ class Cli < Thor
6
+ map "-T" => :installed
7
+ default_task :install
8
+
9
+ desc "init","init environment"
10
+ def init
11
+ check!
12
+ done
13
+ exit 0
14
+ end
15
+
16
+ desc "install", "install plugin according to BundleFile"
17
+ def install
18
+ check!
19
+ loader = ::Vim::Jar::Loader.new
20
+ loader.execute
21
+ end
22
+
23
+ desc "Edit", "open BundleFile in editor"
24
+ def edit
25
+ check!
26
+ editor = [ENV['BUNDLER_EDITOR'], ENV['VISUAL'], ENV['EDITOR']].find{|e| !e.nil? && !e.empty? }
27
+ if editor
28
+ command = "#{editor} #{config.bundle_file_path}"
29
+ success = system(command)
30
+ raise ::Vim::Jar::InstallError.new "Could not run '#{command}'" unless success
31
+ else
32
+ ::Vim::Jar::InstallError.new("To open BundleFile, set $EDITOR or $BUNDLER_EDITOR")
33
+ end
34
+ end
35
+
36
+
37
+ desc "installed", "list all installed plugins"
38
+ def installed
39
+ STDOUT.puts ::Vim::Jar::Plugin.installed.join("\n")
40
+ end
41
+
42
+ desc "update", "Update all installed plugin"
43
+ def update
44
+ check!
45
+ if ::Vim::Jar::Plugin.update
46
+ STDOUT.puts "All your plugin is up to date."
47
+ end
48
+ end
49
+
50
+ desc "uninstall", "uninstall installed plugin"
51
+ def uninstall(name)
52
+ check!
53
+ if ::Vim::Jar::Plugin.installed.include?(name)
54
+ ::Vim::Jar::Plugin.uninstall(name)
55
+ STDOUT.puts "plugin #{name} has been already remove from #{config.bundle_home.join(name)}"
56
+ else
57
+ STDERR.puts "You didn't install plugin named #{name}"
58
+ end
59
+
60
+ end
61
+
62
+ private
63
+ def config
64
+ @config ||= Vim::Jar.config
65
+ end
66
+
67
+ def check!
68
+ begin
69
+ config.check
70
+ rescue InitError => e
71
+ STDERR.puts "Can not init environment because of #{e.message}"
72
+ exit 1
73
+ end
74
+ end
75
+
76
+
77
+ def done
78
+ #TODO improve finish message
79
+ STDOUT.puts <<-EOF
80
+
81
+ Congratulation! vimjar already initialized your environment.
82
+
83
+ Try:
84
+
85
+ vimjar install
86
+
87
+ EOF
88
+ end
89
+ end
90
+ end
91
+ end