kuva 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (160) hide show
  1. checksums.yaml +7 -0
  2. data/.coveralls.yml +1 -0
  3. data/.env.example +4 -0
  4. data/.gitignore +13 -0
  5. data/.rspec +1 -0
  6. data/.ruby-gemset +1 -0
  7. data/.ruby-version +1 -0
  8. data/.travis.yml +12 -0
  9. data/Gemfile +26 -0
  10. data/Gemfile.lock +187 -0
  11. data/MIT-LICENSE +20 -0
  12. data/README.md +129 -0
  13. data/Rakefile +14 -0
  14. data/app/assets/images/kuva/.keep +0 -0
  15. data/app/assets/javascripts/kuva/application.js +13 -0
  16. data/app/assets/javascripts/kuva/jquery-2.1.0.min.js +4 -0
  17. data/app/assets/javascripts/kuva/jquery.justified_gallery.min.js +7 -0
  18. data/app/assets/javascripts/kuva/kuva.js.coffee +2 -0
  19. data/app/assets/stylesheets/kuva/application.css +13 -0
  20. data/app/assets/stylesheets/kuva/justified_gallery.min.css +7 -0
  21. data/app/assets/stylesheets/kuva/kuva.css.sass +42 -0
  22. data/app/controllers/kuva/application_controller.rb +17 -0
  23. data/app/controllers/kuva/photos_controller.rb +10 -0
  24. data/app/controllers/kuva/sets_controller.rb +24 -0
  25. data/app/helpers/kuva/application_helper.rb +31 -0
  26. data/app/views/kuva/photos/show.html.haml +6 -0
  27. data/app/views/kuva/sets/index.html.haml +8 -0
  28. data/app/views/kuva/sets/show.html.haml +8 -0
  29. data/app/views/layouts/kuva/application.html.haml +10 -0
  30. data/config/locales/cli.yml +8 -0
  31. data/config/locales/frontend.yml +4 -0
  32. data/config/routes.rb +9 -0
  33. data/kuva.gemspec +25 -0
  34. data/lib/generators/kuva/install_generator.rb +20 -0
  35. data/lib/generators/kuva/templates/kuva.rb +34 -0
  36. data/lib/generators/kuva/views_generator.rb +23 -0
  37. data/lib/kuva.rb +23 -0
  38. data/lib/kuva/authorizer.rb +50 -0
  39. data/lib/kuva/elements/photo.rb +41 -0
  40. data/lib/kuva/elements/photoset.rb +49 -0
  41. data/lib/kuva/elements/photoset_collection.rb +25 -0
  42. data/lib/kuva/elements/url_info.rb +6 -0
  43. data/lib/kuva/engine.rb +9 -0
  44. data/lib/kuva/version.rb +3 -0
  45. data/lib/tasks/kuva_task.rake +6 -0
  46. data/spec/controllers/kuva/application_controller_spec.rb +42 -0
  47. data/spec/controllers/kuva/photos_controller_spec.rb +22 -0
  48. data/spec/controllers/kuva/sets_controller_spec.rb +51 -0
  49. data/spec/dummy/README.md +1 -0
  50. data/spec/dummy/Rakefile +6 -0
  51. data/spec/dummy/app/assets/images/.keep +0 -0
  52. data/spec/dummy/app/assets/javascripts/application.js +13 -0
  53. data/spec/dummy/app/assets/stylesheets/application.css +13 -0
  54. data/spec/dummy/app/controllers/application_controller.rb +5 -0
  55. data/spec/dummy/app/controllers/concerns/.keep +0 -0
  56. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  57. data/spec/dummy/app/mailers/.keep +0 -0
  58. data/spec/dummy/app/models/.keep +0 -0
  59. data/spec/dummy/app/models/concerns/.keep +0 -0
  60. data/spec/dummy/app/views/layouts/application.html.erb +14 -0
  61. data/spec/dummy/bin/bundle +3 -0
  62. data/spec/dummy/bin/rails +4 -0
  63. data/spec/dummy/bin/rake +4 -0
  64. data/spec/dummy/config.ru +4 -0
  65. data/spec/dummy/config/application.rb +30 -0
  66. data/spec/dummy/config/boot.rb +5 -0
  67. data/spec/dummy/config/database.yml +25 -0
  68. data/spec/dummy/config/environment.rb +5 -0
  69. data/spec/dummy/config/environments/development.rb +29 -0
  70. data/spec/dummy/config/environments/production.rb +80 -0
  71. data/spec/dummy/config/environments/test.rb +39 -0
  72. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  73. data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  74. data/spec/dummy/config/initializers/inflections.rb +16 -0
  75. data/spec/dummy/config/initializers/kuva.rb +29 -0
  76. data/spec/dummy/config/initializers/mime_types.rb +5 -0
  77. data/spec/dummy/config/initializers/secret_token.rb +12 -0
  78. data/spec/dummy/config/initializers/session_store.rb +3 -0
  79. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  80. data/spec/dummy/config/locales/en.yml +23 -0
  81. data/spec/dummy/config/routes.rb +4 -0
  82. data/spec/dummy/lib/assets/.keep +0 -0
  83. data/spec/dummy/log/.keep +0 -0
  84. data/spec/dummy/public/404.html +58 -0
  85. data/spec/dummy/public/422.html +58 -0
  86. data/spec/dummy/public/500.html +57 -0
  87. data/spec/dummy/public/favicon.ico +0 -0
  88. data/spec/features/photo_spec.rb +40 -0
  89. data/spec/features/photoset_collection_spec.rb +25 -0
  90. data/spec/features/photoset_spec.rb +42 -0
  91. data/spec/generators/kuva/install_generator_spec.rb +30 -0
  92. data/spec/generators/kuva/views_generator_spec.rb +37 -0
  93. data/spec/helpers/kuva/application_helper_spec.rb +26 -0
  94. data/spec/kuva/authorizer_spec.rb +83 -0
  95. data/spec/kuva/elements/photo_spec.rb +76 -0
  96. data/spec/kuva/elements/photoset_collection_spec.rb +42 -0
  97. data/spec/kuva/elements/photoset_spec.rb +106 -0
  98. data/spec/kuva/elements/url_info_spec.rb +25 -0
  99. data/spec/kuva_spec.rb +81 -0
  100. data/spec/spec_helper.rb +68 -0
  101. data/spec/support/vcr/cassettes/Kuva_ApplicationController/configuring_Kuva/sets_the_API_key.yml +160 -0
  102. data/spec/support/vcr/cassettes/Kuva_ApplicationController/configuring_Kuva/sets_the_access_secret.yml +160 -0
  103. data/spec/support/vcr/cassettes/Kuva_ApplicationController/configuring_Kuva/sets_the_access_token.yml +160 -0
  104. data/spec/support/vcr/cassettes/Kuva_ApplicationHelper/_breadcrumbs_for/when_the_current_page_is_NOT_the_set_page/creates_a_breadcrumb_with_the_set_URL.yml +65 -0
  105. data/spec/support/vcr/cassettes/Kuva_ApplicationHelper/_breadcrumbs_for/when_the_current_page_is_the_set_page/creates_a_breadcrumb_without_the_set_URL.yml +222 -0
  106. data/spec/support/vcr/cassettes/Kuva_Elements_Photo/_find/fetches_the_photo_from_Flickr_specified_by_id.yml +95 -0
  107. data/spec/support/vcr/cassettes/Kuva_Elements_Photo/_find/instantiates_a_new_Kuva_Elements_Photo_object.yml +252 -0
  108. data/spec/support/vcr/cassettes/Kuva_Elements_Photo/_initialize/does_NOT_set_the_is_primary_boolean.yml +252 -0
  109. data/spec/support/vcr/cassettes/Kuva_Elements_Photo/_initialize/returns_itself.yml +95 -0
  110. data/spec/support/vcr/cassettes/Kuva_Elements_Photo/_initialize/saves_a_reference_to_the_description.yml +95 -0
  111. data/spec/support/vcr/cassettes/Kuva_Elements_Photo/_initialize/saves_a_reference_to_the_farm.yml +95 -0
  112. data/spec/support/vcr/cassettes/Kuva_Elements_Photo/_initialize/saves_a_reference_to_the_id.yml +95 -0
  113. data/spec/support/vcr/cassettes/Kuva_Elements_Photo/_initialize/saves_a_reference_to_the_secret.yml +95 -0
  114. data/spec/support/vcr/cassettes/Kuva_Elements_Photo/_initialize/saves_a_reference_to_the_server.yml +252 -0
  115. data/spec/support/vcr/cassettes/Kuva_Elements_Photo/_initialize/saves_a_reference_to_the_title.yml +95 -0
  116. data/spec/support/vcr/cassettes/Kuva_Elements_Photo/image_URLs/generates_an_image_URL_for_a_default_sized_medium_image.yml +95 -0
  117. data/spec/support/vcr/cassettes/Kuva_Elements_Photo/image_URLs/generates_an_image_URL_for_a_n-sized_small_320_image.yml +252 -0
  118. data/spec/support/vcr/cassettes/Kuva_Elements_Photo/image_URLs/instantiates_a_new_URL_info_object_to_create_image_URLs.yml +95 -0
  119. data/spec/support/vcr/cassettes/Kuva_Elements_Photoset/_find/fetches_the_photoset_from_Flickr_specified_by_id.yml +65 -0
  120. data/spec/support/vcr/cassettes/Kuva_Elements_Photoset/_find/instantiates_a_new_Kuva_Elements_Photoset_object.yml +65 -0
  121. data/spec/support/vcr/cassettes/Kuva_Elements_Photoset/_image_url/generates_an_image_URL_for_a_large_square_image.yml +65 -0
  122. data/spec/support/vcr/cassettes/Kuva_Elements_Photoset/_image_url/instantiates_a_new_URL_info_object_to_create_an_image_URL.yml +222 -0
  123. data/spec/support/vcr/cassettes/Kuva_Elements_Photoset/_initialize/returns_itself.yml +65 -0
  124. data/spec/support/vcr/cassettes/Kuva_Elements_Photoset/_initialize/saves_a_reference_to_the_created_at_date.yml +65 -0
  125. data/spec/support/vcr/cassettes/Kuva_Elements_Photoset/_initialize/saves_a_reference_to_the_description.yml +65 -0
  126. data/spec/support/vcr/cassettes/Kuva_Elements_Photoset/_initialize/saves_a_reference_to_the_farm.yml +65 -0
  127. data/spec/support/vcr/cassettes/Kuva_Elements_Photoset/_initialize/saves_a_reference_to_the_id.yml +65 -0
  128. data/spec/support/vcr/cassettes/Kuva_Elements_Photoset/_initialize/saves_a_reference_to_the_number_of_photos.yml +65 -0
  129. data/spec/support/vcr/cassettes/Kuva_Elements_Photoset/_initialize/saves_a_reference_to_the_number_of_views.yml +65 -0
  130. data/spec/support/vcr/cassettes/Kuva_Elements_Photoset/_initialize/saves_a_reference_to_the_primary_id.yml +222 -0
  131. data/spec/support/vcr/cassettes/Kuva_Elements_Photoset/_initialize/saves_a_reference_to_the_secret.yml +65 -0
  132. data/spec/support/vcr/cassettes/Kuva_Elements_Photoset/_initialize/saves_a_reference_to_the_server.yml +65 -0
  133. data/spec/support/vcr/cassettes/Kuva_Elements_Photoset/_initialize/saves_a_reference_to_the_title.yml +222 -0
  134. data/spec/support/vcr/cassettes/Kuva_Elements_Photoset/_initialize/saves_a_reference_to_the_updated_at_date.yml +65 -0
  135. data/spec/support/vcr/cassettes/Kuva_Elements_Photoset/_with_photos/returns_an_array.yml +162 -0
  136. data/spec/support/vcr/cassettes/Kuva_Elements_Photoset/_with_photos/returns_an_array_with_the_size_specified_by_number_of_photos.yml +162 -0
  137. data/spec/support/vcr/cassettes/Kuva_Elements_Photoset/_with_photos/wraps_the_photos_into_a_Kuva_Elements_Photo_element.yml +319 -0
  138. data/spec/support/vcr/cassettes/Kuva_Elements_PhotosetCollection/_photosets/retrieves_all_photosets.yml +2761 -0
  139. data/spec/support/vcr/cassettes/Kuva_Elements_PhotosetCollection/_photosets/returns_an_array.yml +2918 -0
  140. data/spec/support/vcr/cassettes/Kuva_Elements_PhotosetCollection/_photosets/wraps_the_photosets_into_a_Kuva_Elements_Photoset_element.yml +2761 -0
  141. data/spec/support/vcr/cassettes/Kuva_Elements_PhotosetCollection/_retrieve/fetches_all_photosets_from_Flickr.yml +2918 -0
  142. data/spec/support/vcr/cassettes/Kuva_Elements_PhotosetCollection/_retrieve/instantiates_a_new_Kuva_Elements_PhotosetCollection_object.yml +2761 -0
  143. data/spec/support/vcr/cassettes/Kuva_PhotosController/_show/assigns_the_photo.yml +314 -0
  144. data/spec/support/vcr/cassettes/Kuva_PhotosController/_show/finds_the_photo.yml +157 -0
  145. data/spec/support/vcr/cassettes/Kuva_SetsController/_index/assigns_the_photoset_collection_with_photosets.yml +2761 -0
  146. data/spec/support/vcr/cassettes/Kuva_SetsController/_index/knows_its_type.yml +2918 -0
  147. data/spec/support/vcr/cassettes/Kuva_SetsController/_index/retrieves_the_entire_photoset_collection.yml +160 -0
  148. data/spec/support/vcr/cassettes/Kuva_SetsController/_show/assigns_the_photos_of_the_specified_photoset.yml +2858 -0
  149. data/spec/support/vcr/cassettes/Kuva_SetsController/_show/finds_the_specified_photoset_within_the_entire_photoset_collection.yml +2858 -0
  150. data/spec/support/vcr/cassettes/Kuva_SetsController/_show/knows_its_type.yml +2858 -0
  151. data/spec/support/vcr/cassettes/photo/navigating_back_to_the_photoset_page.yml +3169 -0
  152. data/spec/support/vcr/cassettes/photo/viewing_the_first_photo_of_the_photoset.yml +157 -0
  153. data/spec/support/vcr/cassettes/photoset/navigating_back_to_the_photoset_collection_page.yml +5616 -0
  154. data/spec/support/vcr/cassettes/photoset/navigating_to_the_page_with_details_of_the_first_photo.yml +3012 -0
  155. data/spec/support/vcr/cassettes/photoset/viewing_the_first_photo_of_the_photoset.yml +314 -0
  156. data/spec/support/vcr/cassettes/photoset/viewing_the_first_photoset_of_the_photoset_collection.yml +3015 -0
  157. data/spec/support/vcr/cassettes/photoset_collection/navigating_to_the_page_with_photos_of_the_first_photoset.yml +5616 -0
  158. data/spec/support/vcr/cassettes/photoset_collection/viewing_the_photoset_collection.yml +2761 -0
  159. data/spec/support/vcr/vcr.rb +17 -0
  160. metadata +398 -0
