zwea_bot 0.1.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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 1d96fc7778624091d69e8cd0a86bb44cdeeb414b
4
+ data.tar.gz: 3af08c6d0ab77dc47c4341ddfa5dd19a7701f2be
5
+ SHA512:
6
+ metadata.gz: 2607d3b9efe6e2964062dbba495c2939f5190cebec41d1f537d7954f93131cd19b59ee04c2d4f81ab47b0b79e003dba3f230bd2aad33c63d17e58d77bd44228a
7
+ data.tar.gz: e8c1ab3ac0718b709335e78794e65e9dd92984944af0c5c040a35fec5e6307b7710734d7911414e070aa2b31c540de3f129071e14624a5cbd3a332c0eed16df7
data/.gitignore ADDED
@@ -0,0 +1,8 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /_yardoc/
4
+ /coverage/
5
+ /doc/
6
+ /pkg/
7
+ /spec/reports/
8
+ /tmp/
data/.travis.yml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ sudo: false
3
+ language: ruby
4
+ cache: bundler
5
+ rvm:
6
+ - 2.2.2
7
+ before_install: gem install bundler -v 1.16.6
data/Gemfile ADDED
@@ -0,0 +1,6 @@
1
+ source "https://rubygems.org"
2
+
3
+ git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
4
+
5
+ # Specify your gem's dependencies in zwea_bot.gemspec
6
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,65 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ zwea_bot (0.1.0)
5
+ activerecord
6
+ roo
7
+ sqlite3
8
+
9
+ GEM
10
+ remote: https://rubygems.org/
11
+ specs:
12
+ activemodel (5.2.1)
13
+ activesupport (= 5.2.1)
14
+ activerecord (5.2.1)
15
+ activemodel (= 5.2.1)
16
+ activesupport (= 5.2.1)
17
+ arel (>= 9.0)
18
+ activesupport (5.2.1)
19
+ concurrent-ruby (~> 1.0, >= 1.0.2)
20
+ i18n (>= 0.7, < 2)
21
+ minitest (~> 5.1)
22
+ tzinfo (~> 1.1)
23
+ arel (9.0.0)
24
+ concurrent-ruby (1.0.5)
25
+ diff-lcs (1.3)
26
+ i18n (1.1.1)
27
+ concurrent-ruby (~> 1.0)
28
+ mini_portile2 (2.3.0)
29
+ minitest (5.11.3)
30
+ nokogiri (1.8.5)
31
+ mini_portile2 (~> 2.3.0)
32
+ rake (10.5.0)
33
+ roo (2.7.1)
34
+ nokogiri (~> 1)
35
+ rubyzip (~> 1.1, < 2.0.0)
36
+ rspec (3.8.0)
37
+ rspec-core (~> 3.8.0)
38
+ rspec-expectations (~> 3.8.0)
39
+ rspec-mocks (~> 3.8.0)
40
+ rspec-core (3.8.0)
41
+ rspec-support (~> 3.8.0)
42
+ rspec-expectations (3.8.2)
43
+ diff-lcs (>= 1.2.0, < 2.0)
44
+ rspec-support (~> 3.8.0)
45
+ rspec-mocks (3.8.0)
46
+ diff-lcs (>= 1.2.0, < 2.0)
47
+ rspec-support (~> 3.8.0)
48
+ rspec-support (3.8.0)
49
+ rubyzip (1.2.2)
50
+ sqlite3 (1.3.13)
51
+ thread_safe (0.3.6)
52
+ tzinfo (1.2.5)
53
+ thread_safe (~> 0.1)
54
+
55
+ PLATFORMS
56
+ ruby
57
+
58
+ DEPENDENCIES
59
+ bundler (~> 1.16)
60
+ rake (~> 10.0)
61
+ rspec (~> 3.2)
62
+ zwea_bot!
63
+
64
+ BUNDLED WITH
65
+ 1.16.6
data/README.md ADDED
@@ -0,0 +1,45 @@
1
+ # ZweaBot
2
+
3
+ Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/zwea_bot`. To experiment with that code, run `bin/console` for an interactive prompt.
4
+
5
+ TODO: Delete this and the text above, and describe your gem
6
+
7
+ ## Installation
8
+
9
+ Add this line to your application's Gemfile:
10
+
11
+ ```ruby
12
+ gem 'zwea_bot'
13
+ ```
14
+
15
+ And then execute:
16
+
17
+ $ bundle
18
+
19
+ Or install it yourself as:
20
+
21
+ $ gem install zwea_bot
22
+
23
+ ## Usage
24
+
25
+ TODO: Write usage instructions here
26
+
27
+ ## Development
28
+
29
+ This gem was setup by following [these instructions](https://bundler.io/v1.13/guides/creating_gem)
30
+
31
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
32
+
33
+ To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
34
+
35
+ ## Contributing
36
+
37
+ Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/zwea_bot.
38
+
39
+ ## Testing
40
+
41
+ $ bundle exec rspec spec
42
+
43
+ ## Release
44
+
45
+ $ rake release
data/Rakefile ADDED
@@ -0,0 +1,10 @@
1
+ require "bundler/gem_tasks"
2
+ require "rake/testtask"
3
+
4
+ Rake::TestTask.new(:test) do |t|
5
+ t.libs << "test"
6
+ t.libs << "lib"
7
+ t.test_files = FileList["test/**/*_test.rb"]
8
+ end
9
+
10
+ task :default => :test
data/bin/console ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "zwea_bot"
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require "pry"
11
+ # Pry.start
12
+
13
+ require "irb"
14
+ IRB.start(__FILE__)
data/bin/setup ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
data/lib/zwea_bot.rb ADDED
@@ -0,0 +1,63 @@
1
+ require "zwea_bot/version"
2
+ require 'roo'
3
+ require 'sqlite3'
4
+ require 'active_record'
5
+
6
+ module ZweaBot
7
+ # Your code goes here...
8
+ end
9
+
10
+ # Set up a database that resides in RAM
11
+ ActiveRecord::Base.establish_connection(
12
+ adapter: 'sqlite3',
13
+ database: ':memory:'
14
+ )
15
+
16
+ # Allow us to run migrations without outputting
17
+ # to Platypus window
18
+ ActiveRecord::Migration.verbose = false
19
+
20
+ # Set up database tables and columns
21
+ ActiveRecord::Schema.define do
22
+ create_table :displays, force: true do |t|
23
+ t.string :name
24
+ t.string :key
25
+ end
26
+ create_table :elements, force: true do |t|
27
+ t.string :name
28
+ t.string :key
29
+ t.string :identifier
30
+ end
31
+ create_table :installations, force: true do |t|
32
+ t.references :display
33
+ t.references :store
34
+ t.integer :quantity
35
+ end
36
+ create_table :line_items, force: true do |t|
37
+ t.references :element
38
+ t.references :store
39
+ t.integer :quantity, default: 0
40
+ end
41
+ create_table :placements, force: true do |t|
42
+ t.references :display
43
+ t.references :element
44
+ t.integer :quantity
45
+ end
46
+ create_table :stores, force: true do |t|
47
+ t.string :apple_id
48
+ t.string :store_name
49
+ t.string :address
50
+ t.string :city
51
+ t.string :state_prov_pref
52
+ t.string :country
53
+ end
54
+ end
55
+
56
+ require 'zwea_bot/models/application_record'
57
+ require 'zwea_bot/models/store'
58
+ require 'zwea_bot/models/element'
59
+ require 'zwea_bot/models/display'
60
+ require 'zwea_bot/models/placement'
61
+ require 'zwea_bot/models/installation'
62
+ require 'zwea_bot/models/line_item'
63
+ require 'zwea_bot/parser'
@@ -0,0 +1,7 @@
1
+ module ZweaBot
2
+ module Models
3
+ class ApplicationRecord < ActiveRecord::Base
4
+ self.abstract_class = true
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,10 @@
1
+ module ZweaBot
2
+ module Models
3
+ class Display < ApplicationRecord
4
+ validates :key, presence: true, uniqueness: true
5
+ validates :name, presence: true, uniqueness: true
6
+
7
+ has_many :placements
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,20 @@
1
+ module ZweaBot
2
+ module Models
3
+ class Element < ApplicationRecord
4
+ validates :key, presence: true, uniqueness: true
5
+ validates :name, presence: true, uniqueness: true
6
+ validates :identifier, presence: true, uniqueness: true
7
+
8
+ has_many :placements
9
+ has_many :line_items
10
+
11
+ def total_quantity
12
+ line_items.sum(&:quantity)
13
+ end
14
+
15
+ def report_lines
16
+ ["- #{name} (#{identifier}): Qty #{total_quantity}"]
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,16 @@
1
+ module ZweaBot
2
+ module Models
3
+ class Installation < ApplicationRecord
4
+ belongs_to :display
5
+ belongs_to :store
6
+
7
+ validates :quantity, presence: true, numericality: { only_integer: true, greater_than_or_equal_to: 0 }
8
+ validates :display, presence: true
9
+ validates :store, presence: true
10
+
11
+ def report_lines
12
+ [" - #{display.name}: Qty #{quantity}"]
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,16 @@
1
+ module ZweaBot
2
+ module Models
3
+ class LineItem < ApplicationRecord
4
+ belongs_to :element
5
+ belongs_to :store
6
+
7
+ validates :quantity, presence: true, numericality: { only_integer: true, greater_than_or_equal_to: 0 }
8
+ validates :element, presence: true
9
+ validates :store, presence: true
10
+
11
+ def report_lines
12
+ [" - #{element.name} (#{element.identifier}): Qty #{quantity}"]
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,12 @@
1
+ module ZweaBot
2
+ module Models
3
+ class Placement < ApplicationRecord
4
+ belongs_to :display
5
+ belongs_to :element
6
+
7
+ validates :quantity, presence: true, numericality: { only_integer: true, greater_than_or_equal_to: 0 }
8
+ validates :display, presence: true
9
+ validates :element, presence: true
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,32 @@
1
+ module ZweaBot
2
+ module Models
3
+ class Store < ApplicationRecord
4
+ validates :apple_id, presence: true, uniqueness: true
5
+ validates :store_name, presence: true
6
+ validates :address, presence: true
7
+ validates :city, presence: true
8
+ validates :state_prov_pref, presence: true
9
+ validates :country, presence: true
10
+
11
+ has_many :installations
12
+ has_many :line_items
13
+
14
+ def report_lines
15
+ lines = []
16
+ lines << store_name
17
+ lines << "APPLE ID: #{apple_id}"
18
+ lines << ""
19
+ lines << "Installed Displays:"
20
+ installations.each do |installation|
21
+ lines += installation.report_lines
22
+ end
23
+ lines << ""
24
+ lines << "3D Elements:"
25
+ line_items.each do |line_item|
26
+ lines += line_item.report_lines
27
+ end
28
+ lines << '-'*88
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,174 @@
1
+ module ZweaBot
2
+ class Parser
3
+ STORES_SHEET = 'Stores'
4
+ DISPLAYS_SHEET = 'Displays'
5
+ ELEMENTS_SHEET = 'Elements'
6
+
7
+ attr_reader :warnings
8
+
9
+ def initialize(file)
10
+ @xlsx = Roo::Spreadsheet.open(file)
11
+ @warnings = []
12
+ validate()
13
+ store_elements()
14
+ store_displays()
15
+ store_stores()
16
+ generate_line_items()
17
+ write_report()
18
+ end
19
+
20
+ def generate_line_items
21
+ Models::Store.all.each do |store|
22
+ store.installations.each do |installation|
23
+ installation.display.placements.each do |placement|
24
+ quantity = installation.quantity * placement.quantity
25
+ line_item = store.line_items.find_or_create_by(element: placement.element)
26
+ line_item.increment!(:quantity,quantity)
27
+ end
28
+ end
29
+ end
30
+ end
31
+
32
+ def displays_inventory_start_column
33
+ 2
34
+ end
35
+
36
+ def displays_inventory_headers
37
+ @displays_inventory_headers ||= grab_inventory_header(name: DISPLAYS_SHEET, start_column: displays_inventory_start_column)
38
+ end
39
+
40
+ def stores_inventory_start_column
41
+ 6
42
+ end
43
+
44
+ def stores_inventory_headers
45
+ @stores_inventory_headers ||= grab_inventory_header(name: STORES_SHEET, start_column: stores_inventory_start_column)
46
+ end
47
+
48
+ def lines
49
+ l = []
50
+ l << '-'*88
51
+ l << 'TOTAL ELEMENTS COUNT'
52
+ Models::Element.all.each do |element|
53
+ l += element.report_lines
54
+ end
55
+ l << '-'*88
56
+ Models::Store.all.each do |store|
57
+ l += store.report_lines
58
+ end
59
+ return l
60
+ end
61
+
62
+ private
63
+
64
+ def write_report
65
+ output_path = File.join(Dir.home, "Desktop", 'report.txt')
66
+ # FileUtils.mkdir_p(path) unless File.exist?(path)
67
+ File.open(output_path, 'w') { |file| file.write(lines.join("\n")) }
68
+ end
69
+
70
+ def store_elements
71
+ (2..@xlsx.sheet(ELEMENTS_SHEET).last_row).each do |row_number|
72
+ row = @xlsx.sheet(ELEMENTS_SHEET).row(row_number)
73
+ element = Models::Element.new({
74
+ key: row[0],
75
+ name: row[1],
76
+ identifier: row[2],
77
+ })
78
+ unless element.save
79
+ warn("Invalid Element (#{element.inspect}: #{element.errors.inspect}")
80
+ next
81
+ end
82
+ end
83
+ end
84
+
85
+ def store_displays
86
+ (2..@xlsx.sheet(DISPLAYS_SHEET).last_row).each do |row_number|
87
+ row = @xlsx.sheet(DISPLAYS_SHEET).row(row_number)
88
+ display = Models::Display.new({
89
+ key: row[0],
90
+ name: row[1],
91
+ })
92
+ unless display.save
93
+ warn("Invalid Store (#{display.inspect}: #{display.errors.inspect}")
94
+ next
95
+ end
96
+ # Generate Placements
97
+ displays_inventory_headers.each_with_index do |header,index|
98
+ quantity = row[index+displays_inventory_start_column].to_i
99
+ unless quantity == 0
100
+ placement = display.placements.create({
101
+ quantity: quantity,
102
+ element: Models::Element.find_by(key: header),
103
+ })
104
+ unless placement.save
105
+ warn("Invalid Placement (#{placement.inspect}: #{placement.errors.inspect}")
106
+ next
107
+ end
108
+ end
109
+ end
110
+ end
111
+ end
112
+
113
+ def store_stores
114
+ (2..@xlsx.sheet(STORES_SHEET).last_row).each do |row_number|
115
+ row = @xlsx.sheet(STORES_SHEET).row(row_number)
116
+ store = Models::Store.new({
117
+ apple_id: row[0],
118
+ store_name: row[1],
119
+ address: row[2],
120
+ city: row[3],
121
+ state_prov_pref: row[4],
122
+ country: row[5],
123
+ })
124
+ unless store.save
125
+ warn("Invalid Store (#{store.inspect}: #{store.errors.inspect}")
126
+ next
127
+ end
128
+ # Generate Placements
129
+ stores_inventory_headers.each_with_index do |header,index|
130
+ quantity = row[index+stores_inventory_start_column].to_i
131
+ unless quantity == 0
132
+ installation = store.installations.new({
133
+ quantity: quantity,
134
+ display: Models::Display.find_by(key: header),
135
+ })
136
+ unless installation.save
137
+ warn("Invalid Installation (#{installation.inspect}: #{installation.errors.inspect}")
138
+ next
139
+ end
140
+ end
141
+ end
142
+ end
143
+ end
144
+
145
+ def grab_inventory_header(name:, start_column: )
146
+ @xlsx.sheet(name).row(1)[start_column..@xlsx.sheet(name).last_column]
147
+ end
148
+
149
+ def validate
150
+ raise 'Heck' unless @xlsx.sheets.count == 3
151
+ raise 'Heck' unless @xlsx.sheets[0].strip == STORES_SHEET
152
+ raise 'Heck' unless @xlsx.sheets[1].strip == DISPLAYS_SHEET
153
+ raise 'Heck' unless @xlsx.sheets[2].strip == ELEMENTS_SHEET
154
+
155
+ raise 'Heck' unless @xlsx.sheet('Stores').cell(1,1).strip == 'AppleID'
156
+ raise 'Heck' unless @xlsx.sheet('Stores').cell(1,2).strip == 'Storename'
157
+ raise 'Heck' unless @xlsx.sheet('Stores').cell(1,3).strip == 'Address'
158
+ raise 'Heck' unless @xlsx.sheet('Stores').cell(1,4).strip == 'City'
159
+ raise 'Heck' unless @xlsx.sheet('Stores').cell(1,5).strip == 'StateProvPref'
160
+ raise 'Heck' unless @xlsx.sheet('Stores').cell(1,6).strip == 'Country'
161
+
162
+ raise 'Heck' unless @xlsx.sheet('Displays').cell(1,1).strip == 'Key'
163
+ raise 'Heck' unless @xlsx.sheet('Displays').cell(1,2).strip == 'Name'
164
+
165
+ raise 'Heck' unless @xlsx.sheet('Elements').cell(1,1).strip == 'Key'
166
+ raise 'Heck' unless @xlsx.sheet('Elements').cell(1,2).strip == 'Name'
167
+ raise 'Heck' unless @xlsx.sheet('Elements').cell(1,3).strip == 'Identifier'
168
+ end
169
+
170
+ def warn(message)
171
+ @warnings << message
172
+ end
173
+ end
174
+ end
@@ -0,0 +1,3 @@
1
+ module ZweaBot
2
+ VERSION = "0.1.0"
3
+ end
data/zwea_bot.gemspec ADDED
@@ -0,0 +1,44 @@
1
+
2
+ lib = File.expand_path("../lib", __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require "zwea_bot/version"
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "zwea_bot"
8
+ spec.version = ZweaBot::VERSION
9
+ spec.authors = ["Brand New Box"]
10
+ spec.email = ["hello@brandnewbox.com"]
11
+
12
+ spec.summary = %q{An excel parsing tool.}
13
+ spec.description = %q{An excel parsing tool.}
14
+ spec.homepage = "https://github.com/brandnewbox/zwea_bot"
15
+
16
+ # Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
17
+ # to allow pushing to a single host or delete this section to allow pushing to any host.
18
+ if spec.respond_to?(:metadata)
19
+ # spec.metadata["allowed_push_host"] = "TODO: Set to 'http://mygemserver.com'"
20
+
21
+ spec.metadata["homepage_uri"] = spec.homepage
22
+ spec.metadata["source_code_uri"] = "TODO: Put your gem's public repo URL here."
23
+ spec.metadata["changelog_uri"] = "TODO: Put your gem's CHANGELOG.md URL here."
24
+ else
25
+ raise "RubyGems 2.0 or newer is required to protect against " \
26
+ "public gem pushes."
27
+ end
28
+
29
+ # Specify which files should be added to the gem when it is released.
30
+ # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
31
+ spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
32
+ `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
33
+ end
34
+ spec.bindir = "exe"
35
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
36
+ spec.require_paths = ["lib"]
37
+
38
+ spec.add_dependency 'roo'
39
+ spec.add_dependency 'sqlite3'
40
+ spec.add_dependency 'activerecord'
41
+ spec.add_development_dependency "bundler", "~> 1.16"
42
+ spec.add_development_dependency "rake", "~> 10.0"
43
+ spec.add_development_dependency "rspec", "~> 3.2"
44
+ end
metadata ADDED
@@ -0,0 +1,149 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: zwea_bot
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Brand New Box
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2018-10-17 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: roo
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: sqlite3
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: activerecord
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: bundler
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '1.16'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '1.16'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rake
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '10.0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '10.0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rspec
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '3.2'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '3.2'
97
+ description: An excel parsing tool.
98
+ email:
99
+ - hello@brandnewbox.com
100
+ executables: []
101
+ extensions: []
102
+ extra_rdoc_files: []
103
+ files:
104
+ - ".gitignore"
105
+ - ".travis.yml"
106
+ - Gemfile
107
+ - Gemfile.lock
108
+ - README.md
109
+ - Rakefile
110
+ - bin/console
111
+ - bin/setup
112
+ - lib/zwea_bot.rb
113
+ - lib/zwea_bot/models/application_record.rb
114
+ - lib/zwea_bot/models/display.rb
115
+ - lib/zwea_bot/models/element.rb
116
+ - lib/zwea_bot/models/installation.rb
117
+ - lib/zwea_bot/models/line_item.rb
118
+ - lib/zwea_bot/models/placement.rb
119
+ - lib/zwea_bot/models/store.rb
120
+ - lib/zwea_bot/parser.rb
121
+ - lib/zwea_bot/version.rb
122
+ - zwea_bot.gemspec
123
+ homepage: https://github.com/brandnewbox/zwea_bot
124
+ licenses: []
125
+ metadata:
126
+ homepage_uri: https://github.com/brandnewbox/zwea_bot
127
+ source_code_uri: 'TODO: Put your gem''s public repo URL here.'
128
+ changelog_uri: 'TODO: Put your gem''s CHANGELOG.md URL here.'
129
+ post_install_message:
130
+ rdoc_options: []
131
+ require_paths:
132
+ - lib
133
+ required_ruby_version: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - ">="
136
+ - !ruby/object:Gem::Version
137
+ version: '0'
138
+ required_rubygems_version: !ruby/object:Gem::Requirement
139
+ requirements:
140
+ - - ">="
141
+ - !ruby/object:Gem::Version
142
+ version: '0'
143
+ requirements: []
144
+ rubyforge_project:
145
+ rubygems_version: 2.4.5
146
+ signing_key:
147
+ specification_version: 4
148
+ summary: An excel parsing tool.
149
+ test_files: []