textualize 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (71) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +10 -0
  3. data/.rspec +2 -0
  4. data/.ruby-version +1 -0
  5. data/.travis.yml +3 -0
  6. data/CODE_OF_CONDUCT.md +28 -0
  7. data/Gemfile +4 -0
  8. data/LICENSE.txt +1 -0
  9. data/README.md +76 -0
  10. data/bin/console +14 -0
  11. data/bin/setup +7 -0
  12. data/bin/textualize +7 -0
  13. data/circle.yml +8 -0
  14. data/lib/textualize.rb +33 -0
  15. data/lib/textualize/tasks/helpers/route_hash_creator.rb +62 -0
  16. data/lib/textualize/tasks/helpers/route_hashes.rb +21 -0
  17. data/lib/textualize/tasks/helpers/transformers/two_hundred.rb +30 -0
  18. data/lib/textualize/tasks/helpers/transformers/two_hundred_four.rb +17 -0
  19. data/lib/textualize/tasks/http_backend.rb +59 -0
  20. data/lib/textualize/tasks/new.rb +44 -0
  21. data/lib/textualize/tasks/request_specs.rb +48 -0
  22. data/lib/textualize/tasks/server.rb +35 -0
  23. data/lib/textualize/templates/http_backend/delete.js.erb +10 -0
  24. data/lib/textualize/templates/http_backend/get.js.erb +10 -0
  25. data/lib/textualize/templates/http_backend/module.js +1 -0
  26. data/lib/textualize/templates/http_backend/patch.js.erb +10 -0
  27. data/lib/textualize/templates/http_backend/post.js.erb +10 -0
  28. data/lib/textualize/templates/new/.gitignore +3 -0
  29. data/lib/textualize/templates/new/.ruby-version +1 -0
  30. data/lib/textualize/templates/new/Gemfile +5 -0
  31. data/lib/textualize/templates/new/Gemfile.lock +28 -0
  32. data/lib/textualize/templates/new/Readme.md +10 -0
  33. data/lib/textualize/templates/new/apis/base.raml +26 -0
  34. data/lib/textualize/templates/new/apis/base/routes/items.yaml +8 -0
  35. data/lib/textualize/templates/new/apis/base/routes/orders.yaml +8 -0
  36. data/lib/textualize/templates/new/apis/base/samples/item.json +12 -0
  37. data/lib/textualize/templates/new/apis/base/samples/items.json +34 -0
  38. data/lib/textualize/templates/new/apis/base/samples/order.json +43 -0
  39. data/lib/textualize/templates/new/apis/base/samples/orders.json +70 -0
  40. data/lib/textualize/templates/new/apis/base/schemas/item.json +17 -0
  41. data/lib/textualize/templates/new/apis/base/schemas/order.json +25 -0
  42. data/lib/textualize/templates/new/apis/documentation/authentication.yaml +21 -0
  43. data/lib/textualize/templates/new/apis/documentation/http_statuses.md +26 -0
  44. data/lib/textualize/templates/new/apis/errors.yaml +6 -0
  45. data/lib/textualize/templates/new/apis/resourceTypes/collection-item-ro.yaml +20 -0
  46. data/lib/textualize/templates/new/apis/resourceTypes/collection-item.yaml +20 -0
  47. data/lib/textualize/templates/new/apis/resourceTypes/collection-ro.yaml +18 -0
  48. data/lib/textualize/templates/new/apis/resourceTypes/collection.yaml +18 -0
  49. data/lib/textualize/templates/new/apis/responses/200.yaml +3 -0
  50. data/lib/textualize/templates/new/apis/responses/204.yaml +1 -0
  51. data/lib/textualize/templates/new/apis/responses/400.yaml +8 -0
  52. data/lib/textualize/templates/new/apis/responses/401.yaml +4 -0
  53. data/lib/textualize/templates/new/apis/responses/403.yaml +4 -0
  54. data/lib/textualize/templates/new/apis/responses/404.yaml +4 -0
  55. data/lib/textualize/templates/new/apis/responses/422.yaml +8 -0
  56. data/lib/textualize/templates/new/apis/responses/500.yaml +4 -0
  57. data/lib/textualize/templates/new/gulpfile.js +93 -0
  58. data/lib/textualize/templates/new/package.json +38 -0
  59. data/lib/textualize/templates/new/server/api/v1/items/get.json +1 -0
  60. data/lib/textualize/templates/new/server/api/v1/items/{item_id}/get.json +1 -0
  61. data/lib/textualize/templates/new/server/api/v1/orders/get.json +1 -0
  62. data/lib/textualize/templates/new/server/api/v1/orders/{order_id}/get.json +1 -0
  63. data/lib/textualize/templates/request_specs/delete_collection-item.rb.erb +0 -0
  64. data/lib/textualize/templates/request_specs/get_collection-item.rb.erb +16 -0
  65. data/lib/textualize/templates/request_specs/get_collection.rb.erb +16 -0
  66. data/lib/textualize/templates/request_specs/patch_collection-item.rb.erb +0 -0
  67. data/lib/textualize/templates/request_specs/post_collection.rb.erb +13 -0
  68. data/lib/textualize/version.rb +3 -0
  69. data/sample_item.rb +43 -0
  70. data/textualize.gemspec +41 -0
  71. metadata +259 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: af940a0bcbb1bca548ca4e51e84f68b5d69acaba
