bookingsync_portal 3.0.0

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.
Files changed (78) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +174 -0
  4. data/Rakefile +28 -0
  5. data/app/assets/config/manifest.js +3 -0
  6. data/app/assets/images/bookingsync_portal/bookingsync.png +0 -0
  7. data/app/assets/images/bookingsync_portal/help/connect.gif +0 -0
  8. data/app/assets/javascripts/bookingsync_portal/admin/application.js.coffee +83 -0
  9. data/app/assets/javascripts/bookingsync_portal/admin/connections.js.coffee +3 -0
  10. data/app/assets/javascripts/bookingsync_portal/admin/handle_remote_errors.js.coffee +3 -0
  11. data/app/assets/javascripts/bookingsync_portal/admin/lib/list-filter.js.coffee +28 -0
  12. data/app/assets/javascripts/bookingsync_portal/admin/live_updates.js.coffee +7 -0
  13. data/app/assets/javascripts/bookingsync_portal/admin/rentals.js.coffee +12 -0
  14. data/app/assets/javascripts/bookingsync_portal/admin/templates/filter_input.hbs +6 -0
  15. data/app/assets/javascripts/bookingsync_portal/admin/vendor/css-contains.js +29 -0
  16. data/app/assets/stylesheets/bookingsync_portal/admin/application.scss +241 -0
  17. data/app/controllers/bookingsync_portal/admin/base_controller.rb +25 -0
  18. data/app/controllers/bookingsync_portal/admin/connections_controller.rb +48 -0
  19. data/app/controllers/bookingsync_portal/admin/help_controller.rb +7 -0
  20. data/app/controllers/bookingsync_portal/admin/remote_accounts_controller.rb +27 -0
  21. data/app/controllers/bookingsync_portal/admin/rentals_controller.rb +36 -0
  22. data/app/controllers/bookingsync_portal/application_controller.rb +4 -0
  23. data/app/helpers/bookingsync_portal/admin/application_helper.rb +34 -0
  24. data/app/models/bookingsync_portal/account.rb +15 -0
  25. data/app/models/bookingsync_portal/connection.rb +29 -0
  26. data/app/models/bookingsync_portal/photo.rb +8 -0
  27. data/app/models/bookingsync_portal/rate.rb +6 -0
  28. data/app/models/bookingsync_portal/remote_account.rb +9 -0
  29. data/app/models/bookingsync_portal/remote_rental.rb +31 -0
  30. data/app/models/bookingsync_portal/rental.rb +26 -0
  31. data/app/synchronizers/bookingsync_portal/write/ensure_source_exists.rb +22 -0
  32. data/app/synchronizers/bookingsync_portal/write/source.rb +30 -0
  33. data/app/views/bookingsync_portal/admin/connections/create.js.coffee +6 -0
  34. data/app/views/bookingsync_portal/admin/connections/destroy.js.coffee +7 -0
  35. data/app/views/bookingsync_portal/admin/help/_help.html.erb +5 -0
  36. data/app/views/bookingsync_portal/admin/help/index.html.erb +7 -0
  37. data/app/views/bookingsync_portal/admin/remote_accounts/_form.html.erb +11 -0
  38. data/app/views/bookingsync_portal/admin/remote_accounts/_how_to_connect.html.erb +1 -0
  39. data/app/views/bookingsync_portal/admin/remote_accounts/new.html.erb +5 -0
  40. data/app/views/bookingsync_portal/admin/rentals/_connected_rental.html.erb +30 -0
  41. data/app/views/bookingsync_portal/admin/rentals/_new_remote_account.html.erb +3 -0
  42. data/app/views/bookingsync_portal/admin/rentals/_new_remote_rental.html.erb +6 -0
  43. data/app/views/bookingsync_portal/admin/rentals/_remote_rental.html.erb +11 -0
  44. data/app/views/bookingsync_portal/admin/rentals/_rental.html.erb +14 -0
  45. data/app/views/bookingsync_portal/admin/rentals/_rentals.html.erb +14 -0
  46. data/app/views/bookingsync_portal/admin/rentals/index.html.erb +56 -0
  47. data/app/views/bookingsync_portal/admin/rentals/show.js.erb +7 -0
  48. data/app/views/layouts/bookingsync_portal/_flash.html.erb +8 -0
  49. data/app/views/layouts/bookingsync_portal/_menu.html.erb +30 -0
  50. data/app/views/layouts/bookingsync_portal/admin.html.erb +21 -0
  51. data/app/views/layouts/bookingsync_portal/fullscreen/application.html.erb +19 -0
  52. data/config/locales/en.yml +85 -0
  53. data/config/routes.rb +9 -0
  54. data/db/migrate/20150222172825_create_accounts.rb +17 -0
  55. data/db/migrate/20150222173413_create_rentals.rb +14 -0
  56. data/db/migrate/20150222173711_create_remote_accounts.rb +10 -0
  57. data/db/migrate/20150222174023_create_remote_rentals.rb +12 -0
  58. data/db/migrate/20150222174234_create_connections.rb +10 -0
  59. data/db/migrate/20150520134912_create_photos.rb +13 -0
  60. data/db/migrate/20150521091056_create_rates.rb +12 -0
  61. data/db/migrate/20151210164752_add_synced_source_id_to_account.rb +5 -0
  62. data/db/migrate/20160301141356_create_bookings.rb +9 -0
  63. data/lib/bookingsync_portal.rb +77 -0
  64. data/lib/bookingsync_portal/booking_map.rb +109 -0
  65. data/lib/bookingsync_portal/engine.rb +18 -0
  66. data/lib/bookingsync_portal/mash_serializer.rb +9 -0
  67. data/lib/bookingsync_portal/version.rb +3 -0
  68. data/lib/generators/bookingsync_portal/install_generator.rb +22 -0
  69. data/lib/generators/templates/initializers/bookingsync_portal.rb +48 -0
  70. data/lib/generators/templates/models/account.rb +14 -0
  71. data/lib/generators/templates/models/connection.rb +2 -0
  72. data/lib/generators/templates/models/photo.rb +4 -0
  73. data/lib/generators/templates/models/rate.rb +3 -0
  74. data/lib/generators/templates/models/remote_account.rb +6 -0
  75. data/lib/generators/templates/models/remote_rental.rb +6 -0
  76. data/lib/generators/templates/models/rental.rb +11 -0
  77. data/lib/tasks/bookingsync_portal_tasks.rake +4 -0
  78. metadata +521 -0
