bridge_blueprint 0.0.05 → 0.0.9

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 8e40854d5a34a871c4f3b9384ea89c36357c67d8
4
- data.tar.gz: a30a814a45d27d9a3bc531139e076f2f0f4aa61e
2
+ SHA256:
3
+ metadata.gz: 3795e4ec50a47d33f258d98bc0072f487b0ddf6f9f48f1f004b9b98bc2fc6f17
4
+ data.tar.gz: 9ab1b16ece7316d42ba44632321b6543cc88cc90435aca7eaa5e46668372a469
5
5
  SHA512:
6
- metadata.gz: f8705c4f29857b0b0b4911081f0c2d59315d1ff208a6de31fcc056beac681cc9666c64669459168b35a91c549b009ee557d74823fafde8cc879a1241a481ffe6
7
- data.tar.gz: c4b3c49049a61d6dc5155c784bca1ba010159ac849f291196492f2ed67e4ddcca9ddb9714f1228887336634459282e7c5bb78468043562a0834b6f7076e7cf50
6
+ metadata.gz: 4cfa4b29592ef6f8491459e99c6e04bada18459d3dab31eee6259487ad3439716427d465364a8989f643f92c200120ecfa05eca1127d6c3e3f40e44a01aaf756
7
+ data.tar.gz: 714e2fc56c87cb4fd289e1a9c4161656a86d2a8a35000d8675f661f00ca3fc2151c84490fd5fe89773cc7f4147e7b86ad0dcb1fd788fa654b229c43e4f13302f
data/.gitignore CHANGED
@@ -1,6 +1,50 @@
1
- /.*.iml
2
- .idea/
3
- bridge_api.iml
4
- .byebug.*
1
+ *.gem
2
+ *.rbc
3
+ /.config
4
+ /coverage/
5
+ /InstalledFiles
6
+ /pkg/
7
+ /spec/reports/
8
+ /spec/examples.txt
9
+ /test/tmp/
10
+ /test/version_tmp/
11
+ /tmp/
5
12
 
6
- .*.gem
13
+ # Used by dotenv library to load environment variables.
14
+ # .env
15
+
16
+ ## Specific to RubyMotion:
17
+ .dat*
18
+ .repl_history
19
+ build/
20
+ *.bridgesupport
21
+ build-iPhoneOS/
22
+ build-iPhoneSimulator/
23
+
24
+ ## Specific to RubyMotion (use of CocoaPods):
25
+ #
26
+ # We recommend against adding the Pods directory to your .gitignore. However
27
+ # you should judge for yourself, the pros and cons are mentioned at:
28
+ # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control
29
+ #
30
+ # vendor/Pods/
31
+
32
+ ## Documentation cache and generated files:
33
+ /.yardoc/
34
+ /_yardoc/
35
+ /doc/
36
+ /rdoc/
37
+
38
+ ## Environment normalization:
39
+ /.bundle/
40
+ /vendor/bundle
41
+ /lib/bundler/man/
42
+
43
+ # for a library or gem, you might want to ignore these files since the code is
44
+ # intended to run in multiple environments; otherwise, check them in:
45
+ # Gemfile.lock
46
+ # .ruby-version
47
+ # .ruby-gemset
48
+
49
+ # unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
50
+ .rvmrc
data/.rubocop.yml ADDED
@@ -0,0 +1,24 @@
1
+ AllCops:
2
+ Exclude:
3
+ - 'bin/**/*'
4
+ - 'node_modules/**/*'
5
+ - 'vendor/**/*'
6
+ Metrics/ClassLength:
7
+ Max: 150
8
+ Metrics/LineLength:
9
+ Max: 120
10
+ Style/Documentation:
11
+ Enabled: false
12
+ Metrics/BlockLength:
13
+ Exclude:
14
+ - 'bridge_blueprint.gemspec'
15
+ - 'spec/**/*'
16
+ Style/FrozenStringLiteralComment:
17
+ Enabled: false
18
+ Style/SymbolArray:
19
+ Enabled: false
20
+ Metrics/MethodLength:
21
+ Exclude:
22
+ - spec/**/*
23
+ Naming/AccessorMethodName:
24
+ Enabled: false
data/.simplecov ADDED
@@ -0,0 +1,7 @@
1
+ # This file is copied to spec/ when you run 'rails generate rspec:install'
2
+ SimpleCov.minimum_coverage 80
3
+ SimpleCov.minimum_coverage_by_file 80
4
+ SimpleCov.start do
5
+ add_group 'lib', 'lib'
6
+ add_filter 'spec'
7
+ end
data/Dockerfile ADDED
@@ -0,0 +1,14 @@
1
+ FROM ruby:2.5.0
2
+
3
+ RUN apt-get update
4
+
5
+ RUN mkdir -p /usr/src/app
6
+ COPY Gemfile /usr/src/app/
7
+ COPY Gemfile.lock /usr/src/app/
8
+ COPY bridge_blueprint.gemspec /usr/src/app/
9
+ COPY /lib/bridge_blueprint/version.rb /usr/src/app/lib/bridge_blueprint/
10
+
11
+ WORKDIR /usr/src/app
12
+ RUN bundle install --system
13
+
14
+ COPY . /usr/src/app/
data/Gemfile CHANGED
@@ -1,2 +1,4 @@
1
+ # frozen_string_literal: true
2
+
1
3
  source 'https://rubygems.org'
