canadian_mergers 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: ad9123ccd4d781056b0771ba372f25a9c1db6ddc
4
+ data.tar.gz: 3d2d43d7eb7ac3c3982b71180876a935e663986b
5
+ SHA512:
6
+ metadata.gz: defa08c1cbf169d725e545429c4d0b8dd0a1b201a8c0aa014f00b5bd40e39ac05f9b7a274695b597b8849387593342783672ada53f2094a7c3c81e2b28ad701c
7
+ data.tar.gz: cabd5674373cb1c32a7c90953c32256873ba2be8296e8d079bc1c41834b7fbc0fbe47f859621b0832153d93d4f2eabe48be2c7e1ea3b2c295c20761a813fe677
data/.gitignore ADDED
@@ -0,0 +1,20 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+
11
+ # rspec failure tracking
12
+ .rspec_status
13
+
14
+ # vscode
15
+ .vscode/*
16
+ !.vscode/settings.json
17
+ !.vscode/tasks.json
18
+ !.vscode/launch.json
19
+ !.vscode/extensions.json
20
+ .DS_Store
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --format documentation
2
+ --color
data/.travis.yml ADDED
@@ -0,0 +1,5 @@
1
+ sudo: false
2
+ language: ruby
3
+ rvm:
4
+ - 2.3.3
5
+ before_install: gem install bundler -v 1.15.1
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "https://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in canadian_mergers.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2017 cptbrkfst
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,38 @@
1
+ # CanadianMergers
2
+ [![Code Climate](https://img.shields.io/codeclimate/github/kabisaict/flow.svg)](https://codeclimate.com/github/cptbrkfst/canadian_mergers)
3
+
4
+ Canadian Mergers is a CLI tool that allows users to access monthly reports on concluded mergers in Canada.
5
+
6
+ ## Installation
7
+
8
+ Add this line to your application's Gemfile:
9
+
10
+ ```ruby
11
+ gem 'canadian_mergers'
12
+ ```
13
+
14
+ And then execute:
15
+
16
+ $ bundle
17
+
18
+ Or install it yourself as:
19
+
20
+ $ gem install canadian_mergers
21
+
22
+ ## Usage
23
+
24
+ Run: `canadian_mergers` after installing the gem.
25
+
26
+ ## Development
27
+
28
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
29
+
30
+ 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).
31
+
32
+ ## Contributing
33
+
34
+ Bug reports and pull requests are welcome on GitHub at https://github.com/cptbrkfst/canadian_mergers.
35
+
36
+ ## License
37
+
38
+ The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
data/Rakefile ADDED
@@ -0,0 +1,6 @@
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task :default => :spec
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+ require "bundler/setup"
3
+ require "canadian_mergers"
4
+
5
+ CanadianMergers::CLI.new.call
data/bin/console ADDED
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "canadian_mergers"
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
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
@@ -0,0 +1,31 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'canadian_mergers/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = 'canadian_mergers'
8
+ spec.version = CanadianMergers::VERSION
9
+ spec.authors = ['Dylan Bromell']
10
+ spec.email = ['dmbromell@gmail.com']
11
+
12
+ spec.summary = 'A CLI tool for scraping monthly data on concluded mergers in Canada'
13
+ spec.homepage = 'https://github.com/cptbrkfst/canadian_mergers'
14
+ spec.license = 'MIT'
15
+
16
+ spec.files = `git ls-files -z`.split("\x0").reject do |f|
17
+ f.match(%r{^(test|spec|features)/})
18
+ end
19
+ spec.bindir = "exe"
20
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
21
+ spec.require_paths = ["lib"]
22
+
23
+ # Dependencies
24
+ spec.add_runtime_dependency 'terminal-table', '= 1.8'
25
+ spec.add_runtime_dependency 'nokogiri', '~> 1.6', '>= 1.6.8'
26
+ spec.add_development_dependency 'awesome_print', '~> 1.7'
27
+ spec.add_development_dependency 'bundler', '~> 1.15'
28
+ spec.add_development_dependency 'pry', '>= 0'
29
+ spec.add_development_dependency 'rake', '~> 10.0'
30
+ spec.add_development_dependency 'rspec', '~> 3.0'
31
+ end
@@ -0,0 +1,32 @@
1
+ # CLI Controller
2
+ class CanadianMergers::CLI
3
+ attr_accessor :year, :month
4
+
5
+ def call
6
+ menu
7
+ list_mergers
8
+ goodbye
9
+ end
10
+
11
+ def menu
12
+ until @year.to_i.between?(2012, Date.today.year)
13
+ puts 'Please enter the year you would like to access:'
14
+ @year = gets.strip
15
+ end
16
+ until Date::MONTHNAMES.include?(@month.to_s.capitalize)
17
+ puts 'Please enter the month you would like to access (January - December)'
18
+ @month = gets.strip.downcase
19
+ end
20
+ end
21
+
22
+ def list_mergers
23
+ puts "Merger reviews concluded for the period of #{@month.capitalize}, #{@year}:"
24
+ @merger_list = CanadianMergers::MergerList.table(@year, @month)
25
+ end
26
+
27
+ def goodbye
28
+ puts 'Would you like to convert this table to CSV? (Y/n)'
29
+ input = gets.strip
30
+ CanadianMergers::MergerList.to_csv(@year, @month) if /y/i =~ input
31
+ end
32
+ end
@@ -0,0 +1,27 @@
1
+ # Merger object
2
+ class CanadianMergers::Merger
3
+ @@all = []
4
+ attr_accessor :parties, :industry, :result
5
+
6
+ def initialize(parties, industry, result)
7
+ @parties = parties
8
+ @industry = industry
9
+ @result = result
10
+ end
11
+
12
+ def save
13
+ self.class.all << self
14
+ end
15
+
16
+ def self.create(parties, industry, result)
17
+ new(parties, industry, result).tap(&:save)
18
+ end
19
+
20
+ def self.all
21
+ @@all
22
+ end
23
+
24
+ def self.destroy_all
25
+ all.clear
26
+ end
27
+ end
@@ -0,0 +1,31 @@
1
+ # Instantiate list from merger objects
2
+ class CanadianMergers::MergerList
3
+
4
+ def self.table(year, month)
5
+ # Constructs table from array of merger objects using terminal-table
6
+ CanadianMergers::Scrape.new(year, month).table_data
7
+ headings = ['Parties to Transaction', 'Industry', 'Result']
8
+
9
+ table = Terminal::Table.new headings: headings do |t|
10
+ CanadianMergers::Merger.all.each do |merger|
11
+ parties = format_merger(merger.parties)
12
+ t.add_row [parties, merger.industry, merger.result]
13
+ end
14
+ t.style = { all_separators: true, alignment: :center }
15
+ end
16
+ puts table
17
+ end
18
+
19
+ def self.to_csv(year, month)
20
+ CSV.open("#{month}_#{year}_mergers.csv", 'w') do |csv|
21
+ CanadianMergers::Merger.all.each do |merger|
22
+ csv << [merger.parties, merger.industry, merger.result]
23
+ end
24
+ end
25
+ puts 'CSV created!'
26
+ end
27
+
28
+ def self.format_merger(merger)
29
+ merger.gsub(',', ",\n")
30
+ end
31
+ end
@@ -0,0 +1,22 @@
1
+ # Scraper class
2
+ class CanadianMergers::Scrape
3
+ attr_accessor :year, :month
4
+
5
+ def initialize(year, month)
6
+ @year = year
7
+ @month = month
8
+ end
9
+
10
+ def get_page
11
+ Nokogiri::HTML(open('http://www.competitionbureau.gc.ca/eic/site/cb-bc.nsf/eng/02435.html'))
12
+ end
13
+
14
+ def table_data
15
+ get_page.css("details#details-panel#{@year}-#{@month}").each do |table|
16
+ table.css('tbody tr').each do |tag|
17
+ data = tag.css('td').collect(&:text)
18
+ CanadianMergers::Merger.create(data[0], data[1], data[2])
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,3 @@
1
+ module CanadianMergers
2
+ VERSION = "0.1.0"
3
+ end
@@ -0,0 +1,12 @@
1
+ require 'csv'
2
+ require 'date'
3
+ require 'nokogiri'
4
+ require 'open-uri'
5
+ require 'pry'
6
+ require 'terminal-table'
7
+
8
+ require_relative './canadian_mergers/version'
9
+ require_relative './canadian_mergers/cli'
10
+ require_relative './canadian_mergers/merger_list.rb'
11
+ require_relative './canadian_mergers/merger.rb'
12
+ require_relative './canadian_mergers/scrape.rb'
metadata ADDED
@@ -0,0 +1,165 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: canadian_mergers
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Dylan Bromell
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2017-07-26 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: terminal-table
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '='
18
+ - !ruby/object:Gem::Version
19
+ version: '1.8'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '='
25
+ - !ruby/object:Gem::Version
26
+ version: '1.8'
27
+ - !ruby/object:Gem::Dependency
28
+ name: nokogiri
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.6'
34
+ - - ">="
35
+ - !ruby/object:Gem::Version
36
+ version: 1.6.8
37
+ type: :runtime
38
+ prerelease: false
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - "~>"
42
+ - !ruby/object:Gem::Version
43
+ version: '1.6'
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: 1.6.8
47
+ - !ruby/object:Gem::Dependency
48
+ name: awesome_print
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: '1.7'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: '1.7'
61
+ - !ruby/object:Gem::Dependency
62
+ name: bundler
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: '1.15'
68
+ type: :development
69
+ prerelease: false
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - "~>"
73
+ - !ruby/object:Gem::Version
74
+ version: '1.15'
75
+ - !ruby/object:Gem::Dependency
76
+ name: pry
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ version: '0'
82
+ type: :development
83
+ prerelease: false
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
89
+ - !ruby/object:Gem::Dependency
90
+ name: rake
91
+ requirement: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - "~>"
94
+ - !ruby/object:Gem::Version
95
+ version: '10.0'
96
+ type: :development
97
+ prerelease: false
98
+ version_requirements: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - "~>"
101
+ - !ruby/object:Gem::Version
102
+ version: '10.0'
103
+ - !ruby/object:Gem::Dependency
104
+ name: rspec
105
+ requirement: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - "~>"
108
+ - !ruby/object:Gem::Version
109
+ version: '3.0'
110
+ type: :development
111
+ prerelease: false
112
+ version_requirements: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - "~>"
115
+ - !ruby/object:Gem::Version
116
+ version: '3.0'
117
+ description:
118
+ email:
119
+ - dmbromell@gmail.com
120
+ executables: []
121
+ extensions: []
122
+ extra_rdoc_files: []
123
+ files:
124
+ - ".gitignore"
125
+ - ".rspec"
126
+ - ".travis.yml"
127
+ - Gemfile
128
+ - LICENSE.txt
129
+ - README.md
130
+ - Rakefile
131
+ - bin/canadian-mergers
132
+ - bin/console
133
+ - bin/setup
134
+ - canadian_mergers.gemspec
135
+ - lib/canadian_mergers.rb
136
+ - lib/canadian_mergers/cli.rb
137
+ - lib/canadian_mergers/merger.rb
138
+ - lib/canadian_mergers/merger_list.rb
139
+ - lib/canadian_mergers/scrape.rb
140
+ - lib/canadian_mergers/version.rb
141
+ homepage: https://github.com/cptbrkfst/canadian_mergers
142
+ licenses:
143
+ - MIT
144
+ metadata: {}
145
+ post_install_message:
146
+ rdoc_options: []
147
+ require_paths:
148
+ - lib
149
+ required_ruby_version: !ruby/object:Gem::Requirement
150
+ requirements:
151
+ - - ">="
152
+ - !ruby/object:Gem::Version
153
+ version: '0'
154
+ required_rubygems_version: !ruby/object:Gem::Requirement
155
+ requirements:
156
+ - - ">="
157
+ - !ruby/object:Gem::Version
158
+ version: '0'
159
+ requirements: []
160
+ rubyforge_project:
161
+ rubygems_version: 2.6.12
162
+ signing_key:
163
+ specification_version: 4
164
+ summary: A CLI tool for scraping monthly data on concluded mergers in Canada
165
+ test_files: []