middleman-core 3.0.14 → 3.1.0.beta.1

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 (113) hide show
  1. data/features/clean_build.feature +4 -5
  2. data/features/content_type.feature +43 -0
  3. data/features/data.feature +9 -4
  4. data/features/front-matter-neighbor.feature +151 -0
  5. data/features/queryable.feature +31 -0
  6. data/features/step_definitions/queryable_steps.rb +123 -0
  7. data/fixtures/content-type-app/config.rb +1 -0
  8. data/fixtures/content-type-app/source/.htaccess +1 -0
  9. data/fixtures/content-type-app/source/README +1 -0
  10. data/fixtures/content-type-app/source/images/blank.gif +0 -0
  11. data/fixtures/content-type-app/source/index.html +1 -0
  12. data/fixtures/content-type-app/source/javascripts/app.js +1 -0
  13. data/fixtures/content-type-app/source/override.html +5 -0
  14. data/fixtures/content-type-app/source/stylesheets/site.css +1 -0
  15. data/fixtures/frontmatter-neighbor-app/config.rb +0 -0
  16. data/fixtures/frontmatter-neighbor-app/source/front-matter-2.php.erb +2 -0
  17. data/fixtures/frontmatter-neighbor-app/source/front-matter-2.php.erb.frontmatter +4 -0
  18. data/fixtures/frontmatter-neighbor-app/source/front-matter-auto.erb +1 -0
  19. data/fixtures/frontmatter-neighbor-app/source/front-matter-auto.erb.frontmatter +4 -0
  20. data/fixtures/frontmatter-neighbor-app/source/front-matter-change.html.erb +1 -0
  21. data/fixtures/frontmatter-neighbor-app/source/front-matter-change.html.erb.frontmatter +4 -0
  22. data/fixtures/frontmatter-neighbor-app/source/front-matter-encoding.html.erb +1 -0
  23. data/fixtures/frontmatter-neighbor-app/source/front-matter-encoding.html.erb.frontmatter +5 -0
  24. data/fixtures/frontmatter-neighbor-app/source/json-front-matter-2.php.erb +2 -0
  25. data/fixtures/frontmatter-neighbor-app/source/json-front-matter-2.php.erb.frontmatter +4 -0
  26. data/fixtures/frontmatter-neighbor-app/source/json-front-matter-auto.erb +1 -0
  27. data/fixtures/frontmatter-neighbor-app/source/json-front-matter-auto.erb.frontmatter +4 -0
  28. data/fixtures/frontmatter-neighbor-app/source/json-front-matter.html.erb +1 -0
  29. data/fixtures/frontmatter-neighbor-app/source/json-front-matter.html.erb.frontmatter +4 -0
  30. data/fixtures/frontmatter-neighbor-app/source/raw-front-matter.html +1 -0
  31. data/fixtures/frontmatter-neighbor-app/source/raw-front-matter.html.frontmatter +4 -0
  32. data/fixtures/frontmatter-neighbor-app/source/raw-front-matter.php +1 -0
  33. data/fixtures/frontmatter-neighbor-app/source/raw-front-matter.php.frontmatter +4 -0
  34. data/fixtures/frontmatter-settings-neighbor-app/config.rb +4 -0
  35. data/fixtures/frontmatter-settings-neighbor-app/source/alternate_layout.html.erb +1 -0
  36. data/fixtures/frontmatter-settings-neighbor-app/source/alternate_layout.html.erb.frontmatter +3 -0
  37. data/fixtures/frontmatter-settings-neighbor-app/source/ignored.html.erb +1 -0
  38. data/fixtures/frontmatter-settings-neighbor-app/source/ignored.html.erb.frontmatter +3 -0
  39. data/fixtures/frontmatter-settings-neighbor-app/source/layouts/alternate.erb +3 -0
  40. data/fixtures/frontmatter-settings-neighbor-app/source/layouts/override.erb +2 -0
  41. data/fixtures/frontmatter-settings-neighbor-app/source/override_layout.html.erb +1 -0
  42. data/fixtures/frontmatter-settings-neighbor-app/source/override_layout.html.erb.frontmatter +3 -0
  43. data/fixtures/frontmatter-settings-neighbor-app/source/page_mentioned.html.erb +1 -0
  44. data/fixtures/frontmatter-settings-neighbor-app/source/page_mentioned.html.erb.frontmatter +3 -0
  45. data/fixtures/nested-data-app/config.rb +1 -0
  46. data/fixtures/nested-data-app/data/examples/test.yml +1 -0
  47. data/fixtures/nested-data-app/source/test.html.erb +1 -0
  48. data/fixtures/queryable-app/config.rb +0 -0
  49. data/fixtures/queryable-app/source/2010-08-08-test-document-file.html.markdown +8 -0
  50. data/fixtures/queryable-app/source/2010-08-09-another-test-document.html.markdown +10 -0
  51. data/fixtures/queryable-app/source/2011-12-26-some-test-document.html.markdown +6 -0
  52. data/fixtures/queryable-app/source/document_with_date_in_yaml.html.markdown +7 -0
  53. data/fixtures/queryable-app/source/document_without_date.html.markdown +7 -0
  54. data/lib/middleman-core/application.rb +52 -84
  55. data/lib/middleman-core/cli.rb +3 -2
  56. data/lib/middleman-core/cli/build.rb +5 -7
  57. data/lib/middleman-core/cli/bundler.rb +1 -1
  58. data/lib/middleman-core/cli/console.rb +46 -0
  59. data/lib/middleman-core/configuration.rb +235 -0
  60. data/lib/middleman-core/core_extensions.rb +0 -6
  61. data/lib/middleman-core/core_extensions/data.rb +34 -11
  62. data/lib/middleman-core/core_extensions/extensions.rb +31 -35
  63. data/lib/middleman-core/core_extensions/external_helpers.rb +7 -7
  64. data/lib/middleman-core/core_extensions/file_watcher.rb +1 -1
  65. data/lib/middleman-core/core_extensions/front_matter.rb +44 -38
  66. data/lib/middleman-core/core_extensions/rendering.rb +27 -21
  67. data/lib/middleman-core/core_extensions/request.rb +41 -73
  68. data/lib/middleman-core/core_extensions/routing.rb +7 -24
  69. data/lib/middleman-core/core_extensions/show_exceptions.rb +6 -8
  70. data/lib/middleman-core/extensions.rb +35 -0
  71. data/lib/middleman-core/logger.rb +9 -0
  72. data/lib/middleman-core/meta_pages.rb +93 -0
  73. data/lib/middleman-core/meta_pages/assets/config.css +36 -0
  74. data/lib/middleman-core/meta_pages/assets/glyphicons-halflings.png +0 -0
  75. data/lib/middleman-core/meta_pages/assets/jquery-1.8.2.min.js +2 -0
  76. data/lib/middleman-core/meta_pages/assets/jquery.details-1.6.min.js +6 -0
  77. data/lib/middleman-core/meta_pages/assets/meta.css +368 -0
  78. data/lib/middleman-core/meta_pages/assets/sitemap.css +635 -0
  79. data/lib/middleman-core/meta_pages/assets/sitemap.js +0 -0
  80. data/lib/middleman-core/meta_pages/config_setting.rb +39 -0
  81. data/lib/middleman-core/meta_pages/sitemap_resource.rb +52 -0
  82. data/lib/middleman-core/meta_pages/sitemap_tree.rb +73 -0
  83. data/lib/middleman-core/meta_pages/templates/config.html.erb +59 -0
  84. data/lib/middleman-core/meta_pages/templates/index.html.erb +21 -0
  85. data/lib/middleman-core/meta_pages/templates/sitemap.html.erb +31 -0
  86. data/lib/middleman-core/preview_server.rb +18 -7
  87. data/lib/middleman-core/profiling.rb +1 -1
  88. data/lib/middleman-core/renderers/erb.rb +5 -5
  89. data/lib/middleman-core/renderers/less.rb +3 -3
  90. data/lib/middleman-core/renderers/markdown.rb +10 -9
  91. data/lib/middleman-core/renderers/redcarpet.rb +16 -21
  92. data/lib/middleman-core/renderers/sass.rb +4 -5
  93. data/lib/middleman-core/renderers/slim.rb +4 -1
  94. data/lib/middleman-core/sitemap.rb +3 -3
  95. data/lib/middleman-core/sitemap/extensions/content_type.rb +16 -0
  96. data/lib/middleman-core/sitemap/extensions/on_disk.rb +2 -2
  97. data/lib/middleman-core/sitemap/extensions/proxies.rb +26 -16
  98. data/lib/middleman-core/sitemap/queryable.rb +148 -0
  99. data/lib/middleman-core/sitemap/resource.rb +14 -2
  100. data/lib/middleman-core/sitemap/store.rb +8 -7
  101. data/lib/middleman-core/step_definitions/builder_steps.rb +3 -0
  102. data/lib/middleman-core/step_definitions/server_steps.rb +6 -1
  103. data/lib/middleman-core/templates/default/source/layouts/layout.erb +1 -1
  104. data/lib/middleman-core/templates/extension/lib/lib.rb +17 -26
  105. data/lib/middleman-core/templates/html5/source/layouts/layout.erb +1 -1
  106. data/lib/middleman-core/templates/shared/Gemfile.tt +6 -1
  107. data/lib/middleman-core/util.rb +7 -5
  108. data/lib/middleman-core/version.rb +1 -1
  109. data/middleman-core.gemspec +1 -1
  110. metadata +126 -28
  111. data/lib/middleman-core/core_extensions/builder.rb +0 -17
  112. data/lib/middleman-core/core_extensions/ruby_encoding.rb +0 -25
  113. data/middleman-core-x86-mingw32.gemspec +0 -38
