lolita 3.4.2 → 3.4.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (146) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +36 -36
  3. data/Gemfile +29 -29
  4. data/README.md +147 -147
  5. data/Rakefile +6 -6
  6. data/app/assets/javascripts/lolita/application.js +6 -6
  7. data/app/assets/javascripts/lolita/tab.js +100 -100
  8. data/app/assets/stylesheets/lolita/PIE-custom.htc +87 -87
  9. data/app/assets/stylesheets/lolita/PIE.htc +81 -81
  10. data/app/assets/stylesheets/lolita/application.css +6 -6
  11. data/app/assets/stylesheets/lolita/default.css.erb +169 -169
  12. data/app/assets/stylesheets/lolita/jquery-ui-1.8.16.lolita.css.erb +567 -567
  13. data/app/assets/stylesheets/lolita/style.css.erb +553 -553
  14. data/app/helpers/components/lolita/configuration/list_component.rb +10 -10
  15. data/app/helpers/components/lolita/configuration_component.rb +20 -20
  16. data/app/views/components/lolita/configuration/column/_first.html.haml +1 -1
  17. data/app/views/components/lolita/configuration/column/header/_first.html.haml +1 -1
  18. data/app/views/components/lolita/configuration/column/header/_sort.html.haml +6 -6
  19. data/app/views/components/lolita/configuration/columns/header/_display.html.haml +5 -5
  20. data/app/views/components/lolita/configuration/field/array/checkbox/_display.html.haml +7 -7
  21. data/app/views/components/lolita/configuration/field/string/text/_display.html.haml +7 -7
  22. data/app/views/components/lolita/configuration/search/_display.html.haml +2 -2
  23. data/app/views/components/lolita/configuration/tab/_display.html.haml +3 -3
  24. data/app/views/components/lolita/configuration/tabs/_form.html.haml +6 -6
  25. data/app/views/kaminari/lolita/_first_page.html.erb +11 -11
  26. data/app/views/kaminari/lolita/_gap.html.erb +8 -8
  27. data/app/views/kaminari/lolita/_last_page.html.erb +11 -11
  28. data/app/views/kaminari/lolita/_next_page.html.erb +11 -11
  29. data/app/views/kaminari/lolita/_page.html.erb +12 -12
  30. data/app/views/kaminari/lolita/_paginator.html.erb +23 -23
  31. data/app/views/kaminari/lolita/_prev_page.html.erb +11 -11
  32. data/app/views/lolita/info/index.html.erb +232 -232
  33. data/author +1 -1
  34. data/config/routes.rb +6 -6
  35. data/lib/generators/lolita/install_generator.rb +19 -19
  36. data/lib/generators/lolita/uninstall_generator.rb +70 -70
  37. data/lib/generators/templates/lolita.rb +13 -13
  38. data/lib/lolita.rb +140 -140
  39. data/lib/lolita/adapter/abstract_adapter.rb +15 -15
  40. data/lib/lolita/adapter/active_record.rb +227 -227
  41. data/lib/lolita/adapter/common_helper.rb +221 -221
  42. data/lib/lolita/adapter/field_helper.rb +18 -18
  43. data/lib/lolita/adapter/mongoid.rb +241 -241
  44. data/lib/lolita/components/base.rb +11 -11
  45. data/lib/lolita/configuration.rb +60 -60
  46. data/lib/lolita/configuration/column.rb +181 -181
  47. data/lib/lolita/configuration/field/big_decimal.rb +12 -12
  48. data/lib/lolita/configuration/field/boolean.rb +12 -12
  49. data/lib/lolita/configuration/field/date.rb +12 -12
  50. data/lib/lolita/configuration/field/hidden.rb +12 -12
  51. data/lib/lolita/configuration/field/integer.rb +11 -11
  52. data/lib/lolita/configuration/field/string.rb +16 -16
  53. data/lib/lolita/configuration/field/time.rb +13 -13
  54. data/lib/lolita/configuration/field_set.rb +25 -25
  55. data/lib/lolita/configuration/filter.rb +116 -116
  56. data/lib/lolita/configuration/list.rb +200 -200
  57. data/lib/lolita/configuration/search.rb +104 -104
  58. data/lib/lolita/controllers/component_helpers.rb +156 -156
  59. data/lib/lolita/controllers/internal_helpers.rb +71 -71
  60. data/lib/lolita/controllers/url_helpers.rb +7 -7
  61. data/lib/lolita/dbi/base.rb +56 -56
  62. data/lib/lolita/hooks/named_hook.rb +125 -125
  63. data/lib/lolita/lazy_loader.rb +54 -54
  64. data/lib/lolita/navigation/tree.rb +132 -132
  65. data/lib/lolita/rails/engine.rb +23 -23
  66. data/lib/lolita/rails/routes.rb +129 -129
  67. data/lib/lolita/ruby_ext/accessors.rb +26 -26
  68. data/lib/lolita/search/simple.rb +75 -75
  69. data/lib/lolita/support/formatter.rb +62 -62
  70. data/lib/lolita/support/formatter/rails.rb +56 -56
  71. data/lib/lolita/system_configuration/base.rb +178 -178
  72. data/lib/lolita/test/matchers.rb +77 -77
  73. data/lib/lolita/version.rb +30 -30
  74. data/lib/tasks/tinymce-assets.rake +6 -6
  75. data/lolita.gemspec +34 -34
  76. data/spec/adapter/common_helper_spec.rb +95 -95
  77. data/spec/adapter_helper.rb +42 -42
  78. data/spec/builder_spec.rb +120 -120
  79. data/spec/configuration/base_spec.rb +22 -22
  80. data/spec/configuration/field_spec.rb +118 -118
  81. data/spec/configuration/filter_spec.rb +131 -131
  82. data/spec/configuration/tab_spec.rb +187 -187
  83. data/spec/configuration/tabs_spec.rb +120 -120
  84. data/spec/generators/lolita/install_generator_spec.rb +54 -54
  85. data/spec/generators/lolita/uninstall_generator_spec.rb +48 -48
  86. data/spec/orm/mongoid.rb +12 -12
  87. data/spec/rails_app/app/controllers/application_controller.rb +3 -3
  88. data/spec/rails_app/app/helpers/application_helper.rb +3 -3
  89. data/spec/rails_app/app/mongoid/address.rb +7 -7
  90. data/spec/rails_app/app/mongoid/category.rb +18 -18
  91. data/spec/rails_app/app/mongoid/comment.rb +5 -5
  92. data/spec/rails_app/app/mongoid/post.rb +30 -30
  93. data/spec/rails_app/app/mongoid/preference.rb +5 -5
  94. data/spec/rails_app/app/mongoid/profile.rb +13 -13
  95. data/spec/rails_app/app/mongoid/tag.rb +3 -3
  96. data/spec/rails_app/app/views/components/lolita/configuration/list/_body_cell.html.erb +1 -1
  97. data/spec/rails_app/config/application.rb +33 -33
  98. data/spec/rails_app/config/boot.rb +7 -7
  99. data/spec/rails_app/config/environment.rb +5 -5
  100. data/spec/rails_app/config/environments/development.rb +23 -23
  101. data/spec/rails_app/config/environments/production.rb +37 -37
  102. data/spec/rails_app/config/environments/test.rb +37 -37
  103. data/spec/rails_app/config/initializers/backtrace_silencers.rb +7 -7
  104. data/spec/rails_app/config/initializers/inflections.rb +2 -2
  105. data/spec/rails_app/config/initializers/secret_token.rb +1 -1
  106. data/spec/rails_app/config/routes.rb +2 -2
  107. data/spec/rails_app/lib/lolita/configuration/field/my_custom_collection.rb +13 -13
  108. data/spec/rails_app/public/javascripts/jquery-1.5.1.min.js +15 -15
  109. data/spec/rails_app/public/javascripts/lolita/main.js +6 -6
  110. data/spec/rails_app/public/javascripts/modernizr-1.7.min.js +1 -1
  111. data/spec/rails_app/public/javascripts/rails.js +137 -137
  112. data/spec/rails_app/public/javascripts/tinymce/langs/en.js +221 -221
  113. data/spec/rails_app/public/javascripts/tinymce/license.txt +504 -504
  114. data/spec/rails_app/public/javascripts/tinymce/themes/advanced/about.htm +52 -52
  115. data/spec/rails_app/public/javascripts/tinymce/themes/advanced/anchor.htm +26 -26
  116. data/spec/rails_app/public/javascripts/tinymce/themes/advanced/charmap.htm +51 -51
  117. data/spec/rails_app/public/javascripts/tinymce/themes/advanced/color_picker.htm +74 -74
  118. data/spec/rails_app/public/javascripts/tinymce/themes/advanced/editor_template_src.js +1328 -1328
  119. data/spec/rails_app/public/javascripts/tinymce/themes/advanced/image.htm +80 -80
  120. data/spec/rails_app/public/javascripts/tinymce/themes/advanced/js/about.js +73 -73
  121. data/spec/rails_app/public/javascripts/tinymce/themes/advanced/js/anchor.js +42 -42
  122. data/spec/rails_app/public/javascripts/tinymce/themes/advanced/js/charmap.js +354 -354
  123. data/spec/rails_app/public/javascripts/tinymce/themes/advanced/js/color_picker.js +329 -329
  124. data/spec/rails_app/public/javascripts/tinymce/themes/advanced/js/image.js +247 -247
  125. data/spec/rails_app/public/javascripts/tinymce/themes/advanced/js/link.js +153 -153
  126. data/spec/rails_app/public/javascripts/tinymce/themes/advanced/js/source_editor.js +56 -56
  127. data/spec/rails_app/public/javascripts/tinymce/themes/advanced/langs/en.js +68 -68
  128. data/spec/rails_app/public/javascripts/tinymce/themes/advanced/langs/en_dlg.js +53 -53
  129. data/spec/rails_app/public/javascripts/tinymce/themes/advanced/link.htm +57 -57
  130. data/spec/rails_app/public/javascripts/tinymce/themes/advanced/shortcuts.htm +47 -47
  131. data/spec/rails_app/public/javascripts/tinymce/themes/advanced/skins/cirkuit/content.css +66 -66
  132. data/spec/rails_app/public/javascripts/tinymce/themes/advanced/skins/cirkuit/dialog.css +117 -117
  133. data/spec/rails_app/public/javascripts/tinymce/themes/advanced/skins/cirkuit/ui.css +988 -988
  134. data/spec/rails_app/public/javascripts/tinymce/themes/advanced/source_editor.htm +25 -25
  135. data/spec/rails_app/public/javascripts/tinymce/tiny_mce_popup.js +4 -4
  136. data/spec/rails_app/public/stylesheets/lolita/default.css +169 -169
  137. data/spec/rails_app/public/stylesheets/lolita/style.css +214 -214
  138. data/spec/spec_helper.rb +51 -51
  139. data/vendor/assets/javascripts/application_vendor_lolita.js +4 -4
  140. data/vendor/assets/javascripts/jquery-numeric.js +279 -279
  141. data/vendor/assets/javascripts/modernizr_1_7_min.js +1 -1
  142. data/vendor/assets/javascripts/tinymce/themes/advanced/skins/cirkuit/content.css +66 -66
  143. data/vendor/assets/javascripts/tinymce/themes/advanced/skins/cirkuit/dialog.css +117 -117
  144. data/vendor/assets/javascripts/tinymce/themes/advanced/skins/cirkuit/ui.css +988 -988
  145. data/vendor/assets/stylesheets/jquery-ui-1.8.16.custom.css +567 -567
  146. metadata +4 -3
