diff --git a/.gitignore b/.gitignore
index 5b61ab0..088b771 100644
--- a/.gitignore
+++ b/.gitignore
@@ -5,9 +5,47 @@
# git config --global core.excludesfile '~/.gitignore_global'
# Ignore bundler config.
-/.bundle
+/ribica-back-office/.bundle
# Ignore all logfiles and tempfiles.
-/log/*
-!/log/.keep
-/tmp
+/ribica-back-office/log/*
+!/ribica-back-office/log/.keep
+/ribica-back-office/tmp
+*.gem
+*.rbc
+/ribica-front-api/.config
+/ribica-front-api/coverage/
+/ribica-front-api/InstalledFiles
+/ribica-front-api/pkg/
+/ribica-front-api/spec/reports/
+/ribica-front-api/test/tmp/
+/ribica-front-api/test/version_tmp/
+/ribica-front-api/tmp/
+
+## Specific to RubyMotion:
+.dat*
+.repl_history
+build/
+
+## Documentation cache and generated files:
+/ribica-front-api/.yardoc/
+/ribica-front-api/_yardoc/
+/ribica-front-api/doc/
+/ribica-front-api/rdoc/
+
+## Environment normalisation:
+/ribica-front-api/.bundle/
+/ribica-front-api/lib/bundler/man/
+
+
+# for a library or gem, you might want to ignore these files since the code is
+# intended to run in multiple environments; otherwise, check them in:
+# Gemfile.lock
+# .ruby-version
+# .ruby-gemset
+
+# unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
+.rvmrc
+
+# everyone has it's own configuration :)
+config.rb
diff --git a/Gemfile b/ribica-back-office/Gemfile
similarity index 100%
rename from Gemfile
rename to ribica-back-office/Gemfile
diff --git a/Gemfile.lock b/ribica-back-office/Gemfile.lock
similarity index 100%
rename from Gemfile.lock
rename to ribica-back-office/Gemfile.lock
diff --git a/README.md b/ribica-back-office/README.md
similarity index 100%
rename from README.md
rename to ribica-back-office/README.md
diff --git a/Rakefile b/ribica-back-office/Rakefile
similarity index 100%
rename from Rakefile
rename to ribica-back-office/Rakefile
diff --git a/app/assets/images/.keep b/ribica-back-office/app/assets/images/.keep
similarity index 100%
rename from app/assets/images/.keep
rename to ribica-back-office/app/assets/images/.keep
diff --git a/app/assets/javascripts/application.js b/ribica-back-office/app/assets/javascripts/application.js
similarity index 100%
rename from app/assets/javascripts/application.js
rename to ribica-back-office/app/assets/javascripts/application.js
diff --git a/app/assets/stylesheets/application.css b/ribica-back-office/app/assets/stylesheets/application.css
similarity index 100%
rename from app/assets/stylesheets/application.css
rename to ribica-back-office/app/assets/stylesheets/application.css
diff --git a/app/controllers/application_controller.rb b/ribica-back-office/app/controllers/application_controller.rb
similarity index 100%
rename from app/controllers/application_controller.rb
rename to ribica-back-office/app/controllers/application_controller.rb
diff --git a/app/controllers/categories_controller.rb b/ribica-back-office/app/controllers/categories_controller.rb
similarity index 100%
rename from app/controllers/categories_controller.rb
rename to ribica-back-office/app/controllers/categories_controller.rb
diff --git a/app/controllers/concerns/.keep b/ribica-back-office/app/controllers/concerns/.keep
similarity index 100%
rename from app/controllers/concerns/.keep
rename to ribica-back-office/app/controllers/concerns/.keep
diff --git a/app/controllers/items_controller.rb b/ribica-back-office/app/controllers/items_controller.rb
similarity index 100%
rename from app/controllers/items_controller.rb
rename to ribica-back-office/app/controllers/items_controller.rb
diff --git a/app/controllers/media_types_controller.rb b/ribica-back-office/app/controllers/media_types_controller.rb
similarity index 100%
rename from app/controllers/media_types_controller.rb
rename to ribica-back-office/app/controllers/media_types_controller.rb
diff --git a/app/controllers/multi_media_descriptions_controller.rb b/ribica-back-office/app/controllers/multi_media_descriptions_controller.rb
similarity index 100%
rename from app/controllers/multi_media_descriptions_controller.rb
rename to ribica-back-office/app/controllers/multi_media_descriptions_controller.rb
diff --git a/app/controllers/sections_controller.rb b/ribica-back-office/app/controllers/sections_controller.rb
similarity index 100%
rename from app/controllers/sections_controller.rb
rename to ribica-back-office/app/controllers/sections_controller.rb
diff --git a/app/controllers/sub_categories_controller.rb b/ribica-back-office/app/controllers/sub_categories_controller.rb
similarity index 100%
rename from app/controllers/sub_categories_controller.rb
rename to ribica-back-office/app/controllers/sub_categories_controller.rb
diff --git a/app/controllers/units_controller.rb b/ribica-back-office/app/controllers/units_controller.rb
similarity index 100%
rename from app/controllers/units_controller.rb
rename to ribica-back-office/app/controllers/units_controller.rb
diff --git a/app/helpers/application_helper.rb b/ribica-back-office/app/helpers/application_helper.rb
similarity index 100%
rename from app/helpers/application_helper.rb
rename to ribica-back-office/app/helpers/application_helper.rb
diff --git a/app/helpers/categories_helper.rb b/ribica-back-office/app/helpers/categories_helper.rb
similarity index 100%
rename from app/helpers/categories_helper.rb
rename to ribica-back-office/app/helpers/categories_helper.rb
diff --git a/app/helpers/items_helper.rb b/ribica-back-office/app/helpers/items_helper.rb
similarity index 100%
rename from app/helpers/items_helper.rb
rename to ribica-back-office/app/helpers/items_helper.rb
diff --git a/app/helpers/media_types_helper.rb b/ribica-back-office/app/helpers/media_types_helper.rb
similarity index 100%
rename from app/helpers/media_types_helper.rb
rename to ribica-back-office/app/helpers/media_types_helper.rb
diff --git a/app/helpers/multi_media_descriptions_helper.rb b/ribica-back-office/app/helpers/multi_media_descriptions_helper.rb
similarity index 100%
rename from app/helpers/multi_media_descriptions_helper.rb
rename to ribica-back-office/app/helpers/multi_media_descriptions_helper.rb
diff --git a/app/helpers/sections_helper.rb b/ribica-back-office/app/helpers/sections_helper.rb
similarity index 100%
rename from app/helpers/sections_helper.rb
rename to ribica-back-office/app/helpers/sections_helper.rb
diff --git a/app/helpers/sub_categories_helper.rb b/ribica-back-office/app/helpers/sub_categories_helper.rb
similarity index 100%
rename from app/helpers/sub_categories_helper.rb
rename to ribica-back-office/app/helpers/sub_categories_helper.rb
diff --git a/app/helpers/units_helper.rb b/ribica-back-office/app/helpers/units_helper.rb
similarity index 100%
rename from app/helpers/units_helper.rb
rename to ribica-back-office/app/helpers/units_helper.rb
diff --git a/app/mailers/.keep b/ribica-back-office/app/mailers/.keep
similarity index 100%
rename from app/mailers/.keep
rename to ribica-back-office/app/mailers/.keep
diff --git a/app/models/.keep b/ribica-back-office/app/models/.keep
similarity index 100%
rename from app/models/.keep
rename to ribica-back-office/app/models/.keep
diff --git a/app/models/category.rb b/ribica-back-office/app/models/category.rb
similarity index 100%
rename from app/models/category.rb
rename to ribica-back-office/app/models/category.rb
diff --git a/app/models/concerns/.keep b/ribica-back-office/app/models/concerns/.keep
similarity index 100%
rename from app/models/concerns/.keep
rename to ribica-back-office/app/models/concerns/.keep
diff --git a/app/models/item.rb b/ribica-back-office/app/models/item.rb
similarity index 100%
rename from app/models/item.rb
rename to ribica-back-office/app/models/item.rb
diff --git a/app/models/media_type.rb b/ribica-back-office/app/models/media_type.rb
similarity index 100%
rename from app/models/media_type.rb
rename to ribica-back-office/app/models/media_type.rb
diff --git a/app/models/multi_media_description.rb b/ribica-back-office/app/models/multi_media_description.rb
similarity index 100%
rename from app/models/multi_media_description.rb
rename to ribica-back-office/app/models/multi_media_description.rb
diff --git a/app/models/section.rb b/ribica-back-office/app/models/section.rb
similarity index 100%
rename from app/models/section.rb
rename to ribica-back-office/app/models/section.rb
diff --git a/app/models/sub_category.rb b/ribica-back-office/app/models/sub_category.rb
similarity index 100%
rename from app/models/sub_category.rb
rename to ribica-back-office/app/models/sub_category.rb
diff --git a/app/models/unit.rb b/ribica-back-office/app/models/unit.rb
similarity index 100%
rename from app/models/unit.rb
rename to ribica-back-office/app/models/unit.rb
diff --git a/app/views/layouts/application.html.erb b/ribica-back-office/app/views/layouts/application.html.erb
similarity index 100%
rename from app/views/layouts/application.html.erb
rename to ribica-back-office/app/views/layouts/application.html.erb
diff --git a/bin/bundle b/ribica-back-office/bin/bundle
similarity index 100%
rename from bin/bundle
rename to ribica-back-office/bin/bundle
diff --git a/bin/rails b/ribica-back-office/bin/rails
similarity index 100%
rename from bin/rails
rename to ribica-back-office/bin/rails
diff --git a/bin/rake b/ribica-back-office/bin/rake
similarity index 100%
rename from bin/rake
rename to ribica-back-office/bin/rake
diff --git a/bin/setup b/ribica-back-office/bin/setup
similarity index 100%
rename from bin/setup
rename to ribica-back-office/bin/setup
diff --git a/bin/spring b/ribica-back-office/bin/spring
similarity index 100%
rename from bin/spring
rename to ribica-back-office/bin/spring
diff --git a/config.ru b/ribica-back-office/config.ru
similarity index 100%
rename from config.ru
rename to ribica-back-office/config.ru
diff --git a/config/application.rb b/ribica-back-office/config/application.rb
similarity index 100%
rename from config/application.rb
rename to ribica-back-office/config/application.rb
diff --git a/config/boot.rb b/ribica-back-office/config/boot.rb
similarity index 100%
rename from config/boot.rb
rename to ribica-back-office/config/boot.rb
diff --git a/config/cloudinary.yml b/ribica-back-office/config/cloudinary.yml
similarity index 100%
rename from config/cloudinary.yml
rename to ribica-back-office/config/cloudinary.yml
diff --git a/config/database.yml b/ribica-back-office/config/database.yml
similarity index 100%
rename from config/database.yml
rename to ribica-back-office/config/database.yml
diff --git a/config/environment.rb b/ribica-back-office/config/environment.rb
similarity index 100%
rename from config/environment.rb
rename to ribica-back-office/config/environment.rb
diff --git a/config/environments/development.rb b/ribica-back-office/config/environments/development.rb
similarity index 100%
rename from config/environments/development.rb
rename to ribica-back-office/config/environments/development.rb
diff --git a/config/environments/production.rb b/ribica-back-office/config/environments/production.rb
similarity index 100%
rename from config/environments/production.rb
rename to ribica-back-office/config/environments/production.rb
diff --git a/config/environments/test.rb b/ribica-back-office/config/environments/test.rb
similarity index 100%
rename from config/environments/test.rb
rename to ribica-back-office/config/environments/test.rb
diff --git a/config/initializers/assets.rb b/ribica-back-office/config/initializers/assets.rb
similarity index 100%
rename from config/initializers/assets.rb
rename to ribica-back-office/config/initializers/assets.rb
diff --git a/config/initializers/backtrace_silencers.rb b/ribica-back-office/config/initializers/backtrace_silencers.rb
similarity index 100%
rename from config/initializers/backtrace_silencers.rb
rename to ribica-back-office/config/initializers/backtrace_silencers.rb
diff --git a/config/initializers/cookies_serializer.rb b/ribica-back-office/config/initializers/cookies_serializer.rb
similarity index 100%
rename from config/initializers/cookies_serializer.rb
rename to ribica-back-office/config/initializers/cookies_serializer.rb
diff --git a/config/initializers/filter_parameter_logging.rb b/ribica-back-office/config/initializers/filter_parameter_logging.rb
similarity index 100%
rename from config/initializers/filter_parameter_logging.rb
rename to ribica-back-office/config/initializers/filter_parameter_logging.rb
diff --git a/config/initializers/inflections.rb b/ribica-back-office/config/initializers/inflections.rb
similarity index 100%
rename from config/initializers/inflections.rb
rename to ribica-back-office/config/initializers/inflections.rb
diff --git a/config/initializers/mime_types.rb b/ribica-back-office/config/initializers/mime_types.rb
similarity index 100%
rename from config/initializers/mime_types.rb
rename to ribica-back-office/config/initializers/mime_types.rb
diff --git a/config/initializers/session_store.rb b/ribica-back-office/config/initializers/session_store.rb
similarity index 100%
rename from config/initializers/session_store.rb
rename to ribica-back-office/config/initializers/session_store.rb
diff --git a/config/initializers/wrap_parameters.rb b/ribica-back-office/config/initializers/wrap_parameters.rb
similarity index 100%
rename from config/initializers/wrap_parameters.rb
rename to ribica-back-office/config/initializers/wrap_parameters.rb
diff --git a/config/locales/en.yml b/ribica-back-office/config/locales/en.yml
similarity index 100%
rename from config/locales/en.yml
rename to ribica-back-office/config/locales/en.yml
diff --git a/config/routes.rb b/ribica-back-office/config/routes.rb
similarity index 100%
rename from config/routes.rb
rename to ribica-back-office/config/routes.rb
diff --git a/config/secrets.yml b/ribica-back-office/config/secrets.yml
similarity index 100%
rename from config/secrets.yml
rename to ribica-back-office/config/secrets.yml
diff --git a/db/seeds.rb b/ribica-back-office/db/seeds.rb
similarity index 100%
rename from db/seeds.rb
rename to ribica-back-office/db/seeds.rb
diff --git a/lib/assets/.keep b/ribica-back-office/lib/assets/.keep
similarity index 100%
rename from lib/assets/.keep
rename to ribica-back-office/lib/assets/.keep
diff --git a/lib/tasks/.keep b/ribica-back-office/lib/tasks/.keep
similarity index 100%
rename from lib/tasks/.keep
rename to ribica-back-office/lib/tasks/.keep
diff --git a/log/.keep b/ribica-back-office/log/.keep
similarity index 100%
rename from log/.keep
rename to ribica-back-office/log/.keep
diff --git a/public/404.html b/ribica-back-office/public/404.html
similarity index 100%
rename from public/404.html
rename to ribica-back-office/public/404.html
diff --git a/public/422.html b/ribica-back-office/public/422.html
similarity index 100%
rename from public/422.html
rename to ribica-back-office/public/422.html
diff --git a/public/500.html b/ribica-back-office/public/500.html
similarity index 100%
rename from public/500.html
rename to ribica-back-office/public/500.html
diff --git a/public/favicon.ico b/ribica-back-office/public/favicon.ico
similarity index 100%
rename from public/favicon.ico
rename to ribica-back-office/public/favicon.ico
diff --git a/public/robots.txt b/ribica-back-office/public/robots.txt
similarity index 100%
rename from public/robots.txt
rename to ribica-back-office/public/robots.txt
diff --git a/test/controllers/.keep b/ribica-back-office/test/controllers/.keep
similarity index 100%
rename from test/controllers/.keep
rename to ribica-back-office/test/controllers/.keep
diff --git a/test/controllers/categories_controller_test.rb b/ribica-back-office/test/controllers/categories_controller_test.rb
similarity index 100%
rename from test/controllers/categories_controller_test.rb
rename to ribica-back-office/test/controllers/categories_controller_test.rb
diff --git a/test/controllers/items_controller_test.rb b/ribica-back-office/test/controllers/items_controller_test.rb
similarity index 100%
rename from test/controllers/items_controller_test.rb
rename to ribica-back-office/test/controllers/items_controller_test.rb
diff --git a/test/controllers/media_types_controller_test.rb b/ribica-back-office/test/controllers/media_types_controller_test.rb
similarity index 100%
rename from test/controllers/media_types_controller_test.rb
rename to ribica-back-office/test/controllers/media_types_controller_test.rb
diff --git a/test/controllers/multi_media_descriptions_controller_test.rb b/ribica-back-office/test/controllers/multi_media_descriptions_controller_test.rb
similarity index 100%
rename from test/controllers/multi_media_descriptions_controller_test.rb
rename to ribica-back-office/test/controllers/multi_media_descriptions_controller_test.rb
diff --git a/test/controllers/sections_controller_test.rb b/ribica-back-office/test/controllers/sections_controller_test.rb
similarity index 100%
rename from test/controllers/sections_controller_test.rb
rename to ribica-back-office/test/controllers/sections_controller_test.rb
diff --git a/test/controllers/sub_categories_controller_test.rb b/ribica-back-office/test/controllers/sub_categories_controller_test.rb
similarity index 100%
rename from test/controllers/sub_categories_controller_test.rb
rename to ribica-back-office/test/controllers/sub_categories_controller_test.rb
diff --git a/test/controllers/units_controller_test.rb b/ribica-back-office/test/controllers/units_controller_test.rb
similarity index 100%
rename from test/controllers/units_controller_test.rb
rename to ribica-back-office/test/controllers/units_controller_test.rb
diff --git a/test/fixtures/.keep b/ribica-back-office/test/fixtures/.keep
similarity index 100%
rename from test/fixtures/.keep
rename to ribica-back-office/test/fixtures/.keep
diff --git a/test/fixtures/categories.yml b/ribica-back-office/test/fixtures/categories.yml
similarity index 100%
rename from test/fixtures/categories.yml
rename to ribica-back-office/test/fixtures/categories.yml
diff --git a/test/fixtures/items.yml b/ribica-back-office/test/fixtures/items.yml
similarity index 100%
rename from test/fixtures/items.yml
rename to ribica-back-office/test/fixtures/items.yml
diff --git a/test/fixtures/media_types.yml b/ribica-back-office/test/fixtures/media_types.yml
similarity index 100%
rename from test/fixtures/media_types.yml
rename to ribica-back-office/test/fixtures/media_types.yml
diff --git a/test/fixtures/multi_media_descriptions.yml b/ribica-back-office/test/fixtures/multi_media_descriptions.yml
similarity index 100%
rename from test/fixtures/multi_media_descriptions.yml
rename to ribica-back-office/test/fixtures/multi_media_descriptions.yml
diff --git a/test/fixtures/sections.yml b/ribica-back-office/test/fixtures/sections.yml
similarity index 100%
rename from test/fixtures/sections.yml
rename to ribica-back-office/test/fixtures/sections.yml
diff --git a/test/fixtures/sub_categories.yml b/ribica-back-office/test/fixtures/sub_categories.yml
similarity index 100%
rename from test/fixtures/sub_categories.yml
rename to ribica-back-office/test/fixtures/sub_categories.yml
diff --git a/test/fixtures/units.yml b/ribica-back-office/test/fixtures/units.yml
similarity index 100%
rename from test/fixtures/units.yml
rename to ribica-back-office/test/fixtures/units.yml
diff --git a/test/helpers/.keep b/ribica-back-office/test/helpers/.keep
similarity index 100%
rename from test/helpers/.keep
rename to ribica-back-office/test/helpers/.keep
diff --git a/test/integration/.keep b/ribica-back-office/test/integration/.keep
similarity index 100%
rename from test/integration/.keep
rename to ribica-back-office/test/integration/.keep
diff --git a/test/mailers/.keep b/ribica-back-office/test/mailers/.keep
similarity index 100%
rename from test/mailers/.keep
rename to ribica-back-office/test/mailers/.keep
diff --git a/test/models/.keep b/ribica-back-office/test/models/.keep
similarity index 100%
rename from test/models/.keep
rename to ribica-back-office/test/models/.keep
diff --git a/test/models/category_test.rb b/ribica-back-office/test/models/category_test.rb
similarity index 100%
rename from test/models/category_test.rb
rename to ribica-back-office/test/models/category_test.rb
diff --git a/test/models/item_test.rb b/ribica-back-office/test/models/item_test.rb
similarity index 100%
rename from test/models/item_test.rb
rename to ribica-back-office/test/models/item_test.rb
diff --git a/test/models/media_type_test.rb b/ribica-back-office/test/models/media_type_test.rb
similarity index 100%
rename from test/models/media_type_test.rb
rename to ribica-back-office/test/models/media_type_test.rb
diff --git a/test/models/multi_media_description_test.rb b/ribica-back-office/test/models/multi_media_description_test.rb
similarity index 100%
rename from test/models/multi_media_description_test.rb
rename to ribica-back-office/test/models/multi_media_description_test.rb
diff --git a/test/models/section_test.rb b/ribica-back-office/test/models/section_test.rb
similarity index 100%
rename from test/models/section_test.rb
rename to ribica-back-office/test/models/section_test.rb
diff --git a/test/models/sub_category_test.rb b/ribica-back-office/test/models/sub_category_test.rb
similarity index 100%
rename from test/models/sub_category_test.rb
rename to ribica-back-office/test/models/sub_category_test.rb
diff --git a/test/models/unit_test.rb b/ribica-back-office/test/models/unit_test.rb
similarity index 100%
rename from test/models/unit_test.rb
rename to ribica-back-office/test/models/unit_test.rb
diff --git a/test/test_helper.rb b/ribica-back-office/test/test_helper.rb
similarity index 100%
rename from test/test_helper.rb
rename to ribica-back-office/test/test_helper.rb
diff --git a/vendor/assets/javascripts/.keep b/ribica-back-office/vendor/assets/javascripts/.keep
similarity index 100%
rename from vendor/assets/javascripts/.keep
rename to ribica-back-office/vendor/assets/javascripts/.keep
diff --git a/vendor/assets/stylesheets/.keep b/ribica-back-office/vendor/assets/stylesheets/.keep
similarity index 100%
rename from vendor/assets/stylesheets/.keep
rename to ribica-back-office/vendor/assets/stylesheets/.keep
diff --git a/ribica-front-api/.DS_Store b/ribica-front-api/.DS_Store
new file mode 100644
index 0000000..6880bbc
Binary files /dev/null and b/ribica-front-api/.DS_Store differ
diff --git a/ribica-front-api/.gitignore b/ribica-front-api/.gitignore
new file mode 100644
index 0000000..1151a5b
--- /dev/null
+++ b/ribica-front-api/.gitignore
@@ -0,0 +1,38 @@
+*.gem
+*.rbc
+/.config
+/coverage/
+/InstalledFiles
+/pkg/
+/spec/reports/
+/test/tmp/
+/test/version_tmp/
+/tmp/
+
+## Specific to RubyMotion:
+.dat*
+.repl_history
+build/
+
+## Documentation cache and generated files:
+/.yardoc/
+/_yardoc/
+/doc/
+/rdoc/
+
+## Environment normalisation:
+/.bundle/
+/lib/bundler/man/
+
+
+# for a library or gem, you might want to ignore these files since the code is
+# intended to run in multiple environments; otherwise, check them in:
+# Gemfile.lock
+# .ruby-version
+# .ruby-gemset
+
+# unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
+.rvmrc
+
+# everyone has it's on configuration :)
+config.rb
\ No newline at end of file
diff --git a/ribica-front-api/Gemfile b/ribica-front-api/Gemfile
new file mode 100644
index 0000000..29600e5
--- /dev/null
+++ b/ribica-front-api/Gemfile
@@ -0,0 +1,22 @@
+source 'https://rubygems.org'
+
+
+
+platform :jruby do
+ gem 'activerecord-jdbcpostgresql-adapter'
+ gem 'jruby-openssl'
+
+end
+
+platform :ruby do
+ gem 'pg'
+
+ gem "activerecord"
+end
+
+
+gem "sinatra"
+
+gem "sinatra-activerecord"
+gem "json"
+gem 'puma'
diff --git a/ribica-front-api/Gemfile.lock b/ribica-front-api/Gemfile.lock
new file mode 100644
index 0000000..f9c7608
--- /dev/null
+++ b/ribica-front-api/Gemfile.lock
@@ -0,0 +1,63 @@
+GEM
+ remote: https://rubygems.org/
+ specs:
+ activemodel (4.2.0)
+ activesupport (= 4.2.0)
+ builder (~> 3.1)
+ activerecord (4.2.0)
+ activemodel (= 4.2.0)
+ activesupport (= 4.2.0)
+ arel (~> 6.0)
+ activerecord-jdbc-adapter (1.3.13)
+ activerecord (>= 2.2)
+ activerecord-jdbcpostgresql-adapter (1.3.13)
+ activerecord-jdbc-adapter (~> 1.3.13)
+ jdbc-postgres (>= 9.1)
+ activesupport (4.2.0)
+ i18n (~> 0.7)
+ json (~> 1.7, >= 1.7.7)
+ minitest (~> 5.1)
+ thread_safe (~> 0.3, >= 0.3.4)
+ tzinfo (~> 1.1)
+ arel (6.0.0)
+ builder (3.2.2)
+ i18n (0.7.0)
+ jdbc-postgres (9.3.1102)
+ jruby-openssl (0.9.6-java)
+ json (1.8.1)
+ json (1.8.1-java)
+ minitest (5.5.0)
+ pg (0.17.1)
+ puma (2.10.2)
+ rack (>= 1.1, < 2.0)
+ puma (2.10.2-java)
+ rack (>= 1.1, < 2.0)
+ rack (1.6.0)
+ rack-protection (1.5.3)
+ rack
+ sinatra (1.4.5)
+ rack (~> 1.4)
+ rack-protection (~> 1.4)
+ tilt (~> 1.3, >= 1.3.4)
+ sinatra-activerecord (2.0.3)
+ activerecord (>= 3.2)
+ sinatra (~> 1.0)
+ thread_safe (0.3.4)
+ thread_safe (0.3.4-java)
+ tilt (1.4.1)
+ tzinfo (1.2.2)
+ thread_safe (~> 0.1)
+
+PLATFORMS
+ java
+ ruby
+
+DEPENDENCIES
+ activerecord
+ activerecord-jdbcpostgresql-adapter
+ jruby-openssl
+ json
+ pg
+ puma
+ sinatra
+ sinatra-activerecord
diff --git a/ribica-front-api/README.md b/ribica-front-api/README.md
new file mode 100644
index 0000000..d12b801
--- /dev/null
+++ b/ribica-front-api/README.md
@@ -0,0 +1,34 @@
+# Ribica front office API
+
+## Getting started:
+
+1. install postgresql and libraries (for native 'pg' gem to be able to compile)
+2. run `bundle install`
+3. create postgresql user protected with password
+4. create postgresql database
+5. copy config.rb.example to config.rb and change the information inside of it
+6. run `rake db:schema:load`
+7. run `gem install rerun`
+
+## Running dev server (with autoreloading)
+
+1. run `rerun ruby app.rb`
+
+## Generating migrations
+
+Sinatra has a different syntax than rails to generate migration:
+
+`rake db:create_migration NAME=create_categories`
+
+## Handling shared models
+
+Some of models will necesarrily be shared between front and back office.
+Migrations for those models *must be in front office* and
+back office will just have a model file with custom code if needed.
+
+When generating active scaffold - migration is generated by default so it
+needs to be removed before using it.
+
+
+
+
diff --git a/ribica-front-api/app.rb b/ribica-front-api/app.rb
new file mode 100644
index 0000000..460aa9a
--- /dev/null
+++ b/ribica-front-api/app.rb
@@ -0,0 +1,21 @@
+require 'sinatra'
+require 'sinatra/activerecord'
+require './config'
+require 'json'
+
+Dir[File.dirname(__FILE__) + '/models/*.rb'].each {|file| require file }
+
+set :bind, '0.0.0.0'
+
+before do
+ content_type :json
+ # TODO: before running to production change this so that only specific
+ # domain is allowed
+ headers 'Access-Control-Allow-Origin' => '*',
+ 'Access-Control-Allow-Methods' => ['OPTIONS', 'GET', 'POST']
+end
+
+
+Dir[File.dirname(__FILE__) + '/controllers/*.rb'].each {|file| require file }
+
+
diff --git a/ribica-front-api/config.rb.example b/ribica-front-api/config.rb.example
new file mode 100644
index 0000000..b1b8bdf
--- /dev/null
+++ b/ribica-front-api/config.rb.example
@@ -0,0 +1,12 @@
+db = URI.parse('postgres://postgres:testni_hamo2@localhost/ribica')
+
+
+
+ActiveRecord::Base.establish_connection(
+ :adapter => db.scheme == 'postgres' ? 'postgresql' : db.scheme,
+ :host => db.host,
+ :username => db.user,
+ :password => db.password,
+ :database => db.path[1..-1],
+ :encoding => 'utf8'
+)
diff --git a/ribica-front-api/config.ru b/ribica-front-api/config.ru
new file mode 100644
index 0000000..76a6edf
--- /dev/null
+++ b/ribica-front-api/config.ru
@@ -0,0 +1,2 @@
+require './app'
+run Sinatra::Application
diff --git a/ribica-front-api/controllers/category.rb b/ribica-front-api/controllers/category.rb
new file mode 100644
index 0000000..fa6a47d
--- /dev/null
+++ b/ribica-front-api/controllers/category.rb
@@ -0,0 +1,10 @@
+
+
+get '/category' do
+ Category.order(:name).all.to_json(include: :sub_categories)
+end
+
+get '/category/:id' do
+ id = params[:id].to_i
+ Category.find(id).to_json(include: :sub_categories)
+end
\ No newline at end of file
diff --git a/ribica-front-api/controllers/common_for_controllers.rb b/ribica-front-api/controllers/common_for_controllers.rb
new file mode 100644
index 0000000..a66ccd9
--- /dev/null
+++ b/ribica-front-api/controllers/common_for_controllers.rb
@@ -0,0 +1,5 @@
+
+# converts list of parameters to array of integers
+def mass_to_i(*id_strings)
+ id_strings.map(&:to_i)
+end
\ No newline at end of file
diff --git a/ribica-front-api/controllers/item.rb b/ribica-front-api/controllers/item.rb
new file mode 100644
index 0000000..d4a27dc
--- /dev/null
+++ b/ribica-front-api/controllers/item.rb
@@ -0,0 +1,67 @@
+
+
+def prepare_items_for_mass_display(items)
+ items.to_json(
+ :except => [:created_at, :current_input_price, :stock, :on_display],
+ :include => [
+ :unit ,
+ :multi_media_descriptions ,
+ :sub_category
+ ])
+end
+
+
+
+
+def offset_and_limit_invalid?(offset, limit)
+ offset < 0 or limit <= 0 or limit > 100
+end
+
+
+# gets single item for detailed display (like comments etc. ) # TODO: change when comments are added
+get '/item/:id' do |id_s|
+ item = Item.find(id_s.to_i)
+
+ prepare_items_for_mass_display(item)
+end
+
+
+# gets items regardless of classification ( useful for frontpage )
+get '/item/offset/:offset/limit/:limit' do |offset_s, limit_s|
+ offset, limit = mass_to_i(offset_s, limit_s)
+ return [].to_json if offset_and_limit_invalid?(offset,limit)
+
+ items = Item.best_selling(offset,limit)
+ prepare_items_for_mass_display(items)
+end
+
+
+# gets items in section ( useful for page showing single section )
+get '/item/section/:section_id/offset/:offset/limit/:limit' do |section_id_s, offset_s, limit_s|
+ section_id, offset, limit = mass_to_i(section_id_s, offset_s, limit_s)
+ input_invalid = offset_and_limit_invalid?(offset,limit) or section_id <= 0
+ return [].to_json if input_invalid
+
+ items = Item.best_selling_in_section(section_id, offset, limit)
+ prepare_items_for_mass_display(items)
+end
+
+# gets items in category ( useful for page showing single category )
+get '/item/category/:category_id/offset/:offset/limit/:limit' do |category_id_s, offset_s, limit_s|
+ category_id, offset, limit = mass_to_i(category_id_s, offset_s, limit_s)
+ input_invalid = offset_and_limit_invalid?(offset,limit) or category_id <= 0
+ return [].to_json if input_invalid
+
+ items = Item.best_selling_in_category(category_id, offset,limit)
+ prepare_items_for_mass_display(items)
+end
+
+# gets items in sub category ( useful for page showing single sub_category )
+get '/item/sub_category/:sub_category_id/offset/:offset/limit/:limit' do |sub_category_id_s, offset_s, limit_s|
+ sub_category_id, offset, limit = mass_to_i(sub_category_id_s, offset_s, limit_s)
+ input_invalid = offset_and_limit_invalid?(offset,limit) or sub_category_id <= 0
+ return [].to_json if input_invalid
+
+ items = Item.best_selling_in_sub_category(sub_category_id, offset, limit)
+ prepare_items_for_mass_display(items)
+end
\ No newline at end of file
diff --git a/ribica-front-api/controllers/section.rb b/ribica-front-api/controllers/section.rb
new file mode 100644
index 0000000..eb22147
--- /dev/null
+++ b/ribica-front-api/controllers/section.rb
@@ -0,0 +1,10 @@
+get '/section' do
+ Section.order(:name).all.to_json(:include =>
+ [:categories => { :include => :sub_categories }])
+end
+
+get '/section/:id' do
+ Section.find(params[:id].to_i).to_json(:include => [
+ :categories => { :include => :sub_categories } ])
+
+end
diff --git a/ribica-front-api/db/migrate/20150114051135_create_categories.rb b/ribica-front-api/db/migrate/20150114051135_create_categories.rb
new file mode 100644
index 0000000..5969c73
--- /dev/null
+++ b/ribica-front-api/db/migrate/20150114051135_create_categories.rb
@@ -0,0 +1,7 @@
+class CreateCategories < ActiveRecord::Migration
+ def change
+ create_table :categories do |t|
+ t.string :name
+ end
+ end
+end
diff --git a/ribica-front-api/db/migrate/20150116055430_create_sub_categories.rb b/ribica-front-api/db/migrate/20150116055430_create_sub_categories.rb
new file mode 100644
index 0000000..5a84c3d
--- /dev/null
+++ b/ribica-front-api/db/migrate/20150116055430_create_sub_categories.rb
@@ -0,0 +1,8 @@
+class CreateSubCategories < ActiveRecord::Migration
+ def change
+ create_table :sub_categories do |t|
+ t.string :name
+ t.integer :category_id
+ end
+ end
+end
diff --git a/ribica-front-api/db/migrate/20150117094552_create_sections.rb b/ribica-front-api/db/migrate/20150117094552_create_sections.rb
new file mode 100644
index 0000000..23a6cf2
--- /dev/null
+++ b/ribica-front-api/db/migrate/20150117094552_create_sections.rb
@@ -0,0 +1,7 @@
+class CreateSections < ActiveRecord::Migration
+ def change
+ create_table :sections do |t|
+ t.string :name
+ end
+ end
+end
diff --git a/ribica-front-api/db/migrate/20150117100744_add_sectionid_to_categories.rb b/ribica-front-api/db/migrate/20150117100744_add_sectionid_to_categories.rb
new file mode 100644
index 0000000..8e06760
--- /dev/null
+++ b/ribica-front-api/db/migrate/20150117100744_add_sectionid_to_categories.rb
@@ -0,0 +1,9 @@
+class AddSectionidToCategories < ActiveRecord::Migration
+ def self.up
+ add_column :categories, :section_id, :integer
+ end
+
+ def self.down
+ remove_column :categories, :section_id
+ end
+end
diff --git a/ribica-front-api/db/migrate/20150118035004_create_units.rb b/ribica-front-api/db/migrate/20150118035004_create_units.rb
new file mode 100644
index 0000000..0a64bb2
--- /dev/null
+++ b/ribica-front-api/db/migrate/20150118035004_create_units.rb
@@ -0,0 +1,8 @@
+class CreateUnits < ActiveRecord::Migration
+ def change
+ create_table :units do |t|
+ t.string :name
+ t.string :short_name, limit: 4
+ end
+ end
+end
diff --git a/ribica-front-api/db/migrate/20150118040134_create_items.rb b/ribica-front-api/db/migrate/20150118040134_create_items.rb
new file mode 100644
index 0000000..f7bab85
--- /dev/null
+++ b/ribica-front-api/db/migrate/20150118040134_create_items.rb
@@ -0,0 +1,18 @@
+class CreateItems < ActiveRecord::Migration
+ def change
+ create_table :items do |t|
+ t.string :name
+ t.string :code, limit: 10
+ t.decimal :current_input_price, precision: 5, scale: 2
+ t.decimal :list_price, precision: 5, scale: 2
+ t.integer :unit_id
+ t.decimal :units_in_pack, precision: 5, scale: 3
+ t.text :description
+ t.integer :sub_category_id
+ t.integer :stock
+ t.boolean :on_display
+
+ t.timestamps null: false
+ end
+ end
+end
diff --git a/ribica-front-api/db/migrate/20150118041606_create_media_types.rb b/ribica-front-api/db/migrate/20150118041606_create_media_types.rb
new file mode 100644
index 0000000..76e4bc7
--- /dev/null
+++ b/ribica-front-api/db/migrate/20150118041606_create_media_types.rb
@@ -0,0 +1,7 @@
+class CreateMediaTypes < ActiveRecord::Migration
+ def change
+ create_table :media_types do |t|
+ t.string :name
+ end
+ end
+end
diff --git a/ribica-front-api/db/migrate/20150118054718_create_multi_media_descriptions.rb b/ribica-front-api/db/migrate/20150118054718_create_multi_media_descriptions.rb
new file mode 100644
index 0000000..b7987f6
--- /dev/null
+++ b/ribica-front-api/db/migrate/20150118054718_create_multi_media_descriptions.rb
@@ -0,0 +1,11 @@
+class CreateMultiMediaDescriptions < ActiveRecord::Migration
+ def change
+ create_table :multi_media_descriptions do |t|
+ t.string :url
+ t.integer :item_id
+ t.integer :media_type_id
+
+ t.timestamps null: false
+ end
+ end
+end
diff --git a/ribica-front-api/db/migrate/20150118082022_add_tags_to_item.rb b/ribica-front-api/db/migrate/20150118082022_add_tags_to_item.rb
new file mode 100644
index 0000000..c3bf0e4
--- /dev/null
+++ b/ribica-front-api/db/migrate/20150118082022_add_tags_to_item.rb
@@ -0,0 +1,5 @@
+class AddTagsToItem < ActiveRecord::Migration
+ def change
+ add_column :items, :tags, :string
+ end
+end
diff --git a/ribica-front-api/db/schema.rb b/ribica-front-api/db/schema.rb
new file mode 100644
index 0000000..f8c845f
--- /dev/null
+++ b/ribica-front-api/db/schema.rb
@@ -0,0 +1,68 @@
+# encoding: UTF-8
+# This file is auto-generated from the current state of the database. Instead
+# of editing this file, please use the migrations feature of Active Record to
+# incrementally modify your database, and then regenerate this schema definition.
+#
+# Note that this schema.rb definition is the authoritative source for your
+# database schema. If you need to create the application database on another
+# system, you should be using db:schema:load, not running all the migrations
+# from scratch. The latter is a flawed and unsustainable approach (the more migrations
+# you'll amass, the slower it'll run and the greater likelihood for issues).
+#
+# It's strongly recommended that you check this file into your version control system.
+
+ActiveRecord::Schema.define(version: 20150118082022) do
+
+ # These are extensions that must be enabled in order to support this database
+ enable_extension "plpgsql"
+
+ create_table "categories", force: :cascade do |t|
+ t.string "name"
+ t.integer "section_id"
+ end
+
+ create_table "items", force: :cascade do |t|
+ t.string "name"
+ t.string "code", limit: 10
+ t.decimal "current_input_price", precision: 5, scale: 2
+ t.decimal "list_price", precision: 5, scale: 2
+ t.integer "unit_id"
+ t.decimal "units_in_pack", precision: 5, scale: 3
+ t.text "description"
+ t.integer "sub_category_id"
+ t.integer "stock"
+ t.boolean "on_display"
+ t.datetime "created_at", null: false
+ t.datetime "updated_at", null: false
+ t.string "tags"
+ end
+
+ create_table "media_types", force: :cascade do |t|
+ t.string "name"
+ end
+
+ create_table "multi_media_descriptions", force: :cascade do |t|
+ t.string "url"
+ t.integer "item_id"
+ t.integer "media_type_id"
+ t.datetime "created_at", null: false
+ t.datetime "updated_at", null: false
+ end
+
+ create_table "sections", force: :cascade do |t|
+ t.string "name"
+ end
+
+ create_table "sub_categories", force: :cascade do |t|
+ t.string "name"
+ t.integer "category_id"
+ t.datetime "created_at", null: false
+ t.datetime "updated_at", null: false
+ end
+
+ create_table "units", force: :cascade do |t|
+ t.string "name"
+ t.string "short_name", limit: 4
+ end
+
+end
diff --git a/ribica-front-api/models/category.rb b/ribica-front-api/models/category.rb
new file mode 100644
index 0000000..df3f6f4
--- /dev/null
+++ b/ribica-front-api/models/category.rb
@@ -0,0 +1,4 @@
+class Category < ActiveRecord::Base
+ has_many :sub_categories
+ belongs_to :section
+end
diff --git a/ribica-front-api/models/item.rb b/ribica-front-api/models/item.rb
new file mode 100644
index 0000000..e9a3103
--- /dev/null
+++ b/ribica-front-api/models/item.rb
@@ -0,0 +1,12 @@
+class Item < ActiveRecord::Base
+ belongs_to :unit
+ has_many :multi_media_descriptions
+ belongs_to :sub_category
+
+ # TODO: change "best selling" algorithm when get some data - currently it's only sorted by earnings
+ scope :best_selling, -> (offset, limit) { where(:on_display => true).order("(list_price - current_input_price) DESC").limit(limit).offset(offset) }
+ scope :best_selling_in_sub_category, -> (sub_category_id, offset, limit) { best_selling(offset, limit).where(sub_category_id: sub_category_id) }
+ scope :best_selling_in_category, -> (category_id, offset, limit) { best_selling(offset, limit).joins( sub_category: [:category] ).where(["category_id = ?", category_id]) }
+ scope :best_selling_in_section, -> (section_id, offset, limit) { best_selling(offset, limit).joins( sub_category: [category: [ :section ]] ).where( ["section_id = ?", section_id] ) }
+
+end
diff --git a/ribica-front-api/models/media_type.rb b/ribica-front-api/models/media_type.rb
new file mode 100644
index 0000000..97977ac
--- /dev/null
+++ b/ribica-front-api/models/media_type.rb
@@ -0,0 +1,3 @@
+class MediaType < ActiveRecord::Base
+ has_many :multi_media_descriptions
+end
diff --git a/ribica-front-api/models/multi_media_description.rb b/ribica-front-api/models/multi_media_description.rb
new file mode 100644
index 0000000..57f7a26
--- /dev/null
+++ b/ribica-front-api/models/multi_media_description.rb
@@ -0,0 +1,5 @@
+class MultiMediaDescription < ActiveRecord::Base
+ belongs_to :item
+ belongs_to :media_type
+
+end
diff --git a/ribica-front-api/models/section.rb b/ribica-front-api/models/section.rb
new file mode 100644
index 0000000..d255568
--- /dev/null
+++ b/ribica-front-api/models/section.rb
@@ -0,0 +1,3 @@
+class Section < ActiveRecord::Base
+ has_many :categories
+end
diff --git a/ribica-front-api/models/sub_category.rb b/ribica-front-api/models/sub_category.rb
new file mode 100644
index 0000000..9bab403
--- /dev/null
+++ b/ribica-front-api/models/sub_category.rb
@@ -0,0 +1,5 @@
+class SubCategory < ActiveRecord::Base
+ belongs_to :category
+end
+
+
diff --git a/ribica-front-api/models/unit.rb b/ribica-front-api/models/unit.rb
new file mode 100644
index 0000000..ee09039
--- /dev/null
+++ b/ribica-front-api/models/unit.rb
@@ -0,0 +1,2 @@
+class Unit < ActiveRecord::Base
+end
diff --git a/ribica-front-api/rakefile.rb b/ribica-front-api/rakefile.rb
new file mode 100644
index 0000000..e2ec847
--- /dev/null
+++ b/ribica-front-api/rakefile.rb
@@ -0,0 +1,3 @@
+require "./app"
+require "./config"
+require "sinatra/activerecord/rake"
diff --git a/ribica-front-ui/.gitignore b/ribica-front-ui/.gitignore
new file mode 100644
index 0000000..d3585cc
--- /dev/null
+++ b/ribica-front-ui/.gitignore
@@ -0,0 +1,30 @@
+# Logs
+logs
+*.log
+
+# Runtime data
+pids
+*.pid
+*.seed
+
+# Directory for instrumented libs generated by jscoverage/JSCover
+lib-cov
+
+# Coverage directory used by tools like istanbul
+coverage
+
+# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
+.grunt
+
+# Compiled binary addons (http://nodejs.org/api/addons.html)
+build/Release
+build/*.js
+build/*.css
+
+# Dependency directory
+# Commenting this out is preferred by some people, see
+# https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git-
+node_modules
+
+# Users Environment Variables
+.lock-wscript
diff --git a/ribica-front-ui/Gruntfile.js b/ribica-front-ui/Gruntfile.js
new file mode 100644
index 0000000..a76e1a0
--- /dev/null
+++ b/ribica-front-ui/Gruntfile.js
@@ -0,0 +1,62 @@
+module.exports = function(grunt) {
+ grunt.initConfig({
+ browserify: {
+ basic: {
+ src: ['app/ribica.js'],
+ dest: 'build/ribica.bundle.js',
+ options: {
+ browserifyOptions: {
+ standalone: 'RIBICA',
+ debug: true,
+ },
+ transform: ['reactify'],
+ watch: true
+ }
+
+ }
+ },
+ watch: {
+ files: ['build/ribica.bundle.js', 'app/css/*.css'],
+ tasks: ['concat:css', 'concat:js']
+ },
+ connect: {
+ server: {
+ options: {
+ port: 3001,
+ base: 'build'
+ }
+ }
+ },
+ uglify: {
+ my_target: {
+ files: {
+ 'build/ribica.min.js': ['build/ribica.js']
+ }
+ }
+ },
+ concat: {
+ css: {
+ src: [
+ 'node_modules/bootstrap/dist/css/bootstrap.min.css',
+ 'app/css/*.css'
+
+ ],
+ dest: 'build/ribica.css'
+ },
+ js: {
+ src: ['node_modules/jquery/dist/jquery.min.js', 'node_modules/bootstrap/dist/css/bootstrap.min.js', 'build/ribica.bundle.js'],
+ dest: 'build/ribica.js'
+ }
+ }
+
+ });
+
+ grunt.loadNpmTasks('grunt-contrib-watch');
+ grunt.loadNpmTasks('grunt-contrib-concat');
+ grunt.loadNpmTasks('grunt-browserify');
+ grunt.loadNpmTasks('grunt-contrib-connect');
+ grunt.loadNpmTasks('grunt-contrib-uglify');
+
+ grunt.registerTask('default', []);
+ grunt.registerTask('dev', ['browserify', 'concat:css', 'concat:js', 'connect:server:keepalive']);
+};
diff --git a/ribica-front-ui/README.md b/ribica-front-ui/README.md
new file mode 100644
index 0000000..e1a4838
--- /dev/null
+++ b/ribica-front-ui/README.md
@@ -0,0 +1,14 @@
+# Ribica front office
+
+Front end shop-a (javascript)
+
+All the code is in the ``app`` folder. This structure will evolve over time.
+
+## Getting started
+
+``npm install``
+
+``grunt dev`` (starts dev server and watches for changes apparently)
+
+Visit ``http://localhost:3001/index.html``
+
diff --git a/ribica-front-ui/app/app.js b/ribica-front-ui/app/app.js
new file mode 100644
index 0000000..f7fc069
--- /dev/null
+++ b/ribica-front-ui/app/app.js
@@ -0,0 +1,14 @@
+var Router = require('./router'),
+ Backbone = require('backbone');
+
+var App = function() {
+ this.bootstrap = function() {
+ // here goes all app initialization and bootstraping logic
+ this.router = new Router();
+ Backbone.history.start();
+ };
+};
+
+
+var app = new App();
+module.exports = app;
diff --git a/ribica-front-ui/app/components/itemList.js b/ribica-front-ui/app/components/itemList.js
new file mode 100644
index 0000000..463e636
--- /dev/null
+++ b/ribica-front-ui/app/components/itemList.js
@@ -0,0 +1,30 @@
+var React = require('react');
+var SingleItem = require('./singleItem');
+var ItemCollection = require('../models/itemCollection.js');
+
+var ItemList = React.createClass({
+
+
+
+ render: function() {
+ var items = this.props.items.models.map( function(item) {
+ return (
+