bootstrap-email 0.3.0 → 1.0.0.alpha1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (79) hide show
  1. checksums.yaml +4 -4
  2. data/VERSION +1 -1
  3. data/bin/bootstrap-email +2 -0
  4. data/core/bootstrap-email.scss +27 -18
  5. data/core/bootstrap-head.scss +143 -0
  6. data/core/layout.html.erb +11 -0
  7. data/core/scss/_colors.scss +161 -0
  8. data/core/scss/_functions.scss +29 -0
  9. data/core/scss/_helper_groups.scss +21 -0
  10. data/core/{sass → scss}/_reboot_email.scss +7 -22
  11. data/core/scss/_selectors_for_utils.scss +100 -0
  12. data/core/scss/_utilities.scss +125 -0
  13. data/core/scss/_variables.scss +52 -0
  14. data/core/{sass → scss/components}/_alert.scss +0 -1
  15. data/core/{sass → scss/components}/_badge.scss +8 -15
  16. data/core/{sass → scss/components}/_button.scss +21 -17
  17. data/core/{sass → scss/components}/_card.scss +3 -2
  18. data/core/{sass → scss/components}/_container.scss +0 -0
  19. data/core/scss/components/_grid.scss +35 -0
  20. data/core/scss/components/_hr.scss +8 -0
  21. data/core/{sass → scss/components}/_image.scss +2 -1
  22. data/core/{sass → scss/components}/_preview.scss +0 -0
  23. data/core/{sass → scss/components}/_table.scss +0 -0
  24. data/core/scss/utilities/_background.scss +5 -0
  25. data/core/scss/utilities/_border-radius.scss +21 -0
  26. data/core/scss/utilities/_border.scss +13 -0
  27. data/core/scss/utilities/_color.scss +9 -0
  28. data/core/scss/utilities/_display.scss +7 -0
  29. data/core/scss/utilities/_sizing.scss +16 -0
  30. data/core/scss/utilities/_spacing.scss +18 -0
  31. data/core/scss/utilities/_text-decoration.scss +9 -0
  32. data/core/scss/utilities/_typography.scss +54 -0
  33. data/core/templates/col.html.erb +2 -2
  34. data/core/templates/row.html.erb +2 -2
  35. data/lib/bootstrap-email/bootstrap_email_cli.rb +91 -0
  36. data/lib/bootstrap-email/compiler.rb +118 -0
  37. data/lib/bootstrap-email/components/alert.rb +11 -0
  38. data/lib/bootstrap-email/components/align.rb +21 -0
  39. data/lib/bootstrap-email/components/badge.rb +11 -0
  40. data/lib/bootstrap-email/components/base.rb +26 -0
  41. data/lib/bootstrap-email/components/body.rb +22 -0
  42. data/lib/bootstrap-email/components/button.rb +11 -0
  43. data/lib/bootstrap-email/components/card.rb +14 -0
  44. data/lib/bootstrap-email/components/color.rb +13 -0
  45. data/lib/bootstrap-email/components/container.rb +14 -0
  46. data/lib/bootstrap-email/components/grid.rb +14 -0
  47. data/lib/bootstrap-email/components/hr.rb +12 -0
  48. data/lib/bootstrap-email/components/margin.rb +22 -0
  49. data/lib/bootstrap-email/components/padding.rb +16 -0
  50. data/lib/bootstrap-email/components/paragraph.rb +24 -0
  51. data/lib/bootstrap-email/components/spacer.rb +11 -0
  52. data/lib/bootstrap-email/components/spacing.rb +18 -0
  53. data/lib/bootstrap-email/components/table.rb +13 -0
  54. data/lib/bootstrap-email/initialize.rb +1 -0
  55. data/lib/bootstrap-email/rails/action_mailer.rb +10 -0
  56. data/lib/bootstrap-email/{engine.rb → rails/engine.rb} +0 -0
  57. data/lib/bootstrap-email/sass_cache.rb +47 -0
  58. data/lib/bootstrap-email/version.rb +3 -5
  59. data/lib/bootstrap_email.rb +26 -0
  60. metadata +76 -64
  61. data/core/head.scss +0 -269
  62. data/core/sass/_border.scss +0 -73
  63. data/core/sass/_color.scss +0 -33
  64. data/core/sass/_display.scss +0 -7
  65. data/core/sass/_functions.scss +0 -14
  66. data/core/sass/_grid.scss +0 -131
  67. data/core/sass/_hr.scss +0 -14
  68. data/core/sass/_spacing.scss +0 -100
  69. data/core/sass/_typography.scss +0 -50
  70. data/core/sass/_variables.scss +0 -150
  71. data/core/template.html.erb +0 -11
  72. data/core/templates/align-center.html.erb +0 -9
  73. data/core/templates/align-left.html.erb +0 -9
  74. data/core/templates/align-right.html.erb +0 -9
  75. data/core/templates/hr.html.erb +0 -9
  76. data/lib/assets/stylesheets/bootstrap-email.scss +0 -1
  77. data/lib/bootstrap-email.rb +0 -230
  78. data/lib/bootstrap-email/action_mailer.rb +0 -12
  79. data/lib/bootstrap-email/premailer_railtie.rb +0 -5