2
- gemspec
4
+ gemspec
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- bridge_blueprint (0.0.05)
4
+ bridge_blueprint (0.0.7)
5
5
  bridge_api (~> 0.1.16)
6
6
  open_uri_redirections (~> 0.2.1)
7
7
  rubyzip (~> 1.2.1)
@@ -9,14 +9,15 @@ PATH
9
9
  GEM
10
10
  remote: https://rubygems.org/
11
11
  specs:
12
- activesupport (5.1.4)
12
+ activesupport (5.2.0)
13
13
  concurrent-ruby (~> 1.0, >= 1.0.2)
14
- i18n (~> 0.7)
14
+ i18n (>= 0.7, < 2)
15
15
  minitest (~> 5.1)
16
16
  tzinfo (~> 1.1)
17
17
  addressable (2.5.1)
18
18
  public_suffix (~> 2.0, >= 2.0.2)
19
- bridge_api (0.1.16)
19
+ ast (2.4.0)
20
+ bridge_api (0.1.19)
20
21
  faraday (~> 0.9.0)
21
22
  faraday_middleware (~> 0.9.0)
22
23
  footrest (>= 0.5.1)
@@ -26,6 +27,7 @@ GEM
26
27
  crack (0.4.3)
27
28
  safe_yaml (~> 1.0.0)
28
29
  diff-lcs (1.3)
30
+ docile (1.3.0)
29
31
  faraday (0.9.2)
30
32
  multipart-post (>= 1.2, < 3)
31
33
  faraday_middleware (0.9.2)
@@ -35,13 +37,18 @@ GEM
35
37
  faraday (~> 0.9.0)
36
38
  link_header (>= 0.0.7)
37
39
  hashdiff (0.3.4)
38
- i18n (0.9.1)
40
+ i18n (1.0.0)
39
41
  concurrent-ruby (~> 1.0)
42
+ json (2.1.0)
40
43
  link_header (0.0.8)
41
44
  method_source (0.8.2)
42
- minitest (5.11.1)
45
+ minitest (5.11.3)
43
46
  multipart-post (2.0.0)
44
47
  open_uri_redirections (0.2.1)
48
+ parallel (1.12.1)
49
+ parser (2.5.1.0)
50
+ ast (~> 2.4.0)
51
+ powerpack (0.1.1)
45
52
  pry (0.10.4)
46
53
  coderay (~> 1.1.0)
47
54
  method_source (~> 0.8.1)
@@ -50,6 +57,7 @@ GEM
50
57
  rack (1.6.5)
51
58
  rack-protection (1.5.3)
52
59
  rack
60
+ rainbow (3.0.0)
53
61
  rake (0.9.6)
54
62
  rspec (2.99.0)
55
63
  rspec-core (~> 2.99.0)
@@ -59,8 +67,21 @@ GEM
59
67
  rspec-expectations (2.99.2)
60
68
  diff-lcs (>= 1.1.3, < 2.0)
61
69
  rspec-mocks (2.99.4)
70
+ rubocop (0.54.0)
71
+ parallel (~> 1.10)
72
+ parser (>= 2.5)
73
+ powerpack (~> 0.1)
74
+ rainbow (>= 2.2.2, < 4.0)
75
+ ruby-progressbar (~> 1.7)
76
+ unicode-display_width (~> 1.0, >= 1.0.1)
77
+ ruby-progressbar (1.9.0)
62
78
  rubyzip (1.2.1)
63
79
  safe_yaml (1.0.4)
80
+ simplecov (0.16.1)
81
+ docile (~> 1.1)
82
+ json (>= 1.8, < 3)
83
+ simplecov-html (~> 0.10.0)
84
+ simplecov-html (0.10.2)
64
85
  sinatra (1.4.8)
65
86
  rack (~> 1.5)
66
87
  rack-protection (~> 1.4)
@@ -68,8 +89,9 @@ GEM
68
89
  slop (3.6.0)
69
90
  thread_safe (0.3.6)
70
91
  tilt (1.4.1)
