fl 0.3.0

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 (137) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +44 -0
  3. data/Gemfile +5 -0
  4. data/Gemfile.lock +173 -0
  5. data/README.md +30 -0
  6. data/Rakefile +2 -0
  7. data/app/admin/options.rb +46 -0
  8. data/app/admin/pages.rb +55 -0
  9. data/app/admin/users.rb +34 -0
  10. data/app/assets/javascripts/active_admin.coffee.erb +20 -0
  11. data/app/assets/javascripts/application.coffee.erb +40 -0
  12. data/app/assets/javascripts/ckeditor/basepath.coffee.erb +21 -0
  13. data/app/assets/javascripts/ckeditor/config.coffee.erb +146 -0
  14. data/app/assets/javascripts/ckeditor/plugins/autogrow/plugin.js +232 -0
  15. data/app/assets/javascripts/ckeditor/plugins/autogrow/samples/autogrow.html +102 -0
  16. data/app/assets/javascripts/ckeditor/plugins/stylesheetparser/plugin.js +158 -0
  17. data/app/assets/javascripts/ckeditor/plugins/stylesheetparser/samples/assets/sample.css +70 -0
  18. data/app/assets/javascripts/ckeditor/plugins/stylesheetparser/samples/stylesheetparser.html +85 -0
  19. data/app/assets/javascripts/ckeditor/skins/minimalist/dialog.css +5 -0
  20. data/app/assets/javascripts/ckeditor/skins/minimalist/dialog_ie.css +5 -0
  21. data/app/assets/javascripts/ckeditor/skins/minimalist/dialog_ie7.css +5 -0
  22. data/app/assets/javascripts/ckeditor/skins/minimalist/dialog_ie8.css +5 -0
  23. data/app/assets/javascripts/ckeditor/skins/minimalist/dialog_iequirks.css +5 -0
  24. data/app/assets/javascripts/ckeditor/skins/minimalist/editor.css +5 -0
  25. data/app/assets/javascripts/ckeditor/skins/minimalist/editor_gecko.css +5 -0
  26. data/app/assets/javascripts/ckeditor/skins/minimalist/editor_ie.css +5 -0
  27. data/app/assets/javascripts/ckeditor/skins/minimalist/editor_ie7.css +5 -0
  28. data/app/assets/javascripts/ckeditor/skins/minimalist/editor_ie8.css +5 -0
  29. data/app/assets/javascripts/ckeditor/skins/minimalist/editor_iequirks.css +5 -0
  30. data/app/assets/javascripts/ckeditor/skins/minimalist/icons.png +0 -0
  31. data/app/assets/javascripts/ckeditor/skins/minimalist/icons_hidpi.png +0 -0
  32. data/app/assets/javascripts/ckeditor/skins/minimalist/images/arrow.png +0 -0
  33. data/app/assets/javascripts/ckeditor/skins/minimalist/images/close.png +0 -0
  34. data/app/assets/javascripts/ckeditor/skins/minimalist/images/hidpi/close.png +0 -0
  35. data/app/assets/javascripts/ckeditor/skins/minimalist/images/hidpi/lock-open.png +0 -0
  36. data/app/assets/javascripts/ckeditor/skins/minimalist/images/hidpi/lock.png +0 -0
  37. data/app/assets/javascripts/ckeditor/skins/minimalist/images/hidpi/refresh.png +0 -0
  38. data/app/assets/javascripts/ckeditor/skins/minimalist/images/lock-open.png +0 -0
  39. data/app/assets/javascripts/ckeditor/skins/minimalist/images/lock.png +0 -0
  40. data/app/assets/javascripts/ckeditor/skins/minimalist/images/refresh.png +0 -0
  41. data/app/assets/javascripts/ckeditor/skins/minimalist/readme.md +7 -0
  42. data/app/assets/javascripts/ckeditor/skins/minimalist/skin.js +10 -0
  43. data/app/assets/javascripts/ckeditor/skins/moonocolor/dialog.css +5 -0
  44. data/app/assets/javascripts/ckeditor/skins/moonocolor/dialog_ie.css +5 -0
  45. data/app/assets/javascripts/ckeditor/skins/moonocolor/dialog_ie7.css +5 -0
  46. data/app/assets/javascripts/ckeditor/skins/moonocolor/dialog_ie8.css +5 -0
  47. data/app/assets/javascripts/ckeditor/skins/moonocolor/dialog_iequirks.css +5 -0
  48. data/app/assets/javascripts/ckeditor/skins/moonocolor/editor.css +5 -0
  49. data/app/assets/javascripts/ckeditor/skins/moonocolor/editor_gecko.css +5 -0
  50. data/app/assets/javascripts/ckeditor/skins/moonocolor/editor_ie.css +5 -0
  51. data/app/assets/javascripts/ckeditor/skins/moonocolor/editor_ie7.css +5 -0
  52. data/app/assets/javascripts/ckeditor/skins/moonocolor/editor_ie8.css +5 -0
  53. data/app/assets/javascripts/ckeditor/skins/moonocolor/editor_iequirks.css +5 -0
  54. data/app/assets/javascripts/ckeditor/skins/moonocolor/icons.png +0 -0
  55. data/app/assets/javascripts/ckeditor/skins/moonocolor/icons_hidpi.png +0 -0
  56. data/app/assets/javascripts/ckeditor/skins/moonocolor/images/arrow.png +0 -0
  57. data/app/assets/javascripts/ckeditor/skins/moonocolor/images/close.png +0 -0
  58. data/app/assets/javascripts/ckeditor/skins/moonocolor/images/hidpi/close.png +0 -0
  59. data/app/assets/javascripts/ckeditor/skins/moonocolor/images/hidpi/lock-open.png +0 -0
  60. data/app/assets/javascripts/ckeditor/skins/moonocolor/images/hidpi/lock.png +0 -0
  61. data/app/assets/javascripts/ckeditor/skins/moonocolor/images/hidpi/refresh.png +0 -0
  62. data/app/assets/javascripts/ckeditor/skins/moonocolor/images/lock-open.png +0 -0
  63. data/app/assets/javascripts/ckeditor/skins/moonocolor/images/lock.png +0 -0
  64. data/app/assets/javascripts/ckeditor/skins/moonocolor/images/refresh.png +0 -0
  65. data/app/assets/javascripts/ckeditor/skins/moonocolor/images/spinner.gif +0 -0
  66. data/app/assets/javascripts/ckeditor/skins/moonocolor/readme.md +51 -0
  67. data/app/assets/javascripts/ckeditor/skins/moonocolor/skin.js +10 -0
  68. data/app/assets/javascripts/components/confirm.coffee +51 -0
  69. data/app/assets/javascripts/components/modals.coffee +29 -0
  70. data/app/assets/stylesheets/_defaults.yml +106 -0
  71. data/app/assets/stylesheets/_functions.sass.erb +75 -0
  72. data/app/assets/stylesheets/active_admin.sass +117 -0
  73. data/app/assets/stylesheets/application.sass.erb +46 -0
  74. data/app/assets/stylesheets/styles/reset.sass +139 -0
  75. data/app/assets/stylesheets/styles/structure.sass +69 -0
  76. data/app/assets/stylesheets/styles/ui/flash.sass +128 -0
  77. data/app/assets/stylesheets/styles/ui/fonts.sass +32 -0
  78. data/app/assets/stylesheets/styles/ui/modals.sass +61 -0
  79. data/app/assets/stylesheets/styles/ui/tooltips.sass +139 -0
  80. data/app/controllers/application_controller.rb +87 -0
  81. data/app/helpers/fl/application_helper.rb +53 -0
  82. data/app/helpers/fl/asset_helper.rb +50 -0
  83. data/app/helpers/fl/liquid_helper.rb +29 -0
  84. data/app/helpers/fl/meta_helper.rb +118 -0
  85. data/app/lib/active_record/concerns/base.rb +55 -0
  86. data/app/lib/active_record/concerns/seeds.rb +78 -0
  87. data/app/liquid/filters/meta_filter.rb +6 -0
  88. data/app/liquid/tags/google_analytics_tag.rb +32 -0
  89. data/app/liquid/tags/icon_tag.rb +37 -0
  90. data/app/liquid/tags/meta_tag.rb +120 -0
  91. data/app/mailers/application_mailer.rb +28 -0
  92. data/app/models/application_record.rb +3 -0
  93. data/app/models/asset.rb +95 -0
  94. data/app/models/association.rb +21 -0
  95. data/app/models/meta.rb +27 -0
  96. data/app/models/node.rb +59 -0
  97. data/app/models/profile.rb +49 -0
  98. data/app/models/user.rb +49 -0
  99. data/app/service/flash.rb +8 -0
  100. data/app/views/layouts/_admin.haml +6 -0
  101. data/app/views/layouts/_application.haml +17 -0
  102. data/app/views/layouts/base.haml +26 -0
  103. data/app/views/mailers/layouts/mailer.haml +8 -0
  104. data/app/views/mailers/layouts/mailer.text.erb +1 -0
  105. data/app/views/mailers/new_user.erb +4 -0
  106. data/bin/console +14 -0
  107. data/bin/setup +8 -0
  108. data/config/initializers/active_admin.rb +266 -0
  109. data/config/initializers/ckeditor.rb +63 -0
  110. data/config/initializers/devise.rb +279 -0
  111. data/config/initializers/friendly_id.rb +92 -0
  112. data/config/initializers/inflections.rb +20 -0
  113. data/config/initializers/liquid.rb +87 -0
  114. data/config/initializers/sass.rb +45 -0
  115. data/config/locales/devise.en.yml +62 -0
  116. data/config/locales/en.yml +13 -0
  117. data/config/puma.rb +59 -0
  118. data/config/routes.rb +56 -0
  119. data/db/migrate/20160616060637_create_nodes.rb +26 -0
  120. data/db/migrate/20160707080248_create_users.rb +52 -0
  121. data/db/migrate/20160707094704_create_slugs.rb +33 -0
  122. data/db/migrate/20160710095916_create_associations.rb +20 -0
  123. data/db/migrate/20160713061948_create_profiles.rb +27 -0
  124. data/db/migrate/20161115101221_create_assets.rb +25 -0
  125. data/db/migrate/20170725060408_create_active_admin_comments.rb +22 -0
  126. data/db/seeds.rb +81 -0
  127. data/fl.gemspec +73 -0
  128. data/lib/fl.rb +28 -0
  129. data/lib/fl/constants.rb +52 -0
  130. data/lib/fl/engine.rb +160 -0
  131. data/lib/fl/hash.rb +34 -0
  132. data/lib/generators/fl/sass_vars_generator.rb +16 -0
  133. data/lib/generators/fl/templates/sass.yml +56 -0
  134. data/lib/tasks/ckeditor.rake +37 -0
  135. data/lib/tasks/favicon.rake +37 -0
  136. data/readme/fl.jpg +0 -0
  137. metadata +416 -0