4
+ data.tar.gz: de4ec19be34141abc6612c767e861771819dab32
5
+ SHA512:
6
+ metadata.gz: 1b6ceb22aa93feea2da4318fcd4a20bb356e96f497791ed99c43e5d834359ab56c0fc476e68376097c4bf26de746b865ec3e27be9708d254cd965faa912f4649
7
+ data.tar.gz: ba3df8ebf284c32d7dd086bffcb4c09f4b8db37902c8acd18b2eba909a0c8a12e5f5e9ed6913815594d66e4ce022d98c3a7beb70b718c7a003eb2f7b6eadc555
@@ -0,0 +1,10 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+ **/*.gem
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --format documentation
2
+ --color
@@ -0,0 +1 @@
1
+ 2.2.2
@@ -0,0 +1,3 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.2.0
@@ -0,0 +1,28 @@
1
+ # Contributor Code of Conduct
2
+
3
+ As contributors and maintainers of this project, we pledge to respect all
4
+ people who contribute through reporting issues, posting feature requests,
5
+ updating documentation, submitting pull requests or patches, and other
6
+ activities.
7
+
8
+ We are committed to making participation in this project a harassment-free
9
+ experience for everyone, regardless of level of experience, gender, gender
10
+ identity and expression, sexual orientation, disability, personal appearance,
11
+ body size, race, age, or religion.
12
+
13
+ Examples of unacceptable behavior by participants include the use of sexual
14
+ language or imagery, derogatory comments or personal attacks, trolling, public
15
+ or private harassment, insults, or other unprofessional conduct.
16
+
17
+ Project maintainers have the right and responsibility to remove, edit, or
18
+ reject comments, commits, code, wiki edits, issues, and other contributions
19
+ that are not aligned to this Code of Conduct. Project maintainers who do not
20
+ follow the Code of Conduct may be removed from the project team.
21
+
22
+ Instances of abusive, harassing, or otherwise unacceptable behavior may be
23
+ reported by opening an issue or contacting one or more of the project
24
+ maintainers.
25
+
26
+ This Code of Conduct is adapted from the [Contributor
27
+ Covenant](http:contributor-covenant.org), version 1.0.0, available at
28
+ [http://contributor-covenant.org/version/1/0/0/](http://contributor-covenant.org/version/1/0/0/)
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in textualize.gemspec
4
+ gemspec
@@ -0,0 +1 @@
1
+ © Copyright 2015 - Q-Centrix LLC - MIT License
@@ -0,0 +1,76 @@
1
+ # Textualize
2
+
3
+ A documentation template written in RAML and thor tasks to turn documentation
4
+ into so much more.
5
+
6
+ ## Installation
7
+
8
+ Add this line to your application's Gemfile:
9
+
10
+ ```ruby
11
+ gem 'textualize'
12
+ ```
13
+
14
+ ## Usage
15
+
16
+ Textualize comes with the following generators:
17
+
18
+ ### New
19
+
20
+ ```bash
21
+ textualize new <folder-name>
22
+ ```
23
+
24
+ The ``textualize new`` command creates sample documentation with the folder
25
+ structure needed for the other commands.
26
+
27
+ ### Server
28
+
29
+ ```bash
30
+ textualize server
31
+ ```
32
+
33
+ The ``textualize server`` command creates a folder structure of JSON in the
34
+ ``server`` folder.
35
+
36
+ ### HttpBackend
37
+
38
+ ```bash
39
+ textualize http_backend
40
+ ```
41
+
42
+ The ``textualize http_backend`` command creates a minified javascript file,
43
+ ``angular/textualize_http_backend.min.js`` that contains an angular module that
44
+ can be injected to provide a stubbed
45
+ [httpBackend](https://docs.angularjs.org/api/ngMockE2E/service/$httpBackend).
46
+ This can be used in both e2e tests and for prototyping.
47
+
48
+ ### Request Specs
49
+
50
+ ```bash
51
+ textualize request_specs
52
+ ```
53
+
54
+ The ``textualize request_specs`` command creates a folder of request specs
55
+ written in [airborne](https://github.com/brooklynDev/airborne) that can be used
56
+ writing ruby apps with Rack. It is recommended that tests are run in isolation
57
+ while developing, and as a suite in continuous integration.
58
+
59
+ ## Development
60
+
61
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run
62
+ `bin/console` for an interactive prompt that will allow you to experiment.
63
+
64
+ To install this gem onto your local machine, run `bundle exec rake install`. To
65
+ release a new version, update the version number in `version.rb`, and then run
66
+ `bundle exec rake release` to create a git tag for the version, push git
67
+ commits and tags, and push the `.gem` file to
68
+ [rubygems.org](https://rubygems.org).
69
+
70
+ ## Contributing
71
+
72
+ 1. Fork it ( https://github.com/[my-github-username]/textualize/fork )
73
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
74
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
75
+ 4. Push to the branch (`git push origin my-new-feature`)
76
+ 5. Create a new Pull Request
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "textualize"
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require "pry"
11
+ # Pry.start
12
+
13
+ require "irb"
14
+ IRB.start
@@ -0,0 +1,7 @@
1
+ #!/bin/bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+
5
+ bundle install
6
+
7
+ # Do any other automated setup that you need to do here
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'thor'
4
+
5
+ require_relative '../lib/textualize'
6
+
7
+ Textualize::Textualize.start
@@ -0,0 +1,8 @@
1
+ dependencies:
2
+ post:
3
+ - npm install -g gulp
4
+
5
+ test:
6
+ override:
7
+ - bundle exec rspec spec
8
+ - bundle exec cucumber features
@@ -0,0 +1,33 @@
1
+ Dir["#{__dir__}/**/*.rb"].each { |file| require file }
2
+
3
+ module Textualize
4
+ class Textualize < Thor
5
+ register(
6
+ ::Textualize::New,
7
+ 'new',
8
+ 'new',
9
+ 'create a new documentation project'
10
+ )
11
+
12
+ register(
13
+ ::Textualize::Server,
14
+ 'server',
15
+ 'server',
16
+ 'create a folder structure of json responses'
17
+ )
18
+
19
+ register(
20
+ ::Textualize::HttpBackend,
21
+ 'http_backend',
22
+ 'http_backend',
23
+ 'create an Angular 1.x module for stubbing backend responses'
24
+ )
25
+
26
+ register(
27
+ ::Textualize::RequestSpecs,
28
+ 'request_specs',
29
+ 'request_specs',
30
+ 'create requset specs using airborne'
31
+ )
32
+ end
33
+ end
@@ -0,0 +1,62 @@
1
+ require 'attr_extras'
2
+ require 'hashie'
3
+
4
+ module Textualize
5
+ class RouteHashCreator
6
+
7
+ pattr_initialize :json_from_gulp_task
8
+
9
+ def create_route_hashes
10
+ json_from_gulp_task.fetch('resources').flat_map do |resource|
11
+ create_method_hashes(resource)
12
+ end
13
+ end
14
+
15
+ private
16
+
17
+ def create_method_hashes(resource, relativeUri=nil)
18
+ relative_path = if relativeUri
19
+ relativeUri + resource.fetch('relativeUri')
20
+ else
21
+ resource.fetch('relativeUri')
22
+ end
23
+
24
+ method_hashes = []
25
+ method_hashes += resource.fetch('methods').map do |method|
26
+ method_hash = Hashie::Mash.new
27
+ method_hash.verb = method.fetch('method')
28
+ method_hash.url = base_path + relative_path
29
+ method_hash.relative_path = relative_path
30
+ method_hash.type = resource.fetch('type').keys.first
31
+ method_hash.secured_by = method.fetch('securedBy').first.
32
+ fetch('oauth_2_0').fetch('scopes')
33
+ method_hash.name = relative_path.split('/').last.gsub(
34
+ /{|}|_id/, ''
35
+ )
36
+ method_hash.merge!(transformed_response(method))
37
+ end
38
+
39
+ if resource.has_key? 'resources'
40
+ resource.fetch('resources').each do |nested_resource|
41
+ method_hashes += create_method_hashes(nested_resource, relative_path)
42
+ end
43
+ end
44
+
45
+ return method_hashes
46
+ end
47
+
48
+ def base_path
49
+ URI(json_from_gulp_task.fetch('baseUri')).path
50
+ end
51
+
52
+ def transformed_response(method_hash)
53
+ response = method_hash.fetch('responses')
54
+
55
+ case response.keys.first
56
+ when '200' then ::Textualize::TwoHundred.new(response).transform
57
+ when '204' then ::Textualize::TwoHundredFour.new(response).transform
58
+ end
59
+ end
60
+
61
+ end
62
+ end
@@ -0,0 +1,21 @@
1
+ module Textualize
2
+ class RouteHashes
3
+ class << self
4
+ def hashes
5
+ fail 'run gulp first' if raml_json_files.empty?
6
+
7
+ raml_json_files.flat_map do |json_file|
8
+ json = JSON.parse(File.read(json_file))
9
+
10
+ RouteHashCreator.new(json).create_route_hashes
11
+ end
12
+ end
13
+
14
+ private
15
+
16
+ def raml_json_files
17
+ Dir.glob('.tmp/apis/*.json')
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,30 @@
1
+ require 'attr_extras'
2
+
3
+ module Textualize
4
+ class TwoHundred
5
+
6
+ pattr_initialize :response
7
+
8
+ def transform
9
+ transformed_hash = {}
10
+
11
+ transformed_hash[:response_code] = response.keys.first.to_i
12
+
13
+ transformed_hash[:body] = fetch_example
14
+
15
+ return transformed_hash
16
+ end
17
+
18
+ private
19
+
20
+ def fetch_example
21
+ string_body = response.
22
+ fetch('200').
23
+ fetch('body').
24
+ fetch('application/json').
25
+ fetch('example')
26
+
27
+ JSON.parse(string_body)
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,17 @@
1
+ require 'attr_extras'
2
+
3
+ module Textualize
4
+ class TwoHundredFour
5
+
6
+ pattr_initialize :response
7
+
8
+ def transform
9
+ transformed_hash = {}
10
+
11
+ transformed_hash[:response_code] = response.keys.first.to_s.to_i
12
+
13
+ return transformed_hash
14
+ end
15
+
16
+ end
17
+ end
@@ -0,0 +1,59 @@
1
+ require 'uglifier'
2
+ require 'erb'
3
+
4
+ module Textualize
5
+ class HttpBackend < Thor::Group
6
+ include Thor::Actions
7
+
8
+ desc(
9
+ 'Creates an angular 1.x module based off ngMockE2E that stubs a backend'
10
+ )
11
+
12
+ def create_angular_module
13
+ create_basic_http_backend_file
14
+
15
+ append_uglified_hashes
16
+ end
17
+
18
+ private
19
+
20
+ def create_basic_http_backend_file
21
+ File.open(dist_file, 'w') do |file|
22
+ file.write(
23
+ Uglifier.compile(
24
+ File.read("#{template_directory}/module.js")
25
+ )
26
+ )
27
+ end
28
+ end
29
+
30
+ def dist_file
31
+ FileUtils.mkdir_p('dist/angular/backend')
32
+
33
+ 'dist/angular/backend/fake_http_backend.min.js'
34
+ end
35
+
36
+ def http_backend_template(route_hash)
37
+ ERB.new(
38
+ File.read("#{template_directory}/#{route_hash.verb}.js.erb")
39
+ ).result(route_hash.instance_eval { binding })
40
+ end
41
+
42
+ def template_directory
43
+ path = File.join(__dir__, '..', 'templates/http_backend')
44
+ File.expand_path(path)
45
+ end
46
+
47
+ def append_uglified_hashes
48
+ RouteHashes.hashes.each do |route_hash|
49
+ File.open(dist_file, 'a') do |file|
50
+ file.write(
51
+ Uglifier.compile(
52
+ http_backend_template(route_hash)
53
+ )
54
+ )
55
+ end
56
+ end
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,44 @@
1
+ module Textualize
2
+ class New < Thor::Group
3
+ include Thor::Actions
4
+
5
+ argument :app_name, desc: 'Name for your documentation folder'
6
+ desc('Creates an initial folder structure for writing documentation')
7
+
8
+ def self.source_root
9
+ __dir__.chomp('/tasks')
10
+ end
11
+
12
+ def create_application_directory
13
+ directory "#{lib_directory}/templates/new/", app_name
14
+ end
15
+
16
+ def installation_complete
17
+ puts <<-POST_INSTALL_MESSAGE
18
+ ♪┏(°.°)┛┗(°.°)┓┗(°.°)┛┏(°.°)┓┏(°.°)┛┗(°.°)┓┗(°.°)┛┏(°.°)┓♪
19
+
20
+ Thank you for installing textualize, please finish setting up your
21
+ project with: `cd #{app_name} && npm install`
22
+
23
+ In your new folder you can now use the following commands:
24
+
25
+ * textualize server
26
+ * textualize request_specs
27
+ * textualize seeds
28
+ * textualize factories
29
+
30
+ Each command depends on gulp being installed. Please install gulp globally with
31
+ ``npm install -g gulp`` and locally with ``npm install``.
32
+
33
+ ♪┏(°.°)┛┗(°.°)┓┗(°.°)┛┏(°.°)┓┏(°.°)┛┗(°.°)┓┗(°.°)┛┏(°.°)┓♪
34
+ POST_INSTALL_MESSAGE
35
+ end
36
+
37
+ private
38
+
39
+ def lib_directory
40
+ __dir__.chomp('/tasks')
41
+ end
42
+
43
+ end
44
+ end