71
- tzinfo (1.2.4)
92
+ tzinfo (1.2.5)
72
93
  thread_safe (~> 0.1)
94
+ unicode-display_width (1.3.2)
73
95
  webmock (2.3.2)
74
96
  addressable (>= 2.3.6)
75
97
  crack (>= 0.3.2)
@@ -85,9 +107,11 @@ DEPENDENCIES
85
107
  pry (~> 0)
86
108
  rake (~> 0)
87
109
  rspec (~> 2.6)
110
+ rubocop (~> 0.54.0)
111
+ simplecov (~> 0.16.1)
88
112
  sinatra (~> 1.0)
89
113
  tilt (~> 1.3, >= 1.3.4)
90
114
  webmock (~> 2.3.1)
91
115
 
92
116
  BUNDLED WITH
93
- 1.14.6
117
+ 1.16.1
data/bin/jenkins ADDED
@@ -0,0 +1,17 @@
1
+ #!/usr/bin/env bash
2
+
3
+ set +e
4
+ EXIT_CODES=0
5
+
6
+ #Skip this for now until we can fix all the cop issues
7
+
8
+ #echo "Analyzing ruby code with rubocop"
9
+ #bundle exec gergich capture rubocop "bundle exec rubocop --fail-level autocorrect"
10
+ #EXIT_CODES=$(($EXIT_CODES + $?))
11
+
12
+ echo 'Running ruby specs'
13
+ bundle exec rspec
14
+ EXIT_CODES=$(($EXIT_CODES + $?))
15
+
16
+ bundle exec gergich publish
17
+ exit $EXIT_CODES
@@ -1,33 +1,37 @@
1
- # -*- encoding: utf-8 -*-
2
- $:.push File.expand_path("../lib", __FILE__)
1
+
2
+ # frozen_string_literal: true
3
+
4
+ $LOAD_PATH.push File.expand_path('lib', __dir__)
3
5
  require 'bridge_blueprint/version'
4
6
 
5
7
  Gem::Specification.new do |gem|
6
- gem.authors = ["Jay Shaffer"]
7
- gem.email = ["jshaffer@instructure.com"]
8
- gem.description = %q{Tools for consuming bridge data dumps}
9
- gem.summary = %q{Bridge Blueprint}
10
- gem.homepage = "https://getbridge.com"
8
+ gem.authors = ['Jay Shaffer']
9
+ gem.email = ['jshaffer@instructure.com']
10
+ gem.description = 'Tools for consuming bridge data dumps'
11
+ gem.summary = 'Bridge Blueprint'
12
+ gem.homepage = 'https://getbridge.com'
11
13
  gem.license = 'MIT'
12
14
 
13
15
  gem.files = `git ls-files`.split("\n")
14
- gem.files += Dir.glob("lib/**/*.rb")
15
- gem.files += Dir.glob("spec/**/*")
16
- gem.test_files = Dir.glob("spec/**/*")
17
- gem.name = "bridge_blueprint"
18
- gem.require_paths = ["lib"]
16
+ gem.files += Dir.glob('lib/**/*.rb')
17
+ gem.files += Dir.glob('spec/**/*')
18
+ gem.test_files = Dir.glob('spec/**/*')
19
+ gem.name = 'bridge_blueprint'
20
+ gem.require_paths = ['lib']
19
21
  gem.version = BridgeBlueprint::VERSION
20
22
 
21
- gem.add_runtime_dependency 'bridge_api', '~> 0.1.16'
23
+ gem.add_runtime_dependency 'bridge_api', '>= 0.1.16'
22
24
  gem.add_runtime_dependency 'open_uri_redirections', '~> 0.2.1'
23
25
  gem.add_runtime_dependency 'rubyzip', '~> 1.2.1'
24
26
 
25
- gem.add_development_dependency 'rake', '~> 0'
26
27
  gem.add_development_dependency 'bundler', '~> 1.0', '>= 1.0.0'
27
- gem.add_development_dependency 'rspec', '~> 2.6'
28
- gem.add_development_dependency 'webmock', '~>2.3.1'
28
+ gem.add_development_dependency 'byebug', '~> 8.2.2'
29
29
  gem.add_development_dependency 'pry', '~> 0'
30
- gem.add_development_dependency 'tilt', '>= 1.3.4', '~> 1.3'
30
+ gem.add_development_dependency 'rake', '~> 0'
31
+ gem.add_development_dependency 'rspec', '~> 2.6'
32
+ gem.add_development_dependency 'rubocop', '~> 0.54.0'
33
+ gem.add_development_dependency 'simplecov', '~> 0.16.1'
31
34
  gem.add_development_dependency 'sinatra', '~> 1.0'
