diff --git a/README.md b/README.md index 352b1aa..7659c4c 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ php-loremipsum ============== -Lorem ipsum generator without dependencies. +Lorem ipsum generator in PHP without dependencies. Origins ------- @@ -10,6 +10,8 @@ Once upon a time, I was attempting to find a lorem ipsum generator over on [Pack I had decided to use [badcow/lorem-ipsum](https://packagist.org/packages/badcow/lorem-ipsum) because it did not have any dependencies nor did it rely on any external APIs. As I started to use the library, I found that I was going to have to fight with it to get it to do what I wanted. After digging through the code, I realized that I was going to end up gutting most of it to bend it to my will. I know when you overhaul someone’s code the liklihood of them accepting a pull request goes down dramatically, hence building this library while taking cues from it’s predecessor. +Also, the aforementioned package had a bunch of “setter” and “getter” methods that were grossing me out :P + Installation ------------ @@ -29,8 +31,8 @@ Usage ### Getting Started ```php -require_once 'GravityBlvd/LoremIpsum.php'; -$lipsum = new GravityBlvd\LoremIpsum(); +require_once 'joshtronic/LoremIpsum.php'; +$lipsum = new joshtronic\LoremIpsum(); ``` ### Generating Words @@ -99,6 +101,11 @@ print_r($lipsum->wordsArray(5), 'li'); Assumptions ----------- -* The first sentence or paragraph will always start with “Lorem ipsum…” -* Subsequent sentences and paragraphs will never start with “Lorem ipsum…” -* Words will never contain “lorem” or “ipsum” +Instead of having an option as to whether or not a string should start the generated output with “Lorem ipsum dolor sit amet, consectetur adipiscing elit.” a few assumptions are baked in. The first string generated will always start with the traditional “Lorem ipsum…”. Subsequent strings may contain those words but will not explicitly start with them. + +Contributing +------------ + +Suggestions and bug reports are always welcome, but karma points was earned for pull requests. + +Unit tests are required for all contributions. You can run the test suite from the `tests` directory simply by running `phpunit .` diff --git a/src/LoremIpsum.php b/src/LoremIpsum.php new file mode 100644 index 0000000..69e1dc1 --- /dev/null +++ b/src/LoremIpsum.php @@ -0,0 +1,174 @@ +words(1, $tags); + } + + public function wordsArray($count = 1, $tags = false) + { + return $this->words($count, $tags, true); + } + + public function words($count = 1, $tags = false, $array = false) + { + $words = array(); + + if ($this->first) + { + if ($count > 8) + { + $start = 8; + $count -= 8; + } + else + { + $start = $count; + $count = 0; + } + + $words = array_slice($this->words, 0, $start); + $this->first = false; + } + + if ($count) + { + shuffle($this->words); + $words += array_slice($this->words, 0, $count); + } + + if ($tags) + { + $this->markup($words, $tags); + } + + if (!$array) + { + $words = implode(' ', $words); + } + + return $words; + } + + public function sentence() + { + + } + + public function sentences() + { + + } + + public function sentencesArray() + { + + } + + public function paragraph() + { + + } + + public function paragraphs() + { + + } + + public function paragraphsArray() + { + + } + + private function markup(&$strings, $tags) + { + if (!is_array($tags)) + { + $tags = array($tags); + } + else + { + $tags = array_reverse($tags); + } + + foreach ($strings as $key => $string) + { + foreach ($tags as $tag) + { + if ($tag[0] == '<') + { + $string = str_replace('$1', $string, $tag); + } + else + { + $string = sprintf('<%1$s>%2$s', $tag, $string); + } + + $strings[$key] = $string; + } + } + } +} + +?> diff --git a/src/words b/src/words new file mode 100644 index 0000000..38933ff --- /dev/null +++ b/src/words @@ -0,0 +1,187 @@ +array ( + 0 => 'lorem', + 1 => 'ipsum', + 2 => 'dolor', + 3 => 'sit', + 4 => 'amet', + 5 => 'consectetur', + 6 => 'adipiscing', + 7 => 'elit', + + 8 => 'morbi', + 9 => 'pulvinar', + 10 => 'nisl', + 11 => 'nec', + 12 => 'mauris', + 13 => 'tincidunt', + 14 => 'in', + 15 => 'luctus', + 16 => 'purus', + 17 => 'ut', + 18 => 'nulla', + 19 => 'tristique', + 20 => 'non', + 21 => 'porttitor', + 22 => 'dictum', + 23 => 'nam', + 24 => 'ac', + 25 => 'metus', + 26 => 'et', + 27 => 'tempus', + 28 => 'venenatis', + 29 => 'rutrum', + 30 => 'praesent', + 31 => 'at', + 32 => 'volutpat', + 33 => 'quam', + 34 => 'curabitur', + 35 => 'tortor', + 36 => 'vitae', + 37 => 'odio', + 38 => 'condimentum', + 39 => 'tempor', + 40 => 'id', + 41 => 'massa', + 42 => 'sed', + 43 => 'sollicitudin', + 44 => 'hendrerit', + 45 => 'sodales', + 46 => 'iaculis', + 47 => 'enim', + 48 => 'pellentesque', + 49 => 'blandit', + 50 => 'lectus', + 51 => 'turpis', + 52 => 'maecenas', + 53 => 'vel', + 54 => 'eget', + 55 => 'justo', + 56 => 'integer', + 57 => 'faucibus', + 58 => 'pretium', + 59 => 'lacinia', + 60 => 'nullam', + 61 => 'a', + 62 => 'velit', + 63 => 'posuere', + 64 => 'arcu', + 65 => 'augue', + 66 => 'magna', + 67 => 'commodo', + 68 => 'dui', + 69 => 'duis', + 70 => 'vehicula', + 71 => 'egestas', + 72 => 'convallis', + 73 => 'aenean', + 74 => 'erat', + 75 => 'sem', + 76 => 'imperdiet', + 77 => 'cras', + 78 => 'diam', + 79 => 'ullamcorper', + 80 => 'laoreet', + 81 => 'ornare', + 82 => 'eu', + 83 => 'vulputate', + 84 => 'vestibulum', + 85 => 'porta', + 86 => 'dapibus', + 87 => 'nisi', + 88 => 'malesuada', + 89 => 'congue', + 90 => 'orci', + 91 => 'sagittis', + 92 => 'nunc', + 93 => 'quis', + 94 => 'lacus', + 95 => 'eros', + 96 => 'phasellus', + 97 => 'varius', + 98 => 'mollis', + 99 => 'aliquam', + 100 => 'nibh', + 101 => 'molestie', + 102 => 'placerat', + 103 => 'libero', + 104 => 'tellus', + 105 => 'donec', + 106 => 'accumsan', + 107 => 'est', + 108 => 'ultrices', + 109 => 'mattis', + 110 => 'leo', + 111 => 'neque', + 112 => 'felis', + 113 => 'ante', + 114 => 'facilisis', + 115 => 'bibendum', + 116 => 'etiam', + 117 => 'fermentum', + 118 => 'feugiat', + 119 => 'lobortis', + 120 => 'cursus', + 121 => 'dignissim', + 122 => 'primis', + 123 => 'cubilia', + 124 => 'curae;', + 125 => 'risus', + 126 => 'proin', + 127 => 'gravida', + 128 => 'interdum', + 129 => 'elementum', + 130 => 'fusce', + 131 => 'scelerisque', + 132 => 'auctor', + 133 => 'pharetra', + 134 => 'ligula', + 135 => 'fringilla', + 136 => 'viverra', + 137 => 'euismod', + 138 => 'ultricies', + 139 => 'suspendisse', + 140 => 'vivamus', + 141 => 'consequat', + 142 => 'eleifend', + 143 => 'aliquet', + 144 => 'sapien', + 145 => 'quisque', + 146 => 'facilisi', + 147 => 'rhoncus', + 148 => 'urna', + 149 => 'semper', + 150 => 'mi', + 151 => 'suscipit', + 152 => 'cum', + 153 => 'sociis', + 154 => 'natoque', + 155 => 'penatibus', + 156 => 'magnis', + 157 => 'dis', + 158 => 'parturient', + 159 => 'montes', + 160 => 'nascetur', + 161 => 'ridiculus', + 162 => 'mus', + 163 => 'class', + 164 => 'aptent', + 165 => 'taciti', + 166 => 'sociosqu', + 167 => 'ad', + 168 => 'litora', + 169 => 'torquent', + 170 => 'per', + 171 => 'conubia', + 172 => 'nostra', + 173 => 'inceptos', + 174 => 'himenaeos', + 175 => 'hac', + 176 => 'habitasse', + 177 => 'platea', + 178 => 'dictumst', + 179 => 'potenti', + 180 => 'fames', + 181 => 'habitant', + 182 => 'senectus', + 183 => 'netus', +) diff --git a/tests/LoremIpsumTest.php b/tests/LoremIpsumTest.php new file mode 100644 index 0000000..b467aca --- /dev/null +++ b/tests/LoremIpsumTest.php @@ -0,0 +1,120 @@ +lipsum = new joshtronic\LoremIpsum(); + } + + public function testWord() + { + $this->assertRegExp('/^[a-z]+$/i', $this->lipsum->word()); + } + + public function testWords() + { + $this->assertRegExp( + '/^[a-z]+ [a-z]+ [a-z]+$/i', + $this->lipsum->words(3) + ); + } + + public function testWordsArray() + { + $words = $this->lipsum->wordsArray(3); + $this->assertTrue(is_array($words)); + $this->assertCount(3, $words); + + foreach ($words as $word) + { + $this->assertRegExp('/^[a-z]+$/i', $word); + } + } + + /* + public function testSentence() + { + $this->assertRegExp('/^[a-z, ]+\.$/i', $this->lipsum->sentence()); + } + + public function testSentences() + { + $this->assertRegExp('/^[a-z, ]+\. [a-z, ]+\. [a-z, ]+\.$/i', $this->lipsum->sentences(3)); + } + + public function testSentencesArray() + { + $sentences = $this->lipsum->sentencesArray(3); + $this->assertTrue(is_array($sentences)); + $this->assertCount(3, $sentences); + + foreach ($words as $word) + { + $this->assertRegExp('/^[a-z, ]+\.$/i', $sentence); + } + } + + public function testParagraph() + { + + $this->fail('Not yet implemented.'); + } + + public function testParagraphs() + { + + $this->fail('Not yet implemented.'); + } + + public function testParagraphsArray() + { + + $this->fail('Not yet implemented.'); + } + */ + + public function testMarkupString() + { + $this->assertRegExp( + '/^
  • [a-z]+<\/li>$/i', + $this->lipsum->word('li') + ); + } + + public function testMarkupArray() + { + $this->assertRegExp( + '/^

    [a-z]+<\/p><\/div>$/i', + $this->lipsum->word(array('div', 'p')) + ); + } + + public function testMarkupBackReference() + { + $this->assertRegExp( + '/^

  • [a-z]+<\/a><\/li>$/i', + $this->lipsum->word('
  • $1
  • ') + ); + } + + /* + public function testMarkupArrayReturn() + { + $words = $this->lipsum->wordsArray(3, 'li'); + $this->assertTrue(is_array($words)); + $this->assertCount(3, $words); + + foreach ($words as $word) + { + $this->assertRegExp('/^
  • [a-z]+<\/li>$/i', $word); + } + } + */ +} + +?>