landable 1.7.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 (310) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +13 -0
  3. data/CHANGELOG.md +5 -0
  4. data/Gemfile +15 -0
  5. data/MIT-LICENSE +20 -0
  6. data/README.md +56 -0
  7. data/Rakefile +22 -0
  8. data/app/controllers/concerns/landable/variables_concern.rb +38 -0
  9. data/app/controllers/landable/api/access_tokens_controller.rb +48 -0
  10. data/app/controllers/landable/api/assets_controller.rb +55 -0
  11. data/app/controllers/landable/api/categories_controller.rb +13 -0
  12. data/app/controllers/landable/api/directories_controller.rb +19 -0
  13. data/app/controllers/landable/api/page_revisions_controller.rb +38 -0
  14. data/app/controllers/landable/api/pages_controller.rb +96 -0
  15. data/app/controllers/landable/api/templates_controller.rb +33 -0
  16. data/app/controllers/landable/api/themes_controller.rb +57 -0
  17. data/app/controllers/landable/api_controller.rb +75 -0
  18. data/app/controllers/landable/application_controller.rb +4 -0
  19. data/app/controllers/landable/public/pages_controller.rb +25 -0
  20. data/app/controllers/landable/public/preview/page_revisions_controller.rb +16 -0
  21. data/app/controllers/landable/public/preview/pages_controller.rb +16 -0
  22. data/app/controllers/landable/public/sitemap_controller.rb +18 -0
  23. data/app/decorators/landable/null_page_decorator.rb +26 -0
  24. data/app/decorators/landable/page_decorator.rb +40 -0
  25. data/app/helpers/landable/application_helper.rb +13 -0
  26. data/app/helpers/landable/pages_helper.rb +20 -0
  27. data/app/models/concerns/landable/has_assets.rb +74 -0
  28. data/app/models/concerns/landable/table_name.rb +12 -0
  29. data/app/models/concerns/landable/traffic/table_name.rb +14 -0
  30. data/app/models/landable/access_token.rb +20 -0
  31. data/app/models/landable/asset.rb +63 -0
  32. data/app/models/landable/asset_search_engine.rb +20 -0
  33. data/app/models/landable/author.rb +12 -0
  34. data/app/models/landable/category.rb +27 -0
  35. data/app/models/landable/directory.rb +23 -0
  36. data/app/models/landable/page.rb +259 -0
  37. data/app/models/landable/page_revision.rb +74 -0
  38. data/app/models/landable/page_search_engine.rb +20 -0
  39. data/app/models/landable/search_engine.rb +39 -0
  40. data/app/models/landable/template.rb +24 -0
  41. data/app/models/landable/theme.rb +20 -0
  42. data/app/models/landable/traffic/access.rb +11 -0
  43. data/app/models/landable/traffic/ad_group.rb +11 -0
  44. data/app/models/landable/traffic/ad_type.rb +11 -0
  45. data/app/models/landable/traffic/attribution.rb +38 -0
  46. data/app/models/landable/traffic/bid_match_type.rb +11 -0
  47. data/app/models/landable/traffic/browser.rb +11 -0
  48. data/app/models/landable/traffic/campaign.rb +11 -0
  49. data/app/models/landable/traffic/city.rb +11 -0
  50. data/app/models/landable/traffic/content.rb +11 -0
  51. data/app/models/landable/traffic/cookie.rb +16 -0
  52. data/app/models/landable/traffic/country.rb +11 -0
  53. data/app/models/landable/traffic/creative.rb +11 -0
  54. data/app/models/landable/traffic/device.rb +11 -0
  55. data/app/models/landable/traffic/device_type.rb +11 -0
  56. data/app/models/landable/traffic/domain.rb +12 -0
  57. data/app/models/landable/traffic/event.rb +12 -0
  58. data/app/models/landable/traffic/event_type.rb +11 -0
  59. data/app/models/landable/traffic/experiment.rb +11 -0
  60. data/app/models/landable/traffic/http_method.rb +11 -0
  61. data/app/models/landable/traffic/ip_address.rb +11 -0
  62. data/app/models/landable/traffic/ip_lookup.rb +12 -0
  63. data/app/models/landable/traffic/keyword.rb +11 -0
  64. data/app/models/landable/traffic/location.rb +11 -0
  65. data/app/models/landable/traffic/match_type.rb +11 -0
  66. data/app/models/landable/traffic/medium.rb +11 -0
  67. data/app/models/landable/traffic/mime_type.rb +11 -0
  68. data/app/models/landable/traffic/network.rb +11 -0
  69. data/app/models/landable/traffic/owner.rb +10 -0
  70. data/app/models/landable/traffic/ownership.rb +10 -0
  71. data/app/models/landable/traffic/page_view.rb +24 -0
  72. data/app/models/landable/traffic/path.rb +13 -0
  73. data/app/models/landable/traffic/placement.rb +11 -0
  74. data/app/models/landable/traffic/platform.rb +11 -0
  75. data/app/models/landable/traffic/position.rb +11 -0
  76. data/app/models/landable/traffic/query_string.rb +12 -0
  77. data/app/models/landable/traffic/referer.rb +11 -0
  78. data/app/models/landable/traffic/region.rb +11 -0
  79. data/app/models/landable/traffic/search_term.rb +11 -0
  80. data/app/models/landable/traffic/source.rb +11 -0
  81. data/app/models/landable/traffic/target.rb +11 -0
  82. data/app/models/landable/traffic/user_agent.rb +28 -0
  83. data/app/models/landable/traffic/user_agent_type.rb +11 -0
  84. data/app/models/landable/traffic/visit.rb +15 -0
  85. data/app/models/landable/traffic/visitor.rb +13 -0
  86. data/app/responders/landable/api_responder.rb +76 -0
  87. data/app/responders/landable/page_render_responder.rb +15 -0
  88. data/app/serializers/landable/access_token_serializer.rb +6 -0
  89. data/app/serializers/landable/asset_serializer.rb +14 -0
  90. data/app/serializers/landable/author_serializer.rb +5 -0
  91. data/app/serializers/landable/category_serializer.rb +5 -0
  92. data/app/serializers/landable/directory_serializer.rb +8 -0
  93. data/app/serializers/landable/page_revision_serializer.rb +15 -0
  94. data/app/serializers/landable/page_serializer.rb +31 -0
  95. data/app/serializers/landable/template_serializer.rb +5 -0
  96. data/app/serializers/landable/theme_serializer.rb +7 -0
  97. data/app/services/landable/authentication_service.rb +44 -0
  98. data/app/services/landable/registration_service.rb +13 -0
  99. data/app/services/landable/render_service.rb +86 -0
  100. data/app/services/landable/tidy_service.rb +155 -0
  101. data/app/uploaders/landable/asset_uploader.rb +9 -0
  102. data/app/validators/path_validator.rb +12 -0
  103. data/app/validators/url_validator.rb +13 -0
  104. data/app/views/templates/preview.liquid +122 -0
  105. data/bin/rails +8 -0
  106. data/bin/redb +7 -0
  107. data/config.ru +7 -0
  108. data/config/cucumber.yml +5 -0
  109. data/config/routes.rb +62 -0
  110. data/db/migrate/20130510221424_create_landable_schema.rb +338 -0
  111. data/db/migrate/20130909182713_landable_pages__add_updated_by.rb +11 -0
  112. data/db/migrate/20130909182715_landable_page_revisions__break_out_snapshot.rb +72 -0
  113. data/db/migrate/20130909191153_landable_pages__add_lock_version.rb +5 -0
  114. data/db/migrate/20131002220041_file_based_themes.rb +12 -0
  115. data/db/migrate/20131008164204_create_head_tag_on_page.rb +19 -0
  116. data/db/migrate/20131008193544_drop_status_codes_model.rb +44 -0
  117. data/db/migrate/20131028145652_add_traffic_schema.rb +276 -0
  118. data/db/migrate/20131101213623_add_dnt_column_to_visits.rb +7 -0
  119. data/db/migrate/20131104224120_add_meta_on_events.rb +7 -0
  120. data/db/migrate/20131106185946_add_index_on_page_revisions_path.rb +6 -0
  121. data/db/migrate/20131106193021_page_revisisons__path_status_code_index.rb +9 -0
  122. data/db/migrate/20131108212501_traffic_owner_ids_are_serials.rb +20 -0
  123. data/db/migrate/20131121150902_add_attribution_id_to_unique_index.rb +10 -0
  124. data/db/migrate/20131216214027_drop_browser_screenshot_tables.rb +6 -0
  125. data/db/migrate/20140128170659_file_backed_templates.rb +8 -0
  126. data/db/migrate/20140205193757_fix_status_codes.rb +24 -0
  127. data/db/migrate/20140206211322_add_response_time_to_traffic_page_views.rb +7 -0
  128. data/db/migrate/20140220170324_add_slug_to_categories.rb +14 -0
  129. data/db/migrate/20140220174630_add_abstract_and_hero_asset_to_pages_and_page_revisions.rb +8 -0
  130. data/db/migrate/20140224205516_rename_traffic_schema.rb +40 -0
  131. data/db/pgtap/pgtap.sql +9034 -0
  132. data/db/test/landable.access_tokens.sql +13 -0
  133. data/db/test/landable.assets.sql +16 -0
  134. data/db/test/landable.authors.sql +22 -0
  135. data/db/test/landable.categories.sql +9 -0
  136. data/db/test/landable.page_revisions.sql +41 -0
  137. data/db/test/landable.pages.sql +19 -0
  138. data/db/test/landable.templates.sql +15 -0
  139. data/db/test/landable.themes.sql +25 -0
  140. data/doc/schema/access_token.json +22 -0
  141. data/doc/schema/asset.json +65 -0
  142. data/doc/schema/author.json +30 -0
  143. data/doc/schema/directory.json +24 -0
  144. data/doc/schema/page.json +95 -0
  145. data/doc/schema/page_revision.json +70 -0
  146. data/doc/schema/theme.json +37 -0
  147. data/doc/schema/uuid.json +6 -0
  148. data/features/api/access_tokens.feature +84 -0
  149. data/features/api/assets.feature +46 -0
  150. data/features/api/cors.feature +25 -0
  151. data/features/api/pages.feature +42 -0
  152. data/features/api/preview.feature +16 -0
  153. data/features/api/templates.feature +33 -0
  154. data/features/api/themes.feature +33 -0
  155. data/features/liquid/body.feature +35 -0
  156. data/features/liquid/drops/categories.feature +54 -0
  157. data/features/liquid/tags.feature +168 -0
  158. data/features/public/content_types.feature +17 -0
  159. data/features/public/publishing.feature +45 -0
  160. data/features/public/status_codes.feature +25 -0
  161. data/features/public/views.feature +17 -0
  162. data/features/step_definitions/asset_steps.rb +60 -0
  163. data/features/step_definitions/core_api_steps.rb +139 -0
  164. data/features/step_definitions/debug_steps.rb +3 -0
  165. data/features/step_definitions/factory_steps.rb +124 -0
  166. data/features/step_definitions/html_steps.rb +9 -0
  167. data/features/step_definitions/liquid_steps.rb +79 -0
  168. data/features/step_definitions/revision_steps.rb +5 -0
  169. data/features/step_definitions/theme_steps.rb +43 -0
  170. data/features/support/env.rb +66 -0
  171. data/features/support/usefulness.rb +13 -0
  172. data/landable.gemspec +54 -0
  173. data/lib/generators/landable/collection/collection_generator.rb +0 -0
  174. data/lib/generators/landable/collection/templates/stylesheets/landable/%file_name%.less +0 -0
  175. data/lib/generators/landable/collection/templates/stylesheets/landable/%file_name%/mixins.less +0 -0
  176. data/lib/generators/landable/collection/templates/stylesheets/landable/%file_name%/variables.less +0 -0
  177. data/lib/generators/landable/component/component_generator.rb +0 -0
  178. data/lib/generators/landable/component/templates/javascripts/landable/%file_name%.less +0 -0
  179. data/lib/generators/landable/component/templates/stylesheets/landable/%file_name%.less +0 -0
  180. data/lib/generators/landable/install_generator.rb +19 -0
  181. data/lib/generators/landable/landable_generator.rb +22 -0
  182. data/lib/generators/templates/landable.rb +34 -0
  183. data/lib/landable.rb +30 -0
  184. data/lib/landable/configuration.rb +115 -0
  185. data/lib/landable/core_ext/ipaddr.rb +18 -0
  186. data/lib/landable/engine.rb +69 -0
  187. data/lib/landable/error.rb +16 -0
  188. data/lib/landable/inflections.rb +4 -0
  189. data/lib/landable/layout.rb +60 -0
  190. data/lib/landable/liquid.rb +27 -0
  191. data/lib/landable/liquid/asset_tags.rb +76 -0
  192. data/lib/landable/liquid/drops.rb +46 -0
  193. data/lib/landable/liquid/filters.rb +11 -0
  194. data/lib/landable/liquid/tags.rb +91 -0
  195. data/lib/landable/migration.rb +40 -0
  196. data/lib/landable/mime_types.rb +15 -0
  197. data/lib/landable/partial.rb +46 -0
  198. data/lib/landable/seeds.rb +36 -0
  199. data/lib/landable/traffic.rb +34 -0
  200. data/lib/landable/traffic/crawl_tracker.rb +9 -0
  201. data/lib/landable/traffic/noop_tracker.rb +8 -0
  202. data/lib/landable/traffic/ping_tracker.rb +9 -0
  203. data/lib/landable/traffic/scan_tracker.rb +9 -0
  204. data/lib/landable/traffic/scrape_tracker.rb +9 -0
  205. data/lib/landable/traffic/tracker.rb +283 -0
  206. data/lib/landable/traffic/user_tracker.rb +65 -0
  207. data/lib/landable/version.rb +10 -0
  208. data/lib/tasks/landable/cucumber.rake +67 -0
  209. data/lib/tasks/landable/data.rake +166 -0
  210. data/lib/tasks/landable/pgtap.rake +26 -0
  211. data/lib/tasks/landable/rdoc.rake +11 -0
  212. data/lib/tasks/landable/seed.rake +16 -0
  213. data/lib/tasks/landable/spec.rake +15 -0
  214. data/script/cucumber +10 -0
  215. data/spec/concerns/landable/has_assets_spec.rb +75 -0
  216. data/spec/concerns/landable/table_name_spec.rb +15 -0
  217. data/spec/concerns/landable/traffic/table_name_spec.rb +16 -0
  218. data/spec/controllers/concerns/landable/variables_concern_spec.rb +66 -0
  219. data/spec/controllers/landable/api/assets_controller_spec.rb +24 -0
  220. data/spec/controllers/landable/api/categories_controller_spec.rb +45 -0
  221. data/spec/controllers/landable/api/directories_controller_spec.rb +56 -0
  222. data/spec/controllers/landable/api/page_revisions_controller_spec.rb +29 -0
  223. data/spec/controllers/landable/api/pages_controller_spec.rb +271 -0
  224. data/spec/controllers/landable/api_controller_spec.rb +189 -0
  225. data/spec/controllers/public/preview/page_revisions_controller_spec.rb +41 -0
  226. data/spec/controllers/public/preview/pages_controller_spec.rb +36 -0
  227. data/spec/controllers/public/sitemap_controller_spec.rb +25 -0
  228. data/spec/decorators/page_decorator_spec.rb +90 -0
  229. data/spec/dummy/README.rdoc +28 -0
  230. data/spec/dummy/Rakefile +6 -0
  231. data/spec/dummy/app/assets/images/foo.jpg +0 -0
  232. data/spec/dummy/app/assets/javascripts/application.js +13 -0
  233. data/spec/dummy/app/assets/stylesheets/application.css +13 -0
  234. data/spec/dummy/app/controllers/application_controller.rb +10 -0
  235. data/spec/dummy/app/controllers/concerns/.keep +0 -0
  236. data/spec/dummy/app/controllers/priority_controller.rb +7 -0
  237. data/spec/dummy/app/helpers/application_helper.rb +5 -0
  238. data/spec/dummy/app/mailers/.keep +0 -0
  239. data/spec/dummy/app/models/.keep +0 -0
  240. data/spec/dummy/app/models/concerns/.keep +0 -0
  241. data/spec/dummy/app/views/layouts/application.html.erb +14 -0
  242. data/spec/dummy/app/views/layouts/priority.html.erb +18 -0
  243. data/spec/dummy/app/views/partials/_foobazz.html +1 -0
  244. data/spec/dummy/app/views/priority/show.html.erb +11 -0
  245. data/spec/dummy/bin/bundle +3 -0
  246. data/spec/dummy/bin/rails +4 -0
  247. data/spec/dummy/bin/rake +4 -0
  248. data/spec/dummy/config.ru +4 -0
  249. data/spec/dummy/config/application.rb +21 -0
  250. data/spec/dummy/config/boot.rb +5 -0
  251. data/spec/dummy/config/database.yml +60 -0
  252. data/spec/dummy/config/environment.rb +5 -0
  253. data/spec/dummy/config/environments/development.rb +29 -0
  254. data/spec/dummy/config/environments/production.rb +80 -0
  255. data/spec/dummy/config/environments/test.rb +42 -0
  256. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  257. data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  258. data/spec/dummy/config/initializers/inflections.rb +16 -0
  259. data/spec/dummy/config/initializers/landable.rb +22 -0
  260. data/spec/dummy/config/initializers/mime_types.rb +5 -0
  261. data/spec/dummy/config/initializers/secret_token.rb +12 -0
  262. data/spec/dummy/config/initializers/session_store.rb +3 -0
  263. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  264. data/spec/dummy/config/locales/en.yml +23 -0
  265. data/spec/dummy/config/routes.rb +4 -0
  266. data/spec/dummy/db/structure.sql +3736 -0
  267. data/spec/dummy/lib/assets/.keep +0 -0
  268. data/spec/dummy/log/.keep +0 -0
  269. data/spec/dummy/public/404.html +58 -0
  270. data/spec/dummy/public/422.html +58 -0
  271. data/spec/dummy/public/500.html +57 -0
  272. data/spec/dummy/public/favicon.ico +0 -0
  273. data/spec/factories/asset.rb +29 -0
  274. data/spec/factories/authors.rb +12 -0
  275. data/spec/factories/category.rb +6 -0
  276. data/spec/factories/page_revision.rb +6 -0
  277. data/spec/factories/pages.rb +33 -0
  278. data/spec/factories/template.rb +13 -0
  279. data/spec/factories/theme.rb +14 -0
  280. data/spec/fixtures/assets/cthulhu.jpg +0 -0
  281. data/spec/fixtures/assets/panda.png +0 -0
  282. data/spec/fixtures/assets/sloth.png +0 -0
  283. data/spec/fixtures/assets/small.pdf +0 -0
  284. data/spec/helpers/pages_helper_spec.rb +35 -0
  285. data/spec/lib/landable/configuration_spec.rb +20 -0
  286. data/spec/lib/landable/layout_spec.rb +25 -0
  287. data/spec/lib/landable/liquid_spec.rb +24 -0
  288. data/spec/lib/landable/migration_spec.rb +51 -0
  289. data/spec/lib/landable/partial_spec.rb +84 -0
  290. data/spec/lib/landable/tracking_spec.rb +62 -0
  291. data/spec/lib/landable/traffic_spec.rb +45 -0
  292. data/spec/models/landable/access_token_spec.rb +13 -0
  293. data/spec/models/landable/asset_spec.rb +48 -0
  294. data/spec/models/landable/directory_spec.rb +36 -0
  295. data/spec/models/landable/page/errors_spec.rb +30 -0
  296. data/spec/models/landable/page_revision_spec.rb +75 -0
  297. data/spec/models/landable/page_spec.rb +377 -0
  298. data/spec/models/landable/template_spec.rb +47 -0
  299. data/spec/models/landable/theme_spec.rb +8 -0
  300. data/spec/responders/page_render_responder_spec.rb +43 -0
  301. data/spec/routing/public_page_route_spec.rb +36 -0
  302. data/spec/services/landable/authentication_service_spec.rb +61 -0
  303. data/spec/services/landable/render_service_spec.rb +103 -0
  304. data/spec/services/landable/tidy_service_spec.rb +157 -0
  305. data/spec/spec_helper.rb +38 -0
  306. data/spec/support/behaviors.rb +107 -0
  307. data/spec/support/carrier_wave.rb +17 -0
  308. data/spec/support/categories.yml +2 -0
  309. data/spec/support/helpers.rb +22 -0
  310. metadata +795 -0