32
- gem.add_development_dependency 'byebug', '~> 8.2.2'
35
+ gem.add_development_dependency 'tilt', '>= 1.3.4', '~> 1.3'
36
+ gem.add_development_dependency 'webmock', '~>2.3.1'
33
37
  end
data/build.sh ADDED
@@ -0,0 +1,5 @@
1
+ set -e
2
+
3
+ docker-compose build
4
+ docker-compose up -d
5
+ docker-compose run -T web bin/jenkins
@@ -0,0 +1,18 @@
1
+ version: '2'
2
+
3
+ services:
4
+ web:
5
+ build:
6
+ context: .
7
+ dockerfile: ./Dockerfile
8
+ environment:
9
+ APP_DOMAIN: web
10
+ GERGICH_KEY: "${GERGICH_KEY}"
11
+ GERRIT_PROJECT: "${GERRIT_PROJECT}"
12
+ GERRIT_HOST: "${GERRIT_HOST}"
13
+ GERRIT_BRANCH: "${GERRIT_BRANCH}"
14
+ volumes:
15
+ - "coverage:/usr/src/app/coverage"
16
+
17
+ volumes:
18
+ coverage: {}
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module BridgeBlueprint
2
4
  class Constants
3
5
  STATUS_FAILED = 'failed'
@@ -1,16 +1,15 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'csv'
2
4
  require 'zip'
3
5
 
4
6
  module BridgeBlueprint
5
7
  class DataDump
6
-
7
8
  @path = nil
8
9
 
9
10
  def initialize(path)
10
11
  @path = path
11
- unless File.exists?(path)
12
- raise "File not found #{path}"
13
- end
12
+ raise "File not found #{path}" unless File.exist?(path)
14
13
  end
15
14
 
16
15
  def each_row(name)
@@ -29,11 +28,10 @@ module BridgeBlueprint
29
28
  file = nil
30
29
  Zip::File.open(@path) do |zip_file|
31
30
  zip_file.each do |entry|
32
- if "#{name.to_s}" == entry.name
33
- path = "#{dir}/#{entry.name}"
34
- file = entry.extract(path)
35
- break
36
- end
31
+ next unless name.to_s == entry.name
32
+ path = "#{dir}/#{entry.name}"
33
+ file = entry.extract(path)
34
+ break
37
35
  end
38
36
  end
39
37
  if file
@@ -1,56 +1,73 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'open-uri'
2
4
  require 'open_uri_redirections'
3
5
  require 'net/http'
4
6
  require 'uri'
5
7
  require 'base64'
6
- require "bridge_api"
8
+ require 'bridge_api'
7
9
 
8
10
  module BridgeBlueprint
9
-
10
11
  class RemoteData
11
-
12
12
  USERS_CSV_NAME = 'users.csv'
13
13
  CUSTOM_FIELD_CSV_NAME = 'custom_fields.csv'
14
14
  GRANTS_CSV_NAME = 'grants.csv'
15
15
 
16
+ attr_accessor :client
17
+
16
18
  @base_url = nil
17
19
  @auth_header = nil
18
20
  @file_url = nil
19
21
  @file_path = nil
20
22
  @is_complete = false
21
23
  @client = nil
24
+ @models = nil
22
25
 
23
- def initialize(base_url, key, secret)
26
+ def initialize(base_url, key, secret, models = nil)
24
27
  @base_url = base_url
25
- @auth_header = 'Basic ' + Base64.strict_encode64("#{key}:#{secret}")
28
+ @auth_header = 'Basic ' + Base64.strict_encode64("#{key}:#{secret}")
26
29
  @client = BridgeAPI::Client.new(prefix: base_url, api_key: key, api_secret: secret)
30
+ @models = models
27
31
  end
28
32
 
29
33
  def start_data_report
30
- @client.create_data_dump
34
+ raw_dumps = get_dumps
35
+ dumps = raw_dumps.members
36
+ unless dumps.empty?
37
+ dump = dumps.first
38
+ case dump['status']
39
+ when 'pending'
40
+ return
41
+ when 'complete'
42
+ return if Time.parse(dump['date']) > Time.now - 300
43
+ end
44
+ end
45
+ @models.present? ? @client.create_data_dump({only: @models}) : @client.create_data_dump
31
46
  end
32
47
 
33
48
  def status
34
49
  dumps = get_dumps
35
- if dumps.members.size > 0
36
- return get_dumps.first['status']
37
- else
38
- return BridgeBlueprint::Constants::STATUS_NOT_FOUND
39
- end
50
+ return get_dumps.first['status'] unless dumps.members.empty?
51
+ BridgeBlueprint::Constants::STATUS_NOT_FOUND
40
52
  end
41
53
 
