minimart 1.1.3 → 1.1.6

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- MTlhN2I5YzFkZWJmZGQwNTgxMjZlYzdlNDZkNjRhMDk4NTVmMjdlYQ==
4
+ MjlkNTAzOTQ2YjM4YzNjNGQwNTE0NmE1NTY3MzMzZjlmYTdiZWJmOQ==
5
5
  data.tar.gz: !binary |-
6
- OWY3MzQ4ZDk5MTdlMjM0ZGRmZTNiZGFhYmI5MzIzZGVhMTA3NTdlYw==
6
+ NzE5OTFlZDI3MjdkZmU2OGRlNjczZDZhN2YxNWQ0ZTYzNzk2ZDI5MQ==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- ZGMyYzAzZTUyZDA3ZGRlNTZkNjZkZDc2YzAxNzAyYTNiYmU3NDIyZmI5MWEx
10
- NGM3ZjcxNWE5ZmRjOTE2YjEzOWYyZjU1NTAyYjUxNWJmMzI3ZjJlN2ViZmRj
11
- ZDI0ZWQ3YjA2NzZkMzk0Nzk3NDQxYWMyMTJmZDcxYmEwZGZjNDk=
9
+ ZmIzZGQ0YzA4MWI2MTQxMGZhMDk2NjMzMjk1YzgxMTE5NDAyMDk2OGRiMDVm
10
+ Y2IzNWExN2Q5ZTJlYzY3YjU2MTE5ZWNkM2VlMDVjOGJjMDAyYmEzZTI4N2Mw
11
+ OTZhYWI0NDQzMmRjM2FlYWQ2ZjVkYWZmOTlhYjlmYzNkYTg2NzE=
12
12
  data.tar.gz: !binary |-
13
- ZTI3MGY1MDk2NWQ5MDJiNDI0MWI1YmM1NjQzODU3YjA2YjkyZGJkNmYzNzZk
14
- NTRlNjM3YTcxMDk0ZjEzZDM4YzYwMDkzNDMyNDljNWFjYmE3NTYxM2Y2NmRm
15
- NTRjODllOGJlNWQ5NTQ3OGJiMTMzZmIzMzE3OGYwNzZhNzNhMWY=
13
+ NjQ3ODcxNjY0Y2EwOWIwYjNhNTgwMGNiOThlMjE1NWVjMDQ5OGU3ODhjZGEz
14
+ ZjZhNDg5MTY3YTU1YzQzNWQxNDNlMzM5ZmI5OGVlMDcyOTQwZThlN2ZiZjRh
15
+ YTY5YjY1NzZiNWFiZmQyODU3ZWQyODBmNDFkM2VjZTZjMTRmYmQ=
data/.travis.yml CHANGED
@@ -3,6 +3,9 @@ cache: bundler
3
3
  rvm:
4
4
  - 2.2.3
5
5
  - 2.1.7
6
+ notifications:
7
+ flowdock:
8
+ secure: s2EpKpFFZJL51GChkIM/B8CpoiAvj56aYp7iSfKcD5aZvdBRssXXt9i3t39TA/hD8NkWfM07eVbhL3tGAv2GcXhTOlXZSoljzGdzFdGROZZd4asd1pLK8VuJTQrEKPDfKp/+XsIfbfOrTFf19qhBAfk5A0TRUXVMITiMkVIo1D4=
6
9
  deploy:
7
10
  provider: rubygems
8
11
  api_key:
@@ -19,7 +19,7 @@ module Minimart
19
19
  new (Ridley::Chef::Cookbook.from_path(path))
20
20
  end
21
21
 
22
- # @param [Ridley::Chef::Cookbok] raw_cookbook
22
+ # @param [Ridley::Chef::Cookbook] raw_cookbook
23
23
  def initialize(raw_cookbook)
24
24
  @raw_cookbook = raw_cookbook
25
25
  end
@@ -54,6 +54,18 @@ module Minimart
54
54
  metadata.maintainer
55
55
  end
56
56
 
57
+ # Get the source url of the cookbook
58
+ # @return [String]
59
+ def source_url
60
+ metadata.source_url
61
+ end
62
+
63
+ # Get the issues url of the cookbook
64
+ # @return [String]
65
+ def issues_url
66
+ metadata.issues_url
67
+ end
68
+
57
69
  # Get the path to the cookbook on the file system
