parliament-utils 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.
Files changed (53) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +15 -0
  3. data/.hound.yml +4 -0
  4. data/.rspec +2 -0
  5. data/.rubocop.yml +55 -0
  6. data/.ruby-version +1 -0
  7. data/.travis.yml +5 -0
  8. data/CODE_OF_CONDUCT.md +74 -0
  9. data/Gemfile +7 -0
  10. data/Instructions - Steps to include in app.md +95 -0
  11. data/LICENSE +7 -0
  12. data/Makefile +16 -0
  13. data/README.md +177 -0
  14. data/Rakefile +6 -0
  15. data/bin/console +14 -0
  16. data/bin/setup +8 -0
  17. data/config/locales/en.yml +387 -0
  18. data/config/puma.rb +20 -0
  19. data/lib/parliament/utils/config/initializers/airbrake.rb +76 -0
  20. data/lib/parliament/utils/config/initializers/assets.rb +11 -0
  21. data/lib/parliament/utils/config/initializers/backtrace_silencers.rb +7 -0
  22. data/lib/parliament/utils/config/initializers/bandiera.rb +3 -0
  23. data/lib/parliament/utils/config/initializers/cookies_serializer.rb +3 -0
  24. data/lib/parliament/utils/config/initializers/filter_parameter_logging.rb +4 -0
  25. data/lib/parliament/utils/config/initializers/inflections.rb +16 -0
  26. data/lib/parliament/utils/config/initializers/mime_types.rb +7 -0
  27. data/lib/parliament/utils/config/initializers/session_store.rb +3 -0
  28. data/lib/parliament/utils/config/initializers/timeout.rb +1 -0
  29. data/lib/parliament/utils/config/initializers/wrap_parameters.rb +9 -0
  30. data/lib/parliament/utils/config/initializers.rb +16 -0
  31. data/lib/parliament/utils/helpers/application_helper.rb +68 -0
  32. data/lib/parliament/utils/helpers/flag_helper.rb +29 -0
  33. data/lib/parliament/utils/helpers/format_helper.rb +18 -0
  34. data/lib/parliament/utils/helpers/houses_helper.rb +80 -0
  35. data/lib/parliament/utils/helpers/parliament_helper.rb +22 -0
  36. data/lib/parliament/utils/helpers/postcode_helper.rb +72 -0
  37. data/lib/parliament/utils/helpers/request_helper.rb +30 -0
  38. data/lib/parliament/utils/helpers/translation_helper.rb +12 -0
  39. data/lib/parliament/utils/helpers/v_card_helper.rb +57 -0
  40. data/lib/parliament/utils/helpers.rb +18 -0
  41. data/lib/parliament/utils/railtie.rb +12 -0
  42. data/lib/parliament/utils/test_helpers/bandiera_helper.rb +19 -0
  43. data/lib/parliament/utils/test_helpers/rails_helper.rb +42 -0
  44. data/lib/parliament/utils/test_helpers/rspec_helper.rb +76 -0
  45. data/lib/parliament/utils/test_helpers/simplecov_helper.rb +20 -0
  46. data/lib/parliament/utils/test_helpers/vcr_helper.rb +83 -0
  47. data/lib/parliament/utils/test_helpers/webmock_helper.rb +13 -0
  48. data/lib/parliament/utils/test_helpers.rb +19 -0
  49. data/lib/parliament/utils/version.rb +5 -0
  50. data/lib/parliament/utils.rb +10 -0
  51. data/log/test.log +0 -0
  52. data/parliament-utils.gemspec +41 -0
  53. metadata +318 -0