@@ -2,14 +2,14 @@ Feature: Build Clean
2
2
  Scenario: Build and Clean an app
3
3
  Given a fixture app "clean-app"
4
4
  And app "clean-app" is using config "empty"
5
- And a successfully built app at "clean-app"
5
+ And a successfully built app at "clean-app" with flags "--no-clean"
6
6
  Then the following files should exist:
7
7
  | build/index.html |
8
8
  | build/should_be_ignored.html |
9
9
  | build/should_be_ignored2.html |
10
10
  | build/should_be_ignored3.html |
11
11
  And app "clean-app" is using config "complications"
12
- Given a successfully built app at "clean-app" with flags "--clean"
12
+ Given a successfully built app at "clean-app"
13
13
  Then the following files should not exist:
14
14
  | build/should_be_ignored.html |
15
15
  | build/should_be_ignored2.html |
@@ -17,12 +17,11 @@ Feature: Build Clean
17
17
  And the file "build/index.html" should contain "Comment in layout"
18
18
 
19
19
  Scenario: Clean build an app with newly ignored files and a nested output directory
20
- Given a built app at "clean-nested-app"
20
+ Given a built app at "clean-nested-app" with flags "--no-clean"
21
21
  Then a directory named "sub/dir" should exist
22
22
  Then the following files should exist:
23
23
  | sub/dir/about.html |
24
24
  When I append to "config.rb" with "ignore 'about.html'"
25
- Given a built app at "clean-nested-app" with flags "--clean"
25
+ Given a built app at "clean-nested-app"
26
26
  Then the following files should not exist:
27
27
  | sub/dir/about.html |
28
-
@@ -0,0 +1,43 @@
1
+ Feature: Setting the right content type for files
2
+
3
+ Scenario: The right content type gets automatically determined
4
+ Given the Server is running at "content-type-app"
5
+ When I go to "/index.html"
6
+ Then the content type should be "text/html"
7
+ When I go to "/images/blank.gif"
8
+ Then the content type should be "image/gif"
9
+ When I go to "/javascripts/app.js"
10
+ Then the content type should be "application/javascript"
11
+ When I go to "/stylesheets/site.css"
12
+ Then the content type should be "text/css"
13
+ When I go to "/README"
14
+ Then the content type should be "text/plain"
15
+
16
+ Scenario: Content type can be set explicitly via page or proxy or frontmatter
17
+ Given a fixture app "content-type-app"
18
+ And a file named "config.rb" with:
19
+ """
20
+ page "README", :content_type => 'text/awesome'
21
+ proxy "bar", "index.html", :content_type => 'text/custom'
22
+ proxy "foo", "README" # auto-delegate to target content type
23
+ """
24
+ And the Server is running at "content-type-app"
25
+ When I go to "/README"
26
+ Then the content type should be "text/awesome"
27
+ When I go to "/bar"
28
+ Then the content type should be "text/custom"
29
+ When I go to "/foo"
30
+ Then the content type should be "text/awesome"
31
+ When I go to "/override.html"
32
+ Then the content type should be "text/neato"
33
+
34
+ Scenario: Content types can be overridden with mime_type
35
+ Given a fixture app "content-type-app"
36
+ And a file named "config.rb" with:
37
+ """
38
+ mime_type('.js', 'application/x-javascript')
39
+ """
40
+ And the Server is running at "content-type-app"
41
+ When I go to "/javascripts/app.js"
42
+ Then the content type should be "application/x-javascript"
43
+
@@ -5,18 +5,23 @@ Feature: Local Data API
5
5
  Given the Server is running at "basic-data-app"
