pact_broker 0.0.1

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 (48) hide show
  1. data/.gitignore +26 -0
  2. data/.rspec +2 -0
  3. data/CHANGELOG.md +7 -0
  4. data/Gemfile +6 -0
  5. data/Gemfile.lock +117 -0
  6. data/README.md +94 -0
  7. data/Rakefile +41 -0
  8. data/config.ru +10 -0
  9. data/config/boot.rb +17 -0
  10. data/config/database.yml +13 -0
  11. data/db/migrations/01_create_pacticipant_table.rb +9 -0
  12. data/db/migrations/02_create_versions_table.rb +14 -0
  13. data/db/migrations/03_create_pacts_table.rb +12 -0
  14. data/db/migrations/04_create_tags_table.rb +10 -0
  15. data/db/pact_broker_database.sqlite3 +0 -0
  16. data/lib/pact_broker.rb +5 -0
  17. data/lib/pact_broker/api.rb +18 -0
  18. data/lib/pact_broker/api/base_api.rb +40 -0
  19. data/lib/pact_broker/api/index_api.rb +23 -0
  20. data/lib/pact_broker/api/pact_api.rb +33 -0
  21. data/lib/pact_broker/api/pacticipant_api.rb +34 -0
  22. data/lib/pact_broker/db.rb +45 -0
  23. data/lib/pact_broker/logging.rb +26 -0
  24. data/lib/pact_broker/models.rb +5 -0
  25. data/lib/pact_broker/models/pact.rb +22 -0
  26. data/lib/pact_broker/models/pacticipant.rb +16 -0
  27. data/lib/pact_broker/models/tag.rb +10 -0
  28. data/lib/pact_broker/models/version.rb +16 -0
  29. data/lib/pact_broker/repositories.rb +22 -0
  30. data/lib/pact_broker/repositories/pact_repository.rb +38 -0
  31. data/lib/pact_broker/repositories/pacticipant_repository.rb +30 -0
  32. data/lib/pact_broker/repositories/version_repository.rb +27 -0
  33. data/lib/pact_broker/services.rb +14 -0
  34. data/lib/pact_broker/services/pact_service.rb +39 -0
  35. data/lib/pact_broker/services/pacticipant_service.rb +31 -0
  36. data/lib/pact_broker/services/version_service.rb +15 -0
  37. data/lib/pact_broker/tasks.rb +1 -0
  38. data/lib/pact_broker/tasks/migration_task.rb +41 -0
  39. data/lib/pact_broker/version.rb +3 -0
  40. data/pact_broker.gemspec +39 -0
  41. data/pact_broker_client-pact_broker.json +133 -0
  42. data/spec/service_consumers/pact_helper.rb +39 -0
  43. data/spec/service_consumers/provider_states_for_pact_broker_client.rb +118 -0
  44. data/spec/spec_helper.rb +3 -0
  45. data/tasks/db.rake +23 -0
  46. data/tasks/pact.rake +12 -0
  47. data/tasks/rspec.rake +14 -0
  48. metadata +343 -0