@@ -0,0 +1,139 @@
1
+ /////////////////////////////////////////////
2
+ /////////////////////////////////////////////
3
+ // _____ _ _ _ //
4
+ // |_ _| | | | (_) //
5
+ // | | ___ ___ | | |_ _ _ __ //
6
+ // | |/ _ \ / _ \| | __| | '_ \ //
7
+ // | | (_) | (_) | | |_| | |_) | //
8
+ // \_/\___/ \___/|_|\__|_| .__/ //
9
+ // | | //
10
+ // |_| //
11
+ /////////////////////////////////////////////
12
+ /////////////////////////////////////////////
13
+
14
+ /// Last updated 14/08/2017
15
+ /// Bootstrap 4.0.0.beta
16
+ /// R.Peck
17
+
18
+ // Functions
19
+ // Required unless called from gem (which calls functions in application)
20
+ @import functions
21
+
22
+ /////////////////////////////////////////////
23
+ /////////////////////////////////////////////
24
+ // Tooltip
25
+ .tooltip
26
+
27
+ //Animation (from Animate.css)
28
+ animation:
29
+ name: fadeIn
30
+ duration: ($animation-duration * 1.5)
31
+ fill-mode: both
32
+
33
+ // Styling
34
+ color: $tooltip-color
35
+ position: absolute
36
+ display: block
37
+ cursor: $base-cursor-default
38
+ padding: $tooltip-padding
39
+ background:
40
+ color: $tooltip-bg
41
+ line:
42
+ height: 1.5em
43
+ text:
44
+ align: $tooltip-text-align
45
+ decoration: $tooltip-text-decoration
46
+ shadow: $tooltip-text-shadow
47
+ transform: $tooltip-text-transform
48
+ white:
49
+ space: normal
50
+ word:
51
+ break: normal
52
+ spacing: normal
53
+ wrap: ellipsis
54
+ font:
55
+ size: $tooltip-font-size
56
+ weight: $tooltip-font-weight
57
+ border:
58
+ width: $tooltip-border-width
59
+ style: $tooltip-border-style
60
+ color: $tooltip-border-color
61
+ radius: $tooltip-border-radius
62
+ box:
63
+ sizing: border-box
64
+ shadow: $tooltip-inner-shadow, $tooltip-outer-shadow
65
+ z:
66
+ index: 1500
67
+ user:
68
+ select: none
69
+
70
+ /////////////////////
71
+
72
+ &:hover
73
+ cursor: $base-cursor-default
74
+
75
+ /////////////////////
76
+ /////////////////////
77
+
78
+ // Show
79
+ .show
80
+ opacity: $tooltip-opacity
81
+
82
+ /////////////////////
83
+
84
+ // Arrow
85
+ .arrow
86
+ display: block
87
+ position: absolute
88
+ border:
89
+ style: solid
90
+ color: transparent
91
+ box:
92
+ sizing: border-box
93
+
94
+ /////////////////////
95
+ /////////////////////
96
+
97
+ @each $pos in top, right, bottom, left
98
+
99
+ $opposite: opposite($pos)
100
+ $margin: axis($pos,"top","left")
101
+ $arrow: axis($pos,"left","top")
102
+
103
+ &.bs-tooltip-#{$pos}
104
+ background:
105
+ image: linear-gradient(to #{$opposite}, rgba(0,0,0,0.6) 0%, rgba(0,0,0,0) 100%)
106
+ margin:
107
+ #{$opposite}: $tooltip-arrow-width
108
+ .arrow
109
+ #{$opposite}: (-$tooltip-arrow-width)
110
+ border:
111
+ width: $tooltip-arrow-width
112
+ #{$pos}-color: $tooltip-bg
113
+ #{$opposite}-width: 0 !important
114
+
115
+ /////////////////////
116
+ /////////////////////
117
+
118
+ // Auto
119
+ &.bs-tooltip-auto
120
+ @each $pos in top, right, bottom, left
121
+ &[x-placement^="#{$pos}"]
122
+ @extend .bs-tooltip-#{$pos}
123
+
124
+ /////////////////////////////////////////////
125
+ /////////////////////////////////////////////
126
+
127
+ // Arrows
128
+ .tooltip-inner
129
+ overflow: hidden
130
+ width: 100%
131
+ max:
132
+ width: $tooltip-max-width
133
+ text:
134
+ overflow: ellipsis
135
+ white:
136
+ space: nowrap
137
+
138
+ /////////////////////////////////////////////
139
+ /////////////////////////////////////////////
@@ -0,0 +1,87 @@
1
+ class ApplicationController < ActionController::Base
2
+
3
+ ##################################
4
+ ##################################
5
+
6
+ # => Responders Gem
7
+ respond_to :html
8
+
9
+ ##################################
10
+ ##################################
11
+
12
+ # => Settings
13
+ # Header & Footer content defined in ApplicationHelper
14
+ protect_from_forgery with: :exception
15
+
16
+ # => Layout
17
+ layout Proc.new { |c| Rails.application.secrets[:app][:layout] unless c.request.xhr? }
18
+
19
+ ##################################
20
+ ##################################
21
+
22
+ # => Specific page content
23
+ # => All slugrouter requests passed here (including root)
24
+ # => Liquid ref - https://github.com/Shopify/liquid/wiki/Liquid-for-Programmers#first-steps
25
+ # => If not using bang operator in find, use || "No Content"
26
+ def show
27
+ raise ActionController::RoutingError.new('Not Found') if params[:id] == "index"
28
+ @content = Node.find_by_slug! params[:id] || "index"
29
+ end
30
+
31
+ ##################################
32
+ # => Auth
33
+ ##################################
34
+
35
+ # => New
36
+ def new
37
+ @content = Node.new
38
+ respond_with @content
39
+ end
40
+
41
+ # => Create
42
+ def create
43
+ @content = Node.new node_params
44
+ respond_with @content, location: -> { application_path(@content) }
45
+ end
46
+
47
+ # => Update
48
+ def update
49
+ @content = Node.find_by_slug! params[:id]
50
+ respond_with @content, location: -> { application_path(@content) }
51
+ end
52
+
53
+ ##################################
54
+ ##################################
55
+
56
+ # => Robots.txt
57
+ # => http://api.rubyonrails.org/classes/ActionController/ConditionalGet.html#method-i-expires_in
58
+ def robots
59
+ expires_in 5.hours, public: true
60
+ render plain: "User-agent: *"
61
+ end
62
+
63
+ ##################################
64
+ ##################################
65
+
66
+ private
67
+
68
+ # => Devise
69
+ # => Sign In
70
+ def after_sign_in_path_for(resource)
71
+ Rails.application.routes.named_routes[:admin_root] ? admin_root_path : root_path
72
+ end
73
+
74
+ # => Devise
75
+ # => Sign Out
76
+ def after_sign_out_path_for(resource_or_scope)
77
+ root_path
78
+ end
79
+
80
+ # => Params
81
+ def node_params
82
+ params.require(:node).permit(:ref, :val)
83
+ end
84
+
85
+ ##################################
86
+
87
+ end
@@ -0,0 +1,53 @@
1
+ module FL
2
+ module ApplicationHelper
3
+
4
+ ##########################
5
+ ##########################
6
+
7
+ # => Current Layout
8
+ # => Need to pass some sort of object to it, otherwise fails
9
+ # => http://stackoverflow.com/questions/22787021/rails-4-name-of-current-layout
10
+ def current_layout
11
+ layout = controller.send :_layout, ["test"]
12
+ layout.inspect.split("/").last.gsub(/.haml/,"").tr('"', '')
13
+ end
14
+
15
+ # => Admin?
16
+ # => Checks for namespace
17
+ # => http://stackoverflow.com/a/15028731/1143732 (comment)
18
+ # => Devise should be "devise_controller?"
19
+ def admin?
20
+ defined? Admin and controller.class.parents.include? Admin
21
+ defined? Devise and controller.class.parents.include? Devise
22
+ end
23
+
24
+ # => Icons
25
+ def i *args
26
+ gem_name = 'font-awesome-rails'
27
+ gdep = Gem::Dependency.new(gem_name)
28
+ gdep.matching_specs.max_by(&:version) ? fa_icon(*args) : ion_icon(*args)
29
+ end
30
+
31
+ ##########################
32
+ ##########################
33
+
34
+ ## Devise ##
35
+ def resource_name
36
+ :user
37
+ end
38
+
39
+ ## Class ##
40
+ def resource
41
+ @resource ||= User.new
42
+ end
43
+
44
+ ## Mappings ##
45
+ def devise_mapping
46
+ @devise_mapping ||= Devise.mappings[:user]
47
+ end
48
+
49
+ ##########################
50
+ ##########################
51
+
52
+ end
53
+ end
@@ -0,0 +1,50 @@
1
+ module FL
2
+ module AssetHelper
3
+
4
+ ##########################
5
+ ##########################
6
+
7
+ # => Sass
8
+ def sass hash
9
+ self.sass hash
10
+ end
11
+
12
+ ##########################
13
+ ##########################
14
+
15
+ # => Sass
16
+ # => Takes HASH or YML and turns into SASS vars
17
+ # => Used in config/initializers/sass.rb & assets/stylesheets/application.sass.erb
18
+ def self.sass hash, default=false
19
+ vars = {}
20
+
21
+ # Cycle through data
22
+ # Recursion handled by "each_nested_pair"
23
+ # Here you determine the best parts
24
+
25
+ # Determine if hash is hash or path
26
+ # If path change into hash by loading YML
27
+ hash = YAML.load_file(hash) if hash.is_a?(String) || hash.is_a?(Pathname) # => Needs some sort of rescue
28
+
29
+ # General
30
+ # http://api.rubyonrails.org/classes/Hash.html#method-i-except
31
+ hash.except("development", "production", "staging").each_nested_pair do |k,v|
32
+ vars[k] = v if v
33
+ end
34
+
35
+ # Env
36
+ if hash[Rails.env] # => Ensure that there is a key for the env
37
+ hash[Rails.env].each_nested_pair do |k,v|
38
+ vars[k] = v if v
39
+ end
40
+ end
41
+
42
+ # Return
43
+ vars.map{|k,v| "$#{k}: #{v} #{"!default" if default}"}.join("\n")
44
+ end
45
+
46
+ ##########################
47
+ ##########################
48
+
49
+ end
50
+ end
@@ -0,0 +1,29 @@
1
+ module FL
2
+ module LiquidHelper
3
+
4
+ ##########################
5
+ ## Liquid ##
6
+ ##########################
7
+
8
+ # => Liquidize
9
+ def liquidize content, *args
10
+ template = Liquid::Template.parse content
11
+ sanitize template.render
12
+ end
13
+
14
+ ##########################
15
+ ##########################
16
+
17
+ private
18
+
19
+ # => Shortcodes
20
+ def shortcodes
21
+ cache = ActiveSupport::Cache::MemoryStore.new
22
+ cache.read :shortcodes
23
+ end
24
+
25
+ ##########################
26
+ ##########################
27
+
28
+ end
29
+ end
@@ -0,0 +1,118 @@
1
+ module FL
2
+ module MetaHelper
3
+
4
+ ########################################
5
+ ########################################
6
+
7
+ ############
8
+ # Meta #
9
+ ############
10
+
11
+ # Meta
12
+ # => Main meta method
13
+ def meta type, *args
14
+ # js css title link keywords author description [robots googlebot msnbot] favicon
15
+ options = args.join(', ')
16
+
17
+ # Return Values
18
+ #-> SPLAT OPERATOR for multiple "when" cases -- http://stackoverflow.com/a/10197397/1143732
19
+ case type
20
+ when :js, :javascript, :javascripts, :script, :scripts
21
+ javascript_include_tag *args.compact #-> splat operator http://stackoverflow.com/questions/13795627/ruby-send-method-passing-multiple-parameters
22
+ when :css, :stylesheet, :stylesheets
23
+ stylesheet_link_tag *args.compact #-> splat operator http://stackoverflow.com/questions/13795627/ruby-send-method-passing-multiple-parameters
24
+ when :title
25
+ Haml::Engine.new("%title #{options}").render
26
+ when :favicon
27
+ favicon_link_tag
28
+ when :csrf
29
+ csrf_meta_tags
30
+ else
31
+ Haml::Engine.new("%meta{ name: \"#{type}\", content: \"#{options}\" }").render #-> http://stackoverflow.com/questions/9143761/meta-descritpion-in-haml-with-outside-variable
32
+ end
33
+ end
34
+
35
+ ########################################
36
+ ########################################
37
+
38
+ # => Title (needs to be more succinct)
39
+ def title args
40
+ meta :title, args
41
+ end
42
+
43
+ # => CSS
44
+ def css *args
45
+ meta :css, *args
46
+ end
47
+
48
+ # => JS
49
+ def js *args
50
+ meta :js, *args
51
+ end
52
+
53
+ # => CSRF
54
+ def csrf
55
+ meta :csrf
56
+ end
57
+
58
+ ########################################
59
+ ########################################
60
+
61
+ # Robots
62
+ # => http://noarchive.net/meta/
63
+ def robots *args
64
+ # => Blank for all true
65
+
66
+ # => Possible inputs:
67
+ # => { index: true, follow: true, nofollow: false, noindex: false }
68
+ # => :index, :follow, :noindex, :nofollow
69
+ # => "index", "follow", "noindex", "nofollow"
70
+
71
+ # => Inputs
72
+ # => No input = all
73
+ # => If true and false are present, only true is passed
74
+ options = args.extract_options! # => Don't need defaults
75
+
76
+ # => Results
77
+ results = Array.new(2)
78
+ # No options / args = "index, follow"
79
+ # First check for one of the following :index, index: true, noindex: false == "index"
80
+ # Second check for one of the following :follow, follow: true, nofollow: false == "follow"
81
+ # Third check for one of the following :noindex, noindex: true == "noindex"
82
+ # Forth check for one of the following :nofollow, nofollow: true == "nofollow"
83
+ results[0] = "index" if options[:index] || args.include?(:index) || options[:noindex] == false || (options.empty? && args.empty?)
84
+ results[1] = "follow" if options[:follow] || args.include?(:follow) || options[:nofollow] == false || (options.empty? && args.empty?)
85
+ results[0] = "noindex" if (options[:noindex] || args.include?(:noindex) || options[:index] == false) && (!args.include?(:index))
86
+ results[1] = "nofollow" if (options[:nofollow] || args.include?(:nofollow) || options[:follow] == false) && (!args.include?(:follow))
87
+
88
+ results.delete_at(0) if (options[:index] == false) && (options[:index] != true || !args.include?(:index))
89
+ results.delete_at(1) if (options[:follow] == false) && (options[:follow] != true || !args.include?(:follow))
90
+
91
+ # => Return
92
+ # => Options only accepts actual content (array)
93
+ meta :robots, results.compact.join(",") if results.any?
94
+ end
95
+
96
+ # Favicon
97
+ # => https://github.com/audreyr/favicon-cheat-sheet
98
+ # => http://iconhandbook.co.uk/reference/chart/favicons/
99
+ def favicon img="icons/favicon.ico", *args
100
+
101
+ # => Accepts all styles of icon
102
+ defaults = { "apple-touch-icon" => [57,60,72,76,114,120,144,152,167,180], "icon" => [16,32] }
103
+ options = args.extract_options!.merge!(defaults) { |key, v1, v2| v1 }
104
+
105
+ case options
106
+ when :all
107
+
108
+ when true
109
+ else
110
+ meta :favicon, img
111
+ end
112
+ end
113
+
114
+ ########################################
115
+ ########################################
116
+
117
+ end
118
+ end