58
70
  # @return [String]
59
71
  def path
@@ -112,7 +124,9 @@ module Minimart
112
124
  url: cookbook_path(self),
113
125
  downloaded_at: downloaded_at,
114
126
  download_date: download_date,
115
- platforms: normalized_platforms
127
+ platforms: normalized_platforms,
128
+ source_url: source_url,
129
+ issues_url: issues_url
116
130
  }
117
131
  end
118
132
 
@@ -1,3 +1,4 @@
1
+ require 'ridley'
1
2
  module Minimart
2
3
  module Mirror
3
4
 
@@ -33,10 +34,16 @@ module Minimart
33
34
  # precedence over information found elsewhere.
34
35
  def install_cookbooks_with_explicit_location
35
36
  inventory_requirements.each_with_explicit_location do |requirement|
36
- requirement.fetch_cookbook do |cookbook|
37
- validate_cookbook_against_local_store(cookbook, requirement)
38
- add_artifact_to_graph(cookbook)
39
- add_cookbook_to_local_store(cookbook.path, requirement.to_hash)
37
+ begin
38
+ requirement.fetch_cookbook do |cookbook|
39
+ validate_cookbook_against_local_store(cookbook, requirement)
40
+ add_artifact_to_graph(cookbook)
41
+ add_cookbook_to_local_store(cookbook.path, requirement.to_hash)
42
+ end
43
+ rescue Ridley::Errors::MissingNameAttribute
44
+ #handle Ridley::Errors::MissingNameAttribute and other cookbook specific errors by ignoring them.
45
+ #hopefuly the next version will be valid. eg. https://git.corp.adobe.com/EchoSignCommunity/apt/blob/1.5.0/metadata.rb
46
+ next
40
47
  end
41
48
  end
42
49
  end
@@ -1,3 +1,3 @@
1
1
  module Minimart
2
- VERSION = "1.1.3"
2
+ VERSION = "1.1.6"
3
3
  end
@@ -1,3 +1,7 @@
1
+ require 'sprockets'
2
+ require 'sass'
3
+ require 'uglifier'
4
+
1
5
  require 'minimart/web/dashboard_generator'
2
6
  require 'minimart/web/cookbook_show_page_generator'
3
7
 
@@ -8,11 +12,7 @@ module Minimart
8
12
  class HtmlGenerator
9
13
  include Minimart::Web::TemplateHelper
10
14
 
11
- # @return [String] the directory to put any generated HTML in
12
- attr_reader :web_directory
13
-
14
- # @return [Minimart::Web::Cookbooks] the set of cookbooks to generate HTML for
15
- attr_reader :cookbooks
15
+ attr_reader :web_directory, :cookbooks
16
16
 
17
17
  # @param [Hash] opts
18
18
  # @option opts [String] :web_directory The directory to put any generated HTML in
@@ -24,15 +24,39 @@ module Minimart
24
24
 
25
25
  # Generate any HTML!
26
26
  def generate
27
- copy_assets
27
+ generate_assets
28
28
  generate_index
29
29
  generate_cookbook_show_pages
30
30
  end
31
31
 
32
32
  private
33
33
 
34
+ def generate_assets
35
+ generate_js
36
+ generate_css
37
+ copy_assets
38
+ end
39
+
34
40
  def copy_assets
35
- FileUtils.cp_r(File.join(minimart_web_directory, 'assets'), web_directory)
41
+ FileUtils.cp_r(compiled_asset_directory, web_directory)
42
+ end
43
+
44
+ def generate_js
45
+ js_dir = Pathname.new(compiled_asset_directory).join('javascripts')
46
+ FileUtils.mkdir_p(js_dir)
47
+ sprockets = Sprockets::Environment.new(minimart_root_directory)
48
+ sprockets.js_compressor = :uglify
49
+ sprockets.append_path(Pathname.new(raw_asset_directory).join('javascripts'))
50
+ sprockets['manifest.js'].write_to(js_dir.join('application.min.js'))
51
+ end
52
+
53
+ def generate_css
54
+ css_dir = Pathname.new(compiled_asset_directory).join('stylesheets')
55
+ FileUtils.mkdir_p(css_dir)
56
+ sprockets = Sprockets::Environment.new(minimart_root_directory)
57
+ sprockets.css_compressor = :sass
58
+ sprockets.append_path(Pathname.new(raw_asset_directory).join('stylesheets'))
59
+ sprockets['manifest.css'].write_to(css_dir.join('application.min.css'))
36
60
  end