data/.gitignore ADDED
@@ -0,0 +1,26 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ coverage
6
+ InstalledFiles
7
+ lib/bundler/man
8
+ log
9
+ pkg
10
+ rdoc
11
+ spec/reports
12
+ test/tmp
13
+ test/version_tmp
14
+ tmp
15
+ reports
16
+
17
+ # YARD artifacts
18
+ .yardoc
19
+ _yardoc
20
+ doc/
21
+ .bin
22
+
23
+ # Editor files
24
+ *.sublime*
25
+ *.swp
26
+ .idea
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --format documentation
data/CHANGELOG.md ADDED
@@ -0,0 +1,7 @@
1
+ Do this to generate your change history
2
+
3
+ $ git log --date=relative --pretty=format:' * %h - %s (%an, %ad)' 'package/pact-broker-0.0.PRODVERSION'..'package/pact-broker-0.0.NEWVERSION'
4
+
5
+ #### 0.0.NEWVERSION (YYYY-MM-DD HH:00)
6
+
7
+ * Your changes go here
data/Gemfile ADDED
@@ -0,0 +1,6 @@
1
+ source 'https://rubygems.org'
2
+ #source 'http://rea-rubygems/'
3
+
4
+ gemspec
5
+
6
+ gem 'pact', :path => '../pact'
data/Gemfile.lock ADDED
@@ -0,0 +1,117 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ pact_broker (0.0.1)
5
+ httparty
6
+ json
7
+ sequel
8
+ sinatra
9
+ sinatra-contrib
10
+ sinatra-param
11
+ sqlite3
12
+
13
+ PATH
14
+ remote: ../pact
15
+ specs:
16
+ pact (1.0.20)
17
+ awesome_print (~> 1.1.0)
18
+ find_a_port (~> 1.0.1)
19
+ json
20
+ rack-test (~> 0.6.2)
21
+ randexp (~> 0.1.7)
22
+ rspec (~> 2.12)
23
+ thin
24
+ thor
25
+
26
+ GEM
27
+ remote: https://rubygems.org/
28
+ specs:
29
+ awesome_print (1.1.0)
30
+ backports (3.3.5)
31
+ builder (3.2.2)
32
+ ci_reporter (1.9.0)
33
+ builder (>= 2.1.2)
34
+ coderay (1.0.9)
35
+ columnize (0.3.6)
36
+ daemons (1.1.9)
37
+ debugger (1.6.2)
38
+ columnize (>= 0.3.1)
39
+ debugger-linecache (~> 1.2.0)
40
+ debugger-ruby_core_source (~> 1.2.3)
41
+ debugger-linecache (1.2.0)
42
+ debugger-ruby_core_source (1.2.3)
43
+ diff-lcs (1.2.4)
44
+ eventmachine (1.0.3)
45
+ fakefs (0.4.3)
46
+ find_a_port (1.0.1)
47
+ httparty (0.12.0)
48
+ json (~> 1.8)
49
+ multi_xml (>= 0.5.2)
50
+ json (1.8.1)
51
+ method_source (0.8.2)
52
+ multi_json (1.8.2)
53
+ multi_xml (0.5.5)
54
+ pry (0.9.12.2)
55
+ coderay (~> 1.0.5)
56
+ method_source (~> 0.8)
57
+ slop (~> 3.4)
58
+ rack (1.5.2)
59
+ rack-protection (1.5.1)
60
+ rack
61
+ rack-test (0.6.2)
62
+ rack (>= 1.0)
63
+ rake (10.0.4)
64
+ randexp (0.1.7)
65
+ rspec (2.14.1)
66
+ rspec-core (~> 2.14.0)
67
+ rspec-expectations (~> 2.14.0)
68
+ rspec-mocks (~> 2.14.0)
69
+ rspec-core (2.14.6)
70
+ rspec-expectations (2.14.3)
71
+ diff-lcs (>= 1.1.3, < 2.0)
72
+ rspec-fire (1.2.0)
73
+ rspec (~> 2.11)
74
+ rspec-mocks (2.14.4)
75
+ sequel (4.3.0)
76
+ shotgun (0.9)
77
+ rack (>= 1.0)
78
+ simplecov (0.7.1)
79
+ multi_json (~> 1.0)
80
+ simplecov-html (~> 0.7.1)
81
+ simplecov-html (0.7.1)
82
+ sinatra (1.4.4)
83
+ rack (~> 1.4)
84
+ rack-protection (~> 1.4)
85
+ tilt (~> 1.3, >= 1.3.4)
86
+ sinatra-contrib (1.4.1)
87
+ backports (>= 2.0)
88
+ multi_json
89
+ rack-protection
90
+ rack-test
91
+ sinatra (~> 1.4.0)
92
+ tilt (~> 1.3)
93
+ sinatra-param (0.1.3)
94
+ sinatra (~> 1.3)
95
+ slop (3.4.6)
96
+ sqlite3 (1.3.8)
97
+ thin (1.6.0)
98
+ daemons (>= 1.0.9)
99
+ eventmachine (>= 1.0.0)
100
+ rack (>= 1.5.0)
101
+ thor (0.18.1)
102
+ tilt (1.4.1)
103
+
104
+ PLATFORMS
105
+ ruby
106
+
107
+ DEPENDENCIES
108
+ ci_reporter
109
+ debugger
110
+ fakefs (~> 0.4)
111
+ pact!
112
+ pact_broker!
113
+ pry
114
+ rake (~> 10.0.3)
115
+ rspec-fire
116
+ shotgun
117
+ simplecov
data/README.md ADDED
@@ -0,0 +1,94 @@
1
+ # PactBroker
2
+
3
+ Add a detailed description of the new service here before your first commit.
4
+
5
+ Information here will be consumed by the Treasure Map (via the Rumour Mill). Therefore, please retain the existing formatting on this page, importantly:
6
+
7
+ * The service name at the top of the page
8
+ * The location of this description text (between service name and Custodian(s)
9
+ * Component Custodian(s)
10
+
11
+ Other headings can be deleted if they are not relevant.
12
+
13
+ **NOTE: The following is provided for convenience. Please check it carefully before your first commit.**
14
+
15
+ ## Component Custodian(s)
16
+
17
+ Enter Custodian(s) here
18
+
19
+ ## Development
20
+
21
+ Enter any developer instructions here.
22
+
23
+ ### Database setup
24
+
25
+ Instructions to set up the database for local testing.
26
+
27
+ Then run migrations:
28
+
29
+ $ bundle exec rake db:migrate
30
+
31
+ ### Testing
32
+
33
+ $ bundle exec rake
34
+
35
+ ### Running
36
+
37
+ Instructions to run the service locally.
38
+
39
+ ### Debugging
40
+
41
+ Any specific debugging tools built in to the service (health check is assumed so don't include that).
42
+
43
+ ### Build
44
+
45
+ **edit the below and add the correct endpoint**
46
+
47
+ [Standalone (Bamboo)](http://master.cd.vpc.realestate.com.au/browse/YOUR_NEW_SERVICE_BUILD)
48
+
49
+ ## Deployment
50
+
51
+ Deployment scripts have been generated using [biq-deploy](https://git.realestate.com.au/business-systems/biq-deploy).
52
+
53
+ #### EC2 environments
54
+
55
+ Before deploying to EC2 environments, you may wish to check that the build you wish to deploy has been indexed.
56
+
57
+ 1. Log in into the agent unix box:
58
+
59
+ $ rea-ec2-ssh agent-01.biq
60
+
61
+ 2. See the list of versions indexed and verify the expected version in the list:
62
+
63
+ $ yum list --showduplicates --enablerepo=rea-el6-dev pact_broker
64
+
65
+ You can get up an running with these scripts like so (from within the pact_broker project on your local machine):
66
+
67
+ $ cd deploy
68
+ $ bundle
69
+ $ bundle exec bin/pact-broker-deploy-ec2 --help
70
+
71
+ When deploying to an EC2 environment for the first time, you must create a node for the app:
72
+
73
+ $ bundle exec bin/pact-broker-deploy-ec2 -t create -s $YOUR_SUBDOMAIN -p dev
74
+
75
+ The first time the service is deployed, a database must be created. After adding the [required config values](https://git.realestate.com.au/business-systems/pact_broker/blob/master/lib/pact_broker/environment_variables.rb) to the
76
+ environment's config-svc, you can run the db provision task:
77
+
78
+ $ bundle exec bin/pact-broker-deploy-ec2 -t db_provision -s $YOUR_SUBDOMAIN
79
+
80
+ Then you are free to migrate the db from then on:
81
+
82
+ $ bundle exec bin/pact-broker-deploy-ec2 -t db_migrate -s $YOUR_SUBDOMAIN
83
+
84
+ To deploy to a test environment (eg biq-qa1):
85
+
86
+ $ bundle exec bin/pact-broker-deploy-ec2 -t deploy -s biq-qa1 -p dev -y
87
+
88
+ #### Production
89
+
90
+ Refer to the [production deployment readme](https://git.realestate.com.au/business-systems/pact_broker/blob/master/README-ProdDeploy.md).
91
+
92
+ ### Architecture
93
+
94
+ Any important architectural information.
data/Rakefile ADDED
@@ -0,0 +1,41 @@
1
+ # encoding: utf-8
2
+
3
+ require 'bundler/gem_helper'
4
+ module Bundler
5
+ class GemHelper
6
+ def install
7
+ desc "Build #{name}-#{version}.gem into the pkg directory"
8
+ task 'build' do
9
+ build_gem
10
+ end
11
+
12
+ desc "Build and install #{name}-#{version}.gem into system gems"
13
+ task 'install' do
14
+ install_gem
15
+ end
16
+
17
+ GemHelper.instance = self
18
+ end
19
+ end
20
+ end
21
+ Bundler::GemHelper.install_tasks
22
+
23
+ require 'rubygems'
24
+ require 'bundler'
25
+ begin
26
+ Bundler.setup(:default, :development)
27
+ rescue Bundler::BundlerError => e
28
+ $stderr.puts e.message
29
+ $stderr.puts "Run `bundle install` to install missing gems"
30
+ exit e.status_code
31
+ end
32
+ require 'rake'
33
+
34
+
35
+ FileList['lib/tasks/**/*.rake'].each { |task| load "#{Dir.pwd}/#{task}" }
36
+ FileList['tasks/**/*.rake'].each { |task| load "#{Dir.pwd}/#{task}" }
37
+
38
+ task :default => [:spec, 'pact:verify']
39
+
40
+ require File.join(File.dirname(__FILE__), 'config/boot')
41
+
data/config.ru ADDED
@@ -0,0 +1,10 @@
1
+ require File.dirname(__FILE__) + '/config/boot'
2
+ require 'pact_broker/db'
3
+ require 'pact_broker/api'
4
+
5
+
6
+ use Rack::Static, root: 'public', urls: ['/favicon.ico']
7
+
8
+ run Rack::URLMap.new(
9
+ '/' => PactBroker::API,
10
+ )
data/config/boot.rb ADDED
@@ -0,0 +1,17 @@
1
+ # Remember everything in this file will be loaded by Rake, don't make it too heavy...
2
+
3
+ $LOAD_PATH << File.expand_path(File.dirname(__FILE__) + '/../lib')
4
+
5
+ # Default environment
6
+ # Be aware that rake loads this boot file, so any attempt to change RACK_ENV by
7
+ # setting ENV['RACK_ENV'] after that (eg. in spec_helper) will not work.
8
+ RACK_ENV = ENV['RACK_ENV'] || 'development' unless defined? RACK_ENV
9
+
10
+ # Set up gems listed in the Gemfile.
11
+ ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__)
12
+ if File.exists?(ENV['BUNDLE_GEMFILE'])
13
+ require 'bundler/setup'
14
+ Bundler.require
15
+ end
16
+
17
+ require 'pact_broker'
@@ -0,0 +1,13 @@
1
+ default: &default
2
+ adapter: sqlite
3
+ database: db/pact_broker_database.sqlite3
4
+
5
+ test:
6
+ <<: *default
7
+ database: tmp/pact_broker_database_test.sqlite3
8
+
9
+ development:
10
+ <<: *default
11
+
12
+ production:
13
+ <<: *default
@@ -0,0 +1,9 @@
1
+ Sequel.migration do
2
+ change do
3
+ create_table(:pacticipants) do
4
+ primary_key :id
5
+ String :name, :unique => true
6
+ String :repository_url
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,14 @@
1
+ Sequel.migration do
2
+
3
+ change do
4
+ create_table(:versions) do
5
+ primary_key :id
6
+ String :number
7
+ String :repository_ref
8
+ foreign_key :pacticipant_id, :pacticipants, :null=>false
9
+ index [:pacticipant_id, :number], :unique=>true
10
+ end
11
+ end
12
+
13
+ end
14
+
@@ -0,0 +1,12 @@
1
+ Sequel.migration do
2
+ change do
3
+ create_table(:pacts) do
4
+ primary_key :id
5
+ String :json_content, :text=>true
6
+ foreign_key :version_id, :versions, null: false
7
+ foreign_key :provider_id, :pacticipants, null: false
8
+ index [:version_id, :provider_id], :unique=>true
9
+ end
10
+ end
11
+ end
12
+
@@ -0,0 +1,10 @@
1
+ Sequel.migration do
2
+ change do
3
+ create_table(:tags) do
4
+ String :name
5
+ foreign_key :version_id, :versions
6
+ primary_key [:version_id, :name], :name=>:tags_pk
7
+ end
8
+ end
9
+ end
10
+
Binary file
@@ -0,0 +1,5 @@
1
+ require 'pact_broker/version'
2
+
3
+ module PactBroker
4
+
5
+ end
@@ -0,0 +1,18 @@
1
+ require 'sinatra'
2
+
3
+ require_relative 'api/index_api'
4
+ require_relative 'api/pacticipant_api'
5
+ require_relative 'api/pact_api'
6
+
7
+ module PactBroker
8
+ class API < Sinatra::Base
9
+ # content_type :json, 'application/json'
10
+ # content_type :xml, 'text/xml'
11
+ # default_format :json
12
+
13
+ use Api::IndexApi
14
+ use Api::PacticipantApi
15
+ use Api::PactApi
16
+
17
+ end
18
+ end
@@ -0,0 +1,40 @@
1
+ require 'pact_broker/logging'
2
+ require 'pact_broker/repositories'
3
+ require 'sequel'
4
+ require 'sinatra'
5
+ require 'sinatra/json'
6
+ require 'sinatra/namespace'
7
+ require 'sinatra/param'
8
+ require 'pact_broker/models'
9
+ require 'pact_broker/services'
10
+
11
+ module PactBroker
12
+
13
+ module Api
14
+
15
+ class BaseApi < Sinatra::Base
16
+
17
+ helpers do
18
+ include PactBroker::Logging
19
+ include PactBroker::Services
20
+ end
21
+
22
+ set :raise_errors, false
23
+ set :show_exceptions, false
24
+
25
+
26
+ error do
27
+ e = env['sinatra.error']
28
+ logger.error e
29
+ content_type :json
30
+ status 500
31
+ {:message => e.message, :backtrace => e.backtrace }.to_json
32
+ end
33
+
34
+ helpers Sinatra::JSON
35
+ helpers Sinatra::Param
36
+ register Sinatra::Namespace
37
+
38
+ end
39
+ end
40
+ end