lurker 0.0.1 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (133) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.asc +8 -8
  3. data.tar.gz.asc +8 -8
  4. data/.gitignore +4 -0
  5. data/.gitmodules +3 -0
  6. data/.rspec +2 -0
  7. data/.travis.yml +7 -0
  8. data/Gemfile.local +28 -0
  9. data/README.md +128 -13
  10. data/Rakefile +179 -0
  11. data/bin/lurker +14 -0
  12. data/cucumber.yml +2 -0
  13. data/features/README.md +22 -0
  14. data/features/controller_specs/nested_schema_scaffolding.feature +81 -0
  15. data/features/controller_specs/readme.md +4 -0
  16. data/features/controller_specs/schema_scaffolding.feature +61 -0
  17. data/features/controller_specs/test_endpoint.feature +119 -0
  18. data/features/docs_generation/html_generation.feature +75 -0
  19. data/features/docs_generation/multidomain_support.feature +82 -0
  20. data/features/docs_generation/readme.md +2 -0
  21. data/features/request_specs/nested_schema_scaffolding.feature +65 -0
  22. data/features/request_specs/readme.md +4 -0
  23. data/features/request_specs/schema_scaffolding.feature +71 -0
  24. data/features/step_definitions/additional_cli_steps.rb +63 -0
  25. data/features/support/env.rb +46 -0
  26. data/lib/endpoint-schema.yaml +30 -0
  27. data/lib/lurker.rb +57 -2
  28. data/lib/lurker/capistrano.rb +1 -0
  29. data/lib/lurker/cli.rb +202 -0
  30. data/lib/lurker/controller_spec_watcher.rb +61 -0
  31. data/lib/lurker/endpoint.rb +180 -0
  32. data/lib/lurker/endpoint_scaffold.rb +133 -0
  33. data/lib/lurker/engine.rb +11 -0
  34. data/lib/lurker/erb_schema_context.rb +9 -0
  35. data/lib/lurker/form_builder.rb +64 -0
  36. data/lib/lurker/jaml_descriptor.rb +14 -0
  37. data/lib/lurker/meta_service.rb +46 -0
  38. data/lib/lurker/presenters/base_presenter.rb +91 -0
  39. data/lib/lurker/presenters/endpoint_presenter.rb +207 -0
  40. data/lib/lurker/presenters/json_presenter.rb +31 -0
  41. data/lib/lurker/presenters/meta_service_presenter.rb +85 -0
  42. data/lib/lurker/presenters/response_code_presenter.rb +41 -0
  43. data/lib/lurker/presenters/schema_presenter.rb +200 -0
  44. data/lib/lurker/presenters/service_presenter.rb +103 -0
  45. data/lib/lurker/ref_object.rb +22 -0
  46. data/lib/lurker/rendering_controller.rb +61 -0
  47. data/lib/lurker/request_spec_watcher.rb +69 -0
  48. data/lib/lurker/sandbox.rb +24 -0
  49. data/lib/lurker/schema.rb +81 -0
  50. data/lib/lurker/server.rb +46 -0
  51. data/lib/lurker/service.rb +118 -0
  52. data/lib/lurker/spec_watcher.rb +124 -0
  53. data/lib/lurker/tasks/capistrano.rake +14 -0
  54. data/lib/lurker/templates/endpoint.html.erb +62 -0
  55. data/lib/lurker/templates/endpoint.md.erb +40 -0
  56. data/lib/lurker/templates/fonts/FontAwesome.otf +0 -0
  57. data/lib/lurker/templates/fonts/fontawesome-webfont.eot +0 -0
  58. data/lib/lurker/templates/fonts/fontawesome-webfont.svg +414 -0
  59. data/lib/lurker/templates/fonts/fontawesome-webfont.ttf +0 -0
  60. data/lib/lurker/templates/fonts/fontawesome-webfont.woff +0 -0
  61. data/lib/lurker/templates/fonts/glyphicons-halflings-regular.eot +0 -0
  62. data/lib/lurker/templates/fonts/glyphicons-halflings-regular.svg +229 -0
  63. data/lib/lurker/templates/fonts/glyphicons-halflings-regular.ttf +0 -0
  64. data/lib/lurker/templates/fonts/glyphicons-halflings-regular.woff +0 -0
  65. data/lib/lurker/templates/javascripts/application.js +17 -0
  66. data/lib/lurker/templates/javascripts/demo/dashboard-demo.js +117 -0
  67. data/lib/lurker/templates/javascripts/demo/flot-demo.js +1242 -0
  68. data/lib/lurker/templates/javascripts/demo/morris-demo.js +155 -0
  69. data/lib/lurker/templates/javascripts/lurker.js +147 -0
  70. data/lib/lurker/templates/javascripts/plugins/dataTables/dataTables.bootstrap.js +245 -0
  71. data/lib/lurker/templates/javascripts/plugins/dataTables/jquery.dataTables.js +14013 -0
  72. data/lib/lurker/templates/javascripts/plugins/flot/excanvas.min.js +1 -0
  73. data/lib/lurker/templates/javascripts/plugins/flot/jquery.flot.js +2599 -0
  74. data/lib/lurker/templates/javascripts/plugins/flot/jquery.flot.pie.js +750 -0
  75. data/lib/lurker/templates/javascripts/plugins/flot/jquery.flot.resize.js +60 -0
  76. data/lib/lurker/templates/javascripts/plugins/flot/jquery.flot.tooltip.min.js +12 -0
  77. data/lib/lurker/templates/javascripts/plugins/metisMenu/jquery.metisMenu.js +45 -0
  78. data/lib/lurker/templates/javascripts/plugins/morris/morris.js +1888 -0
  79. data/lib/lurker/templates/javascripts/plugins/morris/raphael-2.1.0.min.js +10 -0
  80. data/lib/lurker/templates/javascripts/prettify.js +28 -0
  81. data/lib/lurker/templates/javascripts/sb-admin.js +18 -0
  82. data/lib/lurker/templates/layouts/_navbar_right.html.erb +13 -0
  83. data/lib/lurker/templates/layouts/_sidemenu.html.erb +16 -0
  84. data/lib/lurker/templates/layouts/_sidesearch.html.erb +12 -0
  85. data/lib/lurker/templates/layouts/application.html.erb +67 -0
  86. data/lib/lurker/templates/lurker/rendering/_breadcrumb.html.erb +9 -0
  87. data/lib/lurker/templates/lurker/rendering/_endpoint.html.erb +65 -0
  88. data/lib/lurker/templates/lurker/rendering/_information_warning_li.html.erb +8 -0
  89. data/lib/lurker/templates/lurker/rendering/_left_menu.html.erb +38 -0
  90. data/lib/lurker/templates/lurker/rendering/_param_form_element.html.erb +10 -0
  91. data/lib/lurker/templates/lurker/rendering/_param_form_legend.html.erb +1 -0
  92. data/lib/lurker/templates/lurker/rendering/_route_definitions.html.erb +7 -0
  93. data/lib/lurker/templates/lurker/rendering/_undefined_route.html.erb +6 -0
  94. data/lib/lurker/templates/lurker/rendering/index.html.erb +6 -0
  95. data/lib/lurker/templates/lurker/rendering/show.html.erb +102 -0
  96. data/lib/lurker/templates/meta_service.html.erb +54 -0
  97. data/lib/lurker/templates/meta_service.md.erb +20 -0
  98. data/lib/lurker/templates/public/application.css +7684 -0
  99. data/lib/lurker/templates/public/application.js +15171 -0
  100. data/lib/lurker/templates/public/fonts/FontAwesome.otf +0 -0
  101. data/lib/lurker/templates/public/fonts/fontawesome-webfont.eot +0 -0
  102. data/lib/lurker/templates/public/fonts/fontawesome-webfont.svg +414 -0
  103. data/lib/lurker/templates/public/fonts/fontawesome-webfont.ttf +0 -0
  104. data/lib/lurker/templates/public/fonts/fontawesome-webfont.woff +0 -0
  105. data/lib/lurker/templates/public/fonts/glyphicons-halflings-regular.eot +0 -0
  106. data/lib/lurker/templates/public/fonts/glyphicons-halflings-regular.svg +229 -0
  107. data/lib/lurker/templates/public/fonts/glyphicons-halflings-regular.ttf +0 -0
  108. data/lib/lurker/templates/public/fonts/glyphicons-halflings-regular.woff +0 -0
  109. data/lib/lurker/templates/service.html.erb +50 -0
  110. data/lib/lurker/templates/service.md.erb +18 -0
  111. data/lib/lurker/templates/shared/endpoint_name.html.erb +8 -0
  112. data/lib/lurker/templates/shared/endpoint_name.md.erb +1 -0
  113. data/lib/lurker/templates/styles.css +75 -0
  114. data/lib/lurker/templates/stylesheets/application.css +22 -0
  115. data/lib/lurker/templates/stylesheets/bootstrap.css +5831 -0
  116. data/lib/lurker/templates/stylesheets/font-awesome/css/font-awesome.css +1331 -0
  117. data/lib/lurker/templates/stylesheets/plugins/dataTables/dataTables.bootstrap.css +233 -0
  118. data/lib/lurker/templates/stylesheets/plugins/morris/morris-0.4.3.min.css +2 -0
  119. data/lib/lurker/templates/stylesheets/plugins/social-buttons/social-buttons.css +68 -0
  120. data/lib/lurker/templates/stylesheets/plugins/timeline/timeline.css +144 -0
  121. data/lib/lurker/templates/stylesheets/prettify-desert.css +34 -0
  122. data/lib/lurker/templates/stylesheets/prettify.css +1 -0
  123. data/lib/lurker/templates/stylesheets/sb-admin.css +315 -0
  124. data/lib/lurker/validation_error.rb +4 -0
  125. data/lib/lurker/validator.rb +10 -0
  126. data/lib/lurker/version.rb +1 -1
  127. data/lurker.gemspec +26 -3
  128. data/spec/lurker/endpoint_spec.rb +6 -0
  129. data/spec/spec_helper.rb +12 -0
  130. data/templates/generate_stuff.rb +241 -0
  131. data/templates/lurker_app.rb +24 -0
  132. metadata +384 -8
  133. metadata.gz.asc +8 -8
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2021103dfcbcc4a3b23e6f2b2a78e440145a7aa7
4
- data.tar.gz: 788c8755abc04786c4c19554d3c722cc215bf7b5
3
+ metadata.gz: 7e601ce25f19a4934646ebdf2ae0444a4ba5d723
4
+ data.tar.gz: b7618552c90b8a5722c285b159135ac118c38c14
5
5
  SHA512:
