sinatra_resource 0.3.6 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.3.6
1
+ 0.4.0
@@ -10,6 +10,7 @@ Config.setup
10
10
 
11
11
  base = File.dirname(__FILE__)
12
12
  Dir.glob(base + '/lib/*.rb' ).each { |f| require f }
13
+ Dir.glob(base + '/model_helpers/*.rb' ).each { |f| require f }
13
14
  Dir.glob(base + '/models/*.rb' ).each { |f| require f }
14
15
  Dir.glob(base + '/resource_helpers/*.rb').each { |f| require f }
15
16
  Dir.glob(base + '/resources/*.rb' ).each { |f| require f }
@@ -0,0 +1,92 @@
1
+ module DataCatalog
2
+
3
+ class Search
4
+
5
+ # Returns an array of strings, tokenized with stopwords removed.
6
+ #
7
+ # @param [<String>] array
8
+ # An array of strings
9
+ #
10
+ # @return [<String>]
11
+ def self.process(array)
12
+ unstop(tokenize(array))
13
+ end
14
+
15
+ # Tokenize an array of strings.
16
+ #
17
+ # @param [<String>] array
18
+ # An array of strings
19
+ #
20
+ # @return [<String>]
21
+ def self.tokenize(array)
22
+ array.reduce([]) do |m, x|
23
+ m << tokens(x)
24
+ end.flatten.uniq
25
+ end
26
+
27
+ REMOVE = %r([!,;])
28
+
29
+ # Tokenize a string, removing extra characters too.
30
+ #
31
+ # @param [String] string
32
+ #
33
+ # @return [<String>]
34
+ def self.tokens(s)
35
+ if s
36
+ "#{s} ".downcase.
37
+ gsub(REMOVE, ' ').
38
+ gsub(%r(\. ), ' ').
39
+ split(' ')
40
+ else
41
+ []
42
+ end
43
+ end
44
+
45
+ STOP_WORDS = %w(
46
+ a
47
+ about
48
+ and
49
+ are
50
+ as
51
+ at
52
+ be
53
+ by
54
+ data
55
+ for
56
+ from
57
+ how
58
+ in
59
+ is
60
+ it
61
+ of
62
+ on
63
+ or
64
+ set
65
+ that
66
+ the
67
+ this
68
+ to
69
+ was
70
+ what
71
+ when
72
+ where
73
+ an
74
+ who
75
+ will
76
+ with
77
+ the
78
+ )
79
+
80
+ # Remove stopwords from an array of strings.
81
+ #
82
+ # @param [<String>] array
83
+ # An array of strings
84
+ #
85
+ # @return [<String>]
86
+ def self.unstop(array)
87
+ array - STOP_WORDS
88
+ end
89
+
90
+ end
91
+
92
+ end
@@ -6,9 +6,11 @@ module DataCatalog
6
6
 
7
7
  # == Attributes
8
8
 
9
- key :title, String
10
- key :url, String
11
- key :raw, Hash
9
+ key :title, String
10
+ key :description, String
11
+ key :url, String
12
+ key :raw, Hash
13
+ key :_keywords, Array
12
14
  timestamps!
13
15
 
14
16
  # == Indices
@@ -33,6 +35,13 @@ module DataCatalog
33
35
 
34
36
  validates_presence_of :title
35
37
  validates_presence_of :url
38
+
39
+ # == Callbacks
40
+
41
+ before_save :update_keywords
42
+ def update_keywords
43
+ self._keywords = DataCatalog::Search.process([title, description])
44
+ end
36
45
 
37
46
  end
38
47
 
@@ -2,4 +2,5 @@ require File.dirname(__FILE__) + '/test_helper'
2
2
 
3
3
  Config.setup_mongomapper
4
4
  base = File.dirname(__FILE__)
5
+ Dir.glob(base + '/../../model_helpers/*.rb').each { |f| require f }
5
6
  Dir.glob(base + '/../../models/*.rb').each { |f| require f }
