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 +1 -1
- data/examples/datacatalog/app.rb +1 -0
- data/examples/datacatalog/model_helpers/search.rb +92 -0
- data/examples/datacatalog/models/source.rb +12 -3
- data/examples/datacatalog/test/helpers/model_test_helper.rb +1 -0
- data/examples/datacatalog/test/models/search_test.rb +54 -0
- data/examples/datacatalog/test/resources/sources/sources_get_many_filter_test.rb +92 -0
- data/examples/datacatalog/test/resources/sources/sources_get_many_search_test.rb +58 -33
- data/examples/datacatalog/test/resources/sources_usages/{sources_usages_get_search_test.rb → sources_usages_get_many_filter_test.rb} +1 -1
- data/lib/builder/helpers.rb +5 -4
- data/lib/builder/mongo_helpers.rb +12 -4
- data/lib/builder.rb +3 -0
- data/lib/sinatra_resource.rb +1 -1
- data/sinatra_resource.gemspec +10 -4
- metadata +10 -4
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.4.0
|
data/examples/datacatalog/app.rb
CHANGED
@@ -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,
|
10
|
-
key :
|
11
|
-
key :
|
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
|
|
@@ -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 =
|
12
|
-
create_source(
|
13
|
-
|
14
|
-
|
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 "
|
48
|
+
|
49
|
+
context "search=arrest" do
|
22
50
|
before do
|
23
|
-
@search_params = { :
|
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
|
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 "
|
93
|
+
|
94
|
+
context "search=quotations" do
|
66
95
|
before do
|
67
|
-
@search_params = { :
|
96
|
+
@search_params = { :search => "quotations" }
|
68
97
|
end
|
69
|
-
|
70
|
-
%w(basic
|
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
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
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
|
data/lib/builder/helpers.rb
CHANGED
@@ -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
|
-
|
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
|
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
|
-
|
332
|
-
|
333
|
-
|
334
|
-
|
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
data/lib/sinatra_resource.rb
CHANGED
data/sinatra_resource.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{sinatra_resource}
|
8
|
-
s.version = "0.
|
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-
|
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.
|
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-
|
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
|