6
- metadata.gz: 10bf2785c51a74fa50b8e5c1df2e0c794d866d77ce0c6bde27d0c0264db1b941192160b16ccbab8f8dbfe5298619898357f236668dec120c068871789a972252
7
- data.tar.gz: 3ce60339db44c3ebc2a4d961336070f9a63d3f145d9a1b181e7807e0dd382e7e7dd375d4542cb629139c399846196107b8974c5ce635f691961381f80cb325fe
6
+ metadata.gz: 0426b14b4b0193db2834219cfc944257c2694c49d86f844fa12778dfc83bb24c78f7f806f0d1df252d24640223062d835e3a62f5b9bd4f953ce5f7ef0104de81
7
+ data.tar.gz: 69b8ded078f03ccc034797e9602e5fdbe90535e7a98316ea0cdebbf5bd619fb7580786b400cad04329fda9c8537e83977e4e1f3b8bf353c4bfc5453477518626
checksums.yaml.gz.asc CHANGED
@@ -1,12 +1,12 @@
1
1
  -----BEGIN PGP SIGNATURE-----
2
- Version: GnuPG/MacGPG2 v2.0.22 (Darwin)
2
+ Version: GnuPG v1
3
3
  Comment: GPGTools - http://gpgtools.org
4
4
 
5
- iQEcBAABCgAGBQJTDdKbAAoJENcoxKfNVdjbL+8IAK+j2nTsFnpfwgwfiNMfbiRW
6
- TmVI506l4G6n8F3dtLJluAtvZ2a6nKzKqsmB5QykBS/Rlh9el7G32q+sxb9PLUWl
7
- q0nTVWj9KEtbAa1NHgWNEv/eU4wbqcxr1trnwbQ/pQj2q2k9/JzuFLkXQHVXBj1I
8
- 7tlgvVcg656FxcnRqfCJt2FLvnLlxzpT/LZo4fJL9al6sMMbb4sn2wlwxO112NxT
9
- EL18QCXOsDNt02OAyruj9A467PibiXP6Jf1rtbC/PN2zolPuAMhU4BXQKHM7OQxA
10
- qrXcvicQ8Ei7zkHScNwnjJ0tzEWPAPvt3nTtm9006X6LGccyitIaHdx1m/UrRaI=
11
- =UNEA
5
+ iQEcBAABCgAGBQJTUFPHAAoJENcoxKfNVdjbOiYH/imY5zbQeBr6hrWkjRXz89Ef
6
+ 2+ARZFzUvk5WZ+iejtnx5EczeU2R7spkJ+YK5o/+vUCT8yoIvZTdCZggTVEcQElq
7
+ ee5x3jj5SW4NkvfDfgdgBqyZPKZF/EiOBrsEyR/LS+bacUh5yKD4BOQxwxeMQ7Dh
8
+ jGnyQdpJ4MPxRx2eyuYwi5kVC45sXdmFeYXYW8lyslMbGLzDIrQzzTcyxosRgsze
9
+ Dy9u1wL4SE0y7wm4zpm6DiYaOgi/GRlp223z/SfsGq3bNg8d1deuI3vDKiPTDGus
10
+ 2P9W1wtB3xVbL7TYyF/t6T47lGe4jpY30FKtjDHpAPYxKywCCHdRa7A8IePbIIs=
11
+ =p3AX
12
12
  -----END PGP SIGNATURE-----
