enju_message 0.0.6 → 0.0.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (231) hide show
  1. data/config/locales/translation_en.yml +51 -0
  2. data/config/locales/translation_ja.yml +51 -0
  3. data/lib/enju_message/version.rb +1 -1
  4. data/spec/controllers/message_requests_controller_spec.rb +275 -0
  5. data/spec/controllers/message_templates_controller_spec.rb +443 -0
  6. data/spec/controllers/messages_controller_spec.rb +439 -0
  7. data/{test → spec}/dummy/Rakefile +0 -0
  8. data/{test → spec}/dummy/app/assets/javascripts/application.js +0 -0
  9. data/{test → spec}/dummy/app/assets/stylesheets/application.css +0 -0
  10. data/spec/dummy/app/controllers/application_controller.rb +45 -0
  11. data/{test → spec}/dummy/app/helpers/application_helper.rb +0 -0
  12. data/spec/dummy/app/mailers/notifier.rb +28 -0
  13. data/spec/dummy/app/models/ability.rb +30 -0
  14. data/spec/dummy/app/models/library_group.rb +86 -0
  15. data/spec/dummy/app/models/patron.rb +167 -0
  16. data/spec/dummy/app/models/patron_type.rb +19 -0
  17. data/spec/dummy/app/models/role.rb +8 -0
  18. data/spec/dummy/app/models/user.rb +53 -0
  19. data/spec/dummy/app/models/user_group.rb +2 -0
  20. data/spec/dummy/app/models/user_has_role.rb +4 -0
  21. data/{test → spec}/dummy/app/views/layouts/application.html.erb +0 -0
  22. data/spec/dummy/app/views/page/403.html.erb +9 -0
  23. data/spec/dummy/app/views/page/403.mobile.erb +5 -0
  24. data/spec/dummy/app/views/page/403.xml.erb +4 -0
  25. data/spec/dummy/app/views/page/404.html.erb +9 -0
  26. data/spec/dummy/app/views/page/404.mobile.erb +5 -0
  27. data/spec/dummy/app/views/page/404.xml.erb +4 -0
  28. data/{test → spec}/dummy/config/application.rb +1 -0
  29. data/{test → spec}/dummy/config/boot.rb +0 -0
  30. data/{test → spec}/dummy/config/database.yml +0 -0
  31. data/{test → spec}/dummy/config/environment.rb +0 -0
  32. data/{test → spec}/dummy/config/environments/development.rb +0 -0
  33. data/{test → spec}/dummy/config/environments/production.rb +0 -0
  34. data/{test → spec}/dummy/config/environments/test.rb +0 -0
  35. data/{test → spec}/dummy/config/initializers/backtrace_silencers.rb +0 -0
  36. data/spec/dummy/config/initializers/devise.rb +209 -0
  37. data/{test → spec}/dummy/config/initializers/inflections.rb +0 -0
  38. data/{test → spec}/dummy/config/initializers/mime_types.rb +1 -0
  39. data/{test → spec}/dummy/config/initializers/secret_token.rb +0 -0
  40. data/{test → spec}/dummy/config/initializers/session_store.rb +0 -0
  41. data/{test → spec}/dummy/config/initializers/wrap_parameters.rb +0 -0
  42. data/{test → spec}/dummy/config/locales/en.yml +0 -0
  43. data/{test → spec}/dummy/config/routes.rb +2 -0
  44. data/{test → spec}/dummy/config.ru +0 -0
  45. data/{test/dummy/public/favicon.ico → spec/dummy/db/development.sqlite3} +0 -0
  46. data/spec/dummy/db/migrate/001_create_patrons.rb +62 -0
  47. data/spec/dummy/db/migrate/080_create_library_groups.rb +25 -0
  48. data/spec/dummy/db/migrate/20080905191442_create_patron_types.rb +16 -0
  49. data/spec/dummy/db/migrate/20100211105551_add_admin_networks_to_library_group.rb +9 -0
  50. data/spec/dummy/db/migrate/20100222124420_add_allow_bookmark_external_url_to_library_group.rb +9 -0
  51. data/spec/dummy/db/migrate/20100527113752_create_delayed_jobs.rb +21 -0
  52. data/spec/dummy/db/migrate/20110115022329_add_position_to_library_group.rb +9 -0
  53. data/spec/dummy/db/migrate/20110222073537_add_url_to_library_group.rb +9 -0
  54. data/spec/dummy/db/migrate/20111020063828_remove_dsbl_from_library_group.rb +11 -0
  55. data/spec/dummy/db/migrate/20111201121636_create_languages.rb +16 -0
  56. data/spec/dummy/db/migrate/20111201121844_create_roles.rb +12 -0
  57. data/spec/dummy/db/migrate/20111201155456_create_users.rb +14 -0
  58. data/spec/dummy/db/migrate/20111201155513_add_devise_to_users.rb +31 -0
  59. data/spec/dummy/db/migrate/20111201163342_create_user_groups.rb +12 -0
  60. data/spec/dummy/db/migrate/20111201163718_create_user_has_roles.rb +10 -0
  61. data/spec/dummy/db/schema.rb +225 -0
  62. data/spec/dummy/db/test.sqlite3 +0 -0
  63. data/spec/dummy/lib/enju_leaf/localized_name.rb +13 -0
  64. data/spec/dummy/lib/enju_leaf/master_model.rb +41 -0
  65. data/spec/dummy/lib/enju_leaf/url_validator.rb +10 -0
  66. data/spec/dummy/lib/enju_leaf.rb +4 -0
  67. data/spec/dummy/log/development.log +106 -0
  68. data/spec/dummy/log/sunspot-solr-test.log +232 -0
  69. data/spec/dummy/log/test.log +145040 -0
  70. data/{test → spec}/dummy/public/404.html +0 -0
  71. data/{test → spec}/dummy/public/422.html +0 -0
  72. data/{test → spec}/dummy/public/500.html +0 -0
  73. data/spec/dummy/public/favicon.ico +0 -0
  74. data/{test → spec}/dummy/script/rails +0 -0
  75. data/spec/dummy/solr/conf/admin-extra.html +31 -0
  76. data/spec/dummy/solr/conf/elevate.xml +36 -0
  77. data/spec/dummy/solr/conf/mapping-ISOLatin1Accent.txt +246 -0
  78. data/spec/dummy/solr/conf/protwords.txt +21 -0
  79. data/spec/dummy/solr/conf/schema.xml +238 -0
  80. data/spec/dummy/solr/conf/scripts.conf +24 -0
  81. data/spec/dummy/solr/conf/solrconfig.xml +934 -0
  82. data/spec/dummy/solr/conf/spellings.txt +2 -0
  83. data/spec/dummy/solr/conf/stopwords.txt +58 -0
  84. data/spec/dummy/solr/conf/synonyms.txt +31 -0
  85. data/spec/dummy/solr/data/test/index/segments.gen +0 -0
  86. data/spec/dummy/solr/data/test/index/segments_1 +0 -0
  87. data/spec/dummy/solr/data/test/spellchecker/segments.gen +0 -0
  88. data/spec/dummy/solr/data/test/spellchecker/segments_1 +0 -0
  89. data/spec/factories/message.rb +8 -0
  90. data/spec/factories/message_request.rb +7 -0
  91. data/spec/factories/message_template.rb +7 -0
  92. data/spec/factories/user.rb +34 -0
  93. data/spec/fixtures/library_groups.yml +34 -0
  94. data/spec/fixtures/message_requests.yml +30 -0
  95. data/spec/fixtures/message_templates.yml +65 -0
  96. data/spec/fixtures/messages.yml +62 -0
  97. data/spec/fixtures/patrons.yml +338 -0
  98. data/spec/fixtures/roles.yml +21 -0
  99. data/spec/fixtures/user_groups.yml +25 -0
  100. data/spec/fixtures/user_has_roles.yml +41 -0
  101. data/spec/fixtures/users.yml +69 -0
  102. data/spec/models/message_request_spec.rb +24 -0
  103. data/spec/models/message_spec.rb +59 -0
  104. data/spec/models/message_template_spec.rb +24 -0
  105. data/spec/spec_helper.rb +46 -0
  106. data/spec/support/controller_macros.rb +48 -0
  107. data/spec/support/devise.rb +4 -0
  108. metadata +273 -220
  109. data/app/views/baskets/edit.html.erb +0 -30
  110. data/app/views/baskets/index.html.erb +0 -31
  111. data/app/views/baskets/new.html.erb +0 -29
  112. data/app/views/baskets/show.html.erb +0 -23
  113. data/app/views/carrier_type_has_checkout_types/_form.html.erb +0 -19
  114. data/app/views/carrier_type_has_checkout_types/edit.html.erb +0 -13
  115. data/app/views/carrier_type_has_checkout_types/index.html.erb +0 -33
  116. data/app/views/carrier_type_has_checkout_types/new.html.erb +0 -12
  117. data/app/views/carrier_type_has_checkout_types/show.html.erb +0 -29
  118. data/app/views/checked_items/_checkouts.html.erb +0 -20
  119. data/app/views/checked_items/_list.html.erb +0 -39
  120. data/app/views/checked_items/edit.html.erb +0 -21
  121. data/app/views/checked_items/index.html.erb +0 -32
  122. data/app/views/checked_items/index.js.erb +0 -1
  123. data/app/views/checked_items/new.html.erb +0 -20
  124. data/app/views/checked_items/show.html.erb +0 -24
  125. data/app/views/checkins/_form.html.erb +0 -24
  126. data/app/views/checkins/_list.html.erb +0 -51
  127. data/app/views/checkins/edit.html.erb +0 -26
  128. data/app/views/checkins/index.html.erb +0 -16
  129. data/app/views/checkins/index.js.erb +0 -1
  130. data/app/views/checkins/new.html.erb +0 -14
  131. data/app/views/checkins/show.html.erb +0 -24
  132. data/app/views/checkout_stat_has_manifestations/_form.html.erb +0 -15
  133. data/app/views/checkout_stat_has_manifestations/edit.html.erb +0 -13
  134. data/app/views/checkout_stat_has_manifestations/index.html.erb +0 -33
  135. data/app/views/checkout_stat_has_manifestations/new.html.erb +0 -12
  136. data/app/views/checkout_stat_has_manifestations/show.html.erb +0 -28
  137. data/app/views/checkout_stat_has_users/_form.html.erb +0 -15
  138. data/app/views/checkout_stat_has_users/edit.html.erb +0 -13
  139. data/app/views/checkout_stat_has_users/index.html.erb +0 -33
  140. data/app/views/checkout_stat_has_users/new.html.erb +0 -12
  141. data/app/views/checkout_stat_has_users/show.html.erb +0 -28
  142. data/app/views/checkout_types/_form.html.erb +0 -19
  143. data/app/views/checkout_types/edit.html.erb +0 -13
  144. data/app/views/checkout_types/index.html.erb +0 -50
  145. data/app/views/checkout_types/new.html.erb +0 -12
  146. data/app/views/checkout_types/show.html.erb +0 -38
  147. data/app/views/checkouts/_form.html.erb +0 -28
  148. data/app/views/checkouts/_index.html.erb +0 -23
  149. data/app/views/checkouts/_index_overdue.html.erb +0 -33
  150. data/app/views/checkouts/_index_user.html.erb +0 -44
  151. data/app/views/checkouts/_list.html.erb +0 -45
  152. data/app/views/checkouts/edit.html.erb +0 -51
  153. data/app/views/checkouts/index.atom.builder +0 -14
  154. data/app/views/checkouts/index.csv.erb +0 -4
  155. data/app/views/checkouts/index.html.erb +0 -11
  156. data/app/views/checkouts/index.ics.erb +0 -13
  157. data/app/views/checkouts/index.rss.builder +0 -38
  158. data/app/views/checkouts/new.html.erb +0 -20
  159. data/app/views/checkouts/show.html.erb +0 -35
  160. data/app/views/circulation_statuses/_form.html.erb +0 -19
  161. data/app/views/circulation_statuses/edit.html.erb +0 -13
  162. data/app/views/circulation_statuses/index.html.erb +0 -43
  163. data/app/views/circulation_statuses/new.html.erb +0 -12
  164. data/app/views/circulation_statuses/show.html.erb +0 -29
  165. data/app/views/item_has_use_restrictions/edit.html.erb +0 -27
  166. data/app/views/item_has_use_restrictions/index.html.erb +0 -32
  167. data/app/views/item_has_use_restrictions/new.html.erb +0 -25
  168. data/app/views/item_has_use_restrictions/show.html.erb +0 -29
  169. data/app/views/lending_policies/_form.html.erb +0 -41
  170. data/app/views/lending_policies/edit.html.erb +0 -13
  171. data/app/views/lending_policies/index.html.erb +0 -42
  172. data/app/views/lending_policies/new.html.erb +0 -12
  173. data/app/views/lending_policies/show.html.erb +0 -50
  174. data/app/views/manifestation_checkout_stats/_form.html.erb +0 -19
  175. data/app/views/manifestation_checkout_stats/edit.html.erb +0 -13
  176. data/app/views/manifestation_checkout_stats/index.html.erb +0 -35
  177. data/app/views/manifestation_checkout_stats/new.html.erb +0 -12
  178. data/app/views/manifestation_checkout_stats/show.csv.erb +0 -4
  179. data/app/views/manifestation_checkout_stats/show.html.erb +0 -55
  180. data/app/views/manifestation_reserve_stats/_form.html.erb +0 -19
  181. data/app/views/manifestation_reserve_stats/edit.html.erb +0 -13
  182. data/app/views/manifestation_reserve_stats/index.html.erb +0 -35
  183. data/app/views/manifestation_reserve_stats/new.html.erb +0 -12
  184. data/app/views/manifestation_reserve_stats/show.csv.erb +0 -4
  185. data/app/views/manifestation_reserve_stats/show.html.erb +0 -55
  186. data/app/views/reserve_stat_has_manifestations/_form.html.erb +0 -15
  187. data/app/views/reserve_stat_has_manifestations/edit.html.erb +0 -13
  188. data/app/views/reserve_stat_has_manifestations/index.html.erb +0 -33
  189. data/app/views/reserve_stat_has_manifestations/new.html.erb +0 -12
  190. data/app/views/reserve_stat_has_manifestations/show.html.erb +0 -28
  191. data/app/views/reserve_stat_has_users/_form.html.erb +0 -15
  192. data/app/views/reserve_stat_has_users/edit.html.erb +0 -13
  193. data/app/views/reserve_stat_has_users/index.html.erb +0 -33
  194. data/app/views/reserve_stat_has_users/new.html.erb +0 -12
  195. data/app/views/reserve_stat_has_users/show.html.erb +0 -28
  196. data/app/views/reserves/_form.html.erb +0 -49
  197. data/app/views/reserves/_new.html.erb +0 -44
  198. data/app/views/reserves/_new_user.html.erb +0 -50
  199. data/app/views/reserves/_title.html.erb +0 -19
  200. data/app/views/reserves/edit.html.erb +0 -42
  201. data/app/views/reserves/index.atom.builder +0 -14
  202. data/app/views/reserves/index.csv.erb +0 -4
  203. data/app/views/reserves/index.html.erb +0 -75
  204. data/app/views/reserves/index.rss.builder +0 -41
  205. data/app/views/reserves/new.html.erb +0 -5
  206. data/app/views/reserves/show.html.erb +0 -61
  207. data/app/views/use_restrictions/_form.html.erb +0 -19
  208. data/app/views/use_restrictions/edit.html.erb +0 -13
  209. data/app/views/use_restrictions/index.html.erb +0 -43
  210. data/app/views/use_restrictions/new.html.erb +0 -12
  211. data/app/views/use_restrictions/show.html.erb +0 -29
  212. data/app/views/user_checkout_stats/_form.html.erb +0 -19
  213. data/app/views/user_checkout_stats/edit.html.erb +0 -13
  214. data/app/views/user_checkout_stats/index.html.erb +0 -35
  215. data/app/views/user_checkout_stats/new.html.erb +0 -12
  216. data/app/views/user_checkout_stats/show.csv.erb +0 -4
  217. data/app/views/user_checkout_stats/show.html.erb +0 -55
  218. data/app/views/user_group_has_checkout_types/edit.html.erb +0 -63
  219. data/app/views/user_group_has_checkout_types/index.html.erb +0 -32
  220. data/app/views/user_group_has_checkout_types/new.html.erb +0 -62
  221. data/app/views/user_group_has_checkout_types/show.html.erb +0 -64
  222. data/app/views/user_reserve_stats/_form.html.erb +0 -19
  223. data/app/views/user_reserve_stats/edit.html.erb +0 -13
  224. data/app/views/user_reserve_stats/index.html.erb +0 -35
  225. data/app/views/user_reserve_stats/new.html.erb +0 -12
  226. data/app/views/user_reserve_stats/show.csv.erb +0 -4
  227. data/app/views/user_reserve_stats/show.html.erb +0 -54
  228. data/test/dummy/app/controllers/application_controller.rb +0 -3
  229. data/test/enju_message_test.rb +0 -7
  230. data/test/integration/navigation_test.rb +0 -10
  231. data/test/test_helper.rb +0 -10
