datacatalog 0.3.8 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
data/Rakefile CHANGED
@@ -5,7 +5,7 @@ begin
5
5
  require 'jeweler'
6
6
  Jeweler::Tasks.new do |gem|
7
7
  gem.name = "datacatalog"
8
- gem.version = '0.3.8'
8
+ gem.version = '0.4.0'
9
9
  gem.rubyforge_project = "datacatalog"
10
10
  gem.summary = %Q{Client for the National Data Catalog API}
11
11
  gem.description = %Q{A Ruby client library for the National Data Catalog API}
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{datacatalog}
8
- s.version = "0.3.8"
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 = ["Luigi Montanez", "David James"]
12
- s.date = %q{2009-12-02}
12
+ s.date = %q{2009-12-03}
13
13
  s.description = %q{A Ruby client library for the National Data Catalog API}
14
14
  s.email = %q{luigi@sunlightfoundation.com}
15
15
  s.extra_rdoc_files = [
@@ -23,6 +23,7 @@ Gem::Specification.new do |s|
23
23
  "Rakefile",
24
24
  "datacatalog.gemspec",
25
25
  "lib/base.rb",
26
+ "lib/cursor.rb",
26
27
  "lib/datacatalog.rb",
27
28
  "lib/main.rb",
28
29
  "lib/resources/about.rb",
@@ -51,6 +51,15 @@ module DataCatalog
51
51
  response
52
52
  end
53
53
 
54
+ def self.cursor(uri, query_hash)
55
+ Cursor.new({
56
+ :klass => self,
57
+ :query_hash => query_hash,
58
+ :response => http_get(uri, :query => query_hash),
59
+ :uri => uri,
60
+ })
61
+ end
62
+
54
63
  def self.error(response)
55
64
  parsed_body = JSON.parse(response.body)
56
65
  if parsed_body.empty?
@@ -64,8 +73,9 @@ module DataCatalog
64
73
  "Unable to parse: #{response.body.inspect}"
65
74
  end
66
75
 
67
- def self.many(response)
68
- response.map { |item| new(item) }
76
+ def self._first(response)
77
+ item = response['members'][0]
78
+ item.blank? ? nil : new(item)
69
79
  end
70
80
 
71
81
  def self.one(response)
@@ -78,13 +88,14 @@ module DataCatalog
78
88
  end
79
89
 
80
90
  def self.filterize(conditions)
81
- conditions.map do |k, v|
91
+ filtered_conditions = conditions.map do |k, v|
82
92
  "#{k}" + if v.is_a?(Regexp)
83
93
  %(:"#{v.source}")
84
94
  else
85
95
  %(="#{v}")
86
96
  end
87
- end.join(" ")
97
+ end
98
+ filtered_conditions.join(" ")
88
99
  end
89
100
 
90
101
  def method_missing(method_name, *args)
@@ -0,0 +1,98 @@
1
+ module DataCatalog
2
+
3
+ class Cursor
4
+
5
+ attr_reader :document_count
6
+ attr_reader :page_count
7
+ attr_reader :page_size
8
+
9
+ include Enumerable
10
+
11
+ def initialize(options)
12
+ @klass = options[:klass]
13
+ @query_hash = options[:query_hash]
14
+ @response = options[:response]
15
+ @uri = options[:uri]
16
+
17
+ @page_size = @response['page_size']
18
+ @document_count = @response['document_count']
19
+ @members = members(@response)
20
+ @page_count = @response['page_count']
21
+ end
22
+
23
+ def [](i)
24
+ member_at(i)
25
+ end
26
+
27
+ def each
28
+ @document_count.times { |i| yield member_at(i) }
29
+ end
30
+
31
+ def first
32
+ member_at(0)
33
+ end
34
+
35
+ def last
36
+ member_at(@document_count - 1)
37
+ end
38
+
39
+ def length
40
+ @document_count
41
+ end
42
+
43
+ def page(page_number)
44
+ page_indices(page_number).map { |i| member_at(i) }
45
+ end
46
+
47
+ def size
48
+ @members.size
49
+ end
50
+
51
+ protected
52
+
53
+ def fetch_members_near_index(index)
54
+ page_number = page_for_index(index)
55
+ response = response_for_page(page_number)
56
+ fetched = members(response)
57
+ range = page_indices(page_number)
58
+ range.each_with_index do |i, j|
59
+ @members[i] = fetched[j]
60
+ end
61
+ fetched.length
62
+ end
63
+
64
+ def member_at(index)
65
+ if index < 0
66
+ raise "index (#{index}) must be >= 0"
67
+ end
68
+ cached = @members[index]
69
+ return nil if @document_count == 0
70
+ return cached if cached
71
+ fetch_members_near_index(index)
72
+ fetched = @members[index]
73
+ raise "cannot find find member at index #{index}" unless fetched
74
+ fetched
75
+ end
76
+
77
+ def members(response)
78
+ response['members'].map { |x| @klass.new(x) }
79
+ end
80
+
81
+ def page_for_index(index)
82
+ (index / @page_size) + 1
83
+ end
84
+
85
+ def page_indices(page_number)
86
+ min = (page_number - 1) * @page_size
87
+ max = [min + @page_size - 1, @document_count - 1].min
88
+ (min .. max)
89
+ end
90
+
91
+ def response_for_page(page_number)
92
+ query_hash = @query_hash.merge(:page => page_number)
93
+ @klass.http_get(@uri, :query => query_hash)
94
+ end
95
+
96
+ end
97
+
98
+ end
@@ -6,4 +6,5 @@ require 'mash'
6
6
 
7
7
  require File.dirname(__FILE__) + '/main'
8
8
  require File.dirname(__FILE__) + '/base'
9
+ require File.dirname(__FILE__) + '/cursor'
9
10
  Dir.glob(File.dirname(__FILE__) + '/resources/*.rb').each { |f| require f }
@@ -3,7 +3,7 @@ module DataCatalog
3
3
  class ApiKey < Base
4
4
 
5
5
  def self.all(user_id, conditions={})
6
- many(http_get(uri(user_id), :query => query_hash(conditions)))
6
+ cursor(uri(user_id), query_hash(conditions))
7
7
  end
8
8
 
9
9
  def self.create(user_id, params={})
@@ -15,7 +15,7 @@ module DataCatalog
15
15
  end
16
16
 
17
17
  def self.first(user_id, conditions={})
18
- one(http_get(uri(user_id), :query => query_hash(conditions)).first)
18
+ _first(http_get(uri(user_id), :query => query_hash(conditions)))
19
19
  end
20
20
 
21
21
  def self.get(user_id, id)
@@ -3,7 +3,7 @@ module DataCatalog
3
3
  class Comment < Base
4
4
 
5
5
  def self.all(conditions={})
6
- many(http_get(uri, :query => query_hash(conditions)))
6
+ cursor(uri, query_hash(conditions))
7
7
  end
8
8
 
9
9
  def self.create(params={})
@@ -3,7 +3,7 @@ module DataCatalog
3
3
  class Document < Base
4
4
 
5
5
  def self.all(conditions={})
6
- many(http_get(uri, :query => query_hash(conditions)))
6
+ cursor(uri, query_hash(conditions))
7
7
  end
8
8
 
9
9
  def self.get(id)
@@ -3,7 +3,7 @@ module DataCatalog
3
3
  class Favorite < Base
4
4
 
5
5
  def self.all(conditions={})
6
- many(http_get(uri, :query => query_hash(conditions)))
6
+ cursor(uri, query_hash(conditions))
7
7
  end
8
8
 
9
9
  def self.create(params={})
@@ -3,7 +3,7 @@ module DataCatalog
3
3
  class Note < Base
4
4
 
5
5
  def self.all(conditions={})
6
- many(http_get(uri, :query => query_hash(conditions)))
6
+ cursor(uri, query_hash(conditions))
7
7
  end
8
8
 
9
9
  def self.get(id)
@@ -3,7 +3,7 @@ module DataCatalog
3
3
  class Organization < Base
4
4
 
5
5
  def self.all(conditions={})
6
- many(http_get(uri, :query => query_hash(conditions)))
6
+ cursor(uri, query_hash(conditions))
7
7
  end
8
8
 
9
9
  def self.create(params={})
@@ -15,7 +15,7 @@ module DataCatalog
15
15
  end
16
16
 
17
17
  def self.first(conditions={})
18
- one(http_get(uri, :query => query_hash(conditions)).first)
18
+ _first(http_get(uri, :query => query_hash(conditions)))
19
19
  end
20
20
 
21
21
  def self.get(id)
@@ -23,7 +23,7 @@ module DataCatalog
23
23
  end
24
24
 
25
25
  def self.search(term)
26
- many(http_get(uri, :query => { :search => term }))
26
+ cursor(uri, { :search => term })
27
27
  end
28
28
 
29
29
  def self.update(id, params={})
@@ -3,7 +3,7 @@ module DataCatalog
3
3
  class Rating < Base
4
4
 
5
5
  def self.all(conditions={})
6
- many(http_get(uri, :query => query_hash(conditions)))
6
+ cursor(uri, query_hash(conditions))
7
7
  end
8
8
 
9
9
  def self.create(params={})
@@ -3,7 +3,7 @@ module DataCatalog
3
3
  class Source < Base
4
4
 
5
5
  def self.all(conditions={})
6
- many(http_get(uri, :query => query_hash(conditions)))
6
+ cursor(uri, query_hash(conditions))
7
7
  end
8
8
 
9
9
  def self.create(params={})
@@ -15,7 +15,7 @@ module DataCatalog
15
15
  end
16
16
 
17
17
  def self.first(conditions={})
18
- one(http_get(uri, :query => query_hash(conditions)).first)
18
+ _first(http_get(uri, :query => query_hash(conditions)))
19
19
  end
20
20
 
21
21
  def self.get(id)
@@ -23,7 +23,7 @@ module DataCatalog
23
23
  end
24
24
 
25
25
  def self.search(term)
26
- many(http_get(uri, :query => { :search => term }))
26
+ cursor(uri, { :search => term })
27
27
  end
28
28
 
29
29
  def self.update(id, params={})
@@ -3,7 +3,7 @@ module DataCatalog
3
3
  class User < Base
4
4
 
5
5
  def self.all(conditions={})
6
- many(http_get(uri, :query => query_hash(conditions)))
6
+ cursor(uri, query_hash(conditions))
7
7
  end
8
8
 
9
9
  def self.create(params={})
@@ -15,7 +15,7 @@ module DataCatalog
15
15
  end
16
16
 
17
17
  def self.first(conditions={})
18
- one(http_get(uri, :query => query_hash(conditions)).first)
18
+ _first(http_get(uri, :query => query_hash(conditions)))
19
19
  end
20
20
 
21
21
  def self.get(id)
@@ -85,25 +85,6 @@ describe Base do
85
85
  end
86
86
  end
87
87
 
88
- describe ".many" do
89
- it "should create an object from a filled array" do
90
- array = Base.many([
91
- {
92
- :name => "Carl Malamud",
93
- :email => "no-spam-carl@media.org"
94
- },
95
- {
96
- :name => "Ellen Miller",
97
- :email => "no-spam-ellen@sunlightfoundation.com"
98
- }
99
- ])
100
- array.map do |item|
101
- item.should be_an_instance_of(Base)
102
- end
103
- array.map(&:name).should == ["Carl Malamud", "Ellen Miller"]
104
- end
105
- end
106
-
107
88
  describe ".one" do
108
89
  it "should create an object from a filled hash" do
109
90
  hash = Base.one({
@@ -6,13 +6,15 @@ describe Comment do
6
6
  before do
7
7
  setup_api
8
8
  clean_slate
9
-
10
- @user = User.create(:name => "Ted Smith",
11
- :email => "ted@email.com")
12
-
13
- @source = Source.create(:title => "Some FCC Data",
14
- :url => "http://fcc.gov/somedata.csv",
15
- :source_type => "dataset")
9
+ @user = User.create(
10
+ :name => "Ted Smith",
11
+ :email => "ted@email.com"
12
+ )
13
+ @source = Source.create(
14
+ :title => "Some FCC Data",
15
+ :url => "http://fcc.gov/somedata.csv",
16
+ :source_type => "dataset"
17
+ )
16
18
  end
17
19
 
18
20
  describe ".create" do
@@ -6,18 +6,21 @@ describe Document do
6
6
  before do
7
7
  setup_api
8
8
  clean_slate
9
-
10
- @user = User.create(:name => "Ted Smith",
11
- :email => "ted@email.com")
12
-
13
- @source = Source.create(:title => "Some FCC Data",
14
- :url => "http://fcc.gov/somedata.csv",
15
- :source_type => "dataset")
16
-
9
+ @user = User.create(
10
+ :name => "Ted Smith",
11
+ :email => "ted@email.com"
12
+ )
13
+ @source = Source.create(
14
+ :title => "Some FCC Data",
15
+ :url => "http://fcc.gov/somedata.csv",
16
+ :source_type => "dataset"
17
+ )
17
18
  DataCatalog.with_key(@user.primary_api_key) do
18
- @document = Document.create(:source_id => @source.id, :text => "This is community documentation.")
19
+ @document = Document.create(
20
+ :source_id => @source.id,
21
+ :text => "This is community documentation."
22
+ )
19
23
  end
20
-
21
24
  end
22
25
 
23
26
  describe ".create" do
@@ -49,11 +52,11 @@ describe Document do
49
52
 
50
53
  describe ".all" do
51
54
 
52
- it "should return a collection of all the source's documents" do
55
+ it "should return an enumeration of documents" do
53
56
  documents = Document.all(:source_id => @source.id)
54
-
55
- documents.should be_an_instance_of(Array)
56
- documents[0].should be_an_instance_of(Document)
57
+ documents.each do |o|
58
+ o.should be_an_instance_of(Document)
59
+ end
57
60
  end
58
61
 
59
62
  end # describe ".all"
@@ -6,22 +6,18 @@ describe Favorite do
6
6
  before do
7
7
  setup_api
8
8
  clean_slate
9
-
10
9
  @user = User.create(
11
10
  :name => "Ted Smith",
12
11
  :email => "ted@email.com"
13
12
  )
14
-
15
13
  @source = Source.create(
16
14
  :title => "Some FCC Data",
17
15
  :url => "http://fcc.gov/somedata.csv",
18
16
  :source_type => "dataset"
19
17
  )
20
-
21
18
  DataCatalog.with_key(@user.primary_api_key) do
22
19
  @favorite = Favorite.create(:source_id => @source.id)
23
20
  end
24
-
25
21
  end
26
22
 
27
23
  describe ".create" do
@@ -50,12 +46,12 @@ describe Favorite do
50
46
  end # describe ".get"
51
47
 
52
48
  describe ".all" do
53
-
54
- it "should return a collection of all the user's favorites" do
49
+
50
+ it "should return an enumeration of favorites" do
55
51
  favorites = Favorite.all(:user_id => @user.id)
56
-
57
- favorites.should be_an_instance_of(Array)
58
- favorites[0].should be_an_instance_of(Favorite)
52
+ favorites.each do |o|
53
+ o.should be_an_instance_of(Favorite)
54
+ end
59
55
  end
60
56
 
61
57
  end # describe ".all"
@@ -6,18 +6,21 @@ describe Note do
6
6
  before do
7
7
  setup_api
8
8
  clean_slate
9
-
10
- @user = User.create(:name => "Ted Smith",
11
- :email => "ted@email.com")
12
-
13
- @source = Source.create(:title => "Some FCC Data",
14
- :url => "http://fcc.gov/somedata.csv",
15
- :source_type => "dataset")
16
-
9
+ @user = User.create(
10
+ :name => "Ted Smith",
11
+ :email => "ted@email.com"
12
+ )
13
+ @source = Source.create(
14
+ :title => "Some FCC Data",
15
+ :url => "http://fcc.gov/somedata.csv",
16
+ :source_type => "dataset"
17
+ )
17
18
  DataCatalog.with_key(@user.primary_api_key) do
18
- @note = Note.create(:source_id => @source.id, :text => "This is my note.")
19
+ @note = Note.create(
20
+ :source_id => @source.id,
21
+ :text => "This is my note."
22
+ )
19
23
  end
20
-
21
24
  end
22
25
 
23
26
  describe ".create" do
@@ -48,12 +51,12 @@ describe Note do
48
51
  end # describe ".get"
49
52
 
50
53
  describe ".all" do
51
-
52
- it "should return a collection of all the user's notes" do
54
+
55
+ it "should return an enumeration of notes" do
53
56
  notes = Note.all(:user_id => @user.id)
54
-
55
- notes.should be_an_instance_of(Array)
56
- notes[0].should be_an_instance_of(Note)
57
+ notes.each do |o|
58
+ o.should be_an_instance_of(Note)
59
+ end
57
60
  end
58
61
 
59
62
  end # describe ".all"
@@ -4,7 +4,11 @@ include DataCatalog
4
4
  describe Organization do
5
5
 
6
6
  def create_3_organizations
7
- @organization_names = ["Federal Communications Commission", "Federal Election Commission", "Department of State"]
7
+ @organization_names = [
8
+ "Federal Communications Commission",
9
+ "Federal Election Commission",
10
+ "Department of State"
11
+ ]
8
12
  @organization_names.each do |name|
9
13
  Organization.create(:name => name, :org_type => "governmental")
10
14
  end
@@ -22,24 +26,34 @@ describe Organization do
22
26
  end
23
27
 
24
28
  it "should return an enumeration of Organizations" do
25
- @organizations = Organization.all
26
- @organizations.each do |o|
29
+ Organization.all.each do |o|
27
30
  o.should be_an_instance_of(Organization)
28
31
  end
29
32
  end
30
33
 
31
34
  it "should return an enumeration with organization name set" do
32
- @organizations = Organization.all
33
- @organizations.map(&:name).sort.should == @organization_names.sort
35
+ Organization.all.map(&:name).sort.should == @organization_names.sort
34
36
  end
35
37
 
36
38
  it "should return the matching organizations when options are passed in" do
37
- @organizations = Organization.all(:name => "Federal Communications Commission")
38
- @organizations.map(&:name).should == ["Federal Communications Commission"]
39
+ orgs = Organization.all(:name => "Federal Communications Commission")
40
+ orgs.map(&:name).should == ["Federal Communications Commission"]
39
41
  end
40
42
 
41
43
  end # describe ".all"
42
44
 
45
+ describe ".search" do
46
+ before do
47
+ create_3_organizations
48
+ end
49
+
50
+ it "should return correct search result" do
51
+ @organizations = Organization.search("Federal")
52
+ @organizations.size.should == 2
53
+ @organizations.first.name.should == "Federal Communications Commission"
54
+ end
55
+ end # describe organizations
56
+
43
57
  describe ".first" do
44
58
 
45
59
  before do
@@ -47,8 +61,8 @@ describe Organization do
47
61
  end
48
62
 
49
63
  it "should return the matching organization when options are passed in" do
50
- @organization = Organization.first(:name => "Federal Communications Commission")
51
- @organization.name.should == "Federal Communications Commission"
64
+ org = Organization.first(:name => "Federal Communications Commission")
65
+ org.name.should == "Federal Communications Commission"
52
66
  end
53
67
 
54
68
  end # describe ".first"
@@ -76,9 +90,9 @@ describe Organization do
76
90
  describe ".create" do
77
91
 
78
92
  it "should create a new organization when valid params are passed in" do
79
- @organization = Organization.create(:name => "Federal Communications Commission", :org_type => "governmental")
80
- @organization.should be_an_instance_of(Organization)
81
- @organization.name.should == "Federal Communications Commission"
93
+ org = Organization.create(:name => "Federal Communications Commission", :org_type => "governmental")
94
+ org.should be_an_instance_of(Organization)
95
+ org.name.should == "Federal Communications Commission"
82
96
  end
83
97
 
84
98
  it "should raise BadRequest when a bad URL is passed in" do
@@ -6,18 +6,24 @@ describe Rating do
6
6
  before do
7
7
  setup_api
8
8
  clean_slate
9
-
10
- @user = User.create(:name => "Ted Smith",
11
- :email => "ted@email.com")
12
- @user2 = User.create(:name => "Chad Johnson",
13
- :email => "chad@email.com")
14
-
15
- @source = Source.create(:title => "Some FCC Data",
16
- :url => "http://fcc.gov/somedata.csv",
17
- :source_type => "dataset")
18
-
9
+ @user = User.create(
10
+ :name => "Ted Smith",
11
+ :email => "ted@email.com"
12
+ )
13
+ @user2 = User.create(
14
+ :name => "Chad Johnson",
15
+ :email => "chad@email.com"
16
+ )
17
+ @source = Source.create(
18
+ :title => "Some FCC Data",
19
+ :url => "http://fcc.gov/somedata.csv",
20
+ :source_type => "dataset"
21
+ )
19
22
  DataCatalog.with_key(@user.primary_api_key) do
20
- @comment = Comment.create(:source_id => @source.id, :text => "This is a useful comment.")
23
+ @comment = Comment.create(
24
+ :source_id => @source.id,
25
+ :text => "This is a useful comment."
26
+ )
21
27
  end
22
28
  end
23
29
 
@@ -20,6 +20,16 @@ module SourceHelpers
20
20
  })
21
21
  end
22
22
  end
23
+
24
+ def create_30_sources
25
+ (1..30).each do |n|
26
+ Source.create({
27
+ :title => "Dataset #{n.to_s}",
28
+ :url => "http://awesome.gov/dataset#{n.to_s}.xml",
29
+ :source_type => "dataset"
30
+ })
31
+ end
32
+ end
23
33
  end
24
34
 
25
35
  describe Source do
@@ -35,17 +45,40 @@ describe Source do
35
45
  create_3_sources
36
46
  @sources = Source.all
37
47
  end
48
+
49
+ it "should return an Enumerable object" do
50
+ @sources.is_a?(Enumerable).should == true
51
+ end
38
52
 
39
53
  it "should return an enumeration of sources" do
40
54
  @sources.each do |source|
41
55
  source.should be_an_instance_of(Source)
42
56
  end
43
57
  end
44
-
58
+
45
59
  it "should return correct titles" do
46
60
  expected = ["FCC Data", "NASA Data", "DOE Data"]
47
61
  @sources.map(&:title).sort.should == expected.sort
48
62
  end
63
+
64
+
65
+ describe "with cursor" do
66
+
67
+ it "should raise an error on bad index" do
68
+ executing do
69
+ @sources.page(0)
70
+ end.should raise_error(RuntimeError)
71
+ end
72
+
73
+ it "should return 20 objects when there are more than 20" do
74
+ create_30_sources
75
+ sources = Source.all
76
+ sources.size.should == 20
77
+ sources.page(1).size.should == 20
78
+ sources.page(2).size.should == 13
79
+ end
80
+
81
+ end
49
82
  end
50
83
 
51
84
  describe ".all with conditions" do
@@ -77,7 +110,7 @@ describe Source do
77
110
  @sources.first.title.should == "FCC Data"
78
111
  end
79
112
  end
80
-
113
+
81
114
  describe ".create" do
82
115
  it "should create a new source from basic params" do
83
116
  source = create_source
@@ -7,19 +7,20 @@ end
7
7
 
8
8
  alias :executing :lambda
9
9
 
10
- def clean_slate
10
+ KLASSES = [
11
+ DataCatalog::Source,
12
+ DataCatalog::Organization
13
+ ]
11
14
 
15
+ def clean_slate
12
16
  DataCatalog::User.all.each do |u|
13
17
  DataCatalog::User.destroy(u.id) unless u.name == "Primary Admin"
14
18
  end
15
-
16
- classes = [DataCatalog::Source, DataCatalog::Organization]
17
- classes.each do |class_constant|
18
- class_constant.all.each do |instance|
19
- class_constant.destroy(instance.id)
20
- end
19
+ KLASSES.each do |klass|
20
+ to_delete = []
21
+ klass.all.each { |instance| to_delete << instance.id }
22
+ to_delete.each { |id| klass.destroy(id) }
21
23
  end
22
-
23
24
  end
24
25
 
25
26
  def mangle(string)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: datacatalog
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.8
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Luigi Montanez
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2009-12-02 00:00:00 -05:00
13
+ date: 2009-12-03 00:00:00 -05:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -89,6 +89,7 @@ files:
89
89
  - Rakefile
90
90
  - datacatalog.gemspec
91
91
  - lib/base.rb
92
+ - lib/cursor.rb
92
93
  - lib/datacatalog.rb
93
94
  - lib/main.rb
94
95
  - lib/resources/about.rb