calco 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +34 -0
  3. data/Gemfile +4 -0
  4. data/Gemfile.lock +26 -0
  5. data/LICENSE +21 -0
  6. data/LICENSE.txt +22 -0
  7. data/README.md +360 -0
  8. data/Rakefile +1 -0
  9. data/calco.gemspec +23 -0
  10. data/examples/ages.ods +0 -0
  11. data/examples/compute_cells.rb +61 -0
  12. data/examples/data.csv +8 -0
  13. data/examples/example.rb +97 -0
  14. data/examples/multiplication_tables.ods +0 -0
  15. data/examples/multiplication_tables.rb +73 -0
  16. data/examples/register_function.rb +44 -0
  17. data/examples/using_date_functions.rb +42 -0
  18. data/examples/write_csv.rb +68 -0
  19. data/examples/write_ods.rb +69 -0
  20. data/lib/calco.rb +17 -0
  21. data/lib/calco/core_ext/fixnum.rb +22 -0
  22. data/lib/calco/core_ext/float.rb +22 -0
  23. data/lib/calco/core_ext/range.rb +15 -0
  24. data/lib/calco/core_ext/string.rb +20 -0
  25. data/lib/calco/date_functions.rb +13 -0
  26. data/lib/calco/definition_dsl.rb +127 -0
  27. data/lib/calco/elements/aggregator.rb +17 -0
  28. data/lib/calco/elements/builtin_function.rb +84 -0
  29. data/lib/calco/elements/constant.rb +31 -0
  30. data/lib/calco/elements/current.rb +19 -0
  31. data/lib/calco/elements/element.rb +31 -0
  32. data/lib/calco/elements/empty.rb +9 -0
  33. data/lib/calco/elements/formula.rb +42 -0
  34. data/lib/calco/elements/if.rb +26 -0
  35. data/lib/calco/elements/operation.rb +34 -0
  36. data/lib/calco/elements/operator.rb +17 -0
  37. data/lib/calco/elements/or.rb +26 -0
  38. data/lib/calco/elements/value_extractor.rb +42 -0
  39. data/lib/calco/elements/variable.rb +35 -0
  40. data/lib/calco/engines/calculator_builtin_functions.rb +32 -0
  41. data/lib/calco/engines/csv_engine.rb +80 -0
  42. data/lib/calco/engines/default_engine.rb +140 -0
  43. data/lib/calco/engines/office_engine.rb +263 -0
  44. data/lib/calco/engines/simple_calculator_engine.rb +151 -0
  45. data/lib/calco/math_functions.rb +9 -0
  46. data/lib/calco/sheet.rb +363 -0
  47. data/lib/calco/spreadsheet.rb +172 -0
  48. data/lib/calco/string_functions.rb +9 -0
  49. data/lib/calco/style.rb +15 -0
  50. data/lib/calco/time_functions.rb +12 -0
  51. data/lib/calco/version.rb +3 -0
  52. data/spec/absolute_references_spec.rb +86 -0
  53. data/spec/builtin_functions_spec.rb +161 -0
  54. data/spec/calculator_engine_spec.rb +251 -0
  55. data/spec/conditions_spec.rb +118 -0
  56. data/spec/content_change_spec.rb +190 -0
  57. data/spec/csv_engine_spec.rb +324 -0
  58. data/spec/default_engine_spec.rb +135 -0
  59. data/spec/definitions_spec.rb +65 -0
  60. data/spec/errors_spec.rb +189 -0
  61. data/spec/functions_spec.rb +251 -0
  62. data/spec/header_row_spec.rb +63 -0
  63. data/spec/range_spec.rb +189 -0
  64. data/spec/sheet_selections_spec.rb +49 -0
  65. data/spec/sheet_spec.rb +229 -0
  66. data/spec/smart_types_spec.rb +43 -0
  67. data/spec/spreadsheet_spec.rb +80 -0
  68. data/spec/styles_spec.rb +29 -0
  69. data/spec/variables_spec.rb +41 -0
  70. metadata +158 -0
