incrdecr_cached_counts 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (74) hide show
  1. checksums.yaml +7 -0
  2. data/.circleci-matrix.yml +8 -0
  3. data/.gitignore +9 -0
  4. data/.travis.yml +15 -0
  5. data/Gemfile +21 -0
  6. data/MIT-LICENSE +20 -0
  7. data/README.rdoc +51 -0
  8. data/Rakefile +16 -0
  9. data/circle.yml +10 -0
  10. data/html/CachedCounts/ClassMethods.html +960 -0
  11. data/html/CachedCounts/Railtie.html +102 -0
  12. data/html/CachedCounts.html +197 -0
  13. data/html/README_rdoc.html +152 -0
  14. data/html/created.rid +7 -0
  15. data/html/css/fonts.css +167 -0
  16. data/html/css/rdoc.css +590 -0
  17. data/html/fonts/Lato-Light.ttf +0 -0
  18. data/html/fonts/Lato-LightItalic.ttf +0 -0
  19. data/html/fonts/Lato-Regular.ttf +0 -0
  20. data/html/fonts/Lato-RegularItalic.ttf +0 -0
  21. data/html/fonts/SourceCodePro-Bold.ttf +0 -0
  22. data/html/fonts/SourceCodePro-Regular.ttf +0 -0
  23. data/html/images/add.png +0 -0
  24. data/html/images/arrow_up.png +0 -0
  25. data/html/images/brick.png +0 -0
  26. data/html/images/brick_link.png +0 -0
  27. data/html/images/bug.png +0 -0
  28. data/html/images/bullet_black.png +0 -0
  29. data/html/images/bullet_toggle_minus.png +0 -0
  30. data/html/images/bullet_toggle_plus.png +0 -0
  31. data/html/images/date.png +0 -0
  32. data/html/images/delete.png +0 -0
  33. data/html/images/find.png +0 -0
  34. data/html/images/loadingAnimation.gif +0 -0
  35. data/html/images/macFFBgHack.png +0 -0
  36. data/html/images/package.png +0 -0
  37. data/html/images/page_green.png +0 -0
  38. data/html/images/page_white_text.png +0 -0
  39. data/html/images/page_white_width.png +0 -0
  40. data/html/images/plugin.png +0 -0
  41. data/html/images/ruby.png +0 -0
  42. data/html/images/tag_blue.png +0 -0
  43. data/html/images/tag_green.png +0 -0
  44. data/html/images/transparent.png +0 -0
  45. data/html/images/wrench.png +0 -0
  46. data/html/images/wrench_orange.png +0 -0
  47. data/html/images/zoom.png +0 -0
  48. data/html/index.html +155 -0
  49. data/html/js/darkfish.js +161 -0
  50. data/html/js/jquery.js +4 -0
  51. data/html/js/navigation.js +142 -0
  52. data/html/js/navigation.js.gz +0 -0
  53. data/html/js/search.js +109 -0
  54. data/html/js/search_index.js +1 -0
  55. data/html/js/search_index.js.gz +0 -0
  56. data/html/js/searcher.js +228 -0
  57. data/html/js/searcher.js.gz +0 -0
  58. data/html/table_of_contents.html +144 -0
  59. data/incrdecr_cached_counts.gemspec +31 -0
  60. data/lib/cached_counts/connection_for.rb +14 -0
  61. data/lib/cached_counts/dalli_check.rb +5 -0
  62. data/lib/cached_counts/railtie.rb +7 -0
  63. data/lib/cached_counts/version.rb +3 -0
  64. data/lib/cached_counts.rb +388 -0
  65. data/spec/caches_count_of_spec.rb +142 -0
  66. data/spec/caches_count_where_spec.rb +88 -0
  67. data/spec/database.yml +5 -0
  68. data/spec/fixtures/department.rb +11 -0
  69. data/spec/fixtures/following.rb +7 -0
  70. data/spec/fixtures/university.rb +11 -0
  71. data/spec/fixtures/user.rb +26 -0
  72. data/spec/fixtures.rb +23 -0
  73. data/spec/spec_helper.rb +49 -0
  74. metadata +239 -0