data.tar.gz.asc CHANGED
@@ -1,12 +1,12 @@
1
1
  -----BEGIN PGP SIGNATURE-----
2
- Version: GnuPG/MacGPG2 v2.0.22 (Darwin)
2
+ Version: GnuPG v1
3
3
  Comment: GPGTools - http://gpgtools.org
4
4
 
5
- iQEcBAABCgAGBQJTDdKbAAoJENcoxKfNVdjbdTMIAI/w6DW8txsc7RmKCcVcgc14
6
- fv0beHs8rJPQFqMwu9j78houiYywFVmrAR6XNGISxfgnjw2wtYBeXHUQyvtdSmZR
7
- AxdW2Ud2OimCduzUKr+aROVew5uljFnj5A7VgQCzF8mvZZij3ulB0RMnWce3Yj9n
8
- EfO7HziilOipAQ2zRCshVDjl5RQ4JmFnconTYTg2LitldOXh5sZK3CqAADIbMF1M
9
- UxeEcY2UlD16wnC3gtwajmJsCl3cdphYIO9IEUpx6Itcp6mSJ7oTB8sFtwYyNcsv
10
- ZCV9xtf+qMk9a/0iBzHs9mnQsU3diqoybG7s0JQdVAoR2j0rRsXSRXgyWS67GsY=
11
- =/q1u
5
+ iQEcBAABCgAGBQJTUFO8AAoJENcoxKfNVdjbGzcH/jTfrX9MDTo8BtyuvAHbNDoC
6
+ EZycU+mf2Ukm1pdQfDKZxyPcn7OEwxaMikwm3FMGLqo+/plx59mS49wPX46Hjjlj
7
+ yZ7+C1YZTpSUxE+fOn1/afd6alzZ7CTHHprQFOZmPvuq02ewO8OK04iOlQYVVIG/
8
+ yjRQo9nweWGJpz7QtlP9Q5YxUduJwEk5fb2nmZG7c2JeQ7TmezpvO5qI5rrQmzv8
9
+ DqrUGamq4OgtGBU0Z8n7E2mdhTcujhk9ZNEGhfL3C9Wm97ehQkfI/8mRKwQEGD4V
10
+ OuQjzyb9d9CPfrpjbbZMjQLC+U+th91tzUCi2q/oh4C3gBWad2u+771joRspC38=
11
+ =qyaU
12
12
  -----END PGP SIGNATURE-----