42
- def store_file(path)
43
- @file_path = path
54
+ def remote_url
44
55
  uri = URI.parse(@base_url)
45
56
  http = Net::HTTP.new(uri.host, uri.port)
46
57
  http.read_timeout = 300
47
- http.use_ssl = (uri.scheme == "https")
58
+ http.use_ssl = (uri.scheme == 'https')
48
59
  req = Net::HTTP::Get.new("#{@base_url}/api/admin/data_dumps/download")
49
- req.add_field("Authorization", @auth_header)
60
+ req.add_field('Authorization', @auth_header)
50
61
  res = http.request(req)
51
- redirect_url = res['location']
52
- File.open(@file_path, 'w') do |file|
53
- IO.copy_stream(open(redirect_url), @file_path)
62
+ res['location']
63
+ end
64
+
65
+ def store_file(path)
66
+ @file_path = path
67
+ url = remote_url
68
+ raise 'Missing location url from bridge data dump response' if url.blank?
69
+ File.open(@file_path, 'w') do |_file|
70
+ IO.copy_stream(open(url), @file_path)
54
71
  end
55
72
  end
56
73
 
@@ -62,11 +79,10 @@ module BridgeBlueprint
62
79
 
63
80
  def get_headers
64
81
  {
65
- 'Authorization'=> @auth_header,
66
- 'Content-Type'=> 'application/json',
67
- 'Accept'=> 'application/json'
82
+ 'Authorization' => @auth_header,
83
+ 'Content-Type' => 'application/json',
84
+ 'Accept' => 'application/json'
68
85
  }
69
86
  end
70
87
  end
71
-
72
88
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module BridgeBlueprint
2
- VERSION = '0.0.05' unless defined?(BridgeBlueprint::VERSION)
4
+ VERSION = '0.0.9' unless defined?(BridgeBlueprint::VERSION)
3
5
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'bridge_blueprint/version'
2
4
  require 'bridge_blueprint/data_dump'
3
5
  require 'bridge_blueprint/constants'
@@ -1,15 +1,16 @@
1
- require "test_helper"
1
+ # frozen_string_literal: true
2
+
3
+ require 'test_helper'
2
4
  require 'zip'
3
5
 
4
6
  describe BridgeBlueprint::DataDump do
5
-
6
7
  before(:each) do
7
8
  dir = Dir.mktmpdir
8
9
  zip_folder_path = "#{File.dirname(__FILE__)}/../fixtures/bridge_zip"
9
10
  input_filenames = [
10
- 'users.csv',
11
- 'custom_fields.csv'
12
- ]
11
+ 'users.csv',
12
+ 'custom_fields.csv'
13
+ ]
13
14
 
14
15
  @zipfile_name = "#{dir}/dump.zip"
15
16
 
@@ -24,11 +25,11 @@ describe BridgeBlueprint::DataDump do
24
25
  it 'should parse a bridge data dump file' do
25
26
  file = BridgeBlueprint::DataDump.new(@zipfile_name)
26
27
  user_count = 0
27
- file.each_row('users') do |user|
28
+ file.each_row('users') do |_user|
28
29
  user_count += 1
29
30
  end
30
31
  custom_field_count = 0
31
- file.each_row('custom_fields') do |custom_field|
32
+ file.each_row('custom_fields') do |_custom_field|
32
33
  custom_field_count += 1
33
34
  end
34
35
  expect(user_count).to(eq(2))
@@ -1,15 +1,16 @@
1
- require "test_helper"
1
+ # frozen_string_literal: true
2
+
3
+ require 'test_helper'
2
4
  require 'zip'
3
5
 
4
6
  describe BridgeBlueprint::RemoteData do
5
-
6
7
  before(:each) do
7
8
  @dir = Dir.mktmpdir
8
9
  zip_folder_path = "#{File.dirname(__FILE__)}/../fixtures/bridge_zip"
9
10
  input_filenames = [
10
- 'users.csv',
11
- 'custom_fields.csv'
12
- ]
11
+ 'users.csv',
12
+ 'custom_fields.csv'
13
+ ]
13
14
 
14
15
  @zipfile_name = "#{@dir}/dump.zip"
15
16
 
@@ -19,14 +20,35 @@ describe BridgeBlueprint::RemoteData do
19
20
  end
20
21
  end
21
22
 
22
- stub_request(:get, "https://example.com/fake-file-url").
23
- with(:headers => {'Accept'=>'*/*', 'User-Agent'=>'Ruby'}).
24
- to_return(:status => 200, :body => lambda{|request| File.open(@zipfile_name)}, :headers => {})
23
+ stub_request(:get, 'https://example.com/fake-file-url')
24
+ .with(headers: { 'Accept' => '*/*', 'User-Agent' => 'Ruby' })
25
+ .to_return(status: 200, body: ->(_request) { File.open(@zipfile_name) }, headers: {})
25
26
  end
