sakai-info 0.4.1 → 0.4.2

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG.md CHANGED
@@ -1,5 +1,14 @@
1
1
  # sakai-info Change History #
2
2
 
3
+ ### 0.4.2 ###
4
+
5
+ *Released 2012-05-04*
6
+
7
+ * Fixed issue in assignment-submission for formatting entity dates
8
+ * Added status property to quizzes along with interpretation of the value
9
+ * Added support for provided users to User object (submitted by Will Humphries)
10
+ * Allowed .sakai-info file to point to another location for configuration
11
+
3
12
  ### 0.4.1 ###
4
13
 
5
14
  *Released 2012-04-22*
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # sakai-info #
2
2
 
3
- last updated: 2012-04-22
3
+ last updated: 2012-05-04
4
4
  author: David Adams (daveadams@gmail.com)
5
5
  github url: https://github.com/daveadams/sakai-info
6
6
 
@@ -24,7 +24,7 @@ Use `rake` to test and build the gem:
24
24
  $ rake gem:build
25
25
 
26
26
  The resulting gem will be saved to the working directory as
27
- `sakai-info-0.4.1.gem`.
27
+ `sakai-info-0.4.2.gem`.
28
28
 
29
29
  Cleanup built gems using:
30
30
 
@@ -53,6 +53,9 @@ Oracle support requires the `ruby-oci8` gem, and MySQL support requires the
53
53
  MySQL support is now working. Your MySQL server must have the setting
54
54
  `lower_case_table_names=1` or be running on a case-insensitive filesystem.
55
55
 
56
+ I recommend you use the `mysql2` gem, which is faster than the `mysql` or
57
+ `ruby-mysql` gems and is also much better tested.
58
+
56
59
  ## Configuration ##
57
60
 
58
61
  To run, *sakai-info* needs to be able to connect to your Sakai database server.
@@ -63,7 +66,23 @@ In this release, *sakai-info* expects a to find the config in a file located at
63
66
  more Sakai database connection nicknames and connection strings, for example:
64
67
 
65
68
  prod: oracle://sakai:password@SAKAIPROD
66
- test: mysql://test:password@mysql.host:3307/db_name
69
+ test: mysql2://test:password@mysql-host/db_name
70
+ local: mysql2://sakai:ironchef@localhost/db_name
71
+
72
+ For connections requiring options not well-supported by URI strings,
73
+ i.e. passwords with special characters, or non-default schemas,
74
+ all options can be specified one their own line, eg:
75
+
76
+ lmssbx:
77
+ adapter: oracle
78
+ user: user
79
+ password: pas^w#?d
80
+ host: db_name
81
+ after_connect: ALTER SESSION SET CURRENT_SCHEMA=sakai
82
+
83
+ Some connections may require a query be run immediately after connecting, i.e.
84
+ to select a default schema. Sequel supports this through the after_connect
85
+ option. To provide a query for after_connect, include it as shown above.
67
86
 
68
87
  The first connection in the list is the default connection. Other connections
69
88
  may be specified using the corresponding YAML key, which functions as a
@@ -71,6 +90,12 @@ nickname for the connection.
71
90
 
