bookingsync_portal 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
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: []