26
27
 
27
28
  describe 'completed' do
28
29
  it 'should start a data dump' do
29
30
  data = BridgeBlueprint::RemoteData.new('https://example.com', 'key', 'secret')
31
+ expect(data.client).to receive(:create_data_dump)
32
+ data.start_data_report
33
+ end
34
+ end
35
+
36
+ describe 'completed' do
37
+ it 'should not start a data dump if already pending' do
38
+ data = BridgeBlueprint::RemoteData.new('https://pending.com', 'key', 'secret')
39
+ expect(data.client).not_to receive(:create_data_dump)
40
+ data.start_data_report
41
+ end
42
+
43
+ it 'should not start a data dump if one has already completed in the past 5 minutes' do
44
+ data = BridgeBlueprint::RemoteData.new('https://recent.com', 'key', 'secret')
45
+ expect(data.client).not_to receive(:create_data_dump)
46
+ data.start_data_report
47
+ end
48
+
49
+ it 'should start a data dump if one hasnt already completed in the past 5 minutes' do
50
+ data = BridgeBlueprint::RemoteData.new('https://notrecent.com', 'key', 'secret')
51
+ expect(data.client).to receive(:create_data_dump)
30
52
  data.start_data_report
31
53
  end
32
54
  end
@@ -43,8 +65,7 @@ describe BridgeBlueprint::RemoteData do
43
65
  data = BridgeBlueprint::RemoteData.new('https://example.com', 'key', 'secret')
44
66
  dir = Dir.mktmpdir
45
67
  data.store_file("#{@dir}/data_dump.csv")
46
- expect(File.exists?("#{@dir}/data_dump.csv")).to(eq(true))
68
+ expect(File.exist?("#{@dir}/data_dump.csv")).to(eq(true))
47
69
  end
48
70
  end
49
-
50
71
  end
@@ -0,0 +1,9 @@
1
+ {
2
+ "meta": {},
3
+ "data_dumps": [
4
+ {
5
+ "status": "pending",
6
+ "date": "2015-11-12T19:03:37Z"
7
+ }
8
+ ]
9
+ }
@@ -1,8 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'sinatra/base'
2
4
  require 'tilt'
3
5
 
4
6
  class FakeBridge < Sinatra::Base
5
-
6
7
  ## Course Templates
7
8
 
8
9
  get %r{/api/author/course_templates$} do
@@ -84,7 +85,7 @@ class FakeBridge < Sinatra::Base
84
85
  get_json_data 200, 'enrollment.json'
85
86
  end
86
87
 
87
- #Custom Fields
88
+ # Custom Fields
88
89
 
89
90
  get %r{/api/author/custom_fields} do
90
91
  get_json_data 200, 'custom_fields.json'
@@ -109,7 +110,20 @@ class FakeBridge < Sinatra::Base
109
110
  # Data Dumps
110
111
 
111
112
  get %r{/api/admin/data_dumps$} do
112
- get_json_data 200, 'data_dumps.json'
113
+ host = URI.parse(url).host
114
+ if host == 'pending.com'
115
+ get_json_data 200, 'data_dumps_pending.json'
116
+ elsif host == 'notrecent.com'
117
+ data = JSON.parse(fixture('data_dumps.json').read)
118
+ data['data_dumps'][0]['date'] = (Time.now - 310).to_s
119
+ custom_response(data.to_json)
120
+ elsif host == 'recent.com'
121
+ data = JSON.parse(fixture('data_dumps.json').read)
122
+ data['data_dumps'][0]['date'] = (Time.now - 290).to_s
123
+ custom_response(data.to_json)
124
+ else
125
+ get_json_data 200, 'data_dumps.json'
126
+ end
113
127
  end
114
128
 
115
129
  post %r{/api/admin/data_dumps$} do
@@ -119,19 +133,24 @@ class FakeBridge < Sinatra::Base
119
133
  get %r{/api/admin/data_dumps/download.*} do
120
134
  content_type :json
121
135
  status 200
122
- headers[:location] = "https://example.com/fake-file-url"
136
+ headers[:location] = 'https://example.com/fake-file-url'
123
137
  end
124
138
 
125
139
  private
126
140
 
141
+ def custom_response(data)
142
+ content_type :json
143
+ status 200
144
+ data
145
+ end
146
+
127
147
  def get_json_data(response_code, file_name)
128
148
  content_type :json
129
149
  status response_code
130
- unless file_name.nil?
131
- File.open(File.dirname(__FILE__) + '/../fixtures/' + file_name).read
132
- else
150
+ if file_name.nil?
133
151
  {}