72
91
  [More information on how to specify a Sequel connection string.](http://sequel.rubyforge.org/rdoc/files/doc/opening_databases_rdoc.html)
73
92
 
93
+ As an alternative, may specify an alternate file name by putting an `@` sign
94
+ followed by the filename to load the config from on the first line of
95
+ the config file specified, eg:
96
+
97
+ @/etc/sakai-info/shared.conf
98
+
74
99
  ## Command Line Usage ##
75
100
 
76
101
  After installing the gem, the `sin` program should be found in your PATH. For
@@ -105,3 +130,9 @@ See ROADMAP.md
105
130
  This work is dedicated to the public domain. No rights are reserved. See
106
131
  LICENSE for more information.
107
132
 
133
+ ## Contributors ##
134
+
135
+ The following individuals have contributed code to this project:
136
+
137
+ * David Adams <daveadams@gmail.com>
138
+ * Will Humphries <will.d.humphries@gmail.com>
data/ROADMAP.md CHANGED
@@ -1,16 +1,16 @@
1
1
  # sakai-info Roadmap #
2
2
 
3
- *Last updated 2012-04-22*
3
+ *Last updated 2012-05-04*
4
4
 
5
- ### 0.4.2 ###
5
+ ### 0.4.3 ###
6
6
 
7
7
  * CLI access to announcements
8
8
 
9
- ### 0.4.3 ###
9
+ ### 0.4.4 ###
10
10
 
11
11
  * CLI access to gradebook
12
12
 
13
- ### 0.4.4 ###
13
+ ### 0.4.5 ###
14
14
 
15
15
  * CLI access to authz (realms, roles, functions)
16
16
 
@@ -2,7 +2,7 @@
2
2
  # SakaiInfo::Assignment library
3
3
  #
4
4
  # Created 2012-02-17 daveadams@gmail.com
5
- # Last updated 2012-02-29 daveadams@gmail.com
5
+ # Last updated 2012-05-02 daveadams@gmail.com
6
6
  #
7
7
  # https://github.com/daveadams/sakai-info
8
8
  #
@@ -137,7 +137,7 @@ module SakaiInfo
137
137
  end
138
138
 
139
139
  def submitted_at
140
- @submitted_at ||= format_entity_date(@attributes["datesubmitted"])
140
+ @submitted_at ||= Util.format_entity_date(@attributes["datesubmitted"])
141
141
  end
142
142
 
143
143
  def self.query_by_assignment_id(assignment_id)
@@ -2,7 +2,7 @@
2
2
  # SakaiInfo::Database library
3
3
  #
4
4
  # Created 2012-02-19 daveadams@gmail.com
5
- # Last updated 2012-02-25 daveadams@gmail.com
5
+ # Last updated 2012-05-04 daveadams@gmail.com
6
6
  #
7
7
  # https://github.com/daveadams/sakai-info
8
8
  #
@@ -17,10 +17,31 @@
17
17
  # test: oracle://user:pass@sid/schema_name
18
18
  # dev: mysql://user:pass@hostname/db_name
19
19
  #
20
+ # For connections requiring options not well-supported by URI strings,
21
+ # i.e. passwords with special characters, or non-default schemas,
22
+ # all options can be specified one their own line, eg:
23
+ #
24
+ # lmssbx:
25
+ # adapter: oracle
26
+ # user: user
27
+ # password: pas^w#?d
28
+ # host: db_name
29
+ # after_connect: ALTER SESSION SET CURRENT_SCHEMA=sakai
30
+ #
31
+ # Some connections may require a query be run immediately after connecting, i.e.
32
+ # to select a default schema. Sequel supports this through the after_connect
33
+ # option. To provide a query for after_connect, include it as shown above.
34
+ #
20
35
  # The default connection is the first one in the file.
21
36
  # For more on Sequel connection strings, see:
22
37
  # http://sequel.rubyforge.org/rdoc/files/doc/opening_databases_rdoc.html
23
38
  #
39
+ # As an alternative, may specify an alternate file name by putting an @ sign
40
+ # followed by the filename to load the config from on the first line of
41
+ # the config file specified, eg:
42
+ #
43
+ # @/etc/sakai-info/shared.conf
44
+ #
24
45
 
25
46
  # using the oci8 driver will complain if NLS_LANG is not set in the environment
26
47
  ENV["NLS_LANG"] ||= "AMERICAN_AMERICA.UTF8"
@@ -40,8 +61,35 @@ module SakaiInfo
40
61
  @@config = config
41
62
  elsif config.is_a? String and File.exist?(config)
42
63
  # try to parse as a filename first
64
+ # first check to see if it points to a different config file
65
+ File.open(config) do |f|
66
+ first_line = f.readlines[0].chomp
67
+ if first_line =~ /^@(.+)$/
68
+ # use the rest of the line as an alternate filename
69
+ config = $1
70
+ end
71
+ end
43
72
  if File.exist?(config)
44
73
  @@config = YAML::load_file(config)
74
+ # loop through each connection, symbolicize keys in options hashes
75
+ @@config.each do |name,connect_info|
76
+ if connect_info.is_a?(Hash)
77
+ conn = {}
78
+ connect_info.each do |option,value|
79
+ osym=option.to_sym
80
+ # If a query is needed after connection, store it in a procedure
81
+ # See: http://sequel.rubyforge.org/rdoc/files/doc/release_notes/3_11_0_txt.html
82
+ if option=="after_connect"
83
+ conn[osym]=proc{|c| c.exec(value)}
84
+ else
85
+ conn[osym]=value
86
+ end
87
+ end
88
+ @@config[name]=conn
89
+ end
90
+ end
91
+ else
92
+ raise "No such file '#{config}'"
45
93
  end
46
94
  else
47
95
  # otherwise try to parse it generically
@@ -105,8 +153,8 @@ module SakaiInfo
105
153
  end
106
154
 
107
155
  class Database
108
- def initialize(connection_string, logger = nil)
109
- @connection_string = connection_string.to_s
156
+ def initialize(connect_info, logger = nil)
157
+ @connect_info=connect_info
110
158
  @logger = logger
111
159
  end
112
160
 
@@ -116,7 +164,7 @@ module SakaiInfo
116
164
  end
117
165
 
118
166
  begin
119
- @connection = Sequel.connect(@connection_string)
167
+ @connection = Sequel.connect(@connect_info)
120
168
  rescue => e
121
169
  @connection = nil
122
170
  raise ConnectionFailureException.new("Could not connect: #{e}")
@@ -2,7 +2,7 @@
2
2
  # SakaiInfo::Quiz library
3
3
  #
4
4
  # Created 2012-02-17 daveadams@gmail.com
5
- # Last updated 2012-02-28 daveadams@gmail.com
5
+ # Last updated 2012-05-03 daveadams@gmail.com
6
6
  #
7
7
  # https://github.com/daveadams/sakai-info
8
8
  #
@@ -93,6 +93,21 @@ module SakaiInfo
93
93
  nil
94
94
  end
95
95
 
96
+ # possible statuses
97
+ INACTIVE = 0
98
+ ACTIVE = 1
99
+ DELETED = 2 # aka 'DEAD' in the Scholar source
100
+ RETRACTED_FOR_EDITING = 3
101
+ def status
102
+ case @dbrow[:status].to_i
103
+ when INACTIVE then "inactive"
104
+ when ACTIVE then "active"
105
+ when DELETED then "deleted"
106
+ when RETRACTED_FOR_EDITING then "retracted for editing"
107
+ else "unknown status '#{@dbrow[:status].to_i}'"
108
+ end
109
+ end
110
+
96
111
  def section_count
97
112
  @section_count ||= QuizSection.count_by_quiz_id(@id)
98
113
  end
@@ -106,6 +121,7 @@ module SakaiInfo
106
121
  "id" => self.id,
107
122
  "title" => self.title,
108
123
  "site" => nil,
124
+ "status" => self.status,
109
125
  "type" => self.quiz_type,
110
126
  "section_count" => self.section_count,
111
127
  "attempt_count" => nil
@@ -126,6 +142,7 @@ module SakaiInfo
126
142
  "id" => self.id,
127
143
  "title" => self.title,
128
144
  "site_id" => nil,
145
+ "status" => self.status,
129
146
  "type" => self.quiz_type
130
147
  }
