common_tools 0.1.1 → 0.1.2
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 +4 -4
- data/README.md +42 -15
- data/bin/console +0 -0
- data/common_tools.gemspec +8 -3
- data/exe/common-tools +12 -0
- data/lib/common_tools/batch_generator.rb +2 -0
- data/lib/common_tools/credentials.yml +0 -0
- data/lib/common_tools/data_fetcher.rb +43 -0
- data/lib/common_tools/learn_proxy.rb +64 -0
- data/lib/common_tools/parser.rb +14 -13
- data/lib/common_tools/version.rb +2 -2
- data/lib/common_tools.rb +9 -7
- metadata +86 -8
- data/lib/common_tools/say_hello.rb +0 -7
- data/lib/common_tools/student.rb +0 -22
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 32d15df00510dd6daa5eb7d0e2265333d4372df1
|
4
|
+
data.tar.gz: e9bedae78696baf4936d23ba8f7599faeb7e9def
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 294d4912767ccf1a2d7c7121e70e99d40bfab4630b1af16171e6cd8f1beedb93a6401006b21cf6f4716836e572d57304344f7afb40fe8bef9c64b03b21bbdca2
|
7
|
+
data.tar.gz: f9eb17609998102eae12fdd5c7d7c4fe237d5cc6d85dfc3d2d1f9eb42d9b5914ff331045ff2fd147465fd355222da124025cbc520e4e9d5b49678f26bc77d4fd
|
data/README.md
CHANGED
@@ -1,28 +1,55 @@
|
|
1
1
|
# Instructor Tools: Common Tools
|
2
2
|
|
3
|
-
Welcome to the instructor tools Common Tools gem. This gem will exist as a dependency of [Instructor-Tools](https://github.com/flatiron-labs/Instructor-tools-gem).
|
3
|
+
Welcome to the instructor tools Common Tools gem. This gem will exist as a dependency of [Instructor-Tools](https://github.com/flatiron-labs/Instructor-tools-gem).
|
4
4
|
|
5
|
-
The purpose of this gem is to provide instructors with a resource for commonly used tools
|
5
|
+
The purpose of this gem is to provide instructors with a resource for commonly used tools, for example:
|
6
6
|
|
7
|
-
|
7
|
+
- Building Cohort Data
|
8
|
+
- Building Student Data
|
8
9
|
|
9
|
-
|
10
|
+
Instead of instructors re-writing the same code in their projects, `CommonTools` gem can be required as a dependency in projects that need these common functionalities.
|
10
11
|
|
11
|
-
|
12
|
-
|
13
|
-
|
12
|
+
The Gem sends a request to Learn API endpoint of the given batch, parses string payload into a array of student hashes.
|
13
|
+
|
14
|
+
You will be asked for your github credentials the first time you run the gem. Your Github credentials is stored in a `client.yml`, which is in the gem's lib directory and git-ignored.
|
15
|
+
|
16
|
+
|
17
|
+
##Using the gem in another project
|
18
|
+
Public-facing code is the `CommonTools` module.
|
19
|
+
|
20
|
+
|
21
|
+
#####For inclusion in a gem:
|
22
|
+
|
23
|
+
- add "common_tools" as a dependency in gemspec file
|
24
|
+
|
25
|
+
|
26
|
+
#####For inclusion in a Rails app:
|
27
|
+
- add `gem 'common_tools'` to project gemfile
|
28
|
+
|
29
|
+
|
30
|
+
##Functionality
|
31
|
+
This gem contains several functions. Specific details are listed below:
|
32
|
+
|
33
|
+
- `batch_id` refers to the last 2 or more digits in the learn-url of a batch. For example: The url for Web-1115 is `https://learn.co/batches/168`. Therefore `batch-id` for Web-115 is 168
|
34
|
+
|
35
|
+
#### Two ways to run the gem:
|
36
|
+
- `bin/console`
|
37
|
+
- This drops you into an interactive irb session.
|
38
|
+
- The command `CommonTools::Generator.get_batch(batch_id)` return an array of student hashes. You can use this data to build your own student or batch objects
|
39
|
+
|
40
|
+
|
41
|
+
- `exe/common-tools batch_id`
|
42
|
+
- will return an array of student hashes
|
43
|
+
- receives batch-id as an argument and returns an array of student hashes.
|
44
|
+
|
45
|
+
##Testing
|
46
|
+
Make sure all new features are built TDD first.
|
14
47
|
|
15
|
-
###Functionality
|
16
|
-
This gem contains several functions see below for specific details
|
17
48
|
|
18
|
-
* CSV to JSON Parser
|
19
|
-
* `CommonTools.parse_csv('complete/path/to/file')`
|
20
|
-
* This will parse your csv file into a JSON string
|
21
|
-
|
22
49
|
## Contributing
|
23
|
-
To contribute to this gem:
|
50
|
+
To contribute to this gem:
|
24
51
|
|
25
52
|
* Fork the [repo](https://github.com/flatiron-labs/instructor-tools-common-tools)
|
26
53
|
* Make your contributions and set up whatever tests are necessary
|
27
54
|
* Wrap any new functionality in `CommonTools` class methods
|
28
|
-
* Submit a pull request
|
55
|
+
* Submit a pull request
|
data/bin/console
CHANGED
File without changes
|
data/common_tools.gemspec
CHANGED
@@ -6,8 +6,8 @@ require 'common_tools/version'
|
|
6
6
|
Gem::Specification.new do |spec|
|
7
7
|
spec.name = "common_tools"
|
8
8
|
spec.version = CommonTools::VERSION
|
9
|
-
spec.authors = ["BenjaGross"]
|
10
|
-
spec.email = ["ben@flatironschool.com"]
|
9
|
+
spec.authors = ["MsUzoAgu", "BenjaGross", "SophieDeBenedetto"]
|
10
|
+
spec.email = ["uzo@flatironschool.com", "ben@flatironschool.com", "sophie.debenedetto@gmail.com"]
|
11
11
|
|
12
12
|
spec.summary = %q{Common Tools and scripts for Flatiron School Instructors}
|
13
13
|
spec.description = %q{Includes often used scripts to help Flatiron School instructors}
|
@@ -18,6 +18,11 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
|
21
|
-
spec.add_development_dependency "bundler", "~> 1.
|
21
|
+
spec.add_development_dependency "bundler", "~> 1.11"
|
22
22
|
spec.add_development_dependency "rake", "~> 10.0"
|
23
|
+
spec.add_development_dependency "rspec", "~> 3.0"
|
24
|
+
spec.add_development_dependency "pry"
|
25
|
+
spec.add_development_dependency "webmock"
|
26
|
+
spec.add_development_dependency "vcr"
|
27
|
+
spec.add_development_dependency "mechanize"
|
23
28
|
end
|
data/exe/common-tools
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'pp'
|
4
|
+
require_relative '../lib/common_tools'
|
5
|
+
|
6
|
+
if ARGV.length >=1
|
7
|
+
PP.pp CommonTools::Generator.get_batch(ARGV[0].to_i)
|
8
|
+
elsif ARGV.include?("--help")
|
9
|
+
CommonTools::Generator.new.help
|
10
|
+
else
|
11
|
+
puts "please use common_tools --help for a list of options"
|
12
|
+
end
|
File without changes
|
@@ -0,0 +1,43 @@
|
|
1
|
+
class DataFetcher
|
2
|
+
|
3
|
+
attr_accessor :batch_id, :keys, :client
|
4
|
+
|
5
|
+
def initialize(batch_id=nil)
|
6
|
+
@batch_id = batch_id
|
7
|
+
end
|
8
|
+
|
9
|
+
def parse_roster
|
10
|
+
roster = get_roster
|
11
|
+
Parser.parse_roster(roster)
|
12
|
+
end
|
13
|
+
|
14
|
+
|
15
|
+
def get_roster
|
16
|
+
configure_keys
|
17
|
+
configure_credentials
|
18
|
+
@client.csv_for(self.batch_id)
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
|
24
|
+
def get_and_store_github_credentials
|
25
|
+
puts "Please enter your github username:"
|
26
|
+
username = STDIN.gets.chomp
|
27
|
+
puts "Please enter your github password:"
|
28
|
+
password = STDIN.gets.chomp
|
29
|
+
self.keys = {"GITHUB_USERNAME" => username, "GITHUB_PASSWORD" => password}
|
30
|
+
File.open(File.expand_path(File.dirname(__FILE__)) + '/credentials.yml', 'w') {|f| f.write self.keys.to_yaml }
|
31
|
+
end
|
32
|
+
|
33
|
+
def configure_keys
|
34
|
+
keys = YAML.load_file(File.expand_path(File.dirname(__FILE__)) + '/credentials.yml')
|
35
|
+
get_and_store_github_credentials unless keys
|
36
|
+
end
|
37
|
+
|
38
|
+
def configure_credentials
|
39
|
+
keys = YAML.load_file(File.expand_path(File.dirname(__FILE__)) + '/credentials.yml')
|
40
|
+
credentials = LearnProxy::Credentials.new(keys['GITHUB_USERNAME'], keys['GITHUB_PASSWORD'])
|
41
|
+
@client = LearnProxy::Client.new(credentials)
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
require 'pry'
|
2
|
+
require "mechanize"
|
3
|
+
|
4
|
+
|
5
|
+
module LearnProxy
|
6
|
+
class Client
|
7
|
+
CSV_URL = -> (batch_id) {"https://learn.co/batches/#{batch_id}/students.csv"}
|
8
|
+
|
9
|
+
def initialize(credentials)
|
10
|
+
@credentials = credentials
|
11
|
+
end
|
12
|
+
|
13
|
+
def csv_for(batch_id)
|
14
|
+
connection.get(CSV_URL[batch_id]).body
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
attr_reader :credentials
|
19
|
+
|
20
|
+
def connection
|
21
|
+
@connection ||= Connection.new(credentials)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
class Connection
|
26
|
+
extend Forwardable
|
27
|
+
def_delegator :@session, :get
|
28
|
+
|
29
|
+
def initialize(credentials)
|
30
|
+
@credentials = credentials
|
31
|
+
connect!
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
attr_reader :credentials
|
36
|
+
def connect!
|
37
|
+
@session ||= begin
|
38
|
+
Mechanize.new.tap do |client|
|
39
|
+
client.get('https://learn.co/sign_in/github?sign_in=true')
|
40
|
+
form = client.page.form_with!(action: "/session")
|
41
|
+
GithubForm.submit(form, credentials)
|
42
|
+
client.page.link_with!(href: /learn\.co/).click
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
module GithubForm
|
49
|
+
def self.submit(form, credentials)
|
50
|
+
form['login'] = credentials.username
|
51
|
+
form['password'] = credentials.password
|
52
|
+
form.submit
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
class Credentials
|
57
|
+
attr_accessor :username, :password
|
58
|
+
def initialize(username, password)
|
59
|
+
@username = username
|
60
|
+
@password = password
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
data/lib/common_tools/parser.rb
CHANGED
@@ -1,19 +1,20 @@
|
|
1
|
-
require 'csv'
|
2
|
-
require 'json'
|
3
|
-
require 'pry'
|
4
|
-
require_relative 'student'
|
5
|
-
|
6
1
|
class Parser
|
7
2
|
|
8
|
-
def self.
|
9
|
-
|
10
|
-
|
11
|
-
CSV.foreach(file, headers: true).map do |row|
|
12
|
-
make_student_attributes(row) unless row[0] == "first_name" || row[0].nil?
|
13
|
-
end.to_json
|
3
|
+
def self.build_attributes(roster)
|
4
|
+
attributes_string = roster.split(/\n/).reject(&:empty?).delete_at(0)
|
5
|
+
attributes_array = attributes_string.split(/\n/).first.split(',').collect {|attribute| attribute.to_sym}
|
14
6
|
end
|
15
7
|
|
16
|
-
def self.
|
17
|
-
|
8
|
+
def self.parse_roster(roster)
|
9
|
+
attributes_array = build_attributes(roster)
|
10
|
+
student_strings = roster.split(/\n/).reject(&:empty?).drop(1)
|
11
|
+
array_of_student_hashes = []
|
12
|
+
|
13
|
+
array_of_students = student_strings.collect { |student_string| student_string.split(',') }
|
14
|
+
|
15
|
+
array_of_students.each_with_object(attributes_array) do |student_array, attribute_hash|
|
16
|
+
array_of_student_hashes << [attribute_hash, student_array].transpose.to_h
|
17
|
+
end
|
18
|
+
array_of_student_hashes
|
18
19
|
end
|
19
20
|
end
|
data/lib/common_tools/version.rb
CHANGED
@@ -1,3 +1,3 @@
|
|
1
|
-
|
2
|
-
VERSION = "0.1.
|
1
|
+
module CommonTools
|
2
|
+
VERSION = "0.1.2"
|
3
3
|
end
|
data/lib/common_tools.rb
CHANGED
@@ -1,13 +1,15 @@
|
|
1
1
|
require_relative "common_tools/version"
|
2
|
-
require_relative "common_tools/
|
2
|
+
require_relative "common_tools/learn_proxy"
|
3
|
+
require_relative "common_tools/batch_generator"
|
4
|
+
require_relative "common_tools/data_fetcher"
|
3
5
|
require_relative "common_tools/parser"
|
4
6
|
|
7
|
+
module CommonTools
|
5
8
|
|
6
|
-
class
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
9
|
+
class Generator
|
10
|
+
def self.get_batch(batch_id)
|
11
|
+
batch= DataFetcher.new(batch_id).get_roster
|
12
|
+
Parser.parse_roster(batch)
|
13
|
+
end
|
11
14
|
end
|
12
|
-
|
13
15
|
end
|
metadata
CHANGED
@@ -1,14 +1,16 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: common_tools
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
|
+
- MsUzoAgu
|
7
8
|
- BenjaGross
|
9
|
+
- SophieDeBenedetto
|
8
10
|
autorequire:
|
9
11
|
bindir: exe
|
10
12
|
cert_chain: []
|
11
|
-
date: 2016-
|
13
|
+
date: 2016-03-22 00:00:00.000000000 Z
|
12
14
|
dependencies:
|
13
15
|
- !ruby/object:Gem::Dependency
|
14
16
|
name: bundler
|
@@ -16,14 +18,14 @@ dependencies:
|
|
16
18
|
requirements:
|
17
19
|
- - "~>"
|
18
20
|
- !ruby/object:Gem::Version
|
19
|
-
version: '1.
|
21
|
+
version: '1.11'
|
20
22
|
type: :development
|
21
23
|
prerelease: false
|
22
24
|
version_requirements: !ruby/object:Gem::Requirement
|
23
25
|
requirements:
|
24
26
|
- - "~>"
|
25
27
|
- !ruby/object:Gem::Version
|
26
|
-
version: '1.
|
28
|
+
version: '1.11'
|
27
29
|
- !ruby/object:Gem::Dependency
|
28
30
|
name: rake
|
29
31
|
requirement: !ruby/object:Gem::Requirement
|
@@ -38,10 +40,83 @@ dependencies:
|
|
38
40
|
- - "~>"
|
39
41
|
- !ruby/object:Gem::Version
|
40
42
|
version: '10.0'
|
43
|
+
- !ruby/object:Gem::Dependency
|
44
|
+
name: rspec
|
45
|
+
requirement: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - "~>"
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: '3.0'
|
50
|
+
type: :development
|
51
|
+
prerelease: false
|
52
|
+
version_requirements: !ruby/object:Gem::Requirement
|
53
|
+
requirements:
|
54
|
+
- - "~>"
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
version: '3.0'
|
57
|
+
- !ruby/object:Gem::Dependency
|
58
|
+
name: pry
|
59
|
+
requirement: !ruby/object:Gem::Requirement
|
60
|
+
requirements:
|
61
|
+
- - ">="
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
version: '0'
|
64
|
+
type: :development
|
65
|
+
prerelease: false
|
66
|
+
version_requirements: !ruby/object:Gem::Requirement
|
67
|
+
requirements:
|
68
|
+
- - ">="
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
version: '0'
|
71
|
+
- !ruby/object:Gem::Dependency
|
72
|
+
name: webmock
|
73
|
+
requirement: !ruby/object:Gem::Requirement
|
74
|
+
requirements:
|
75
|
+
- - ">="
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
78
|
+
type: :development
|
79
|
+
prerelease: false
|
80
|
+
version_requirements: !ruby/object:Gem::Requirement
|
81
|
+
requirements:
|
82
|
+
- - ">="
|
83
|
+
- !ruby/object:Gem::Version
|
84
|
+
version: '0'
|
85
|
+
- !ruby/object:Gem::Dependency
|
86
|
+
name: vcr
|
87
|
+
requirement: !ruby/object:Gem::Requirement
|
88
|
+
requirements:
|
89
|
+
- - ">="
|
90
|
+
- !ruby/object:Gem::Version
|
91
|
+
version: '0'
|
92
|
+
type: :development
|
93
|
+
prerelease: false
|
94
|
+
version_requirements: !ruby/object:Gem::Requirement
|
95
|
+
requirements:
|
96
|
+
- - ">="
|
97
|
+
- !ruby/object:Gem::Version
|
98
|
+
version: '0'
|
99
|
+
- !ruby/object:Gem::Dependency
|
100
|
+
name: mechanize
|
101
|
+
requirement: !ruby/object:Gem::Requirement
|
102
|
+
requirements:
|
103
|
+
- - ">="
|
104
|
+
- !ruby/object:Gem::Version
|
105
|
+
version: '0'
|
106
|
+
type: :development
|
107
|
+
prerelease: false
|
108
|
+
version_requirements: !ruby/object:Gem::Requirement
|
109
|
+
requirements:
|
110
|
+
- - ">="
|
111
|
+
- !ruby/object:Gem::Version
|
112
|
+
version: '0'
|
41
113
|
description: Includes often used scripts to help Flatiron School instructors
|
42
114
|
email:
|
115
|
+
- uzo@flatironschool.com
|
43
116
|
- ben@flatironschool.com
|
44
|
-
|
117
|
+
- sophie.debenedetto@gmail.com
|
118
|
+
executables:
|
119
|
+
- common-tools
|
45
120
|
extensions: []
|
46
121
|
extra_rdoc_files: []
|
47
122
|
files:
|
@@ -54,10 +129,13 @@ files:
|
|
54
129
|
- bin/console
|
55
130
|
- bin/setup
|
56
131
|
- common_tools.gemspec
|
132
|
+
- exe/common-tools
|
57
133
|
- lib/common_tools.rb
|
134
|
+
- lib/common_tools/batch_generator.rb
|
135
|
+
- lib/common_tools/credentials.yml
|
136
|
+
- lib/common_tools/data_fetcher.rb
|
137
|
+
- lib/common_tools/learn_proxy.rb
|
58
138
|
- lib/common_tools/parser.rb
|
59
|
-
- lib/common_tools/say_hello.rb
|
60
|
-
- lib/common_tools/student.rb
|
61
139
|
- lib/common_tools/version.rb
|
62
140
|
homepage: https://github.com/flatiron-labs/instructor-tools-common-tools
|
63
141
|
licenses: []
|
@@ -78,7 +156,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
78
156
|
version: '0'
|
79
157
|
requirements: []
|
80
158
|
rubyforge_project:
|
81
|
-
rubygems_version: 2.4.
|
159
|
+
rubygems_version: 2.4.8
|
82
160
|
signing_key:
|
83
161
|
specification_version: 4
|
84
162
|
summary: Common Tools and scripts for Flatiron School Instructors
|
data/lib/common_tools/student.rb
DELETED
@@ -1,22 +0,0 @@
|
|
1
|
-
require 'json'
|
2
|
-
class Student
|
3
|
-
|
4
|
-
def initialize(args)
|
5
|
-
args.each do |key, value|
|
6
|
-
self.public_send("#{key}=", value )
|
7
|
-
end
|
8
|
-
end
|
9
|
-
|
10
|
-
def self.build_attributes(headers)
|
11
|
-
headers.each do |header|
|
12
|
-
attr_accessor header.to_sym
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
def to_json(args)
|
17
|
-
hash = {}
|
18
|
-
self.instance_variables.each{ |var| hash[var.to_s.delete("@")] = self.instance_variable_get(var) }
|
19
|
-
hash.to_json
|
20
|
-
end
|
21
|
-
|
22
|
-
end
|