shipyard-framework 0.2.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (56) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +10 -0
  3. data/.rspec +2 -0
  4. data/CODE_OF_CONDUCT.md +74 -0
  5. data/Gemfile +3 -0
  6. data/LICENSE.txt +21 -0
  7. data/README.md +52 -0
  8. data/Rakefile +6 -0
  9. data/app/views/shipyard/_alerts.slim +3 -0
  10. data/assets/icons/arrows/arrow-down.svg +3 -0
  11. data/assets/icons/gear.svg +3 -0
  12. data/assets/icons/plus.svg +3 -0
  13. data/assets/icons/x.svg +4 -0
  14. data/assets/javascripts/shipyard/alert.es6 +19 -0
  15. data/assets/javascripts/shipyard/core.es6 +3 -0
  16. data/assets/javascripts/shipyard/icon.es6 +50 -0
  17. data/assets/javascripts/shipyard.es6 +6 -0
  18. data/assets/stylesheets/_shipyard.sass +3 -0
  19. data/assets/stylesheets/shipyard/_components.sass +5 -0
  20. data/assets/stylesheets/shipyard/_core.sass +12 -0
  21. data/assets/stylesheets/shipyard/_utilities.sass +5 -0
  22. data/assets/stylesheets/shipyard/components/_alerts.sass +64 -0
  23. data/assets/stylesheets/shipyard/components/_boxes.sass +37 -0
  24. data/assets/stylesheets/shipyard/components/_buttons.sass +107 -0
  25. data/assets/stylesheets/shipyard/components/_empty.sass +15 -0
  26. data/assets/stylesheets/shipyard/components/_forms.sass +128 -0
  27. data/assets/stylesheets/shipyard/components/_icons.sass +54 -0
  28. data/assets/stylesheets/shipyard/components/_modals.sass +29 -0
  29. data/assets/stylesheets/shipyard/functions/_color.sass +9 -0
  30. data/assets/stylesheets/shipyard/mixins/_box-model.sass +6 -0
  31. data/assets/stylesheets/shipyard/mixins/_components.sass +82 -0
  32. data/assets/stylesheets/shipyard/mixins/_positioning.sass +12 -0
  33. data/assets/stylesheets/shipyard/mixins/_prefixed.sass +19 -0
  34. data/assets/stylesheets/shipyard/mixins/_responsive.sass +112 -0
  35. data/assets/stylesheets/shipyard/mixins/_selectors.sass +11 -0
  36. data/assets/stylesheets/shipyard/utilities/_animations.sass +11 -0
  37. data/assets/stylesheets/shipyard/utilities/_grid.sass +75 -0
  38. data/assets/stylesheets/shipyard/utilities/_positioning.sass +17 -0
  39. data/assets/stylesheets/shipyard/utilities/_reset.sass +11 -0
  40. data/assets/stylesheets/shipyard/utilities/_type.sass +161 -0
  41. data/assets/stylesheets/shipyard/variables/_color_utilities.sass +68 -0
  42. data/assets/stylesheets/shipyard/variables/_colors.scss +11 -0
  43. data/assets/stylesheets/shipyard/variables/_grid.scss +2 -0
  44. data/assets/stylesheets/shipyard/variables/_misc.scss +11 -0
  45. data/assets/stylesheets/shipyard/variables/_typography.scss +29 -0
  46. data/lib/shipyard/icons.rb +89 -0
  47. data/lib/shipyard/rails/alert_helper.rb +45 -0
  48. data/lib/shipyard/rails/button_helper.rb +37 -0
  49. data/lib/shipyard/rails/engine.rb +11 -0
  50. data/lib/shipyard/rails/icon_helper.rb +50 -0
  51. data/lib/shipyard/rails/layout_helpers.rb +34 -0
  52. data/lib/shipyard/rails/railtie.rb +24 -0
  53. data/lib/shipyard/version.rb +3 -0
  54. data/lib/shipyard.rb +65 -0
  55. data/shipyard.gemspec +27 -0
  56. metadata +181 -0