@@ -0,0 +1,29 @@
1
+ module Parliament
2
+ module Utils
3
+ module Helpers
4
+ module FlagHelper
5
+ def self.dissolution?
6
+ # When in the dissolution period
7
+ BANDIERA_CLIENT.enabled?('parliament', 'show-dissolution')
8
+ end
9
+
10
+ def self.register_to_vote?
11
+ # When in dissolution but still in the registration period
12
+ BANDIERA_CLIENT.enabled?('parliament', 'show-register')
13
+ end
14
+
15
+ def self.election?
16
+ BANDIERA_CLIENT.enabled?('parliament', 'show-election')
17
+ end
18
+
19
+ def self.post_election?
20
+ BANDIERA_CLIENT.enabled?('parliament', 'show-post-election')
21
+ end
22
+
23
+ def self.election_period?
24
+ (election? == true || post_election? == true)
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,18 @@
1
+ module Parliament
2
+ module Utils
3
+ module Helpers
4
+ module FormatHelper
5
+ DATA_FORMATS = ['text/csv',
6
+ 'text/vnd.graphviz',
7
+ 'text/n3',
8
+ 'application/json',
9
+ 'application/n-triples',
10
+ 'application/rdf+xml',
11
+ 'application/rdf+json',
12
+ 'application/xml',
13
+ 'text/tab-separated-values',
14
+ 'text/turtle'].freeze
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,80 @@
1
+ module Parliament
2
+ module Utils
3
+ module Helpers
4
+ module HousesHelper
5
+ # Checks if house is the House of Commons and sets @commons_id and @lords_id if not already set.
6
+ #
7
+ # @param [Grom::Node] house a Grom::Node with type http://id.ukpds.org/schema/House.
8
+ # @return [Boolean] boolean depending on whether the house has the same id as the House of Commons.
9
+ def self.commons?(house)
10
+ set_ids
11
+
12
+ house.graph_id == @commons_id
13
+ end
14
+
15
+ # Checks if house is the House of Lords and sets @commons_id and @lords_id if not already set.
16
+ #
17
+ # @param [Grom::Node] house a Grom::Node with type http://id.ukpds.org/schema/House.
18
+ # @return [Boolean] boolean depending on whether the house has the same id as the House of Lords.
19
+ def self.lords?(house)
20
+ !commons?(house)
21
+ end
22
+
23
+ # Sets and returns the id for the House of Commons.
24
+ #
25
+ # @return [String] @commons_id the id for the House of Commons.
26
+ def self.commons_id
27
+ set_ids
28
+
29
+ @commons_id
30
+ end
31
+
32
+ # Sets and returns the id for the House of Lords.
33
+ #
34
+ # @return [String] @lords_id the id for the House of Lords.
35
+ def self.lords_id
36
+ set_ids
37
+
38
+ @lords_id
39
+ end
40
+
41
+ # Returns the current house id for the page alongside the other house id.
42
+ #
43
+ # @param [Grom::Node] house The house that a particular person is linked to.
44
+ # @return [Array<String, String>] The current house id and other house id.
45
+ def self.house_id_string(house)
46
+ is_commons = self.commons?(house)
47
+
48
+ house_ids = [commons_id, lords_id]
49
+ return house_ids if is_commons
50
+
51
+ house_ids.reverse
52
+ end
53
+
54
+ # Returns the current
55
+ #
56
+ # @param [Grom::Node] house The house that a particular person is linked to.
57
+ # @return [Array<String, String>] The current person type and other person type.
58
+ def self.person_type_string(house)
59
+ is_mp = self.commons?(house)
60
+
61
+ types = [I18n.t('mp_plural'), I18n.t('lord_plural')]
62
+
63
+ return types if is_mp
64
+
65
+ types.reverse
66
+ end
67
+
68
+ private_class_method
69
+
70
+ def self.set_ids
71
+ return if @commons_id && @lords_id
72
+ houses = Parliament::Utils::Helpers::ParliamentHelper.parliament_request.houses.get.filter('http://id.ukpds.org/schema/House').sort_by(:name)
73
+
74
+ @commons_id = houses.first.graph_id
75
+ @lords_id = houses.last.graph_id
76
+ end
77
+ end
78
+ end
79
+ end
80
+ end
@@ -0,0 +1,22 @@
1
+ require 'parliament'
2
+ require 'parliament/ntriple'
3
+
4
+ module Parliament
5
+ module Utils
6
+ module Helpers
7
+ module ParliamentHelper
8
+ def self.parliament_request
9
+ Parliament::Request::UrlRequest.new(
10
+ builder: Parliament::Builder::NTripleResponseBuilder,
11
+ headers: { 'Ocp-Apim-Subscription-Key': ENV['PARLIAMENT_AUTH_TOKEN'] },
12
+ decorators: Parliament::Grom::Decorator
13
+ )
14
+ end
15
+
16
+ def parliament_request
17
+ Parliament::Utils::Helpers::ParliamentHelper.parliament_request
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,72 @@
1
+ require 'i18n'
2
+ require 'parliament/utils/helpers/translation_helper' unless defined?(::Rails)
3
+
4
+ # attr [String] previous_path the path to redirect back to in the case of an error.
5
+ module Parliament
6
+ module Utils
7
+ module Helpers
8
+ module PostcodeHelper
9
+
10
+ include Parliament::Utils::Helpers::TranslationHelper unless defined?(::Rails)
11
+
12
+ attr_accessor :previous_path
13
+
14
+ # Makes requests to the postcode_lookup endpoint.
15
+ # @param [String] raw_input the data inputted by the user.
16
+ # @return [Parliament::Response::NTripleResponse, Parliament::ClientError, Parliament::ServerError] if successful, a response is returned, otherwise an error is returned.
17
+ def self.lookup(raw_input)
18
+ postcode = clean_input(raw_input)
19
+
20
+ begin
21
+ Parliament::Utils::Helpers::ParliamentHelper.parliament_request.constituencies.postcode_lookup(postcode).get
22
+ rescue Parliament::ClientError
23
+ raise(PostcodeError, I18n.t('error.no_constituency').capitalize)
24
+ rescue Parliament::ServerError
25
+ raise(PostcodeError, I18n.t('error.lookup_unavailable').capitalize)
26
+ end
27
+ end
28
+
29
+ # Replaces whitespace with a hyphen.
30
+ # @param [String] postcode the string to be hyphenated.
31
+ # @return [String] a hyphenated string.
32
+ def self.hyphenate(postcode)
33
+ postcode.strip.gsub(/\s+/, '-')
34
+ end
35
+
36
+ # Replaces a hyphen with whitespace, restoring a postcode to its usual format.
37
+ # @param [String] postcode the string to be processed.
38
+ # @return [String] the restored postcode with hyphen replaced by whitespace.
39
+ def self.unhyphenate(postcode)
40
+ postcode.tr('-', ' ')
41
+ end
42
+
43
+ # Returns the previous path variable.
44
+ # @return [String] previous_path the path to redirect back to in the case of an error.
45
+ def self.previous_path
46
+ @previous_path
47
+ end
48
+
49
+ # Sets the previous path variable.
50
+ # @return [String] previous_path the path to redirect back to in the case of an error.
51
+ def self.previous_path=(path)
52
+ @previous_path = path
53
+ end
54
+
55
+ private_class_method
56
+
57
+ # We decided to use a loose regex - this matches the different postcode formats, but doesn't validate against invalid letters and numbers, only their positions.
58
+ def self.clean_input(raw_input)
59
+ postcode = raw_input.gsub(/\s+/, '').upcase
60
+
61
+ postcode.match(/[A-Z]{1,2}[0-9][0-9A-Z]?\s?[0-9][A-Z]{2}/).nil? ? raise(PostcodeError, I18n.t('error.postcode_invalid').capitalize) : postcode
62
+ end
63
+
64
+ class PostcodeError < StandardError
65
+ def initialize(message)
66
+ super(message)
67
+ end
68
+ end
69
+ end
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,30 @@
1
+ # Namespace for Parliament::Request helper methods.
2
+ module Parliament
3
+ module Utils
4
+ module Helpers
5
+ module RequestHelper
6
+ # Takes a Parliament::Request and calls the #get method.
7
+ # Then maps the #value method on the resulting response.
8
+ #
9
+ # @param [Parliament::Request] request a built Parliament::Request object that can just be called with #get
10
+ #
11
+ # @return [Array<String>]
12
+ def self.process_available_letters(request)
13
+ response = request.get
14
+ response.map(&:value)
15
+ end
16
+
17
+ # Takes a Parliament::Request and a optional amount of filters and calls the #get method on on the request.
18
+ # Then calls Parliament::Response#filter with the filters as the parameters on the resulting response.
19
+ #
20
+ # @param [Parliament::Request] request a built Parliament::Request object that can just be called with #get
21
+ #
22
+ # @return [Parliament::Response]
23
+ def self.filter_response_data(request, *filters)
24
+ response = request.get
25
+ response.filter(*filters)
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,12 @@
1
+ module Parliament
2
+ module Utils
3
+ module Helpers
4
+ module TranslationHelper
5
+ require 'i18n'
6
+
7
+ I18n.load_path = ['config/locales/en.yml']
8
+ I18n.backend.load_translations
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,57 @@
1
+ # Namespace for helper methods to generate a vcard.
2
+ module Parliament
3
+ module Utils
4
+ module Helpers
5
+ module VCardHelper
6
+ # Generates a vcard for the given contact point.
7
+ #
8
+ # @param [Grom::Node] contact_point a Grom::Node with type: http://id.ukpds.org/schema/ContactPoint.
9
+ # @return [Vcard::Vcard] a vcard with person, postal address and contact details set.
10
+ def create_vcard(contact_point)
11
+ Vcard::Vcard::Maker.make2 do |maker|
12
+ maker.add_name do |name|
13
+ person_set(contact_point, name)
14
+ postal_address_set(contact_point, maker)
15
+ contacts_set(contact_point, maker)
16
+ end
17
+ end
18
+ end
19
+
20
+ # Sets the contact details of a vcard.
21
+ #
22
+ # @param [Grom::Node] contact_point a Grom::Node with type: http://id.ukpds.org/schema/ContactPoint.
23
+ # @param [Vcard::Vcard::Maker] maker a Vcard builder.
24
+ # @return [Vcard::Vcard::Maker] a Vcard maker with contact details set.
25
+ def contacts_set(contact_point, maker)
26
+ maker.add_email(contact_point.email) unless contact_point.email == ''
27
+ maker.add_tel(contact_point.phone_number) unless contact_point.phone_number == ''
28
+ maker.add_tel(contact_point.fax_number) { |f| f.location = 'fax' } unless contact_point.fax_number == ''
29
+ end
30
+
31
+ # Sets the postal address of a vcard.
32
+ #
33
+ # @param [Grom::Node] contact_point a Grom::Node with type: http://id.ukpds.org/schema/ContactPoint.
34
+ # @param [Vcard::Vcard::Maker] maker a Vcard builder.
35
+ # @return [Vcard::Vcard::Maker, Boolean] a Vcard maker with postal address set or false if the contact point has no postal addresses.
36
+ def postal_address_set(contact_point, maker)
37
+ return false if contact_point.postal_addresses.empty?
38
+ address = contact_point.postal_addresses.first.full_address
39
+ maker.add_addr do |addr|
40
+ addr.street = address unless address == ''
41
+ end
42
+ end
43
+
44
+ # Sets the person details of a vcard.
45
+ #
46
+ # @param [Grom::Node] contact_point a Grom::Node with type: http://id.ukpds.org/schema/ContactPoint.
47
+ # @param [Object] name a Vcard::Name.
48
+ # @return [Vcard::Vcard::Maker, Boolean] a Vcard maker with person details set or false if the contact point is not associated with a person.
49
+ def person_set(contact_point, name)
50
+ return false if contact_point.incumbency.nil? || contact_point.incumbency.member.nil?
51
+ name.given = contact_point.incumbency.member.given_name
52
+ name.family = contact_point.incumbency.member.family_name
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,18 @@
1
+ require_relative './helpers/application_helper'
2
+ require_relative './helpers/flag_helper'
3
+ require_relative './helpers/format_helper'
4
+ require_relative './helpers/houses_helper'
5
+ require_relative './helpers/parliament_helper'
6
+ require_relative './helpers/postcode_helper'
7
+ require_relative './helpers/request_helper'
8
+ require_relative './helpers/v_card_helper'
9
+
10
+ require 'parliament/grom/decorator'
11
+
12
+ module Parliament
13
+ module Utils
14
+ module Helpers
15
+
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,12 @@
1
+ require_relative './helpers/application_helper'
2
+
3
+ module Parliament
4
+ module Utils
5
+ class Railtie < Rails::Railtie
6
+ initializer 'parliament-utils.view_helpers' do
7
+ require 'parliament/utils/config/initializers'
8
+ ActionView::Base.send(:include, Helpers::ApplicationHelper)
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,19 @@
1
+ require 'bandiera/client'
2
+ require 'pugin/bandiera'
3
+
4
+ module Parliament
5
+ module Utils
6
+ module TestHelpers
7
+ module BandieraHelper
8
+ def self.load_rspec_config(config)
9
+ #Stubs Bandiera::Client methods enabled? and get_features_for_group to clean up logs
10
+ #and streamline cassettes
11
+ config.before(:each) do
12
+ allow(BANDIERA_CLIENT).to receive(:enabled?).and_return(false)
13
+ allow(Pugin::PuginBandieraClient::BANDIERA_CLIENT).to receive(:get_features_for_group).and_return({})
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,42 @@
1
+ module Parliament
2
+ module Utils
3
+ module TestHelpers
4
+ module RailsHelper
5
+ def self.load_rspec_config(config)
6
+ Dir[Rails.root.join('spec/support/**/*.rb')].each { |f| require f }
7
+ # # RSpec Rails can automatically mix in different behaviours to your tests
8
+ # # based on their file location, for example enabling you to call `get` and
9
+ # # `post` in specs under `spec/controllers`.
10
+ # #
11
+ # # You can disable this behaviour by removing the line below, and instead
12
+ # # explicitly tag your specs with their type, e.g.:
13
+ # #
14
+ # # RSpec.describe UsersController, :type => :controller do
15
+ # # # ...
16
+ # # end
17
+ # #
18
+ # # The different available types are documented in the features, such as in
19
+ # # https://relishapp.com/rspec/rspec-rails/docs
20
+ config.infer_spec_type_from_file_location!
21
+ #
22
+ # # Filter lines from Rails gems in backtraces.
23
+ config.filter_rails_from_backtrace!
24
+ # # arbitrary gems may also be filtered via:
25
+ # # config.filter_gems_from_backtrace("gem name")
26
+ config.include Parliament::Utils::Helpers::ApplicationHelper
27
+ #
28
+ # # Set Parliament::Utils::Helpers::HousesHelper#set_ids instance variables to nil after each spec.
29
+ # # Calling certain Parliament::Utils::Helpers::HousesHelper methods (e.g. Parliament::Utils::Helpers::HousesHelper#commons?) causes
30
+ # # Parliament::Utils::Helpers::HousesHelper#set_ids to be called which sets @commons_id and @lords_id.
31
+ # # Setting these to nil causes each spec that requires them to make another
32
+ # # Parliament::Utils::Helpers::ParliamentHelper request and generate a VCR cassette and stops any RSpec
33
+ # # ordering issues where they may or may not have been set by the previous spec.
34
+ config.after(:each) do
35
+ Parliament::Utils::Helpers::HousesHelper.instance_variable_set(:@commons_id, nil)
36
+ Parliament::Utils::Helpers::HousesHelper.instance_variable_set(:@lords_id, nil)
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,76 @@
1
+ module Parliament
2
+ module Utils
3
+ module TestHelpers
4
+ module RSpecHelper
5
+
6
+ def self.load_rspec_config(config)
7
+ # RSpec.configure do |config|
8
+ # rspec-expectations config goes here. You can use an alternate
9
+ # assertion/expectation library such as wrong or the stdlib/minitest
10
+ # assertions if you prefer.
11
+ config.expect_with :rspec do |expectations|
12
+ # This option will default to `true` in RSpec 4. It makes the `description`
13
+ # and `failure_message` of custom matchers include text for helper methods
14
+ # defined using `chain`, e.g.:
15
+ # be_bigger_than(2).and_smaller_than(4).description
16
+ # # => "be bigger than 2 and smaller than 4"
17
+ # ...rather than:
18
+ # # => "be bigger than 2"
19
+ expectations.include_chain_clauses_in_custom_matcher_descriptions = true
20
+ end
21
+
22
+ # rspec-mocks config goes here. You can use an alternate test double
23
+ # library (such as bogus or mocha) by changing the `mock_with` option here.
24
+ config.mock_with :rspec do |mocks|
25
+ # Prevents you from mocking or stubbing a method that does not exist on
26
+ # a real object. This is generally recommended, and will default to
27
+ # `true` in RSpec 4.
28
+ mocks.verify_partial_doubles = true
29
+ end
30
+
31
+ # These two settings work together to allow you to limit a spec run
32
+ # to individual examples or groups you care about by tagging them with
33
+ # `:focus` metadata. When nothing is tagged with `:focus`, all examples
34
+ # get run.
35
+ config.filter_run :focus
36
+ config.run_all_when_everything_filtered = true
37
+
38
+ # Disable RSpec exposing methods globally on `Module` and `main`
39
+ config.disable_monkey_patching!
40
+
41
+ # Many RSpec users commonly either run the entire suite or an individual
42
+ # file, and it's useful to allow more verbose output when running an
43
+ # individual spec file.
44
+ if config.files_to_run.one?
45
+ # Use the documentation formatter for detailed output,
46
+ # unless a formatter has already been configured
47
+ # (e.g. via a command-line flag).
48
+ config.default_formatter = 'doc'
49
+ end
50
+
51
+ # Print the 10 slowest examples and example groups at the
52
+ # end of the spec run, to help surface which specs are running
53
+ # particularly slow.
54
+ config.profile_examples = 10
55
+
56
+ config.expect_with :rspec do |c|
57
+ c.syntax = :expect
58
+ end
59
+
60
+ # Run specs in random order to surface order dependencies. If you find an
61
+ # order dependency and want to debug it, you can fix the order by providing
62
+ # the seed, which is printed after each run.
63
+ # --seed 1234
64
+ config.order = :random
65
+
66
+ # Seed global randomization in this process using the `--seed` CLI option.
67
+ # Setting this allows you to use `--seed` to deterministically reproduce
68
+ # test failures related to randomization by passing the same `--seed` value
69
+ # as the one that triggered the failure.
70
+ Kernel.srand config.seed
71
+ # end
72
+ end
73
+ end
74
+ end
75
+ end
76
+ end
@@ -0,0 +1,20 @@
1
+ module Parliament
2
+ module Utils
3
+ module TestHelpers
4
+ module SimpleCovHelper
5
+
6
+ require 'coveralls'
7
+ require 'simplecov'
8
+
9
+ def self.load_rspec_config(config)
10
+
11
+ SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter.new([
12
+ Coveralls::SimpleCov::Formatter,
13
+ SimpleCov::Formatter::HTMLFormatter
14
+ ])
15
+ SimpleCov.start
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,83 @@
1
+ module Parliament
2
+ module Utils
3
+ module TestHelpers
4
+ module VCRHelper
5
+ require 'vcr'
6
+
7
+ def self.load_rspec_config(config)
8
+
9
+ VCR.configure do |config|
10
+ config.cassette_library_dir = 'spec/fixtures/vcr_cassettes'
11
+ config.hook_into :webmock
12
+ config.configure_rspec_metadata!
13
+
14
+ config.default_cassette_options = {
15
+ # record: :new_episodes
16
+ record: :once
17
+ }
18
+
19
+ # Create a simple matcher which will 'filter' any request URIs on the fly
20
+ config.register_request_matcher :filtered_uri do |request_1, request_2|
21
+ parliament_match = request_1.uri.sub(ENV['PARLIAMENT_BASE_URL'], 'http://localhost:3030') == request_2.uri.sub(ENV['PARLIAMENT_BASE_URL'], 'http://localhost:3030')
22
+ bandiera_match = request_1.uri.sub(ENV['BANDIERA_URL'], 'http://localhost:5000') == request_2.uri.sub(ENV['BANDIERA_URL'], 'http://localhost:5000')
23
+
24
+ parliament_match || bandiera_match
25
+ end
26
+
27
+ config.default_cassette_options = { match_requests_on: [:method, :filtered_uri] }
28
+
29
+ # Dynamically filter our sensitive information
30
+ config.filter_sensitive_data('<AUTH_TOKEN>') { ENV['PARLIAMENT_AUTH_TOKEN'] }
31
+ config.filter_sensitive_data('http://localhost:3030') { ENV['PARLIAMENT_BASE_URL'] }
32
+ config.filter_sensitive_data('http://localhost:5000') { ENV['BANDIERA_URL'] }
33
+
34
+ # Dynamically filter n-triple data
35
+ config.before_record do |interaction|
36
+ should_ignore = ['_:node', '^^<http://www.w3.org/2001/XMLSchema#date>', '^^<http://www.w3.org/2001/XMLSchema#integer>']
37
+
38
+ # Check if content type header exists and if it includes application/n-triples
39
+ if interaction.response.headers['Content-Type'] && interaction.response.headers['Content-Type'].include?('application/n-triples')
40
+ # Split our data by line
41
+ lines = interaction.response.body.split("\n")
42
+
43
+ # How many times have we seen a predicate?
44
+ predicate_occurrances = Hash.new(1)
45
+
46
+ # Iterate over each line, decide if we need to filter it.
47
+ lines.each do |line|
48
+ next if should_ignore.any? { |condition| line.include?(condition) }
49
+ next unless line.include?('"')
50
+
51
+ # require 'pry'; binding.pry
52
+ # Split on '> <' to get a Subject and Predicate+Object split
53
+ subject, predicate_and_object = line.split('> <')
54
+
55
+ # Get the actual object
56
+ predicate, object = predicate_and_object.split('> "')
57
+
58
+ # Get the last part of a predicate URI
59
+ predicate_type = predicate.split('/').last
60
+
61
+ # Get the number of times we've seen this predicate
62
+ occurrance = predicate_occurrances[predicate_type]
63
+ predicate_occurrances[predicate_type] = predicate_occurrances[predicate_type] + 1
64
+
65
+ # Try and build a new object value based on the predicate
66
+ new_object = "#{predicate_type} - #{occurrance}\""
67
+
68
+ # Replace the object value
69
+ index = object.index('"')
70
+
71
+ object[0..index] = new_object if index
72
+
73
+ new_line = "#{subject}> <#{predicate}> \"#{object}"
74
+ config.filter_sensitive_data(new_line) { line }
75
+ end
76
+ end
77
+ end
78
+ end
79
+ end
80
+ end
81
+ end
82
+ end
83
+ end
@@ -0,0 +1,13 @@
1
+ module Parliament
2
+ module Utils
3
+ module TestHelpers
4
+ module WebmockHelper
5
+ def self.load_rspec_config(config)
6
+ require 'webmock/rspec'
7
+
8
+ WebMock.disable_net_connect!(allow_localhost: true)
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,19 @@
1
+ require_relative './test_helpers/rails_helper' if defined?(::Rails)
2
+ require_relative './test_helpers/rspec_helper'
3
+ require_relative './test_helpers/simplecov_helper'
4
+ require_relative './test_helpers/vcr_helper'
5
+ require_relative './test_helpers/webmock_helper'
6
+ require_relative './test_helpers/bandiera_helper'
7
+
8
+ module Parliament
9
+ module Utils
10
+ module TestHelpers
11
+ include Parliament::Utils::TestHelpers::RailsHelper if defined?(::Rails)
12
+ include Parliament::Utils::TestHelpers::RSpecHelper
13
+ include Parliament::Utils::TestHelpers::SimpleCovHelper
14
+ include Parliament::Utils::TestHelpers::VCRHelper
15
+ include Parliament::Utils::TestHelpers::WebmockHelper
16
+ include Parliament::Utils::TestHelpers::BandieraHelper
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,5 @@
1
+ module Parliament
2
+ module Utils
3
+ VERSION = '0.1.0'.freeze
4
+ end
5
+ end
@@ -0,0 +1,10 @@
1
+ require 'parliament/utils/version'
2
+ require 'parliament/utils/helpers'
3
+ require 'parliament/utils/config/initializers/bandiera'
4
+ require 'parliament/utils/test_helpers'
5
+ require 'parliament/utils/railtie' if defined?(Rails)
6
+
7
+ module Parliament
8
+ module Utils
9
+ end
10
+ end
data/log/test.log ADDED
File without changes