admin_it 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (108) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +18 -0
  3. data/.rspec +2 -0
  4. data/.rubocop.yml +5 -0
  5. data/.yardopts +3 -0
  6. data/Gemfile +5 -0
  7. data/README.md +58 -0
  8. data/README_RU.md +52 -0
  9. data/Rakefile +23 -0
  10. data/admin_it.gemspec +38 -0
  11. data/app/assets/fonts/admin_it/FontAwesome.otf +0 -0
  12. data/app/assets/fonts/admin_it/fontawesome-webfont.eot +0 -0
  13. data/app/assets/fonts/admin_it/fontawesome-webfont.svg +414 -0
  14. data/app/assets/fonts/admin_it/fontawesome-webfont.ttf +0 -0
  15. data/app/assets/fonts/admin_it/fontawesome-webfont.woff +0 -0
  16. data/app/assets/fonts/admin_it/glyphicons-halflings-regular.eot +0 -0
  17. data/app/assets/fonts/admin_it/glyphicons-halflings-regular.svg +229 -0
  18. data/app/assets/fonts/admin_it/glyphicons-halflings-regular.ttf +0 -0
  19. data/app/assets/fonts/admin_it/glyphicons-halflings-regular.woff +0 -0
  20. data/app/assets/javascript/admin_it/admin_it.js +89 -0
  21. data/app/assets/javascript/admin_it/bootstrap.min.js +6 -0
  22. data/app/assets/stylesheets/admin_it/admin_it.css +25 -0
  23. data/app/assets/stylesheets/admin_it/bootstrap-theme.min.css +7 -0
  24. data/app/assets/stylesheets/admin_it/bootstrap.min.css +7 -0
  25. data/app/assets/stylesheets/admin_it/font-awesome.min.css +4 -0
  26. data/app/views/admin_it/context/_table.html.slim +38 -0
  27. data/app/views/admin_it/context/_tiles.html.slim +23 -0
  28. data/app/views/admin_it/edit.html.slim +2 -0
  29. data/app/views/admin_it/new.html.slim +2 -0
  30. data/app/views/admin_it/shared/_child.html.slim +15 -0
  31. data/app/views/admin_it/shared/_fields.html.slim +19 -0
  32. data/app/views/admin_it/shared/_filters.html.slim +40 -0
  33. data/app/views/admin_it/shared/_form.html.slim +50 -0
  34. data/app/views/admin_it/shared/_pagination.html.slim +41 -0
  35. data/app/views/admin_it/shared/_toolbar.html.slim +30 -0
  36. data/app/views/admin_it/show.html.slim +6 -0
  37. data/app/views/admin_it/table.html.slim +2 -0
  38. data/app/views/admin_it/tiles.html.slim +2 -0
  39. data/app/views/layouts/admin_it.html.slim +37 -0
  40. data/app/views/layouts/admin_it_dialog.html.slim +8 -0
  41. data/config.ru +7 -0
  42. data/lib/admin_it/config.rb +24 -0
  43. data/lib/admin_it/context/collection_context.rb +239 -0
  44. data/lib/admin_it/context/context.rb +232 -0
  45. data/lib/admin_it/context/show_context.rb +45 -0
  46. data/lib/admin_it/context/single_context.rb +199 -0
  47. data/lib/admin_it/context/table_context.rb +66 -0
  48. data/lib/admin_it/context/tiles_context.rb +31 -0
  49. data/lib/admin_it/context.rb +6 -0
  50. data/lib/admin_it/controller.rb +42 -0
  51. data/lib/admin_it/data/active_record.rb +283 -0
  52. data/lib/admin_it/data/data_behavior.rb +18 -0
  53. data/lib/admin_it/data/hash.rb +27 -0
  54. data/lib/admin_it/data/object.rb +51 -0
  55. data/lib/admin_it/data.rb +24 -0
  56. data/lib/admin_it/definitions.rb +89 -0
  57. data/lib/admin_it/engine.rb +56 -0
  58. data/lib/admin_it/env.rb +37 -0
  59. data/lib/admin_it/errors.rb +5 -0
  60. data/lib/admin_it/field/field.rb +174 -0
  61. data/lib/admin_it/field.rb +1 -0
  62. data/lib/admin_it/filters/entity_filter.rb +4 -0
  63. data/lib/admin_it/filters/field_filter.rb +31 -0
  64. data/lib/admin_it/filters/filter.rb +150 -0
  65. data/lib/admin_it/filters/value_filter.rb +52 -0
  66. data/lib/admin_it/filters.rb +4 -0
  67. data/lib/admin_it/helpers/field.rb +25 -0
  68. data/lib/admin_it/helpers/input.rb +22 -0
  69. data/lib/admin_it/helpers/page.rb +26 -0
  70. data/lib/admin_it/helpers/table.rb +85 -0
  71. data/lib/admin_it/helpers/tiles.rb +17 -0
  72. data/lib/admin_it/helpers/toolbar.rb +40 -0
  73. data/lib/admin_it/helpers/top_menu.rb +39 -0
  74. data/lib/admin_it/helpers.rb +12 -0
  75. data/lib/admin_it/locales/en.yml +14 -0
  76. data/lib/admin_it/locales/ru.yml +14 -0
  77. data/lib/admin_it/renderable.rb +18 -0
  78. data/lib/admin_it/resource.rb +292 -0
  79. data/lib/admin_it/utils.rb +21 -0
  80. data/lib/admin_it/version.rb +5 -0
  81. data/lib/admin_it.rb +19 -0
  82. data/lib/extend_it/array_of.rb +181 -0
  83. data/lib/extend_it/asserts.rb +38 -0
  84. data/lib/extend_it/callbacks.rb +105 -0
  85. data/lib/extend_it/caller.rb +35 -0
  86. data/lib/extend_it/class.rb +47 -0
  87. data/lib/extend_it/dsl.rb +94 -0
  88. data/lib/extend_it/refines.rb +6 -0
  89. data/lib/extend_it/symbolize.rb +39 -0
  90. data/lib/extend_it.rb +5 -0
  91. data/spec/internal/config/database.yml +3 -0
  92. data/spec/internal/config/routes.rb +3 -0
  93. data/spec/internal/db/combustion_test.sqlite +0 -0
  94. data/spec/internal/db/schema.rb +3 -0
  95. data/spec/internal/log/.gitignore +1 -0
  96. data/spec/internal/public/favicon.ico +0 -0
  97. data/spec/lib/context/collection_context_spec.rb +20 -0
  98. data/spec/lib/context/context_spec.rb +28 -0
  99. data/spec/lib/context/single_context_spec.rb +26 -0
  100. data/spec/lib/data/object_spec.rb +29 -0
  101. data/spec/lib/definitions_spec.rb +171 -0
  102. data/spec/lib/field_spec.rb +62 -0
  103. data/spec/lib/resource_spec.rb +39 -0
  104. data/spec/lib/utils_spec.rb +39 -0
  105. data/spec/spec_helper.rb +21 -0
  106. data/spec/support/example_groups/context_example_group.rb +50 -0
  107. data/spec/support/shared_examples/context.rb +2 -0
  108. metadata +337 -0