131
148
  if not self.site.nil?
@@ -137,7 +154,8 @@ module SakaiInfo
137
154
  def site_summary_serialization
138
155
  {
139
156
  "id" => self.id,
140
- "title" => self.title
157
+ "title" => self.title,
158
+ "status" => self.status,
141
159
  }
142
160
  end
143
161
 
@@ -30,9 +30,12 @@ module SakaiInfo
30
30
 
31
31
  row = DB.connect[:sakai_user].where(:user_id => user_id).first
32
32
  if row.nil?
33
- raise ObjectNotFoundException.new(User, id)
33
+ #Has sakai_user_id_map record, but not sakai_user record. Provided account!
34
+ #raise ObjectNotFoundException.new(User, id)
35
+ @@cache[eid] = @@cache[user_id] = User.new(user_id,'Provided')
36
+ else
37
+ @@cache[eid] = @@cache[user_id] = User.new(row)
34
38
  end
35
- @@cache[eid] = @@cache[user_id] = User.new(row)
36
39
  end
37
40
  @@cache[id]
38
41
  end
@@ -59,14 +62,24 @@ module SakaiInfo
59
62
  end
60
63
  end
61
64
 
62
- def initialize(dbrow)
63
- @dbrow = dbrow
64
-
65
- @id = dbrow[:user_id]
66
- @eid = User.get_eid(@id)
67
- @email = dbrow[:email]
68
- @name = ((dbrow[:first_name] || "") + " " + (dbrow[:last_name] || "")).strip
69
- @type = dbrow[:type]
65
+ def initialize(*args)
66
+ case args.size
67
+ when 1
68
+ dbrow = args[0]
69
+ @dbrow = dbrow
70
+ @id = dbrow[:user_id]
71
+ @eid = User.get_eid(@id)
72
+ @email = dbrow[:email]
73
+ @name = ((dbrow[:first_name] || "") + " " + (dbrow[:last_name] || "")).strip
74
+ @type = dbrow[:type]
75
+ when 2
76
+ user_id, placeholder_string = args
77
+ @id = user_id
78
+ @eid=User.get_eid(@id)
79
+ @email = @name = @type = placeholder_string
80
+ else
81
+ raise ArgumentError, "This method takes 1-2 arguments"
82
+ end
70
83
  end