data/.gitignore CHANGED
@@ -15,3 +15,7 @@ spec/reports
15
15
  test/tmp
16
16
  test/version_tmp
17
17
  tmp
18
+ vendor/bundle
19
+ features/support/selenuim.rb
20
+ Gemfile.local.lock
21
+ _site
data/.gitmodules ADDED
@@ -0,0 +1,3 @@
1
+ [submodule "app"]
2
+ path = tmp/lurker_app
3
+ url = git@heroku.com:lurker-app.git
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --colour
2
+ --format Fuubar
data/.travis.yml ADDED
@@ -0,0 +1,7 @@
1
+ language: ruby
2
+ install: bundle install -j4 --path vendor/bundle
3
+ cache:
4
+ directories:
5
+ - vendor/bundle
6
+ rvm:
7
+ - 2.1.0
data/Gemfile.local ADDED
@@ -0,0 +1,28 @@
1
+ # There is no need for these gems on travis and it's up to you whenever you use them
2
+ # See: https://github.com/gerrywastaken/Gemfile.local
3
+ # and GH's issue for bundler: https://github.com/bundler/bundler/issues/183
4
+ eval File.read('Gemfile')
5
+
6
+ # Add any gems and groups that you don't want to keep local
7
+ group :development do
8
+ # tools
9
+ gem 'pry-debugger'
10
+ gem 'pry-stack_explorer'
11
+ # rspec --format fuubar
12
+ gem 'fuubar'
13
+ # cucumber --format fuubar
14
+ gem 'fuubar-cucumber', github: 'martinciu/fuubar-cucumber', branch: 'master'
15
+ gem 'selenium-webdriver'
16
+
17
+ # deploy site
18
+ gem 'highline'
19
+
20
+ # build template static
21
+ # run `rake assets:precompile`
22
+ # to get bundled application.(js|css)
23
+ gem 'sprockets'
24
+ gem 'sass-rails'
25
+ gem 'bootstrap-sass', '~> 3.1.1'
26
+ gem 'jquery-rails'
27
+ gem 'remotipart'
28
+ end
data/README.md CHANGED
@@ -1,6 +1,15 @@
1
1
  # Lurker