37
61
 
38
62
  def generate_index
@@ -39,7 +39,19 @@ module Minimart
39
39
 
40
40
  # @return [String] The path to the Minimart web directory
41
41
  def minimart_web_directory
42
- File.join(Minimart.root_path, '..', 'web')
42
+ File.join(minimart_root_directory, '..', 'web')
43
+ end
44
+
45
+ def minimart_root_directory
46
+ Minimart.root_path
47
+ end
48
+
49
+ def raw_asset_directory
50
+ File.join(minimart_web_directory, '_assets')
51
+ end
52
+
53
+ def compiled_asset_directory
54
+ File.join(minimart_web_directory, 'assets')
43
55
  end
44
56
 
45
57
  # Get the path for a web asset (CSS, JS, etc...)
data/minimart.gemspec CHANGED
@@ -8,24 +8,29 @@ Gem::Specification.new do |spec|
8
8
  spec.version = Minimart::VERSION
9
9
  spec.summary = %q{MiniMart is a RubyGem that makes it simple to build a repository of Chef cookbooks using only static files.}
10
10
  spec.description = %q{MiniMart is a RubyGem that makes it simple to build a repository of Chef cookbooks using only static files.}
11
- spec.authors = 'MadGlory'
11
+ spec.authors = ['MadGlory', 'Todd Pickell', 'Others']
12
12
  spec.homepage = 'http://electric-it.github.io/minimart/'
13
13
  spec.license = 'Apache License, v2.0'
14
14
 
15
+ spec.required_ruby_version = ['~> 2.1', '~> 2.2']
16
+
15
17
  spec.files = `git ls-files -z`.split("\x0")
16
18
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
17
19
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
18
20
  spec.require_paths = ['lib']
19
21
 
20
- spec.add_dependency 'git', '~> 1.2.6'
22
+ spec.add_dependency 'git', '~> 1.2', '>= 1.2.6'
21
23
  spec.add_dependency 'minitar', '~> 0.5'
22
- spec.add_dependency 'octokit', '~> 3.7.0'
23
- spec.add_dependency 'redcarpet', '~> 3.2'
24
+ spec.add_dependency 'octokit', '~> 3.7'
25
+ spec.add_dependency 'redcarpet', '= 3.3.2'
24
26
  spec.add_dependency 'rest-client', '~> 1.7'
25
27
  spec.add_dependency 'ridley', '~> 4.1'
26
- spec.add_dependency 'solve', '~> 1.2.1'
28
+ spec.add_dependency 'solve', '~> 1.2', '>= 1.2.1'
27
29
  spec.add_dependency 'thor', '~> 0.19'
28
30
  spec.add_dependency 'tilt', '~> 2.0'
31
+ spec.add_dependency 'sprockets', '~> 3.5'
32
+ spec.add_dependency 'uglifier', '~> 2.7'
33
+ spec.add_dependency 'sass', '~> 3.4'
29
34
 
30
35
  spec.add_development_dependency 'bundler', '~> 1.7'
31
36
  spec.add_development_dependency 'rake', '~> 10.3'
@@ -0,0 +1,5 @@
1
+ sources:
2
+ - "https://supermarket.getchef.com"
3
+ cookbooks:
4
+ bad_metadata_cookbook:
5
+ path: spec/invalid/bad_metadata_cookbook
@@ -5,5 +5,7 @@ license 'All rights reserved'
5
5
  description 'Installs/Configures sample_cookbook'
6
6
  long_description 'Installs/Configures sample_cookbook'
7
7
  version '1.2.3'
8
+ source_url 'https://github.com/electric-it/minimart'
9
+ issues_url 'https://github.com/electric-it/minimart/issues'
8
10
 
9
11
  depends 'yum', '> 3.0.0'