@@ -0,0 +1,109 @@
1
+ class BookingsyncPortal::BookingMap
2
+ class InvalidLength < StandardError
3
+ end
4
+
5
+ attr_reader :bookings, :statuses, :from, :to, :length
6
+
7
+ def initialize(bookings, options = {})
8
+ @from = options.fetch(:from) { Date.today.beginning_of_month }
9
+ @from = @from.to_date
10
+
11
+ @length = options.fetch(:length) { 1096 }
12
+ @to = @from.advance(days: @length.to_i)
13
+ @statuses = options.fetch(:statuses) { {
14
+ available: "0",
15
+ tentative: "0",
16
+ booked: "1",
17
+ unavailable: "1"
18
+ } }
19
+ @bookings = bookings_for_map(bookings, @from, @to)
20
+ end
21
+
22
+ def map
23
+ days = get_days_hash(from, to, statuses[:available].to_s)
24
+
25
+ bookings.each do |booking|
26
+ (booking.start_at.to_date...booking.end_at.to_date).each do |day|
27
+ if day >= from && day < to
28
+ days[day] = statuses[booking.status.downcase.to_sym]
29
+ end
30
+ end
31
+ end
32
+ days.values.join
33
+ end
34
+
35
+ class << self
36
+ # Diff maps
37
+ #
38
+ # @param source [String] The source map (expecting a map of `1` and `0` only)
39
+ # @param destination [String] The destination map (expecting a map of `1` and `0` only)
40
+ # @return [String] A map with the changes between both maps:
41
+ # _ - Identical
42
+ # 1 - Create (present on source only)
43
+ # 0 - Destroy (present on destination only)
44
+ def diff(source, destination)
45
+ raise InvalidLength if source.size != destination.size
46
+
47
+ new_result = "_" * source.size
48
+ source.chars.each_with_index do |char, index|
49
+ new_result[index] = char if destination[index] != char
50
+ end
51
+
52
+ new_result
53
+ end
54
+
55
+ # Extract ranges
56
+ #
57
+ # Returns all the ranges with their statuses.
58
+ # The `_` is considered as empty and won't be returned as a range.
59
+ # @param map [String] A map String
60
+ # @param from [Date] The day that the map starts
61
+ # @return [Array<Hash>] Returns an Array of Hashes with all the ranges
62
+ def extract_ranges(map, from)
63
+ ranges = []
64
+ previous_char = nil
65
+ range = nil
66
+ map_length = map.length
67
+ map.chars.each_with_index do |char, index|
68
+ if char != previous_char && char != "_" # finished
69
+ ranges << range if range
70
+
71
+ range = {
72
+ start_at: from.advance(days: index),
73
+ end_at: from.advance(days: index + 1)
74
+ }.merge(status: char)
75
+ elsif char != "_" # continuing
76
+ range[:end_at] = from.advance(days: index + 1)
77
+ end
78
+
79
+ if index == map_length - 1
80
+ ranges << range if range
81
+ end
82
+
83
+ previous_char = char
84
+ end
85
+
86
+ ranges
87
+ end
88
+ end
89
+
90
+ private
91
+
92
+ def bookings_for_map(bookings, from, to)
93
+ if bookings.is_a?(ActiveRecord::Relation)
94
+ bookings.where("end_at > ? AND start_at <= ?", from.end_of_day, to)
95
+ .order(:start_at)
96
+ else
97
+ bookings.find_all do |booking|
98
+ booking.end_at > from.end_of_day && booking.start_at <= to
99
+ end.sort_by { |booking| booking.start_at }
100
+ end
101
+ end
102
+
103
+ def get_days_hash(start_at, end_at, default_value = nil)
104
+ period = start_at...end_at # should not include end_at
105
+ period.each_with_object({}) do |day, days|
106
+ days[day] = default_value
107
+ end
108
+ end
109
+ end
@@ -0,0 +1,18 @@
1
+ module BookingsyncPortal
2
+ class Engine < ::Rails::Engine
3
+ engine_name 'bookingsync_portal'
4
+ isolate_namespace BookingsyncPortal
5
+ config.generators do |g|
6
+ g.install :install
7
+ end
8
+
9
+ if defined?(Sprockets) && Sprockets::VERSION.chr.to_i >= 3
10
+ initializer 'bookingsync_portal.assets.precompile' do |app|
11
+ app.config.assets.precompile += %w(
12
+ bookingsync_portal/help/connect.gif
13
+ bookingsync_portal/bookingsync.png
14
+ )
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,9 @@
1
+ class BookingsyncPortal::MashSerializer
2
+ def self.dump(obj)
3
+ JSON.dump(obj)
4
+ end
5
+
6
+ def self.load(data)
7
+ Hashie::Mash.new(JSON.load(data))
8
+ end
9
+ end
@@ -0,0 +1,3 @@
1
+ module BookingsyncPortal
2
+ VERSION = "3.0.0"
3
+ end
@@ -0,0 +1,22 @@
1
+ require 'rails/generators'
2
+
3
+ module BookingsyncPortal
4
+ module Generators
5
+ class InstallGenerator < ::Rails::Generators::Base
6
+ source_root File.expand_path("../../templates", __FILE__)
7
+
8
+ desc "Creates a BookingsyncPortal initializer and default models."
9
+
10
+ def copy_initializer
11
+ template "initializers/bookingsync_portal.rb", "config/initializers/bookingsync_portal.rb"
12
+ template "models/account.rb", "app/models/account.rb"
13
+ template "models/connection.rb", "app/models/connection.rb"
14
+ template "models/photo.rb", "app/models/photo.rb"
15
+ template "models/rate.rb", "app/models/rate.rb"
16
+ template "models/remote_account.rb", "app/models/remote_account.rb"
17
+ template "models/remote_rental.rb", "app/models/remote_rental.rb"
18
+ template "models/rental.rb", "app/models/rental.rb"
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,48 @@
1
+ # Use this to customize the behaviour of BookingsyncPortal engine and hook up custom synchronization
2
+ BookingsyncPortal.setup do |config|
3
+ # customize the portal name
4
+ config.portal_name = "Replace with portal app name"
5
+
6
+ # customize the source name
7
+ config.source_name = "Replace with portal name"
8
+
9
+ # specify message_bus_channel_scope to allow shared redis setup
10
+ config.message_bus_channel_scope = 'portal_app_name'
11
+
12
+ # Allow to create a remote rental directly from this app.
13
+ config.create_remote_rental = false
14
+
15
+ # customize account model class, can extend BookingsyncPortal::Account
16
+ config.account_model = '::Account'
17
+
18
+ # customize remote account model class, can extend BookingsyncPortal::RemoteAccount
19
+ config.remote_account_model = '::RemoteAccount'
20
+
21
+ # customize rental model class, can extend BookingsyncPortal::Rental
22
+ config.rental_model = '::Rental'
23
+
24
+ # customize remote_rental model class, can extend BookingsyncPortal::RemoteRental
25
+ config.remote_rental_model = '::RemoteRental'
26
+
27
+ # customize connection model class, can extend BookingsyncPortal::Connection
28
+ config.connection_model = '::Connection'
29
+
30
+ # customize photo model class, can extend BookingsyncPortal::Photo
31
+ config.photo_model = '::Photo'
32
+
33
+ # customize rate model class, can extend BookingsyncPortal::Rate, set to nil if not used
34
+ config.rate_model = '::Rate'
35
+
36
+ # handle synchronization of rentals after connection is made
37
+ # def config.connection_created(connection)
38
+ # end
39
+
40
+ # handle synchronization of rentals after connection is destroyed
41
+ # def config.connection_destroyed(connection)
42
+ # end
43
+
44
+ # fetch remote rentals
45
+ # def config.fetch_remote_rentals(account)
46
+ # return false if remote account is not present or not valid
47
+ # end
48
+ end
@@ -0,0 +1,14 @@
1
+ class Account < BookingsyncPortal::Account
2
+ synced local_attributes: [:email]
3
+
4
+ # Uncomment to add Rails logger
5
+ # def api
6
+ # @api ||= BookingSync::Engine::APIClient.new(token.token, logger: Rails.logger, account: self)
7
+ # end
8
+
9
+ # Uncomment to add Rails logger
10
+ # # Used to synchronize accounts using `Account.synchronize(remove: true)`
11
+ # def self.api
12
+ # BookingSync::API::Client.new(BookingSync::Engine.application_token.token, logger: Rails.logger)
13
+ # end
14
+ end
@@ -0,0 +1,2 @@
1
+ class Connection < BookingsyncPortal::Connection
2
+ end
@@ -0,0 +1,4 @@
1
+ class Photo < BookingsyncPortal::Photo
2
+ synced local_attributes: [:position], delegate_attributes: [:large_url, :thumb_url],
3
+ remove: true
4
+ end
@@ -0,0 +1,3 @@
1
+ class Rate < BookingsyncPortal::Rate
2
+ synced remove: true
3
+ end
@@ -0,0 +1,6 @@
1
+ class RemoteAccount < BookingsyncPortal::RemoteAccount
2
+ # Returns the name of this portal account. Should be easy to identify.
3
+ def name
4
+ uid
5
+ end
6
+ end
@@ -0,0 +1,6 @@
1
+ class RemoteRental < BookingsyncPortal::RemoteRental
2
+ # Returns the name of this portal rental. Should be easy to identify.
3
+ def name
4
+ uid
5
+ end
6
+ end
@@ -0,0 +1,11 @@
1
+ class Rental < BookingsyncPortal::Rental
2
+ synced associations: [:photos, :rates],
3
+ local_attributes: [:position, :published_at],
4
+ include: [:availability],
5
+ delegate_attributes: [:name, :sleeps, :sleeps_max, :bedrooms_count, :bathrooms_count,
6
+ :surface, :surface_symbol]
7
+
8
+ def surface_unit_symbol
9
+ surface_unit == "imperial" ? "ft²" : "m²"
10
+ end
11
+ end
@@ -0,0 +1,4 @@
1
+ # desc "Explaining what the task does"
2
+ # task :bookingsync_portal do
3
+ # # Task goes here
4
+ # end
metadata ADDED
@@ -0,0 +1,521 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: bookingsync_portal
3
+ version: !ruby/object:Gem::Version
4
+ version: 3.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Piotr Marciniak
8
+ - Sebastien Grosjean
9
+ - Artur Krzeminski Freda
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain: []
13
+ date: 2020-07-21 00:00:00.000000000 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: rails
17
+ requirement: !ruby/object:Gem::Requirement
18
+ requirements:
19
+ - - ">="
20
+ - !ruby/object:Gem::Version
21
+ version: '5.2'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ version: '5.2'
29
+ - !ruby/object:Gem::Dependency
30
+ name: sprockets-rails
31
+ requirement: !ruby/object:Gem::Requirement
32
+ requirements:
33
+ - - ">="
34
+ - !ruby/object:Gem::Version
35
+ version: '0'
36
+ type: :runtime
37
+ prerelease: false
38
+ version_requirements: !ruby/object:Gem::Requirement
39
+ requirements:
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ version: '0'
43
+ - !ruby/object:Gem::Dependency
44
+ name: sprockets
45
+ requirement: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - ">="
48
+ - !ruby/object:Gem::Version
49
+ version: '4'
50
+ type: :runtime
51
+ prerelease: false
52
+ version_requirements: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ version: '4'
57
+ - !ruby/object:Gem::Dependency
58
+ name: responders
59
+ requirement: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - ">="
62
+ - !ruby/object:Gem::Version
63
+ version: '0'
64
+ type: :runtime
65
+ prerelease: false
66
+ version_requirements: !ruby/object:Gem::Requirement
67
+ requirements:
68
+ - - ">="
69
+ - !ruby/object:Gem::Version
70
+ version: '0'
71
+ - !ruby/object:Gem::Dependency
72
+ name: bookingsync_application
73
+ requirement: !ruby/object:Gem::Requirement
74
+ requirements:
75
+ - - ">="
76
+ - !ruby/object:Gem::Version
77
+ version: '4'
78
+ - - "<"
79
+ - !ruby/object:Gem::Version
80
+ version: '5'
81
+ type: :runtime
82
+ prerelease: false
83
+ version_requirements: !ruby/object:Gem::Requirement
84
+ requirements:
85
+ - - ">="
86
+ - !ruby/object:Gem::Version
87
+ version: '4'
88
+ - - "<"
89
+ - !ruby/object:Gem::Version
90
+ version: '5'
91
+ - !ruby/object:Gem::Dependency
92
+ name: redis
93
+ requirement: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - ">="
96
+ - !ruby/object:Gem::Version
97
+ version: '0'
98
+ type: :runtime
99
+ prerelease: false
100
+ version_requirements: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - ">="
103
+ - !ruby/object:Gem::Version
104
+ version: '0'
105
+ - !ruby/object:Gem::Dependency
106
+ name: jquery-rails
107
+ requirement: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - ">="
110
+ - !ruby/object:Gem::Version
111
+ version: '0'
112
+ type: :runtime
113
+ prerelease: false
114
+ version_requirements: !ruby/object:Gem::Requirement
115
+ requirements:
116
+ - - ">="
117
+ - !ruby/object:Gem::Version
118
+ version: '0'
119
+ - !ruby/object:Gem::Dependency
120
+ name: jquery-ui-rails
121
+ requirement: !ruby/object:Gem::Requirement
122
+ requirements:
123
+ - - "~>"
124
+ - !ruby/object:Gem::Version
125
+ version: 6.0.1
126
+ type: :runtime
127
+ prerelease: false
128
+ version_requirements: !ruby/object:Gem::Requirement
129
+ requirements:
130
+ - - "~>"
131
+ - !ruby/object:Gem::Version
132
+ version: 6.0.1
133
+ - !ruby/object:Gem::Dependency
134
+ name: bootstrap-sass
135
+ requirement: !ruby/object:Gem::Requirement
136
+ requirements:
137
+ - - "<"
138
+ - !ruby/object:Gem::Version
139
+ version: '3.5'
140
+ type: :runtime
141
+ prerelease: false
142
+ version_requirements: !ruby/object:Gem::Requirement
143
+ requirements:
144
+ - - "<"
145
+ - !ruby/object:Gem::Version
146
+ version: '3.5'
147
+ - !ruby/object:Gem::Dependency
148
+ name: bootstrap-bookingsync-sass
149
+ requirement: !ruby/object:Gem::Requirement
150
+ requirements:
151
+ - - "~>"
152
+ - !ruby/object:Gem::Version
153
+ version: 3.0.0
154
+ type: :runtime
155
+ prerelease: false
156
+ version_requirements: !ruby/object:Gem::Requirement
157
+ requirements:
158
+ - - "~>"
159
+ - !ruby/object:Gem::Version
160
+ version: 3.0.0
161
+ - !ruby/object:Gem::Dependency
162
+ name: font-awesome-sass
163
+ requirement: !ruby/object:Gem::Requirement
164
+ requirements:
165
+ - - '='
166
+ - !ruby/object:Gem::Version
167
+ version: 4.7.0
168
+ type: :runtime
169
+ prerelease: false
170
+ version_requirements: !ruby/object:Gem::Requirement
171
+ requirements:
172
+ - - '='
173
+ - !ruby/object:Gem::Version
174
+ version: 4.7.0
175
+ - !ruby/object:Gem::Dependency
176
+ name: handlebars_assets
177
+ requirement: !ruby/object:Gem::Requirement
178
+ requirements:
179
+ - - ">="
180
+ - !ruby/object:Gem::Version
181
+ version: '0'
182
+ type: :runtime
183
+ prerelease: false
184
+ version_requirements: !ruby/object:Gem::Requirement
185
+ requirements:
186
+ - - ">="
187
+ - !ruby/object:Gem::Version
188
+ version: '0'
189
+ - !ruby/object:Gem::Dependency
190
+ name: simple_form
191
+ requirement: !ruby/object:Gem::Requirement
192
+ requirements:
193
+ - - ">="
194
+ - !ruby/object:Gem::Version
195
+ version: '0'
196
+ type: :runtime
197
+ prerelease: false
198
+ version_requirements: !ruby/object:Gem::Requirement
199
+ requirements:
200
+ - - ">="
201
+ - !ruby/object:Gem::Version
202
+ version: '0'
203
+ - !ruby/object:Gem::Dependency
204
+ name: message_bus
205
+ requirement: !ruby/object:Gem::Requirement
206
+ requirements:
207
+ - - ">="
208
+ - !ruby/object:Gem::Version
209
+ version: '0'
210
+ type: :runtime
211
+ prerelease: false
212
+ version_requirements: !ruby/object:Gem::Requirement
213
+ requirements:
214
+ - - ">="
215
+ - !ruby/object:Gem::Version
216
+ version: '0'
217
+ - !ruby/object:Gem::Dependency
218
+ name: turbolinks
219
+ requirement: !ruby/object:Gem::Requirement
220
+ requirements:
221
+ - - ">="
222
+ - !ruby/object:Gem::Version
223
+ version: '0'
224
+ type: :runtime
225
+ prerelease: false
226
+ version_requirements: !ruby/object:Gem::Requirement
227
+ requirements:
228
+ - - ">="
229
+ - !ruby/object:Gem::Version
230
+ version: '0'
231
+ - !ruby/object:Gem::Dependency
232
+ name: sass-rails
233
+ requirement: !ruby/object:Gem::Requirement
234
+ requirements:
235
+ - - ">="
236
+ - !ruby/object:Gem::Version
237
+ version: '0'
238
+ type: :runtime
239
+ prerelease: false
240
+ version_requirements: !ruby/object:Gem::Requirement
241
+ requirements:
242
+ - - ">="
243
+ - !ruby/object:Gem::Version
244
+ version: '0'
245
+ - !ruby/object:Gem::Dependency
246
+ name: uglifier
247
+ requirement: !ruby/object:Gem::Requirement
248
+ requirements:
249
+ - - ">="
250
+ - !ruby/object:Gem::Version
251
+ version: '0'
252
+ type: :runtime
253
+ prerelease: false
254
+ version_requirements: !ruby/object:Gem::Requirement
255
+ requirements:
256
+ - - ">="
257
+ - !ruby/object:Gem::Version
258
+ version: '0'
259
+ - !ruby/object:Gem::Dependency
260
+ name: coffee-rails
261
+ requirement: !ruby/object:Gem::Requirement
262
+ requirements:
263
+ - - ">="
264
+ - !ruby/object:Gem::Version
265
+ version: '0'
266
+ type: :runtime
267
+ prerelease: false
268
+ version_requirements: !ruby/object:Gem::Requirement
269
+ requirements:
270
+ - - ">="
271
+ - !ruby/object:Gem::Version
272
+ version: '0'
273
+ - !ruby/object:Gem::Dependency
274
+ name: appraisal
275
+ requirement: !ruby/object:Gem::Requirement
276
+ requirements:
277
+ - - ">="
278
+ - !ruby/object:Gem::Version
279
+ version: '0'
280
+ type: :development
281
+ prerelease: false
282
+ version_requirements: !ruby/object:Gem::Requirement
283
+ requirements:
284
+ - - ">="
285
+ - !ruby/object:Gem::Version
286
+ version: '0'
287
+ - !ruby/object:Gem::Dependency
288
+ name: rspec-rails
289
+ requirement: !ruby/object:Gem::Requirement
290
+ requirements:
291
+ - - ">="
292
+ - !ruby/object:Gem::Version
293
+ version: '0'
294
+ type: :development
295
+ prerelease: false
296
+ version_requirements: !ruby/object:Gem::Requirement
297
+ requirements:
298
+ - - ">="
299
+ - !ruby/object:Gem::Version
300
+ version: '0'
301
+ - !ruby/object:Gem::Dependency
302
+ name: shoulda-matchers
303
+ requirement: !ruby/object:Gem::Requirement
304
+ requirements:
305
+ - - ">="
306
+ - !ruby/object:Gem::Version
307
+ version: '4'
308
+ type: :development
309
+ prerelease: false
310
+ version_requirements: !ruby/object:Gem::Requirement
311
+ requirements:
312
+ - - ">="
313
+ - !ruby/object:Gem::Version
314
+ version: '4'
315
+ - !ruby/object:Gem::Dependency
316
+ name: factory_girl_rails
317
+ requirement: !ruby/object:Gem::Requirement
318
+ requirements:
319
+ - - ">="
320
+ - !ruby/object:Gem::Version
321
+ version: '0'
322
+ type: :development
323
+ prerelease: false
324
+ version_requirements: !ruby/object:Gem::Requirement
325
+ requirements:
326
+ - - ">="
327
+ - !ruby/object:Gem::Version
328
+ version: '0'
329
+ - !ruby/object:Gem::Dependency
330
+ name: vcr
331
+ requirement: !ruby/object:Gem::Requirement
332
+ requirements:
333
+ - - ">="
334
+ - !ruby/object:Gem::Version
335
+ version: '0'
336
+ type: :development
337
+ prerelease: false
338
+ version_requirements: !ruby/object:Gem::Requirement
339
+ requirements:
340
+ - - ">="
341
+ - !ruby/object:Gem::Version
342
+ version: '0'
343
+ - !ruby/object:Gem::Dependency
344
+ name: webmock
345
+ requirement: !ruby/object:Gem::Requirement
346
+ requirements:
347
+ - - ">="
348
+ - !ruby/object:Gem::Version
349
+ version: '0'
350
+ type: :development
351
+ prerelease: false
352
+ version_requirements: !ruby/object:Gem::Requirement
353
+ requirements:
354
+ - - ">="
355
+ - !ruby/object:Gem::Version
356
+ version: '0'
357
+ - !ruby/object:Gem::Dependency
358
+ name: sqlite3
359
+ requirement: !ruby/object:Gem::Requirement
360
+ requirements:
361
+ - - "~>"
362
+ - !ruby/object:Gem::Version
363
+ version: '1.4'
364
+ type: :development
365
+ prerelease: false
366
+ version_requirements: !ruby/object:Gem::Requirement
367
+ requirements:
368
+ - - "~>"
369
+ - !ruby/object:Gem::Version
370
+ version: '1.4'
371
+ - !ruby/object:Gem::Dependency
372
+ name: rubocop
373
+ requirement: !ruby/object:Gem::Requirement
374
+ requirements:
375
+ - - ">="
376
+ - !ruby/object:Gem::Version
377
+ version: '0'
378
+ type: :development
379
+ prerelease: false
380
+ version_requirements: !ruby/object:Gem::Requirement
381
+ requirements:
382
+ - - ">="
383
+ - !ruby/object:Gem::Version
384
+ version: '0'
385
+ - !ruby/object:Gem::Dependency
386
+ name: pry-rails
387
+ requirement: !ruby/object:Gem::Requirement
388
+ requirements:
389
+ - - ">="
390
+ - !ruby/object:Gem::Version
391
+ version: '0'
392
+ type: :development
393
+ prerelease: false
394
+ version_requirements: !ruby/object:Gem::Requirement
395
+ requirements:
396
+ - - ">="
397
+ - !ruby/object:Gem::Version
398
+ version: '0'
399
+ - !ruby/object:Gem::Dependency
400
+ name: rails-controller-testing
401
+ requirement: !ruby/object:Gem::Requirement
402
+ requirements:
403
+ - - ">="
404
+ - !ruby/object:Gem::Version
405
+ version: '0'
406
+ type: :development
407
+ prerelease: false
408
+ version_requirements: !ruby/object:Gem::Requirement
409
+ requirements:
410
+ - - ">="
411
+ - !ruby/object:Gem::Version
412
+ version: '0'
413
+ description: A common base for creating BookingSync portal applications.
414
+ email:
415
+ - mandaryyyn@gmail.com
416
+ - dev@bookingsync.com
417
+ - artur@bookingsync.com
418
+ executables: []
419
+ extensions: []
420
+ extra_rdoc_files: []
421
+ files:
422
+ - MIT-LICENSE
423
+ - README.md
424
+ - Rakefile
425
+ - app/assets/config/manifest.js
426
+ - app/assets/images/bookingsync_portal/bookingsync.png
427
+ - app/assets/images/bookingsync_portal/help/connect.gif
428
+ - app/assets/javascripts/bookingsync_portal/admin/application.js.coffee
429
+ - app/assets/javascripts/bookingsync_portal/admin/connections.js.coffee
430
+ - app/assets/javascripts/bookingsync_portal/admin/handle_remote_errors.js.coffee
431
+ - app/assets/javascripts/bookingsync_portal/admin/lib/list-filter.js.coffee
432
+ - app/assets/javascripts/bookingsync_portal/admin/live_updates.js.coffee
433
+ - app/assets/javascripts/bookingsync_portal/admin/rentals.js.coffee
434
+ - app/assets/javascripts/bookingsync_portal/admin/templates/filter_input.hbs
435
+ - app/assets/javascripts/bookingsync_portal/admin/vendor/css-contains.js
436
+ - app/assets/stylesheets/bookingsync_portal/admin/application.scss
437
+ - app/controllers/bookingsync_portal/admin/base_controller.rb
438
+ - app/controllers/bookingsync_portal/admin/connections_controller.rb
439
+ - app/controllers/bookingsync_portal/admin/help_controller.rb
440
+ - app/controllers/bookingsync_portal/admin/remote_accounts_controller.rb
441
+ - app/controllers/bookingsync_portal/admin/rentals_controller.rb
442
+ - app/controllers/bookingsync_portal/application_controller.rb
443
+ - app/helpers/bookingsync_portal/admin/application_helper.rb
444
+ - app/models/bookingsync_portal/account.rb
445
+ - app/models/bookingsync_portal/connection.rb
446
+ - app/models/bookingsync_portal/photo.rb
447
+ - app/models/bookingsync_portal/rate.rb
448
+ - app/models/bookingsync_portal/remote_account.rb
449
+ - app/models/bookingsync_portal/remote_rental.rb
450
+ - app/models/bookingsync_portal/rental.rb
451
+ - app/synchronizers/bookingsync_portal/write/ensure_source_exists.rb
452
+ - app/synchronizers/bookingsync_portal/write/source.rb
453
+ - app/views/bookingsync_portal/admin/connections/create.js.coffee
454
+ - app/views/bookingsync_portal/admin/connections/destroy.js.coffee
455
+ - app/views/bookingsync_portal/admin/help/_help.html.erb
456
+ - app/views/bookingsync_portal/admin/help/index.html.erb
457
+ - app/views/bookingsync_portal/admin/remote_accounts/_form.html.erb
458
+ - app/views/bookingsync_portal/admin/remote_accounts/_how_to_connect.html.erb
459
+ - app/views/bookingsync_portal/admin/remote_accounts/new.html.erb
460
+ - app/views/bookingsync_portal/admin/rentals/_connected_rental.html.erb
461
+ - app/views/bookingsync_portal/admin/rentals/_new_remote_account.html.erb
462
+ - app/views/bookingsync_portal/admin/rentals/_new_remote_rental.html.erb
463
+ - app/views/bookingsync_portal/admin/rentals/_remote_rental.html.erb
464
+ - app/views/bookingsync_portal/admin/rentals/_rental.html.erb
465
+ - app/views/bookingsync_portal/admin/rentals/_rentals.html.erb
466
+ - app/views/bookingsync_portal/admin/rentals/index.html.erb
467
+ - app/views/bookingsync_portal/admin/rentals/show.js.erb
468
+ - app/views/layouts/bookingsync_portal/_flash.html.erb
469
+ - app/views/layouts/bookingsync_portal/_menu.html.erb
470
+ - app/views/layouts/bookingsync_portal/admin.html.erb
471
+ - app/views/layouts/bookingsync_portal/fullscreen/application.html.erb
472
+ - config/locales/en.yml
473
+ - config/routes.rb
474
+ - db/migrate/20150222172825_create_accounts.rb
475
+ - db/migrate/20150222173413_create_rentals.rb
476
+ - db/migrate/20150222173711_create_remote_accounts.rb
477
+ - db/migrate/20150222174023_create_remote_rentals.rb
478
+ - db/migrate/20150222174234_create_connections.rb
479
+ - db/migrate/20150520134912_create_photos.rb
480
+ - db/migrate/20150521091056_create_rates.rb
481
+ - db/migrate/20151210164752_add_synced_source_id_to_account.rb
482
+ - db/migrate/20160301141356_create_bookings.rb
483
+ - lib/bookingsync_portal.rb
484
+ - lib/bookingsync_portal/booking_map.rb
485
+ - lib/bookingsync_portal/engine.rb
486
+ - lib/bookingsync_portal/mash_serializer.rb
487
+ - lib/bookingsync_portal/version.rb
488
+ - lib/generators/bookingsync_portal/install_generator.rb
489
+ - lib/generators/templates/initializers/bookingsync_portal.rb
490
+ - lib/generators/templates/models/account.rb
491
+ - lib/generators/templates/models/connection.rb
492
+ - lib/generators/templates/models/photo.rb
493
+ - lib/generators/templates/models/rate.rb
494
+ - lib/generators/templates/models/remote_account.rb
495
+ - lib/generators/templates/models/remote_rental.rb
496
+ - lib/generators/templates/models/rental.rb
497
+ - lib/tasks/bookingsync_portal_tasks.rake
498
+ homepage: https://github.com/BookingSync/bookingsync_portal
499
+ licenses:
500
+ - MIT
501
+ metadata: {}
502
+ post_install_message:
503
+ rdoc_options: []
504
+ require_paths:
505
+ - lib
506
+ required_ruby_version: !ruby/object:Gem::Requirement
507
+ requirements:
508
+ - - ">="
509
+ - !ruby/object:Gem::Version
510
+ version: '0'
511
+ required_rubygems_version: !ruby/object:Gem::Requirement
512
+ requirements:
513
+ - - ">="
514
+ - !ruby/object:Gem::Version
515
+ version: '0'
516
+ requirements: []
517
+ rubygems_version: 3.0.1
518
+ signing_key:
519
+ specification_version: 4
520
+ summary: A common base for creating BookingSync portal applications.
521
+ test_files: []