@@ -0,0 +1,39 @@
1
+ Dummy::Application.configure do
2
+ # Settings specified here will take precedence over those in config/application.rb.
3
+
4
+ # Disable the cache store in the test environment
5
+ config.cache_store = :null_store
6
+
7
+ # The test environment is used exclusively to run your application's
8
+ # test suite. You never need to work with it otherwise. Remember that
9
+ # your test database is "scratch space" for the test suite and is wiped
10
+ # and recreated between test runs. Don't rely on the data there!
11
+ config.cache_classes = true
12
+
13
+ # Do not eager load code on boot. This avoids loading your whole application
14
+ # just for the purpose of running a single test. If you are using a tool that
15
+ # preloads Rails for running tests, you may have to set it to true.
16
+ config.eager_load = false
17
+
18
+ # Configure static asset server for tests with Cache-Control for performance.
19
+ config.serve_static_assets = true
20
+ config.static_cache_control = "public, max-age=3600"
21
+
22
+ # Show full error reports and disable caching.
23
+ config.consider_all_requests_local = true
24
+ config.action_controller.perform_caching = false
25
+
26
+ # Raise exceptions instead of rendering exception templates.
27
+ config.action_dispatch.show_exceptions = false
28
+
29
+ # Disable request forgery protection in test environment.
30
+ config.action_controller.allow_forgery_protection = false
31
+
32
+ # Tell Action Mailer not to deliver emails to the real world.
33
+ # The :test delivery method accumulates sent emails in the
34
+ # ActionMailer::Base.deliveries array.
35
+ config.action_mailer.delivery_method = :test
36
+
37
+ # Print deprecation notices to the stderr.
38
+ config.active_support.deprecation = :stderr
39
+ end
@@ -0,0 +1,7 @@
1
+ # Be sure to restart your server when you modify this file.
2
+
3
+ # You can add backtrace silencers for libraries that you're using but don't wish to see in your backtraces.
4
+ # Rails.backtrace_cleaner.add_silencer { |line| line =~ /my_noisy_library/ }
5
+
6
+ # You can also remove all the silencers if you're trying to debug a problem that might stem from framework code.
7
+ # Rails.backtrace_cleaner.remove_silencers!
@@ -0,0 +1,4 @@
1
+ # Be sure to restart your server when you modify this file.
2
+
3
+ # Configure sensitive parameters which will be filtered from the log file.
4
+ Rails.application.config.filter_parameters += [:password]
@@ -0,0 +1,16 @@
1
+ # Be sure to restart your server when you modify this file.
2
+
3
+ # Add new inflection rules using the following format. Inflections
4
+ # are locale specific, and you may define rules for as many different
5
+ # locales as you wish. All of these examples are active by default:
6
+ # ActiveSupport::Inflector.inflections(:en) do |inflect|
7
+ # inflect.plural /^(ox)$/i, '\1en'
8
+ # inflect.singular /^(ox)en/i, '\1'
9
+ # inflect.irregular 'person', 'people'
10
+ # inflect.uncountable %w( fish sheep )
11
+ # end
12
+
13
+ # These inflection rules are supported but not enabled by default:
14
+ # ActiveSupport::Inflector.inflections(:en) do |inflect|
15
+ # inflect.acronym 'RESTful'
16
+ # end
@@ -0,0 +1,29 @@
1
+ # Use this hook to configure the Kuva engine or more specifically
2
+ # your connection to the Flickr API. Flickr needs an API key and
3
+ # shared secret to authorize this application access to your Flickr
4
+ # account. Using the kuva:authorize Rake task you'll be able to
5
+ # retrieve an Access Token and Access Secret. These will enable
6
+ # Kuva to make authorized requests to the Flickr API.
7
+ Kuva.setup do |config|
8
+ # The Flickr API requires an API key to connect your application
9
+ # to your Flickr account. You can apply for an API key here:
10
+ # http://www.flickr.com/services/apps/create/apply.
11
+ config.api_key = ENV["KUVA_API_KEY"]
12
+
13
+ # Besides the API key, the Flickr API requires a shared secret.
14
+ # Both the API key and shared secret are used to sign requests
15
+ # to the Flickr API and to retrieve an Access Token and Access
16
+ # Secret.
17
+ config.shared_secret = ENV["KUVA_SHARED_SECRET"]
18
+
19
+ # As specified above, the Access Token can be retrieved by using
20
+ # the kuva:authorize Rake task. Once you've done that, enable the
21
+ # configuration option below and set it's value.
22
+ config.access_token = ENV["KUVA_ACCESS_TOKEN"]
23
+
24
+ # As specified above, both the Access Token as well as the Access
25
+ # Secret can be retrieved by using the kuva:authorize Rake task.
26
+ # Once you've done that, enable this configuration option and set
27
+ # it's value.
28
+ config.access_secret = ENV["KUVA_ACCESS_SECRET"]
29
+ end
@@ -0,0 +1,5 @@
1
+ # Be sure to restart your server when you modify this file.
2
+
3
+ # Add new mime types for use in respond_to blocks:
4
+ # Mime::Type.register "text/richtext", :rtf
5
+ # Mime::Type.register_alias "text/html", :iphone
@@ -0,0 +1,12 @@
1
+ # Be sure to restart your server when you modify this file.
2
+
3
+ # Your secret key is used for verifying the integrity of signed cookies.
4
+ # If you change this key, all old signed cookies will become invalid!
5
+
6
+ # Make sure the secret is at least 30 characters and all random,
7
+ # no regular words or you'll be exposed to dictionary attacks.
8
+ # You can use `rake secret` to generate a secure secret key.
9
+
10
+ # Make sure your secret_key_base is kept private
11
+ # if you're sharing your code publicly.
12
+ Dummy::Application.config.secret_key_base = '6aaae5b005f6bdde6d0eae56624884460a79c63831f0a0fa358e3b69dfd2db7b8223d0f00a1e7b1e3f66fe334c8a0184bb95784c59d31fc75be91208cc4084ff'
@@ -0,0 +1,3 @@
1
+ # Be sure to restart your server when you modify this file.
2
+
3
+ Dummy::Application.config.session_store :cookie_store, key: '_dummy_session'
@@ -0,0 +1,14 @@
1
+ # Be sure to restart your server when you modify this file.
2
+
3
+ # This file contains settings for ActionController::ParamsWrapper which
4
+ # is enabled by default.
5
+
6
+ # Enable parameter wrapping for JSON. You can disable this by setting :format to an empty array.
7
+ ActiveSupport.on_load(:action_controller) do
8
+ wrap_parameters format: [:json] if respond_to?(:wrap_parameters)
9
+ end
10
+
11
+ # To enable root element in JSON for ActiveRecord objects.
12
+ # ActiveSupport.on_load(:active_record) do
13
+ # self.include_root_in_json = true
14
+ # end
@@ -0,0 +1,23 @@
1
+ # Files in the config/locales directory are used for internationalization
2
+ # and are automatically loaded by Rails. If you want to use locales other
3
+ # than English, add the necessary files in this directory.
4
+ #
5
+ # To use the locales, use `I18n.t`:
6
+ #
7
+ # I18n.t 'hello'
8
+ #
9
+ # In views, this is aliased to just `t`:
10
+ #
11
+ # <%= t('hello') %>
12
+ #
13
+ # To use a different locale, set it with `I18n.locale`:
14
+ #
15
+ # I18n.locale = :es
16
+ #
17
+ # This would use the information in config/locales/es.yml.
18
+ #
19
+ # To learn more, please read the Rails Internationalization guide
20
+ # available at http://guides.rubyonrails.org/i18n.html.
21
+
22
+ en:
23
+ hello: "Hello world"
@@ -0,0 +1,4 @@
1
+ Rails.application.routes.draw do
2
+
3
+ mount Kuva::Engine => "/kuva"
4
+ end
File without changes
File without changes
@@ -0,0 +1,58 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>The page you were looking for doesn't exist (404)</title>
5
+ <style>
6
+ body {
7
+ background-color: #EFEFEF;
8
+ color: #2E2F30;
9
+ text-align: center;
10
+ font-family: arial, sans-serif;
11
+ }
12
+
13
+ div.dialog {
14
+ width: 25em;
15
+ margin: 4em auto 0 auto;
16
+ border: 1px solid #CCC;
17
+ border-right-color: #999;
18
+ border-left-color: #999;
19
+ border-bottom-color: #BBB;
20
+ border-top: #B00100 solid 4px;
21
+ border-top-left-radius: 9px;
22
+ border-top-right-radius: 9px;
23
+ background-color: white;
24
+ padding: 7px 4em 0 4em;
25
+ }
26
+
27
+ h1 {
28
+ font-size: 100%;
29
+ color: #730E15;
30
+ line-height: 1.5em;
31
+ }
32
+
33
+ body > p {
34
+ width: 33em;
35
+ margin: 0 auto 1em;
36
+ padding: 1em 0;
37
+ background-color: #F7F7F7;
38
+ border: 1px solid #CCC;
39
+ border-right-color: #999;
40
+ border-bottom-color: #999;
41
+ border-bottom-left-radius: 4px;
42
+ border-bottom-right-radius: 4px;
43
+ border-top-color: #DADADA;
44
+ color: #666;
45
+ box-shadow:0 3px 8px rgba(50, 50, 50, 0.17);
46
+ }
47
+ </style>
48
+ </head>
49
+
50
+ <body>
51
+ <!-- This file lives in public/404.html -->
52
+ <div class="dialog">
53
+ <h1>The page you were looking for doesn't exist.</h1>
54
+ <p>You may have mistyped the address or the page may have moved.</p>
55
+ </div>
56
+ <p>If you are the application owner check the logs for more information.</p>
57
+ </body>
58
+ </html>
@@ -0,0 +1,58 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>The change you wanted was rejected (422)</title>
5
+ <style>
6
+ body {
7
+ background-color: #EFEFEF;
8
+ color: #2E2F30;
9
+ text-align: center;
10
+ font-family: arial, sans-serif;
11
+ }
12
+
13
+ div.dialog {
14
+ width: 25em;
15
+ margin: 4em auto 0 auto;
16
+ border: 1px solid #CCC;
17
+ border-right-color: #999;
18
+ border-left-color: #999;
19
+ border-bottom-color: #BBB;
20
+ border-top: #B00100 solid 4px;
21
+ border-top-left-radius: 9px;
22
+ border-top-right-radius: 9px;
23
+ background-color: white;
24
+ padding: 7px 4em 0 4em;
25
+ }
26
+
27
+ h1 {
28
+ font-size: 100%;
29
+ color: #730E15;
30
+ line-height: 1.5em;
31
+ }
32
+
33
+ body > p {
34
+ width: 33em;
35
+ margin: 0 auto 1em;
36
+ padding: 1em 0;
37
+ background-color: #F7F7F7;
38
+ border: 1px solid #CCC;
39
+ border-right-color: #999;
40
+ border-bottom-color: #999;
41
+ border-bottom-left-radius: 4px;
42
+ border-bottom-right-radius: 4px;
43
+ border-top-color: #DADADA;
44
+ color: #666;
45
+ box-shadow:0 3px 8px rgba(50, 50, 50, 0.17);
46
+ }
47
+ </style>
48
+ </head>
49
+
50
+ <body>
51
+ <!-- This file lives in public/422.html -->
52
+ <div class="dialog">
53
+ <h1>The change you wanted was rejected.</h1>
54
+ <p>Maybe you tried to change something you didn't have access to.</p>
55
+ </div>
56
+ <p>If you are the application owner check the logs for more information.</p>
57
+ </body>
58
+ </html>
@@ -0,0 +1,57 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>We're sorry, but something went wrong (500)</title>
5
+ <style>
6
+ body {
7
+ background-color: #EFEFEF;
8
+ color: #2E2F30;
9
+ text-align: center;
10
+ font-family: arial, sans-serif;
11
+ }
12
+
13
+ div.dialog {
14
+ width: 25em;
15
+ margin: 4em auto 0 auto;
16
+ border: 1px solid #CCC;
17
+ border-right-color: #999;
18
+ border-left-color: #999;
19
+ border-bottom-color: #BBB;
20
+ border-top: #B00100 solid 4px;
21
+ border-top-left-radius: 9px;
22
+ border-top-right-radius: 9px;
23
+ background-color: white;
24
+ padding: 7px 4em 0 4em;
25
+ }
26
+
27
+ h1 {
28
+ font-size: 100%;
29
+ color: #730E15;
30
+ line-height: 1.5em;
31
+ }
32
+
33
+ body > p {
34
+ width: 33em;
35
+ margin: 0 auto 1em;
36
+ padding: 1em 0;
37
+ background-color: #F7F7F7;
38
+ border: 1px solid #CCC;
39
+ border-right-color: #999;
40
+ border-bottom-color: #999;
41
+ border-bottom-left-radius: 4px;
42
+ border-bottom-right-radius: 4px;
43
+ border-top-color: #DADADA;
44
+ color: #666;
45
+ box-shadow:0 3px 8px rgba(50, 50, 50, 0.17);
46
+ }
47
+ </style>
48
+ </head>
49
+
50
+ <body>
51
+ <!-- This file lives in public/500.html -->
52
+ <div class="dialog">
53
+ <h1>We're sorry, but something went wrong.</h1>
54
+ </div>
55
+ <p>If you are the application owner check the logs for more information.</p>
56
+ </body>
57
+ </html>
File without changes
@@ -0,0 +1,40 @@
1
+ require "spec_helper"
2
+
3
+ feature "photo", :vcr do
4
+
5
+ let(:photoset_id) { "72157632367381040" }
6
+ let(:photo_id) { "8318972536" }
7
+
8
+ background { visit kuva.set_photo_path(set_id: photoset_id, id: photo_id) }
9
+
10
+ scenario "viewing the first photo of the photoset" do
11
+ within "ul.breadcrumbs" do
12
+ expect(page).to have_selector "li", text: "Photosets"
13
+ expect(page).to have_selector "li", text: "Paris"
14
+ end
15
+
16
+ expect(page).to have_selector "h1", text: "Top of the Eiffel Tower"
17
+ expect(page).to have_selector "p", text: "These shots were taken in Paris, France in December 2012. Most of them are taken with my Nikon D80 and Nikkor 50mm f/1.8 or Tokina 12-24mm f/4."
18
+ expect(page).to have_selector "img", count: 1
19
+ end
20
+
21
+ scenario "navigating back to the photoset page" do
22
+ expect(page).to have_selector "h1", text: "Top of the Eiffel Tower"
23
+
24
+ within "ul.breadcrumbs" do
25
+ expect(page).to have_selector "li", text: "Photosets"
26
+ expect(page).to have_selector "li", text: "Paris"
27
+
28
+ click_link "Paris"
29
+ end
30
+
31
+ expect(page).to have_selector "h1", text: "Paris"
32
+ expect(page).not_to have_selector "h1", text: "Top of the Eiffel Tower"
33
+
34
+ within "ul.breadcrumbs" do
35
+ expect(page).to have_selector "li", text: "Photosets"
36
+ expect(page).not_to have_selector "li", text: "Paris"
37
+ end
38
+ end
39
+
40
+ end
@@ -0,0 +1,25 @@
1
+ require "spec_helper"
2
+
3
+ feature "photoset collection", :vcr do
4
+
5
+ background { visit kuva.root_path }
6
+
7
+ scenario "viewing the photoset collection" do
8
+ expect(page).to have_selector "h1", text: "Photosets"
9
+ expect(page).to have_selector "ul.photosets li a img", count: 40
10
+ expect(page).not_to have_selector "ul.breadcrumbs"
11
+ end
12
+
13
+ scenario "navigating to the page with photos of the first photoset" do
14
+ expect(page).to have_selector "h1", text: "Photosets"
15
+
16
+ within "ul.photosets li:first" do
17
+ expect(page).to have_content "Paris"
18
+ find(:xpath, ".//a/img[@alt='Paris']/..").click
19
+ end
20
+
21
+ expect(page).to have_selector "h1", text: "Paris"
22
+ expect(page).to have_selector ".photos a img", count: 28
23
+ end
24
+
25
+ end
@@ -0,0 +1,42 @@
1
+ require "spec_helper"
2
+
3
+ feature "photoset", :vcr do
4
+
5
+ let(:photoset_id) { "72157632367381040" }
6
+
7
+ background { visit kuva.set_path(id: photoset_id) }
8
+
9
+ scenario "viewing the first photoset of the photoset collection" do
10
+ within "ul.breadcrumbs" do
11
+ expect(page).to have_selector "li", text: "Photosets"
12
+ expect(page).not_to have_selector "li", text: "Paris"
13
+ end
14
+
15
+ expect(page).to have_selector "h1", text: "Paris"
16
+ expect(page).to have_selector ".photos a img", count: 28
17
+ end
18
+
19
+ scenario "navigating back to the photoset collection page" do
20
+ expect(page).to have_selector "h1", text: "Paris"
21
+
22
+ within "ul.breadcrumbs" do
23
+ click_link "Photosets"
24
+ end
25
+
26
+ expect(page).to have_selector "h1", text: "Photosets"
27
+ expect(page).not_to have_selector "h1", text: "Paris"
28
+ expect(page).not_to have_selector "ul.breadcrumbs"
29
+ end
30
+
31
+ scenario "navigating to the page with details of the first photo" do
32
+ expect(page).to have_selector "h1", text: "Paris"
33
+
34
+ within ".photos" do
35
+ expect(page).to have_link "Top of the Eiffel Tower"
36
+ click_link "Top of the Eiffel Tower"
37
+ end
38
+
39
+ expect(page).to have_selector "h1", text: "Top of the Eiffel Tower"
40
+ expect(page).not_to have_selector "h1", text: "Paris"
41
+ end
42
+ end