@@ -0,0 +1,3 @@
1
+ source "https://supermarket.getchef.com"
2
+
3
+ metadata
@@ -0,0 +1,3 @@
1
+ # 0.1.0
2
+
3
+ Initial release of sample_cookbook
@@ -0,0 +1,16 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gem 'berkshelf'
4
+
5
+ # Uncomment these lines if you want to live on the Edge:
6
+ #
7
+ # group :development do
8
+ # gem "berkshelf", github: "berkshelf/berkshelf"
9
+ # gem "vagrant", github: "mitchellh/vagrant", tag: "v1.6.3"
10
+ # end
11
+ #
12
+ # group :plugins do
13
+ # gem "vagrant-berkshelf", github: "berkshelf/vagrant-berkshelf"
14
+ # gem "vagrant-omnibus", github: "schisamo/vagrant-omnibus"
15
+ # end
16
+
@@ -0,0 +1,3 @@
1
+ Copyright (C) 2014 YOUR_NAME
2
+
3
+ All rights reserved - Do Not Redistribute
@@ -0,0 +1,42 @@
1
+ # sample_cookbook-cookbook
2
+
3
+ TODO: Enter the cookbook description here.
4
+
5
+ ## Supported Platforms
6
+
7
+ TODO: List your supported platforms.
8
+
9
+ ## Attributes
10
+
11
+ <table>
12
+ <tr>
13
+ <th>Key</th>
14
+ <th>Type</th>
15
+ <th>Description</th>
16
+ <th>Default</th>
17
+ </tr>
18
+ <tr>
19
+ <td><tt>['sample_cookbook']['bacon']</tt></td>
20
+ <td>Boolean</td>
21
+ <td>whether to include bacon</td>
22
+ <td><tt>true</tt></td>
23
+ </tr>
24
+ </table>
25
+
26
+ ## Usage
27
+
28
+ ### sample_cookbook::default
29
+
30
+ Include `sample_cookbook` in your node's `run_list`:
31
+
32
+ ```json
33
+ {
34
+ "run_list": [
35
+ "recipe[sample_cookbook::default]"
36
+ ]
37
+ }
38
+ ```
39
+
40
+ ## License and Authors
41
+
42
+ Author:: YOUR_NAME (<YOUR_EMAIL>)
@@ -0,0 +1,5 @@
1
+ # encoding: utf-8
2
+
3
+ require 'bundler'
4
+ require 'bundler/setup'
5
+ require 'berkshelf/thor'
@@ -0,0 +1,90 @@
1
+ # -*- mode: ruby -*-
2
+ # vi: set ft=ruby :
3
+
4
+ # Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
5
+ VAGRANTFILE_API_VERSION = '2'
6
+
7
+ Vagrant.require_version '>= 1.5.0'
8
+
9
+ Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
10
+ # All Vagrant configuration is done here. The most common configuration
11
+ # options are documented and commented below. For a complete reference,
12
+ # please see the online documentation at vagrantup.com.
13
+
14
+ config.vm.hostname = 'sample-cookbook-berkshelf'
15
+
16
+ # Set the version of chef to install using the vagrant-omnibus plugin
17
+ # NOTE: You will need to install the vagrant-omnibus plugin:
18
+ #
19
+ # $ vagrant plugin install vagrant-omnibus
20
+ #
21
+ if Vagrant.has_plugin?
22
+ config.omnibus.chef_version = 'latest'
23
+ end
24
+
25
+ # Every Vagrant virtual environment requires a box to build off of.
26
+ # If this value is a shorthand to a box in Vagrant Cloud then
27
+ # config.vm.box_url doesn't need to be specified.
28
+ config.vm.box = 'chef/ubuntu-14.04'
29
+
30
+
31
+ # Assign this VM to a host-only network IP, allowing you to access it
32
+ # via the IP. Host-only networks can talk to the host machine as well as
33
+ # any other machines on the same network, but cannot be accessed (through this
34
+ # network interface) by any external networks.
35
+ config.vm.network :private_network, type: 'dhcp'
36
+
37
+ # Create a forwarded port mapping which allows access to a specific port
38
+ # within the machine from a port on the host machine. In the example below,
39
+ # accessing "localhost:8080" will access port 80 on the guest machine.
40
+
41
+ # Share an additional folder to the guest VM. The first argument is
42
+ # the path on the host to the actual folder. The second argument is
43
+ # the path on the guest to mount the folder. And the optional third
44
+ # argument is a set of non-required options.
45
+ # config.vm.synced_folder "../data", "/vagrant_data"
46
+
47
+ # Provider-specific configuration so you can fine-tune various
48
+ # backing providers for Vagrant. These expose provider-specific options.
49
+ # Example for VirtualBox:
50
+ #
51
+ # config.vm.provider :virtualbox do |vb|
52
+ # # Don't boot with headless mode
53
+ # vb.gui = true
54
+ #
55
+ # # Use VBoxManage to customize the VM. For example to change memory:
56
+ # vb.customize ["modifyvm", :id, "--memory", "1024"]
57
+ # end
58
+ #
59
+ # View the documentation for the provider you're using for more
60
+ # information on available options.
61
+
62
+ # The path to the Berksfile to use with Vagrant Berkshelf
63
+ # config.berkshelf.berksfile_path = "./Berksfile"
64
+
65
+ # Enabling the Berkshelf plugin. To enable this globally, add this configuration
66
+ # option to your ~/.vagrant.d/Vagrantfile file
67
+ config.berkshelf.enabled = true
68
+
69
+ # An array of symbols representing groups of cookbook described in the Vagrantfile
70
+ # to exclusively install and copy to Vagrant's shelf.
71
+ # config.berkshelf.only = []
72
+
73
+ # An array of symbols representing groups of cookbook described in the Vagrantfile
74
+ # to skip installing and copying to Vagrant's shelf.
75
+ # config.berkshelf.except = []
76
+
77
+ config.vm.provision :chef_solo do |chef|
78
+ chef.json = {
79
+ mysql: {
80
+ server_root_password: 'rootpass',
81
+ server_debian_password: 'debpass',
82
+ server_repl_password: 'replpass'
83
+ }
84
+ }
85
+
86
+ chef.run_list = [
87
+ 'recipe[sample_cookbook::default]'
88
+ ]
89
+ end
90
+ end
@@ -0,0 +1,94 @@
1
+ # Put files/directories that should be ignored in this file when uploading
2
+ # or sharing to the community site.
3
+ # Lines that start with '# ' are comments.
4
+
5
+ # OS generated files #
6
+ ######################
7
+ .DS_Store
8
+ Icon?
9
+ nohup.out
10
+ ehthumbs.db
11
+ Thumbs.db
12
+
13
+ # SASS #
14
+ ########
15
+ .sass-cache
16
+
17
+ # EDITORS #
18
+ ###########
19
+ \#*
20
+ .#*
21
+ *~
22
+ *.sw[a-z]
23
+ *.bak
24
+ REVISION
25
+ TAGS*
26
+ tmtags
27
+ *_flymake.*
28
+ *_flymake
29
+ *.tmproj
30
+ .project
31
+ .settings
32
+ mkmf.log
33
+
34
+ ## COMPILED ##
35
+ ##############
36
+ a.out
37
+ *.o
38
+ *.pyc
39
+ *.so
40
+ *.com
41
+ *.class
42
+ *.dll
43
+ *.exe
44
+ */rdoc/
45
+
46
+ # Testing #
47
+ ###########
48
+ .watchr
49
+ .rspec
50
+ spec/*
51
+ spec/fixtures/*
52
+ test/*
53
+ features/*
54
+ Guardfile
55
+ Procfile
56
+
57
+ # SCM #
58
+ #######
59
+ .git
60
+ */.git
61
+ .gitignore
62
+ .gitmodules
63
+ .gitconfig
64
+ .gitattributes
65
+ .svn
66
+ */.bzr/*
67
+ */.hg/*
68
+ */.svn/*
69
+
70
+ # Berkshelf #
71
+ #############
72
+ cookbooks/*
73
+ tmp
74
+
75
+ # Cookbooks #
76
+ #############
77
+ CONTRIBUTING
78
+ CHANGELOG*
79
+
80
+ # Strainer #
81
+ ############
82
+ Colanderfile
83
+ Strainerfile
84
+ .colander
85
+ .strainer
86
+
87
+ # Vagrant #
88
+ ###########
89
+ .vagrant
90
+ Vagrantfile
91
+
92
+ # Travis #
93
+ ##########
94
+ .travis.yml
@@ -0,0 +1,10 @@
1
+ maintainer 'MadGlory'
2
+ maintainer_email 'YOUR_EMAIL'
3
+ license 'All rights reserved'
4
+ description 'Installs/Configures bad_metadata_cookbook'
5
+ long_description 'Installs/Configures bad_metadata_cookbook'
6
+ version '1.2.3'
7
+ source_url 'https://github.com/electric-it/minimart'
8
+ issues_url 'https://github.com/electric-it/minimart/issues'
9
+
10
+ depends 'yum', '> 3.0.0'
@@ -0,0 +1,8 @@
1
+ #
2
+ # Cookbook Name:: sample_cookbook
3
+ # Recipe:: default
4
+ #
5
+ # Copyright (C) 2014 YOUR_NAME
6
+ #
7
+ # All rights reserved - Do Not Redistribute
8
+ #
@@ -31,6 +31,16 @@ describe Minimart::Cookbook do
31
31
  it { is_expected.to eq 'MadGlory' }
32
32
  end
33
33
 
34
+ describe '#source_url' do
35
+ subject { cookbook.source_url }
36
+ it { is_expected.to eq 'https://github.com/electric-it/minimart'}
37
+ end
38
+
39
+ describe '#issues_url' do
40
+ subject { cookbook.issues_url }
41
+ it { is_expected.to eq 'https://github.com/electric-it/minimart/issues'}
42
+ end
43
+
34
44
  describe '#path' do
35
45
  subject { cookbook.path }
36
46
  it { is_expected.to eq Pathname.new('spec/fixtures/sample_cookbook') }
@@ -197,5 +197,26 @@ describe Minimart::Mirror::InventoryBuilder do
197
197
  end
198
198
 
199
199
  end
200
+
201
+ context 'when a cookbook is missing name param in the metadata' do
202
+ let(:inventory_config) do
203
+ Minimart::Mirror::InventoryConfiguration.new('spec/fixtures/bad_metadata_inventory.yml')
204
+ end
205
+
206
+ before(:each) do
207
+ # stub out actually cloning the repo
208
+ allow_any_instance_of(Minimart::Download::GitRepository).to receive(:fetch).and_yield 'spec/invalid/bad_metadata_cookbook'
209
+ end
210
+
211
+ around(:each) do |e|
212
+ VCR.use_cassette('location_specific_cookbooks') { e.call }
213
+ end
214
+
215
+ # broken
216
+ it 'should not include the cookbook in the graph' do
217
+ subject.build!
218
+ expect(subject.graph.source_cookbook_added?('bad_metadata_cookbook', '1.2.3')).to eq false
219
+ end
220
+ end
200
221
  end
201
222
  end
@@ -7,6 +7,9 @@ describe Minimart::Web::HtmlGenerator do
7
7
  end
8
8
 
9
9
  let(:web_directory) { test_directory }
10
+ let(:assets_directory) { File.join(web_directory, 'assets') }
11
+ let(:stylesheets_directory) { File.join(assets_directory, 'stylesheets') }
12
+ let(:javascripts_directory) { File.join(assets_directory, 'javascripts') }
10
13
 
11
14
  subject do
12
15
  Minimart::Web::HtmlGenerator.new(
@@ -17,7 +20,17 @@ describe Minimart::Web::HtmlGenerator do
17
20
  describe '#generate' do
18
21
  it 'should copy any available assets' do
19
22
  subject.generate
20
- expect(Dir.exists?(File.join(web_directory, 'assets'))).to eq true
23
+ expect(Dir.exist?(assets_directory)).to eq true
24
+ end
25
+
26
+ it 'should minify raw CSS files' do
27
+ subject.generate
28
+ expect(Dir.entries(stylesheets_directory)).to include('application.min.css')
29
+ end
30
+
31
+ it 'should unglify raw JS files' do
32
+ subject.generate
33
+ expect(Dir.entries(javascripts_directory)).to include('application.min.js')
21
34
  end
22
35
 
23
36
  it 'should generate the dashboard page' do
@@ -30,5 +43,4 @@ describe Minimart::Web::HtmlGenerator do
30
43
  subject.generate
31
44
  end
32
45
  end
33
-
34
46
  end
@@ -302,6 +302,12 @@ form {
302
302
  width: 100%;
303
303
  margin-top: 20px; }
304
304
 
305
+ .detail-sidebar__halfbutton {
306
+ width: 49%;
307
+ font-size: 14px;
308
+ margin-top: 20px;
309
+ }
310
+
305
311
  /* Feature blocks */
306
312
  .feature-block {
307
313
  padding-top: 90px;