overlay 0.0.1 → 0.0.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ba967f2dd55b1ad9eca6f9d8e989fd51714d60cc
4
- data.tar.gz: 65f2af53ac1dd037e00c4f472c5e6576bc20a2dd
3
+ metadata.gz: b1ed5b5ecabe7f6db32dcc1d22a27f014e3b7148
4
+ data.tar.gz: f298741a03ee2625883981d073b4f93045de10d7
5
5
  SHA512:
6
- metadata.gz: 378ccb525ead089c6e5f71d0e26f0d194e04267a6ea262fe64e74144c5157ab87f5f95a632a4f05a625956206db1cb9af73a88a298c3797a097edac3b2cd2c46
7
- data.tar.gz: 6d5ddd6993a427f4f6e745eac1c8f6458f0b8c209e31416f844a6109aa0b37ba7c543764e99788e7c34d62dd25d2d59b464906be3f6df8082eb9a79d04a6d0b4
6
+ metadata.gz: f6ae58c5c453d6cb0b3d22a24d0f44c5fb3af5305bae5ea1fb6a6394ed829b67aa08be5077b7093d8a8bf44092ae42cec374ef4579af6fe5f3a4063c5015d47e
7
+ data.tar.gz: 4c2145676a72cb37da30019f20ba7925a0dd7880d1d75936a56af2f4f4f5b6644f5424472b71fe5bcb9a9166d656efcb2cb05ffb060c7c3d27e24ab84bee3b1a
data/lib/overlay.rb CHANGED
@@ -1,4 +1,6 @@
1
1
  require "overlay/engine"
2
+ require "overlay/configuration"
3
+ require "overlay/git"
2
4
 
3
5
  module Overlay
4
6
  end