@@ -0,0 +1,26 @@
1
+ module BootstrapEmail
2
+ module Component
3
+ class Base
4
+ attr_reader :doc
5
+ def initialize(doc)
6
+ @doc = doc
7
+ end
8
+
9
+ def self.build(doc)
10
+ new(doc).build
11
+ end
12
+
13
+ def template(file, locals_hash = {})
14
+ locals_hash[:classes] = locals_hash[:classes].split.join(' ') if locals_hash[:classes]
15
+ namespace = OpenStruct.new(locals_hash)
16
+ template_html = File.read(File.expand_path("../../../core/templates/#{file}.html.erb", __dir__))
17
+ ERB.new(template_html).result(namespace.instance_eval { binding })
18
+ end
19
+
20
+ def each_node(css_lookup, &blk)
21
+ # sort by youngest child and traverse backwards up the tree
22
+ doc.css(css_lookup).sort_by { |n| n.ancestors.size }.reverse!.each(&blk)
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,22 @@
1
+ module BootstrapEmail
2
+ module Component
3
+ class Body < Base
4
+ def build
5
+ each_node('body') do |node|
6
+ node.replace('<body>' + preview_text.to_s + template('body', classes: "#{node['class']} body", contents: node.inner_html) + '</body>')
7
+ end
8
+ end
9
+
10
+ def preview_text
11
+ preview_node = doc.at_css('preview')
12
+ return if preview_node.nil?
13
+
14
+ # apply spacing after the text max of 100 characters so it doesn't show body text
15
+ preview_node.content += '&nbsp;' * [(100 - preview_node.content.length.to_i), 0].max
16
+ node = template('div', classes: 'preview', contents: preview_node.content)
17
+ preview_node.remove
18
+ node
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,11 @@
1
+ module BootstrapEmail
2
+ module Component
3
+ class Button < Base
4
+ def build
5
+ each_node('.btn') do |node|
6
+ node.replace(template('table', classes: node['class'], contents: node.delete('class') && node.to_html))
7
+ end
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,14 @@
1
+ module BootstrapEmail
2
+ module Component
3
+ class Card < Base
4
+ def build
5
+ each_node('.card') do |node|
6
+ node.replace(template('table', classes: node['class'], contents: node.delete('class') && node.inner_html))
7
+ end
8
+ each_node('.card-body') do |node|
9
+ node.replace(template('table', classes: node['class'], contents: node.delete('class') && node.inner_html))
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,13 @@
1
+ module BootstrapEmail
2
+ module Component
3
+ class Color < Base
4
+ def build
5
+ each_node('*[class*=bg-]') do |node|
6
+ next unless ['div'].include?(node.name) # only do automatic thing for div
7
+
8
+ node.replace(template('table', classes: "#{node['class']} w-full", contents: node.delete('class') && node.inner_html))
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,14 @@
1
+ module BootstrapEmail
2
+ module Component
3
+ class Container < Base
4
+ def build
5
+ each_node('.container') do |node|
6
+ node.replace(template('container', classes: node['class'], contents: node.inner_html))
7
+ end
8
+ each_node('.container-fluid') do |node|
9
+ node.replace(template('table', classes: node['class'], contents: node.inner_html))
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,14 @@
1
+ module BootstrapEmail
2
+ module Component
3
+ class Grid < Base
4
+ def build
5
+ each_node('.row') do |node|
6
+ node.replace(template('row', classes: node['class'], contents: node.inner_html))
7
+ end
8
+ each_node('*[class*=col]') do |node|
9
+ node.replace(template('col', classes: node['class'], contents: node.inner_html))
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,12 @@
1
+ module BootstrapEmail
2
+ module Component
3
+ class Hr < Base
4
+ def build
5
+ each_node('hr') do |node|
6
+ default_margin = node['class'].to_s.match?(/m[tby]{1}-(lg-)?\d+/) ? '' : 'my-5'
7
+ node.replace(template('table', classes: "#{default_margin} hr #{node['class']}", contents: ''))
8
+ end
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,22 @@
1
+ module BootstrapEmail
2
+ module Component
3
+ class Margin < Base
4
+ def build
5
+ each_node('*[class*=my-], *[class*=mt-], *[class*=mb-]') do |node|
6
+ top_class = node['class'][/m[ty]{1}-(lg-)?(\d+)/]
7
+ bottom_class = node['class'][/m[by]{1}-(lg-)?(\d+)/]
8
+ node['class'] = node['class'].gsub(/(m[tby]{1}-(lg-)?\d+)/, '')
9
+ html = ''
10
+ if top_class
11
+ html += template('div', classes: "s-#{top_class.gsub(/m[ty]{1}-/, '')}", contents: nil)
12
+ end
13
+ html += node.to_html
14
+ if bottom_class
15
+ html += template('div', classes: "s-#{bottom_class.gsub(/m[by]{1}-/, '')}", contents: nil)
16
+ end
17
+ node.replace(html)
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,16 @@
1
+ module BootstrapEmail
2
+ module Component
3
+ class Padding < Base
4
+ def build
5
+ each_node('*[class*=p-], *[class*=pt-], *[class*=pr-], *[class*=pb-], *[class*=pl-], *[class*=px-], *[class*=py-]') do |node|
6
+ next if ['table', 'td', 'a'].include?(node.name)
7
+
8
+ padding_regex = /(p[trblxy]?-\d+)/
9
+ classes = node['class'].scan(padding_regex).join(' ')
10
+ node['class'] = node['class'].gsub(padding_regex, '')
11
+ node.replace(template('table', classes: classes, contents: node.to_html))
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,24 @@
1
+ module BootstrapEmail
2
+ module Component
3
+ class Paragraph < Base
4
+ def build
5
+ each_node('p') do |node|
6
+ next if margin?(node) || space_y?(node)
7
+
8
+ node['class'] ||= ''
9
+ node['class'] += 'mb-4'
10
+ end
11
+ end
12
+
13
+ private
14
+
15
+ def margin?(node)
16
+ node['class'].to_s.match?(/m[tby]{1}-(lg-)?\d+/)
17
+ end
18
+
19
+ def space_y?(node)
20
+ node.parent['class'].to_s.match?(/space-y-(lg-)?\d+/)
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,11 @@
1
+ module BootstrapEmail
2
+ module Component
3
+ class Spacer < Base
4
+ def build
5
+ each_node('*[class*=s-]') do |node|
6
+ node.replace(template('table', classes: "#{node['class']} w-full", contents: '&nbsp;'))
7
+ end
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,18 @@
1
+ module BootstrapEmail
2
+ module Component
3
+ class Spacing < Base
4
+ def build
5
+ each_node('*[class*=space-y-]') do |node|
6
+ spacer = node['class'].scan(/space-y-((lg-)?\d+)/)[0][0]
7
+ # get all direct children except the first
8
+ node.xpath('./*[position()>1] | ./tbody/tr/td/*[position()>1]').each do |child|
9
+ html = ''
10
+ html += template('div', classes: "s-#{spacer}", contents: nil)
11
+ html += child.to_html
12
+ child.replace(html)
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,13 @@
1
+ module BootstrapEmail
2
+ module Component
3
+ class Table < Base
4
+ def build
5
+ each_node('table') do |node|
6
+ node['border'] = 0
7
+ node['cellpadding'] = 0
8
+ node['cellspacing'] = 0
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1 @@
1
+ Premailer::Adapter.use = :nokogiri_fast
@@ -0,0 +1,10 @@
1
+ ActiveSupport.on_load(:action_mailer, {yield: true}) do |action_mailer|
2
+ action_mailer.class_eval do # To support Rails less than 6
3
+ # sit in the middle and compile the html
4
+ def bootstrap_mail(*args, &block)
5
+ bootstrap = BootstrapEmail::Compiler.new(mail(*args, &block), type: :rails)
6
+ bootstrap.perform_full_compile
7
+ end
8
+ alias make_bootstrap_mail bootstrap_mail
9
+ end
10
+ end
@@ -0,0 +1,47 @@
1
+ module BootstrapEmail
2
+ class SassCache
3
+ CACHE_DIR = File.expand_path('../../.sass-cache', __dir__)
4
+ SASS_DIR = File.expand_path('../../core', __dir__)
5
+
6
+ def self.compile(name, config_path: nil, style: :compressed)
7
+ path = "#{SASS_DIR}/#{name}"
8
+ config_file = nil
9
+
10
+ lookup_locations = ["#{name}.config.scss", "app/assets/stylesheets/#{name}.config.scss"]
11
+ locations = lookup_locations.select { |location| File.exist?(File.expand_path(location, Dir.pwd)) }
12
+
13
+ if config_path && File.exist?(config_path)
14
+ # check if custom config was passed in
15
+ config_file = File.read(config_path)
16
+ elsif locations.any?
17
+ config_file = File.read(File.expand_path(locations.first, Dir.pwd))
18
+ end
19
+
20
+ check = checksum(config_file&.gsub("//= @import #{name};", "@import '#{path}';"))
21
+ cache_path = "#{CACHE_DIR}/#{check}/#{name}.css"
22
+ if cached?(cache_path)
23
+ File.read(cache_path)
24
+ else
25
+ file = config_file.nil? ? File.read("#{path}.scss") : config_file
26
+ SassC::Engine.new(file, style: style).render.tap do |css|
27
+ Dir.mkdir(CACHE_DIR) unless File.directory?(CACHE_DIR)
28
+ Dir.mkdir("#{CACHE_DIR}/#{check}") unless File.directory?("#{CACHE_DIR}/#{check}")
29
+ File.write(cache_path, css)
30
+ puts "New css file cached for #{name}"
31
+ end
32
+ end
33
+ end
34
+
35
+ def self.checksum(config_file)
36
+ checksums = config_file.nil? ? [] : [Digest::SHA1.hexdigest(config_file)]
37
+ Dir.glob('../../core/**/*.scss', base: __dir__).each do |path|
38
+ checksums << Digest::SHA1.file(File.expand_path(path, __dir__)).hexdigest
39
+ end
40
+ Digest::SHA1.hexdigest(checksums.join)
41
+ end
42
+
43
+ def self.cached?(cache_path)
44
+ File.file?(cache_path)
45
+ end
46
+ end
47
+ end
@@ -1,7 +1,5 @@
1
1
  module BootstrapEmail