@@ -0,0 +1,54 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../helpers/model_test_helper')
2
+
3
+ class SearchUnitTest < ModelTestCase
4
+ include DataCatalog
5
+
6
+ context "tokens" do
7
+ test "spaces" do
8
+ assert_equal %w(hello world), Search.tokens("hello world")
9
+ end
10
+
11
+ test "commas" do
12
+ assert_equal %w(red white blue), Search.tokens("red, white, blue")
13
+ end
14
+
15
+ test "periods" do
16
+ assert_equal %w(flood plain data), Search.tokens("Flood plain data.")
17
+ end
18
+
19
+ test "integers" do
20
+ assert_equal %w(99 barrels of beer), Search.tokens("99 barrels of beer")
21
+ end
22
+
23
+ test "floating point" do
24
+ assert_equal %w(the earth has an axial tilt of 23.439 degrees),
25
+ Search.tokens("The earth has an axial tilt of 23.439 degrees.")
26
+ end
27
+ end
28
+
29
+ context "tokenize" do
30
+ test "simple" do
31
+ assert_equal %w(aerospace defense systems),
32
+ Search.tokenize(["aerospace defense", "defense systems"])
33
+ end
34
+ end
35
+
36
+ context "unstop" do
37
+ test "simple" do
38
+ assert_equal %w(big brown fox), Search.unstop(%w(the big brown fox))
39
+ end
40
+ end
41
+
42
+ context "process" do
43
+ test "simple" do
44
+ assert_equal %w(aerospace defense systems),
45
+ Search.process(["the aerospace defense", "systems of defense"])
46
+ end
47
+
48
+ test "complex" do
49
+ assert_equal %w(earth has axial tilt 23.439 degrees),
50
+ Search.process(["The earth has an axial tilt of 23.439 degrees."])
51
+ end
52
+ end
53
+
54
+ end
@@ -0,0 +1,92 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../../helpers/resource_test_helper')
2
+
3
+ class SourcesGetManyFilterResourceTest < ResourceTestCase
4
+
5
+ include DataCatalog
6
+
7
+ def app; Sources end
8
+
9
+ before do
10
+ Source.destroy_all unless Source.count == 0
11
+ @sources = 3.times.map do |i|
12
+ create_source(:title => "Source #{i}")
13
+ end
14
+ @source_titles = ["Source 0", "Source 1", "Source 2"].sort
15
+ end
16
+
17
+ after do
18
+ @sources.each { |x| x.destroy } if @sources
19
+ end
20
+
21
+ context "title='Source 2'" do
22
+ before do
23
+ @search_params = { :filter => "title='Source 2'" }
24
+ end
25
+
26
+ context "get /" do
27
+ context "anonymous" do
28
+ before do
29
+ get "/", @search_params
30
+ end
31
+
32
+ use "return 401 because the API key is missing"
33
+ end
34
+
35
+ context "incorrect API key" do
36
+ before do
37
+ get "/", @search_params.merge(:api_key => BAD_API_KEY)
38
+ end
39
+
40
+ use "return 401 because the API key is invalid"
41
+ end
42
+ end
43
+
44
+ %w(basic curator admin).each do |role|
45
+ context "#{role} : get /" do
46
+ before do
47
+ get "/", @search_params.merge(:api_key => api_key_for(role))
48
+ end
49
+
50
+ use "return 200 Ok"
51
+
52
+ test "body should have 1 source" do
53
+ assert_equal 1, parsed_response_body.length
54
+ end
55
+
56
+ test "body should have correct source" do
57
+ assert_equal 'Source 2', parsed_response_body[0]['title']
58
+ end
59
+
60
+ docs_properties %w(title url raw categories id created_at updated_at)
61
+ end
62
+ end
63
+ end
64
+
65
+ context "title:Source" do
66
+ before do
67
+ @search_params = { :filter => "title:Source" }
68
+ end
69
+
70
+ %w(basic curator admin).each do |role|
71
+ context "#{role} : get /" do
72
+ before do
73
+ get "/", @search_params.merge(:api_key => api_key_for(role))
74
+ end
75
+
76
+ use "return 200 Ok"
77
+
78
+ test "body should have 3 sources" do
79
+ assert_equal 3, parsed_response_body.length
80
+ end
81
+
82
+ test "body should have correct source titles" do
83
+ actual = parsed_response_body.map { |e| e["title"] }
84
+ assert_equal @source_titles, actual.sort
85
+ end
86
+
87
+ docs_properties %w(title url raw categories id created_at updated_at)
88
+ end
89
+ end
90
+ end
91
+
92
+ end
@@ -8,83 +8,108 @@ class SourcesGetManySearchResourceTest < ResourceTestCase
8
8
 