2
2
 
3
- TODO: Write a gem description
3
+ The new de-facto for API testing your Rails application (Rails 3 & 4 both compatible)
4
+
5
+ [![Gem Version][GV img]][Gem Version]
6
+ [![Build Status][BS img]][Build Status]
7
+ [![Dependency Status][DS img]][Dependency Status]
8
+ [![Code Climate][CC img]][Code Climate]
9
+ [![Coverage Status][CS img]][Coverage Status]
10
+ [![Inline docs](http://inch-pages.github.io/github/razum2um/lurker.png)](http://inch-pages.github.io/github/razum2um/lurker)
11
+ [![githalytics.com alpha](https://cruel-carlota.pagodabox.com/87ced56265849ad6386c2ba0a78f8038 "githalytics.com")](http://githalytics.com/razum2um/lurker)
12
+
4
13
 
5
14
  ## Installation
6
15
 
@@ -8,22 +17,128 @@ Add this line to your application's Gemfile:
8
17
 
9
18
  gem 'lurker'
10
19
 
11
- And then execute:
20
+ ## Usage
12
21
 
13
- $ bundle
22
+ Write your [RSpec][rspec] [controller][rspec_controller_spec] or [request][rspec_request_spec] specs as usual,
23
+ but add `:lurker` mark (like documented [controller example][controler_spec_example] or [request spec example][request_spec_example]).
14
24
 
15
- Or install it yourself as:
25
+ describe Api::V1::UsersController, :lurker do
26
+ ...
16
27
 
17
- $ gem install lurker
28
+ And run the specs. That's all, easy!
18
29
 
19
- ## Usage
30
+ Please, commit your files under `Rails.root/lurker` directory.
31
+ Feel free to edit them according to [json-schema][json_schema] standart.
32
+ It can be very strict and flexible if you wish: see [example][json_schema_example],
33
+ but scaffolded schemas are pretty good by default.
34
+
35
+ A lurker/ExampleApp.service.yml
36
+ A lurker/api/v1/users-GET.json.yml
37
+ A lurker/api/v1/users/__user_id/repos-GET.json.yml
38
+
39
+ ## Profit!
40
+
41
+ Now, every test run lurker will look into your requests and [vaditate them][failed_spec_example]
42
+ and it fails if your code changes the api!
43
+
44
+ Failure/Error: post :create [...]
45
+ Lurker::ValidationError:
46
+ Request
47
+ - The property '#/' contains additional properties ["social_network"] outside of the schema
48
+ when none are allowed in schema file:///.../lurker/api/v1/users-POST.json.yml#
49
+ Response
50
+ - The property '#/user/last_sign_in_at' of type String did not match the following type:
51
+ null in schema file:///.../lurker/api/v1/users-POST.json.yml#
52
+
53
+ Let's run your `rails s` and visit [http://localhost:3000/lurker/](http://localhost:3000/lurker/) (or see [demo][demo_app])
54
+
55
+ Now, you can test your API on-line (for real)
56
+
57
+ ## Features
58
+
59
+ - [Autoscaffolding for non-covered API endpoints][controler_spec_example]
60
+ - [Autotesting for covered endpoint once written][failed_spec_example] (both request & response!)
61
+ - [Pretty HTML documentation based on your schemas][html_generation_example]
62
+ - [Pretty submit form to test API endpoints (live) based on schemas][demo_live] (enter a name & press "Submit")
63
+ - [Handling URLs with dynamic segments][nested_controller_spec_example] (such as `api/v1/:user_id/repos`)
64
+ - Multiple docs for many test cases
65
+ - JSON-Schema partials (inline reference to other schemas)
66
+ - ERB support inside `.json.yml.erb`
67
+ - HTTP-Auth authorization for your online docs
68
+ - Separate API-services generated within one test suite
69
+ - Capistrano integration
70
+ - JSON-Schema draft-v4 support
71
+ - Static site deploy and milti-domain support
72
+
73
+
74
+ ## Sandbox mode for Live API testing
75
+
76
+ # make sure it's not production!
77
+ # e.g. config/environtents/staging.rb
78
+ config.middleware.use Lurker::Sandbox
79
+
80
+ ## Demo application
81
+
82
+ You can clone the repo & run `rake build_example_docs`.
83
+ It will generate testing rails application under `tmp/lurker_app`.
84
+ Currently it is deployed [here][demo_app].
85
+
86
+ ## Contributions
87
+
88
+ To get new version of bundled `bootstrap` or to use debugger in specs run:
89
+
90
+ bundle --gemfile Gemfile.local
91
+ export BUNDLE_GEMFILE=$PWD/Gemfile.local
92
+
93
+ rake assets:precompile # to build assets
94
+ cucumber some/feature # to use pry-debugger
95
+
96
+ ## Todo
97
+
98
+ - More tests
99
+ - More docs
100
+ - Production middleware to validate real input/output
101
+ - Render lurker-app to gh-pages with arbitrary endpoint (my & heroku)
102
+ - Render dosc like these: [gh_api][gh_api]
103
+ - Auto extraction for models into json-schema partials (in responses at least)
104
+ - Auto marking of attributes as required if `strong_params` are used
105
+ - Sinatra support
106
+ - Better Diff expected-schema vs recorded schema
107
+ - XML api testing via .xsd
108
+
109
+ ## Acknoledgements
110
+
111
+ Sponsored by [Evil Martians][evil_martians], thanks!
112
+
113
+ This gem is quite opinionated and relies on rails & rspec - if you're
114
+ interested in anything else, please take a look at [api_taster][api_taster] or [fdoc][fdoc],
115
+ This gem is heavily inspirated by them. Thanks, @square & @fredwu
20
116
 
21
- TODO: Write usage instructions here
117
+ [gh_api]: https://developer.github.com/v3/meta/
118
+ [rspec]: https://github.com/rspec/rspec-rails
119
+ [api_taster]: https://github.com/fredwu/api_taster
120
+ [fdoc]: https://github.com/square/fdoc
121
+ [rspec_controller_spec]: https://www.relishapp.com/rspec/rspec-rails/docs/controller-specs
122
+ [rspec_request_spec]: https://www.relishapp.com/rspec/rspec-rails/docs/request-specs/request-spec
123
+ [json_schema]: http://json-schema.org/
124
+ [json_schema_example]: http://json-schema.org/example2.html
125
+ [failed_spec_example]: https://www.relishapp.com/razum2um/lurker/docs/controller-specs/test-endpoint
126
+ [controler_spec_example]: https://www.relishapp.com/razum2um/lurker/docs/controller-specs/schema-scaffolding
127
+ [nested_controller_spec_example]: https://www.relishapp.com/razum2um/lurker/docs/controller-specs/nested-schema-scaffolding
128
+ [request_spec_example]: https://www.relishapp.com/razum2um/lurker/docs/request-specs/schema-scaffolding
129
+ [html_generation_example]: https://www.relishapp.com/razum2um/lurker/docs/docs-generation/html-generation
130
+ [evil_martians]: http://evilmartians.com/
131
+ [demo_app]: http://lurker-app.herokuapp.com/lurker/
132
+ [demo_live]: http://lurker-app.herokuapp.com/lurker/api/v1/users-POST.html
22
133
 
23
- ## Contributing
134
+ [Gem Version]: https://rubygems.org/gems/lurker
135
+ [Build Status]: https://travis-ci.org/razum2um/lurker
136
+ [Dependency Status]: https://gemnasium.com/razum2um/lurker
137
+ [Code Climate]: https://codeclimate.com/github/razum2um/lurker
138
+ [Coverage Status]: https://coveralls.io/r/razum2um/lurker
24
139
 
25
- 1. Fork it ( http://github.com/<my-github-username>/lurker/fork )
26
- 2. Create your feature branch (`git checkout -b my-new-feature`)
27
- 3. Commit your changes (`git commit -am 'Add some feature'`)
28
- 4. Push to the branch (`git push origin my-new-feature`)
29
- 5. Create new Pull Request
140
+ [GV img]: https://badge.fury.io/rb/lurker.png
141
+ [BS img]: https://travis-ci.org/razum2um/lurker.png
142
+ [DS img]: https://gemnasium.com/razum2um/lurker.png
143
+ [CC img]: https://codeclimate.com/github/razum2um/lurker.png
144
+ [CS img]: https://coveralls.io/repos/razum2um/lurker/badge.png?branch=master
data/Rakefile CHANGED
@@ -1 +1,180 @@
1
1
  require "bundler/gem_tasks"
2
+ require 'bundler/setup'
3
+ require 'rspec/core/rake_task'
4
+ require 'cucumber/rake/task'
5
+ require 'coveralls/rake/task'
6
+
7
+ desc 'pry console for gem'
8
+ task :c do
9
+ require 'pry'
10
+ require 'lurker'
11
+ ARGV.clear
12
+ Pry.start
13
+ end
14
+
15
+ namespace :assets do
16
+ desc 'compiles static css & js for web'
17
+ task :precompile do
18
+ require 'pathname'
19
+ require 'logger'
20
+ require 'fileutils'
21
+
22
+ require 'lurker/cli'
23
+
24
+ require_with_help 'sprockets'
25
+ require_with_help 'sass'
26
+
27
+ ROOT = Pathname(File.dirname(__FILE__))
28
+ LOGGER = Logger.new(STDOUT)
29
+ BUNDLES = %w( application.css application.js )
30
+ BUILD_DIR = Pathname.new Lurker::Cli.precompiled_static_root
31
+ SOURCE_DIR = Pathname.new Lurker::Cli.source_root
32
+
33
+ FileUtils.rm_rf(BUILD_DIR)
34
+ FileUtils.mkdir_p(BUILD_DIR)
35
+
36
+ # raw copy
37
+ %w[fonts].each do |subdir|
38
+ FileUtils.cp_r(SOURCE_DIR.join(subdir), BUILD_DIR.join(subdir))
39
+ end
40
+
41
+ sprockets = Sprockets::Environment.new(ROOT) do |env|
42
+ env.logger = LOGGER
43
+ end
44
+
45
+ sprockets.context_class.class_eval do
46
+ def asset_path(path, options = {})
47
+ '/'
48
+ end
49
+ end
50
+
51
+ sprockets.append_path(SOURCE_DIR.join('javascripts').to_s)
52
+ sprockets.append_path(SOURCE_DIR.join('stylesheets').to_s)
53
+
54
+ %w[jquery-rails bootstrap-sass remotipart].each do |gem|
55
+ gem_path = Pathname.new(Bundler.rubygems.find_name(gem).first.full_gem_path)
56
+ %w[javascripts stylesheets].each do |prefix|
57
+ sprockets.append_path(gem_path.join('vendor', 'assets', prefix).to_s)
58
+ end
59
+ end
60
+
61
+ BUNDLES.each do |bundle|
62
+ assets = sprockets.find_asset(bundle)
63
+ realname = (assets.pathname.basename.to_s.split(".").take_while { |s| !s.match /^(js|css)$/ } + [$~.to_s]).join(".")
64
+ assets.write_to(BUILD_DIR.join(realname))
65
+ end
66
+ end
67
+ end
68
+
69
+ # testing
70
+
71
+ Coveralls::RakeTask.new
72
+
73
+ RSpec::Core::RakeTask.new(:spec) do |t|
74
+ t.rspec_opts = "--format progress"
75
+ end
76
+
77
+ Cucumber::Rake::Task.new(:cucumber) do |t|
78
+ t.cucumber_opts = "features --format progress --tags ~@wip"
79
+ end
80
+
81
+ EXAMPLE_APP = 'tmp/lurker_app'
82
+ EXAMPLE_PATH = File.expand_path("../#{EXAMPLE_APP}", __FILE__)
83
+
84
+ namespace :clobber do
85
+ desc "clobber coverage"
86
+ task :coverage do
87
+ rm_rf File.expand_path('../coverage', __FILE__)
88
+ end
89
+
90
+ desc "clobber the generated app"
91
+ task :app do
92
+ FileUtils.mkdir_p EXAMPLE_PATH
93
+ in_lurker_app "bin/spring stop" if File.exist?("#{EXAMPLE_PATH}/bin/spring")
94
+ Dir.chdir EXAMPLE_PATH do
95
+ Dir.glob("*", File::FNM_DOTMATCH).each do |fname|
96
+ next if fname == '.' || fname == '..' || fname == '.git'
97
+ FileUtils.rm_rf fname
98
+ end
99
+ end
100
+ end
101
+ end
102
+
103
+ namespace :generate do
104
+ desc "generate a fresh app with rspec installed"
105
+ task :app do |t|
106
+ if needs_generation?
107
+ sh "bundle exec rails new #{EXAMPLE_APP} -d postgresql -m #{File.expand_path '../templates/lurker_app.rb', __FILE__} --skip-javascript --skip-sprockets --skip-git --skip-test-unit --skip-keeps --quiet"
108
+ end
109
+ end
110
+
111
+ desc "generate a bunch of stuff with generators"
112
+ task :stuff do
113
+ in_lurker_app "LOCATION='../../templates/generate_stuff.rb' bin/rake rails:template --quiet --silent"
114
+ end
115
+ end
116
+
117
+ def in_lurker_app(command)
118
+ Dir.chdir(EXAMPLE_PATH) do
119
+ Bundler.with_clean_env do
120
+ sh command
121
+ end
122
+ end
123
+ end
124
+
125
+ def needs_generation?
126
+ !File.exists?("#{EXAMPLE_PATH}/Gemfile")
127
+ end
128
+
129
+ def require_with_help(name)
130
+ begin
131
+ require name
132
+ rescue LoadError
133
+ puts "Incorrect Gemfile, run: `bundle --gemfile Gemfile.local` and"
134
+ puts "BUNDLE_GEMFILE=$PWD/Gemfile.local #{$0}"
135
+ raise
136
+ end
137
+ end
138
+
139
+ desc 'destroys & recreates new test app'
140
+ task :regenerate => ["clobber:coverage", "clobber:app", "generate:app", "generate:stuff"]
141
+
142
+ desc 'run cucumber in a fresh env'
143
+ task :features => [:regenerate, :cucumber]
144
+
145
+ desc 'convert docs for example app'
146
+ task :build_example_docs => :features do
147
+ in_lurker_app "bin/lurker convert"
148
+ end
149
+
150
+ namespace :heroku do
151
+ desc 'pushes example lurker_app to heroku'
152
+ task :push do
153
+ require_with_help 'highline/import'
154
+ in_lurker_app "echo 'bin/lurker' > .gitignore"
155
+ in_lurker_app "echo 'log' >> .gitignore"
156
+ # commit migration and deploy by hand first time
157
+ in_lurker_app "echo 'db/*' >> .gitignore"
158
+ in_lurker_app "echo 'tmp/*' >> .gitignore"
159
+
160
+
161
+ in_lurker_app "git add -A"
162
+ in_lurker_app "git status"
163
+ choose do |menu|
164
+ menu.prompt = 'Commit & push & deploy?'
165
+ menu.choice(:yes) {
166
+ in_lurker_app "git commit -a -m 'auto commit: #{`git log --oneline -n 1`.strip}'"
167
+ in_lurker_app "git push origin master"
168
+ in_lurker_app "heroku run rake db:import --app lurker-app"
169
+ }
170
+ menu.choice(:no) { say("Exit") }
171
+ end
172
+ end
173
+
174
+ desc 'rebuilds & pushes app to heroku'
175
+ task :deploy => [:build_example_docs, 'heroku:push'] do
176
+ end
177
+ end
178
+
179
+ task :default => [:spec, :regenerate, :cucumber, 'coveralls:push']
180
+