2
- module Rails
3
- VERSION = File.read(
4
- File.expand_path('../../VERSION', __dir__)
5
- ).strip
6
- end
2
+ VERSION = File.read(
3
+ File.expand_path('../../VERSION', __dir__)
4
+ ).strip.freeze
7
5
  end
@@ -0,0 +1,26 @@
1
+ require 'nokogiri'
2
+ require 'erb'
3
+ require 'ostruct'
4
+ require 'premailer'
5
+ require 'sassc'
6
+ require 'digest/sha1'
7
+ require 'css_parser'
8
+
9
+ begin
10
+ require 'rails'
11
+ rescue LoadError; end
12
+
13
+ if defined?(Rails)
14
+ require 'action_mailer'
15
+ end
16
+
17
+ require_relative 'bootstrap-email/initialize'
18
+ require_relative 'bootstrap-email/compiler'
19
+ require_relative 'bootstrap-email/sass_cache'
20
+ require_relative 'bootstrap-email/version'
21
+ Dir[File.join(__dir__, 'bootstrap-email/components', '*.rb')].each { |file| require_relative file }
22
+
23
+ if defined?(Rails)
24
+ require_relative 'bootstrap-email/rails/action_mailer'
25
+ require_relative 'bootstrap-email/rails/engine'
26
+ end
metadata CHANGED
@@ -1,29 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bootstrap-email
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 1.0.0.alpha1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stuart Yamartino
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-12-02 00:00:00.000000000 Z
11
+ date: 2021-01-25 00:00:00.000000000 Z
12
12
  dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: actionmailer
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - ">="
18
- - !ruby/object:Gem::Version
19
- version: '3'
20
- type: :runtime
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - ">="
25
- - !ruby/object:Gem::Version
26
- version: '3'
27
13
  - !ruby/object:Gem::Dependency