@@ -0,0 +1,38 @@
1
+ ENV["RAILS_ENV"] ||= 'test'
2
+
3
+ require 'simplecov'
4
+ SimpleCov.start 'rails'
5
+
6
+ require File.expand_path('../dummy/config/environment.rb', __FILE__)
7
+ require 'rspec/rails'
8
+ require 'rspec/autorun'
9
+ require 'factory_girl_rails'
10
+ require 'valid_attribute'
11
+ require 'pry'
12
+ require 'shoulda/matchers/active_record'
13
+ require 'shoulda/matchers/active_model'
14
+ require 'faker'
15
+
16
+ # Requires supporting ruby files with custom matchers and macros, etc,
17
+ # in spec/support/ and its subdirectories.
18
+ Dir[Rails.root.join("../../spec/support/**/*.rb")].each { |f| require f }
19
+
20
+ # Checks for pending migrations before tests are run.
21
+ # If you are not using ActiveRecord, you can remove this line.
22
+ ActiveRecord::Migration.check_pending! if defined?(ActiveRecord::Migration)
23
+
24
+ RSpec.configure do |config|
25
+ config.mock_with :rspec
26
+ config.use_transactional_fixtures = true
27
+ config.infer_base_class_for_anonymous_controllers = false
28
+ config.order = "random"
29
+
30
+ config.include FactoryGirl::Syntax::Methods
31
+ config.include Landable::Spec::CoreHelpers
32
+ config.include Landable::Spec::HttpHelpers, type: :controller
33
+
34
+ config.include Shoulda::Matchers::ActiveRecord
35
+ config.extend Shoulda::Matchers::ActiveRecord
36
+ config.include Shoulda::Matchers::ActiveModel
37
+ config.extend Shoulda::Matchers::ActiveModel
38
+ end
@@ -0,0 +1,107 @@
1
+ shared_context 'API endpoint', type: :request do
2
+ let(:default_parameters) do
3
+ {}
4
+ end
5
+
6
+ let(:default_headers) do
7
+ {}
8
+ end
9
+
10
+ [:get, :post, :put, :patch, :delete, :head].each do |method|
11
+ define_method(method) do |path, parameters = {}, headers = {}|
12
+ path = "/landable/#{path}".squeeze('/')
13
+ super path, parameters.reverse_merge(default_parameters), headers.reverse_merge(default_headers)
14
+ end
15
+ end
16
+
17
+ def current_author
18
+ @current_author ||= create :author
19
+ end
20
+
21
+ def current_access_token
22
+ @current_access_token ||= create :access_token, author: current_author
23
+ end
24
+ end
25
+
26
+ shared_context 'JSON API endpoint', type: :request do
27
+ before do
28
+ default_parameters[:format] ||= 'json'
29
+ default_headers['HTTP_ACCEPT'] ||= 'application/json'
30
+ end
31
+
32
+ def json(reload = false)
33
+ return @_last_json if @_last_json && !reload
34
+ @_last_json ||= JSON.parse(response.body)
35
+ end
36
+ end
37
+
38
+ shared_examples 'API authentication' do |request_method|
39
+ include Landable::Spec::HttpHelpers
40
+
41
+ before do
42
+ default_headers['HTTP_AUTHORIZATION'] ||= encode_basic_auth(current_author.username, current_access_token.id)
43
+ end
44
+
45
+ it 'returns 401 if unauthorized' do
46
+ default_headers.delete 'HTTP_AUTHORIZATION'
47
+ send(request_method)
48
+ response.status.should == 401
49
+ end
50
+ end
51
+
52
+ # For any controller spec tagged with `api: true`:
53
+ #
54
+ # The HTTP request `Accept` header is set to `application/json`.
55
+ #
56
+ # An author and access token are created and used to generate
57
+ # an HTTP request `Authorization` header. To skip this behavior,
58
+ # tag the spec with `auth: false`.
59
+ shared_context 'JSON API Controller', type: :controller do
60
+ before do
61
+ request.env['HTTP_ACCEPT'] = 'application/json' if example.metadata[:json] == true
62
+ end
63
+
64
+ def last_json
65
+ @last_json ||= JSON.parse response.body
66
+ end
67
+ end
68
+
69
+ # Generates tests that confirm HTTP Basic Authentication is
70
+ # being used to authenticated requests to a controller action.
71
+ #
72
+ # Example:
73
+ # describe Some::Api::Controller, '#create', api: true do
74
+ # include_examples 'API authentication', :make_request
75
+ #
76
+ # def make_request
77
+ # post :create, some: 'param', values: 'here'
78
+ # end
79
+ # end
80
+ shared_examples 'Authenticated API controller' do |request_method|
81
+ raise ArgumentError.new("Method name required as argument") if request_method.nil?
82
+
83
+ before do
84
+ use_access_token unless example.metadata[:auth] == false
85
+ end
86
+
87
+ def current_author
88
+ @current_author ||= create :author
89
+ end
90
+
91
+ def current_access_token
92
+ @current_access_token ||= create :access_token, author: current_author
93
+ end
94
+
95
+ def use_access_token
96
+ request.env['HTTP_AUTHORIZATION'] = encode_basic_auth(current_author.username, current_access_token.id)
97
+ end
98
+
99
+ def do_not_use_access_token
100
+ request.env.delete 'HTTP_AUTHORIZATION'
101
+ end
102
+
103
+ it 'returns 401 if unauthorized', auth: false do
104
+ send(request_method)
105
+ response.status.should == 401
106
+ end
107
+ end
@@ -0,0 +1,17 @@
1
+ # Bootstraps and enables mocking for CarrierWave and Fog
2
+ credentials = {
3
+ provider: 'AWS',
4
+ aws_access_key_id: 'TEST',
5
+ aws_secret_access_key: 'TEST'
6
+ }
7
+
8
+ CarrierWave.configure do |config|
9
+ config.root = Landable::Engine.root.join('tmp')
10
+ config.cache_dir = Landable::Engine.root.join('tmp/carrier_wave')
11
+
12
+ config.fog_credentials = credentials
13
+ config.fog_directory = 'landable'
14
+ end
15
+
16
+ Fog.mock!
17
+ Fog::Storage.new(credentials).directories.create(key: 'landable')
@@ -0,0 +1,2 @@
1
+ - name: SEO
2
+ description: Search engine optimization
@@ -0,0 +1,22 @@
1
+ module Landable
2
+ module Spec
3
+ module CoreHelpers
4
+ def random_uuid
5
+ SecureRandom.uuid
6
+ end
7
+
8
+ def at_json(path, object = last_json)
9
+ path.split('/').reduce object do |parent, key|
10
+ key = key.to_i if Array === parent
11
+ parent.fetch key
12
+ end
13
+ end
14
+ end
15
+
16
+ module HttpHelpers
17
+ def encode_basic_auth(username, token)
18
+ ActionController::HttpAuthentication::Basic.encode_credentials(username, token)
19
+ end
20
+ end
21
+ end
22
+ end
metadata ADDED
@@ -0,0 +1,795 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: landable
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.7.0
5
+ platform: ruby
6
+ authors:
7
+ - Team Trogdor
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-05-07 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rails
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: 4.0.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: 4.0.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: rack-cors
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: 0.2.7
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: 0.2.7
41
+ - !ruby/object:Gem::Dependency
42
+ name: active_model_serializers
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: '0.8'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: '0.8'
55
+ - !ruby/object:Gem::Dependency
56
+ name: carrierwave
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: liquid
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '>='
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: fog
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - '>='
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - '>='
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rest-client
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - '>='
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - '>='
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: builder
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - '>='
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - '>='
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: lookup_by
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ~>
130
+ - !ruby/object:Gem::Version
131
+ version: 0.4.0
132
+ type: :runtime
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ~>
137
+ - !ruby/object:Gem::Version
138
+ version: 0.4.0
139
+ - !ruby/object:Gem::Dependency
140
+ name: pg
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - '>='
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - '>='
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: rspec-rails
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ~>
158
+ - !ruby/object:Gem::Version
159
+ version: 2.13.0
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - ~>
165
+ - !ruby/object:Gem::Version
166
+ version: 2.13.0
167
+ - !ruby/object:Gem::Dependency
168
+ name: shoulda-matchers
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - ~>
172
+ - !ruby/object:Gem::Version
173
+ version: 2.2.0
174
+ type: :development
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - ~>
179
+ - !ruby/object:Gem::Version
180
+ version: 2.2.0
181
+ - !ruby/object:Gem::Dependency
182
+ name: factory_girl_rails
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - ~>
186
+ - !ruby/object:Gem::Version
187
+ version: 4.2.0
188
+ type: :development
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - ~>
193
+ - !ruby/object:Gem::Version
194
+ version: 4.2.0
195
+ - !ruby/object:Gem::Dependency
196
+ name: json-schema
197
+ requirement: !ruby/object:Gem::Requirement
198
+ requirements:
199
+ - - '='
200
+ - !ruby/object:Gem::Version
201
+ version: 2.1.3
202
+ type: :development
203
+ prerelease: false
204
+ version_requirements: !ruby/object:Gem::Requirement
205
+ requirements:
206
+ - - '='
207
+ - !ruby/object:Gem::Version
208
+ version: 2.1.3
209
+ - !ruby/object:Gem::Dependency
210
+ name: rack-schema
211
+ requirement: !ruby/object:Gem::Requirement
212
+ requirements:
213
+ - - '>='
214
+ - !ruby/object:Gem::Version
215
+ version: '0'
216
+ type: :development
217
+ prerelease: false
218
+ version_requirements: !ruby/object:Gem::Requirement
219
+ requirements:
220
+ - - '>='
221
+ - !ruby/object:Gem::Version
222
+ version: '0'
223
+ - !ruby/object:Gem::Dependency
224
+ name: cucumber
225
+ requirement: !ruby/object:Gem::Requirement
226
+ requirements:
227
+ - - '='
228
+ - !ruby/object:Gem::Version
229
+ version: 1.3.2
230
+ type: :development
231
+ prerelease: false
232
+ version_requirements: !ruby/object:Gem::Requirement
233
+ requirements:
234
+ - - '='
235
+ - !ruby/object:Gem::Version
236
+ version: 1.3.2
237
+ - !ruby/object:Gem::Dependency
238
+ name: cucumber-rails
239
+ requirement: !ruby/object:Gem::Requirement
240
+ requirements:
241
+ - - '>='
242
+ - !ruby/object:Gem::Version
243
+ version: '0'
244
+ type: :development
245
+ prerelease: false
246
+ version_requirements: !ruby/object:Gem::Requirement
247
+ requirements:
248
+ - - '>='
249
+ - !ruby/object:Gem::Version
250
+ version: '0'
251
+ - !ruby/object:Gem::Dependency
252
+ name: database_cleaner
253
+ requirement: !ruby/object:Gem::Requirement
254
+ requirements:
255
+ - - '>='
256
+ - !ruby/object:Gem::Version
257
+ version: '0'
258
+ type: :development
259
+ prerelease: false
260
+ version_requirements: !ruby/object:Gem::Requirement
261
+ requirements:
262
+ - - '>='
263
+ - !ruby/object:Gem::Version
264
+ version: '0'
265
+ - !ruby/object:Gem::Dependency
266
+ name: simplecov
267
+ requirement: !ruby/object:Gem::Requirement
268
+ requirements:
269
+ - - '>='
270
+ - !ruby/object:Gem::Version
271
+ version: '0'
272
+ type: :development
273
+ prerelease: false
274
+ version_requirements: !ruby/object:Gem::Requirement
275
+ requirements:
276
+ - - '>='
277
+ - !ruby/object:Gem::Version
278
+ version: '0'
279
+ - !ruby/object:Gem::Dependency
280
+ name: valid_attribute
281
+ requirement: !ruby/object:Gem::Requirement
282
+ requirements:
283
+ - - '>='
284
+ - !ruby/object:Gem::Version
285
+ version: '0'
286
+ type: :development
287
+ prerelease: false
288
+ version_requirements: !ruby/object:Gem::Requirement
289
+ requirements:
290
+ - - '>='
291
+ - !ruby/object:Gem::Version
292
+ version: '0'
293
+ - !ruby/object:Gem::Dependency
294
+ name: pry
295
+ requirement: !ruby/object:Gem::Requirement
296
+ requirements:
297
+ - - '>='
298
+ - !ruby/object:Gem::Version
299
+ version: '0'
300
+ type: :development
301
+ prerelease: false
302
+ version_requirements: !ruby/object:Gem::Requirement
303
+ requirements:
304
+ - - '>='
305
+ - !ruby/object:Gem::Version
306
+ version: '0'
307
+ - !ruby/object:Gem::Dependency
308
+ name: faker
309
+ requirement: !ruby/object:Gem::Requirement
310
+ requirements:
311
+ - - '>='
312
+ - !ruby/object:Gem::Version
313
+ version: '0'
314
+ type: :development
315
+ prerelease: false
316
+ version_requirements: !ruby/object:Gem::Requirement
317
+ requirements:
318
+ - - '>='
319
+ - !ruby/object:Gem::Version
320
+ version: '0'
321
+ - !ruby/object:Gem::Dependency
322
+ name: bundler_geminabox
323
+ requirement: !ruby/object:Gem::Requirement
324
+ requirements:
325
+ - - '>='
326
+ - !ruby/object:Gem::Version
327
+ version: '0'
328
+ type: :development
329
+ prerelease: false
330
+ version_requirements: !ruby/object:Gem::Requirement
331
+ requirements:
332
+ - - '>='
333
+ - !ruby/object:Gem::Version
334
+ version: '0'
335
+ description: Landing page storage, rendering, tracking, and management API
336
+ email:
337
+ - trogdor@enova.com
338
+ executables:
339
+ - rails
340
+ - redb
341
+ extensions: []
342
+ extra_rdoc_files: []
343
+ files:
344
+ - .gitignore
345
+ - CHANGELOG.md
346
+ - Gemfile
347
+ - MIT-LICENSE
348
+ - README.md
349
+ - Rakefile
350
+ - app/controllers/concerns/landable/variables_concern.rb
351
+ - app/controllers/landable/api/access_tokens_controller.rb
352
+ - app/controllers/landable/api/assets_controller.rb
353
+ - app/controllers/landable/api/categories_controller.rb
354
+ - app/controllers/landable/api/directories_controller.rb
355
+ - app/controllers/landable/api/page_revisions_controller.rb
356
+ - app/controllers/landable/api/pages_controller.rb
357
+ - app/controllers/landable/api/templates_controller.rb
358
+ - app/controllers/landable/api/themes_controller.rb
359
+ - app/controllers/landable/api_controller.rb
360
+ - app/controllers/landable/application_controller.rb
361
+ - app/controllers/landable/public/pages_controller.rb
362
+ - app/controllers/landable/public/preview/page_revisions_controller.rb
363
+ - app/controllers/landable/public/preview/pages_controller.rb
364
+ - app/controllers/landable/public/sitemap_controller.rb
365
+ - app/decorators/landable/null_page_decorator.rb
366
+ - app/decorators/landable/page_decorator.rb
367
+ - app/helpers/landable/application_helper.rb
368
+ - app/helpers/landable/pages_helper.rb
369
+ - app/models/concerns/landable/has_assets.rb
370
+ - app/models/concerns/landable/table_name.rb
371
+ - app/models/concerns/landable/traffic/table_name.rb
372
+ - app/models/landable/access_token.rb
373
+ - app/models/landable/asset.rb
374
+ - app/models/landable/asset_search_engine.rb
375
+ - app/models/landable/author.rb
376
+ - app/models/landable/category.rb
377
+ - app/models/landable/directory.rb
378
+ - app/models/landable/page.rb
379
+ - app/models/landable/page_revision.rb
380
+ - app/models/landable/page_search_engine.rb
381
+ - app/models/landable/search_engine.rb
382
+ - app/models/landable/template.rb
383
+ - app/models/landable/theme.rb
384
+ - app/models/landable/traffic/access.rb
385
+ - app/models/landable/traffic/ad_group.rb
386
+ - app/models/landable/traffic/ad_type.rb
387
+ - app/models/landable/traffic/attribution.rb
388
+ - app/models/landable/traffic/bid_match_type.rb
389
+ - app/models/landable/traffic/browser.rb
390
+ - app/models/landable/traffic/campaign.rb
391
+ - app/models/landable/traffic/city.rb
392
+ - app/models/landable/traffic/content.rb
393
+ - app/models/landable/traffic/cookie.rb
394
+ - app/models/landable/traffic/country.rb
395
+ - app/models/landable/traffic/creative.rb
396
+ - app/models/landable/traffic/device.rb
397
+ - app/models/landable/traffic/device_type.rb
398
+ - app/models/landable/traffic/domain.rb
399
+ - app/models/landable/traffic/event.rb
400
+ - app/models/landable/traffic/event_type.rb
401
+ - app/models/landable/traffic/experiment.rb
402
+ - app/models/landable/traffic/http_method.rb
403
+ - app/models/landable/traffic/ip_address.rb
404
+ - app/models/landable/traffic/ip_lookup.rb
405
+ - app/models/landable/traffic/keyword.rb
406
+ - app/models/landable/traffic/location.rb
407
+ - app/models/landable/traffic/match_type.rb
408
+ - app/models/landable/traffic/medium.rb
409
+ - app/models/landable/traffic/mime_type.rb
410
+ - app/models/landable/traffic/network.rb
411
+ - app/models/landable/traffic/owner.rb
412
+ - app/models/landable/traffic/ownership.rb
413
+ - app/models/landable/traffic/page_view.rb
414
+ - app/models/landable/traffic/path.rb
415
+ - app/models/landable/traffic/placement.rb
416
+ - app/models/landable/traffic/platform.rb
417
+ - app/models/landable/traffic/position.rb
418
+ - app/models/landable/traffic/query_string.rb
419
+ - app/models/landable/traffic/referer.rb
420
+ - app/models/landable/traffic/region.rb
421
+ - app/models/landable/traffic/search_term.rb
422
+ - app/models/landable/traffic/source.rb
423
+ - app/models/landable/traffic/target.rb
424
+ - app/models/landable/traffic/user_agent.rb
425
+ - app/models/landable/traffic/user_agent_type.rb
426
+ - app/models/landable/traffic/visit.rb
427
+ - app/models/landable/traffic/visitor.rb
428
+ - app/responders/landable/api_responder.rb
429
+ - app/responders/landable/page_render_responder.rb
430
+ - app/serializers/landable/access_token_serializer.rb
431
+ - app/serializers/landable/asset_serializer.rb
432
+ - app/serializers/landable/author_serializer.rb
433
+ - app/serializers/landable/category_serializer.rb
434
+ - app/serializers/landable/directory_serializer.rb
435
+ - app/serializers/landable/page_revision_serializer.rb
436
+ - app/serializers/landable/page_serializer.rb
437
+ - app/serializers/landable/template_serializer.rb
438
+ - app/serializers/landable/theme_serializer.rb
439
+ - app/services/landable/authentication_service.rb
440
+ - app/services/landable/registration_service.rb
441
+ - app/services/landable/render_service.rb
442
+ - app/services/landable/tidy_service.rb
443
+ - app/uploaders/landable/asset_uploader.rb
444
+ - app/validators/path_validator.rb
445
+ - app/validators/url_validator.rb
446
+ - app/views/templates/preview.liquid
447
+ - bin/rails
448
+ - bin/redb
449
+ - config.ru
450
+ - config/cucumber.yml
451
+ - config/routes.rb
452
+ - db/migrate/20130510221424_create_landable_schema.rb
453
+ - db/migrate/20130909182713_landable_pages__add_updated_by.rb
454
+ - db/migrate/20130909182715_landable_page_revisions__break_out_snapshot.rb
455
+ - db/migrate/20130909191153_landable_pages__add_lock_version.rb
456
+ - db/migrate/20131002220041_file_based_themes.rb
457
+ - db/migrate/20131008164204_create_head_tag_on_page.rb
458
+ - db/migrate/20131008193544_drop_status_codes_model.rb
459
+ - db/migrate/20131028145652_add_traffic_schema.rb
460
+ - db/migrate/20131101213623_add_dnt_column_to_visits.rb
461
+ - db/migrate/20131104224120_add_meta_on_events.rb
462
+ - db/migrate/20131106185946_add_index_on_page_revisions_path.rb
463
+ - db/migrate/20131106193021_page_revisisons__path_status_code_index.rb
464
+ - db/migrate/20131108212501_traffic_owner_ids_are_serials.rb
465
+ - db/migrate/20131121150902_add_attribution_id_to_unique_index.rb
466
+ - db/migrate/20131216214027_drop_browser_screenshot_tables.rb
467
+ - db/migrate/20140128170659_file_backed_templates.rb
468
+ - db/migrate/20140205193757_fix_status_codes.rb
469
+ - db/migrate/20140206211322_add_response_time_to_traffic_page_views.rb
470
+ - db/migrate/20140220170324_add_slug_to_categories.rb
471
+ - db/migrate/20140220174630_add_abstract_and_hero_asset_to_pages_and_page_revisions.rb
472
+ - db/migrate/20140224205516_rename_traffic_schema.rb
473
+ - db/pgtap/pgtap.sql
474
+ - db/test/landable.access_tokens.sql
475
+ - db/test/landable.assets.sql
476
+ - db/test/landable.authors.sql
477
+ - db/test/landable.categories.sql
478
+ - db/test/landable.page_revisions.sql
479
+ - db/test/landable.pages.sql
480
+ - db/test/landable.templates.sql
481
+ - db/test/landable.themes.sql
482
+ - doc/schema/access_token.json
483
+ - doc/schema/asset.json
484
+ - doc/schema/author.json
485
+ - doc/schema/directory.json
486
+ - doc/schema/page.json
487
+ - doc/schema/page_revision.json
488
+ - doc/schema/theme.json
489
+ - doc/schema/uuid.json
490
+ - features/api/access_tokens.feature
491
+ - features/api/assets.feature
492
+ - features/api/cors.feature
493
+ - features/api/pages.feature
494
+ - features/api/preview.feature
495
+ - features/api/templates.feature
496
+ - features/api/themes.feature
497
+ - features/liquid/body.feature
498
+ - features/liquid/drops/categories.feature
499
+ - features/liquid/tags.feature
500
+ - features/public/content_types.feature
501
+ - features/public/publishing.feature
502
+ - features/public/status_codes.feature
503
+ - features/public/views.feature
504
+ - features/step_definitions/asset_steps.rb
505
+ - features/step_definitions/core_api_steps.rb
506
+ - features/step_definitions/debug_steps.rb
507
+ - features/step_definitions/factory_steps.rb
508
+ - features/step_definitions/html_steps.rb
509
+ - features/step_definitions/liquid_steps.rb
510
+ - features/step_definitions/revision_steps.rb
511
+ - features/step_definitions/theme_steps.rb
512
+ - features/support/env.rb
513
+ - features/support/usefulness.rb
514
+ - landable.gemspec
515
+ - lib/generators/landable/collection/collection_generator.rb
516
+ - lib/generators/landable/collection/templates/stylesheets/landable/%file_name%.less
517
+ - lib/generators/landable/collection/templates/stylesheets/landable/%file_name%/mixins.less
518
+ - lib/generators/landable/collection/templates/stylesheets/landable/%file_name%/variables.less
519
+ - lib/generators/landable/component/component_generator.rb
520
+ - lib/generators/landable/component/templates/javascripts/landable/%file_name%.less
521
+ - lib/generators/landable/component/templates/stylesheets/landable/%file_name%.less
522
+ - lib/generators/landable/install_generator.rb
523
+ - lib/generators/landable/landable_generator.rb
524
+ - lib/generators/templates/landable.rb
525
+ - lib/landable.rb
526
+ - lib/landable/configuration.rb
527
+ - lib/landable/core_ext/ipaddr.rb
528
+ - lib/landable/engine.rb
529
+ - lib/landable/error.rb
530
+ - lib/landable/inflections.rb
531
+ - lib/landable/layout.rb
532
+ - lib/landable/liquid.rb
533
+ - lib/landable/liquid/asset_tags.rb
534
+ - lib/landable/liquid/drops.rb
535
+ - lib/landable/liquid/filters.rb
536
+ - lib/landable/liquid/tags.rb
537
+ - lib/landable/migration.rb
538
+ - lib/landable/mime_types.rb
539
+ - lib/landable/partial.rb
540
+ - lib/landable/seeds.rb
541
+ - lib/landable/traffic.rb
542
+ - lib/landable/traffic/crawl_tracker.rb
543
+ - lib/landable/traffic/noop_tracker.rb
544
+ - lib/landable/traffic/ping_tracker.rb
545
+ - lib/landable/traffic/scan_tracker.rb
546
+ - lib/landable/traffic/scrape_tracker.rb
547
+ - lib/landable/traffic/tracker.rb
548
+ - lib/landable/traffic/user_tracker.rb
549
+ - lib/landable/version.rb
550
+ - lib/tasks/landable/cucumber.rake
551
+ - lib/tasks/landable/data.rake
552
+ - lib/tasks/landable/pgtap.rake
553
+ - lib/tasks/landable/rdoc.rake
554
+ - lib/tasks/landable/seed.rake
555
+ - lib/tasks/landable/spec.rake
556
+ - script/cucumber
557
+ - spec/concerns/landable/has_assets_spec.rb
558
+ - spec/concerns/landable/table_name_spec.rb
559
+ - spec/concerns/landable/traffic/table_name_spec.rb
560
+ - spec/controllers/concerns/landable/variables_concern_spec.rb
561
+ - spec/controllers/landable/api/assets_controller_spec.rb
562
+ - spec/controllers/landable/api/categories_controller_spec.rb
563
+ - spec/controllers/landable/api/directories_controller_spec.rb
564
+ - spec/controllers/landable/api/page_revisions_controller_spec.rb
565
+ - spec/controllers/landable/api/pages_controller_spec.rb
566
+ - spec/controllers/landable/api_controller_spec.rb
567
+ - spec/controllers/public/preview/page_revisions_controller_spec.rb
568
+ - spec/controllers/public/preview/pages_controller_spec.rb
569
+ - spec/controllers/public/sitemap_controller_spec.rb
570
+ - spec/decorators/page_decorator_spec.rb
571
+ - spec/dummy/README.rdoc
572
+ - spec/dummy/Rakefile
573
+ - spec/dummy/app/assets/images/foo.jpg
574
+ - spec/dummy/app/assets/javascripts/application.js
575
+ - spec/dummy/app/assets/stylesheets/application.css
576
+ - spec/dummy/app/controllers/application_controller.rb
577
+ - spec/dummy/app/controllers/concerns/.keep
578
+ - spec/dummy/app/controllers/priority_controller.rb
579
+ - spec/dummy/app/helpers/application_helper.rb
580
+ - spec/dummy/app/mailers/.keep
581
+ - spec/dummy/app/models/.keep
582
+ - spec/dummy/app/models/concerns/.keep
583
+ - spec/dummy/app/views/layouts/application.html.erb
584
+ - spec/dummy/app/views/layouts/priority.html.erb
585
+ - spec/dummy/app/views/partials/_foobazz.html
586
+ - spec/dummy/app/views/priority/show.html.erb
587
+ - spec/dummy/bin/bundle
588
+ - spec/dummy/bin/rails
589
+ - spec/dummy/bin/rake
590
+ - spec/dummy/config.ru
591
+ - spec/dummy/config/application.rb
592
+ - spec/dummy/config/boot.rb
593
+ - spec/dummy/config/database.yml
594
+ - spec/dummy/config/environment.rb
595
+ - spec/dummy/config/environments/development.rb
596
+ - spec/dummy/config/environments/production.rb
597
+ - spec/dummy/config/environments/test.rb
598
+ - spec/dummy/config/initializers/backtrace_silencers.rb
599
+ - spec/dummy/config/initializers/filter_parameter_logging.rb
600
+ - spec/dummy/config/initializers/inflections.rb
601
+ - spec/dummy/config/initializers/landable.rb
602
+ - spec/dummy/config/initializers/mime_types.rb
603
+ - spec/dummy/config/initializers/secret_token.rb
604
+ - spec/dummy/config/initializers/session_store.rb
605
+ - spec/dummy/config/initializers/wrap_parameters.rb
606
+ - spec/dummy/config/locales/en.yml
607
+ - spec/dummy/config/routes.rb
608
+ - spec/dummy/db/structure.sql
609
+ - spec/dummy/lib/assets/.keep
610
+ - spec/dummy/log/.keep
611
+ - spec/dummy/public/404.html
612
+ - spec/dummy/public/422.html
613
+ - spec/dummy/public/500.html
614
+ - spec/dummy/public/favicon.ico
615
+ - spec/factories/asset.rb
616
+ - spec/factories/authors.rb
617
+ - spec/factories/category.rb
618
+ - spec/factories/page_revision.rb
619
+ - spec/factories/pages.rb
620
+ - spec/factories/template.rb
621
+ - spec/factories/theme.rb
622
+ - spec/fixtures/assets/cthulhu.jpg
623
+ - spec/fixtures/assets/panda.png
624
+ - spec/fixtures/assets/sloth.png
625
+ - spec/fixtures/assets/small.pdf
626
+ - spec/helpers/pages_helper_spec.rb
627
+ - spec/lib/landable/configuration_spec.rb
628
+ - spec/lib/landable/layout_spec.rb
629
+ - spec/lib/landable/liquid_spec.rb
630
+ - spec/lib/landable/migration_spec.rb
631
+ - spec/lib/landable/partial_spec.rb
632
+ - spec/lib/landable/tracking_spec.rb
633
+ - spec/lib/landable/traffic_spec.rb
634
+ - spec/models/landable/access_token_spec.rb
635
+ - spec/models/landable/asset_spec.rb
636
+ - spec/models/landable/directory_spec.rb
637
+ - spec/models/landable/page/errors_spec.rb
638
+ - spec/models/landable/page_revision_spec.rb
639
+ - spec/models/landable/page_spec.rb
640
+ - spec/models/landable/template_spec.rb
641
+ - spec/models/landable/theme_spec.rb
642
+ - spec/responders/page_render_responder_spec.rb
643
+ - spec/routing/public_page_route_spec.rb
644
+ - spec/services/landable/authentication_service_spec.rb
645
+ - spec/services/landable/render_service_spec.rb
646
+ - spec/services/landable/tidy_service_spec.rb
647
+ - spec/spec_helper.rb
648
+ - spec/support/behaviors.rb
649
+ - spec/support/carrier_wave.rb
650
+ - spec/support/categories.yml
651
+ - spec/support/helpers.rb
652
+ homepage: https://github.com/enova/landable
653
+ licenses:
654
+ - MIT-LICENSE
655
+ metadata: {}
656
+ post_install_message:
657
+ rdoc_options: []
658
+ require_paths:
659
+ - lib
660
+ required_ruby_version: !ruby/object:Gem::Requirement
661
+ requirements:
662
+ - - '>='
663
+ - !ruby/object:Gem::Version
664
+ version: '0'
665
+ required_rubygems_version: !ruby/object:Gem::Requirement
666
+ requirements:
667
+ - - '>='
668
+ - !ruby/object:Gem::Version
669
+ version: '0'
670
+ requirements: []
671
+ rubyforge_project:
672
+ rubygems_version: 2.2.2
673
+ signing_key:
674
+ specification_version: 4
675
+ summary: Mountable CMS engine for Rails
676
+ test_files:
677
+ - features/api/access_tokens.feature
678
+ - features/api/assets.feature
679
+ - features/api/cors.feature
680
+ - features/api/pages.feature
681
+ - features/api/preview.feature
682
+ - features/api/templates.feature
683
+ - features/api/themes.feature
684
+ - features/liquid/body.feature
685
+ - features/liquid/drops/categories.feature
686
+ - features/liquid/tags.feature
687
+ - features/public/content_types.feature
688
+ - features/public/publishing.feature
689
+ - features/public/status_codes.feature
690
+ - features/public/views.feature
691
+ - features/step_definitions/asset_steps.rb
692
+ - features/step_definitions/core_api_steps.rb
693
+ - features/step_definitions/debug_steps.rb
694
+ - features/step_definitions/factory_steps.rb
695
+ - features/step_definitions/html_steps.rb
696
+ - features/step_definitions/liquid_steps.rb
697
+ - features/step_definitions/revision_steps.rb
698
+ - features/step_definitions/theme_steps.rb
699
+ - features/support/env.rb
700
+ - features/support/usefulness.rb
701
+ - spec/concerns/landable/has_assets_spec.rb
702
+ - spec/concerns/landable/table_name_spec.rb
703
+ - spec/concerns/landable/traffic/table_name_spec.rb
704
+ - spec/controllers/concerns/landable/variables_concern_spec.rb
705
+ - spec/controllers/landable/api/assets_controller_spec.rb
706
+ - spec/controllers/landable/api/categories_controller_spec.rb
707
+ - spec/controllers/landable/api/directories_controller_spec.rb
708
+ - spec/controllers/landable/api/page_revisions_controller_spec.rb
709
+ - spec/controllers/landable/api/pages_controller_spec.rb
710
+ - spec/controllers/landable/api_controller_spec.rb
711
+ - spec/controllers/public/preview/page_revisions_controller_spec.rb
712
+ - spec/controllers/public/preview/pages_controller_spec.rb
713
+ - spec/controllers/public/sitemap_controller_spec.rb
714
+ - spec/decorators/page_decorator_spec.rb
715
+ - spec/dummy/README.rdoc
716
+ - spec/dummy/Rakefile
717
+ - spec/dummy/app/assets/images/foo.jpg
718
+ - spec/dummy/app/assets/javascripts/application.js
719
+ - spec/dummy/app/assets/stylesheets/application.css
720
+ - spec/dummy/app/controllers/application_controller.rb
721
+ - spec/dummy/app/controllers/concerns/.keep
722
+ - spec/dummy/app/controllers/priority_controller.rb
723
+ - spec/dummy/app/helpers/application_helper.rb
724
+ - spec/dummy/app/mailers/.keep
725
+ - spec/dummy/app/models/.keep
726
+ - spec/dummy/app/models/concerns/.keep
727
+ - spec/dummy/app/views/layouts/application.html.erb
728
+ - spec/dummy/app/views/layouts/priority.html.erb
729
+ - spec/dummy/app/views/partials/_foobazz.html
730
+ - spec/dummy/app/views/priority/show.html.erb
731
+ - spec/dummy/bin/bundle
732
+ - spec/dummy/bin/rails
733
+ - spec/dummy/bin/rake
734
+ - spec/dummy/config.ru
735
+ - spec/dummy/config/application.rb
736
+ - spec/dummy/config/boot.rb
737
+ - spec/dummy/config/database.yml
738
+ - spec/dummy/config/environment.rb
739
+ - spec/dummy/config/environments/development.rb
740
+ - spec/dummy/config/environments/production.rb
741
+ - spec/dummy/config/environments/test.rb
742
+ - spec/dummy/config/initializers/backtrace_silencers.rb
743
+ - spec/dummy/config/initializers/filter_parameter_logging.rb
744
+ - spec/dummy/config/initializers/inflections.rb
745
+ - spec/dummy/config/initializers/landable.rb
746
+ - spec/dummy/config/initializers/mime_types.rb
747
+ - spec/dummy/config/initializers/secret_token.rb
748
+ - spec/dummy/config/initializers/session_store.rb
749
+ - spec/dummy/config/initializers/wrap_parameters.rb
750
+ - spec/dummy/config/locales/en.yml
751
+ - spec/dummy/config/routes.rb
752
+ - spec/dummy/db/structure.sql
753
+ - spec/dummy/lib/assets/.keep
754
+ - spec/dummy/log/.keep
755
+ - spec/dummy/public/404.html
756
+ - spec/dummy/public/422.html
757
+ - spec/dummy/public/500.html
758
+ - spec/dummy/public/favicon.ico
759
+ - spec/factories/asset.rb
760
+ - spec/factories/authors.rb
761
+ - spec/factories/category.rb
762
+ - spec/factories/page_revision.rb
763
+ - spec/factories/pages.rb
764
+ - spec/factories/template.rb
765
+ - spec/factories/theme.rb
766
+ - spec/fixtures/assets/cthulhu.jpg
767
+ - spec/fixtures/assets/panda.png
768
+ - spec/fixtures/assets/sloth.png
769
+ - spec/fixtures/assets/small.pdf
770
+ - spec/helpers/pages_helper_spec.rb
771
+ - spec/lib/landable/configuration_spec.rb
772
+ - spec/lib/landable/layout_spec.rb
773
+ - spec/lib/landable/liquid_spec.rb
774
+ - spec/lib/landable/migration_spec.rb
775
+ - spec/lib/landable/partial_spec.rb
776
+ - spec/lib/landable/tracking_spec.rb
777
+ - spec/lib/landable/traffic_spec.rb
778
+ - spec/models/landable/access_token_spec.rb
779
+ - spec/models/landable/asset_spec.rb
780
+ - spec/models/landable/directory_spec.rb
781
+ - spec/models/landable/page/errors_spec.rb
782
+ - spec/models/landable/page_revision_spec.rb
783
+ - spec/models/landable/page_spec.rb
784
+ - spec/models/landable/template_spec.rb
785
+ - spec/models/landable/theme_spec.rb
786
+ - spec/responders/page_render_responder_spec.rb
787
+ - spec/routing/public_page_route_spec.rb
788
+ - spec/services/landable/authentication_service_spec.rb
789
+ - spec/services/landable/render_service_spec.rb
790
+ - spec/services/landable/tidy_service_spec.rb
791
+ - spec/spec_helper.rb
792
+ - spec/support/behaviors.rb
793
+ - spec/support/carrier_wave.rb
794
+ - spec/support/categories.yml
795
+ - spec/support/helpers.rb