@@ -0,0 +1,167 @@
1
+ # -*- encoding: utf-8 -*-
2
+ class Patron < ActiveRecord::Base
3
+ scope :readable_by, lambda{|user| {:conditions => ['required_role_id <= ?', user.try(:user_has_role).try(:role_id) || Role.where(:name => 'Guest').select(:id).first.id]}}
4
+ belongs_to :user
5
+ belongs_to :patron_type
6
+ belongs_to :required_role, :class_name => 'Role', :foreign_key => 'required_role_id', :validate => true
7
+
8
+ validates_presence_of :patron_type
9
+ validates_associated :patron_type
10
+ validates :full_name, :presence => true, :length => {:maximum => 255}
11
+ validates :user_id, :uniqueness => true, :allow_nil => true
12
+ validates :email, :format => {:with => /^([\w\.%\+\-]+)@([\w\-]+\.)+([\w]{2,})$/i}, :allow_blank => true
13
+ before_validation :set_role_and_name, :on => :create
14
+
15
+ #has_paper_trail
16
+ attr_accessor :user_username
17
+ #[:address_1, :address_2].each do |column|
18
+ # encrypt_with_public_key column,
19
+ # :key_pair => File.join(Rails.root.to_s,'config','keypair.pem'),
20
+ # :base64 => true
21
+ #end
22
+
23
+ searchable do
24
+ text :name, :place, :address_1, :address_2, :other_designation, :note
25
+ string :zip_code_1
26
+ string :zip_code_2
27
+ string :username do
28
+ user.username if user
29
+ end
30
+ time :created_at
31
+ time :updated_at
32
+ string :user
33
+ integer :work_ids, :multiple => true
34
+ integer :expression_ids, :multiple => true
35
+ integer :manifestation_ids, :multiple => true
36
+ integer :patron_merge_list_ids, :multiple => true if defined?(EnjuResourceMerge)
37
+ integer :original_patron_ids, :multiple => true
38
+ integer :required_role_id
39
+ integer :patron_type_id
40
+ end
41
+
42
+ def self.per_page
43
+ 10
44
+ end
45
+
46
+ def full_name_without_space
47
+ full_name.gsub(/\s/, "")
48
+ end
49
+
50
+ def set_role_and_name
51
+ self.required_role = Role.where(:name => 'Librarian').first if self.required_role_id.nil?
52
+ set_full_name
53
+ end
54
+
55
+ def set_full_name
56
+ if self.full_name.blank?
57
+ if self.last_name.to_s.strip and self.first_name.to_s.strip and configatron.family_name_first == true
58
+ self.full_name = [last_name, middle_name, first_name].compact.join(" ").to_s.strip
59
+ else
60
+ self.full_name = [first_name, last_name, middle_name].compact.join(" ").to_s.strip
61
+ end
62
+ end
63
+ if self.full_name_transcription.blank?
64
+ self.full_name_transcription = [last_name_transcription, middle_name_transcription, first_name_transcription].join(" ").to_s.strip
65
+ end
66
+ [self.full_name, self.full_name_transcription]
67
+ end
68
+
69
+ def full_name_without_space
70
+ full_name.gsub(/\s/, "")
71
+ # # TODO: 日本人以外は?
72
+ # name = []
73
+ # name << self.last_name.to_s.strip
74
+ # name << self.middle_name.to_s.strip
75
+ # name << self.first_name.to_s.strip
76
+ # name << self.corporate_name.to_s.strip
77
+ # name.join("").strip
78
+ end
79
+
80
+ def full_name_transcription_without_space
81
+ full_name_transcription.to_s.gsub(/\s/, "")
82
+ end
83
+
84
+ def full_name_alternative_without_space
85
+ full_name_alternative.to_s.gsub(/\s/, "")
86
+ end
87
+
88
+ def name
89
+ name = []
90
+ name << full_name.to_s.strip
91
+ name << full_name_transcription.to_s.strip
92
+ name << full_name_alternative.to_s.strip
93
+ #name << full_name_without_space
94
+ #name << full_name_transcription_without_space
95
+ #name << full_name_alternative_without_space
96
+ #name << full_name.wakati rescue nil
97
+ #name << full_name_transcription.wakati rescue nil
98
+ #name << full_name_alternative.wakati rescue nil
99
+ name
100
+ end
101
+
102
+ def date
103
+ if date_of_birth
104
+ if date_of_death
105
+ "#{date_of_birth} - #{date_of_death}"
106
+ else
107
+ "#{date_of_birth} -"
108
+ end
109
+ end
110
+ end
111
+
112
+ def creator?(resource)
113
+ resource.creators.include?(self)
114
+ end
115
+
116
+ def publisher?(resource)
117
+ resource.publishers.include?(self)
118
+ end
119
+
120
+ def check_required_role(user)
121
+ return true if self.user.blank?
122
+ return true if self.user.required_role.name == 'Guest'
123
+ return true if user == self.user
124
+ return true if user.has_role?(self.user.required_role.name)
125
+ false
126
+ rescue NoMethodError
127
+ false
128
+ end
129
+
130
+ def created(work)
131
+ creates.where(:work_id => work.id).first
132
+ end
133
+
134
+ def realized(expression)
135
+ realizes.where(:expression_id => expression.id).first
136
+ end
137
+
138
+ def produced(manifestation)
139
+ produces.where(:manifestation_id => manifestation.id).first
140
+ end
141
+
142
+ def owned(item)
143
+ owns.where(:item_id => item.id)
144
+ end
145
+
146
+ def self.import_patrons(patron_lists)
147
+ list = []
148
+ patron_lists.each do |patron_list|
149
+ patron = Patron.where(:full_name => patron_list[:full_name]).first
150
+ unless patron
151
+ patron = Patron.new(
152
+ :full_name => patron_list[:full_name],
153
+ :full_name_transcription => patron_list[:full_name_transcription],
154
+ :language_id => 1
155
+ )
156
+ patron.required_role = Role.where(:name => 'Guest').first
157
+ patron.save
158
+ end
159
+ list << patron
160
+ end
161
+ list
162
+ end
163
+
164
+ def patrons
165
+ self.original_patrons + self.derived_patrons
166
+ end
167
+ end
@@ -0,0 +1,19 @@
1
+ class PatronType < ActiveRecord::Base
2
+ include MasterModel
3
+ default_scope :order => "patron_types.position"
4
+ has_many :patrons
5
+ end
6
+
7
+ # == Schema Information
8
+ #
9
+ # Table name: patron_types
10
+ #
11
+ # id :integer not null, primary key
12
+ # name :string(255) not null
13
+ # display_name :text
14
+ # note :text
15
+ # position :integer
16
+ # created_at :datetime
17
+ # updated_at :datetime
18
+ #
19
+
@@ -0,0 +1,8 @@
1
+ class Role < ActiveRecord::Base
2
+ extend FriendlyId
3
+ friendly_id :name
4
+
5
+ def self.default_role
6
+ Role.find('Guest')
7
+ end
8
+ end
@@ -0,0 +1,53 @@
1
+ class User < ActiveRecord::Base
2
+ # Include default devise modules. Others available are:
3
+ # :token_authenticatable, :encryptable, :confirmable, :lockable, :timeoutable and :omniauthable
4
+ devise :database_authenticatable, :registerable,
5
+ :recoverable, :rememberable, :trackable, :validatable
6
+
7
+ # Setup accessible (or protected) attributes for your model
8
+ attr_accessible :email, :password, :password_confirmation, :remember_me
9
+
10
+ has_one :user_has_role
11
+ has_one :role, :through => :user_has_role
12
+ has_one :patron
13
+ belongs_to :user_group
14
+ belongs_to :required_role, :class_name => 'Role', :foreign_key => 'required_role_id'
15
+ has_many :sent_messages, :foreign_key => 'sender_id', :class_name => 'Message'
16
+ has_many :received_messages, :foreign_key => 'receiver_id', :class_name => 'Message'
17
+ before_create :set_role_and_patron
18
+
19
+ extend FriendlyId
20
+ friendly_id :username
21
+
22
+ def set_role_and_patron
23
+ self.required_role = Role.where(:name => 'Librarian').first
24
+ self.locale = I18n.default_locale.to_s
25
+ unless self.patron
26
+ self.patron = Patron.create(:full_name => self.username) if self.username
27
+ end
28
+ end
29
+
30
+ def has_role?(role_in_question)
31
+ return false unless role
32
+ return true if role.name == role_in_question
33
+ case role.name
34
+ when 'Administrator'
35
+ return true
36
+ when 'Librarian'
37
+ return true if role_in_question == 'User'
38
+ else
39
+ false
40
+ end
41
+ end
42
+
43
+ def send_message(status, options = {})
44
+ MessageRequest.transaction do
45
+ request = MessageRequest.new
46
+ request.sender = User.find(1)
47
+ request.receiver = self
48
+ request.message_template = MessageTemplate.localized_template(status, self.locale)
49
+ request.save_message_body(options)
50
+ request.sm_send_message!
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,2 @@
1
+ class UserGroup < ActiveRecord::Base
2
+ end
@@ -0,0 +1,4 @@
1
+ class UserHasRole < ActiveRecord::Base
2
+ belongs_to :user
3
+ belongs_to :role
4
+ end
@@ -0,0 +1,9 @@
1
+ <div id="content_detail" class="ui-corner-all">
2
+ <h1 class="title"><%= t('page.access_denied') -%></h1>
3
+ <div id="content_list">
4
+ <%= render 'page/search_form' %>
5
+ </div>
6
+ </div>
7
+
8
+ <div id="submenu" class="ui-corner-all">
9
+ </div>
@@ -0,0 +1,5 @@
1
+ <div data-role="header">
2
+ <h2 class="title"><%= t('page.access_denied') -%></h2>
3
+ </div>
4
+ <div data-role="content">
5
+ </div>
@@ -0,0 +1,4 @@
1
+ <?xml version="1.0" encoding="utf-8" ?>
2
+ <error>
3
+ <status>403</status>
4
+ </error>
@@ -0,0 +1,9 @@
1
+ <div id="content_detail" class="ui-corner-all">
2
+ <h1 class="title"><%= t('page.not_found') -%></h1>
3
+ <div id="content_list">
4
+ <%= render 'page/search_form' %>
5
+ </div>
6
+ </div>
7
+
8
+ <div id="submenu" class="ui-corner-all">
9
+ </div>
@@ -0,0 +1,5 @@
1
+ <div data-role="header">
2
+ <h2 class="title"><%= t('page.not_found') -%></h2>
3
+ </div>
4
+ <div data-role="content">
5
+ </div>
@@ -0,0 +1,4 @@
1
+ <?xml version="1.0" encoding="utf-8" ?>
2
+ <error>
3
+ <status>404</status>
4
+ </error>
@@ -43,3 +43,4 @@ module Dummy
43
43
  end