28
14
  name: nokogiri
29
15
  requirement: !ruby/object:Gem::Requirement
@@ -39,100 +25,126 @@ dependencies:
39
25
  - !ruby/object:Gem::Version
40
26
  version: '1.6'
41
27
  - !ruby/object:Gem::Dependency
42
- name: premailer-rails
28
+ name: premailer
43
29
  requirement: !ruby/object:Gem::Requirement
44
30
  requirements:
45
31
  - - "~>"
46
32
  - !ruby/object:Gem::Version
47
- version: '1.9'
33
+ version: '1.14'
48
34
  type: :runtime
49
35
  prerelease: false
50
36
  version_requirements: !ruby/object:Gem::Requirement
51
37
  requirements:
52
38
  - - "~>"
53
39
  - !ruby/object:Gem::Version
54
- version: '1.9'
40
+ version: '1.14'
55
41
  - !ruby/object:Gem::Dependency
56
- name: rails
42
+ name: sassc
57
43
  requirement: !ruby/object:Gem::Requirement
58
44
  requirements:
59
- - - ">="
45
+ - - "~>"
60
46
  - !ruby/object:Gem::Version
61
- version: '3'
47
+ version: '2.4'
62
48
  type: :runtime
63
49
  prerelease: false
64
50
  version_requirements: !ruby/object:Gem::Requirement