@@ -0,0 +1,102 @@
1
+ <!DOCTYPE html>
2
+
3
+ <html>
4
+ <head>
5
+ <meta charset="UTF-8">
6
+
7
+ <title>class CachedCounts::Railtie - RDoc Documentation</title>
8
+
9
+ <script type="text/javascript">
10
+ var rdoc_rel_prefix = "../";
11
+ </script>
12
+
13
+ <script src="../js/jquery.js"></script>
14
+ <script src="../js/darkfish.js"></script>
15
+
16
+ <link href="../css/fonts.css" rel="stylesheet">
17
+ <link href="../css/rdoc.css" rel="stylesheet">
18
+
19
+
20
+
21
+ <body id="top" role="document" class="class">
22
+ <nav role="navigation">
23
+ <div id="project-navigation">
24
+ <div id="home-section" role="region" title="Quick navigation" class="nav-section">
25
+ <h2>
26
+ <a href="../index.html" rel="home">Home</a>
27
+ </h2>
28
+
29
+ <div id="table-of-contents-navigation">
30
+ <a href="../table_of_contents.html#pages">Pages</a>
31
+ <a href="../table_of_contents.html#classes">Classes</a>
32
+ <a href="../table_of_contents.html#methods">Methods</a>
33
+ </div>
34
+ </div>
35
+
36
+ <div id="search-section" role="search" class="project-section initially-hidden">
37
+ <form action="#" method="get" accept-charset="utf-8">
38
+ <div id="search-field-wrapper">
39
+ <input id="search-field" role="combobox" aria-label="Search"
40
+ aria-autocomplete="list" aria-controls="search-results"
41
+ type="text" name="search" placeholder="Search" spellcheck="false"
42
+ title="Type to search, Up and Down to navigate, Enter to load">
43
+ </div>
44
+
45
+ <ul id="search-results" aria-label="Search Results"
46
+ aria-busy="false" aria-expanded="false"
47
+ aria-atomic="false" class="initially-hidden"></ul>
48
+ </form>
49
+ </div>
50
+
51
+ </div>
52
+
53
+
54
+
55
+ <div id="class-metadata">
56
+
57
+ <div id="parent-class-section" class="nav-section">
58
+ <h3>Parent</h3>
59
+
60
+
61
+ <p class="link">Rails::Railtie
62
+
63
+ </div>
64
+
65
+
66
+
67
+
68
+ </div>
69
+ </nav>
70
+
71
+ <main role="main" aria-labelledby="class-CachedCounts::Railtie">
72
+ <h1 id="class-CachedCounts::Railtie" class="class">
73
+ class CachedCounts::Railtie
74
+ </h1>
75
+
76
+ <section class="description">
77
+
78
+ </section>
79
+
80
+
81
+
82
+
83
+ <section id="5Buntitled-5D" class="documentation-section">
84
+
85
+
86
+
87
+
88
+
89
+
90
+
91
+
92
+
93
+ </section>
94
+ </main>
95
+
96
+
97
+ <footer id="validator-badges" role="contentinfo">
98
+ <p><a href="http://validator.w3.org/check/referer">Validate</a>
99
+ <p>Generated by <a href="http://docs.seattlerb.org/rdoc/">RDoc</a> 4.2.0.
100
+ <p>Based on <a href="http://deveiate.org/projects/Darkfish-RDoc/">Darkfish</a> by <a href="http://deveiate.org">Michael Granger</a>.
101
+ </footer>
102
+
@@ -0,0 +1,197 @@
1
+ <!DOCTYPE html>
2
+
3
+ <html>
4
+ <head>
5
+ <meta charset="UTF-8">
6
+
7
+ <title>module CachedCounts - RDoc Documentation</title>
8
+
9
+ <script type="text/javascript">
10
+ var rdoc_rel_prefix = "./";
11
+ </script>
12
+
13
+ <script src="./js/jquery.js"></script>
14
+ <script src="./js/darkfish.js"></script>
15
+
16
+ <link href="./css/fonts.css" rel="stylesheet">
17
+ <link href="./css/rdoc.css" rel="stylesheet">
18
+
19
+
20
+
21
+ <body id="top" role="document" class="module">
22
+ <nav role="navigation">
23
+ <div id="project-navigation">
24
+ <div id="home-section" role="region" title="Quick navigation" class="nav-section">
25
+ <h2>
26
+ <a href="./index.html" rel="home">Home</a>
27
+ </h2>
28
+
29
+ <div id="table-of-contents-navigation">
30
+ <a href="./table_of_contents.html#pages">Pages</a>
31
+ <a href="./table_of_contents.html#classes">Classes</a>
32
+ <a href="./table_of_contents.html#methods">Methods</a>
33
+ </div>
34
+ </div>
35
+
36
+ <div id="search-section" role="search" class="project-section initially-hidden">
37
+ <form action="#" method="get" accept-charset="utf-8">
38
+ <div id="search-field-wrapper">
39
+ <input id="search-field" role="combobox" aria-label="Search"
40
+ aria-autocomplete="list" aria-controls="search-results"
41
+ type="text" name="search" placeholder="Search" spellcheck="false"
42
+ title="Type to search, Up and Down to navigate, Enter to load">
43
+ </div>
44
+
45
+ <ul id="search-results" aria-label="Search Results"
46
+ aria-busy="false" aria-expanded="false"
47
+ aria-atomic="false" class="initially-hidden"></ul>
48
+ </form>
49
+ </div>
50
+
51
+ </div>
52
+
53
+
54
+
55
+ <div id="class-metadata">
56
+
57
+
58
+
59
+ <div id="extends-section" class="nav-section">
60
+ <h3>Extended With Modules</h3>
61
+
62
+ <ul class="link-list">
63
+
64
+
65
+ <li><span class="extend">ActiveSupport::Concern</span>
66
+
67
+
68
+ </ul>
69
+ </div>
70
+
71
+ <!-- Method Quickref -->
72
+ <div id="method-list-section" class="nav-section">
73
+ <h3>Methods</h3>
74
+
75
+ <ul class="link-list" role="directory">
76
+
77
+ <li ><a href="#method-c-connection_for">::connection_for</a>
78
+
79
+ </ul>
80
+ </div>
81
+
82
+ </div>
83
+ </nav>
84
+
85
+ <main role="main" aria-labelledby="module-CachedCounts">
86
+ <h1 id="module-CachedCounts" class="module">
87
+ module CachedCounts
88
+ </h1>
89
+
90
+ <section class="description">
91
+
92
+ </section>
93
+
94
+
95
+
96
+
97
+ <section id="5Buntitled-5D" class="documentation-section">
98
+
99
+
100
+
101
+
102
+
103
+ <section class="constants-list">
104
+ <header>
105
+ <h3>Constants</h3>
106
+ </header>
107
+ <dl>
108
+
109
+ <dt id="VERSION">VERSION
110
+
111
+ <dd>
112
+
113
+
114
+ </dl>
115
+ </section>
116
+
117
+
118
+
119
+ <section class="attribute-method-details" class="method-section">
120
+ <header>
121
+ <h3>Attributes</h3>
122
+ </header>
123
+
124
+
125
+ <div id="attribute-c-connection_for" class="method-detail">
126
+ <div class="method-heading attribute-method-heading">
127
+ <span class="method-name">connection_for</span><span
128
+ class="attribute-access-type">[W]</span>
129
+ </div>
130
+
131
+ <div class="method-description">
132
+
133
+ <p>Optional configuration: set a proc which takes the class we are counting
134
+ and returns a connection. Useful with replication, e.g. with Octopus:</p>
135
+
136
+ <p>`CachedCounts.connection_for = proc { |klass|
137
+ klass.using(:read_slave).connection }`</p>
138
+
139
+ </div>
140
+ </div>
141
+
142
+ </section>
143
+
144
+
145
+
146
+ <section id="public-class-5Buntitled-5D-method-details" class="method-section">
147
+ <header>
148
+ <h3>Public Class Methods</h3>
149
+ </header>
150
+
151
+
152
+ <div id="method-c-connection_for" class="method-detail ">
153
+
154
+ <div class="method-heading">
155
+ <span class="method-name">connection_for</span><span
156
+ class="method-args">(counted_class)</span>
157
+
158
+ <span class="method-click-advice">click to toggle source</span>
159
+
160
+ </div>
161
+
162
+
163
+ <div class="method-description">
164
+
165
+
166
+
167
+
168
+
169
+
170
+ <div class="method-source-code" id="connection_for-source">
171
+ <pre><span class="ruby-comment"># File lib/cached_counts/connection_for.rb, line 9</span>
172
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">connection_for</span>(<span class="ruby-identifier">counted_class</span>)
173
+ <span class="ruby-ivar">@connection_for</span> <span class="ruby-operator">||=</span> <span class="ruby-identifier">proc</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">klass</span><span class="ruby-operator">|</span> <span class="ruby-identifier">klass</span>.<span class="ruby-identifier">connection</span> }
174
+ <span class="ruby-ivar">@connection_for</span>[<span class="ruby-identifier">counted_class</span>]
175
+ <span class="ruby-keyword">end</span></pre>
176
+ </div>
177
+
178
+ </div>
179
+
180
+
181
+
182
+
183
+ </div>
184
+
185
+
186
+ </section>
187
+
188
+ </section>
189
+ </main>
190
+
191
+
192
+ <footer id="validator-badges" role="contentinfo">
193
+ <p><a href="http://validator.w3.org/check/referer">Validate</a>
194
+ <p>Generated by <a href="http://docs.seattlerb.org/rdoc/">RDoc</a> 4.2.0.
195
+ <p>Based on <a href="http://deveiate.org/projects/Darkfish-RDoc/">Darkfish</a> by <a href="http://deveiate.org">Michael Granger</a>.
196
+ </footer>
197
+
@@ -0,0 +1,152 @@
1
+ <!DOCTYPE html>
2
+
3
+ <html>
4
+ <head>
5
+ <meta charset="UTF-8">
6
+
7
+ <title>README - RDoc Documentation</title>
8
+
9
+ <script type="text/javascript">
10
+ var rdoc_rel_prefix = "./";
11
+ </script>
12
+
13
+ <script src="./js/jquery.js"></script>
14
+ <script src="./js/darkfish.js"></script>
15
+
16
+ <link href="./css/fonts.css" rel="stylesheet">
17
+ <link href="./css/rdoc.css" rel="stylesheet">
18
+
19
+
20
+
21
+ <body id="top" role="document" class="file">
22
+ <nav role="navigation">
23
+ <div id="project-navigation">
24
+ <div id="home-section" role="region" title="Quick navigation" class="nav-section">
25
+ <h2>
26
+ <a href="./index.html" rel="home">Home</a>
27
+ </h2>
28
+
29
+ <div id="table-of-contents-navigation">
30
+ <a href="./table_of_contents.html#pages">Pages</a>
31
+ <a href="./table_of_contents.html#classes">Classes</a>
32
+ <a href="./table_of_contents.html#methods">Methods</a>
33
+ </div>
34
+ </div>
35
+
36
+ <div id="search-section" role="search" class="project-section initially-hidden">
37
+ <form action="#" method="get" accept-charset="utf-8">
38
+ <div id="search-field-wrapper">
39
+ <input id="search-field" role="combobox" aria-label="Search"
40
+ aria-autocomplete="list" aria-controls="search-results"
41
+ type="text" name="search" placeholder="Search" spellcheck="false"
42
+ title="Type to search, Up and Down to navigate, Enter to load">
43
+ </div>
44
+
45
+ <ul id="search-results" aria-label="Search Results"
46
+ aria-busy="false" aria-expanded="false"
47
+ aria-atomic="false" class="initially-hidden"></ul>
48
+ </form>
49
+ </div>
50
+
51
+ </div>
52
+
53
+
54
+ <div class="nav-section">
55
+ <h3>Table of Contents</h3>
56
+
57
+ <ul class="link-list" role="directory">
58
+ <li><a href="#label-CachedCounts">CachedCounts</a>
59
+ <li><a href="#label-Usage">Usage</a>
60
+ <li><a href="#label-Licence">Licence</a>
61
+ <li><a href="#label-Contributing">Contributing</a>
62
+ </ul>
63
+ </div>
64
+
65
+
66
+ <div id="project-metadata">
67
+ <div id="fileindex-section" class="nav-section">
68
+ <h3>Pages</h3>
69
+
70
+ <ul class="link-list">
71
+
72
+ <li><a href="./README_rdoc.html">README</a>
73
+
74
+ </ul>
75
+ </div>
76
+
77
+ </div>
78
+ </nav>
79
+
80
+ <main role="main" aria-label="Page README.rdoc">
81
+
82
+ <h1 id="label-CachedCounts"><a href="CachedCounts.html">CachedCounts</a><span><a href="#label-CachedCounts">&para;</a> <a href="#top">&uarr;</a></span></h1>
83
+
84
+ <p>A replacement for Rails&#39; counter caches, using memcached.</p>
85
+
86
+ <p>Caches counts of models in a scope or association in memcached, and keeps
87
+ the cache up to date using incr/decr operations.</p>
88
+
89
+ <p>You might prefer this gem over Rails&#39; built-in counter caches when:</p>
90
+ <ul><li>
91
+ <p>You want to cache the total number of models for a class or scope</p>
92
+ </li><li>
93
+ <p>You have a large association (e.g. followers of a popular figure) and want
94
+ to avoid contention on a database row</p>
95
+ </li><li>
96
+ <p>You want your caches to expire and be refreshed to mitigate the risk of
97
+ getting out of sync</p>
98
+ </li><li>
99
+ <p>You don&#39;t need to use counts as part of more complex SQL queries</p>
100
+ </li></ul>
101
+
102
+ <p>There are [many alternatives](<a
103
+ href="https://rubygems.org/search?utf8=%E2%9C%93&query=counter+cache">rubygems.org/search?utf8=%E2%9C%93&query=counter+cache</a>),
104
+ but this gem appears to be unique in making use of memcached&#39;s
105
+ incr/decr operations.</p>
106
+
107
+ <h1 id="label-Usage">Usage<span><a href="#label-Usage">&para;</a> <a href="#top">&uarr;</a></span></h1>
108
+
109
+ <p>Basic usage:</p>
110
+
111
+ <pre>class User &lt; ActiveRecord::Base
112
+ include CachedCounts
113
+
114
+ has_many :followers, class_name: &#39;Following&#39; #, ...
115
+ scope :confirmed, -&gt;{ where(confirmed: true) }
116
+
117
+ # creates cached class method `User.confirmed_count`
118
+ caches_count_where :confirmed, if: :confirmed?
119
+
120
+ # creates cached instance method `user.followers_count`
121
+ caches_count_of :followers
122
+ end
123
+
124
+ class Following &lt; ActiveRecord::Base
125
+ include CachedCounts
126
+
127
+ belongs_to :followee, class_name: &#39;User&#39;, # ...
128
+ end</pre>
129
+
130
+ <p>For full options, see docs for CachedCounts.caches_count_of and
131
+ CachedCounts.caches_count_where.</p>
132
+
133
+ <h1 id="label-Licence">Licence<span><a href="#label-Licence">&para;</a> <a href="#top">&uarr;</a></span></h1>
134
+
135
+ <p>MIT</p>
136
+
137
+ <p>Copyright Academia.edu</p>
138
+
139
+ <h1 id="label-Contributing">Contributing<span><a href="#label-Contributing">&para;</a> <a href="#top">&uarr;</a></span></h1>
140
+
141
+ <p>Bug reports and pull requests are welcome on GitHub at <a
142
+ href="https://github.com/academia-edu/cached_counts">github.com/academia-edu/cached_counts</a></p>
143
+ </main>
144
+
145
+
146
+
147
+ <footer id="validator-badges" role="contentinfo">
148
+ <p><a href="http://validator.w3.org/check/referer">Validate</a>
149
+ <p>Generated by <a href="http://docs.seattlerb.org/rdoc/">RDoc</a> 4.2.0.
150
+ <p>Based on <a href="http://deveiate.org/projects/Darkfish-RDoc/">Darkfish</a> by <a href="http://deveiate.org">Michael Granger</a>.
151
+ </footer>
152
+
data/html/created.rid ADDED
@@ -0,0 +1,7 @@
1
+ Sun, 08 May 2016 14:51:27 -0700
2
+ README.rdoc Sun, 08 May 2016 14:47:44 -0700
3
+ lib/cached_counts.rb Sun, 08 May 2016 13:46:22 -0700
4
+ lib/cached_counts/connection_for.rb Sun, 08 May 2016 09:11:50 -0700
5
+ lib/cached_counts/dalli_check.rb Sun, 08 May 2016 09:11:40 -0700
6
+ lib/cached_counts/railtie.rb Sun, 08 May 2016 09:09:01 -0700
7
+ lib/cached_counts/version.rb Sun, 08 May 2016 07:43:53 -0700
@@ -0,0 +1,167 @@
1
+ /*
2
+ * Copyright 2010, 2012 Adobe Systems Incorporated (http://www.adobe.com/),
3
+ * with Reserved Font Name "Source". All Rights Reserved. Source is a
4
+ * trademark of Adobe Systems Incorporated in the United States and/or other
5
+ * countries.
6
+ *
7
+ * This Font Software is licensed under the SIL Open Font License, Version
8
+ * 1.1.
9
+ *
10
+ * This license is copied below, and is also available with a FAQ at:
11
+ * http://scripts.sil.org/OFL
12
+ */
13
+
14
+ @font-face {
15
+ font-family: "Source Code Pro";
16
+ font-style: normal;
17
+ font-weight: 400;
18
+ src: local("Source Code Pro"),
19
+ local("SourceCodePro-Regular"),
20
+ url("fonts/SourceCodePro-Regular.ttf") format("truetype");
21
+ }
22
+
23
+ @font-face {
24
+ font-family: "Source Code Pro";
25
+ font-style: normal;
26
+ font-weight: 700;
27
+ src: local("Source Code Pro Bold"),
28
+ local("SourceCodePro-Bold"),
29
+ url("fonts/SourceCodePro-Bold.ttf") format("truetype");
30
+ }
31
+
32
+ /*
33
+ * Copyright (c) 2010, Łukasz Dziedzic (dziedzic@typoland.com),
34
+ * with Reserved Font Name Lato.
35
+ *
36
+ * This Font Software is licensed under the SIL Open Font License, Version
37
+ * 1.1.
38
+ *
39
+ * This license is copied below, and is also available with a FAQ at:
40
+ * http://scripts.sil.org/OFL
41
+ */
42
+
43
+ @font-face {
44
+ font-family: "Lato";
45
+ font-style: normal;
46
+ font-weight: 300;
47
+ src: local("Lato Light"),
48
+ local("Lato-Light"),
49
+ url("fonts/Lato-Light.ttf") format("truetype");
50
+ }
51
+
52
+ @font-face {
53
+ font-family: "Lato";
54
+ font-style: italic;
55
+ font-weight: 300;
56
+ src: local("Lato Light Italic"),
57
+ local("Lato-LightItalic"),
58
+ url("fonts/Lato-LightItalic.ttf") format("truetype");
59
+ }
60
+
61
+ @font-face {
62
+ font-family: "Lato";
63
+ font-style: normal;
64
+ font-weight: 700;
65
+ src: local("Lato Regular"),
66
+ local("Lato-Regular"),
67
+ url("fonts/Lato-Regular.ttf") format("truetype");
68
+ }
69
+
70
+ @font-face {
71
+ font-family: "Lato";
72
+ font-style: italic;
73
+ font-weight: 700;
74
+ src: local("Lato Italic"),
75
+ local("Lato-Italic"),
76
+ url("fonts/Lato-RegularItalic.ttf") format("truetype");
77
+ }
78
+
79
+ /*
80
+ * -----------------------------------------------------------
81
+ * SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
82
+ * -----------------------------------------------------------
83
+ *
84
+ * PREAMBLE
85
+ * The goals of the Open Font License (OFL) are to stimulate worldwide
86
+ * development of collaborative font projects, to support the font creation
87
+ * efforts of academic and linguistic communities, and to provide a free and
88
+ * open framework in which fonts may be shared and improved in partnership
89
+ * with others.
90
+ *
91
+ * The OFL allows the licensed fonts to be used, studied, modified and
92
+ * redistributed freely as long as they are not sold by themselves. The
93
+ * fonts, including any derivative works, can be bundled, embedded,
94
+ * redistributed and/or sold with any software provided that any reserved
95
+ * names are not used by derivative works. The fonts and derivatives,
96
+ * however, cannot be released under any other type of license. The
97
+ * requirement for fonts to remain under this license does not apply
98
+ * to any document created using the fonts or their derivatives.
99
+ *
100
+ * DEFINITIONS
101
+ * "Font Software" refers to the set of files released by the Copyright
102
+ * Holder(s) under this license and clearly marked as such. This may
103
+ * include source files, build scripts and documentation.
104
+ *
105
+ * "Reserved Font Name" refers to any names specified as such after the
106
+ * copyright statement(s).
107
+ *
108
+ * "Original Version" refers to the collection of Font Software components as
109
+ * distributed by the Copyright Holder(s).
110
+ *
111
+ * "Modified Version" refers to any derivative made by adding to, deleting,
112
+ * or substituting -- in part or in whole -- any of the components of the
113
+ * Original Version, by changing formats or by porting the Font Software to a
114
+ * new environment.
115
+ *
116
+ * "Author" refers to any designer, engineer, programmer, technical
117
+ * writer or other person who contributed to the Font Software.
118
+ *
119
+ * PERMISSION & CONDITIONS
120
+ * Permission is hereby granted, free of charge, to any person obtaining
121
+ * a copy of the Font Software, to use, study, copy, merge, embed, modify,
122
+ * redistribute, and sell modified and unmodified copies of the Font
123
+ * Software, subject to the following conditions:
124
+ *
125
+ * 1) Neither the Font Software nor any of its individual components,
126
+ * in Original or Modified Versions, may be sold by itself.
127
+ *
128
+ * 2) Original or Modified Versions of the Font Software may be bundled,
129
+ * redistributed and/or sold with any software, provided that each copy
130
+ * contains the above copyright notice and this license. These can be
131
+ * included either as stand-alone text files, human-readable headers or
132
+ * in the appropriate machine-readable metadata fields within text or
133
+ * binary files as long as those fields can be easily viewed by the user.
134
+ *
135
+ * 3) No Modified Version of the Font Software may use the Reserved Font
136
+ * Name(s) unless explicit written permission is granted by the corresponding
137
+ * Copyright Holder. This restriction only applies to the primary font name as
138
+ * presented to the users.
139
+ *
140
+ * 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
141
+ * Software shall not be used to promote, endorse or advertise any
142
+ * Modified Version, except to acknowledge the contribution(s) of the
143
+ * Copyright Holder(s) and the Author(s) or with their explicit written
144
+ * permission.
145
+ *
146
+ * 5) The Font Software, modified or unmodified, in part or in whole,
147
+ * must be distributed entirely under this license, and must not be
148
+ * distributed under any other license. The requirement for fonts to
149
+ * remain under this license does not apply to any document created
150
+ * using the Font Software.
151
+ *
152
+ * TERMINATION
153
+ * This license becomes null and void if any of the above conditions are
154
+ * not met.
155
+ *
156
+ * DISCLAIMER
157
+ * THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
158
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
159
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
160
+ * OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
161
+ * COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
162
+ * INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
163
+ * DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
164
+ * FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
165
+ * OTHER DEALINGS IN THE FONT SOFTWARE.
166
+ */
167
+