@@ -1,77 +1,77 @@
1
- module Lolita
2
- module Test
3
- # Matchers that make easier to test Lolita and Lolita addons
4
- module Matchers
5
-
6
- class BeRoutable
7
-
8
- def matches?(actual)
9
- @actual=actual
10
- collect_routes
11
- set_method_and_url
12
- result=@routes.detect{|route|
13
- method_match(route) && @url.to_s.match(route[:path_info])
14
- }
15
- !!result
16
- end
17
-
18
- def failure_message
19
- "expected #{@url.inspect}#{@method ? " with method #{@method.inspect}" : ""} to be routable"
20
- end
21
- def negative_failure_message
22
- "expected #{@url.inspect}#{@method ? " with method #{@method.inspect}" : ""} to not be routable"
23
- end
24
-
25
- private
26
-
27
- def method_match(route)
28
- if route[:request_method]
29
- if @method
30
- @method.to_s.upcase.match(route[:request_method])
31
- else
32
- false
33
- end
34
- else
35
- true
36
- end
37
- end
38
-
39
- def set_method_and_url
40
- if @actual.is_a?(Hash)
41
- @method,@url=@actual.keys.first,@actual.values.first
42
- elsif @actual.is_a?(Array)
43
- if @actual.size>=2
44
- @method,@url=@actual[0],@actual[1]
45
- elsif
46
- @url=@actual.first
47
- end
48
- else
49
- @url=@actual.to_s
50
- end
51
- end
52
-
53
- def collect_routes
54
- @routes=[]
55
- all_applications.each do |application|
56
- @routes+=application.routes.routes.map(&:conditions)
57
- end
58
- end
59
-
60
- def all_applications
61
- if defined?(Rails) && defined?(Rails::Application)
62
- ObjectSpace.each_object(Rails::Application).select { |klass|
63
- klass.class < Rails::Application
64
- }.map(&:class)
65
- else
66
- []
67
- end
68
- end
69
- end
70
-
71
- def be_routable
72
- BeRoutable.new
73
- end
74
- end
75
- end
76
- end
77
-
1
+ module Lolita
2
+ module Test
3
+ # Matchers that make easier to test Lolita and Lolita addons
4
+ module Matchers
5
+
6
+ class BeRoutable
7
+
8
+ def matches?(actual)
9
+ @actual=actual
10
+ collect_routes
11
+ set_method_and_url
12
+ result=@routes.detect{|route|
13
+ method_match(route) && @url.to_s.match(route[:path_info])
14
+ }
15
+ !!result
16
+ end
17
+
18
+ def failure_message
19
+ "expected #{@url.inspect}#{@method ? " with method #{@method.inspect}" : ""} to be routable"
20
+ end
21
+ def negative_failure_message
22
+ "expected #{@url.inspect}#{@method ? " with method #{@method.inspect}" : ""} to not be routable"
23
+ end
24
+
25
+ private
26
+
27
+ def method_match(route)
28
+ if route[:request_method]
29
+ if @method
30
+ @method.to_s.upcase.match(route[:request_method])
31
+ else
32
+ false
33
+ end
34
+ else
35
+ true
36
+ end
37
+ end
38
+
39
+ def set_method_and_url
40
+ if @actual.is_a?(Hash)
41
+ @method,@url=@actual.keys.first,@actual.values.first
42
+ elsif @actual.is_a?(Array)
43
+ if @actual.size>=2
44
+ @method,@url=@actual[0],@actual[1]
45
+ elsif
46
+ @url=@actual.first
47
+ end
48
+ else
49
+ @url=@actual.to_s
50
+ end
51
+ end
52
+
53
+ def collect_routes
54
+ @routes=[]
55
+ all_applications.each do |application|
56
+ @routes+=application.routes.routes.map(&:conditions)
57
+ end
58
+ end
59
+
60
+ def all_applications
61
+ if defined?(Rails) && defined?(Rails::Application)
62
+ ObjectSpace.each_object(Rails::Application).select { |klass|
63
+ klass.class < Rails::Application
64
+ }.map(&:class)
65
+ else
66
+ []
67
+ end
68
+ end
69
+ end
70
+
71
+ def be_routable
72
+ BeRoutable.new
73
+ end
74
+ end
75
+ end
76
+ end
77
+
@@ -1,30 +1,30 @@
1
- module Lolita
2
- module Version
3
- MAJOR = 3
4
- MINOR = 4
5
- PATCH = 2
6
- BUILD = nil
7
-
8
- STRING = [MAJOR, MINOR, PATCH, BUILD].compact.join('.')
9
-
10
- def self.to_s
11
- STRING
12
- end
13
-
14
- def self.major
15
- MAJOR
16
- end
17
-
18
- def self.minor
19
- MINOR
20
- end
21
-
22
- def self.patch
23
- PATCH
24
- end
25
-
26
- def self.build
27
- BUILD
28
- end
29
- end
30
- end
1
+ module Lolita
2
+ module Version
3
+ MAJOR = 3
4
+ MINOR = 4
5
+ PATCH = 3
6
+ BUILD = nil
7
+
8
+ STRING = [MAJOR, MINOR, PATCH, BUILD].compact.join('.')
9
+
10
+ def self.to_s
11
+ STRING
12
+ end
13
+
14
+ def self.major
15
+ MAJOR
16
+ end
17
+
18
+ def self.minor
19
+ MINOR
20
+ end
21
+
22
+ def self.patch
23
+ PATCH
24
+ end
25
+
26
+ def self.build
27
+ BUILD
28
+ end
29
+ end
30
+ end
@@ -1,7 +1,7 @@
1
- Rake::Task['assets:precompile:primary'].enhance do
2
- assets = File.expand_path(File.dirname(__FILE__) + "/../../vendor/assets/javascripts/tinymce")
3
- target = File.join(Rails.public_path, Rails.application.config.assets.prefix)
4
-
5
- mkdir_p target
6
- cp_r assets, target
1
+ Rake::Task['assets:precompile:primary'].enhance do
2
+ assets = File.expand_path(File.dirname(__FILE__) + "/../../vendor/assets/javascripts/tinymce")
3
+ target = File.join(Rails.public_path, Rails.application.config.assets.prefix)
4
+
5
+ mkdir_p target
6
+ cp_r assets, target
7
7
  end