@@ -0,0 +1,43 @@
1
+ require 'calco'
2
+
3
+ describe "Implicit type conversion" do
4
+
5
+ it "detects time values" do
6
+
7
+ doc = spreadsheet do
8
+
9
+ definitions do
10
+
11
+ set time: '8:11'
12
+ set not_time: '13,01'
13
+
14
+ end
15
+
16
+ end
17
+
18
+ expect(doc.current[:time]).to be_a(Time)
19
+ expect(doc.current[:not_time]).to be_a(String)
20
+
21
+ end
22
+
23
+ it "detects date values" do
24
+
25
+ doc = spreadsheet do
26
+
27
+ definitions do
28
+
29
+ set date1: '2013-06-17'
30
+ set date2: '2013/06/17'
31
+ set not_date: '2013 06 17'
32
+
33
+ end
34
+
35
+ end
36
+
37
+ expect(doc.current[:date1]).to be_a(Date)
38
+ expect(doc.current[:date2]).to be_a(Date)
39
+ expect(doc.current[:not_date]).to be_a(String)
40
+
41
+ end
42
+
43
+ end
@@ -0,0 +1,80 @@
1
+ require 'calco'
2
+ require 'calco/engines/csv_engine'
3
+
4
+ RSpec.configure do |c|
5
+ c.alias_example_to :the
6
+ end
7
+
8
+ module Calco
9
+
10
+ describe Spreadsheet do
11
+
12
+ the 'Spreadsheet#row method returns value of current Sheet#row' do
13
+
14
+ doc = create_sheet
15
+
16
+ doc.sheet("sheet 1")
17
+
18
+ expect(doc.row_to_hash(7)).to eq({
19
+ 'A' => '25',
20
+ 'B' => "2013-09-21",
21
+ 'C' => 'A7*7'
22
+ })
23
+
24
+ end
25
+
26
+ the 'Spreadsheet#engine= method changes the engine' do
27
+
28
+ doc = create_sheet
29
+
30
+ doc.sheet("sheet 2")
31
+
32
+ expect(doc.row_to_hash(7)).to eq({
33
+ 'A' => "2013-09-21",
34
+ 'B' => '2013-09-21; apply_style(IF(self=TODAY();"red";"default"))'
35
+ })
36
+
37
+ doc.engine = Calco::CSVEngine.new
38
+
39
+ expect(doc.row_to_hash(7)).to eq({
40
+ 'A' => '=DATEVALUE("2013-09-21")',
41
+ 'B' => '=DATEVALUE("2013-09-21")+STYLE(IF(CURRENT()=TODAY();"red";"default"))'
42
+ })
43
+
44
+ end
45
+
46
+ def create_sheet
47
+
48
+ spreadsheet do
49
+
50
+ definitions do
51
+
52
+ set value: 25
53
+ set some_date: "2013-09-21"
54
+
55
+ function times_7: value * 7
56
+
57
+ end
58
+
59
+ sheet "sheet 1" do
60
+
61
+ column value_of(:value)
62
+ column value_of(:some_date)
63
+ column :times_7
64
+
65
+ end
66
+
67
+ sheet "sheet 2" do
68
+
69
+ column value_of(:some_date)
70
+ column value_of(:some_date), style: _if(current == today(), 'red', 'default')
71
+
72
+ end
73
+
74
+ end
75
+
76
+ end
77
+
78
+ end
79
+
80
+ end
@@ -0,0 +1,29 @@
1
+ require 'calco'
2
+
3
+ describe "Spreadsheet's sheet" do
4
+
5
+ it "supports dynamic styles" do
6
+
7
+ doc = spreadsheet do
8
+
9
+ definitions do
10
+
11
+ set price: 14.4
12
+
13
+ end
14
+
15
+ sheet do
16
+
17
+ column value_of(:price), style: _if(current > 120, 'Alert', 'default')
18
+
19
+ end
20
+
21
+ end
22
+
23
+ row = doc.row(1)
24
+
25
+ expect(row[0]).to eq('14.4; apply_style(IF(self>120;"Alert";"default"))')
26
+
27
+ end
28
+
29
+ end
@@ -0,0 +1,41 @@
1
+ require 'calco'
2
+
3
+ RSpec.configure do |c|
4
+ c.alias_example_to :we_can
5
+ end
6
+
7
+ describe "With variables we can" do
8
+
9
+ we_can "assign a value to a variable name" do
10
+
11
+ doc = spreadsheet do
12
+
13
+ definitions do
14
+ set name: 'John'
15
+ end
16
+
17
+ end
18
+
19
+ expect(doc.current[:name]).to eq('John')
20
+
21
+ end
22
+
23
+ we_can "change the value of a variable" do
24
+
25
+ doc = spreadsheet do
26
+
27
+ definitions do
28
+ set name: 'John'
29
+ end
30
+
31
+ end
32
+
33
+ sheet = doc.current
34
+
35
+ sheet[:name] = 99
36
+
37
+ expect(sheet[:name]).to eq(99)
38
+
39
+ end
40
+
41
+ end
metadata ADDED
@@ -0,0 +1,158 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: calco
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Jean Lazarou
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-09-07 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rspec
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rubyzip
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 1.1.0
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 1.1.0
41
+ description: Implements a DSL used to create and define the content of spreadsheet
42
+ documents
43
+ email:
44
+ - jean.lazarou@alef1.org
45
+ executables: []
46
+ extensions: []
47
+ extra_rdoc_files: []
48
+ files:
49
+ - ".gitignore"
50
+ - Gemfile
51
+ - Gemfile.lock
52
+ - LICENSE
53
+ - LICENSE.txt
54
+ - README.md
55
+ - Rakefile
56
+ - calco.gemspec
57
+ - examples/ages.ods
58
+ - examples/compute_cells.rb
59
+ - examples/data.csv
60
+ - examples/example.rb
61
+ - examples/multiplication_tables.ods
62
+ - examples/multiplication_tables.rb
63
+ - examples/register_function.rb
64
+ - examples/using_date_functions.rb
65
+ - examples/write_csv.rb
66
+ - examples/write_ods.rb
67
+ - lib/calco.rb
68
+ - lib/calco/core_ext/fixnum.rb
69
+ - lib/calco/core_ext/float.rb
70
+ - lib/calco/core_ext/range.rb
71
+ - lib/calco/core_ext/string.rb
72
+ - lib/calco/date_functions.rb
73
+ - lib/calco/definition_dsl.rb
74
+ - lib/calco/elements/aggregator.rb
75
+ - lib/calco/elements/builtin_function.rb
76
+ - lib/calco/elements/constant.rb
77
+ - lib/calco/elements/current.rb
78
+ - lib/calco/elements/element.rb
79
+ - lib/calco/elements/empty.rb
80
+ - lib/calco/elements/formula.rb
81
+ - lib/calco/elements/if.rb
82
+ - lib/calco/elements/operation.rb
83
+ - lib/calco/elements/operator.rb
84
+ - lib/calco/elements/or.rb
85
+ - lib/calco/elements/value_extractor.rb
86
+ - lib/calco/elements/variable.rb
87
+ - lib/calco/engines/calculator_builtin_functions.rb
88
+ - lib/calco/engines/csv_engine.rb
89
+ - lib/calco/engines/default_engine.rb
90
+ - lib/calco/engines/office_engine.rb
91
+ - lib/calco/engines/simple_calculator_engine.rb
92
+ - lib/calco/math_functions.rb
93
+ - lib/calco/sheet.rb
94
+ - lib/calco/spreadsheet.rb
95
+ - lib/calco/string_functions.rb
96
+ - lib/calco/style.rb
97
+ - lib/calco/time_functions.rb
98
+ - lib/calco/version.rb
99
+ - spec/absolute_references_spec.rb
100
+ - spec/builtin_functions_spec.rb
101
+ - spec/calculator_engine_spec.rb
102
+ - spec/conditions_spec.rb
103
+ - spec/content_change_spec.rb
104
+ - spec/csv_engine_spec.rb
105
+ - spec/default_engine_spec.rb
106
+ - spec/definitions_spec.rb
107
+ - spec/errors_spec.rb
108
+ - spec/functions_spec.rb
109
+ - spec/header_row_spec.rb
110
+ - spec/range_spec.rb
111
+ - spec/sheet_selections_spec.rb
112
+ - spec/sheet_spec.rb
113
+ - spec/smart_types_spec.rb
114
+ - spec/spreadsheet_spec.rb
115
+ - spec/styles_spec.rb
116
+ - spec/variables_spec.rb
117
+ homepage: https://github.com/jeanlazarou/calco
118
+ licenses: []
119
+ metadata: {}
120
+ post_install_message:
121
+ rdoc_options: []
122
+ require_paths:
123
+ - lib
124
+ required_ruby_version: !ruby/object:Gem::Requirement
125
+ requirements:
126
+ - - ">="
127
+ - !ruby/object:Gem::Version
128
+ version: '0'
129
+ required_rubygems_version: !ruby/object:Gem::Requirement
130
+ requirements:
131
+ - - ">="
132
+ - !ruby/object:Gem::Version
133
+ version: '0'
134
+ requirements: []
135
+ rubyforge_project:
136
+ rubygems_version: 2.2.2
137
+ signing_key:
138
+ specification_version: 4
139
+ summary: DSL for spreadsheet documents
140
+ test_files:
141
+ - spec/absolute_references_spec.rb
142
+ - spec/builtin_functions_spec.rb
143
+ - spec/calculator_engine_spec.rb
144
+ - spec/conditions_spec.rb
145
+ - spec/content_change_spec.rb
146
+ - spec/csv_engine_spec.rb
147
+ - spec/default_engine_spec.rb
148
+ - spec/definitions_spec.rb
149
+ - spec/errors_spec.rb
150
+ - spec/functions_spec.rb
151
+ - spec/header_row_spec.rb
152
+ - spec/range_spec.rb
153
+ - spec/sheet_selections_spec.rb
154
+ - spec/sheet_spec.rb
155
+ - spec/smart_types_spec.rb
156
+ - spec/spreadsheet_spec.rb
157
+ - spec/styles_spec.rb
158
+ - spec/variables_spec.rb