65
51
  requirements:
66
- - - ">="
52
+ - - "~>"
67
53
  - !ruby/object:Gem::Version
68
- version: '3'
69
- description:
70
- email: stuartyamartino@gmail.com
71
- executables: []
54
+ version: '2.4'
55
+ description:
56
+ email: stu@stuyam.com
57
+ executables:
58
+ - bootstrap-email
72
59
  extensions: []
73
60
  extra_rdoc_files: []
74
61
  files:
75
62
  - VERSION
63
+ - bin/bootstrap-email
76
64
  - core/bootstrap-email.scss
77
- - core/head.scss
78
- - core/sass/_alert.scss
79
- - core/sass/_badge.scss
80
- - core/sass/_border.scss
81
- - core/sass/_button.scss
82
- - core/sass/_card.scss
83
- - core/sass/_color.scss
84
- - core/sass/_container.scss
85
- - core/sass/_display.scss
86
- - core/sass/_functions.scss
87
- - core/sass/_grid.scss
88
- - core/sass/_hr.scss
89
- - core/sass/_image.scss
90
- - core/sass/_preview.scss
91
- - core/sass/_reboot_email.scss
92
- - core/sass/_spacing.scss
93
- - core/sass/_table.scss
94
- - core/sass/_typography.scss
95
- - core/sass/_variables.scss
96
- - core/template.html.erb
97
- - core/templates/align-center.html.erb
98
- - core/templates/align-left.html.erb
99
- - core/templates/align-right.html.erb
65
+ - core/bootstrap-head.scss
66
+ - core/layout.html.erb
67
+ - core/scss/_colors.scss
68
+ - core/scss/_functions.scss
69
+ - core/scss/_helper_groups.scss
70
+ - core/scss/_reboot_email.scss
71
+ - core/scss/_selectors_for_utils.scss
72
+ - core/scss/_utilities.scss
73
+ - core/scss/_variables.scss
74
+ - core/scss/components/_alert.scss
75
+ - core/scss/components/_badge.scss
76
+ - core/scss/components/_button.scss
77
+ - core/scss/components/_card.scss
78
+ - core/scss/components/_container.scss
79
+ - core/scss/components/_grid.scss
80
+ - core/scss/components/_hr.scss
81
+ - core/scss/components/_image.scss
82
+ - core/scss/components/_preview.scss
83
+ - core/scss/components/_table.scss
84
+ - core/scss/utilities/_background.scss
85
+ - core/scss/utilities/_border-radius.scss
86
+ - core/scss/utilities/_border.scss
87
+ - core/scss/utilities/_color.scss
88
+ - core/scss/utilities/_display.scss
89
+ - core/scss/utilities/_sizing.scss
90
+ - core/scss/utilities/_spacing.scss
91
+ - core/scss/utilities/_text-decoration.scss
92
+ - core/scss/utilities/_typography.scss
100
93
  - core/templates/body.html.erb
