middleman-core 3.0.14 → 3.1.0.beta.1

Sign up to get free protection for your applications and to get access to all the features.
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"; ?>