gooddata 0.6.3 → 0.6.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.travis.yml +3 -1
- data/CHANGELOG.markdown +6 -0
- data/README.md +1 -0
- data/gooddata.gemspec +2 -1
- data/lib/gooddata.rb +4 -1
- data/lib/gooddata/bricks/base_downloader.rb +33 -19
- data/lib/gooddata/bricks/middleware/bulk_salesforce_middleware.rb +49 -25
- data/lib/gooddata/bricks/middleware/restforce_middleware.rb +36 -33
- data/lib/gooddata/cli/commands/project_cmd.rb +6 -4
- data/lib/gooddata/client.rb +1 -1
- data/lib/gooddata/commands/api.rb +1 -1
- data/lib/gooddata/commands/auth.rb +1 -1
- data/lib/gooddata/connection.rb +13 -10
- data/lib/gooddata/core/connection.rb +1 -1
- data/lib/gooddata/core/user.rb +11 -3
- data/lib/gooddata/exceptions/validation_error.rb +12 -0
- data/lib/gooddata/extensions/extensions.rb +6 -0
- data/lib/gooddata/goodzilla/goodzilla.rb +2 -2
- data/lib/gooddata/helpers/csv_helper.rb +57 -0
- data/lib/gooddata/{helpers.rb → helpers/global_helpers.rb} +0 -0
- data/lib/gooddata/helpers/helpers.rb +6 -0
- data/lib/gooddata/models/domain.rb +134 -24
- data/lib/gooddata/models/membership.rb +402 -0
- data/lib/gooddata/models/metadata.rb +64 -7
- data/lib/gooddata/models/metadata/attribute.rb +27 -12
- data/lib/gooddata/models/metadata/column.rb +1 -1
- data/lib/gooddata/models/metadata/dashboard.rb +7 -6
- data/lib/gooddata/models/metadata/display_form.rb +17 -2
- data/lib/gooddata/models/metadata/fact.rb +13 -7
- data/lib/gooddata/models/metadata/metric.rb +9 -9
- data/lib/gooddata/models/metadata/report.rb +7 -8
- data/lib/gooddata/models/metadata/report_definition.rb +10 -11
- data/lib/gooddata/models/metadata/schema.rb +1 -1
- data/lib/gooddata/models/model.rb +1 -1
- data/lib/gooddata/models/process.rb +44 -25
- data/lib/gooddata/models/profile.rb +365 -13
- data/lib/gooddata/models/project.rb +245 -35
- data/lib/gooddata/models/project_blueprint.rb +42 -18
- data/lib/gooddata/models/project_creator.rb +4 -1
- data/lib/gooddata/models/project_role.rb +7 -7
- data/lib/gooddata/models/schedule.rb +17 -1
- data/lib/gooddata/models/schema_blueprint.rb +19 -2
- data/lib/gooddata/version.rb +1 -1
- data/out.txt +0 -0
- data/spec/data/users.csv +12 -0
- data/spec/helpers/connection_helper.rb +1 -0
- data/spec/helpers/csv_helper.rb +12 -0
- data/spec/helpers/project_helper.rb +1 -1
- data/spec/integration/full_project_spec.rb +136 -3
- data/spec/spec_helper.rb +9 -0
- data/spec/unit/commands/command_user_spec.rb +1 -1
- data/spec/unit/extensions/hash_spec.rb +19 -0
- data/spec/unit/godzilla/goodzilla_spec.rb +15 -0
- data/spec/unit/helpers/csv_helper_spec.rb +18 -0
- data/spec/unit/models/domain_spec.rb +47 -4
- data/spec/unit/models/md_object_spec.rb +8 -0
- data/spec/unit/models/membership_spec.rb +128 -0
- data/spec/unit/models/metadata_spec.rb +38 -0
- data/spec/unit/models/profile_spec.rb +212 -0
- data/spec/unit/models/project_blueprint_spec.rb +35 -8
- data/spec/unit/models/project_role_spec.rb +6 -6
- data/spec/unit/models/project_spec.rb +226 -13
- data/spec/unit/models/schedule_spec.rb +58 -0
- data/tmp/.gitkeepme +0 -0
- metadata +36 -11
- data/lib/gooddata/models/account_settings.rb +0 -124
- data/lib/gooddata/models/user.rb +0 -165
- data/spec/unit/models/account_settings_spec.rb +0 -28
- data/spec/unit/models/user_spec.rb +0 -16
data/tmp/.gitkeepme
ADDED
File without changes
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gooddata
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.6.
|
4
|
+
version: 0.6.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Pavel Kolesnikov
|
@@ -11,7 +11,7 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date: 2014-
|
14
|
+
date: 2014-07-29 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: rake
|
@@ -350,19 +350,33 @@ dependencies:
|
|
350
350
|
- !ruby/object:Gem::Version
|
351
351
|
version: 1.1.0
|
352
352
|
- !ruby/object:Gem::Dependency
|
353
|
-
name:
|
353
|
+
name: salesforce_bulk_query
|
354
354
|
requirement: !ruby/object:Gem::Requirement
|
355
355
|
requirements:
|
356
356
|
- - "~>"
|
357
357
|
- !ruby/object:Gem::Version
|
358
|
-
version:
|
358
|
+
version: '0.0'
|
359
359
|
type: :runtime
|
360
360
|
prerelease: false
|
361
361
|
version_requirements: !ruby/object:Gem::Requirement
|
362
362
|
requirements:
|
363
363
|
- - "~>"
|
364
364
|
- !ruby/object:Gem::Version
|
365
|
-
version:
|
365
|
+
version: '0.0'
|
366
|
+
- !ruby/object:Gem::Dependency
|
367
|
+
name: aws-sdk
|
368
|
+
requirement: !ruby/object:Gem::Requirement
|
369
|
+
requirements:
|
370
|
+
- - "~>"
|
371
|
+
- !ruby/object:Gem::Version
|
372
|
+
version: '1.45'
|
373
|
+
type: :runtime
|
374
|
+
prerelease: false
|
375
|
+
version_requirements: !ruby/object:Gem::Requirement
|
376
|
+
requirements:
|
377
|
+
- - "~>"
|
378
|
+
- !ruby/object:Gem::Version
|
379
|
+
version: '1.45'
|
366
380
|
description: Use the GoodData::Client class to integrate GoodData into your own application
|
367
381
|
or use the CLI to work with GoodData directly from the command line.
|
368
382
|
email: pavel@gooddata.com
|
@@ -380,6 +394,7 @@ files:
|
|
380
394
|
- ".rubocop.yml"
|
381
395
|
- ".travis.yml"
|
382
396
|
- ".yardopts"
|
397
|
+
- CHANGELOG.markdown
|
383
398
|
- CLI.md
|
384
399
|
- Gemfile
|
385
400
|
- LICENSE
|
@@ -512,11 +527,14 @@ files:
|
|
512
527
|
- lib/gooddata/exceptions/exceptions.rb
|
513
528
|
- lib/gooddata/exceptions/no_project_error.rb
|
514
529
|
- lib/gooddata/exceptions/project_not_found.rb
|
530
|
+
- lib/gooddata/exceptions/validation_error.rb
|
515
531
|
- lib/gooddata/extensions/big_decimal.rb
|
532
|
+
- lib/gooddata/extensions/extensions.rb
|
516
533
|
- lib/gooddata/extract.rb
|
517
534
|
- lib/gooddata/goodzilla/goodzilla.rb
|
518
|
-
- lib/gooddata/helpers.rb
|
519
|
-
- lib/gooddata/
|
535
|
+
- lib/gooddata/helpers/csv_helper.rb
|
536
|
+
- lib/gooddata/helpers/global_helpers.rb
|
537
|
+
- lib/gooddata/helpers/helpers.rb
|
520
538
|
- lib/gooddata/models/attributes/anchor.rb
|
521
539
|
- lib/gooddata/models/attributes/attributes.rb
|
522
540
|
- lib/gooddata/models/attributes/date_attribute.rb
|
@@ -539,6 +557,7 @@ files:
|
|
539
557
|
- lib/gooddata/models/invitation.rb
|
540
558
|
- lib/gooddata/models/links.rb
|
541
559
|
- lib/gooddata/models/md_object.rb
|
560
|
+
- lib/gooddata/models/membership.rb
|
542
561
|
- lib/gooddata/models/metadata.rb
|
543
562
|
- lib/gooddata/models/metadata/attribute.rb
|
544
563
|
- lib/gooddata/models/metadata/column.rb
|
@@ -572,7 +591,6 @@ files:
|
|
572
591
|
- lib/gooddata/models/schema_blueprint.rb
|
573
592
|
- lib/gooddata/models/schema_builder.rb
|
574
593
|
- lib/gooddata/models/tab_builder.rb
|
575
|
-
- lib/gooddata/models/user.rb
|
576
594
|
- lib/gooddata/version.rb
|
577
595
|
- lib/templates/bricks/brick.rb.erb
|
578
596
|
- lib/templates/bricks/main.rb.erb
|
@@ -581,6 +599,7 @@ files:
|
|
581
599
|
- lib/templates/project/data/devs.csv
|
582
600
|
- lib/templates/project/data/repos.csv
|
583
601
|
- lib/templates/project/model/model.rb.erb
|
602
|
+
- out.txt
|
584
603
|
- spec/bricks/bricks_spec.rb
|
585
604
|
- spec/data/.gooddata
|
586
605
|
- spec/data/additional_dataset_module.json
|
@@ -588,9 +607,11 @@ files:
|
|
588
607
|
- spec/data/model_module.json
|
589
608
|
- spec/data/test-ci-data.csv
|
590
609
|
- spec/data/test_project_model_spec.json
|
610
|
+
- spec/data/users.csv
|
591
611
|
- spec/helpers/blueprint_helper.rb
|
592
612
|
- spec/helpers/cli_helper.rb
|
593
613
|
- spec/helpers/connection_helper.rb
|
614
|
+
- spec/helpers/csv_helper.rb
|
594
615
|
- spec/helpers/project_helper.rb
|
595
616
|
- spec/helpers/schema_helper.rb
|
596
617
|
- spec/integration/command_projects_spec.rb
|
@@ -630,16 +651,20 @@ files:
|
|
630
651
|
- spec/unit/core/project_spec.rb
|
631
652
|
- spec/unit/core/rest_spec.rb
|
632
653
|
- spec/unit/data/guesser_spec.rb
|
654
|
+
- spec/unit/extensions/hash_spec.rb
|
633
655
|
- spec/unit/godzilla/goodzilla_spec.rb
|
656
|
+
- spec/unit/helpers/csv_helper_spec.rb
|
634
657
|
- spec/unit/helpers_spec.rb
|
635
|
-
- spec/unit/models/account_settings_spec.rb
|
636
658
|
- spec/unit/models/anchor_spec.rb
|
637
659
|
- spec/unit/models/attribute_column_spec.rb
|
638
660
|
- spec/unit/models/domain_spec.rb
|
639
661
|
- spec/unit/models/invitation_spec.rb
|
640
662
|
- spec/unit/models/md_object_spec.rb
|
663
|
+
- spec/unit/models/membership_spec.rb
|
664
|
+
- spec/unit/models/metadata_spec.rb
|
641
665
|
- spec/unit/models/metric.rb
|
642
666
|
- spec/unit/models/model_spec.rb
|
667
|
+
- spec/unit/models/profile_spec.rb
|
643
668
|
- spec/unit/models/project_blueprint_spec.rb
|
644
669
|
- spec/unit/models/project_creator.rb
|
645
670
|
- spec/unit/models/project_role_spec.rb
|
@@ -647,8 +672,8 @@ files:
|
|
647
672
|
- spec/unit/models/schedule_spec.rb
|
648
673
|
- spec/unit/models/schema_builder_spec.rb
|
649
674
|
- spec/unit/models/tools_spec.rb
|
650
|
-
- spec/unit/models/user_spec.rb
|
651
675
|
- test/test_upload.rb
|
676
|
+
- tmp/.gitkeepme
|
652
677
|
- yard-server.sh
|
653
678
|
homepage: http://github.com/gooddata/gooddata-ruby
|
654
679
|
licenses:
|
@@ -670,7 +695,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
670
695
|
version: '0'
|
671
696
|
requirements: []
|
672
697
|
rubyforge_project:
|
673
|
-
rubygems_version: 2.
|
698
|
+
rubygems_version: 2.2.2
|
674
699
|
signing_key:
|
675
700
|
specification_version: 4
|
676
701
|
summary: A convenient Ruby wrapper around the GoodData RESTful API
|
@@ -1,124 +0,0 @@
|
|
1
|
-
# encoding: UTF-8
|
2
|
-
|
3
|
-
require_relative 'project'
|
4
|
-
|
5
|
-
module GoodData
|
6
|
-
# Account settings representation with some added sugar
|
7
|
-
class AccountSettings
|
8
|
-
attr_reader :json
|
9
|
-
|
10
|
-
# Creates new instance
|
11
|
-
#
|
12
|
-
# @return [AccountSettings] New AccountSettings instance
|
13
|
-
def initialize(json)
|
14
|
-
@json = json
|
15
|
-
end
|
16
|
-
|
17
|
-
# Gets the company name
|
18
|
-
#
|
19
|
-
# @return [String] Company name
|
20
|
-
def company
|
21
|
-
@json['accountSetting']['companyName'] || ''
|
22
|
-
end
|
23
|
-
|
24
|
-
# Gets the country
|
25
|
-
#
|
26
|
-
# @return [String] Country
|
27
|
-
def country
|
28
|
-
@json['accountSetting']['country'] || ''
|
29
|
-
end
|
30
|
-
|
31
|
-
# Gets date when created
|
32
|
-
#
|
33
|
-
# @return [DateTime] Created date
|
34
|
-
def created
|
35
|
-
DateTime.parse(@json['accountSetting']['created'])
|
36
|
-
end
|
37
|
-
|
38
|
-
# Gets the email
|
39
|
-
#
|
40
|
-
# @return [String] Email address
|
41
|
-
def email
|
42
|
-
@json['accountSetting']['email'] || ''
|
43
|
-
end
|
44
|
-
|
45
|
-
# Gets the first name
|
46
|
-
#
|
47
|
-
# @return [String] First name
|
48
|
-
def first_name
|
49
|
-
@json['accountSetting']['firstName'] || ''
|
50
|
-
end
|
51
|
-
|
52
|
-
# Gets the last name
|
53
|
-
#
|
54
|
-
# @return [String] Last name
|
55
|
-
def last_name
|
56
|
-
@json['accountSetting']['lastName'] || ''
|
57
|
-
end
|
58
|
-
|
59
|
-
# Gets the login
|
60
|
-
#
|
61
|
-
# @return [String] Login
|
62
|
-
def login
|
63
|
-
@json['accountSetting']['login'] || ''
|
64
|
-
end
|
65
|
-
|
66
|
-
# Gets the resource identifier
|
67
|
-
#
|
68
|
-
# @return [String] Resource identifier
|
69
|
-
def obj_id
|
70
|
-
uri.split('/').last
|
71
|
-
end
|
72
|
-
|
73
|
-
alias_method :account_setting_id, :obj_id
|
74
|
-
|
75
|
-
# Gets the phone
|
76
|
-
#
|
77
|
-
# @return [String] Phone
|
78
|
-
def phone
|
79
|
-
@json['accountSetting']['phone'] || ''
|
80
|
-
end
|
81
|
-
|
82
|
-
# Gets the position in company
|
83
|
-
#
|
84
|
-
# @return [String] Position in company
|
85
|
-
def position
|
86
|
-
@json['accountSetting']['position'] || ''
|
87
|
-
end
|
88
|
-
|
89
|
-
# Gets the array of projects
|
90
|
-
#
|
91
|
-
# @return [Array<GoodData::Project>] Array of project where account settings belongs to
|
92
|
-
def projects
|
93
|
-
res = []
|
94
|
-
|
95
|
-
projects = GoodData.get @json['accountSetting']['links']['projects']
|
96
|
-
projects['projects'].each do |project|
|
97
|
-
res << GoodData::Project.new(project)
|
98
|
-
end
|
99
|
-
|
100
|
-
res
|
101
|
-
end
|
102
|
-
|
103
|
-
# Gets the preferred timezone
|
104
|
-
#
|
105
|
-
# @return [String] Preferred timezone
|
106
|
-
def timezone
|
107
|
-
@json['accountSetting']['timezone'] || ''
|
108
|
-
end
|
109
|
-
|
110
|
-
# Gets the date when updated
|
111
|
-
#
|
112
|
-
# @return [DateTime] Updated date
|
113
|
-
def updated
|
114
|
-
DateTime.parse(@json['accountSetting']['updated'])
|
115
|
-
end
|
116
|
-
|
117
|
-
# Gets the resource REST URI
|
118
|
-
#
|
119
|
-
# @return [String] Resource URI
|
120
|
-
def uri
|
121
|
-
DateTime.parse(@json['accountSetting']['links']['self'])
|
122
|
-
end
|
123
|
-
end
|
124
|
-
end
|
data/lib/gooddata/models/user.rb
DELETED
@@ -1,165 +0,0 @@
|
|
1
|
-
# encoding: UTF-8
|
2
|
-
|
3
|
-
require_relative 'project'
|
4
|
-
require_relative 'project_role'
|
5
|
-
|
6
|
-
module GoodData
|
7
|
-
class User
|
8
|
-
attr_reader :json
|
9
|
-
|
10
|
-
def initialize(json)
|
11
|
-
@json = json
|
12
|
-
end
|
13
|
-
|
14
|
-
# Gets author (person who created) of this object
|
15
|
-
#
|
16
|
-
# @return [String] Author
|
17
|
-
def author
|
18
|
-
# TODO: Return object instead
|
19
|
-
@json['user']['meta']['author']
|
20
|
-
end
|
21
|
-
|
22
|
-
# Gets the contributor
|
23
|
-
#
|
24
|
-
# @return [String] Contributor
|
25
|
-
def contributor
|
26
|
-
# TODO: Return object instead
|
27
|
-
@json['user']['meta']['contributor']
|
28
|
-
end
|
29
|
-
|
30
|
-
# Gets date when created
|
31
|
-
#
|
32
|
-
# @return [DateTime] Created date
|
33
|
-
def created
|
34
|
-
Time.parse(@json['user']['meta']['created'])
|
35
|
-
end
|
36
|
-
|
37
|
-
# Gets the email
|
38
|
-
#
|
39
|
-
# @return [String] Email address
|
40
|
-
def email
|
41
|
-
@json['user']['content']['email'] || ''
|
42
|
-
end
|
43
|
-
|
44
|
-
# Gets the first name
|
45
|
-
#
|
46
|
-
# @return [String] First name
|
47
|
-
def first_name
|
48
|
-
@json['user']['content']['firstname'] || ''
|
49
|
-
end
|
50
|
-
|
51
|
-
# Gets the invitations
|
52
|
-
#
|
53
|
-
# @return [Array<GoodData::Invitation>] List of invitations
|
54
|
-
def invitations
|
55
|
-
res = []
|
56
|
-
|
57
|
-
tmp = GoodData.get @json['user']['links']['invitations']
|
58
|
-
tmp['invitations'].each do |invitation|
|
59
|
-
end
|
60
|
-
|
61
|
-
res
|
62
|
-
end
|
63
|
-
|
64
|
-
# Gets the last name
|
65
|
-
#
|
66
|
-
# @return [String] Last name
|
67
|
-
def last_name
|
68
|
-
@json['user']['content']['lastname'] || ''
|
69
|
-
end
|
70
|
-
|
71
|
-
# Gets the login
|
72
|
-
#
|
73
|
-
# @return [String] Login
|
74
|
-
def login
|
75
|
-
@json['user']['content']['login'] || ''
|
76
|
-
end
|
77
|
-
|
78
|
-
# Gets user raw object ID
|
79
|
-
#
|
80
|
-
# @return [String] Raw Object ID
|
81
|
-
def obj_id
|
82
|
-
uri.split('/').last
|
83
|
-
end
|
84
|
-
|
85
|
-
# Gets the permissions
|
86
|
-
#
|
87
|
-
# @return [Hash] Hash with permissions
|
88
|
-
def permissions
|
89
|
-
res = {}
|
90
|
-
|
91
|
-
tmp = GoodData.get @json['user']['links']['permissions']
|
92
|
-
tmp['associatedPermissions']['permissions'].each do |permission_name, permission_value|
|
93
|
-
res[permission_name] = permission_value
|
94
|
-
end
|
95
|
-
|
96
|
-
res
|
97
|
-
end
|
98
|
-
|
99
|
-
# Gets the phone number
|
100
|
-
#
|
101
|
-
# @return [String] Phone number
|
102
|
-
def phone
|
103
|
-
@json['user']['content']['phonenumber'] || ''
|
104
|
-
end
|
105
|
-
|
106
|
-
# Gets the projects of user
|
107
|
-
#
|
108
|
-
# @return [Array<GoodData::Project>] Array of projets
|
109
|
-
def projects
|
110
|
-
res = []
|
111
|
-
|
112
|
-
tmp = GoodData.get @json['user']['links']['projects']
|
113
|
-
tmp['projects'].each do |project_meta|
|
114
|
-
project_uri = project_meta['project']['links']['self']
|
115
|
-
project = GoodData.get project_uri
|
116
|
-
res << GoodData::Project.new(project)
|
117
|
-
end
|
118
|
-
|
119
|
-
res
|
120
|
-
end
|
121
|
-
|
122
|
-
# Gets the project roles of user
|
123
|
-
#
|
124
|
-
# @return [Array<GoodData::ProjectRole>] Array of project roles
|
125
|
-
def roles
|
126
|
-
res = []
|
127
|
-
|
128
|
-
tmp = GoodData.get @json['user']['links']['roles']
|
129
|
-
tmp['associatedRoles']['roles'].each do |role_uri|
|
130
|
-
role = GoodData.get role_uri
|
131
|
-
res << GoodData::ProjectRole.new(role)
|
132
|
-
end
|
133
|
-
|
134
|
-
res
|
135
|
-
end
|
136
|
-
|
137
|
-
# Gets the status
|
138
|
-
#
|
139
|
-
# @return [String] Status
|
140
|
-
def status
|
141
|
-
@json['user']['content']['status'] || ''
|
142
|
-
end
|
143
|
-
|
144
|
-
# Gets the title
|
145
|
-
#
|
146
|
-
# @return [String] User title
|
147
|
-
def title
|
148
|
-
@json['user']['meta']['title'] || ''
|
149
|
-
end
|
150
|
-
|
151
|
-
# Gets the date when updated
|
152
|
-
#
|
153
|
-
# @return [DateTime] Date of last update
|
154
|
-
def updated
|
155
|
-
DateTime.parse(@json['user']['meta']['updated'])
|
156
|
-
end
|
157
|
-
|
158
|
-
# Gets the object URI
|
159
|
-
#
|
160
|
-
# @return [String] Object URI
|
161
|
-
def uri
|
162
|
-
@json['user']['links']['self']
|
163
|
-
end
|
164
|
-
end
|
165
|
-
end
|
@@ -1,28 +0,0 @@
|
|
1
|
-
# encoding: UTF-8
|
2
|
-
|
3
|
-
|
4
|
-
require 'gooddata/models/account_settings'
|
5
|
-
require 'gooddata/models/domain'
|
6
|
-
require 'gooddata/models/project'
|
7
|
-
|
8
|
-
describe GoodData::AccountSettings do
|
9
|
-
before(:all) do
|
10
|
-
ConnectionHelper.create_default_connection
|
11
|
-
@user = GoodData::Domain.find_user_by_login(ConnectionHelper::DEFAULT_DOMAIN, ConnectionHelper::DEFAULT_USERNAME)
|
12
|
-
end
|
13
|
-
|
14
|
-
after(:all) do
|
15
|
-
GoodData.disconnect
|
16
|
-
end
|
17
|
-
|
18
|
-
describe '#projects' do
|
19
|
-
it 'Returns user projects as array of GoodData::Project' do
|
20
|
-
projects = @user.projects
|
21
|
-
expect(projects).to be_an_instance_of(Array)
|
22
|
-
|
23
|
-
projects.each do |project|
|
24
|
-
expect(project).to be_an_instance_of(GoodData::Project)
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|