101
94
  - core/templates/col.html.erb
102
95
  - core/templates/container.html.erb
103
96
  - core/templates/div.html.erb
104
- - core/templates/hr.html.erb
105
97
  - core/templates/row.html.erb
106
98
  - core/templates/table-left.html.erb
107
99
  - core/templates/table.html.erb
108
- - lib/assets/stylesheets/bootstrap-email.scss
109
- - lib/bootstrap-email.rb
110
- - lib/bootstrap-email/action_mailer.rb
111
- - lib/bootstrap-email/engine.rb
112
- - lib/bootstrap-email/premailer_railtie.rb
100
+ - lib/bootstrap-email/bootstrap_email_cli.rb
101
+ - lib/bootstrap-email/compiler.rb
102
+ - lib/bootstrap-email/components/alert.rb
103
+ - lib/bootstrap-email/components/align.rb
104
+ - lib/bootstrap-email/components/badge.rb
105
+ - lib/bootstrap-email/components/base.rb
106
+ - lib/bootstrap-email/components/body.rb
107
+ - lib/bootstrap-email/components/button.rb
108
+ - lib/bootstrap-email/components/card.rb
109
+ - lib/bootstrap-email/components/color.rb
110
+ - lib/bootstrap-email/components/container.rb
111
+ - lib/bootstrap-email/components/grid.rb
112
+ - lib/bootstrap-email/components/hr.rb
113
+ - lib/bootstrap-email/components/margin.rb
114
+ - lib/bootstrap-email/components/padding.rb
115
+ - lib/bootstrap-email/components/paragraph.rb
116
+ - lib/bootstrap-email/components/spacer.rb
117
+ - lib/bootstrap-email/components/spacing.rb
118
+ - lib/bootstrap-email/components/table.rb
119
+ - lib/bootstrap-email/initialize.rb
120
+ - lib/bootstrap-email/rails/action_mailer.rb
121
+ - lib/bootstrap-email/rails/engine.rb
122
+ - lib/bootstrap-email/sass_cache.rb
113
123
  - lib/bootstrap-email/version.rb
124
+ - lib/bootstrap_email.rb
114
125
  homepage: https://bootstrapemail.com
115
126
  licenses:
116
127
  - MIT
117
128
  metadata: {}
118
- post_install_message:
129
+ post_install_message:
119
130
  rdoc_options: []
120
131
  require_paths:
121
132
  - lib
122
133
  required_ruby_version: !ruby/object:Gem::Requirement
123
134
  requirements:
124
- - - "~>"
135
+ - - ">="
125
136
  - !ruby/object:Gem::Version
126
137
  version: '2.0'
127
138
  required_rubygems_version: !ruby/object:Gem::Requirement
128
139
  requirements:
129
- - - ">="
140
+ - - ">"
130
141
  - !ruby/object:Gem::Version
131
- version: '0'
142
+ version: 1.3.1
132
143
  requirements: []
133
144
  rubygems_version: 3.0.3
134
- signing_key:
145
+ signing_key:
135
146
  specification_version: 4
136
- summary: Bootstrap 4 stylesheet, compiler, and inliner for responsive and consistent
137
- emails with the Bootstrap syntax you know and love.
147
+ summary: 'Bootstrap 5 stylesheet, compiler, and inliner for responsive and consistent
148
+ emails with the Bootstrap syntax you know and love. Support: command line, ruby,
149
+ rails'
138
150
  test_files: []