152
+ else
153
+ File.open(File.dirname(__FILE__) + '/../fixtures/' + file_name).read
134
154
  end
135
155
  end
136
-
137
156
  end
data/spec/test_helper.rb CHANGED
@@ -1,3 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'simplecov'
1
4
  require 'bridge_blueprint'
2
5
  require 'rspec'
3
6
  require 'webmock/rspec'
@@ -5,7 +8,7 @@ require 'json'
5
8
  require 'pry'
6
9
 
7
10
  RSpec.configure do |config|
8
- Dir["./spec/support/**/*.rb"].sort.each {|f| require f}
11
+ Dir['./spec/support/**/*.rb'].sort.each { |f| require f }
9
12
 
10
13
  config.before(:each) do
11
14
  WebMock.disable_net_connect!
@@ -13,7 +16,6 @@ RSpec.configure do |config|
13
16
  end
14
17
  end
15
18
 
16
-
17
19
  def fixture(*file)
18
- File.new(File.join(File.expand_path("../fixtures", __FILE__), *file))
20
+ File.new(File.join(File.expand_path('fixtures', __dir__), *file))
19
21
  end
metadata CHANGED
@@ -1,27 +1,27 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bridge_blueprint
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.05
4
+ version: 0.0.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jay Shaffer
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-01-15 00:00:00.000000000 Z
11
+ date: 2022-02-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bridge_api
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: 0.1.16
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: 0.1.16
27
27
  - !ruby/object:Gem::Dependency
@@ -52,20 +52,6 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: 1.2.1
55
- - !ruby/object:Gem::Dependency
56
- name: rake
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
55
  - !ruby/object:Gem::Dependency
70
56
  name: bundler
71
57
  requirement: !ruby/object:Gem::Requirement
@@ -87,35 +73,35 @@ dependencies:
87
73
  - !ruby/object:Gem::Version
88
74
  version: 1.0.0
89
75
  - !ruby/object:Gem::Dependency
90
- name: rspec
76
+ name: byebug
91
77
  requirement: !ruby/object:Gem::Requirement
92
78
  requirements:
93
79
  - - "~>"
94
80
  - !ruby/object:Gem::Version
95
- version: '2.6'
81
+ version: 8.2.2
96
82
  type: :development
97
83
  prerelease: false
98
84
  version_requirements: !ruby/object:Gem::Requirement
99
85
  requirements:
100
86
  - - "~>"
101
87
  - !ruby/object:Gem::Version
102
- version: '2.6'
88
+ version: 8.2.2
103
89
  - !ruby/object:Gem::Dependency
104
- name: webmock
90
+ name: pry
105
91
  requirement: !ruby/object:Gem::Requirement
106
92
  requirements:
107
93
  - - "~>"
108
94
  - !ruby/object:Gem::Version
109
- version: 2.3.1
95
+ version: '0'
110
96
  type: :development
111
97
  prerelease: false
112
98
  version_requirements: !ruby/object:Gem::Requirement
113
99
  requirements:
114
100
  - - "~>"
115
101
  - !ruby/object:Gem::Version
116
- version: 2.3.1
102
+ version: '0'
117
103
  - !ruby/object:Gem::Dependency
118
- name: pry
104
+ name: rake
119
105
  requirement: !ruby/object:Gem::Requirement
120
106
  requirements:
121
107
  - - "~>"
@@ -129,25 +115,47 @@ dependencies:
129
115
  - !ruby/object:Gem::Version
130
116
  version: '0'
131
117
  - !ruby/object:Gem::Dependency
132
- name: tilt
118
+ name: rspec
133
119
  requirement: !ruby/object:Gem::Requirement
134
120
  requirements:
135
- - - ">="
121
+ - - "~>"
136
122
  - !ruby/object:Gem::Version
137
- version: 1.3.4
123
+ version: '2.6'
124
+ type: :development
125
+ prerelease: false
126
+ version_requirements: !ruby/object:Gem::Requirement
127
+ requirements:
138
128
  - - "~>"
139
129
  - !ruby/object:Gem::Version
140
- version: '1.3'
130
+ version: '2.6'
131
+ - !ruby/object:Gem::Dependency
132
+ name: rubocop
133
+ requirement: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - "~>"
136
+ - !ruby/object:Gem::Version
137
+ version: 0.54.0
141
138
  type: :development
142
139
  prerelease: false
143
140
  version_requirements: !ruby/object:Gem::Requirement
144
141
  requirements:
145
- - - ">="
142
+ - - "~>"
146
143
  - !ruby/object:Gem::Version