71
84
 
72
85
  def properties
@@ -1,3 +1,3 @@
1
1
  module SakaiInfo
2
- VERSION = "0.4.1"
2
+ VERSION = "0.4.2"
3
3
  end
metadata CHANGED
@@ -1,60 +1,56 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: sakai-info
3
- version: !ruby/object:Gem::Version
4
- hash: 13
5
- prerelease: false
6
- segments:
7
- - 0
8
- - 4
9
- - 1
10
- version: 0.4.1
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.4.2
5
+ prerelease:
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - David Adams
14
9
  autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
-
18
- date: 2012-04-22 00:00:00 -05:00
19
- default_executable:
20
- dependencies:
21
- - !ruby/object:Gem::Dependency
12
+ date: 2012-05-04 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
22
15
  name: sequel
23
- prerelease: false
24
- requirement: &id001 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
25
17
  none: false
26
- requirements:
27
- - - ">="
28
- - !ruby/object:Gem::Version
29
- hash: 3
30
- segments:
31
- - 0
32
- version: "0"
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
33
22
  type: :runtime
34
- version_requirements: *id001
35
- - !ruby/object:Gem::Dependency
36
- name: sqlite3
37
23
  prerelease: false
38
- requirement: &id002 !ruby/object:Gem::Requirement
24
+ version_requirements: !ruby/object:Gem::Requirement
39
25
  none: false
40
- requirements:
41
- - - ">="
42
- - !ruby/object:Gem::Version
43
- hash: 3
44
- segments:
45
- - 0
46
- version: "0"
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: sqlite3
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
47
38
  type: :development
48
- version_requirements: *id002
49
- description: A command line tool and a suite of libraries for representing the objects and relationships defined by a Sakai CLE database.
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ description: A command line tool and a suite of libraries for representing the objects
47
+ and relationships defined by a Sakai CLE database.
50
48
  email: daveadams@gmail.com
51
- executables:
49
+ executables:
52
50
  - sin
53
51
  extensions: []
54
-
55
52
  extra_rdoc_files: []
56
-
57
- files:
53
+ files:
58
54
  - lib/sakai-info.rb
59
55
  - lib/sakai-info/group.rb
60
56
  - lib/sakai-info/tool.rb
@@ -83,39 +79,29 @@ files:
83
79
  - LICENSE
84
80
  - CHANGELOG.md
85
81
  - ROADMAP.md
86
- has_rdoc: true
87
82
  homepage: https://github.com/daveadams/sakai-info
88
- licenses:
83
+ licenses:
89
84
  - Public Domain
90
85
  post_install_message:
91
86
  rdoc_options: []
92
-
93
- require_paths:
87
+ require_paths:
94
88
  - lib
95
- required_ruby_version: !ruby/object:Gem::Requirement
89
+ required_ruby_version: !ruby/object:Gem::Requirement
96
90
  none: false
97
- requirements:
98
- - - ">="
99
- - !ruby/object:Gem::Version
100
- hash: 3
101
- segments:
102
- - 0
103
- version: "0"
104
- required_rubygems_version: !ruby/object:Gem::Requirement
91
+ requirements:
92
+ - - ! '>='
93
+ - !ruby/object:Gem::Version
94
+ version: '0'
95
+ required_rubygems_version: !ruby/object:Gem::Requirement
105
96
  none: false
106
- requirements:
107
- - - ">="
108
- - !ruby/object:Gem::Version
109
- hash: 3
110
- segments:
111
- - 0
112
- version: "0"
97
+ requirements:
98
+ - - ! '>='
99
+ - !ruby/object:Gem::Version
100
+ version: '0'
113
101
  requirements: []
114
-
115
102
  rubyforge_project:
116
- rubygems_version: 1.3.7
103
+ rubygems_version: 1.8.23
117
104
  signing_key:
118
105
  specification_version: 3
119
106
  summary: Tools and library for exploring a Sakai database
120
107
  test_files: []
121
-