inventory_manager 0.0.8

Sign up to get free protection for your applications and to get access to all the features.
@@ -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: []