9
9
  before do
10
10
  Source.destroy_all unless Source.count == 0
11
- @sources = 3.times.map do |i|
12
- create_source(:title => "Source #{i}")
13
- end
14
- @source_titles = ["Source 0", "Source 1", "Source 2"].sort
11
+ @sources = [
12
+ create_source(
13
+ :url => "http://www.data.gov/details/723",
14
+ :title => %{2008 Early Release Toxics Release Inventory data for the state of New York"},
15
+ :description => %{Preliminary Toxics Release Inventory Data in the "Basic Plus" file format. The Toxics Release Inventory (TRI) is a publicly available EPA database that contains information on toxic chemical releases and waste management activities reported annually by certain industries as well as federal facilities.}
16
+ ),
17
+ create_source(
18
+ :url => "http://www.data.gov/details/788",
19
+ :title => %{Renal Dialysis Facility Medicare Cost Report Data - FY 2007},
20
+ :description => %{A collection of Renal Dialysis Facility Medicare cost report data from the CMS Form 265-94.}
21
+ ),
22
+ create_source(
23
+ :url => "http://www.data.gov/details/431",
24
+ :title => %{Interest Rate Statistics - Daily Treasury Yield Curve Rates (1998)},
25
+ :description => %{Treasury Yield Curve Rates. These rates are commonly referred to as "Constant Maturity Treasury" rates, or CMTs. Yields are interpolated by the Treasury from the daily yield curve. This curve, which relates the yield on a security to its time to maturity is based on the closing market bid yields on actively traded Treasury securities in the over-the-counter market. These market yields are calculated from composites of quotations obtained by the Federal Reserve Bank of New York. The yield values are read from the yield curve at fixed maturities, currently 1, 3 and 6 months and 1, 2, 3, 5, 7, 10, 20, and 30 years. This method provides a yield for a 10 year maturity, for example, even if no outstanding security has exactly 10 years remaining to maturity.}
26
+ ),
27
+ create_source(
28
+ :url => "http://www.data.gov/details/404",
29
+ :title => %{Interest Rate Statistics - Daily Treasury Bills Rates (Current month)},
30
+ :description => %{Daily Treasury Bill Rates: These rates are the daily secondary market quotation on the most recently auctioned Treasury Bills for each maturity tranche (4-week, 13-week, 26-week, and 52-week) that Treasury currently issues new Bills. Market quotations are obtained at approximately 3:30 PM each business day by the Federal Reserve Bank of New York. The Bank Discount rate is the rate at which a Bill is quoted in the secondary market and is based on the par value, amount of the discount and a 360-day year. The Coupon Equivalent, also called the Bond Equivalent, or the Investment Yield, is the bill's yield based on the purchase price, discount, and a 365- or 366-day year. The Coupon Equivalent can be used to compare the yield on a discount bill to the yield on a nominal coupon bond that pays semiannual interest.}
31
+ ),
32
+ create_source(
33
+ :url => "http://www.data.gov/details/311",
34
+ :title => %{2007 Crime in the United States},
35
+ :description => %{Extraction of offense, arrest, and clearance data as well as law enforcement staffing information from the FBI's Uniform Crime Reporting (UCR) Program.}
36
+ ),
37
+ create_source(
38
+ :url => "http://www.data.gov/details/123",
39
+ :title => %{Airline On-Time Performance and Causes of Flight Delays},
40
+ :description => %{This table contains on-time arrival data for non-stop domestic flights by major air carriers, and provides such additional items as departure and arrival delays, origin and destination airports, flight numbers, scheduled and actual departure and arrival times, cancelled or diverted flights, taxi-out and taxi-in times, air time, and non-stop distance.}
41
+ ),
42
+ ]
15
43
  end
16
44
 
17
45
  after do
18
46
  @sources.each { |x| x.destroy } if @sources
19
47
  end
20
-
21
- context "title='Source 2'" do
48
+
49
+ context "search=arrest" do
22
50
  before do
23
- @search_params = { :filter => "title='Source 2'" }
51
+ @search_params = { :search => "arrest" }
24
52
  end
25
-
53
+
26
54
  context "get /" do
27
55
  context "anonymous" do
28
56
  before do
29
57
  get "/", @search_params
30
58
  end
31
-
59
+
32
60
  use "return 401 because the API key is missing"
33
61
  end
34
-
62
+
35
63
  context "incorrect API key" do
36
64
  before do
37
65
  get "/", @search_params.merge(:api_key => BAD_API_KEY)
38
66
  end
39
-
67
+
40
68
  use "return 401 because the API key is invalid"
41
69
  end
42
70
  end
43
-
71
+
44
72
  %w(basic curator admin).each do |role|
45
73
  context "#{role} : get /" do
46
74
  before do
47
75
  get "/", @search_params.merge(:api_key => api_key_for(role))
48
76
  end
49
-
77
+
50
78
  use "return 200 Ok"
51
-
79
+
52
80
  test "body should have 1 source" do
53
81
  assert_equal 1, parsed_response_body.length
54
82
  end
55
-
83
+
56
84
  test "body should have correct source" do
57
- assert_equal 'Source 2', parsed_response_body[0]['title']
85
+ assert_equal %{2007 Crime in the United States},
86
+ parsed_response_body[0]['title']
58
87
  end
59
-
88
+
60
89
  docs_properties %w(title url raw categories id created_at updated_at)
61
90
  end
62
91
  end
63
92
  end
64
-
65
- context "title:Source" do
93
+
94
+ context "search=quotations" do
66
95
  before do
67
- @search_params = { :filter => "title:Source" }
96
+ @search_params = { :search => "quotations" }
68
97
  end
69
-
70
- %w(basic curator admin).each do |role|
98
+
99
+ %w(basic).each do |role|
71
100
  context "#{role} : get /" do
72
101
  before do
73
102
  get "/", @search_params.merge(:api_key => api_key_for(role))
74
103
  end
75
-
104
+
76
105
  use "return 200 Ok"
77
-
78
- test "body should have 3 sources" do
79
- assert_equal 3, parsed_response_body.length
80
- end
81
-
82
- test "body should have correct source titles" do
83
- actual = parsed_response_body.map { |e| e["title"] }
84
- assert_equal @source_titles, actual.sort
106
+
107
+ test "body should have correct sources" do
108
+ titles = parsed_response_body.map { |x| x['title'] }
109
+ assert_equal 2, titles.length
110
+ assert_include %{Interest Rate Statistics - Daily Treasury Yield Curve Rates (1998)}, titles
111
+ assert_include %{Interest Rate Statistics - Daily Treasury Bills Rates (Current month)}, titles
85
112
  end
86
-
87
- docs_properties %w(title url raw categories id created_at updated_at)
88
113
  end
89
114
  end
90
115
  end
@@ -1,6 +1,6 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/../../helpers/resource_test_helper')
2
2
 
3
- class SourcesUsagesGetManySearchResourceTest < ResourceTestCase
3
+ class SourcesUsagesGetManyFilterResourceTest < ResourceTestCase
4
4
 
5
5
  include DataCatalog
6
6
 
@@ -4,8 +4,6 @@ module SinatraResource
4
4
 
5
5
  module Helpers
6
6
 
7
- FILTER_KEY = "filter"
8
-
9
7
  # Build a resource, based on +document+, appropriate for +role+.
10
8
  #
11
9
  # @param [Symbol] role
@@ -335,7 +333,10 @@ module SinatraResource
335
333
  def params_check_action(action)
336
334
  case action
337
335
  when :list
338
- unless params.reject { |k, v| k == FILTER_KEY }.empty?
336
+ p = params.reject do |k, v|
337
+ [FILTER_KEY, SEARCH_KEY].include?(k)
338
+ end
339
+ unless p.empty?
339
340
  error 400, convert(body_for(:non_empty_params))
340
341
  end
341
342
  when :read
@@ -373,7 +374,7 @@ module SinatraResource
373
374
  def params_check_action_and_role(action, role, resource_config)
374
375
  invalid = []
375
376
  params.each_pair do |property, value|
376
- next if property == FILTER_KEY
377
+ next if [FILTER_KEY, SEARCH_KEY].include?(property)
377
378
  if !authorized?(action, role, resource_config, property.intern)
378
379
  invalid << property
379
380
  end
@@ -328,10 +328,18 @@ module SinatraResource
328
328
  #
329
329
  # @return [Hash]
330
330
  def make_conditions(params, model)
331
- filter_string = params["filter"]
332
- return {} unless filter_string
333
- unsafe = QS_FILTER.parse(filter_string)
334
- sanitize(unsafe, model)
331
+ search_string = params[SEARCH_KEY]
332
+ filter_string = params[FILTER_KEY]
333
+ if search_string && filter_string
334
+ error 400, convert(body_for(:invalid_params, [FILTER_KEY]))
335
+ elsif search_string
336
+ { :_keywords => search_string }
337
+ elsif filter_string
338
+ unsafe = QS_FILTER.parse(filter_string)
339
+ sanitize(unsafe, model)
340
+ else
341
+ {}
342
+ end
335
343
  end
336
344
 
337
345
  # Filter out +conditions+ that do not have corresponding keys in
data/lib/builder.rb CHANGED
@@ -2,6 +2,9 @@ module SinatraResource
2
2
 
3
3
  class Builder
4
4
 
5
+ FILTER_KEY = "filter"
6
+ SEARCH_KEY = "search"
7
+
5
8
  def initialize(klass)
6
9
  @klass = klass
7
10
 
@@ -1,6 +1,6 @@
1
1
  base = File.dirname(__FILE__)
2
2
  require base + '/exceptions'
3
- Dir.glob(base + '/builder/*.rb').each { |f| require f }
4
3
  require base + '/builder'
4
+ Dir.glob(base + '/builder/*.rb').each { |f| require f }
5
5
  require base + '/resource'
6
6
  require base + '/roles'
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{sinatra_resource}
8
- s.version = "0.3.6"
8
+ s.version = "0.4.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["David James"]
12
- s.date = %q{2009-11-04}
12
+ s.date = %q{2009-11-05}
13
13
  s.description = %q{A DSL for creating RESTful actions with Sinatra and MongoMapper. It embraces the Resource Oriented Architecture as explained by Leonard Richardson and Sam Ruby.}
14
14
  s.email = %q{djames@sunlightfoundation.com}
15
15
  s.extra_rdoc_files = [
@@ -31,6 +31,7 @@ Gem::Specification.new do |s|
31
31
  "examples/datacatalog/lib/base.rb",
32
32
  "examples/datacatalog/lib/resource.rb",
33
33
  "examples/datacatalog/lib/roles.rb",
34
+ "examples/datacatalog/model_helpers/search.rb",
34
35
  "examples/datacatalog/models/categorization.rb",
35
36
  "examples/datacatalog/models/category.rb",
36
37
  "examples/datacatalog/models/note.rb",
@@ -62,6 +63,7 @@ Gem::Specification.new do |s|
62
63
  "examples/datacatalog/test/models/categorization_test.rb",
63
64
  "examples/datacatalog/test/models/category_test.rb",
64
65
  "examples/datacatalog/test/models/note_test.rb",
66
+ "examples/datacatalog/test/models/search_test.rb",
65
67
  "examples/datacatalog/test/models/source_test.rb",
66
68
  "examples/datacatalog/test/models/user_test.rb",
67
69
  "examples/datacatalog/test/resources/categories/categories_delete_test.rb",
@@ -78,15 +80,16 @@ Gem::Specification.new do |s|
78
80
  "examples/datacatalog/test/resources/notes/notes_get_one_test.rb",
79
81
  "examples/datacatalog/test/resources/notes/notes_post_test.rb",
80
82
  "examples/datacatalog/test/resources/sources/sources_delete_test.rb",
83
+ "examples/datacatalog/test/resources/sources/sources_get_many_filter_test.rb",
81
84
  "examples/datacatalog/test/resources/sources/sources_get_many_search_test.rb",
82
85
  "examples/datacatalog/test/resources/sources/sources_get_many_test.rb",
83
86
  "examples/datacatalog/test/resources/sources/sources_get_one_test.rb",
84
87
  "examples/datacatalog/test/resources/sources/sources_post_test.rb",
85
88
  "examples/datacatalog/test/resources/sources/sources_put_test.rb",
86
89
  "examples/datacatalog/test/resources/sources_usages/sources_usages_delete_test.rb",
90
+ "examples/datacatalog/test/resources/sources_usages/sources_usages_get_many_filter_test.rb",
87
91
  "examples/datacatalog/test/resources/sources_usages/sources_usages_get_many_test.rb",
88
92
  "examples/datacatalog/test/resources/sources_usages/sources_usages_get_one_test.rb",
89
- "examples/datacatalog/test/resources/sources_usages/sources_usages_get_search_test.rb",
90
93
  "examples/datacatalog/test/resources/sources_usages/sources_usages_post_test.rb",
91
94
  "examples/datacatalog/test/resources/sources_usages/sources_usages_put_test.rb",
92
95
  "examples/datacatalog/test/resources/users/users_delete_test.rb",
@@ -128,6 +131,7 @@ Gem::Specification.new do |s|
128
131
  "examples/datacatalog/lib/base.rb",
129
132
  "examples/datacatalog/lib/resource.rb",
130
133
  "examples/datacatalog/lib/roles.rb",
134
+ "examples/datacatalog/model_helpers/search.rb",
131
135
  "examples/datacatalog/models/categorization.rb",
132
136
  "examples/datacatalog/models/category.rb",
133
137
  "examples/datacatalog/models/note.rb",
@@ -157,6 +161,7 @@ Gem::Specification.new do |s|
157
161
  "examples/datacatalog/test/models/categorization_test.rb",
158
162
  "examples/datacatalog/test/models/category_test.rb",
159
163
  "examples/datacatalog/test/models/note_test.rb",
164
+ "examples/datacatalog/test/models/search_test.rb",
160
165
  "examples/datacatalog/test/models/source_test.rb",
161
166
  "examples/datacatalog/test/models/user_test.rb",
162
167
  "examples/datacatalog/test/resources/categories/categories_delete_test.rb",
@@ -173,15 +178,16 @@ Gem::Specification.new do |s|
173
178
  "examples/datacatalog/test/resources/notes/notes_get_one_test.rb",
174
179
  "examples/datacatalog/test/resources/notes/notes_post_test.rb",
175
180
  "examples/datacatalog/test/resources/sources/sources_delete_test.rb",
181
+ "examples/datacatalog/test/resources/sources/sources_get_many_filter_test.rb",
176
182
  "examples/datacatalog/test/resources/sources/sources_get_many_search_test.rb",
177
183
  "examples/datacatalog/test/resources/sources/sources_get_many_test.rb",
178
184
  "examples/datacatalog/test/resources/sources/sources_get_one_test.rb",
179
185
  "examples/datacatalog/test/resources/sources/sources_post_test.rb",
180
186
  "examples/datacatalog/test/resources/sources/sources_put_test.rb",
181
187
  "examples/datacatalog/test/resources/sources_usages/sources_usages_delete_test.rb",
188
+ "examples/datacatalog/test/resources/sources_usages/sources_usages_get_many_filter_test.rb",
182
189
  "examples/datacatalog/test/resources/sources_usages/sources_usages_get_many_test.rb",
183
190
  "examples/datacatalog/test/resources/sources_usages/sources_usages_get_one_test.rb",
184
- "examples/datacatalog/test/resources/sources_usages/sources_usages_get_search_test.rb",
185
191
  "examples/datacatalog/test/resources/sources_usages/sources_usages_post_test.rb",
186
192
  "examples/datacatalog/test/resources/sources_usages/sources_usages_put_test.rb",
187
193
  "examples/datacatalog/test/resources/users/users_delete_test.rb",
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sinatra_resource
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.6
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - David James
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-11-04 00:00:00 -05:00
12
+ date: 2009-11-05 00:00:00 -05:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -135,6 +135,7 @@ files:
135
135
  - examples/datacatalog/lib/base.rb
136
136
  - examples/datacatalog/lib/resource.rb
137
137
  - examples/datacatalog/lib/roles.rb
138
+ - examples/datacatalog/model_helpers/search.rb
138
139
  - examples/datacatalog/models/categorization.rb
139
140
  - examples/datacatalog/models/category.rb
140
141
  - examples/datacatalog/models/note.rb
@@ -166,6 +167,7 @@ files:
166
167
  - examples/datacatalog/test/models/categorization_test.rb
167
168
  - examples/datacatalog/test/models/category_test.rb
168
169
  - examples/datacatalog/test/models/note_test.rb
170
+ - examples/datacatalog/test/models/search_test.rb
169
171
  - examples/datacatalog/test/models/source_test.rb
170
172
  - examples/datacatalog/test/models/user_test.rb
171
173
  - examples/datacatalog/test/resources/categories/categories_delete_test.rb
@@ -182,15 +184,16 @@ files:
182
184
  - examples/datacatalog/test/resources/notes/notes_get_one_test.rb
183
185
  - examples/datacatalog/test/resources/notes/notes_post_test.rb
184
186
  - examples/datacatalog/test/resources/sources/sources_delete_test.rb
187
+ - examples/datacatalog/test/resources/sources/sources_get_many_filter_test.rb
185
188
  - examples/datacatalog/test/resources/sources/sources_get_many_search_test.rb
186
189
  - examples/datacatalog/test/resources/sources/sources_get_many_test.rb
187
190
  - examples/datacatalog/test/resources/sources/sources_get_one_test.rb
188
191
  - examples/datacatalog/test/resources/sources/sources_post_test.rb
189
192
  - examples/datacatalog/test/resources/sources/sources_put_test.rb
190
193
  - examples/datacatalog/test/resources/sources_usages/sources_usages_delete_test.rb
194
+ - examples/datacatalog/test/resources/sources_usages/sources_usages_get_many_filter_test.rb
191
195
  - examples/datacatalog/test/resources/sources_usages/sources_usages_get_many_test.rb
192
196
  - examples/datacatalog/test/resources/sources_usages/sources_usages_get_one_test.rb
193
- - examples/datacatalog/test/resources/sources_usages/sources_usages_get_search_test.rb
194
197
  - examples/datacatalog/test/resources/sources_usages/sources_usages_post_test.rb
195
198
  - examples/datacatalog/test/resources/sources_usages/sources_usages_put_test.rb
196
199
  - examples/datacatalog/test/resources/users/users_delete_test.rb
@@ -254,6 +257,7 @@ test_files:
254
257
  - examples/datacatalog/lib/base.rb
255
258
  - examples/datacatalog/lib/resource.rb
256
259
  - examples/datacatalog/lib/roles.rb
260
+ - examples/datacatalog/model_helpers/search.rb
257
261
  - examples/datacatalog/models/categorization.rb
258
262
  - examples/datacatalog/models/category.rb
259
263
  - examples/datacatalog/models/note.rb
@@ -283,6 +287,7 @@ test_files:
283
287
  - examples/datacatalog/test/models/categorization_test.rb
284
288
  - examples/datacatalog/test/models/category_test.rb
285
289
  - examples/datacatalog/test/models/note_test.rb
290
+ - examples/datacatalog/test/models/search_test.rb
286
291
  - examples/datacatalog/test/models/source_test.rb
287
292
  - examples/datacatalog/test/models/user_test.rb
288
293
  - examples/datacatalog/test/resources/categories/categories_delete_test.rb
@@ -299,15 +304,16 @@ test_files:
299
304
  - examples/datacatalog/test/resources/notes/notes_get_one_test.rb
300
305
  - examples/datacatalog/test/resources/notes/notes_post_test.rb
301
306
  - examples/datacatalog/test/resources/sources/sources_delete_test.rb
307
+ - examples/datacatalog/test/resources/sources/sources_get_many_filter_test.rb
302
308
  - examples/datacatalog/test/resources/sources/sources_get_many_search_test.rb
303
309
  - examples/datacatalog/test/resources/sources/sources_get_many_test.rb
304
310
  - examples/datacatalog/test/resources/sources/sources_get_one_test.rb
305
311
  - examples/datacatalog/test/resources/sources/sources_post_test.rb
306
312
  - examples/datacatalog/test/resources/sources/sources_put_test.rb
307
313
  - examples/datacatalog/test/resources/sources_usages/sources_usages_delete_test.rb
314
+ - examples/datacatalog/test/resources/sources_usages/sources_usages_get_many_filter_test.rb
308
315
  - examples/datacatalog/test/resources/sources_usages/sources_usages_get_many_test.rb
309
316
  - examples/datacatalog/test/resources/sources_usages/sources_usages_get_one_test.rb
310
- - examples/datacatalog/test/resources/sources_usages/sources_usages_get_search_test.rb
311
317
  - examples/datacatalog/test/resources/sources_usages/sources_usages_post_test.rb
312
318
  - examples/datacatalog/test/resources/sources_usages/sources_usages_put_test.rb
313
319
  - examples/datacatalog/test/resources/users/users_delete_test.rb