@@ -1,34 +1,34 @@
1
- # -*- encoding: utf-8 -*-
2
- $:.push File.expand_path("../lib", __FILE__)
3
- require "lolita/version"
4
-
5
- Gem::Specification.new do |s|
6
- s.name = "lolita"
7
- s.version = Lolita::Version.to_s
8
- s.platform = Gem::Platform::RUBY
9
- s.authors = ["ITHouse (Latvia) and Arturs Meisters"]
10
- s.email = "support@ithouse.lv"
11
- s.homepage = "http://github.com/ithouse/lolita"
12
- s.summary = %q{Great web resources management tool}
13
- s.description = %q{Manage Rails, application backend with ease.}
14
-
15
- s.extra_rdoc_files = [
16
- "LICENSE.txt",
17
- "README.md"
18
- ]
19
- s.licenses = ["MIT"]
20
-
21
- s.add_runtime_dependency(%q<kaminari>, ["~> 0.13"])
22
- s.add_runtime_dependency(%q<abstract>, ["~> 1"])
23
- s.add_runtime_dependency(%q<haml>, ["< 5.0", "> 3.0"])
24
- s.add_runtime_dependency(%q<activesupport>,["~> 3.2.0"])
25
- s.add_runtime_dependency(%q<actionpack>,["~> 3.2.0"])
26
- s.add_runtime_dependency(%q<jquery-rails>, [">= 2.1", "< 3.0"])
27
- s.add_runtime_dependency(%q<tinymce-rails>, ["~> 3.5.8"])
28
- s.add_runtime_dependency(%q<tinymce-rails-config-manager>,[">= 0.1"])
29
-
30
- s.files = `git ls-files`.split($/)
31
- s.executables = s.files.grep(%r{^bin/}) { |f| File.basename(f) }
32
- s.test_files = s.files.grep(%r{^(test|spec|features)/})
33
- s.require_paths = ["lib"]
34
- end
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "lolita/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "lolita"
7
+ s.version = Lolita::Version.to_s
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ["ITHouse (Latvia) and Arturs Meisters"]
10
+ s.email = "support@ithouse.lv"
11
+ s.homepage = "http://github.com/ithouse/lolita"
12
+ s.summary = %q{Great web resources management tool}
13
+ s.description = %q{Manage Rails, application backend with ease.}
14
+
15
+ s.extra_rdoc_files = [
16
+ "LICENSE.txt",
17
+ "README.md"
18
+ ]
19
+ s.licenses = ["MIT"]
20
+
21
+ s.add_runtime_dependency(%q<kaminari>, ["~> 0.13"])
22
+ s.add_runtime_dependency(%q<abstract>, ["~> 1"])
23
+ s.add_runtime_dependency(%q<haml>, ["< 5.0", "> 3.0"])
24
+ s.add_runtime_dependency(%q<activesupport>,["~> 3.2.0"])
25
+ s.add_runtime_dependency(%q<actionpack>,["~> 3.2.0"])
26
+ s.add_runtime_dependency(%q<jquery-rails>, [">= 2.1", "< 3.0"])
27
+ s.add_runtime_dependency(%q<tinymce-rails>, ["~> 3.5.8"])
28
+ s.add_runtime_dependency(%q<tinymce-rails-config-manager>,[">= 0.1"])
29
+
30
+ s.files = `git ls-files`.split($/)
31
+ s.executables = s.files.grep(%r{^bin/}) { |f| File.basename(f) }
32
+ s.test_files = s.files.grep(%r{^(test|spec|features)/})
33
+ s.require_paths = ["lib"]
34
+ end
@@ -1,96 +1,96 @@
1
- require 'simple_spec_helper'
2
-
3
- describe Lolita::Adapter::CommonHelper do
4
- describe Lolita::Adapter::CommonHelper::Record do
5
- let(:orm_record){ double('orm_record') }
6
- let(:adapter){ double('adapter', fields: []) }
7
- subject(:record){ Lolita::Adapter::CommonHelper::Record.new adapter, orm_record }
8
-
9
- describe '#title' do
10
- context "record has title" do
11
- let(:orm_record){ double('orm_record', title: 'some title') }
12
- its(:title){ should eq('some title') }
13
- end
14
-
15
- context "record has name" do
16
- let(:orm_record){ double('orm_record', name: 'some name') }
17
- its(:title){ should eq('some name') }
18
- end
19
-
20
- context "record has content field" do
21
- let(:adapter){ double('adapter', fields: [double(type: 'int', name: 'id'), double(type: 'string', name: 'first_name')]) }
22
- let(:orm_record){ double('orm_record', first_name: 'Max') }
23
- its(:title){ should eq('Max') }
24
- end
25
-
26
- context "else, return klass name with id" do
27
- let(:orm_record){ double('orm_record', id: 9, class: double(lolita_model_name: double(human: 'Foo'))) }
28
- its(:title){ should eq('Foo 9') }
29
- end
30
- end
31
- end
32
-
33
- describe Lolita::Adapter::CommonHelper::PaginationBuilder do
34
- let(:unscoped){ double('unscoped') }
35
- let(:klass){ double('klass', unscoped: unscoped) }
36
- let(:adapter){ double('adapter', klass: klass) }
37
- let(:page){ 1 }
38
- let(:per){ 5 }
39
- let(:request){ double('request', headers: {}) }
40
- let(:options){ {request: request} }
41
-
42
- subject(:builder){ Lolita::Adapter::CommonHelper::PaginationBuilder.new(adapter, page, per, options) }
43
- describe '#params' do
44
- context "with params" do
45
- let(:request){ double('request', params: {a: 1}) }
46
- its(:params){ should eq({a: 1})}
47
- end
48
-
49
- context "without params" do
50
- its(:params){ should eq({})}
51
- end
52
- end
53
-
54
- describe '#request' do
55
- its(:request){ should eq(request) }
56
- end
57
-
58
- describe '#nested_criteria' do
59
- context "with nested params" do
60
- let(:request){ double('request', params: {nested: {category_id: 3}})}
61
- it "filters by nested data" do
62
- klass.should_receive(:where).with({category_id: 3})
63
- subject.nested_criteria
64
- end
65
- end
66
- context "without nested params" do
67
- its(:nested_criteria){ should be_nil }
68
- end
69
- end
70
-
71
- describe '#ability_criteria' do
72
- context "without" do
73
- its(:ability_criteria){ should be_nil }
74
- end
75
-
76
- context "with abilities" do
77
- let(:klass){ double('klass', accessible_by: double)}
78
- it "return accessible_by scope" do
79
- klass.should_receive(:accessible_by)
80
- subject.ability_criteria
81
- end
82
- end
83
- end
84
-
85
- describe '#sorting' do
86
- context "with sort params" do
87
- let(:request){ double('request', params: {s: 'name|surname,asc'}) }
88
- its(:sorting){ should eq('name,surname asc')}
89
- end
90
-
91
- context "without params" do
92
- its(:sorting){ should be_nil }
93
- end
94
- end
95
- end
1
+ require 'simple_spec_helper'
2
+
3
+ describe Lolita::Adapter::CommonHelper do
4
+ describe Lolita::Adapter::CommonHelper::Record do
5
+ let(:orm_record){ double('orm_record') }
6
+ let(:adapter){ double('adapter', fields: []) }
7
+ subject(:record){ Lolita::Adapter::CommonHelper::Record.new adapter, orm_record }
8
+
9
+ describe '#title' do
10
+ context "record has title" do
11
+ let(:orm_record){ double('orm_record', title: 'some title') }
12
+ its(:title){ should eq('some title') }
13
+ end
14
+
15
+ context "record has name" do
16
+ let(:orm_record){ double('orm_record', name: 'some name') }
17
+ its(:title){ should eq('some name') }
18
+ end
19
+
20
+ context "record has content field" do
21
+ let(:adapter){ double('adapter', fields: [double(type: 'int', name: 'id'), double(type: 'string', name: 'first_name')]) }
22
+ let(:orm_record){ double('orm_record', first_name: 'Max') }
23
+ its(:title){ should eq('Max') }
24
+ end
25
+
26
+ context "else, return klass name with id" do
27
+ let(:orm_record){ double('orm_record', id: 9, class: double(lolita_model_name: double(human: 'Foo'))) }
28
+ its(:title){ should eq('Foo 9') }
29
+ end
30
+ end
31
+ end
32
+
33
+ describe Lolita::Adapter::CommonHelper::PaginationBuilder do
34
+ let(:unscoped){ double('unscoped') }
35
+ let(:klass){ double('klass', unscoped: unscoped) }
36
+ let(:adapter){ double('adapter', klass: klass) }
37
+ let(:page){ 1 }
38
+ let(:per){ 5 }
39
+ let(:request){ double('request', headers: {}) }
40
+ let(:options){ {request: request} }
41
+
42
+ subject(:builder){ Lolita::Adapter::CommonHelper::PaginationBuilder.new(adapter, page, per, options) }
43
+ describe '#params' do
44
+ context "with params" do
45
+ let(:request){ double('request', params: {a: 1}) }
46
+ its(:params){ should eq({a: 1})}
47
+ end
48
+
49
+ context "without params" do
50
+ its(:params){ should eq({})}
51
+ end
52
+ end
53
+
54
+ describe '#request' do
55
+ its(:request){ should eq(request) }
56
+ end
57
+
58
+ describe '#nested_criteria' do
59
+ context "with nested params" do
60
+ let(:request){ double('request', params: {nested: {category_id: 3}})}
61
+ it "filters by nested data" do
62
+ klass.should_receive(:where).with({category_id: 3})
63
+ subject.nested_criteria
64
+ end
65
+ end
66
+ context "without nested params" do
67
+ its(:nested_criteria){ should be_nil }
68
+ end
69
+ end
70
+
71
+ describe '#ability_criteria' do
72
+ context "without" do
73
+ its(:ability_criteria){ should be_nil }
74
+ end
75
+
76
+ context "with abilities" do
77
+ let(:klass){ double('klass', accessible_by: double)}
78
+ it "return accessible_by scope" do
79
+ klass.should_receive(:accessible_by)
80
+ subject.ability_criteria
81
+ end
82
+ end
83
+ end
84
+
85
+ describe '#sorting' do
86
+ context "with sort params" do
87
+ let(:request){ double('request', params: {s: 'name|surname,asc'}) }
88
+ its(:sorting){ should eq('name,surname asc')}
89
+ end
90
+
91
+ context "without params" do
92
+ its(:sorting){ should be_nil }
93
+ end
94
+ end
95
+ end
96
96
  end