@@ -0,0 +1,11 @@
1
+ $colors: (
2
+ gray: (base: #788594, light: #bac5d2, lighter: #dfe6eb, lightest: #f2f5f7, dark: #313a44, darkest: #1e252c),
3
+ green: (base: #3acc7c, light: #97ffc6, lightest: #b5ffd6, dark: #2c995d, darkest: #1d663e),
4
+ blue: (base: #1ca1e3, light: #5eb9e6, lightest: #9ed8f5, dark: #0075b0, darkest: #004d73),
5
+ teal: (base: #20a5a8, light: #6ab7b9, lightest: #b2dbdc, dark: #0e6e70, darkest: #00494b),
6
+ red: (base: #e06158, light: #f7a09e, lightest: #ffc6cb, dark: #b13b39, darkest: #892120),
7
+ yellow: (base: #ffca49, light: #ffd87e, lightest: #ffe7b1, dark: #99782d, darker: #66501e, darkest: #33280f),
8
+ orange: (base: #ff9f49, light: #ffba7d, lightest: #ffd6b1, dark: #cc7f3a, darkest: #995f2c),
9
+ purple: (base: #bf84ff, light: lighten(#bf84ff, 10%), lighter: lighten(#bf84ff, 15%), lightest: lighten(#bf84ff, 20%), dark: darken(#bf84ff, 10%), darker: darken(#bf84ff, 15%), darkest: darken(#bf84ff, 20%)),
10
+ coral: (base: #f9657a, light: lighten(#f9657a, 10%), lighter: lighten(#f9657a, 15%), lightest: lighten(#f9657a, 20%), dark: darken(#f9657a, 10%), darker: darken(#f9657a, 15%), darkest: darken(#f9657a, 20%))
11
+ );
@@ -0,0 +1,2 @@
1
+ $breakpoints: (x1: 770px, x2: 920px, x3: 1200px, x4: 1600px);
2
+ $margins: (x0: 10px, x1: 20px, x2: 30px, x3: 30px, x4: 40px);
@@ -0,0 +1,11 @@
1
+ $bg-color: $gray-lightest;
2
+
3
+ $border-radius: 5px;
4
+
5
+ $border-color: darken($bg-color, 12%);
6
+ $border-color-dark: darken($border-color, 10%);
7
+ $border-color-darker: darken($border-color, 14%);
8
+ $border-color-darkest: darken($border-color, 18%);
9
+ $border-color-light: darken($bg-color, 6%);
10
+ $border-color-lighter: darken($bg-color, 4%);
11
+ $border-color-lightest: darken($bg-color, 2%);
@@ -0,0 +1,29 @@
1
+ // Font
2
+ $font-family: 'museo-sans-rounded', 'Museo Sans Rounded', Arial, sans-serif;
3
+
4
+ // Font: Weights
5
+ $normal: 300;
6
+ $italic: 400;
7
+ $medium: 500;
8
+ $medium-italic: 600;
9
+ $bold: 700;
10
+ $bold-italic: 800;
11
+
12
+ $font-sizes: (xxs: 12px, xs: 13px, sm: 14px, md: 16px, lg: 18px, xl: 20px, xxl: 22px, xxxl: 24px);
13
+ $font-size: map-get($font-sizes, md);
14
+ $font-size-xxxl: map-get($font-sizes, xxxl);
15
+ $font-size-xxl: map-get($font-sizes, xxl);
16
+ $font-size-xl: map-get($font-sizes, xl);
17
+ $font-size-lg: map-get($font-sizes, lg);
18
+ $font-size-sm: map-get($font-sizes, sm);
19
+ $font-size-xs: map-get($font-sizes, xs);
20
+ $font-size-xxs: map-get($font-sizes, xxs);
21
+ $font: $normal 16px / 1.6 $font-family;
22
+ $text-color: $gray-dark;
23
+ $text-color-disabled: lighten($gray, 15%);
24
+ $text-color-lightest: lighten($gray, 10%);
25
+ $text-color-lighter: lighten($gray, 5%);
26
+ $text-color-light: $gray;
27
+ $text-color-darkest: $gray-dark;
28
+ $text-color-darker: lighten($gray-dark, 4%);
29
+ $text-color-dark: lighten($gray-dark, 7%);
@@ -0,0 +1,89 @@
1
+ module Shipyard
2
+ class Icons
3
+ include ActionView::Helpers::SanitizeHelper
4
+ include Singleton
5
+ attr_reader :icons
6
+ delegate :each, :find, to: :icons
7
+ delegate :execute_if_updated, :execute, :updated?, to: :updater
8
+
9
+ def initialize
10
+ @path = "#{::Rails.root}/app/assets/icons/"
11
+ @public = "#{::Rails.root}/public/assets"
12
+ reload
13
+ end
14
+
15
+ def reload
16
+ @icons = load_svgs.freeze
17
+ save_external_svg_defs
18
+ end
19
+
20
+ def find_by(hash)
21
+ icon = @icons.detect { |i| i[hash.keys.first] == hash.values.first }
22
+ raise_error(hash.values.first) unless icon
23
+ icon
24
+ end
25
+
26
+ private
27
+
28
+ def load_svgs
29
+ files.sort.map do |file|
30
+ html = File.read(file)
31
+ {
32
+ file: file,
33
+ path: file.gsub(@path, ''),
34
+ id: File.basename(file).gsub(/.svg/, ''),
35
+ symbol: File.basename(file).gsub(/.svg/, '').underscore.to_sym,
36
+ view_box: html[/viewBox="(.*?)"/, 1],
37
+ outer_html: html.gsub(/\n|\s+\s+/, ''),
38
+ inner_html: sanitize_svg(html).gsub(/\n|\s+\s+/, ''),
39
+ is_outlined: html.include?('non-scaling-stroke')
40
+ }
41
+ end
42
+ end
43
+
44
+ def save_external_svg_defs
45
+ html = []
46
+ @icons.each do |icon|
47
+ html << svg_group(icon)
48
+ end
49
+ Dir.mkdir(@public) unless File.exists?(@public) || Dir.exists?(@public)
50
+ File.write("#{@public}/icons.svg", svg_template(html.join))
51
+ end
52
+
53
+ def sanitize_svg(html)
54
+ sanitize(html,
55
+ tags: %w(g circle rect path line polyline),
56
+ attributes: %w(x x1 x2 y y1 y2 d cx cy r vector-effect points class))
57
+ end
58
+
59
+ def svg_group(icon)
60
+ %(<g id="#{icon[:id]}">#{icon[:inner_html]}</g>)
61
+ end
62
+
63
+ def svg_template(html)
64
+ %(
65
+ <?xml version="1.0" standalone="no"?>
66
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
67
+ <svg xmlns="http://www.w3.org/2000/svg" version="1.1">
68
+ <defs>#{html}</defs>
69
+ </svg>
70
+ ).gsub(/\n|\s+\s+/, '')
71
+ end
72
+
73
+ def files
74
+ files = Dir[Pathname(Shipyard.icons_path).join('**/*.svg')]
75
+ files.concat Dir[Pathname(@path).join('**/*.svg')]
76
+ end
77
+
78
+ def raise_error(name)
79
+ return unless ::Rails.env.development? || ::Rails.env.test?
80
+ raise "Missing icon #{name}"
81
+ end
82
+
83
+ def updater
84
+ @updater ||= ActiveSupport::FileUpdateChecker.new([], @path => [:svg]) do
85
+ reload
86
+ end
87
+ end
88
+ end
89
+ end
@@ -0,0 +1,45 @@
1
+ module Shipyard
2
+ module Rails
3
+ module AlertHelper
4
+ def flash_alert(*args, &block)
5
+ alert_txt = capture(&block) if block_given?
6
+ options = {}
7
+ options[:role] ||= 'alert'
8
+ options[:data] ||= {}
9
+ options[:data][:shipyard] = 'alert'
10
+ options['v-show'] = 'visible'
11
+ class_list = ['alert']
12
+
13
+ args.each do |arg|
14
+ if arg.is_a? Symbol
15
+ class_list << "alert-#{alert_type(arg)}"
16
+ elsif arg.is_a? Hash
17
+ options = options.merge(arg) if arg.is_a?(Hash)
18
+ else
19
+ alert_txt = arg
20
+ end
21
+ end
22
+
23
+ options[:class] = "#{class_list.join(' ')} #{options[:class]}"
24
+
25
+ content_tag :div, options do
26
+ concat content_tag(:p, raw(alert_txt), class: 'alert-txt')
27
+ concat content_tag(:button,
28
+ icon('x', class: 'alert-close-icon icon-outline-inverse center'),
29
+ class: 'alert-close v-center',
30
+ '@click': 'close')
31
+ end
32
+ end
33
+
34
+ private
35
+
36
+ def alert_type(type)
37
+ case type.to_sym
38
+ when :notice then :success
39
+ when :alert then :error
40
+ else type.to_s.tr('_', '-')
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,37 @@
1
+ module Shipyard
2
+ module Rails
3
+ module ButtonHelper
4
+ def btn(name, *args, &block)
5
+ if block_given?
6
+ args << name
7
+ name = capture(&block)
8
+ end
9
+
10
+ # Save any options that were passed in.
11
+ options = {}
12
+ args.each do |arg|
13
+ options = options.merge(arg) if arg.is_a?(Hash)
14
+ end
15
+
16
+ # Output the appropriate button.
17
+ if options.key?(:href)
18
+ link_to name, options[:href], btn_options(args, options)
19
+ else
20
+ content_tag :button, name, btn_options(args, options)
21
+ end
22
+ end
23
+
24
+ private
25
+
26
+ def btn_options(args, options)
27
+ options[:class] ||= ''
28
+ options[:class] += ' btn'
29
+ args.each do |arg|
30
+ options[:class] += " btn-#{arg.to_s.tr('_', '-')}" if arg.is_a?(Symbol)
31
+ end
32
+ options[:class].strip!
33
+ options.except(:href)
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,11 @@
1
+ module Shipyard
2
+ module Rails
3
+ class Engine < ::Rails::Engine
4
+ initializer 'shipyard.assets.precompile', group: :all do |app|
5
+ %w(stylesheets javascripts).each do |sub|
6
+ app.config.assets.paths << root.join('assets', sub).to_s
7
+ end
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,50 @@
1
+ module Shipyard
2
+ module Rails
3
+ module IconHelper
4
+ include ActionView::Context
5
+ include ActionView::Helpers::TagHelper
6
+
7
+ def icon(name, options={})
8
+ if name.is_a? Symbol
9
+ svg = Icons.instance.find_by(symbol: name)
10
+ svg_use_tag svg, options
11
+ else
12
+ svg = Icons.instance.find_by(id: name)
13
+ svg_tag svg, options
14
+ end
15
+ end
16
+
17
+ private
18
+
19
+ def svg_options(svg, options)
20
+ options[:class] = svg_classes(svg, options)
21
+ options[:viewBox] ||= svg[:view_box]
22
+ options[:preserveAspectRatio] ||= 'xMinYMin meet'
23
+ options.delete(:prefix)
24
+ options
25
+ end
26
+
27
+ def svg_classes(svg, options)
28
+ css_classes = []
29
+ css_classes << 'icon'
30
+ css_classes << "icon-#{svg[:id]}"
31
+ css_classes << 'icon-outline' if svg[:is_outlined] == true
32
+ css_classes << "#{options[:prefix]}-icon-#{svg[:id]}" if options[:prefix]
33
+ css_classes << options[:class]
34
+ css_classes.join(' ').strip
35
+ end
36
+
37
+ def svg_use_tag(svg, options)
38
+ content_tag :svg, svg_options(svg, options) do
39
+ content_tag :use, nil, 'xlink:href' => "/assets/icons.svg##{svg[:id]}"
40
+ end
41
+ end
42
+
43
+ def svg_tag(svg, options)
44
+ html = svg[:inner_html]
45
+ html = html.gsub(/class="([\s\w-]+)"/, "class=\"#{options[:prefix]}-\\1 \\1\"") if options[:prefix]
46
+ content_tag :svg, raw(html), svg_options(svg, options)
47
+ end
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,34 @@
1
+ module Shipyard
2
+ module Rails
3
+ module LayoutHelpers
4
+ def layout_classes(layout_name)
5
+ "#{layout_name}-layout #{current_page} #{'legacy-content' unless content_for? :new_layout}"
6
+ end
7
+
8
+ def current_page
9
+ "#{controller.controller_name.dasherize}-#{controller.action_name}"
10
+ end
11
+
12
+ def current_route
13
+ "#{controller.controller_name}##{controller.action_name}"
14
+ end
15
+
16
+ def current_route_is?(routes)
17
+ routes.tr(' ', '').split(',').include? current_route
18
+ end
19
+
20
+ def content(options={}, &block)
21
+ type, options = options, {} if options.is_a? Symbol
22
+ options[:class] ||= ''
23
+ options[:class] += type ? " content-#{type.to_s.dasherize}" : ' content'
24
+ options[:class] += " #{current_page}-content"
25
+ options[:data] ||= {}
26
+ options[:data][:content] = current_page
27
+ content_tag :div, options do
28
+ concat render(partial: 'shipyard/alerts')
29
+ concat capture(&block)
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,24 @@
1
+ require 'shipyard/rails/layout_helpers'
2
+ require 'shipyard/rails/icon_helper'
3
+ require 'shipyard/rails/button_helper'
4
+ require 'shipyard/rails/alert_helper'
5
+
6
+ module Shipyard
7
+ module Rails
8
+ class Railtie < ::Rails::Railtie
9
+ initializer 'shipyard.view_helpers' do
10
+ ActionView::Base.send :include, LayoutHelpers
11
+ ActionView::Base.send :include, IconHelper
12
+ ActionView::Base.send :include, ButtonHelper
13
+ ActionView::Base.send :include, AlertHelper
14
+ end
15
+
16
+ initializer 'shipyard.reload_cached_icons' do
17
+ if ::Rails.env.development?
18
+ ::Rails.application.reloaders << Shipyard::Icons.instance
19
+ ::Rails.application.config.to_prepare { Shipyard::Icons.instance.execute_if_updated }
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,3 @@
1
+ module Shipyard
2
+ VERSION = '0.2.2'
3
+ end
data/lib/shipyard.rb ADDED
@@ -0,0 +1,65 @@
1
+ require 'shipyard/version'
2
+
3
+ module Shipyard
4
+ class << self
5
+ def load!
6
+ if rails?
7
+ register_rails_engine
8
+ elsif sprockets?
9
+ register_sprockets
10
+ end
11
+
12
+ configure_sass
13
+ end
14
+
15
+ # Paths
16
+ def gem_path
17
+ @gem_path ||= File.expand_path '..', File.dirname(__FILE__)
18
+ end
19
+
20
+ def stylesheets_path
21
+ File.join assets_path, 'stylesheets'
22
+ end
23
+
24
+ def javascripts_path
25
+ File.join assets_path, 'javascripts'
26
+ end
27
+
28
+ def icons_path
29
+ File.join assets_path, 'icons'
30
+ end
31
+
32
+ def assets_path
33
+ @assets_path ||= File.join gem_path, 'assets'
34
+ end
35
+
36
+ private
37
+
38
+ def sprockets?
39
+ defined?(::Sprockets)
40
+ end
41
+
42
+ def rails?
43
+ defined?(::Rails)
44
+ end
45
+
46
+ def configure_sass
47
+ require 'sass'
48
+
49
+ ::Sass.load_paths << stylesheets_path
50
+ end
51
+
52
+ def register_rails_engine
53
+ require 'shipyard/icons'
54
+ require 'shipyard/rails/engine'
55
+ require 'shipyard/rails/railtie'
56
+ end
57
+
58
+ def register_sprockets
59
+ Sprockets.append_path(stylesheets_path)
60
+ Sprockets.append_path(javascripts_path)
61
+ end
62
+ end
63
+ end
64
+
65
+ Shipyard.load!
data/shipyard.gemspec ADDED
@@ -0,0 +1,27 @@
1
+ lib = File.expand_path('../lib', __FILE__)
2
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
+ require 'shipyard/version'
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = 'shipyard-framework'
7
+ spec.version = Shipyard::VERSION
8
+ spec.authors = ['Shipyard']
9
+ spec.email = ['ryanwilke@gmail.com']
10
+ spec.summary = 'A lightweight CSS framework for developing mobile-first projects in Ruby on Rails.'
11
+ spec.homepage = 'https://github.com/shipyard-framework'
12
+ spec.license = 'MIT'
13
+
14
+ spec.files = `git ls-files -z`.split("\x0").reject do |f|
15
+ f.match(%r{^(test|spec|features)/})
16
+ end
17
+ spec.bindir = "exe"
18
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_runtime_dependency 'sassc-rails', '~> 1.3', '>= 1.3.0'
22
+ spec.add_runtime_dependency 'slim-rails', '~> 3.1', '>= 3.1.0'
23
+
24
+ spec.add_development_dependency 'bundler', '~> 1.13'
25
+ spec.add_development_dependency 'rake', '~> 10.0'
26
+ spec.add_development_dependency 'rspec', '~> 3.0'
27
+ end
metadata ADDED
@@ -0,0 +1,181 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: shipyard-framework
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.2
5
+ platform: ruby
6
+ authors:
7
+ - Shipyard
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2017-07-27 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: sassc-rails
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.3'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 1.3.0
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: '1.3'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 1.3.0
33
+ - !ruby/object:Gem::Dependency
34
+ name: slim-rails
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '3.1'
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ version: 3.1.0
43
+ type: :runtime
44
+ prerelease: false
45
+ version_requirements: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - "~>"
48
+ - !ruby/object:Gem::Version
49
+ version: '3.1'
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ version: 3.1.0
53
+ - !ruby/object:Gem::Dependency
54
+ name: bundler
55
+ requirement: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - "~>"
58
+ - !ruby/object:Gem::Version
59
+ version: '1.13'
60
+ type: :development
61
+ prerelease: false
62
+ version_requirements: !ruby/object:Gem::Requirement
63
+ requirements:
64
+ - - "~>"
65
+ - !ruby/object:Gem::Version
66
+ version: '1.13'
67
+ - !ruby/object:Gem::Dependency
68
+ name: rake
69
+ requirement: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - "~>"
72
+ - !ruby/object:Gem::Version
73
+ version: '10.0'
74
+ type: :development
75
+ prerelease: false
76
+ version_requirements: !ruby/object:Gem::Requirement
77
+ requirements:
78
+ - - "~>"
79
+ - !ruby/object:Gem::Version
80
+ version: '10.0'
81
+ - !ruby/object:Gem::Dependency
82
+ name: rspec
83
+ requirement: !ruby/object:Gem::Requirement
84
+ requirements:
85
+ - - "~>"
86
+ - !ruby/object:Gem::Version
87
+ version: '3.0'
88
+ type: :development
89
+ prerelease: false
90
+ version_requirements: !ruby/object:Gem::Requirement
91
+ requirements:
92
+ - - "~>"
93
+ - !ruby/object:Gem::Version
94
+ version: '3.0'
95
+ description:
96
+ email:
97
+ - ryanwilke@gmail.com
98
+ executables: []
99
+ extensions: []
100
+ extra_rdoc_files: []
101
+ files:
102
+ - ".gitignore"
103
+ - ".rspec"
104
+ - CODE_OF_CONDUCT.md
105
+ - Gemfile
106
+ - LICENSE.txt
107
+ - README.md
108
+ - Rakefile
109
+ - app/views/shipyard/_alerts.slim
110
+ - assets/icons/arrows/arrow-down.svg
111
+ - assets/icons/gear.svg
112
+ - assets/icons/plus.svg
113
+ - assets/icons/x.svg
114
+ - assets/javascripts/shipyard.es6
115
+ - assets/javascripts/shipyard/alert.es6
116
+ - assets/javascripts/shipyard/core.es6
117
+ - assets/javascripts/shipyard/icon.es6
118
+ - assets/stylesheets/_shipyard.sass
119
+ - assets/stylesheets/shipyard/_components.sass
120
+ - assets/stylesheets/shipyard/_core.sass
121
+ - assets/stylesheets/shipyard/_utilities.sass
122
+ - assets/stylesheets/shipyard/components/_alerts.sass
123
+ - assets/stylesheets/shipyard/components/_boxes.sass
124
+ - assets/stylesheets/shipyard/components/_buttons.sass
125
+ - assets/stylesheets/shipyard/components/_empty.sass
126
+ - assets/stylesheets/shipyard/components/_forms.sass
127
+ - assets/stylesheets/shipyard/components/_icons.sass
128
+ - assets/stylesheets/shipyard/components/_modals.sass
129
+ - assets/stylesheets/shipyard/functions/_color.sass
130
+ - assets/stylesheets/shipyard/mixins/_box-model.sass
131
+ - assets/stylesheets/shipyard/mixins/_components.sass
132
+ - assets/stylesheets/shipyard/mixins/_positioning.sass
133
+ - assets/stylesheets/shipyard/mixins/_prefixed.sass
134
+ - assets/stylesheets/shipyard/mixins/_responsive.sass
135
+ - assets/stylesheets/shipyard/mixins/_selectors.sass
136
+ - assets/stylesheets/shipyard/utilities/_animations.sass
137
+ - assets/stylesheets/shipyard/utilities/_grid.sass
138
+ - assets/stylesheets/shipyard/utilities/_positioning.sass
139
+ - assets/stylesheets/shipyard/utilities/_reset.sass
140
+ - assets/stylesheets/shipyard/utilities/_type.sass
141
+ - assets/stylesheets/shipyard/variables/_color_utilities.sass
142
+ - assets/stylesheets/shipyard/variables/_colors.scss
143
+ - assets/stylesheets/shipyard/variables/_grid.scss
144
+ - assets/stylesheets/shipyard/variables/_misc.scss
145
+ - assets/stylesheets/shipyard/variables/_typography.scss
146
+ - lib/shipyard.rb
147
+ - lib/shipyard/icons.rb
148
+ - lib/shipyard/rails/alert_helper.rb
149
+ - lib/shipyard/rails/button_helper.rb
150
+ - lib/shipyard/rails/engine.rb
151
+ - lib/shipyard/rails/icon_helper.rb
152
+ - lib/shipyard/rails/layout_helpers.rb
153
+ - lib/shipyard/rails/railtie.rb
154
+ - lib/shipyard/version.rb
155
+ - shipyard.gemspec
156
+ homepage: https://github.com/shipyard-framework
157
+ licenses:
158
+ - MIT
159
+ metadata: {}
160
+ post_install_message:
161
+ rdoc_options: []
162
+ require_paths:
163
+ - lib
164
+ required_ruby_version: !ruby/object:Gem::Requirement
165
+ requirements:
166
+ - - ">="
167
+ - !ruby/object:Gem::Version
168
+ version: '0'
169
+ required_rubygems_version: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - ">="
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ requirements: []
175
+ rubyforge_project:
176
+ rubygems_version: 2.5.1
177
+ signing_key:
178
+ specification_version: 4
179
+ summary: A lightweight CSS framework for developing mobile-first projects in Ruby
180
+ on Rails.
181
+ test_files: []