@@ -0,0 +1,33 @@
1
+ module Overlay
2
+ VALID_OPTIONS_KEYS = [
3
+ :site,
4
+ :endpoint,
5
+ :repo,
6
+ :user,
7
+ :auth,
8
+ :repositories,
9
+ :hostname,
10
+ :host_port
11
+ ].freeze
12
+
13
+ class << self
14
+ attr_accessor :configuration
15
+ end
16
+
17
+ def self.configure
18
+ self.configuration ||= Configuration.new
19
+ yield(configuration)
20
+ end
21
+
22
+ class Configuration
23
+ attr_accessor *VALID_OPTIONS_KEYS
24
+
25
+ def initialize
26
+ @site = 'https://github.com'
27
+ @endpoint = 'https://api.github.com'
28
+ @repositories = Set.new
29
+ end
30
+ end
31
+
32
+ GithubRepo = Struct.new(:name, :repo, :branch)
33
+ end
@@ -0,0 +1,111 @@
1
+ require 'github_api'
2
+ require 'fileutils'
3
+ require 'socket'
4
+
5
+ module Overlay
6
+ class Github
7
+ include Overlay::Engine.routes.url_helpers
8
+ # Cycle through all configured repositories and overlay
9
+ #
10
+ def self.process_overlays
11
+ # If we aren't running in Rails, bail out. This may be some
12
+ # other request such as rake routes loading the environment
13
+ #
14
+ return unless defined?(Rails::Server)
15
+
16
+ # Configure github api
17
+ configure
18
+
19
+ Overlay.configuration.repositories.each do |repo_config|
20
+ break unless repo_config.class == GithubRepo
21
+
22
+ # Validate repository config
23
+ raise 'Respository config missing user' if (!repo_config[:user] || repo_config[:user].nil?)
24
+ raise 'Respository config missing repo' if (!repo_config[:repo] || repo_config[:repo].nil?)
25
+
26
+ branch = repo_config[:branch] || 'master'
27
+
28
+ register_web_hook(repo_config[:user], repo_config[:repo])
29
+
30
+ overlay_repo(repo_config[:user], repo_config[:repo], branch)
31
+ end
32
+ end
33
+
34
+ # Register our listener on the repo
35
+ #
36
+ def self.register_web_hook user, repo
37
+ # Make sure our routes are loaded
38
+ Rails.application.reload_routes!
39
+
40
+ # Build hook url
41
+ host = Overlay.configuration.hostname || Socket.gethostname
42
+ port = Overlay.configuration.host_port || Rails::Server.new.options[:Port]
43
+ uri = Overlay::Engine.routes.url_for({:controller=>"github_overlays/webhooks", :action=>"update", :host => host, :port => port})
44
+
45
+ # Retrieve current web hooks
46
+ current_hooks = github_repo.hooks.list(user, repo).response.body
47
+ if current_hooks.find {|hook| hook.config.url == uri}.nil?
48
+ #register hook
49
+ github_repo.hooks.create(user, repo, name: 'web', active: true, config: {:url => uri, :content_type => 'json'})
50
+ end
51
+ end
52
+
53
+ def self.overlay_repo user, repo, branch
54
+ # Get our root entries
55
+ #
56
+ root_entries = github_repo.contents.get(user, repo, '/', ref: branch).response.body
57
+
58
+ # We aren't pulling anything out of root. Cycle through directories and overlay
59
+ #
60
+ root_entries.each do |entry|
61
+ if entry.type == 'dir'
62
+ overlay_directory(entry.path, user, repo, branch)
63
+ end
64
+ end
65
+ end
66
+
67
+ def self.overlay_directory path, user, repo, branch
68
+ FileUtils.mkdir_p "#{Rails.application.root}/#{path}"
69
+ directory_entries = github_repo.contents.get(user, repo, path, ref: branch).response.body
70
+
71
+ directory_entries.each do |entry|
72
+ if entry.type == 'dir'
73
+ overlay_directory(entry.path, user, repo, branch)
74
+ elsif entry.type == 'file'
75
+ clone_file(entry.path, user, repo, branch)
76
+ end
77
+ end
78
+ end
79
+
80
+ def self.clone_file path, user, repo, branch
81
+ file = github_repo.contents.get(user, repo, path, ref: branch).response.body.content
82
+ File.open("#{Rails.application.root}/#{path}", "wb") { |f| f.write(Base64.decode64(file)) }
83
+ end
84
+
85
+ private
86
+
87
+ def self.github_repo
88
+ @@github ||= Github::Repos.new
89
+ end
90
+
91
+ def self.config
92
+ @@overlay_config ||= Rails.application.config.github_overlays
93
+ end
94
+
95
+ # Configure the github api
96
+ def self.configure
97
+ overlay_config = Overlay.configuration
98
+
99
+ # Validate required config
100
+ raise 'Configuration github_overlays.basic_auth not set' if (!overlay_config.auth || overlay_config.auth.nil?)
101
+
102
+ Github.configure do |github_config|
103
+ github_config.endpoint = overlay_config.endpoint if overlay_config.endpoint
104
+ github_config.site = overlay_config.site if overlay_config.site
105
+ github_config.basic_auth = overlay_config.auth
106
+ github_config.adapter = :net_http
107
+ github_config.ssl = {:verify => false}
108
+ end
109
+ end
110
+ end
111
+ end
@@ -1,3 +1,3 @@
1
1
  module Overlay
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: overlay
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Steve Saarinen
@@ -14,16 +14,30 @@ dependencies:
14
14
  name: rails
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - '>='
18
18
  - !ruby/object:Gem::Version
19
- version: 4.0.0.rc1
19
+ version: '0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ~>
24
+ - - '>='
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: github_api
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
25
32
  - !ruby/object:Gem::Version
26
- version: 4.0.0.rc1
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: rspec-rails
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -51,7 +65,9 @@ files:
51
65
  - app/helpers/overlay/application_helper.rb
52
66
  - app/views/layouts/overlay/application.html.erb
53
67
  - config/routes.rb
68
+ - lib/overlay/configuration.rb
54
69
  - lib/overlay/engine.rb
70
+ - lib/overlay/git.rb
55
71
  - lib/overlay/version.rb
56
72
  - lib/overlay.rb
57
73
  - lib/tasks/overlay_tasks.rake