147
- version: 1.3.4
144
+ version: 0.54.0
145
+ - !ruby/object:Gem::Dependency
146
+ name: simplecov
147
+ requirement: !ruby/object:Gem::Requirement
148
+ requirements:
148
149
  - - "~>"
149
150
  - !ruby/object:Gem::Version
150
- version: '1.3'
151
+ version: 0.16.1
152
+ type: :development
153
+ prerelease: false
154
+ version_requirements: !ruby/object:Gem::Requirement
155
+ requirements:
156
+ - - "~>"
157
+ - !ruby/object:Gem::Version
158
+ version: 0.16.1
151
159
  - !ruby/object:Gem::Dependency
152
160
  name: sinatra
153
161
  requirement: !ruby/object:Gem::Requirement
@@ -163,19 +171,39 @@ dependencies:
163
171
  - !ruby/object:Gem::Version
164
172
  version: '1.0'
165
173
  - !ruby/object:Gem::Dependency
166
- name: byebug
174
+ name: tilt
167
175
  requirement: !ruby/object:Gem::Requirement
168
176
  requirements:
177
+ - - ">="
178
+ - !ruby/object:Gem::Version
179
+ version: 1.3.4
169
180
  - - "~>"
170
181
  - !ruby/object:Gem::Version
171
- version: 8.2.2
182
+ version: '1.3'
172
183
  type: :development
173
184
  prerelease: false
174
185
  version_requirements: !ruby/object:Gem::Requirement
175
186
  requirements:
187
+ - - ">="
188
+ - !ruby/object:Gem::Version
189
+ version: 1.3.4
176
190
  - - "~>"
177
191
  - !ruby/object:Gem::Version
178
- version: 8.2.2
192
+ version: '1.3'
193
+ - !ruby/object:Gem::Dependency
194
+ name: webmock
195
+ requirement: !ruby/object:Gem::Requirement
196
+ requirements:
197
+ - - "~>"
198
+ - !ruby/object:Gem::Version
199
+ version: 2.3.1
200
+ type: :development
201
+ prerelease: false
202
+ version_requirements: !ruby/object:Gem::Requirement
203
+ requirements:
204
+ - - "~>"
205
+ - !ruby/object:Gem::Version
206
+ version: 2.3.1
179
207
  description: Tools for consuming bridge data dumps
180
208
  email:
181
209
  - jshaffer@instructure.com
@@ -184,11 +212,17 @@ extensions: []
184
212
  extra_rdoc_files: []
185
213
  files:
186
214
  - ".gitignore"
215
+ - ".rubocop.yml"
187
216
  - ".ruby-version"
217
+ - ".simplecov"
218
+ - Dockerfile
188
219
  - Gemfile
189
220
  - Gemfile.lock
190
221
  - README.rdoc
222
+ - bin/jenkins
191
223
  - bridge_blueprint.gemspec
224
+ - build.sh
225
+ - docker-compose.yml
192
226
  - lib/bridge_blueprint.rb
193
227
  - lib/bridge_blueprint/constants.rb
194
228
  - lib/bridge_blueprint/data_dump.rb
@@ -199,13 +233,14 @@ files:
199
233
  - spec/fixtures/bridge_zip/custom_fields.csv
200
234
  - spec/fixtures/bridge_zip/users.csv
201
235
  - spec/fixtures/data_dumps.json
236
+ - spec/fixtures/data_dumps_pending.json
202
237
  - spec/support/fake_bridge.rb
203
238
  - spec/test_helper.rb
204
239
  homepage: https://getbridge.com
205
240
  licenses:
206
241
  - MIT
207
242
  metadata: {}
208
- post_install_message:
243
+ post_install_message:
209
244
  rdoc_options: []
210
245
  require_paths:
211
246
  - lib
@@ -220,17 +255,16 @@ required_rubygems_version: !ruby/object:Gem::Requirement
220
255
  - !ruby/object:Gem::Version
221
256
  version: '0'
222
257
  requirements: []
223
- rubyforge_project:
224
- rubygems_version: 2.2.2
225
- signing_key:
258
+ rubygems_version: 3.1.6
259
+ signing_key:
226
260
  specification_version: 4
227
261
  summary: Bridge Blueprint
228
262
  test_files:
229
263
  - spec/bridge_blueprint/data_dump_spec.rb
230
264
  - spec/bridge_blueprint/remote_data_spec.rb
265
+ - spec/support/fake_bridge.rb
231
266
  - spec/fixtures/bridge_zip/custom_fields.csv
232
267
  - spec/fixtures/bridge_zip/users.csv
233
268
  - spec/fixtures/data_dumps.json
234
- - spec/support/fake_bridge.rb
269
+ - spec/fixtures/data_dumps_pending.json
235
270
  - spec/test_helper.rb
236
- has_rdoc: