inventory_manager 0.0.8

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.
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ MGJhMzM1OGVkZWVmODI0ODM0ZWI0OGM5NTZhMjJmYWM4YTcxM2JkNA==
5
+ data.tar.gz: !binary |-
6
+ YmFjYTU3MjA2ZTMzYmI3ZjJkNzg0NWM1NzEzMmJmZDYxMjU5MDdlMA==
7
+ SHA512:
8
+ metadata.gz: !binary |-
9
+ ODJjOTBhMTQ3ZWVhODNkZTI3NWRjYmU2MWIyYjMzNmMxMWMxYjM2MjRlZWFh
10
+ NDkzMmU2MzY2Mjg5MzdmMjhkZjdkZDFjZjUxM2E2MjQ1Zjk5ODY2MTAxY2Yz
11
+ YjQwNmEzNjQxOTg3OTEyMGQwOTk1Y2U4M2E5OTlmYWY1ZjkyYTQ=
12
+ data.tar.gz: !binary |-
13
+ ZDMwNDg2OGU4MjUzMzAyZDA4ZTg3MWFlZjk2NjU0M2RjNzRiODE1NGVjM2Y2
14
+ ZTg5ODBmNjkyMWNiZGJmODIzNTAyZWIxODVhMDdmMDgzMGEzMTVjZDQxZDA5
15
+ NGM1M2MzMjk5ZWY4ZWJkNmZiZTQ4ZWQ3MTkxMGRjZTdhZmU2YzU=
@@ -0,0 +1,20 @@
1
+ Copyright 2013 YOURNAME
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.
@@ -0,0 +1,3 @@
1
+ = InventoryManager
2
+
3
+ This project rocks and uses MIT-LICENSE.
@@ -0,0 +1,21 @@
1
+ begin
2
+ require 'bundler/setup'
3
+ rescue LoadError
4
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
5
+ end
6
+
7
+ require 'rdoc/task'
8
+
9
+ RDoc::Task.new(:rdoc) do |rdoc|
10
+ rdoc.rdoc_dir = 'rdoc'
11
+ rdoc.title = 'InventoryManager'
12
+ rdoc.options << '--line-numbers'
13
+ rdoc.rdoc_files.include('README.rdoc')
14
+ rdoc.rdoc_files.include('lib/**/*.rb')
15
+ end
16
+
17
+
18
+
19
+
20
+ Bundler::GemHelper.install_tasks
21
+
@@ -0,0 +1,7 @@
1
+ #location-links {
2
+ list-style: none;
3
+ padding-left: 0;
4
+ li {
5
+ display: inline-block;
6
+ }
7
+ }
@@ -0,0 +1,52 @@
1
+ class CabinetsController < ApplicationController
2
+ respond_to :html, :json
3
+ authorize_resource
4
+
5
+ def index
6
+ @cabinets = Cabinet.order('identifier')
7
+
8
+ if params[:location]
9
+ @cabinet_location = Location.find(params[:location])
10
+ @cabinets = @cabinets.where(location_id: @cabinet_location.id) if @cabinet_location
11
+ end
12
+
13
+ if params[:identifier]
14
+ @cabinets = @cabinets.where(identifier: params[:identifier])
15
+ end
16
+ end
17
+
18
+ def new
19
+ @cabinet = Cabinet.new
20
+ end
21
+
22
+ def create
23
+ @cabinet = Cabinet.new( cabinet_params )
24
+ if @cabinet.save
25
+ redirect_to new_cabinet_path, notice: 'Your changes were saved'
26
+ else
27
+ render :new, error: 'Sorry, your changes could not be saved'
28
+ end
29
+ end
30
+
31
+ def edit
32
+ @cabinet = Cabinet.find(params[:id])
33
+ end
34
+
35
+ def update
36
+ @cabinet = Cabinet.find(params[:id])
37
+ @cabinet.update_attributes( cabinet_params )
38
+ redirect_to cabinets_path
39
+ end
40
+
41
+ def destroy
42
+ @cabinet = Cabinet.find(params[:id])
43
+ @cabinet.destroy
44
+ redirect_to cabinets_path, notice: 'Cabinet deleted'
45
+ end
46
+
47
+ private
48
+
49
+ def cabinet_params
50
+ params.require(:cabinet).permit!
51
+ end
52
+ end
@@ -0,0 +1,53 @@
1
+ class ParkingClickersController < ApplicationController
2
+ respond_to :html, :json
3
+ authorize_resource
4
+
5
+ def index
6
+ @parking_clickers = ParkingClicker.order('identifier')
7
+
8
+ if params[:location]
9
+ @parking_clicker_location = Location.find(params[:location])
10
+ @parking_clickers = @parking_clickers.where(location_id: @parking_clicker_location.id) if @parking_clicker_location
11
+ end
12
+
13
+ if params[:identifier]
14
+ @parking_clickers = @parking_clickers.where(identifier: params[:identifier])
15
+ end
16
+ end
17
+
18
+ def new
19
+ @parking_clicker = ParkingClicker.new
20
+ end
21
+
22
+ def create
23
+ @parking_clicker = ParkingClicker.new( parking_clicker_params )
24
+ if @parking_clicker.save
25
+ redirect_to new_parking_clicker_path, notice: 'Your changes were saved'
26
+ else
27
+ render :new, error: 'Sorry, your changes could not be saved'
28
+ end
29
+ end
30
+
31
+ def edit
32
+ @parking_clicker = ParkingClicker.find(params[:id])
33
+ end
34
+
35
+ def update
36
+ @parking_clicker = ParkingClicker.find(params[:id])
37
+ @parking_clicker.update_attributes( parking_clicker_params )
38
+ redirect_to parking_clickers_path
39
+ end
40
+
41
+ def destroy
42
+ @parking_clicker = ParkingClicker.find(params[:id])
43
+ @parking_clicker.destroy
44
+ redirect_to parking_clickers_path, notice: 'ParkingClicker deleted'
45
+ end
46
+
47
+ private
48
+
49
+ def parking_clicker_params
50
+ params.require(:parking_clicker).permit!
51
+ end
52
+ end
53
+
@@ -0,0 +1,16 @@
1
+ class Cabinet < Item
2
+
3
+ STATES = [ :available, :in_use, :need_keys]
4
+
5
+ state_machine :state do
6
+
7
+ event :need_keys! do
8
+ transition [ :in_use, :availble ] => :need_keys
9
+ end
10
+
11
+ state :need_keys do
12
+ def assigned?; false; end
13
+ end
14
+ end
15
+
16
+ end
@@ -0,0 +1,50 @@
1
+ class Item < ActiveRecord::Base
2
+ belongs_to :location
3
+ belongs_to :employee, foreign_key: 'assignee_id'
4
+
5
+ def employee
6
+ Employee.unscoped { super }
7
+ end
8
+
9
+ state_machine :state, initial: :available do
10
+
11
+ after_transition on: :release do |item, transiton|
12
+ item.update_attributes(assignee_id: nil)
13
+ end
14
+
15
+ event :assign do
16
+ transition [ :available ] => :in_use
17
+ end
18
+
19
+ event :release do
20
+ transition [ :in_use ] => :available
21
+ end
22
+
23
+ state :available do
24
+ def assigned?; false; end
25
+ end
26
+
27
+ state :in_use do
28
+ def assigned?; true; end
29
+ end
30
+ end
31
+
32
+ def assign_with_id!(assignee_id)
33
+ if assignee_id && self.assign!
34
+ self.assignee_id = assignee_id
35
+ self.save # two saves?
36
+ end
37
+ end
38
+
39
+
40
+ module EmployeeMethods
41
+ def self.included(base)
42
+ # base.send :extend, ClassMethods
43
+ end
44
+
45
+ def inventory
46
+ Item.where(assignee_id: id)
47
+ end
48
+ end
49
+
50
+ end
@@ -0,0 +1,5 @@
1
+ class ParkingClicker < Item
2
+
3
+ STATES = [ :available, :in_use ]
4
+ end
5
+
@@ -0,0 +1,30 @@
1
+ <%= simple_form_for @cabinet, class: 'form-horizontal' do |f| %>
2
+
3
+ <div class="form-group">
4
+ <%= f.input :identifier, input_html: { size: 20 } %>
5
+ </div>
6
+
7
+ <div class="form-group">
8
+ <%= f.label :location_id, 'Location' %>
9
+ <%= select('cabinet', 'location_id', Location.all.collect { |l| [ l.name, l.id ] } ) %>
10
+ </div>
11
+
12
+ <div class="form-group">
13
+ <%= f.label :state, 'Status' %>
14
+ <%= select('cabinet', 'state', Cabinet::STATES, selected: 'in_use') %>
15
+ </div>
16
+
17
+ <div class="form-group">
18
+ <%= f.label :assignee_id, 'Assigned to' %>
19
+ <%= select('cabinet', 'assignee_id', Employee.where(location_id: 6).order('name').collect { |l| [ l.name, l.id ] }, include_blank: true ) %>
20
+ </div>
21
+
22
+ <%= f.submit 'Submit', class: 'btn btn-default' %>
23
+ <%- end %>
24
+ <%- unless @cabinet.new_record? %>
25
+ <p></p>
26
+ <p>
27
+ <%= link_to 'Delete Cabinet', cabinet_path(@cabinet), method: :delete, confirm: 'Are you sure?', class: 'btn btn-large btn-danger' %>
28
+ </p>
29
+ <% end %>
30
+ <p></p>
@@ -0,0 +1,7 @@
1
+ <h1>Update a Cabinet</h1>
2
+
3
+ <%= render 'form' %>
4
+
5
+ <p class="center-align">
6
+ <%= link_to 'Back to Cabinets', cabinets_path %>
7
+ </p>
@@ -0,0 +1,54 @@
1
+ <ul id="location-links">
2
+ <%- Location.all.each do |location| %>
3
+ <li>
4
+ <%= link_to location.name, cabinets_path(location: location.id, identifier: params[:identifier]), class: "btn #{ @cabinet_location.try(:id) == location.id ? 'btn-primary' : 'btn-default' } btn-xs" %>
5
+ </li>
6
+ <%- end %>
7
+ <li>
8
+ <%= link_to 'All', cabinets_path(identifier: params[:identifier]), class: "btn #{ params[:location].present? ? 'btn-default' : 'btn-primary' } btn-xs" %>
9
+ </li>
10
+ </ul>
11
+
12
+ <h1>Cabinets <%= "for #{@cabinet_location.name}" if @cabinet_location %></h1>
13
+ <%- if params[:identifier] %>
14
+ <h2 class="alert alert-info">Searching for <em>&#8220;<%= params[:identifier] %>&#8221;</em> <%= "in #{@cabinet_location.name}" if @cabinet_location %></h2>
15
+ <%- end %>
16
+
17
+ <h2 style="text-align:right;">
18
+ <%= link_to 'Add a Cabinet', new_cabinet_path, class: 'btn btn-primary' %>
19
+ <%= form_tag(cabinets_path, method: :get, class: 'form-inline', role: 'form') %>
20
+ <div class="form-group">
21
+ <%= search_field_tag :identifier, params[:identifier], placeholder: 'Cabinet ID', style: 'font-size:70%;' %>
22
+ <%= submit_tag 'Search', class: 'btn btn-primary' %>
23
+ <%- if params[:identifier] %>
24
+ <p class="small" style="font-size:12px;margin-top:5px;"><%= link_to 'Clear search', cabinets_path(location: @cabinet_location.try(:id)) %></p>
25
+ <%- end %>
26
+ </div>
27
+
28
+ </h2>
29
+
30
+ <table class="table table-striped cabinets">
31
+ <thead>
32
+ <tr>
33
+ <th>Identifier</th>
34
+ <th>Status</th>
35
+ <th>Location</th>
36
+ <th>Assigned to</th>
37
+ <th></th>
38
+ </tr>
39
+ </thead>
40
+
41
+ <tbody>
42
+ <%- @cabinets.each do |cabinet| %>
43
+ <tr>
44
+ <td><%= link_to cabinet.identifier, cabinets_path(identifier: cabinet.identifier, location: @cabinet_location.try(:id)) %></td>
45
+ <td><%= cabinet.state %></td>
46
+ <td><%= cabinet.location.try(:name) %></td>
47
+ <td><%= cabinet.employee.try(:name) %></td>
48
+ <td>
49
+ <%= link_to content_tag(:span, '', class: 'glyphicon glyphicon-edit'), edit_cabinet_path(cabinet) %>
50
+ </td>
51
+ </tr>
52
+ <%- end %>
53
+ </tbody>
54
+ </ul>
@@ -0,0 +1,7 @@
1
+ <h1>Add a Cabinet</h1>
2
+
3
+ <%= render 'form' %>
4
+
5
+ <p class="center-align">
6
+ <%= link_to 'Back to Cabinets', cabinets_path %>
7
+ </p>
@@ -0,0 +1,30 @@
1
+ <%= simple_form_for @parking_clicker, class: 'form-horizontal' do |f| %>
2
+
3
+ <div class="form-group">
4
+ <%= f.input :identifier, input_html: { size: 20 } %>
5
+ </div>
6
+
7
+ <div class="form-group">
8
+ <%= f.label :location_id, 'Location' %>
9
+ <%= select('parking_clicker', 'location_id', Location.all.collect { |l| [ l.name, l.id ] } ) %>
10
+ </div>
11
+
12
+ <div class="form-group">
13
+ <%= f.label :state, 'Status' %>
14
+ <%= select('parking_clicker', 'state', ParkingClicker::STATES, selected: 'in_use') %>
15
+ </div>
16
+
17
+ <div class="form-group">
18
+ <%= f.label :assignee_id, 'Assigned to' %>
19
+ <%= select('parking_clicker', 'assignee_id', Employee.where(location_id: 6).order('name').collect { |l| [ l.name, l.id ] }, include_blank: true ) %>
20
+ </div>
21
+
22
+ <%= f.submit 'Submit', class: 'btn btn-default' %>
23
+ <%- end %>
24
+ <%- unless @parking_clicker.new_record? %>
25
+ <p></p>
26
+ <p>
27
+ <%= link_to 'Delete Parking Clicker', parking_clicker_path(@parking_clicker), method: :delete, confirm: 'Are you sure?', class: 'btn btn-large btn-danger' %>
28
+ </p>
29
+ <% end %>
30
+ <p></p>
@@ -0,0 +1,7 @@
1
+ <h1>Update a Parking Clicker</h1>
2
+
3
+ <%= render 'form' %>
4
+
5
+ <p class="center-align">
6
+ <%= link_to 'Back to Parking Clickers', parking_clickers_path %>
7
+ </p>
@@ -0,0 +1,54 @@
1
+ <ul id="location-links">
2
+ <%- Location.all.each do |location| %>
3
+ <li>
4
+ <%= link_to location.name, parking_clickers_path(location: location.id, identifier: params[:identifier]), class: "btn #{ @parking_clicker_location.try(:id) == location.id ? 'btn-primary' : 'btn-default' } btn-xs" %>
5
+ </li>
6
+ <%- end %>
7
+ <li>
8
+ <%= link_to 'All', parking_clickers_path(identifier: params[:identifier]), class: "btn #{ params[:location].present? ? 'btn-default' : 'btn-primary' } btn-xs" %>
9
+ </li>
10
+ </ul>
11
+
12
+ <h1>Parking Clickers <%= "for #{@parking_clicker_location.name}" if @parking_clicker_location %></h1>
13
+ <%- if params[:identifier] %>
14
+ <h2 class="alert alert-info">Searching for <em>&#8220;<%= params[:identifier] %>&#8221;</em> <%= "in #{@parking_clicker_location.name}" if @parking_clicker_location %></h2>
15
+ <%- end %>
16
+
17
+ <h2 style="text-align:right;">
18
+ <%= link_to 'Add a Parking Clicker', new_parking_clicker_path, class: 'btn btn-primary' %>
19
+ <%= form_tag(parking_clickers_path, method: :get, class: 'form-inline', role: 'form') %>
20
+ <div class="form-group">
21
+ <%= search_field_tag :identifier, params[:identifier], placeholder: 'Parking Clicker ID', style: 'font-size:70%;' %>
22
+ <%= submit_tag 'Search', class: 'btn btn-primary' %>
23
+ <%- if params[:identifier] %>
24
+ <p class="small" style="font-size:12px;margin-top:5px;"><%= link_to 'Clear search', parking_clickers_path(location: @parking_clicker_location.try(:id)) %></p>
25
+ <%- end %>
26
+ </div>
27
+
28
+ </h2>
29
+
30
+ <table class="table table-striped parking_clickers">
31
+ <thead>
32
+ <tr>
33
+ <th>Identifier</th>
34
+ <th>Status</th>
35
+ <th>Location</th>
36
+ <th>Assigned to</th>
37
+ <th></th>
38
+ </tr>
39
+ </thead>
40
+
41
+ <tbody>
42
+ <%- @parking_clickers.each do |parking_clicker| %>
43
+ <tr>
44
+ <td><%= link_to parking_clicker.identifier, parking_clickers_path(identifier: parking_clicker.identifier, location: @parking_clicker_location.try(:id)) %></td>
45
+ <td><%= parking_clicker.state %></td>
46
+ <td><%= parking_clicker.location.try(:name) %></td>
47
+ <td><%= parking_clicker.employee.try(:name) %></td>
48
+ <td>
49
+ <%= link_to content_tag(:span, '', class: 'glyphicon glyphicon-edit'), edit_parking_clicker_path(parking_clicker) %>
50
+ </td>
51
+ </tr>
52
+ <%- end %>
53
+ </tbody>
54
+ </ul>
@@ -0,0 +1,7 @@
1
+ <h1>Add a Parking Clicker</h1>
2
+
3
+ <%= render 'form' %>
4
+
5
+ <p class="center-align">
6
+ <%= link_to 'Back to Parking Clickers', parking_clickers_path %>
7
+ </p>
@@ -0,0 +1,4 @@
1
+ Rails.application.routes.draw do
2
+ resources :cabinets
3
+ resources :parking_clickers
4
+ end
@@ -0,0 +1,13 @@
1
+ class CreateItems < ActiveRecord::Migration
2
+ def change
3
+ create_table :items do |t|
4
+ t.string :type
5
+ t.string :identifier
6
+ t.references :location, index: true
7
+ t.string :state
8
+ t.integer :assignee_id
9
+
10
+ t.timestamps
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,6 @@
1
+ require 'state_machine'
2
+ require 'simple_form'
3
+ require "inventory_manager/engine"
4
+
5
+ module InventoryManager
6
+ end
@@ -0,0 +1,4 @@
1
+ module InventoryManager
2
+ class Engine < ::Rails::Engine
3
+ end
4
+ end
@@ -0,0 +1,3 @@
1
+ module InventoryManager
2
+ VERSION = "0.0.8"
3
+ end
@@ -0,0 +1,4 @@
1
+ # desc "Explaining what the task does"
2
+ # task :inventory_manager do
3
+ # # Task goes here
4
+ # end
metadata ADDED
@@ -0,0 +1,122 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: inventory_manager
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.8
5
+ platform: ruby
6
+ authors:
7
+ - David A McClain
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-02-02 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rails
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: 4.0.1
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: 4.0.1
27
+ - !ruby/object:Gem::Dependency
28
+ name: simple_form
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ! '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ! '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: state_machine
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ! '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: pg
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ! '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ description: ! ' Description of InventoryManager.'
70
+ email:
71
+ - d.mcclain@modcloth.com
72
+ executables: []
73
+ extensions: []
74
+ extra_rdoc_files: []
75
+ files:
76
+ - MIT-LICENSE
77
+ - README.rdoc
78
+ - Rakefile
79
+ - app/assets/stylesheets/inventory_manager/cabinets.css.scss
80
+ - app/controllers/cabinets_controller.rb
81
+ - app/controllers/parking_clickers_controller.rb
82
+ - app/models/cabinet.rb
83
+ - app/models/item.rb
84
+ - app/models/parking_clicker.rb
85
+ - app/views/cabinets/_form.html.erb
86
+ - app/views/cabinets/edit.html.erb
87
+ - app/views/cabinets/index.html.erb
88
+ - app/views/cabinets/new.html.erb
89
+ - app/views/parking_clickers/_form.html.erb
90
+ - app/views/parking_clickers/edit.html.erb
91
+ - app/views/parking_clickers/index.html.erb
92
+ - app/views/parking_clickers/new.html.erb
93
+ - config/routes.rb
94
+ - db/migrate/20131118223455_create_items.rb
95
+ - lib/inventory_manager.rb
96
+ - lib/inventory_manager/engine.rb
97
+ - lib/inventory_manager/version.rb
98
+ - lib/tasks/inventory_manager_tasks.rake
99
+ homepage: http://github.com/uhhuhyeah/inventory_manager
100
+ licenses: []
101
+ metadata: {}
102
+ post_install_message:
103
+ rdoc_options: []
104
+ require_paths:
105
+ - lib
106
+ required_ruby_version: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ! '>='
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ required_rubygems_version: !ruby/object:Gem::Requirement
112
+ requirements:
113
+ - - ! '>='
114
+ - !ruby/object:Gem::Version
115
+ version: '0'
116
+ requirements: []
117
+ rubyforge_project:
118
+ rubygems_version: 2.2.2
119
+ signing_key:
120
+ specification_version: 4
121
+ summary: Summary of InventoryManager.
122
+ test_files: []