6
6
  When I go to "/data.html"
7
7
  Then I should see "One:Two"
8
-
8
+
9
9
  Scenario: Rendering json
10
10
  Given the Server is running at "basic-data-app"
11
11
  When I go to "/data3.html"
12
12
  Then I should see "One:Two"
13
-
13
+
14
14
  Scenario: Using data in config.rb
15
15
  Given the Server is running at "data-app"
16
16
  When I go to "/test1.html"
17
17
  Then I should see "Welcome"
18
-
18
+
19
19
  Scenario: Using data2 in config.rb
20
20
  Given the Server is running at "data-app"
21
21
  When I go to "/test2.html"
22
- Then I should see "Welcome"
22
+ Then I should see "Welcome"
23
+
24
+ Scenario: Using nested data
25
+ Given the Server is running at "nested-data-app"
26
+ When I go to "/test.html"
27
+ Then I should see "test:Hello"
@@ -0,0 +1,151 @@
1
+ Feature: Neighboring YAML Front Matter
2
+
3
+ Scenario: Rendering html (yaml)
4
+ Given the Server is running at "frontmatter-neighbor-app"
5
+ When I go to "/front-matter-auto.html"
6
+ Then I should see "<h1>This is the title</h1>"
7
+ Then I should not see "---"
8
+ When I go to "/front-matter-auto.erb.frontmatter"
9
+ Then I should see "File Not Found"
10
+ When I go to "/front-matter-2.php"
11
+ Then I should see "<h1>This is the title</h1>"
12
+ Then I should see "<?php"
13
+ Then I should not see "---"
14
+ When I go to "/front-matter-2.php.erb.frontmatter"
15
+ Then I should see "File Not Found"
16
+
17
+ Scenario: Rendering raw (template-less) (yaml)
18
+ Given the Server is running at "frontmatter-neighbor-app"
19
+ When I go to "/raw-front-matter.html"
20
+ Then I should see "<h1><%= data.page.title %></h1>"
21
+ Then I should not see "---"
22
+ When I go to "/raw-front-matter.html.frontmatter"
23
+ Then I should see "File Not Found"
24
+ When I go to "/raw-front-matter.php"
25
+ Then I should see '<?php echo "sup"; ?>'
26
+ Then I should see "<?php"
27
+ Then I should not see "---"
28
+ When I go to "/raw-front-matter.php.frontmatter"
29
+ Then I should see "File Not Found"
30
+
31
+ Scenario: YAML not on first line, with encoding
32
+ Given the Server is running at "frontmatter-neighbor-app"
33
+ When I go to "/front-matter-encoding.html"
34
+ Then I should see "<h1>This is the title</h1>"
35
+ Then I should not see "---"
36
+ When I go to "/front-matter-encoding.html.erb.frontmatter"
37
+ Then I should see "File Not Found"
38
+
39
+ Scenario: Rendering html (json)
40
+ Given the Server is running at "frontmatter-neighbor-app"
41
+ When I go to "/json-front-matter-auto.html"
42
+ Then I should see "<h1>This is the title</h1>"
43
+ Then I should not see ";;;"
44
+ When I go to "/json-front-matter-auto.erb.frontmatter"
45
+ Then I should see "File Not Found"
46
+ When I go to "/json-front-matter.html"
47
+ Then I should see "<h1>This is the title</h1>"
48
+ Then I should not see ";;;"
49
+ When I go to "/json-front-matter.html.erb.frontmatter"
50
+ Then I should see "File Not Found"
51
+ When I go to "/json-front-matter-2.php"
52
+ Then I should see "<h1>This is the title</h1>"
53
+ Then I should see "<?php"
54
+ Then I should not see ";;;"
55
+ When I go to "/json-front-matter-2.php.erb.frontmatter"
56
+ Then I should see "File Not Found"
57
+
58
+ Scenario: A template changes frontmatter during preview
59
+ Given the Server is running at "frontmatter-neighbor-app"
60
+ And the file "source/front-matter-change.html.erb" has the contents
61
+ """
62
+ <%= data.page.title %>
63
+ """
64
+ And the file "source/front-matter-change.html.erb.frontmatter" has the contents
65
+ """
66
+ ---
67
+ title: Hello World
68
+ layout: false
69
+ ---
70
+ """
71
+ When I go to "/front-matter-change.html"
72
+ Then I should see "Hello World"
73
+ And the file "source/front-matter-change.html.erb.frontmatter" has the contents
74
+ """
75
+ ---
76
+ title: Hola Mundo
77
+ layout: false
78
+ ---
79
+ """
80
+ When I go to "/front-matter-change.html"
81
+ Then I should see "Hola Mundo"
82
+ When I go to "/front-matter-change.html.erb.frontmatter"
83
+ Then I should see "File Not Found"
84
+
85
+ Scenario: A template should handle an empty YAML feed
86
+ Given the Server is running at "frontmatter-neighbor-app"
87
+ And the file "source/front-matter-change.html.erb.frontmatter" has the contents
88
+ """
89
+ ---
90
+ ---
91
+ """
92
+ When I go to "/front-matter-change.html"
93
+ Then I should not see "Hello World"
94
+ Then I should not see "Hola Mundo"
95
+ When I go to "/front-matter-change.html.erb.frontmatter"
96
+ Then I should see "File Not Found"
97
+
98
+ Scenario: Setting layout, ignoring, and disabling directory indexes through frontmatter (build)
99
+ Given a successfully built app at "frontmatter-settings-neighbor-app"
100
+ Then the following files should exist:
101
+ | build/proxied.html |
102
+ And the file "build/alternate_layout.html" should contain "Alternate layout"
103
+ And the following files should not exist:
104
+ | build/ignored.html |
105
+ | build/alternate_layout.html.erb.frontmatter |
106
+ | build/ignored.html.erb.frontmatter |
107
+ | build/override_layout.html.erb.frontmatter |
108
+ | build/page_mentioned.html.erb.frontmatter |
109
+
110
+ Scenario: Setting layout, ignoring, and disabling directory indexes through frontmatter (preview)
111
+ Given the Server is running at "frontmatter-settings-neighbor-app"
112
+ When I go to "/alternate_layout.html"
113
+ Then I should not see "File Not Found"
114
+ And I should see "Alternate layout"
115
+ When I go to "/alternate_layout.html.erb.frontmatter"
116
+ Then I should see "File Not Found"
117
+ When I go to "/ignored.html"
118
+ Then I should see "File Not Found"
119
+ When I go to "/ignored.html.erb.frontmatter"
120
+ Then I should see "File Not Found"
121
+ When I go to "/ignored/index.html"
122
+ Then I should see "File Not Found"
123
+
124
+ Scenario: Changing frontmatter in preview server
125
+ Given the Server is running at "frontmatter-settings-neighbor-app"
126
+ When I go to "/ignored.html"
127
+ Then I should see "File Not Found"
128
+ And the file "source/ignored.html.erb.frontmatter" has the contents
129
+ """
130
+ ---
131
+ ignored: false
132
+ ---
133
+ """
134
+ When I go to "/ignored.html"
135
+ Then I should see "This file ignores itself! But it can still be proxied."
136
+ When I go to "/ignored.html.erb.frontmatter"
137
+ Then I should see "File Not Found"
138
+
139
+ Scenario: Overriding layout through frontmatter
140
+ Given the Server is running at "frontmatter-settings-neighbor-app"
141
+ When I go to "/override_layout.html"
142
+ Then I should see "Layout in use: Override"
143
+ When I go to "/override_layout.html.erb.frontmatter"
144
+ Then I should see "File Not Found"
145
+
146
+ Scenario: Setting layout through frontmatter even if page is mentioned in config
147
+ Given the Server is running at "frontmatter-settings-neighbor-app"
148
+ When I go to "/page_mentioned.html"
149
+ Then I should see "Layout in use: Override"
150
+ When I go to "/page_mentioned.html.erb.frontmatter"
151
+ Then I should see "File Not Found"
@@ -0,0 +1,31 @@
1
+ Feature: Queryable Selector
2
+ Scenario: Basic Selector Tests
3
+ Then should initialize with an attribute and an operator
4
+ Then should raise an exception if the operator is not supported
5
+ Scenario: Using offset and limit
6
+ Given the Server is running at "queryable-app"
7
+ Then should limit the documents to the number specified
8
+ Then should offset the documents by the number specified
9
+ Then should support offset and limit at the same time
10
+ Then should not freak out about an offset higher than the document count
11
+ Scenario: Using where queries with an equal operator
12
+ Given the Server is running at "queryable-app"
13
+ Then should return the right documents
14
+ Then should be chainable
15
+ Then should not be confused by attributes not present in all documents
16
+ Scenario: Using where queries with a complex operator
17
+ Given the Server is running at "queryable-app"
18
+ Then with a gt operator should return the right documents
19
+ Then with a gte operator should return the right documents
20
+ Then with an in operator should return the right documents
21
+ Then with an lt operator should return the right documents
22
+ Then with an lte operator should return the right documents
23
+ Then with an include operator include should return the right documents
24
+ Then with mixed operators should return the right documents
25
+ Then using multiple constrains in one where should return the right documents
26
+ Scenario: Sorting documents
27
+ Given the Server is running at "queryable-app"
28
+ Then should support ordering by attribute ascending
29
+ Then should support ordering by attribute descending
30
+ Then should order by attribute ascending by default
31
+ Then should exclude documents that do not own the attribute
@@ -0,0 +1,123 @@
1
+ Then /^should initialize with an attribute and an operator$/ do
2
+ selector = ::Middleman::Sitemap::Queryable::Selector.new :attribute => :author, :operator => 'equal'
3
+ :author.should == selector.attribute
4
+ 'equal'.should == selector.operator
5
+ end
6
+
7
+ Then /^should raise an exception if the operator is not supported$/ do
8
+ expect {
9
+ selector = ::Middleman::Sitemap::Queryable::Selector.new :attribute => :author, :operator => 'zomg'
10
+ }.to raise_error(::Middleman::Sitemap::Queryable::OperatorNotSupportedError)
11
+ end
12
+
13
+ Then /^should limit the documents to the number specified$/ do
14
+ @server_inst.sitemap.order_by(:id).limit(2).all.map { |r| r.raw_data[:id] }.sort.should == [1,2].sort
15
+ end
16
+
17
+ Then /^should offset the documents by the number specified$/ do
18
+ @server_inst.sitemap.order_by(:id).offset(2).all.map { |r| r.raw_data[:id] }.sort.should == [3,4,5].sort
19
+ end
20
+
21
+ Then /^should support offset and limit at the same time$/ do
22
+ @server_inst.sitemap.order_by(:id).offset(1).limit(2).all.map { |r| r.raw_data[:id] }.sort.should == [2,3].sort
23
+ end
24
+
25
+ Then /^should not freak out about an offset higher than the document count$/ do
26
+ @server_inst.sitemap.order_by(:id).offset(5).all.should == []
27
+ end
28
+
29
+ Then /^should return the right documents$/ do
30
+ documents = @server_inst.sitemap.resources.select { |r| !r.raw_data.empty? }
31
+ document_1 = documents[0]
32
+ document_2 = documents[1]
33
+
34
+ found_document = @server_inst.sitemap.where(:title => document_1.raw_data[:title]).first
35
+ document_1.should == found_document
36
+
37
+ found_document = @server_inst.sitemap.where(:title => document_2.raw_data[:title]).first
38
+ document_2.should == found_document
39
+ end
40
+
41
+ Then /^should be chainable$/ do
42
+ documents = @server_inst.sitemap.resources.select { |r| !r.raw_data.empty? }
43
+ document_1 = documents[0]
44
+
45
+ document_proxy = @server_inst.sitemap.where(:title => document_1.raw_data[:title])
46
+ document_proxy.where(:id => document_1.raw_data[:id])
47
+ document_1.should == document_proxy.first
48
+ end
49
+
50
+ Then /^should not be confused by attributes not present in all documents$/ do
51
+ result = @server_inst.sitemap.where(:seldom_attribute => 'is seldom').all
52
+ result.map { |r| r.raw_data[:id] }.should == [4]
53
+ end
54
+
55
+ Then /^with a gt operator should return the right documents$/ do
56
+ selector = ::Middleman::Sitemap::Queryable::Selector.new :attribute => :id, :operator => 'gt'
57
+ found_documents = @server_inst.sitemap.where(selector => 2).all
58
+ found_documents.map { |r| r.raw_data[:id] }.sort.should == [5,3,4].sort
59
+ end
60
+
61
+ Then /^with a gte operator should return the right documents$/ do
62
+ selector = ::Middleman::Sitemap::Queryable::Selector.new :attribute => :id, :operator => 'gte'
63
+ found_documents = @server_inst.sitemap.where(selector => 2).all
64
+ found_documents.map { |r| r.raw_data[:id] }.sort.should == [2,5,3,4].sort
65
+ end
66
+
67
+ Then /^with an in operator should return the right documents$/ do
68
+ selector = ::Middleman::Sitemap::Queryable::Selector.new :attribute => :id, :operator => 'in'
69
+ found_documents = @server_inst.sitemap.where(selector => [2,3]).all
70
+ found_documents.map { |r| r.raw_data[:id] }.sort.should == [2,3].sort
71
+ end
72
+
73
+ Then /^with an lt operator should return the right documents$/ do
74
+ selector = ::Middleman::Sitemap::Queryable::Selector.new :attribute => :id, :operator => 'lt'
75
+ found_documents = @server_inst.sitemap.where(selector => 2).all
76
+ found_documents.map { |r| r.raw_data[:id] }.should == [1]
77
+ end
78
+
79
+ Then /^with an lte operator should return the right documents$/ do
80
+ selector = ::Middleman::Sitemap::Queryable::Selector.new :attribute => :id, :operator => 'lte'
81
+ found_documents = @server_inst.sitemap.where(selector => 2).all
82
+ found_documents.map { |r| r.raw_data[:id] }.sort.should == [1,2].sort
83
+ end
84
+
85
+ Then /^with an include operator include should return the right documents$/ do
86
+ selector = ::Middleman::Sitemap::Queryable::Selector.new :attribute => :tags, :operator => 'include'
87
+ found_documents = @server_inst.sitemap.where(selector => 'ruby').all
88
+ found_documents.map { |r| r.raw_data[:id] }.sort.should == [1,2].sort
89
+ end
90
+
91
+ Then /^with mixed operators should return the right documents$/ do
92
+ in_selector = ::Middleman::Sitemap::Queryable::Selector.new :attribute => :id, :operator => 'in'
93
+ gt_selector = ::Middleman::Sitemap::Queryable::Selector.new :attribute => :id, :operator => 'gt'
94
+ documents_proxy = @server_inst.sitemap.where(in_selector => [2,3])
95
+ found_documents = documents_proxy.where(gt_selector => 2).all
96
+ found_documents.map { |r| r.raw_data[:id] }.should == [3]
97
+ end
98
+
99
+ Then /^using multiple constrains in one where should return the right documents$/ do
100
+ selector = ::Middleman::Sitemap::Queryable::Selector.new :attribute => :id, :operator => 'lte'
101
+ found_documents = @server_inst.sitemap.where(selector => 2, :status => :published).all
102
+ found_documents.map { |r| r.raw_data[:id] }.sort.should == [1,2].sort
103
+ end
104
+
105
+ Then /^should support ordering by attribute ascending$/ do
106
+ found_documents = @server_inst.sitemap.order_by(:title => :asc).all
107
+ found_documents.map { |r| r.raw_data[:id] }.should == [2,3,1,5,4]
108
+ end
109
+
110
+ Then /^should support ordering by attribute descending$/ do
111
+ found_documents = @server_inst.sitemap.order_by(:title => :desc).all
112
+ found_documents.map { |r| r.raw_data[:id] }.should == [4,5,1,3,2]
113
+ end
114
+
115
+ Then /^should order by attribute ascending by default$/ do
116
+ found_documents = @server_inst.sitemap.order_by(:title).all
117
+ found_documents.map { |r| r.raw_data[:id] }.should == [2,3,1,5,4]
118
+ end
119
+
120
+ Then /^should exclude documents that do not own the attribute$/ do
121
+ found_documents = @server_inst.sitemap.order_by(:status).all
122
+ found_documents.map { |r| r.raw_data[:id] }.to_set.should == [1,2].to_set
123
+ end
@@ -0,0 +1 @@
1
+
@@ -0,0 +1 @@
1
+ # I'm an htaccess file!
@@ -0,0 +1 @@
1
+ I have no file extension.
@@ -0,0 +1 @@
1
+ I'm an HTML file!
@@ -0,0 +1 @@
1
+ // This is JavaScript
@@ -0,0 +1,5 @@
1
+ ---
2
+ content_type: 'text/neato'
3
+ ---
4
+
5
+ I'm awesome!
@@ -0,0 +1 @@
1
+ /* This is CSS */
File without changes
@@ -0,0 +1,2 @@
1
+ <h1><%= data.page.title %></h1>
2
+ <?php echo "sup"; ?>