@@ -0,0 +1,181 @@
1
+ require 'forwardable'
2
+ require File.join %w(extend_it symbolize)
3
+ require File.join %w(extend_it asserts)
4
+
5
+ using ExtendIt::Symbolize
6
+
7
+ module ExtendIt
8
+ module ArrayOf
9
+ def array_of(entity_class, &block)
10
+ array_name = "ArrayOf#{entity_class.name.split('::').last}"
11
+ array_class = Class.new(SimpleDelegator) do
12
+ @entity_class = entity_class
13
+ @scopes = {}
14
+ @finder = nil
15
+ extend ArrayOf::ArrayClassMethods
16
+ include ArrayOf::ArrayMethods
17
+ end
18
+ array_class.class_eval(&block) if block_given?
19
+ const_set(array_name, array_class)
20
+ end
21
+
22
+ module ArrayClassMethods
23
+ include Asserts
24
+
25
+ attr_reader :scopes, :finder
26
+
27
+ def select(arr)
28
+ if arr.is_a?(self)
29
+ arr.to_a
30
+ else
31
+ arr.select { |a| a.is_a?(@entity_class) }
32
+ end
33
+ end
34
+
35
+ def entity?(obj)
36
+ obj.is_a?(@entity_class)
37
+ end
38
+
39
+ def scope(*names, &block)
40
+ names.flatten.uniq.each do |name|
41
+ name = name.symbolize || next
42
+ @scopes[name] = block.nil? ? proc { |e| e.send(name) } : block
43
+ str = name.to_s
44
+ if str[-1] == '?'
45
+ @scopes[str[0..-2].to_sym] = block.nil? ? proc { |e| e.send(name) } : block
46
+ end
47
+ end
48
+ end
49
+
50
+ def find_by(name, &block)
51
+ assert_symbol(:name)
52
+ @finder = block.nil? ? proc { |e| e.send(name) } : block
53
+ end
54
+
55
+ def has_finder?
56
+ !@finder.nil?
57
+ end
58
+ end
59
+
60
+ module ArrayMethods
61
+ def initialize(*arr)
62
+ @array = self.class.select(arr.flatten)
63
+ super(@array)
64
+ end
65
+
66
+ def scope(name)
67
+ if name.is_a?(Symbol)
68
+ if self.class.scopes.include?(name)
69
+ self.class.new(@array.select(&self.class.scopes[name]))
70
+ end
71
+ else
72
+ end
73
+ end
74
+
75
+ def [](*args)
76
+ if args.size == 1 && args.first.is_a?(Symbol)
77
+ unless self.class.finder.nil?
78
+ return @array.find { |e| self.class.finder.call(e) == args.first }
79
+ end
80
+ else
81
+ end
82
+ @array[*args]
83
+ end
84
+
85
+ %i(& + * - | clear collect collect! delete_if drop drop_while each
86
+ each_index keep_if first last map reject reject! reverse reverse!
87
+ reverse_each rotate rotate! sample select select! shift shuffle
88
+ shuffle! slice slice! sort sort! sort_by! take take_while uniq uniq!
89
+ values_at).each do |method|
90
+ define_method method do |*args, &block|
91
+ result = @array.send(method, *args, &block)
92
+ if result == @array
93
+ self
94
+ elsif result.is_a?(Array)
95
+ self.class.new(result)
96
+ else
97
+ result
98
+ end
99
+ end
100
+ end
101
+
102
+ def <<(obj)
103
+ return unless self.class.entity?(obj)
104
+ @array << obj
105
+ end
106
+
107
+ def []=(*args)
108
+ return unless self.class.entity?(args.last)
109
+ @array.send(:[]=, *args)
110
+ end
111
+
112
+ def to_a
113
+ @array
114
+ end
115
+
116
+ def to_ary
117
+ @array
118
+ end
119
+
120
+ %i(concat replace).each do |method|
121
+ define_method method do |other|
122
+ @array.send(method, self.class.select(other))
123
+ self
124
+ end
125
+ end
126
+
127
+ def fill(*args)
128
+ if block_given?
129
+ @array.fill(*args) do |index|
130
+ obj = yield index
131
+ self.class.entity?(obj) ? obj : @array[index]
132
+ end
133
+ else
134
+ return self unless self.class.entity?(args.first)
135
+ @array.fill(*args)
136
+ end
137
+ self
138
+ end
139
+
140
+ def insert(index, *other)
141
+ @array.insert(index, self.class.select(other))
142
+ self
143
+ end
144
+
145
+ def map!(&block)
146
+ array = @array
147
+ array_class = self.class
148
+ enum = Enumerator.new do |yielder|
149
+ array.replace(array.map do |entity|
150
+ obj = (yielder << entity)
151
+ array_class.entity?(obj) ? obj : nil
152
+ end.compact)
153
+ end
154
+ if block_given?
155
+ enum.each(&block)
156
+ self
157
+ else
158
+ enum
159
+ end
160
+ end
161
+
162
+ %i(push unshift).each do |method|
163
+ define_method method do |*args|
164
+ @array.send(method, *self.class.select(args))
165
+ self
166
+ end
167
+ end
168
+
169
+ %i(assoc combination compact compact! flatten flatten pack permutation
170
+ product rassoc repeated_combination repeated_permutation transpose
171
+ zip).each do |method|
172
+ define_method method do |*args|
173
+ fail(
174
+ RuntimError,
175
+ "Method #{method} is not allowed in #{self.class.name}"
176
+ )
177
+ end
178
+ end
179
+ end
180
+ end
181
+ end
@@ -0,0 +1,38 @@
1
+ require File.join %w(extend_it caller)
2
+ require File.join %w(extend_it symbolize)
3
+
4
+ using ExtendIt::Caller
5
+ using ExtendIt::Symbolize
6
+
7
+ module ExtendIt
8
+ module Asserts
9
+ private
10
+
11
+ if RUBY_VERSION >= '2.1.0'
12
+ def assert_symbol(*names, binding: nil)
13
+ return unless binding ||= caller_binding
14
+ names.each do |name|
15
+ name = name.ensure_symbol || next
16
+ var = binding.local_variable_get(name)
17
+ var = var.ensure_symbol || fail(
18
+ ArgumentError,
19
+ "Argument `#{name}` should be a Symbol or String",
20
+ caller[1..-1]
21
+ )
22
+ binding.local_variable_set(name, var)
23
+ end
24
+ end
25
+ else
26
+ def assert_symbol(*names, binding: nil)
27
+ return unless binding ||= caller_binding
28
+ names.each do |name|
29
+ name = name.ensure_symbol || next
30
+ binding.eval(
31
+ "#{name} = #{name}.ensure_symbol || fail(ArgumentError," \
32
+ " 'Argument `#{name}` should be a Symbol or String')"
33
+ )
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,105 @@
1
+ require File.join %w(extend_it symbolize)
2
+ require File.join %w(extend_it class)
3
+
4
+ using ExtendIt::Symbolize
5
+
6
+ module ExtendIt
7
+ module Callbacks
8
+ CALLBACKS = %i(before after around)
9
+
10
+ def self.included(base)
11
+ unless base.is_a?(Class)
12
+ fail RuntimeError, 'Can be included in classes only'
13
+ end
14
+ unless (class << base; self end).included_modules.include?(ExtendIt::Class)
15
+ fail RuntimeError, "#{base.name} should extend ExtendIt::Class"
16
+ end
17
+ base.extend(ClassMethods)
18
+ end
19
+
20
+ def self.extended(base)
21
+ fail RuntimeError, 'This module can\'t be extended'
22
+ end
23
+
24
+ def run_callbacks(*names, arguments: [], original_context: false)
25
+ # sanitize arguments
26
+ arguments = [] if arguments.nil?
27
+ arguments = [arguments] unless arguments.is_a?(Array)
28
+
29
+ parents = self.class.parents
30
+ parents_rev = parents.reverse
31
+
32
+ names.ensure_symbols.each do |name|
33
+ around = []
34
+ around_name = "@around_#{name}".to_sym
35
+ var_name = "@before_#{name}".to_sym
36
+ parents_rev.each do |p|
37
+ if p.instance_variable_defined?(around_name)
38
+ arr = p.instance_variable_get(around_name)
39
+ arr.each do |b|
40
+ if original_context == true
41
+ b.call(*arguments)
42
+ else
43
+ instance_exec(*arguments, &b)
44
+ end
45
+ end
46
+ around.concat(arr)
47
+ end
48
+ if p.instance_variable_defined?(var_name)
49
+ p.instance_variable_get(var_name).each do |b|
50
+ if original_context == true
51
+ b.call(*arguments)
52
+ else
53
+ instance_exec(*arguments, &b)
54
+ end
55
+ end
56
+ end
57
+ end
58
+ yield if block_given?
59
+ around.reverse.each do |b|
60
+ if original_context == true
61
+ b.call(*arguments)
62
+ else
63
+ instance_exec(*arguments, &b)
64
+ end
65
+ end
66
+ var_name = "@after_#{name}".to_sym
67
+ parents.each do |p|
68
+ if p.instance_variable_defined?(var_name)
69
+ p.instance_variable_get(var_name).each do |b|
70
+ if original_context == true
71
+ b.call(*arguments)
72
+ else
73
+ instance_exec(*arguments, &b)
74
+ end
75
+ end
76
+ end
77
+ end
78
+ end
79
+ end
80
+
81
+ module ClassMethods
82
+ def define_callbacks(*names, callbacks: [:before, :after])
83
+ callbacks = [:before, :after] unless callbacks.is_a?(Array)
84
+ callbacks.select! { |cb| CALLBACKS.include?(cb) }
85
+ names.each do |name|
86
+ name = name.symbolize || next
87
+ callbacks.each do |cb|
88
+ cb_name = "#{cb}_#{name}".to_sym
89
+ var_name = "@#{cb_name}".to_sym
90
+ define_singleton_method cb_name do |&block|
91
+ return if block.nil?
92
+ arr =
93
+ if instance_variable_defined?(var_name)
94
+ instance_variable_get(var_name)
95
+ else
96
+ instance_variable_set(var_name, [])
97
+ end
98
+ arr << block
99
+ end
100
+ end
101
+ end
102
+ end
103
+ end
104
+ end
105
+ end
@@ -0,0 +1,35 @@
1
+ require 'continuation' if RUBY_VERSION >= '1.9.0'
2
+
3
+ module ExtendIt
4
+ module Caller
5
+ # http://rubychallenger.blogspot.ru/2011/07/caller-binding.html
6
+ refine Object do
7
+ def caller_binding
8
+ cc, count = nil, 0
9
+ set_trace_func(lambda { |event, file, lineno, id, binding, klass|
10
+ if count == 2
11
+ set_trace_func nil
12
+ cc.call(binding)
13
+ elsif event == 'return'
14
+ count += 1
15
+ end
16
+ })
17
+ return callcc { |cont| cc = cont }
18
+ end
19
+
20
+ def caller_eval(str)
21
+ cc, ok = nil, false
22
+ set_trace_func(lambda { |event, file, lineno, id, binding, klass|
23
+ if ok
24
+ set_trace_func nil
25
+ cc.call(binding)
26
+ else
27
+ ok = event == "return"
28
+ end
29
+ })
30
+ return unless bb = callcc { |c| cc = c; nil }
31
+ eval(str, bb)
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,47 @@
1
+ require File.join %w(extend_it symbolize)
2
+
3
+ using ExtendIt::Symbolize
4
+
5
+ module ExtendIt
6
+ module Class
7
+ def self.extended(base)
8
+ base.instance_eval do
9
+ define_singleton_method :parents do
10
+ @parents ||= ancestors.take_while { |a| a != base }.concat([base])
11
+ end
12
+ end
13
+ end
14
+
15
+ def call_inherited(method_name, *args, base_first: false, &block)
16
+ arr = parents.select { |parent| parent.methods.include?(method_name) }
17
+ arr.reverse! if base_first == true
18
+ arr.reduce([]) { |a, e| a << e.send(method_name, *args, &block) }
19
+ end
20
+
21
+ def inherited_class_reader(*names)
22
+ names.ensure_symbols.each do |name|
23
+ var = "@#{name}"
24
+ define_singleton_method(name) do
25
+ p = parents.find { |parent| parent.instance_variable_defined?(var) }
26
+ p.nil? ? nil : p.instance_variable_get(var)
27
+ end
28
+ end
29
+ end
30
+
31
+ def class_attr_reader(*attrs)
32
+ attrs.flatten.uniq.each do |attr_name|
33
+ attr_name = attr_name.to_sym if attr_name.is_a?(String)
34
+ next unless attr_name.is_a?(Symbol)
35
+ next if instance_methods.include?(attr_name)
36
+ var_name = "@#{attr_name}".to_sym
37
+ if methods.include?(attr_name)
38
+ define_method(attr_name) { self.class.send(attr_name) }
39
+ elsif instance_variable_defined?(var_name)
40
+ define_method attr_name do
41
+ self.class.instance_variable_get(var_name)
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,94 @@
1
+ require File.join %w(extend_it asserts)
2
+ require File.join %w(extend_it symbolize)
3
+
4
+ using ExtendIt::Symbolize
5
+
6
+ module ExtendIt
7
+ module Dsl
8
+ include Asserts
9
+
10
+ def dsl_accessor(*names, default: nil, &setter)
11
+ names.flatten.uniq.each do |name|
12
+ name = name.symbolize || next
13
+ var_name = "@#{name}".to_sym
14
+ setter_name = "#{name}=".to_sym
15
+ define_method setter_name do |*args|
16
+ obj =
17
+ if setter.nil?
18
+ default || args.first
19
+ else
20
+ instance_exec(*args, &setter)
21
+ end
22
+ instance_variable_set(var_name, obj)
23
+ end
24
+ define_method name do |*args, &block|
25
+ if args.empty? && block.nil?
26
+ if instance_variable_defined?(var_name)
27
+ instance_variable_get(var_name)
28
+ else
29
+ obj = setter.nil? ? default : instance_exec(&setter)
30
+ instance_variable_set(var_name, obj)
31
+ end
32
+ else
33
+ obj = send(setter_name, *args)
34
+ obj.instance_eval(&block) unless obj.nil? || block.nil?
35
+ obj
36
+ end
37
+ end
38
+ end
39
+ end
40
+
41
+ def dsl_boolean(*names, default: true)
42
+ default = default == true
43
+ names.flatten.uniq.each do |name|
44
+ name = name.symbolize || next
45
+ var_name = "@#{name}".to_sym
46
+ define_method "#{name}=" do |value = default|
47
+ instance_variable_set(var_name, value == true)
48
+ end
49
+ define_method "#{name}?" do
50
+ if instance_variable_defined?(var_name)
51
+ instance_variable_get(var_name) == true
52
+ else
53
+ instance_variable_set(var_name, default)
54
+ end
55
+ end
56
+ end
57
+ end
58
+
59
+ def dsl_block(*names)
60
+ names.flatten.uniq.each do |name|
61
+ var_name = "@#{name}".to_sym
62
+ define_method name do |*args, &block|
63
+ if block.nil?
64
+ if instance_variable_defined?(var_name)
65
+ instance_variable_get(var_name)
66
+ # instance_exec(*args, &b) unless b.nil?
67
+ # else
68
+ # nil
69
+ end
70
+ else
71
+ instance_variable_set(var_name, block)
72
+ end
73
+ end
74
+ end
75
+ end
76
+
77
+ def dsl_use_hash(hash_name)
78
+ assert_symbol(:hash_name, binding: binding)
79
+ define_method "use_#{hash_name}" do |*names, except: nil|
80
+ hash = instance_variable_get("@#{hash_name}")
81
+ if names.empty?
82
+ names = hash.keys
83
+ else
84
+ names = names.ensure_symbols & hash.keys
85
+ end
86
+ except = [except] if !except.nil? && !except.is_a?(Array)
87
+ if except.is_a?(Array)
88
+ names -= except.ensure_symbols
89
+ end
90
+ hash.delete_if { |k, v| !names.include?(k) }
91
+ end
92
+ end
93
+ end
94
+ end
@@ -0,0 +1,6 @@
1
+ module ExtendIt
2
+ module Refines; end
3
+ end
4
+
5
+ glob = File.extend_path(File.join(%w(.. refines ** *.rb)), __FILE__)
6
+ Dir[glob].each { |file| require(file) }
@@ -0,0 +1,39 @@
1
+ module ExtendIt
2
+ module Symbolize
3
+ refine Object do
4
+ def symbolize
5
+ nil
6
+ end
7
+
8
+ def ensure_symbol
9
+ nil
10
+ end
11
+ end
12
+
13
+ refine String do
14
+ def symbolize
15
+ to_sym
16
+ end
17
+
18
+ def ensure_symbol
19
+ to_sym
20
+ end
21
+ end
22
+
23
+ refine Symbol do
24
+ def symbolize
25
+ self
26
+ end
27
+
28
+ def ensure_symbol
29
+ self
30
+ end
31
+ end
32
+
33
+ refine Array do
34
+ def ensure_symbols
35
+ flatten.map { |x| x.ensure_symbol }.compact
36
+ end
37
+ end
38
+ end
39
+ end
data/lib/extend_it.rb ADDED
@@ -0,0 +1,5 @@
1
+ require File.join %w(extend_it refines)
2
+ #require File.join %w(extend_it caller)
3
+ #require File.join %w(extend_it array_of)
4
+ #require File.join %w(extend_it dsl)
5
+
@@ -0,0 +1,3 @@
1
+ test:
2
+ adapter: sqlite3
3
+ database: db/combustion_test.sqlite
@@ -0,0 +1,3 @@
1
+ Rails.application.routes.draw do
2
+ #
3
+ end
@@ -0,0 +1,3 @@
1
+ ActiveRecord::Schema.define do
2
+ #
3
+ end
@@ -0,0 +1 @@
1
+ *.log
File without changes
@@ -0,0 +1,20 @@
1
+ require 'spec_helper'
2
+
3
+ describe AdminIt::CollectionContext do
4
+ let(:context_class) { described_class.create_class(:test, object_resource) }
5
+ subject { context_class.new }
6
+
7
+ # class DSL methods
8
+ it { expect(context_class.collection?).to be_true }
9
+ it { expect(context_class.single?).to be_false }
10
+
11
+ # instance methods
12
+ it { expect(subject.collection?).to be_true }
13
+ it { expect(subject.single?).to be_false }
14
+
15
+ it 'has entities setter' do
16
+ arr = [object_class.new, object_class.new]
17
+ subject.entities = arr
18
+ expect(subject.entities).to be_kind_of Enumerator
19
+ end
20
+ end
@@ -0,0 +1,28 @@
1
+ require 'spec_helper'
2
+
3
+ describe AdminIt::Context do
4
+ let(:context_class) { described_class.create_class(:test, object_resource) }
5
+ subject { context_class.new }
6
+
7
+ # DSL methods
8
+ it { expect(context_class.collection?).to be_false }
9
+ it { expect(context_class.single?).to be_false }
10
+
11
+ # instance methods
12
+ it { expect(subject.collection?).to be_false }
13
+ it { expect(subject.single?).to be_false }
14
+
15
+ it 'sets entity class to Resource entity class' do
16
+ expect(subject.entity_class).to eq object_resource.entity_class
17
+ end
18
+
19
+ it 'sets fields to empty array by default' do
20
+ expect(subject.class.fields).to eq []
21
+ end
22
+
23
+ it 'extends AdminIt::Object context by default' do
24
+ expect(subject.class.included_modules)
25
+ .to include AdminIt::ObjectData::Context
26
+ end
27
+ end
28
+
@@ -0,0 +1,26 @@
1
+ require 'spec_helper'
2
+
3
+ describe AdminIt::SingleContext do
4
+ let(:context_class) { described_class.create_class(:test, object_resource) }
5
+
6
+ describe 'DSL methods' do
7
+ subject { context_class }
8
+
9
+ it { expect(subject.collection?).to be_false }
10
+ it { expect(subject.single?).to be_true }
11
+ end
12
+
13
+ describe 'instance methods' do
14
+ subject { context_class.new }
15
+
16
+ it 'sets empty emtity for nil values' do
17
+ subject.entity = nil
18
+ expect(subject.values).to be_kind_of Hash
19
+ end
20
+
21
+ it 'sets entity Object' do
22
+ subject.entity = Object.new
23
+ expect(subject.values).to be_kind_of Hash
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,29 @@
1
+ require 'spec_helper'
2
+
3
+ describe AdminIt::ObjectData::Context do
4
+ before do
5
+ object_class.class_eval do
6
+ def r; 'r_value'; end
7
+ def rw; @rw_value ||= 'rw_value'; end
8
+ def rw=(value); @rw_value = value; end
9
+ def w=(value); @w_value = value; end
10
+ def bool?; true; end
11
+ def wrong_getter_arity(test); true; end
12
+ def wrong_setter1_arity=(test, me); true; end
13
+ def wrong_setter2_arity=; true; end
14
+ end
15
+ end
16
+
17
+ it 'retrieves all fields for ancestors' do
18
+ fields = object_context.fields(scope: :all)
19
+ expect(fields.size).to eq 3
20
+ end
21
+
22
+ it 'reads fields' do
23
+ single_object_context.entity = object
24
+ expect(single_object_context.values).to eq r: 'r_value', rw: 'rw_value'
25
+ end
26
+ end
27
+
28
+ describe AdminIt::ObjectData::Field do
29
+ end