44
44
  end
45
45
 
46
+ require 'enju_leaf'
File without changes
File without changes
File without changes
File without changes
@@ -0,0 +1,209 @@
1
+ # Use this hook to configure devise mailer, warden hooks and so forth.
2
+ # Many of these configuration options can be set straight in your model.
3
+ Devise.setup do |config|
4
+ # ==> Mailer Configuration
5
+ # Configure the e-mail address which will be shown in Devise::Mailer,
6
+ # note that it will be overwritten if you use your own mailer class with default "from" parameter.
7
+ config.mailer_sender = "please-change-me-at-config-initializers-devise@example.com"
8
+
9
+ # Configure the class responsible to send e-mails.
10
+ # config.mailer = "Devise::Mailer"
11
+
12
+ # ==> ORM configuration
13
+ # Load and configure the ORM. Supports :active_record (default) and
14
+ # :mongoid (bson_ext recommended) by default. Other ORMs may be
15
+ # available as additional gems.
16
+ require 'devise/orm/active_record'
17
+
18
+ # ==> Configuration for any authentication mechanism
19
+ # Configure which keys are used when authenticating a user. The default is
20
+ # just :email. You can configure it to use [:username, :subdomain], so for
21
+ # authenticating a user, both parameters are required. Remember that those
22
+ # parameters are used only when authenticating and not when retrieving from
23
+ # session. If you need permissions, you should implement that in a before filter.
24
+ # You can also supply a hash where the value is a boolean determining whether
25
+ # or not authentication should be aborted when the value is not present.
26
+ # config.authentication_keys = [ :email ]
27
+
28
+ # Configure parameters from the request object used for authentication. Each entry
29
+ # given should be a request method and it will automatically be passed to the
30
+ # find_for_authentication method and considered in your model lookup. For instance,
31
+ # if you set :request_keys to [:subdomain], :subdomain will be used on authentication.
32
+ # The same considerations mentioned for authentication_keys also apply to request_keys.
33
+ # config.request_keys = []
34
+
35
+ # Configure which authentication keys should be case-insensitive.
36
+ # These keys will be downcased upon creating or modifying a user and when used
37
+ # to authenticate or find a user. Default is :email.
38
+ config.case_insensitive_keys = [ :email ]
39
+
40
+ # Configure which authentication keys should have whitespace stripped.
41
+ # These keys will have whitespace before and after removed upon creating or
42
+ # modifying a user and when used to authenticate or find a user. Default is :email.
43
+ config.strip_whitespace_keys = [ :email ]
44
+
45
+ # Tell if authentication through request.params is enabled. True by default.
46
+ # config.params_authenticatable = true
47
+
48
+ # Tell if authentication through HTTP Basic Auth is enabled. False by default.
49
+ # config.http_authenticatable = false
50
+
51
+ # If http headers should be returned for AJAX requests. True by default.
52
+ # config.http_authenticatable_on_xhr = true
53
+
54
+ # The realm used in Http Basic Authentication. "Application" by default.
55
+ # config.http_authentication_realm = "Application"
56
+
57
+ # It will change confirmation, password recovery and other workflows
58
+ # to behave the same regardless if the e-mail provided was right or wrong.
59
+ # Does not affect registerable.
60
+ # config.paranoid = true
61
+
62
+ # ==> Configuration for :database_authenticatable
63
+ # For bcrypt, this is the cost for hashing the password and defaults to 10. If
64
+ # using other encryptors, it sets how many times you want the password re-encrypted.
65
+ #
66
+ # Limiting the stretches to just one in testing will increase the performance of
67
+ # your test suite dramatically. However, it is STRONGLY RECOMMENDED to not use
68
+ # a value less than 10 in other environments.
69
+ config.stretches = Rails.env.test? ? 1 : 10
70
+
71
+ # Setup a pepper to generate the encrypted password.
72
+ # config.pepper = "9c3e60feae3030ec50d52f408005d7083c980b028e24e96536c60829394fd7cf5e26fdfed03e48b756b8bbf16177d73cca8cc6d036b2e916c953faf8d2c0238c"
73
+
74
+ # ==> Configuration for :confirmable
75
+ # A period that the user is allowed to access the website even without
76
+ # confirming his account. For instance, if set to 2.days, the user will be
77
+ # able to access the website for two days without confirming his account,
78
+ # access will be blocked just in the third day. Default is 0.days, meaning
79
+ # the user cannot access the website without confirming his account.
80
+ # config.confirm_within = 2.days
81
+
82
+ # Defines which key will be used when confirming an account
83
+ # config.confirmation_keys = [ :email ]
84
+
85
+ # ==> Configuration for :rememberable
86
+ # The time the user will be remembered without asking for credentials again.
87
+ # config.remember_for = 2.weeks
88
+
89
+ # If true, a valid remember token can be re-used between multiple browsers.
90
+ # config.remember_across_browsers = true
91
+
92
+ # If true, extends the user's remember period when remembered via cookie.
93
+ # config.extend_remember_period = false
94
+
95
+ # If true, uses the password salt as remember token. This should be turned
96
+ # to false if you are not using database authenticatable.
97
+ config.use_salt_as_remember_token = true
98
+
99
+ # Options to be passed to the created cookie. For instance, you can set
100
+ # :secure => true in order to force SSL only cookies.
101
+ # config.cookie_options = {}
102
+
103
+ # ==> Configuration for :validatable
104
+ # Range for password length. Default is 6..128.
105
+ # config.password_length = 6..128
106
+
107
+ # Email regex used to validate email formats. It simply asserts that
108
+ # an one (and only one) @ exists in the given string. This is mainly
109
+ # to give user feedback and not to assert the e-mail validity.
110
+ # config.email_regexp = /\A[^@]+@[^@]+\z/
111
+
112
+ # ==> Configuration for :timeoutable
113
+ # The time you want to timeout the user session without activity. After this
114
+ # time the user will be asked for credentials again. Default is 30 minutes.
115
+ # config.timeout_in = 30.minutes
116
+
117
+ # ==> Configuration for :lockable
118
+ # Defines which strategy will be used to lock an account.
119
+ # :failed_attempts = Locks an account after a number of failed attempts to sign in.
120
+ # :none = No lock strategy. You should handle locking by yourself.
121
+ # config.lock_strategy = :failed_attempts
122
+
123
+ # Defines which key will be used when locking and unlocking an account
124
+ # config.unlock_keys = [ :email ]
125
+
126
+ # Defines which strategy will be used to unlock an account.
127
+ # :email = Sends an unlock link to the user email
128
+ # :time = Re-enables login after a certain amount of time (see :unlock_in below)
129
+ # :both = Enables both strategies
130
+ # :none = No unlock strategy. You should handle unlocking by yourself.
131
+ # config.unlock_strategy = :both
132
+
133
+ # Number of authentication tries before locking an account if lock_strategy
134
+ # is failed attempts.
135
+ # config.maximum_attempts = 20
136
+
137
+ # Time interval to unlock the account if :time is enabled as unlock_strategy.
138
+ # config.unlock_in = 1.hour
139
+
140
+ # ==> Configuration for :recoverable
141
+ #
142
+ # Defines which key will be used when recovering the password for an account
143
+ # config.reset_password_keys = [ :email ]
144
+
145
+ # Time interval you can reset your password with a reset password key.
146
+ # Don't put a too small interval or your users won't have the time to
147
+ # change their passwords.
148
+ config.reset_password_within = 2.hours
149
+
150
+ # ==> Configuration for :encryptable
151
+ # Allow you to use another encryption algorithm besides bcrypt (default). You can use
152
+ # :sha1, :sha512 or encryptors from others authentication tools as :clearance_sha1,
153
+ # :authlogic_sha512 (then you should set stretches above to 20 for default behavior)
154
+ # and :restful_authentication_sha1 (then you should set stretches to 10, and copy
155
+ # REST_AUTH_SITE_KEY to pepper)
156
+ # config.encryptor = :sha512
157
+
158
+ # ==> Configuration for :token_authenticatable
159
+ # Defines name of the authentication token params key
160
+ # config.token_authentication_key = :auth_token
161
+
162
+ # If true, authentication through token does not store user in session and needs
163
+ # to be supplied on each request. Useful if you are using the token as API token.
164
+ # config.stateless_token = false
165
+
166
+ # ==> Scopes configuration
167
+ # Turn scoped views on. Before rendering "sessions/new", it will first check for
168
+ # "users/sessions/new". It's turned off by default because it's slower if you
169
+ # are using only default views.
170
+ # config.scoped_views = false
171
+
172
+ # Configure the default scope given to Warden. By default it's the first
173
+ # devise role declared in your routes (usually :user).
174
+ # config.default_scope = :user
175
+
176
+ # Configure sign_out behavior.
177
+ # Sign_out action can be scoped (i.e. /users/sign_out affects only :user scope).
178
+ # The default is true, which means any logout action will sign out all active scopes.
179
+ # config.sign_out_all_scopes = true
180
+
181
+ # ==> Navigation configuration
182
+ # Lists the formats that should be treated as navigational. Formats like
183
+ # :html, should redirect to the sign in page when the user does not have
184
+ # access, but formats like :xml or :json, should return 401.
185
+ #
186
+ # If you have any extra navigational formats, like :iphone or :mobile, you
187
+ # should add them to the navigational formats lists.
188
+ #
189
+ # The :"*/*" and "*/*" formats below is required to match Internet
190
+ # Explorer requests.
191
+ # config.navigational_formats = [:"*/*", "*/*", :html]
192
+
193
+ # The default HTTP method used to sign out a resource. Default is :delete.
194
+ config.sign_out_via = :delete
195
+
196
+ # ==> OmniAuth
197
+ # Add a new OmniAuth provider. Check the wiki for more information on setting
198
+ # up on your models and hooks.
199
+ # config.omniauth :github, 'APP_ID', 'APP_SECRET', :scope => 'user,public_repo'
200
+
201
+ # ==> Warden configuration
202
+ # If you want to use other strategies, that are not supported by Devise, or
203
+ # change the failure app, you can configure them inside the config.warden block.
204
+ #
205
+ # config.warden do |manager|
206
+ # manager.intercept_401 = false
207
+ # manager.default_strategies(:scope => :user).unshift :some_external_strategy
208
+ # end
209
+ end
@@ -3,3 +3,4 @@
3
3
  # Add new mime types for use in respond_to blocks:
4
4
  # Mime::Type.register "text/richtext", :rtf
5
5
  # Mime::Type.register_alias "text/html", :iphone
6
+ Mime::Type.register_alias "text/html", :mobile
File without changes
@@ -1,4 +1,6 @@
1
1
  Dummy::Application.routes.draw do
2
+ devise_for :users
3
+
2
4
  # The priority is based upon order of creation:
3
5
  # first created -> highest priority.
4
6
 
File without changes
@@ -0,0 +1,62 @@
1
+ class CreatePatrons < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :patrons do |t|
4
+ t.integer :user_id
5
+ t.string :last_name
6
+ t.string :middle_name
7
+ t.string :first_name
8
+ t.string :last_name_transcription
9
+ t.string :middle_name_transcription
10
+ t.string :first_name_transcription
11
+ t.string :corporate_name
12
+ t.string :corporate_name_transcription
13
+ t.string :full_name
14
+ t.text :full_name_transcription
15
+ t.text :full_name_alternative
16
+ t.timestamps
17
+ t.datetime :deleted_at
18
+ t.string :zip_code_1
19
+ t.string :zip_code_2
20
+ t.text :address_1
21
+ t.text :address_2
22
+ t.text :address_1_note
23
+ t.text :address_2_note
24
+ t.string :telephone_number_1
25
+ t.string :telephone_number_2
26
+ t.string :fax_number_1
27
+ t.string :fax_number_2
28
+ t.text :other_designation
29
+ t.text :place
30
+ t.string :postal_code
31
+ t.text :street
32
+ t.text :locality
33
+ t.text :region
34
+ t.datetime :date_of_birth
35
+ t.datetime :date_of_death
36
+ t.integer :language_id, :default => 1, :null => false
37
+ t.integer :country_id, :default => 1, :null => false
38
+ t.integer :patron_type_id, :default => 1, :null => false
39
+ t.integer :lock_version, :default => 0, :null => false
40
+ t.text :note
41
+ t.integer :creates_count, :default => 0, :null => false
42
+ t.integer :realizes_count, :default => 0, :null => false
43
+ t.integer :produces_count, :default => 0, :null => false
44
+ t.integer :owns_count, :default => 0, :null => false
45
+ #t.integer :resource_has_subjects_count, :default => 0, :null => false
46
+ t.integer :required_role_id, :default => 1, :null => false
47
+ t.integer :required_score, :default => 0, :null => false
48
+ t.string :state
49
+ t.text :email
50
+ t.text :url
51
+ end
52
+ add_index :patrons, :user_id, :unique => true
53
+ add_index :patrons, :language_id
54
+ add_index :patrons, :country_id
55
+ add_index :patrons, :required_role_id
56
+ add_index :patrons, :full_name
57
+ end
58
+
59
+ def self.down
60
+ drop_table :patrons
61
+ end
62
+ end
@@ -0,0 +1,25 @@
1
+ class CreateLibraryGroups < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :library_groups do |t|
4
+ t.string :name, :null => false
5
+ t.text :display_name
6
+ t.string :short_name, :null => false
7
+ t.string :email
8
+ t.text :my_networks
9
+ t.boolean :use_dsbl, :default => false, :null => false
10
+ t.text :dsbl_list
11
+ t.text :login_banner
12
+ t.text :note
13
+ t.integer :valid_period_for_new_user, :default => 365, :null => false
14
+ t.boolean :post_to_union_catalog, :default => false, :null => false
15
+ t.integer :country_id
16
+
17
+ t.timestamps
18
+ end
19
+ add_index :library_groups, :short_name
20
+ end
21
+
22
+ def self.down
23
+ drop_table :library_groups
24
+ end
25
+ end